Skip to content

Commit

Permalink
Implement editing and creating filter
Browse files Browse the repository at this point in the history
  • Loading branch information
jfeil committed Mar 21, 2022
1 parent 42dc7f6 commit a8ff7f7
Showing 1 changed file with 31 additions and 14 deletions.
45 changes: 31 additions & 14 deletions src/main_application.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import webbrowser
from enum import Enum, auto
from typing import List, Dict, Callable
from typing import List, Dict, Union
from typing import Tuple

import markdown2
from PySide6.QtCore import QCoreApplication, Qt
from PySide6.QtCore import QSortFilterProxyModel
from PySide6.QtWidgets import QMainWindow, QWidget, QTreeWidgetItem, QFileDialog, QApplication, QMessageBox, QDialog
from PySide6.QtWidgets import QMainWindow, QWidget, QTreeWidgetItem, QFileDialog, QApplication, QMessageBox, QDialog, \
QListWidgetItem
from bs4 import BeautifulSoup

from . import controller, document_builder
Expand Down Expand Up @@ -118,6 +119,7 @@ def __init__(self, parent=None):
self.ui.create_regeltest.clicked.connect(self.create_regeltest)

self.ui.filter_list.clear()
self.ui.filter_list.itemDoubleClicked.connect(self.add_filter)
self.ui.add_filter.clicked.connect(self.add_filter)

self.ruletabs = {} # type: Dict[int, Tuple[QSortFilterProxyModel, RuleDataModel]]
Expand Down Expand Up @@ -183,25 +185,40 @@ def setup_regeltest(self):
for question in regeltest_setup.collect_questions():
self.ui.regeltest_list.add_question(question)

def add_filter(self):
def add_filter(self, list_entry: Union[QListWidgetItem, bool] = False):
if not list_entry or type(list_entry) == bool:
# Add filter mode -> no list entry double_clicked
current_configuration = None
edit_mode = False
else:
# Edit mode -> Doubleclick on existing entry!
index = self.ui.filter_list.indexFromItem(list_entry).row()
current_configuration = RuleSortFilterProxyModel.filters[index][1]
edit_mode = True
first_ruletab = list(self.ruletabs.values())[0][1]
properties = {}
for i in range(first_ruletab.columnCount()):
properties.update(first_ruletab.headerData(i, Qt.Horizontal, Qt.UserRole))
editor = FilterEditor(properties)
editor = FilterEditor(filter_configuration=properties, current_filter=current_configuration)
return_val = editor.exec()
if return_val == QMessageBox.Discard:
print("Discarded")
elif return_val == QMessageBox.Save:
print("Saved")
if return_val == QDialog.Rejected:
if not edit_mode:
return
else:
RuleSortFilterProxyModel.filters.pop(index)
self.ui.filter_list.takeItem(index)
del list_entry
elif return_val == QDialog.Accepted:
if not edit_mode:
RuleSortFilterProxyModel.filters += [(editor.create_filter(), editor.current_configuration())]
self.ui.filter_list.addItem(QListWidgetItem(f"Filter {self.ui.filter_list.count() + 1}"))
else:
RuleSortFilterProxyModel.filters[index] = (editor.create_filter(), editor.current_configuration())
else:
self.filter_column(editor.create_filter())
print("Closed")
raise ValueError("Invalid response")
self.refresh_column_filter()

def filter_column(self, filter_tuple: Tuple[str, Callable], mode=FilterMode.Include):
# RuleSortFilterProxyModel.add_filter(('answer_text', lambda x: 'FaD' in x))
# RuleSortFilterProxyModel.add_filter(('last_edited', lambda x: datetime.date.fromisoformat('2020-06-01') < x))
RuleSortFilterProxyModel.add_filter(filter_tuple)
def refresh_column_filter(self):
for (filter_model, _) in self.ruletabs.values():
filter_model = filter_model # type: RuleSortFilterProxyModel
filter_model.invalidateFilter()
Expand Down

0 comments on commit a8ff7f7

Please sign in to comment.