Skip to content
Snippets Groups Projects
Commit 08eaa299 authored by Adam Jakobsson's avatar Adam Jakobsson
Browse files

Merge branch '83-error-handling-in-gui' into 'develop'

Error handling in GUI

See merge request PUM_TDDD96/B-ASIC!43
parents 85db5737 72029bbe
No related branches found
No related tags found
3 merge requests!67WIP: B-ASIC version 1.0.0 hotfix,!65B-ASIC version 1.0.0,!43Error handling in GUI
Pipeline #14908 passed
...@@ -3,23 +3,25 @@ Drag button class. ...@@ -3,23 +3,25 @@ Drag button class.
This class creates a dragbutton which can be clicked, dragged and dropped. This class creates a dragbutton which can be clicked, dragged and dropped.
""" """
import os.path import os.path
from PyQt5.QtWidgets import QPushButton from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import Qt, QSize from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from utils import decorate_class, handle_error
@decorate_class(handle_error)
class DragButton(QPushButton): class DragButton(QPushButton):
def __init__(self, name, operation, operation_path_name, window, parent = None): def __init__(self, name, operation, operation_path_name, window, parent = None):
self.name = name self.name = name
self.__window = window self._window = window
self.operation = operation self.operation = operation
self.operation_path_name = operation_path_name self.operation_path_name = operation_path_name
self.clicked = 0 self.clicked = 0
self.pressed = False self.pressed = False
super(DragButton, self).__init__(self.__window) super(DragButton, self).__init__(self._window)
def mousePressEvent(self, event): def mousePressEvent(self, event):
self._mouse_press_pos = None self._mouse_press_pos = None
...@@ -29,7 +31,7 @@ class DragButton(QPushButton): ...@@ -29,7 +31,7 @@ class DragButton(QPushButton):
self._mouse_press_pos = event.globalPos() self._mouse_press_pos = event.globalPos()
self._mouse_move_pos = event.globalPos() self._mouse_move_pos = event.globalPos()
for signal in self.__window.signalList: for signal in self._window.signalList:
signal.update() signal.update()
self.clicked += 1 self.clicked += 1
...@@ -40,7 +42,7 @@ class DragButton(QPushButton): ...@@ -40,7 +42,7 @@ class DragButton(QPushButton):
path_to_image = os.path.join('operation_icons', self.operation_path_name + '_grey.png') path_to_image = os.path.join('operation_icons', self.operation_path_name + '_grey.png')
self.setIcon(QIcon(path_to_image)) self.setIcon(QIcon(path_to_image))
self.setIconSize(QSize(50, 50)) self.setIconSize(QSize(50, 50))
self.__window.pressed_button.append(self) self._window.pressed_button.append(self)
elif self.clicked == 2: elif self.clicked == 2:
self.clicked = 0 self.clicked = 0
...@@ -50,7 +52,7 @@ class DragButton(QPushButton): ...@@ -50,7 +52,7 @@ class DragButton(QPushButton):
path_to_image = os.path.join('operation_icons', self.operation_path_name + '.png') path_to_image = os.path.join('operation_icons', self.operation_path_name + '.png')
self.setIcon(QIcon(path_to_image)) self.setIcon(QIcon(path_to_image))
self.setIconSize(QSize(50, 50)) self.setIconSize(QSize(50, 50))
self.__window.pressed_button.remove(self) self._window.pressed_button.remove(self)
super(DragButton, self).mousePressEvent(event) super(DragButton, self).mousePressEvent(event)
...@@ -63,8 +65,8 @@ class DragButton(QPushButton): ...@@ -63,8 +65,8 @@ class DragButton(QPushButton):
self.move(new_pos) self.move(new_pos)
self._mouse_move_pos = global_pos self._mouse_move_pos = global_pos
self.__window.update() self._window.update()
super(DragButton, self).mouseMoveEvent(event) super(DragButton, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
......
...@@ -14,6 +14,7 @@ from port_button import PortButton ...@@ -14,6 +14,7 @@ from port_button import PortButton
from b_asic import Operation from b_asic import Operation
import b_asic.core_operations as c_oper import b_asic.core_operations as c_oper
import b_asic.special_operations as s_oper import b_asic.special_operations as s_oper
from utils import decorate_class, handle_error
from numpy import linspace from numpy import linspace
...@@ -25,6 +26,7 @@ from PyQt5.QtCore import Qt, QSize ...@@ -25,6 +26,7 @@ from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence
@decorate_class(handle_error)
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
def __init__(self): def __init__(self):
super(MainWindow, self).__init__() super(MainWindow, self).__init__()
...@@ -41,6 +43,7 @@ class MainWindow(QMainWindow): ...@@ -41,6 +43,7 @@ class MainWindow(QMainWindow):
self.portList = [] self.portList = []
self.pressed_ports = [] self.pressed_ports = []
self.source = None self.source = None
self._window = self
self.init_ui() self.init_ui()
self.add_operations_from_namespace(c_oper, self.ui.core_operations_list) self.add_operations_from_namespace(c_oper, self.ui.core_operations_list)
...@@ -141,7 +144,6 @@ class MainWindow(QMainWindow): ...@@ -141,7 +144,6 @@ class MainWindow(QMainWindow):
self.add_operations_from_namespace(c_oper, self.ui.core_operations_list) self.add_operations_from_namespace(c_oper, self.ui.core_operations_list)
self.add_operations_from_namespace(s_oper, self.ui.special_operations_list) self.add_operations_from_namespace(s_oper, self.ui.special_operations_list)
def print_input_port_1(self): def print_input_port_1(self):
print("Input port 1") print("Input port 1")
......
from PyQt5.QtWidgets import QErrorMessage
from traceback import format_exc
def handle_error(fn):
def wrapper(self, *args, **kwargs):
try:
return fn(self, *args, **kwargs)
except Exception as e:
QErrorMessage(self._window).showMessage(f"Unexpected error: {format_exc()}")
return wrapper
def decorate_class(decorator):
def decorate(cls):
for attr in cls.__dict__:
if callable(getattr(cls, attr)):
setattr(cls, attr, decorator(getattr(cls, attr)))
return cls
return decorate
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment