Control List Screen - cressie176/Load64 GitHub Wiki

Primary Purpose

View and manage the control mappings for a controller family or controller device.

Main Screen Design

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.

TOP BAR

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

[Back] CTA

Returns to the previous screen. The destination is context-dependent:

CONTROLS LIST

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.

Context Menu (family context)

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

Context Menu (controller context)

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.

BOTTOM BAR

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                                                      │
└──────────────────────────────────────────────────────────────────────────────┘
⚠️ **GitHub.com Fallback** ⚠️