diff --git a/src/beanify/gui/roweditor.py b/src/beanify/gui/roweditor.py index cdf5c25..846e71e 100644 --- a/src/beanify/gui/roweditor.py +++ b/src/beanify/gui/roweditor.py @@ -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()