clear the selection with Q, and drop it on entering a build mode
Implements the requirements committed in 731b887.
Q becomes a three-way branch in the action table, which is the layer that owns
what an input does: ExitMode while a mode is active, the new ClearSelection
while something is selected, EnterDeconstruct otherwise. The three partition
the situations between them, so resolution stays first-match-wins over
available actions and the handler never re-derives the precedence -- which is
why ClearSelection gets its own event rather than joining ModeCancel on Q.
GameWorldView clears the selection at each of the three events that enter a
mode; those are the only ways in, whichever button or key the player used. No
clear is needed where ModeCancel falls through to deconstruct mode: Q resolves
to ClearSelection while anything is selected, so there is nothing left by then.
The Selection context's Q row reads "Clear selection", sits last as the row
that hands the context back does everywhere, and carries the exit badge
styling -- one key that backs out should look the same wherever it appears.
Requirements follow that last point in REQ-UI-CONTROLS-CARD and
REQ-UI-CONTROLS-CONTENT.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ne3mejABZoLWKLh8fgpM3x
This commit is contained in:
@@ -57,14 +57,17 @@ QWidget* makeRow(ControlAction action, const ControlContext& context, QWidget* p
|
||||
|
||||
// Every badge is rendered from the binding the resolver matches, so a chip cannot
|
||||
// claim a key that does nothing (REQ-UI-CONTROLS-ACCURACY). The chips of the row
|
||||
// that leaves the mode are the ones marked, not its label (REQ-UI-CONTROLS-CARD).
|
||||
const bool exitsMode = (action == ControlAction::ExitMode);
|
||||
// that leaves the context are the ones marked, not its label (REQ-UI-CONTROLS-CARD):
|
||||
// leaving a build mode and clearing the selection are the same gesture to the player,
|
||||
// one key that hands the context back, so they are marked alike.
|
||||
const bool backsOut = (action == ControlAction::ExitMode
|
||||
|| action == ControlAction::ClearSelection);
|
||||
const std::vector<ControlBinding> bindings = getControlActionBindings(action, context);
|
||||
for (const ControlBinding& binding : bindings)
|
||||
{
|
||||
QLabel* badge = new QLabel(getControlBindingBadge(binding), row);
|
||||
badge->setObjectName(exitsMode ? QStringLiteral("controlBadgeExit")
|
||||
: QStringLiteral("controlBadge"));
|
||||
badge->setObjectName(backsOut ? QStringLiteral("controlBadgeExit")
|
||||
: QStringLiteral("controlBadge"));
|
||||
layout->addWidget(badge);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user