mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-01 11:14:52 +02:00
Unify list filter sections
This commit is contained in:
@@ -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
|
||||||
@@ -6,6 +6,7 @@ from tkinter import messagebox, ttk
|
|||||||
from ccma.domain.dates import format_date_for_display
|
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.domain.models import ASSET_STATUS_LABELS, MEMBERSHIP_STATUS_LABELS, Asset, HousekeeperFinding, Member
|
||||||
from ccma.ui.labels import storage_key
|
from ccma.ui.labels import storage_key
|
||||||
|
from ccma.ui.sections import titled_frame
|
||||||
|
|
||||||
|
|
||||||
MEMBER_TABLE_COLUMNS = (
|
MEMBER_TABLE_COLUMNS = (
|
||||||
@@ -67,6 +68,10 @@ def _selected_status_filter(label: str) -> str:
|
|||||||
return storage_key(MEMBERSHIP_STATUS_LABELS, label)
|
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:
|
def _asset_table_value(asset: Asset, column: str, holder_label: str) -> str:
|
||||||
if column == "label":
|
if column == "label":
|
||||||
return asset.label
|
return asset.label
|
||||||
@@ -228,10 +233,10 @@ class MembersTab(ttk.Frame):
|
|||||||
self.count_var = tk.StringVar()
|
self.count_var = tk.StringVar()
|
||||||
ttk.Label(header, textvariable=self.count_var, style="Mono.TLabel").grid(row=1, column=0, sticky="w")
|
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)
|
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.grid(row=1, column=0, sticky="ew", pady=(0, 10))
|
||||||
filters.columnconfigure(1, weight=1)
|
filter_row = ttk.Frame(filters)
|
||||||
ttk.Label(filters, text="Filter", style="Mono.TLabel").grid(row=0, column=0, sticky="w", padx=(0, 16))
|
filter_row.grid(row=0, column=0, sticky="w")
|
||||||
self.tree = ttk.Treeview(
|
self.tree = ttk.Treeview(
|
||||||
self,
|
self,
|
||||||
columns=("number", "first_name", "last_name", "nickname", "email", "birth", "status"),
|
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_column = "last_name"
|
||||||
self.sort_descending = False
|
self.sort_descending = False
|
||||||
self.status_filter_var = tk.StringVar(value=STATUS_FILTER_ALL)
|
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(
|
self.status_filter = ttk.Combobox(
|
||||||
filters,
|
filter_row,
|
||||||
textvariable=self.status_filter_var,
|
textvariable=self.status_filter_var,
|
||||||
state="readonly",
|
state="readonly",
|
||||||
values=[STATUS_FILTER_ALL, *MEMBERSHIP_STATUS_LABELS.values()],
|
values=[STATUS_FILTER_ALL, *MEMBERSHIP_STATUS_LABELS.values()],
|
||||||
width=28,
|
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())
|
self.status_filter.bind("<<ComboboxSelected>>", lambda _event: self._render_members())
|
||||||
for key, title, width in MEMBER_TABLE_COLUMNS:
|
for key, title, width in MEMBER_TABLE_COLUMNS:
|
||||||
self.tree.heading(key, text=title, command=lambda column=key: self._toggle_sort(column))
|
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")
|
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="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")
|
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))
|
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(
|
self.status_filter = ttk.Combobox(
|
||||||
filters,
|
filter_row,
|
||||||
textvariable=self.status_filter_var,
|
textvariable=self.status_filter_var,
|
||||||
state="readonly",
|
state="readonly",
|
||||||
values=[ASSET_FILTER_ALL, *ASSET_STATUS_LABELS.values()],
|
values=[ASSET_FILTER_ALL, *ASSET_STATUS_LABELS.values()],
|
||||||
|
|||||||
Reference in New Issue
Block a user