Control List Screen - cressie176/Load64 GitHub Wiki
View and manage the control mappings for a controller family or controller device.
When used for a controller family:
┌──────────────────────────────────────────────────────────────────────────────┐
│ <Owner> > Controls [Back] │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ CONTROLS LIST │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ Control Canonical Event │ │
│ ├────────────────────────────────────────────────────────────────────────┤ │
│ │ > A Button South button_1 │ │
│ │ B Button East button_0 │ │
│ │ X Button West button_2 │ │
│ │ Y Button North button_3 │ │
│ │ — D-Pad Up — │ │
│ │ — D-Pad Down — │ │
│ │ — D-Pad Left — │ │
│ │ — D-Pad Right — │ │
│ │ Start Start button_7 │ │
│ │ Back Back button_8 │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
└──────────────────────────────────────────────────────────────────────────────┘
Note: The screen design above is truncated for brevity. At runtime the list contains one row for every canonical control name, not just the subset shown here.
When used for a controller device:
┌──────────────────────────────────────────────────────────────────────────────┐
│ <Owner> > Controls [Back] │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ CONTROLS LIST │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ Control Canonical Event Source │ │
│ ├────────────────────────────────────────────────────────────────────────┤ │
│ │ > A Button South button_1 — │ │
│ │ B Button East button_0 — │ │
│ │ X Button West button_2 Logitech │ │
│ │ Y Button North button_3 Logitech │ │
│ │ — D-Pad Up — Logitech │ │
│ │ — D-Pad Down — Logitech │ │
│ │ — D-Pad Left — Logitech │ │
│ │ — D-Pad Right — Logitech │ │
│ │ Start Start button_7 Logitech │ │
│ │ Back Back button_8 Logitech │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
└──────────────────────────────────────────────────────────────────────────────┘
Note: The screen design above is truncated for brevity. At runtime the list contains one row for every canonical control name, not just the subset shown here.
Focusable: [Back] CTA only
Interactive: [Back] CTA only
Purpose: Display the owner name and navigate back
<Owner> is the full breadcrumb path to the owner. i.e.
| Owner | Owner Template | Example |
|---|---|---|
| Controller Families | Controller Families > | Controller Families > Logitech > Controls |
| Controller | Controllers > | Controllers > Logitech Dual Sense > Controls |
Returns to the previous screen. The destination is context-dependent:
- Normal navigation (e.g. reached via [Manage] from the Controller Family List screen): returns to the Controller Family List screen.
- Post-add navigation (reached via [Add] on the Controller Family List screen → [Save] on the Controller Family Edit screen): returns directly to the Controller Family List screen, bypassing the edit screen. The edit screen is already complete and there is nothing to return to there.
Type: Single-selection vertical list
Focusable: Yes (primary focus region)
Interactive: Yes
Order: Fixed natural order of canonical names
Purpose: View and edit control mappings
All canonical controls are always shown, whether mapped or unmapped. Each row shows:
- Control Name (label printed on the physical button, e.g.
A) — shown as—if unmapped - Canonical Name (LoadC64 canonical control, e.g.
Button South) - Event (OS event identifier, e.g.
button_1) — shown as—if unmapped - Source (controller context only):
—if defined on this controller, or<Family Name>if inherited from the assigned family
Selecting any row opens the Control Edit screen pre-populated with its current values, or empty if unmapped. In the controller context, selecting an inherited row pre-populates the editor with the family's values; saving creates a new controller-level mapping for that control.
Available on any mapped row (Control Name is not —). Not available on unmapped rows.
| Action | Behaviour |
|---|---|
| Clear | Opens a confirmation overlay before clearing the focused control mapping |
Clear confirmation overlay:
┌──────────────────────────────────────────────────────────────────────────────┐
│ ┌──────────────────────────────┐ │
│ │ Clear <Control Name>? │ │
│ │ │ │
│ │ > Yes │ │
│ │ No │ │
│ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘
| Option | Behaviour |
|---|---|
| Yes | Clear the control name and event, leaving the canonical slot unmapped |
| No | Close the overlay and return focus to the list |
Two separate menus apply depending on the row type.
On controller-level rows (Source column shows —):
| Action | Availability | Behaviour |
|---|---|---|
| Clear | Only when the row is mapped (Control Name is not —) |
Opens a confirmation overlay before clearing the focused controller-level mapping |
| Delete | Only when a family equivalent exists to fall back to | Opens a confirmation overlay before deleting the focused controller-level mapping |
Clear removes the control name and event, leaving the canonical slot explicitly unmapped at the controller level. The family value is not restored — use Delete to fall back to the family instead.
Clear confirmation overlay:
┌──────────────────────────────────────────────────────────────────────────────┐
│ ┌──────────────────────────────┐ │
│ │ Clear <Control Name>? │ │
│ │ │ │
│ │ > Yes │ │
│ │ No │ │
│ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘
| Option | Behaviour |
|---|---|
| Yes | Clear the control name and event, leaving the canonical slot unmapped |
| No | Close the overlay and return focus to the list |
Delete confirmation overlay:
┌──────────────────────────────────────────────────────────────────────────────┐
│ ┌──────────────────────────────┐ │
│ │ Delete <Control Name>? │ │
│ │ │ │
│ │ > Yes │ │
│ │ No │ │
│ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘
| Option | Behaviour |
|---|---|
| Yes | Delete the control mapping and return focus to the list |
| No | Close the overlay and return focus to the list |
Deleting a controller-level mapping restores the inherited value from the assigned family if one exists, or removes the control entirely if no family equivalent exists.
On inherited rows (Source column shows <Family Name>): no context menu is available.
Focusable: No
Interactive: No
Purpose: Display contextual hints and confirmation messages
When an inherited row is focused (controller context only):
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
│ Inherited from <Family Name> (Controller Family). Select to override. │
└──────────────────────────────────────────────────────────────────────────────┘
After saving a mapping:
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
│ <Control Name> saved │
└──────────────────────────────────────────────────────────────────────────────┘
After clearing a mapping:
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
│ <Canonical Name> cleared │
└──────────────────────────────────────────────────────────────────────────────┘
After deleting a mapping:
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR │
│ <Control Name> deleted │
└──────────────────────────────────────────────────────────────────────────────┘