From a555ea219336ad5771f326b16d50af0ae060657a Mon Sep 17 00:00:00 2001
From: Jacob Wahlman <jacwa448@student.liu.se>
Date: Mon, 4 May 2020 14:58:51 +0200
Subject: [PATCH] Resolve "Resize GUI Window"

---
 b_asic/GUI/drag_button.py | 24 +++++++++---------------
 b_asic/GUI/main_window.py | 24 +++++++++++++++++-------
 b_asic/GUI/port_button.py |  5 ++---
 3 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py
index 8a018a3d..b81ea9d4 100644
--- a/b_asic/GUI/drag_button.py
+++ b/b_asic/GUI/drag_button.py
@@ -26,6 +26,8 @@ class DragButton(QPushButton):
         self.operation_path_name = operation_path_name
         self.clicked = 0
         self.pressed = False
+        self._mouse_press_pos = None
+        self._mouse_move_pos = None
         super(DragButton, self).__init__(self._window)
 
     def contextMenuEvent(self, event):
@@ -35,20 +37,18 @@ class DragButton(QPushButton):
         properties.triggered.connect(self.show_properties_window)
         menu.exec_(self.cursor().pos())
 
-    def show_properties_window(self):
-        self.properties_window = PropertiesWindow(self, self.__window)
+    def show_properties_window(self, event):
+        self.properties_window = PropertiesWindow(self, self._window)
         self.properties_window.show()
-    
+
     def add_label(self, label):
         self.label = label
 
     def mousePressEvent(self, event):
-        self._mouse_press_pos = None
-        self._mouse_move_pos = None
 
         if event.button() == Qt.LeftButton:
-            self._mouse_press_pos = event.globalPos()
-            self._mouse_move_pos = event.globalPos()
+            self._mouse_press_pos = event.pos()
+            self._mouse_move_pos = event.pos()
 
             for signal in self._window.signalList:
                 signal.update()
@@ -77,20 +77,14 @@ class DragButton(QPushButton):
 
     def mouseMoveEvent(self, event):
         if event.buttons() == Qt.LeftButton:
-            cur_pos = self.mapToGlobal(self.pos())
-            global_pos = event.globalPos()
-            diff = global_pos - self._mouse_move_pos
-            new_pos = self.mapFromGlobal(cur_pos + diff)
-            self.move(new_pos)
-
-            self._mouse_move_pos = global_pos
+            self.move(self.mapToParent(event.pos() - self._mouse_press_pos))
 
         self._window.update()
         super(DragButton, self).mouseMoveEvent(event)
 
     def mouseReleaseEvent(self, event):
         if self._mouse_press_pos is not None:
-            moved = event.globalPos() - self._mouse_press_pos
+            moved = event.pos() - self._mouse_press_pos
             if moved.manhattanLength() > 3:
                 event.ignore()
                 return
diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py
index bc31b1d3..aa30dc2a 100644
--- a/b_asic/GUI/main_window.py
+++ b/b_asic/GUI/main_window.py
@@ -26,6 +26,10 @@ QGraphicsProxyWidget
 from PyQt5.QtCore import Qt, QSize
 from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence
 
+
+MIN_WIDTH_SCENE = 600
+MIN_HEIGHT_SCENE = 520
+
 @decorate_class(handle_error)
 class MainWindow(QMainWindow):
     def __init__(self):
@@ -68,19 +72,25 @@ class MainWindow(QMainWindow):
         self.create_graphics_view()
 
     def create_graphics_view(self):
-        self.scene = QGraphicsScene()
+        self.scene = QGraphicsScene(self)
         self.graphic_view = QGraphicsView(self.scene, self)
         self.graphic_view.setRenderHint(QPainter.Antialiasing)
-        self.graphic_view.setGeometry(250, 40, 600, 520)
+        self.graphic_view.setGeometry(self.ui.operation_box.width(), 0, self.width(), self.height())
         self.graphic_view.setDragMode(QGraphicsView.ScrollHandDrag)
 
+    def resizeEvent(self, event):
+        self.ui.operation_box.setGeometry(10, 10, self.ui.operation_box.width(), self.height())
+        self.graphic_view.setGeometry(self.ui.operation_box.width() + 20, 0, self.width() - self.ui.operation_box.width() - 20, self.height())
+        super(MainWindow, self).resizeEvent(event)
+
     def wheelEvent(self, event):
-        old_zoom = self.zoom
-        self.zoom += event.angleDelta().y()/2500
-        self.graphic_view.scale(self.zoom, self.zoom)
-        self.zoom = old_zoom
+        if event.modifiers() == Qt.ControlModifier:
+            old_zoom = self.zoom
+            self.zoom += event.angleDelta().y()/2500
+            self.graphic_view.scale(self.zoom, self.zoom)
+            self.zoom = old_zoom
 
-    def view_operation_names(self):
+    def view_operation_names(self, event):
         if self.check_show_names.isChecked():
             self.is_show_names = True
         else:
diff --git a/b_asic/GUI/port_button.py b/b_asic/GUI/port_button.py
index d9fd2b13..af2e7ef6 100644
--- a/b_asic/GUI/port_button.py
+++ b/b_asic/GUI/port_button.py
@@ -20,7 +20,6 @@ class PortButton(QPushButton):
         menu.exec_(self.cursor().pos())
 
     def mousePressEvent(self, event):
-        
         if event.button() == Qt.LeftButton:
             self.clicked += 1
             if self.clicked == 1:
@@ -29,11 +28,11 @@ class PortButton(QPushButton):
                 self.window.pressed_ports.append(self)
             elif self.clicked == 2:
                 self.setStyleSheet("background-color: white")
-                self.pressed = False                
+                self.pressed = False
                 self.clicked = 0
                 self.window.pressed_ports.remove(self)
         super(PortButton, self).mousePressEvent(event)
-            
+
     def mouseReleaseEvent(self, event):
         super(PortButton, self).mouseReleaseEvent(event)
 
-- 
GitLab