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