feat: Enhance preset name prompt with live status indication for overwriting or creating presets
This commit is contained in:
@@ -542,7 +542,9 @@ class SearchFilterWidget:
|
|||||||
def _ask_preset_name(self, initial: str = "") -> str | None:
|
def _ask_preset_name(self, initial: str = "") -> str | None:
|
||||||
"""Prompt for a preset name using a themed ttk modal dialog.
|
"""Prompt for a preset name using a themed ttk modal dialog.
|
||||||
|
|
||||||
Returns the entered name (stripped) or None if cancelled.
|
Shows a lightweight hint if the name already exists (will overwrite)
|
||||||
|
or is new (will create). Returns the entered name (stripped) or None
|
||||||
|
if cancelled.
|
||||||
"""
|
"""
|
||||||
result: dict[str, str | None] = {"value": None}
|
result: dict[str, str | None] = {"value": None}
|
||||||
|
|
||||||
@@ -557,7 +559,22 @@ class SearchFilterWidget:
|
|||||||
ttk.Label(frame, text="Preset name:").pack(anchor="w")
|
ttk.Label(frame, text="Preset name:").pack(anchor="w")
|
||||||
name_var = tk.StringVar(value=initial)
|
name_var = tk.StringVar(value=initial)
|
||||||
entry = ttk.Entry(frame, textvariable=name_var, width=32)
|
entry = ttk.Entry(frame, textvariable=name_var, width=32)
|
||||||
entry.pack(fill="x", pady=(4, 10))
|
entry.pack(fill="x", pady=(4, 6))
|
||||||
|
|
||||||
|
# Live status about overwrite vs create
|
||||||
|
status_var = tk.StringVar(value="")
|
||||||
|
status_label = ttk.Label(frame, textvariable=status_var)
|
||||||
|
status_label.pack(anchor="w", pady=(0, 10))
|
||||||
|
|
||||||
|
def _update_status(*_args: object) -> None:
|
||||||
|
presets = get_pref("filter_presets", {}) or {}
|
||||||
|
value = (name_var.get() or "").strip()
|
||||||
|
if not value:
|
||||||
|
status_var.set("")
|
||||||
|
elif value in presets:
|
||||||
|
status_var.set("Existing preset found: will overwrite")
|
||||||
|
else:
|
||||||
|
status_var.set("New preset: will create")
|
||||||
|
|
||||||
buttons = ttk.Frame(frame)
|
buttons = ttk.Frame(frame)
|
||||||
buttons.pack(anchor="e")
|
buttons.pack(anchor="e")
|
||||||
@@ -594,6 +611,9 @@ class SearchFilterWidget:
|
|||||||
y = py + (ph // 2) - (wh // 2)
|
y = py + (ph // 2) - (wh // 2)
|
||||||
top.geometry(f"+{x}+{y}")
|
top.geometry(f"+{x}+{y}")
|
||||||
|
|
||||||
|
# Initialize live status and focus
|
||||||
|
_update_status()
|
||||||
|
name_var.trace_add("write", _update_status) # update as user types
|
||||||
entry.focus_set()
|
entry.focus_set()
|
||||||
top.wait_window()
|
top.wait_window()
|
||||||
return result["value"]
|
return result["value"]
|
||||||
|
|||||||
Reference in New Issue
Block a user