SXXXXXXX_PyUCC/pyucc/gui/settings_dialog.py
2025-11-25 16:08:19 +01:00

73 lines
2.6 KiB
Python

import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from ..config import settings as cfg_settings
from pathlib import Path
class SettingsDialog(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.title("PyUcc Settings")
self.transient(parent)
self.resizable(False, False)
frm = ttk.Frame(self, padding=12)
frm.grid(row=0, column=0, sticky="nsew")
ttk.Label(frm, text="Baseline folder:").grid(row=0, column=0, sticky="w")
self.baseline_var = tk.StringVar(value=cfg_settings.get_baseline_dir() or "")
ent = ttk.Entry(frm, textvariable=self.baseline_var, width=60)
ent.grid(row=0, column=1, sticky="w", padx=(8, 0))
btn = ttk.Button(frm, text="Browse...", command=self._on_browse)
btn.grid(row=0, column=2, sticky="w", padx=(8, 0))
ttk.Label(frm, text="Keep last N baselines per profile:").grid(row=1, column=0, sticky="w", pady=(8,0))
self.keep_var = tk.IntVar(value=cfg_settings.get_max_keep())
spin = ttk.Spinbox(frm, from_=1, to=100, textvariable=self.keep_var, width=6)
spin.grid(row=1, column=1, sticky="w", pady=(8,0))
# Buttons
btn_frame = ttk.Frame(frm)
btn_frame.grid(row=3, column=0, columnspan=3, pady=(12,0), sticky="e")
save_btn = ttk.Button(btn_frame, text="Save", command=self._on_save)
save_btn.grid(row=0, column=0, padx=(0,8))
cancel_btn = ttk.Button(btn_frame, text="Cancel", command=self._on_cancel)
cancel_btn.grid(row=0, column=1)
self.grab_set()
# center over parent
try:
self.update_idletasks()
pw = parent.winfo_width()
ph = parent.winfo_height()
px = parent.winfo_rootx()
py = parent.winfo_rooty()
dw = self.winfo_reqwidth()
dh = self.winfo_reqheight()
x = px + (pw - dw) // 2
y = py + (ph - dh) // 2
self.geometry(f"+{x}+{y}")
except Exception:
pass
def _on_browse(self):
d = filedialog.askdirectory()
if d:
self.baseline_var.set(str(Path(d)))
def _on_save(self):
bd = self.baseline_var.get().strip() or None
try:
mk = int(self.keep_var.get())
if mk < 1:
raise ValueError()
except Exception:
messagebox.showerror("Invalid value", "Keep count must be a positive integer")
return
cfg_settings.set_baseline_settings(bd, mk)
messagebox.showinfo("Settings", "Settings saved")
self.destroy()
def _on_cancel(self):
self.destroy()