(gui): Allow editing rule record fields
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user