67 Filter the table rows based on user input from various filter fields.
68 Rows that do not match the criteria will be hidden.
70 \param filter_inputs (dict[str, QWidget]): A dictionary mapping filter label text (also the table column header) to the corresponding input widget (QLineEdit or QComboBox).
77 internal_key = header_item.data(Qt.ItemDataRole.UserRole)
79 label_to_index[internal_key] = i
81 label_to_index[header_item.text()] = i
86 for label_text, widget
in filter_inputs.items():
87 if label_text
in [
"start",
"end"]:
90 if label_text
in label_to_index:
91 col_index = label_to_index[label_text]
101 filter_text = widget.currentText()
if isinstance(widget, QComboBox)
else widget.text().strip()
103 if not filter_text
or filter_text ==
"All" or filter_text ==
"Alle":
106 if label_text ==
"status":
107 status_value = item.data(Qt.ItemDataRole.UserRole + 1)
110 "Activated": ActivationStatus.ACTIVATED,
111 "Deactivated": ActivationStatus.DEACTIVATED,
112 "Aktiviert": ActivationStatus.ACTIVATED,
113 "Deaktiviert": ActivationStatus.DEACTIVATED
116 expected_status = status_mapping.get(filter_text,
None)
118 if expected_status
is None or status_value != expected_status:
121 if not fnmatch.fnmatch(item.text(), filter_text):
124 start_widget = filter_inputs.get(
"start")
125 end_widget = filter_inputs.get(
"end")
127 start_date = start_widget.date()
if start_widget
else None
128 end_date = end_widget.date()
if end_widget
else None
129 col_index = label_to_index[
"last_edit_date"]
131 if item
and item.text():
132 cell_date = datetime.strptime(item.text(),
"%Y-%m-%d").date()
134 if start_date
and cell_date < start_date:
136 if end_date
and cell_date > end_date:
145 Reset the filters by clearing all input fields and showing all rows in the table
147 \param filter_inputs (dict[str, QWidget]): A dictionary mapping filter label text (also the table column header) to the corresponding input widget (QLineEdit or QComboBox).
149 for label_text, widget
in filter_inputs.items():
150 if isinstance(widget, QLineEdit):
152 elif isinstance(widget, QComboBox):
153 widget.setCurrentIndex(0)
154 elif isinstance(widget, QDateEdit):
155 if label_text ==
"Start":
156 widget.setDate(QDate(2000, 1, 1))
157 elif label_text ==
"End":
158 widget.setDate(QDate.currentDate())