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