From 471fb59c84c3b89f7979260c3c8cbddc3b12e1f0 Mon Sep 17 00:00:00 2001 From: Adam Jakobsson <adaja901@student.liu.se> Date: Wed, 29 Apr 2020 13:28:28 +0200 Subject: [PATCH] Update GUI/operation_icons/Absolute.png, GUI/operation_icons/Addition@3x.png, GUI/operation_icons/Butterfly.png, GUI/operation_icons/ComplexConjugate.png, GUI/operation_icons/Constant.png, GUI/operation_icons/ConstantMultiplication.png, GUI/operation_icons/CustomOperation.png, GUI/operation_icons/Division.png, GUI/operation_icons/Input.png, GUI/operation_icons/Max.png, GUI/operation_icons/Min.png, GUI/operation_icons/Multiplication.png, GUI/operation_icons/Output.png, GUI/operation_icons/Register.png, GUI/operation_icons/SquareRoot.png, GUI/operation_icons/Subtraction.png, GUI/operation_icons/absolute.png, GUI/operation_icons/addition.png, GUI/operation_icons/butterfly.png, GUI/operation_icons/complexConjugate.png, GUI/operation_icons/constant.png, GUI/operation_icons/constantMultiplication.png, GUI/operation_icons/customOperation.png, GUI/operation_icons/division.png, GUI/operation_icons/input.png, GUI/operation_icons/max.png, GUI/operation_icons/min.png, GUI/operation_icons/multiplication.png, GUI/operation_icons/output.png, GUI/operation_icons/register.png, GUI/operation_icons/squareRoot.png, GUI/operation_icons/subtraction.png files Deleted GUI/operation_icons/minus.png, GUI/operation_icons/plus.png files --- b_asic/GUI/arrow.py | 6 ++- b_asic/GUI/drag_button.py | 11 +---- b_asic/GUI/improved_main_window.py | 67 +++++++++++++++--------------- b_asic/GUI/port_button.py | 39 +++++++++++++++++ 4 files changed, 79 insertions(+), 44 deletions(-) create mode 100644 b_asic/GUI/port_button.py diff --git a/b_asic/GUI/arrow.py b/b_asic/GUI/arrow.py index 4014c78a..575d6aec 100644 --- a/b_asic/GUI/arrow.py +++ b/b_asic/GUI/arrow.py @@ -28,5 +28,7 @@ class Arrow(QGraphicsLineItem): def moveLine(self): self.setPen(QPen(Qt.black, 3)) - self.setLine(QLineF(self.source.x()+50, self.source.y()+25,\ - self.destination.x(), self.destination.y()+25)) \ No newline at end of file + self.setLine(QLineF(self.source.operation.x()+self.source.x()+14,\ + self.source.operation.y()+self.source.y()+7.5,\ + self.destination.operation.x()+self.destination.x(),\ + self.destination.operation.y()+self.destination.y()+7.5)) diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py index 9f2f26e4..9f10c1ce 100644 --- a/b_asic/GUI/drag_button.py +++ b/b_asic/GUI/drag_button.py @@ -6,14 +6,12 @@ This class creates a dragbutton which can be clicked, dragged and dropped. import os.path -from PyQt5.QtWidgets import QPushButton, QMenu -from PyQt5.QtCore import Qt, QSize, pyqtSignal, QMimeData +from PyQt5.QtWidgets import QPushButton +from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QIcon class DragButton(QPushButton): - connectionRequested = pyqtSignal(QPushButton) - moved = pyqtSignal() def __init__(self, name, operation, operation_path_name, window, parent = None): self.name = name self.__window = window @@ -23,11 +21,6 @@ class DragButton(QPushButton): self.pressed = False super(DragButton, self).__init__(self.__window) - def contextMenuEvent(self, event): - menu = QMenu() - menu.addAction("Connect", lambda: self.connectionRequested.emit(self)) - menu.exec_(self.cursor().pos()) - def mousePressEvent(self, event): self._mouse_press_pos = None self._mouse_move_pos = None diff --git a/b_asic/GUI/improved_main_window.py b/b_asic/GUI/improved_main_window.py index 2db960d6..b2cad0f5 100644 --- a/b_asic/GUI/improved_main_window.py +++ b/b_asic/GUI/improved_main_window.py @@ -3,12 +3,12 @@ B-ASIC GUI Module. This python file is the main window of the GUI for B-ASIC. """ -from os import getcwd import sys from drag_button import DragButton from gui_interface import Ui_main_window from arrow import Arrow +from port_button import PortButton from b_asic import Constant, Addition, Subtraction, Absolute,\ Multiplication, Division, ConstantMultiplication, SquareRoot, ComplexConjugate,\ @@ -51,6 +51,8 @@ class MainWindow(QMainWindow): self.operationList = [] self.signalList = [] self.pressed_button = [] + self.portList = [] + self.pressed_ports = [] self.source = None def init_ui(self): @@ -77,38 +79,50 @@ class MainWindow(QMainWindow): def add_ports(self, operation): if operation.operation.input_count == 2: - self.input_port_1 = QPushButton(">", operation) + self.input_port_1 = PortButton(">", operation, window) + self.input_port_1.setFixedSize(15, 15) self.input_port_1.setStyleSheet("background-color: white") - self.input_port_1.clicked.connect(self.print_input_port_1) self.input_port_1.show() - self.input_port_2 = QPushButton(">", operation) + self.input_port_2 = PortButton(">", operation, window) + self.input_port_2.setFixedSize(15, 15) self.input_port_2.setStyleSheet("background-color: white") - self.input_port_2.move(0, 33) - self.input_port_2.clicked.connect(self.print_input_port_2) + self.input_port_2.move(0, 35) self.input_port_2.show() + self.portList.append(self.input_port_1) + self.portList.append(self.input_port_2) + self.input_port_1.connectionRequested.connect(self.connectButton) + self.input_port_2.connectionRequested.connect(self.connectButton) else: - self.input_port_1 = QPushButton(">", operation) + self.input_port_1 = PortButton(">", operation, window) + self.input_port_1.setFixedSize(15, 15) self.input_port_1.setStyleSheet("background-color: white") self.input_port_1.move(0, 16) - self.input_port_1.clicked.connect(self.print_input_port_1) self.input_port_1.show() + self.portList.append(self.input_port_1) + self.input_port_1.connectionRequested.connect(self.connectButton) if operation.operation.output_count == 2: - self.output_port = QPushButton(">", operation) + self.output_port = PortButton(">", operation, window) + self.output_port.setFixedSize(15, 15) self.output_port.setStyleSheet("background-color: white") self.output_port.move(38, 0) - self.output_port.clicked.connect(self.print_output_port_1) self.output_port.show() - self.output_port2 = QPushButton(">", operation) + self.output_port2 = PortButton(">", operation, window) + self.output_port_2.setFixedSize(15, 15) self.output_port2.setStyleSheet("background-color: white") self.output_port2.move(38, 33) - self.output_port2.clicked.connect(self.print_output_port_2) self.output_port2.show() + self.portList.append(self.output_port) + self.portList.append(self.output_port_2) + self.output_port.connectionRequested.connect(self.connectButton) + self.output_port_2.connectionRequested.connect(self.connectButton) else: - self.output_port = QPushButton(">", operation) + self.output_port = PortButton(">", operation, window) + self.output_port.setFixedSize(15, 15) self.output_port.setStyleSheet("background-color: white") - self.output_port.move(38, 16) - self.output_port.clicked.connect(self.print_output_port_1) + self.output_port.move(38, 20) self.output_port.show() + self.portList.append(self.output_port) + self.output_port.connectionRequested.connect(self.connectButton) def create_addition_operation(self): self.add_counter += 1 @@ -118,28 +132,16 @@ class MainWindow(QMainWindow): self.addition_operation.move(250, 100) self.addition_operation.setFixedSize(50, 50) self.addition_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") + border-color: black; border-width: 2px") self.addition_operation.setIcon(QIcon(r"operation_icons\addition.png")) self.addition_operation.setIconSize(QSize(50, 50)) self.addition_operation.setParent(None) self.scene.addWidget(self.addition_operation) self.operationList.append(self.addition_operation) - self.addition_operation.connectionRequested.connect(self.connectButton) + self.operationList.append(self.addition_operation) self.add_ports(self.addition_operation) - def print_input_port_1(self): - print("Input port 1") - - def print_input_port_2(self): - print("Input port 2") - - def print_output_port_1(self): - print("Output port 1") - - def print_output_port_2(self): - print("Output port 2") - def create_subtraction_operation(self): self.sub_counter += 1 subtraction_object = Subtraction() @@ -423,11 +425,10 @@ class MainWindow(QMainWindow): super().keyPressEvent(event) def connectButton(self, button): - if len(self.pressed_button) < 2: + if len(self.pressed_ports) < 2: return - - for i in range(len(self.pressed_button) - 1): - line = Arrow(self.pressed_button[i], self.pressed_button[i + 1], self) + for i in range(len(self.pressed_ports) - 1): + line = Arrow(self.pressed_ports[i], self.pressed_ports[i + 1], self) self.scene.addItem(line) self.signalList.append(line) diff --git a/b_asic/GUI/port_button.py b/b_asic/GUI/port_button.py new file mode 100644 index 00000000..d9fd2b13 --- /dev/null +++ b/b_asic/GUI/port_button.py @@ -0,0 +1,39 @@ + +import sys + +from PyQt5.QtWidgets import QPushButton, QMenu +from PyQt5.QtCore import Qt, pyqtSignal + +class PortButton(QPushButton): + connectionRequested = pyqtSignal(QPushButton) + moved = pyqtSignal() + def __init__(self, name, operation, window, parent=None): + self.pressed = False + self.window = window + self.operation = operation + self.clicked = 0 + super(PortButton, self).__init__(name, operation) + + def contextMenuEvent(self, event): + menu = QMenu() + menu.addAction("Connect", lambda: self.connectionRequested.emit(self)) + menu.exec_(self.cursor().pos()) + + def mousePressEvent(self, event): + + if event.button() == Qt.LeftButton: + self.clicked += 1 + if self.clicked == 1: + self.setStyleSheet("background-color: grey") + self.pressed = True + self.window.pressed_ports.append(self) + elif self.clicked == 2: + self.setStyleSheet("background-color: white") + 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