From 7f50e7e704354cb3e5d038397c7bbc55791f966a Mon Sep 17 00:00:00 2001 From: thomahl <thomahl@stud.ntnu.no> Date: Sat, 14 Mar 2020 10:19:15 +0100 Subject: [PATCH] #54 la til wrapper for Qt dialoger i egen modul. blir brukt to steder --- soitool/dialog_wrappers.py | 59 +++++++++++++++++++++++++++++ soitool/inline_editable_soi_view.py | 18 ++++----- soitool/module_list.py | 21 +++++----- 3 files changed, 75 insertions(+), 23 deletions(-) create mode 100644 soitool/dialog_wrappers.py diff --git a/soitool/dialog_wrappers.py b/soitool/dialog_wrappers.py new file mode 100644 index 0000000..e01ba7d --- /dev/null +++ b/soitool/dialog_wrappers.py @@ -0,0 +1,59 @@ +"""Includes methods that wrap Qt dialogs to reduce code duplication.""" + +from PySide2.QtWidgets import QMessageBox + + +def exec_qmessagebox_dialog(window_title, text, informative_text, icon): + """Execute QMessageBox dialog with feedback to user. + + Just a wrapper around QMessageBox. + + Parameters + ---------- + text : str + sets header of dialog. See + https://doc.qt.io/qt-5/qmessagebox.html#text-prop + informative_text : str + sets body of dialog. See + https://doc.qt.io/qt-5/qmessagebox.html#informativeText-prop + icon : QMessageBox.Icon + icon to show the user. Use one of the predefined icons as defined here: + https://doc.qt.io/qt-5/qmessagebox.html#Icon-enum + """ + error_message = QMessageBox() + error_message.setWindowTitle(window_title) + error_message.setText(text) + error_message.setInformativeText(informative_text) + error_message.setIcon(icon) + error_message.exec_() + + +def exec_critical_dialog(text, informative_text): + """Execute QMessageBox dialog with critical icon. + + This is simply a wrapper displaying a particular icon. See the + documentation for exec_qmessagebox_dialog for parameter docs. + """ + exec_qmessagebox_dialog( + "Error", text, informative_text, QMessageBox.Critical + ) + + +def exec_warning_dialog(text, informative_text): + """Execute QMessageBox dialog with warning icon. + + This is simply a wrapper displaying a particular icon. See the + documentation for exec_qmessagebox_dialog for parameter docs. + """ + exec_qmessagebox_dialog( + "Advarsel", text, informative_text, QMessageBox.Warning + ) + + +def exec_info_dialog(text, informative_text): + """Execute QMessageBox dialog with info icon. + + This is simply a wrapper displaying a particular icon. See the + documentation for exec_qmessagebox_dialog for parameter docs. + """ + exec_qmessagebox_dialog("Info", text, informative_text, QMessageBox.Info) diff --git a/soitool/inline_editable_soi_view.py b/soitool/inline_editable_soi_view.py index 0a71a1f..ff6c124 100644 --- a/soitool/inline_editable_soi_view.py +++ b/soitool/inline_editable_soi_view.py @@ -7,11 +7,11 @@ from PySide2.QtWidgets import ( QGraphicsScene, QGraphicsView, QGraphicsRectItem, - QMessageBox, ) from PySide2.QtGui import QFont, QPixmap, QBrush, QPalette, QPainter from PySide2.QtPrintSupport import QPrinter from soitool.soi import ModuleLargerThanBinError +from soitool.dialog_wrappers import exec_warning_dialog class InlineEditableSOIView(QScrollArea): @@ -44,17 +44,13 @@ class InlineEditableSOIView(QScrollArea): try: self.soi.reorganize() except ModuleLargerThanBinError: - error_message = QMessageBox() - error_message.setText( - "Minst én av modulene er for store for å passe på én side!" + exec_warning_dialog( + text="Minst én av modulene er for store " + "for å passe på én side!", + informative_text="Programmet kan desverre ikke fikse dette " + "for deg. Se igjennom modulene og sjekk at " + "alle moduler er mindre enn én enkelt side.", ) - error_message.setInformativeText( - "Programmet kan desverre ikke fikse dette for deg. Se " - "igjennom modulene og sjekk at alle moduler er mindre " - "enn én enkelt side." - ) - error_message.setIcon(QMessageBox.Warning) - error_message.exec_() self.update_pages() def __init__(self, soi): diff --git a/soitool/module_list.py b/soitool/module_list.py index a6ac18c..9a919de 100644 --- a/soitool/module_list.py +++ b/soitool/module_list.py @@ -4,9 +4,9 @@ from PySide2.QtWidgets import ( QListWidget, QListWidgetItem, QAbstractItemView, - QMessageBox, ) from soitool.soi import ModuleType +from soitool.dialog_wrappers import exec_warning_dialog import soitool @@ -155,18 +155,15 @@ class ModuleList(QListWidget): Is sent to super(). """ if self.parent.soi.algorithm_sort != "none": - error_message = QMessageBox() - error_message.setText( - "SOI er ikke innstilt for automatisk plassering av moduler!" + exec_warning_dialog( + text="SOI er ikke innstilt for automatisk plassering av " + "moduler!", + informative_text="Enn så lenge vil manuell prioritering av " + "moduler bare fungere dersom SOI er innstilt til ikke å gjøre " + "sortering av moduler før pakking. I fremtiden vil det være " + "mulig å låse utvalgte moduler, men la resten optimalt " + "pakkes.", ) - error_message.setInformativeText( - "Enn så lenge vil manuell prioritering av moduler bare " - "fungere dersom SOI er innstilt til ikke å gjøre sortering av " - "moduler før pakking. I fremtiden vil det være mulig å låse " - "utvalgte moduler, men la resten optimalt pakkes." - ) - error_message.setIcon(QMessageBox.Warning) - error_message.exec_() # ignorerer dropEvent ved å returnere tidlig return -- GitLab