Fix: Programmiermodus-Aenderungen erschienen nicht im Nur-Lese-Modus
Ursache: Programmiermodus arbeitet auf der kombinierten Datei
(versapad_config_all.json), der Nur-Lese-Modus las aber immer nur die
alten Einzel-JSONs (versapad_config{1,2,3}.json) -- zwei komplett
getrennte Datenquellen. Jetzt: jede Aenderung im Programmiermodus wird
sofort in die kombinierte Datei geschrieben, und der Nur-Lese-Modus
bevorzugt diese Datei, wenn sie existiert.
This commit is contained in:
parent
b924273400
commit
78d412ffa6
1 changed files with 35 additions and 2 deletions
|
|
@ -286,6 +286,8 @@ class VersaPadViewer(tk.Tk):
|
||||||
|
|
||||||
def _poll(self):
|
def _poll(self):
|
||||||
mtimes = vp.config_mtimes()
|
mtimes = vp.config_mtimes()
|
||||||
|
if os.path.exists(vcomb.DEFAULT_PATH):
|
||||||
|
mtimes["combined"] = os.path.getmtime(vcomb.DEFAULT_PATH)
|
||||||
if mtimes != self._mtimes:
|
if mtimes != self._mtimes:
|
||||||
self._mtimes = mtimes
|
self._mtimes = mtimes
|
||||||
if not self.editing.get():
|
if not self.editing.get():
|
||||||
|
|
@ -488,6 +490,7 @@ class VersaPadViewer(tk.Tk):
|
||||||
btn["action"] = dlg.action
|
btn["action"] = dlg.action
|
||||||
if dlg.led is not None:
|
if dlg.led is not None:
|
||||||
btn["led"] = dlg.led
|
btn["led"] = dlg.led
|
||||||
|
self._autosave_combined()
|
||||||
self._render()
|
self._render()
|
||||||
|
|
||||||
def _edit_encoder_action(self, enc_index, field, field_label):
|
def _edit_encoder_action(self, enc_index, field, field_label):
|
||||||
|
|
@ -497,10 +500,41 @@ class VersaPadViewer(tk.Tk):
|
||||||
self, f"Encoder {enc_index} – {field_label}", enc[field], None, self.combined["macros"])
|
self, f"Encoder {enc_index} – {field_label}", enc[field], None, self.combined["macros"])
|
||||||
if dlg.run():
|
if dlg.run():
|
||||||
enc[field] = dlg.action
|
enc[field] = dlg.action
|
||||||
|
self._autosave_combined()
|
||||||
self._render()
|
self._render()
|
||||||
|
|
||||||
|
def _autosave_combined(self):
|
||||||
|
"""Speichert Programmiermodus-Aenderungen sofort in die kombinierte
|
||||||
|
Datei, damit der Nur-Lese-Modus (der dieselbe Datei bevorzugt liest,
|
||||||
|
siehe _current_profile_view) sie ohne Extra-Klick sieht. Schreibt
|
||||||
|
NICHT aufs Board -- dafuer weiterhin "Zum Board uebertragen"."""
|
||||||
|
try:
|
||||||
|
vcomb.save_file(self.combined, vcomb.DEFAULT_PATH)
|
||||||
|
except OSError as e:
|
||||||
|
self._status(f"Auto-Speichern fehlgeschlagen: {e}", False)
|
||||||
|
|
||||||
# ── Rendering ────────────────────────────────────────────────────
|
# ── Rendering ────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
def _current_profile_view(self):
|
||||||
|
"""Liest das aktuell angezeigte Profil fuer den Nur-Lese-Modus.
|
||||||
|
Bevorzugt die kombinierte Datei (versapad_config_all.json), falls
|
||||||
|
vorhanden -- so zeigen im Programmiermodus gespeicherte Aenderungen
|
||||||
|
sich auch hier, statt dass die alten Einzel-JSONs weiter durchscheinen.
|
||||||
|
Faellt zurueck auf die klassischen versapad_config{1,2,3}.json, wenn
|
||||||
|
es noch keine kombinierte Datei gibt."""
|
||||||
|
if os.path.exists(vcomb.DEFAULT_PATH):
|
||||||
|
try:
|
||||||
|
data = vcomb.load_file(vcomb.DEFAULT_PATH)
|
||||||
|
raw = data["profiles"][self.profile]
|
||||||
|
cfg = vp.annotate_profile({
|
||||||
|
"buttons": [dict(b) for b in raw["buttons"]],
|
||||||
|
"encoders": [dict(e) for e in raw["encoders"]],
|
||||||
|
})
|
||||||
|
return cfg, f"Quelle: {vcomb.DEFAULT_PATH}"
|
||||||
|
except (KeyError, IndexError, ValueError):
|
||||||
|
pass # kaputte/unvollstaendige Datei -- auf Einzel-JSONs ausweichen
|
||||||
|
return vp.load_profile(self.profile), f"Quelle: {vp.CONFIG_PATHS[self.profile]}"
|
||||||
|
|
||||||
def _render(self):
|
def _render(self):
|
||||||
for w in self.grid_frame.winfo_children():
|
for w in self.grid_frame.winfo_children():
|
||||||
w.destroy()
|
w.destroy()
|
||||||
|
|
@ -519,12 +553,11 @@ class VersaPadViewer(tk.Tk):
|
||||||
source_text = "Programmiermodus -- nicht gespeichert, bis übertragen/exportiert"
|
source_text = "Programmiermodus -- nicht gespeichert, bis übertragen/exportiert"
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
cfg = vp.load_profile(self.profile)
|
cfg, source_text = self._current_profile_view()
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
tk.Label(self.grid_frame, text=f"Config-Datei fehlt: {e}", bg=BG,
|
tk.Label(self.grid_frame, text=f"Config-Datei fehlt: {e}", bg=BG,
|
||||||
fg="#e05a5a", font=("Segoe UI", 10)).pack()
|
fg="#e05a5a", font=("Segoe UI", 10)).pack()
|
||||||
return
|
return
|
||||||
source_text = f"Quelle: {vp.CONFIG_PATHS[self.profile]}"
|
|
||||||
|
|
||||||
for col in range(vp.GRID_COLS):
|
for col in range(vp.GRID_COLS):
|
||||||
self.grid_frame.grid_columnconfigure(col, minsize=CARD_W + 10)
|
self.grid_frame.grid_columnconfigure(col, minsize=CARD_W + 10)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue