(gui): Allow editing rule record fields

This commit is contained in:
2026-01-08 23:55:38 +10:00
parent 292608e6c5
commit e661115335

View File

@@ -23,7 +23,9 @@ class RowEditor(ttk.Frame):
# UI Elements
self.record_vars: dict[str, StringVar] = {}
self.record_placeholder: ttk.Label | None = None
self.record_rows: list[tuple[ttk.Checkbutton | None, ttk.Label, ttk.Label]] = []
self.record_rows: list[
tuple[ttk.Checkbutton | None, ttk.Label, ttk.Label, ttk.Entry | None]
] = []
self.record_matchvars: dict[str, BooleanVar] = {}
self.txn_matchvars: dict[str, BooleanVar] = {}
@@ -121,7 +123,14 @@ class RowEditor(ttk.Frame):
rawfields.append((name, str(value)))
elif records:
fields = records[0].display_fields()
rawfields = [(field.name, field.value) for field in fields]
matchfields = records[0].match_fields()
rawfields = [
(
field.name,
matchfields[field.name] if field.matchable else field.value,
)
for field in fields
]
# Then update variables
for name, value in rawfields:
@@ -129,7 +138,7 @@ class RowEditor(ttk.Frame):
if var is None:
raise ValueError(f"Missing UI variable for record field {name}")
var.set(str(value if value is not None else "-"))
var.set(str(value) if value is not None else "")
def _cleanup_recordbox(self):
"""
@@ -169,6 +178,7 @@ class RowEditor(ttk.Frame):
# Build record vars and labels
fields = record.display_fields()
for i, field in enumerate(fields):
var = StringVar()
matchvar = BooleanVar()
@@ -181,18 +191,25 @@ class RowEditor(ttk.Frame):
self.record_frame,
textvariable=var,
)
value_label.grid(row=i, column=2, sticky="w", padx=5)
if field.matchable:
entrybox = ttk.Entry(
self.record_frame,
textvariable=var,
)
entrybox.grid(row=i, column=2, sticky="ew", padx=5)
matchbox = ttk.Checkbutton(
self.record_frame,
variable=matchvar,
)
self.record_matchvars[field.name] = matchvar
else:
value_label.grid(row=i, column=2, sticky="w", padx=5)
matchbox = None
entrybox = None
self.record_rows.append((matchbox, name_label, value_label))
self.record_rows.append((matchbox, name_label, value_label, entrybox))
self.record_vars[field.name] = var
self.showing_record = True
@@ -212,18 +229,24 @@ class RowEditor(ttk.Frame):
for i, (box, _, _) in enumerate(self.txn_rows.values()):
box.grid(row=i, column=0, sticky="ew", padx=5)
for i, (box, _, _) in enumerate(self.record_rows):
for i, (box, _, label, entry) in enumerate(self.record_rows):
if box:
box.grid(row=i, column=0, sticky="ew", padx=5)
if entry:
label.grid_remove()
entry.grid(row=i, column=2, sticky="ew", padx=5)
self.rule_button.configure(state="enabled")
else:
# Disable match boxes
for i, (box, _, _) in enumerate(self.txn_rows.values()):
box.grid_remove()
for i, (box, _, _) in enumerate(self.record_rows):
for i, (box, _, label, entry) in enumerate(self.record_rows):
if box:
box.grid_remove()
label.grid(row=i, column=2, sticky="w", padx=5)
if entry:
entry.grid_remove()
# Also disable rule button
self.rule_button.configure(state="disabled")
@@ -264,10 +287,10 @@ class RowEditor(ttk.Frame):
record, txn = self.rows[0]
rule_record_fields = {}
record_match_values = record.match_fields()
# record_match_values = record.match_fields()
for field, var in self.record_matchvars.items():
if var.get():
rule_record_fields[field] = record_match_values[field]
rule_record_fields[field] = self.record_vars[field].get()
input_fields = {
name: var.get()