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