Unify list filter sections

This commit is contained in:
Marcel Peterkau
2026-06-27 10:36:18 +02:00
parent 04c23fbdf9
commit 8fba13aea0
2 changed files with 26 additions and 9 deletions
+10
View File
@@ -0,0 +1,10 @@
from __future__ import annotations
import tkinter as tk
from tkinter import ttk
def titled_frame(parent: tk.Misc, title: str) -> ttk.LabelFrame:
frame = ttk.LabelFrame(parent, padding=(12, 10))
frame.configure(labelwidget=ttk.Label(frame, text=title, style="TimelineHeader.TLabel"))
return frame
+16 -9
View File
@@ -6,6 +6,7 @@ from tkinter import messagebox, ttk
from ccma.domain.dates import format_date_for_display
from ccma.domain.models import ASSET_STATUS_LABELS, MEMBERSHIP_STATUS_LABELS, Asset, HousekeeperFinding, Member
from ccma.ui.labels import storage_key
from ccma.ui.sections import titled_frame
MEMBER_TABLE_COLUMNS = (
@@ -67,6 +68,10 @@ def _selected_status_filter(label: str) -> str:
return storage_key(MEMBERSHIP_STATUS_LABELS, label)
def _filter_label_frame(parent: tk.Misc) -> ttk.LabelFrame:
return titled_frame(parent, "// FILTER")
def _asset_table_value(asset: Asset, column: str, holder_label: str) -> str:
if column == "label":
return asset.label
@@ -228,10 +233,10 @@ class MembersTab(ttk.Frame):
self.count_var = tk.StringVar()
ttk.Label(header, textvariable=self.count_var, style="Mono.TLabel").grid(row=1, column=0, sticky="w")
ttk.Button(header, text="Tab schließen", command=self.on_close).grid(row=0, column=1, rowspan=2)
filters = ttk.Frame(self, padding=(12, 10))
filters = _filter_label_frame(self)
filters.grid(row=1, column=0, sticky="ew", pady=(0, 10))
filters.columnconfigure(1, weight=1)
ttk.Label(filters, text="Filter", style="Mono.TLabel").grid(row=0, column=0, sticky="w", padx=(0, 16))
filter_row = ttk.Frame(filters)
filter_row.grid(row=0, column=0, sticky="w")
self.tree = ttk.Treeview(
self,
columns=("number", "first_name", "last_name", "nickname", "email", "birth", "status"),
@@ -240,15 +245,15 @@ class MembersTab(ttk.Frame):
self.sort_column = "last_name"
self.sort_descending = False
self.status_filter_var = tk.StringVar(value=STATUS_FILTER_ALL)
ttk.Label(filters, text="Status").grid(row=0, column=1, sticky="w", padx=(0, 8))
ttk.Label(filter_row, text="Status").grid(row=0, column=0, sticky="w", padx=(0, 8))
self.status_filter = ttk.Combobox(
filters,
filter_row,
textvariable=self.status_filter_var,
state="readonly",
values=[STATUS_FILTER_ALL, *MEMBERSHIP_STATUS_LABELS.values()],
width=28,
)
self.status_filter.grid(row=0, column=2, sticky="w")
self.status_filter.grid(row=0, column=1, sticky="w")
self.status_filter.bind("<<ComboboxSelected>>", lambda _event: self._render_members())
for key, title, width in MEMBER_TABLE_COLUMNS:
self.tree.heading(key, text=title, command=lambda column=key: self._toggle_sort(column))
@@ -349,11 +354,13 @@ class AssetsTab(ttk.Frame):
button_row.grid(row=0, column=1, rowspan=2, sticky="e")
ttk.Button(button_row, text="Neues Asset", command=self.on_new).pack(side="left", padx=(0, 8))
ttk.Button(button_row, text="Tab schließen", command=self.on_close).pack(side="left")
filters = ttk.Frame(self, padding=(12, 10))
filters = _filter_label_frame(self)
filters.grid(row=1, column=0, sticky="ew", pady=(0, 10))
ttk.Label(filters, text="Status").grid(row=0, column=0, sticky="w", padx=(0, 8))
filter_row = ttk.Frame(filters)
filter_row.grid(row=0, column=0, sticky="w")
ttk.Label(filter_row, text="Status").grid(row=0, column=0, sticky="w", padx=(0, 8))
self.status_filter = ttk.Combobox(
filters,
filter_row,
textvariable=self.status_filter_var,
state="readonly",
values=[ASSET_FILTER_ALL, *ASSET_STATUS_LABELS.values()],