3.4 KiB
ConfigForm
Datei: ConfigForm.cs
Verantwortung
Hauptkonfigurationsfenster: wählt eines von drei Profilen, zeigt dessen 20
MX-Buttons und 4 Encoder, öffnet ActionDialog bei Klick und speichert Config
plus Makros auf das Board.
Oberhalb des Tasten-Grids befindet sich die Profilauswahl für Profil 1 bis 3.
Layout
┌── Tasten (GroupBox) ──────────────────────────────────────────┐
│ TableLayoutPanel 4 Spalten × 5 Zeilen │
│ Jede Zelle = Button mit LED-Hintergrundfarbe + Aktionstext │
└───────────────────────────────────────────────────────────────┘
┌── Encoder (GroupBox) ─────────────────────────────────────────┐
│ Header: SW / CW / CCW │
│ 4 Zeilen × 3 Buttons (ENC 0–3) │
└───────────────────────────────────────────────────────────────┘
[Auf Board speichern] [Ping] [Exportieren] [Importieren] [Schließen]
FixedSingle-Border, StartPosition = CenterScreen, kein Maximieren.
MX-Button-Darstellung (RefreshMxButton)
| Animation | Hintergrund | Textfarbe |
|---|---|---|
| ColorCycle | (40, 40, 40) dunkelgrau |
Weiß |
| Andere | LedBase[mxIdx] |
Schwarz/Weiß nach Luminanz |
Text = action.Display + animName (z.B. "Strg+C [Blinken]").
Luminanz-Formel für Textfarben-Kontrast: (R*299 + G*587 + B*114) / 1000
mx_idx ↔ Physisches Layout
mx_idx = col * 5 + row (col=0..3, row=0..4)
Entspricht key_id - 5 in der Firmware. Im TableLayoutPanel: Spalte=col, Zeile=row.
Speichern (OnSave)
Task.Run(() => {
bool cfgOk = _serial.SendConfig(_config); // wartet auf ACK/NACK
bool macroOk = _serial.SendMacros(_macros);
InvokeOnUi(() => { /* Button-Text + Enabled zurücksetzen */ });
});
Save-Button wird während der Übertragung deaktiviert, Text wechselt zu "Wird gesendet...".
Save-Button ist nur aktiviert wenn Board verbunden (_serial.IsConnected).
Config und Makros werden sequenziell gesendet; ein gemeinsamer Transfer-Lock
verhindert parallele Blob-Transfers.
Profile
Die Profilauswahl setzt ActiveProfileIndex und schaltet alle Komfortzugriffe
von DeviceConfig auf das gewählte Profil um. RefreshAll() synchronisiert
die Auswahl nach Board-Reload oder JSON-Import und zeichnet anschließend die
20 MX- und 12 Encoder-Schaltflächen neu.
Import / Export
- Export:
ConfigJson.Serialize(_config)→SaveFileDialog→.json-Datei - Import:
OpenFileDialog→ Datei lesen →ConfigJson.Deserialize()→RefreshAll()
Fehler (IO, JSON-Parse, falsche Version) werden per MessageBox angezeigt.
RefreshAll
Wird von TrayApp nach erfolgreicher Config oder Makrotabelle vom Board sowie
nach JSON-Import aufgerufen. Aktualisiert Profilauswahl, alle 20 MX-Buttons und
12 Encoder-Buttons ohne Dialog.
Extensions (in derselben Datei)
// Statischer ToolTip für alle Controls
public static void ToolTipText(this Control ctrl, string text)
public static string TypeDescription(this DeviceAction a)