Browse Source

grid viewer: add an error handler

olivier.massot 8 years ago
parent
commit
e17512b102
3 changed files with 27 additions and 9 deletions
  1. 5 1
      tools/gridviewer/GridViewer.py
  2. 8 3
      tools/gridviewer/ListViewDialog.py
  3. 14 5
      tools/gridviewer/main.py

+ 5 - 1
tools/gridviewer/GridViewer.py

@@ -34,6 +34,7 @@ class GridViewer(QMainWindow):
         self.ui = Ui_window()
         self.ui = Ui_window()
         self.ui.setupUi(self)
         self.ui.setupUi(self)
 
 
+
         self.ui.btn_new_grid.clicked.connect(self.show_new_grid_dialog)
         self.ui.btn_new_grid.clicked.connect(self.show_new_grid_dialog)
 
 
         self.ui.btn_list_view.clicked.connect(self.show_list_view_dialog)
         self.ui.btn_list_view.clicked.connect(self.show_list_view_dialog)
@@ -137,7 +138,10 @@ class GridViewer(QMainWindow):
 
 
     def show_list_view_dialog(self):
     def show_list_view_dialog(self):
         new_lst = ListViewDialog(self.selection).exec_()
         new_lst = ListViewDialog(self.selection).exec_()
-        self.update_selected_cells(new_lst)
+        try:
+            self.update_selected_cells(new_lst)
+        except KeyError:
+            raise KeyError("Can not select coordinates out of the current grid")
 
 
     # ## IT Jobs
     # ## IT Jobs
     def run_selected_job_clicked(self):
     def run_selected_job_clicked(self):

+ 8 - 3
tools/gridviewer/ListViewDialog.py

@@ -5,8 +5,9 @@ Created on 8 mars 2017
 '''
 '''
 from PyQt5.Qt import QDialog
 from PyQt5.Qt import QDialog
 
 
-from qt_listview import Ui_window
 from pypog.geometry_objects import BaseGeometry
 from pypog.geometry_objects import BaseGeometry
+from qt_listview import Ui_window
+
 
 
 class ListViewDialog(QDialog):
 class ListViewDialog(QDialog):
     def __init__(self, lst, parent=None):
     def __init__(self, lst, parent=None):
@@ -28,8 +29,12 @@ class ListViewDialog(QDialog):
         self.ui.btn_ok.clicked.connect(self.ok)
         self.ui.btn_ok.clicked.connect(self.ok)
 
 
     def ok(self):
     def ok(self):
-        self._lst = list(eval(self.ui.txt_list.toPlainText()))
-        self.done(1)
+        try:
+            self._lst = list(eval(self.ui.txt_list.toPlainText()))
+            BaseGeometry.assertCoordinates(*self._lst)
+            self.done(1)
+        except NameError:
+            raise ValueError("not a list of (x, y) coordinates")
 
 
     def cancel(self):
     def cancel(self):
         self.done(0)
         self.done(0)

+ 14 - 5
tools/gridviewer/main.py

@@ -5,14 +5,23 @@ Created on 13 mars 2017
 '''
 '''
 import sys
 import sys
 
 
-from PyQt5.Qt import QApplication
+from PyQt5.Qt import QApplication, QMessageBox
+# import ipdb
 
 
 from GridViewer import GridViewer
 from GridViewer import GridViewer
-import ipdb
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     app = QApplication(sys.argv)
     app = QApplication(sys.argv)
-    gv = GridViewer()
-    gv.show()
+    iface = GridViewer()
+
+    iface.show()
+
+    SYS_EXCEPT_HOOK = sys.excepthook
+    def error_handler(typ, value, trace):
+        QApplication.restoreOverrideCursor()
+        QMessageBox.critical(iface, typ.__name__, "{}".format(value))
+        SYS_EXCEPT_HOOK(typ, value, trace)
+    sys.excepthook = error_handler
+
     r = app.exec_()
     r = app.exec_()
-    sys.exit(r)
+    sys.exit(r)