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):
|
||||
mtimes = vp.config_mtimes()
|
||||
if os.path.exists(vcomb.DEFAULT_PATH):
|
||||
mtimes["combined"] = os.path.getmtime(vcomb.DEFAULT_PATH)
|
||||
if mtimes != self._mtimes:
|
||||
self._mtimes = mtimes
|
||||
if not self.editing.get():
|
||||
|
|
@ -488,6 +490,7 @@ class VersaPadViewer(tk.Tk):
|
|||
btn["action"] = dlg.action
|
||||
if dlg.led is not None:
|
||||
btn["led"] = dlg.led
|
||||
self._autosave_combined()
|
||||
self._render()
|
||||
|
||||
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"])
|
||||
if dlg.run():
|
||||
enc[field] = dlg.action
|
||||
self._autosave_combined()
|
||||
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 ────────────────────────────────────────────────────
|
||||
|
||||
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):
|
||||
for w in self.grid_frame.winfo_children():
|
||||
w.destroy()
|
||||
|
|
@ -519,12 +553,11 @@ class VersaPadViewer(tk.Tk):
|
|||
source_text = "Programmiermodus -- nicht gespeichert, bis übertragen/exportiert"
|
||||
else:
|
||||
try:
|
||||
cfg = vp.load_profile(self.profile)
|
||||
cfg, source_text = self._current_profile_view()
|
||||
except FileNotFoundError as e:
|
||||
tk.Label(self.grid_frame, text=f"Config-Datei fehlt: {e}", bg=BG,
|
||||
fg="#e05a5a", font=("Segoe UI", 10)).pack()
|
||||
return
|
||||
source_text = f"Quelle: {vp.CONFIG_PATHS[self.profile]}"
|
||||
|
||||
for col in range(vp.GRID_COLS):
|
||||
self.grid_frame.grid_columnconfigure(col, minsize=CARD_W + 10)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue