Add free-text notes per button/encoder action
Lets you record what a binding actually does (e.g. "Save in Fusion
360") alongside the auto-generated label ("Strg+S"). Notes live in a
new "note" field on every action dict, purely local like profile
names -- the firmware struct has no room for strings, and
pack_config/unpack_config already only touch type/data so the extra
key round-trips harmlessly.
Two things had to be handled carefully: changing a button's key/type
must not wipe its note (all set_button_*/set_encoder_* setters and the
edit dialog now carry the previous note forward), and re-reading from
the board must not erase notes either, since the firmware doesn't know
about them -- versapad_combined.merge_notes() restores them onto the
freshly-fetched state by button/encoder index.
Editable via the Programmiermodus dialog (new text field), visible on
both the desktop card (grown from 84 to 114px to fit it) and the
browser view. MCP server gets set_button_note()/set_encoder_note() so
notes can be set programmatically too.
This commit is contained in:
parent
9f0ae12794
commit
4b5da69174
8 changed files with 173 additions and 41 deletions
12
AGENTS.md
12
AGENTS.md
|
|
@ -93,6 +93,18 @@ Dokumentation und Verifikation unten für die Größeneinschätzung).
|
|||
(`profile_names`) — die Firmware-Structs haben keinen Platz für einen
|
||||
String (Header exakt 32B, jedes Profil exakt 236B, alles verplant). Sie
|
||||
landen nie aufs Board, egal welcher Schreibpfad benutzt wird.
|
||||
- **Notizen** (freier Text je Button/Encoder-Aktion, seit 2026-08-15) sind
|
||||
aus demselben Grund rein lokal: leben im `"note"`-Feld JEDER Action
|
||||
(`{"type","data","note"}`), nicht in einer separaten Struktur. `to_binary`/
|
||||
`pack_config` ignorieren das Feld beim Schreiben (liest nur type/data),
|
||||
`from_binary` liefert frisch vom Board immer `note=""` (Board kennt keine
|
||||
Notizen) — `versapad_combined.merge_notes(neu, alt)` kopiert bestehende
|
||||
Notizen nach jedem `load_from_board()`/`fetch_from_board()` zurück, sonst
|
||||
gingen sie bei jedem Board-Refresh verloren. Action-Typ wechseln
|
||||
(`set_button_key` etc.) darf die Notiz NICHT loeschen (baut die neue
|
||||
Action ueber `_replace_action()`/`dlg.action["note"]` mit der alten Notiz),
|
||||
nur `set_button_note()`/`set_encoder_note()`/das Notiz-Feld im
|
||||
Programmiermodus-Dialog aendern sie gezielt.
|
||||
- Der COM-Port ist exklusiv. Live-Sync und Programmiermodus schalten sich
|
||||
gegenseitig aus (ein `VersaPadLink` kann nicht von zwei Konsumenten
|
||||
gleichzeitig genutzt werden); VersaGUI läuft als Tray-App dauerhaft im
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue