Skip to content

Commit

Permalink
Add option to close dialog without deleting filter
Browse files Browse the repository at this point in the history
  • Loading branch information
jfeil committed Mar 21, 2022
1 parent a8ff7f7 commit 8b829e5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 14 deletions.
2 changes: 1 addition & 1 deletion res/filter_editor.ui
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Discard|QDialogButtonBox::Save</set>
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Discard|QDialogButtonBox::Save</set>
</property>
</widget>
</item>
Expand Down
16 changes: 11 additions & 5 deletions src/filter_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ def __init__(self, filter_configuration: Dict[str, QuestionParameters],
self.ui.buttonBox.clicked.connect(self.__handle_buttonbox)

self.filter = None
self.result = None

self.filter_configuration = filter_configuration

Expand All @@ -32,7 +33,10 @@ def __init__(self, filter_configuration: Dict[str, QuestionParameters],
self.setWindowTitle("Filter bearbeiten")
dict_key, filter_option, filter_value = current_filter
index = list(self.filter_configuration).index(dict_key)
self.ui.combobox_column.setCurrentIndex(index)
if index == self.ui.combobox_column.currentIndex():
self.__update_filteroptions(self.ui.combobox_column.currentIndex())
else:
self.ui.combobox_column.setCurrentIndex(index)
index = self.filter_configuration[dict_key].filter_options.index(filter_option)
self.ui.combobox_filteroption.setCurrentIndex(index)
self.__set_filter_data(filter_value)
Expand All @@ -41,11 +45,13 @@ def __init__(self, filter_configuration: Dict[str, QuestionParameters],
self.__update_filteroptions(self.ui.combobox_column.currentIndex())

def __handle_buttonbox(self, button: QPushButton):
button_role = self.ui.buttonBox.buttonRole(button)
if button_role == QDialogButtonBox.ButtonRole.DestructiveRole:
self.reject()
elif button_role == QDialogButtonBox.ButtonRole.AcceptRole:
self.result = self.ui.buttonBox.buttonRole(button)
if self.result == QDialogButtonBox.ButtonRole.DestructiveRole:
self.accept()
elif self.result == QDialogButtonBox.ButtonRole.AcceptRole:
self.accept()
elif self.result == QDialogButtonBox.ButtonRole.RejectRole:
self.reject()

def __set_filter_data(self, data) -> None:
_, parameters, _ = self.__current_selection_state()
Expand Down
18 changes: 13 additions & 5 deletions src/main_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from PySide6.QtCore import QCoreApplication, Qt
from PySide6.QtCore import QSortFilterProxyModel
from PySide6.QtWidgets import QMainWindow, QWidget, QTreeWidgetItem, QFileDialog, QApplication, QMessageBox, QDialog, \
QListWidgetItem
QListWidgetItem, QDialogButtonBox
from bs4 import BeautifulSoup

from . import controller, document_builder
Expand Down Expand Up @@ -200,22 +200,30 @@ def add_filter(self, list_entry: Union[QListWidgetItem, bool] = False):
for i in range(first_ruletab.columnCount()):
properties.update(first_ruletab.headerData(i, Qt.Horizontal, Qt.UserRole))
editor = FilterEditor(filter_configuration=properties, current_filter=current_configuration)
return_val = editor.exec()
if return_val == QDialog.Rejected:
editor.exec()
if editor.result == QDialogButtonBox.ButtonRole.DestructiveRole:
# Closed via Discard
if not edit_mode:
return
else:
RuleSortFilterProxyModel.filters.pop(index)
self.ui.filter_list.takeItem(index)
del list_entry
elif return_val == QDialog.Accepted:
elif editor.result == QDialogButtonBox.ButtonRole.AcceptRole:
# Closed via Save
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())
elif editor.result == QDialogButtonBox.ButtonRole.RejectRole:
# Closed via Cancel
return
elif editor.result is None:
# Closed via X
return
else:
raise ValueError("Invalid response")
raise ValueError(f"Invalid response {editor.result}")
self.refresh_column_filter()

def refresh_column_filter(self):
Expand Down
5 changes: 2 additions & 3 deletions src/ui_filter_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from PySide6.QtWidgets import (QComboBox, QDialogButtonBox, QGridLayout, QLabel, QSizePolicy,
QSpacerItem)


class Ui_FilterEditor(object):
def setupUi(self, FilterEditor):
if not FilterEditor.objectName():
Expand All @@ -23,7 +22,7 @@ def setupUi(self, FilterEditor):
self.buttonBox = QDialogButtonBox(FilterEditor)
self.buttonBox.setObjectName(u"buttonBox")
self.buttonBox.setOrientation(Qt.Horizontal)
self.buttonBox.setStandardButtons(QDialogButtonBox.Discard | QDialogButtonBox.Save)
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Discard | QDialogButtonBox.Save)

self.gridLayout.addWidget(self.buttonBox, 4, 1, 1, 1)

Expand Down Expand Up @@ -61,7 +60,6 @@ def setupUi(self, FilterEditor):
self.buttonBox.rejected.connect(FilterEditor.reject)

QMetaObject.connectSlotsByName(FilterEditor)

# setupUi

def retranslateUi(self, FilterEditor):
Expand All @@ -70,3 +68,4 @@ def retranslateUi(self, FilterEditor):
self.label_filter.setText(QCoreApplication.translate("FilterEditor", u"Filter", None))
self.label_filteroption.setText(QCoreApplication.translate("FilterEditor", u"Filteroption", None))
# retranslateUi

0 comments on commit 8b829e5

Please sign in to comment.