diff --git a/b_asic/GUI/gui_interface.py b/b_asic/GUI/gui_interface.py index 6c384aacd131ac7bf570aa0f75ed8d8d04730b99..a6d9a3b8f436c615201dac8ba7537272573cae00 100644 --- a/b_asic/GUI/gui_interface.py +++ b/b_asic/GUI/gui_interface.py @@ -59,30 +59,6 @@ class Ui_main_window(object): self.core_operations_list.setWordWrap(False) self.core_operations_list.setSelectionRectVisible(False) self.core_operations_list.setObjectName("core_operations_list") - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.core_operations_list.addItem(item) self.operation_list.addItem(self.core_operations_page, "") self.special_operations_page = QtWidgets.QWidget() self.special_operations_page.setGeometry(QtCore.QRect(0, 0, 171, 217)) @@ -90,14 +66,6 @@ class Ui_main_window(object): self.special_operations_list = QtWidgets.QListWidget(self.special_operations_page) self.special_operations_list.setGeometry(QtCore.QRect(10, 0, 141, 81)) self.special_operations_list.setObjectName("special_operations_list") - item = QtWidgets.QListWidgetItem() - self.special_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.special_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.special_operations_list.addItem(item) - item = QtWidgets.QListWidgetItem() - self.special_operations_list.addItem(item) self.operation_list.addItem(self.special_operations_page, "") main_window.setCentralWidget(self.centralwidget) self.menu_bar = QtWidgets.QMenuBar(main_window) @@ -292,42 +260,10 @@ class Ui_main_window(object): self.core_operations_list.setSortingEnabled(False) __sortingEnabled = self.core_operations_list.isSortingEnabled() self.core_operations_list.setSortingEnabled(False) - item = self.core_operations_list.item(0) - item.setText(_translate("main_window", "Addition")) - item = self.core_operations_list.item(1) - item.setText(_translate("main_window", "Subtraction")) - item = self.core_operations_list.item(2) - item.setText(_translate("main_window", "Multiplication")) - item = self.core_operations_list.item(3) - item.setText(_translate("main_window", "Division")) - item = self.core_operations_list.item(4) - item.setText(_translate("main_window", "Constant")) - item = self.core_operations_list.item(5) - item.setText(_translate("main_window", "Constant multiplication")) - item = self.core_operations_list.item(6) - item.setText(_translate("main_window", "Square root")) - item = self.core_operations_list.item(7) - item.setText(_translate("main_window", "Complex conjugate")) - item = self.core_operations_list.item(8) - item.setText(_translate("main_window", "Absolute")) - item = self.core_operations_list.item(9) - item.setText(_translate("main_window", "Max")) - item = self.core_operations_list.item(10) - item.setText(_translate("main_window", "Min")) - item = self.core_operations_list.item(11) - item.setText(_translate("main_window", "Butterfly")) self.core_operations_list.setSortingEnabled(__sortingEnabled) self.operation_list.setItemText(self.operation_list.indexOf(self.core_operations_page), _translate("main_window", "Core operations")) __sortingEnabled = self.special_operations_list.isSortingEnabled() self.special_operations_list.setSortingEnabled(False) - item = self.special_operations_list.item(0) - item.setText(_translate("main_window", "Input")) - item = self.special_operations_list.item(1) - item.setText(_translate("main_window", "Output")) - item = self.special_operations_list.item(2) - item.setText(_translate("main_window", "Register")) - item = self.special_operations_list.item(3) - item.setText(_translate("main_window", "Custom")) self.special_operations_list.setSortingEnabled(__sortingEnabled) self.operation_list.setItemText(self.operation_list.indexOf(self.special_operations_page), _translate("main_window", "Special operations")) self.file_menu.setTitle(_translate("main_window", "File")) diff --git a/b_asic/GUI/improved_main_window.py b/b_asic/GUI/improved_main_window.py index b2cad0f5e30f9cbd26b59fa739a6e04b0323ff10..fb580eb9a0cf67305e3b8a322538cc30b75a7569 100644 --- a/b_asic/GUI/improved_main_window.py +++ b/b_asic/GUI/improved_main_window.py @@ -3,6 +3,7 @@ B-ASIC GUI Module. This python file is the main window of the GUI for B-ASIC. """ +from os import getcwd, path import sys from drag_button import DragButton @@ -10,17 +11,18 @@ 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,\ -Max, Min, Butterfly -from b_asic import Input, Output, Register +from b_asic import Operation +import b_asic.core_operations as c_oper +import b_asic.special_operations as s_oper + +from numpy import linspace from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QAction,\ QStatusBar, QMenuBar, QLineEdit, QPushButton, QSlider, QScrollArea, QVBoxLayout,\ QHBoxLayout, QDockWidget, QToolBar, QMenu, QLayout, QSizePolicy, QListWidget,\ -QListWidgetItem, QGraphicsView, QGraphicsScene +QListWidgetItem, QGraphicsView, QGraphicsScene, QShortcut from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush +from PyQt5.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence class MainWindow(QMainWindow): @@ -31,22 +33,7 @@ class MainWindow(QMainWindow): self.setWindowTitle(" ") self.setWindowIcon(QIcon('small_logo.png')) self.scene = None - self.init_ui() - self.add_counter = 0 - self.sub_counter = 0 - self.mul_counter = 0 - self.div_counter = 0 - self.const_counter = 0 - self.cmul_counter = 0 - self.sqr_counter = 0 - self.cc_counter = 0 - self.abs_counter = 0 - self.max_counter = 0 - self.min_counter = 0 - self.butterfly_counter = 0 - self.input_counter = 0 - self.output_counter = 0 - self.reg_counter = 0 + self._operations_from_name = dict() self.zoom = 1 self.operationList = [] self.signalList = [] @@ -55,6 +42,13 @@ class MainWindow(QMainWindow): self.pressed_ports = [] self.source = None + self.init_ui() + 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.shortcut_core = QShortcut(QKeySequence("Ctrl+R"), self.ui.operation_box) + self.shortcut_core.activated.connect(self._refresh_operations_list_from_namespace) + def init_ui(self): self.ui.core_operations_list.itemClicked.connect(self.on_list_widget_item_clicked) self.ui.special_operations_list.itemClicked.connect(self.on_list_widget_item_clicked) @@ -77,341 +71,91 @@ class MainWindow(QMainWindow): def exit_app(self, checked): QApplication.quit() + def _determine_port_distance(self, length, ports): + """Determine the distance between each port on the side of an operation. + The method returns the distance that each port should have from 0. + """ + return [length / 2] if ports == 1 else linspace(0, length, ports) + + def _create_port(self, operation, output_port=True): + text = ">" if output_port else "<" + button = PortButton(text, operation, self) + button.setStyleSheet("background-color: white") + button.connectionRequested.connect(self.connectButton) + return button + def add_ports(self, operation): - if operation.operation.input_count == 2: - 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.show() - 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, 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 = 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.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 = 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.show() - 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.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 = PortButton(">", operation, window) - self.output_port.setFixedSize(15, 15) - self.output_port.setStyleSheet("background-color: white") - 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 - addition_object = Addition() - self.addition_operation = DragButton("Add" + str(self.add_counter),\ - addition_object, "addition", self) - 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") - 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.operationList.append(self.addition_operation) - self.add_ports(self.addition_operation) - - def create_subtraction_operation(self): - self.sub_counter += 1 - subtraction_object = Subtraction() - self.subtraction_operation = DragButton("Subb" + str(self.sub_counter),\ - subtraction_object, "subtraction", self) - self.subtraction_operation.move(250, 100) - self.subtraction_operation.setFixedSize(50, 50) - self.subtraction_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.subtraction_operation.setIcon(QIcon(r"operation_icons\subtraction.png")) - self.subtraction_operation.setIconSize(QSize(50, 50)) - self.subtraction_operation.setParent(None) - self.scene.addWidget(self.subtraction_operation) - self.operationList.append(self.subtraction_operation) - self.add_ports(self.subtraction_operation) - - def create_multiplication_operation(self): - self.mul_counter += 1 - multiplication_object = Multiplication() - self.multiplication_operation = DragButton("Mul" + str(self.mul_counter),\ - multiplication_object, "multiplication", self) - self.multiplication_operation.move(250, 100) - self.multiplication_operation.setFixedSize(50, 50) - self.multiplication_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.multiplication_operation.setIcon(QIcon\ - (r"operation_icons\multiplication.png")) - self.multiplication_operation.setIconSize(QSize(50, 50)) - self.multiplication_operation.setParent(None) - self.scene.addWidget(self.multiplication_operation) - self.operationList.append(self.multiplication_operation) - self.add_ports(self.multiplication_operation) - - def create_division_operation(self): - self.div_counter += 1 - division_object = Division() - self.division_operation = DragButton("Div" + str(self.div_counter),\ - division_object, "division", self) - self.division_operation.move(250, 100) - self.division_operation.setFixedSize(50, 50) - self.division_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.division_operation.setIcon(QIcon(r"operation_icons\division.png")) - self.division_operation.setIconSize(QSize(50, 50)) - self.division_operation.setParent(None) - self.scene.addWidget(self.division_operation) - self.operationList.append(self.division_operation) - self.add_ports(self.division_operation) - - def create_constant_operation(self): - self.const_counter += 1 - constant_object = Constant() - self.constant_operation = DragButton("Const" + str(self.const_counter),\ - constant_object, "constant", self) - self.constant_operation.move(250, 100) - self.constant_operation.setFixedSize(50, 50) - self.constant_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.constant_operation.setIcon(QIcon(r"operation_icons\constant.png")) - self.constant_operation.setIconSize(QSize(50, 50)) - self.constant_operation.setParent(None) - self.scene.addWidget(self.constant_operation) - self.operationList.append(self.constant_operation) - self.add_ports(self.constant_operation) - - def create_constant_multiplication_operation(self): - self.cmul_counter += 1 - constant_multiplication_object = ConstantMultiplication() - self.constant_multiplication_operation = DragButton("Cmul" + str(self.cmul_counter),\ - constant_multiplication_object, "constant_multiplication", self) - self.constant_multiplication_operation.move(250, 100) - self.constant_multiplication_operation.setFixedSize(50, 50) - self.constant_multiplication_operation.setStyleSheet("background-color: white; \ - border-style: solid; border-color: black; border-width: 2px; border-radius: 10px") - self.constant_multiplication_operation.setIcon(QIcon\ - (r"operation_icons\constant_multiplication.png")) - self.constant_multiplication_operation.setIconSize(QSize(50, 50)) - self.constant_multiplication_operation.setParent(None) - self.scene.addWidget(self.constant_multiplication_operation) - self.operationList.append(self.constant_multiplication_operation) - self.add_ports(self.constant_multiplication_operation) - - def create_square_root_operation(self): - self.sqr_counter += 1 - square_root_object = SquareRoot() - self.square_root_operation = DragButton("Sqr" + str(self.sqr_counter),\ - square_root_object, "square_root", self) - self.square_root_operation.move(250, 100) - self.square_root_operation.setFixedSize(50, 50) - self.square_root_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.square_root_operation.setIcon(QIcon(r"operation_icons\square_root.png")) - self.square_root_operation.setIconSize(QSize(50, 50)) - self.square_root_operation.setParent(None) - self.scene.addWidget(self.square_root_operation) - self.operationList.append(self.square_root_operation) - self.add_ports(self.square_root_operation) - - def create_complex_conjugate_operation(self): - self.cc_counter += 1 - complex_conjugate_object = ComplexConjugate() - self.complex_conjugate_operation = DragButton("Cc" + str(self.cc_counter),\ - complex_conjugate_object, "complex_conjugate", self) - self.complex_conjugate_operation.move(250, 100) - self.complex_conjugate_operation.setFixedSize(50, 50) - self.complex_conjugate_operation.setStyleSheet("background-color: white;\ - border-style: solid; border-color: black; border-width: 2px; border-radius: 10px") - self.complex_conjugate_operation.setIcon(QIcon\ - (r"operation_icons\complex_conjugate.png")) - self.complex_conjugate_operation.setIconSize(QSize(50, 50)) - self.complex_conjugate_operation.setParent(None) - self.scene.addWidget(self.complex_conjugate_operation) - self.operationList.append(self.complex_conjugate_operation) - self.add_ports(self.complex_conjugate_operation) - - def create_absolute_operation(self): - self.abs_counter += 1 - absolute_object = Absolute() - self.absolute_operation = DragButton("Abs" + str(self.abs_counter),\ - absolute_object, "absolute", self) - self.absolute_operation.move(250, 100) - self.absolute_operation.setFixedSize(50, 50) - self.absolute_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.absolute_operation.setIcon(QIcon(r"operation_icons\absolute.png")) - self.absolute_operation.setIconSize(QSize(50, 50)) - self.absolute_operation.setParent(None) - self.scene.addWidget(self.absolute_operation) - self.operationList.append(self.absolute_operation) - self.add_ports(self.absolute_operation) - - def create_max_operation(self): - self.max_counter += 1 - max_object = Max() - self.max_operation = DragButton("Max" + str(self.max_counter),\ - max_object, "max", self) - self.max_operation.move(250, 100) - self.max_operation.setFixedSize(50, 50) - self.max_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.max_operation.setIcon(QIcon(r"operation_icons\max.png")) - self.max_operation.setIconSize(QSize(50, 50)) - self.max_operation.setParent(None) - self.scene.addWidget(self.max_operation) - self.operationList.append(self.max_operation) - self.add_ports(self.max_operation) - - def create_min_operation(self): - self.min_counter += 1 - min_object = Min() - self.min_operation = DragButton("Min" + str(self.min_counter),\ - min_object, "min", self) - self.min_operation.move(250, 100) - self.min_operation.setFixedSize(50, 50) - self.min_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.min_operation.setIcon(QIcon(r"operation_icons\min.png")) - self.min_operation.setIconSize(QSize(50, 50)) - self.min_operation.setParent(None) - self.scene.addWidget(self.min_operation) - self.operationList.append(self.min_operation) - self.add_ports(self.min_operation) - - def create_butterfly_operation(self): - self.butterfly_counter += 1 - butterfly_object = Butterfly() - self.butterfly_operation = DragButton("Butterfly" + str(self.butterfly_counter),\ - butterfly_object, "butterfly", self) - self.butterfly_operation.move(250, 100) - self.butterfly_operation.setFixedSize(50, 50) - self.butterfly_operation.setStyleSheet("background-color: white; border-style: solid;\ + _output_ports_dist = self._determine_port_distance(50 - 15, operation.operation.output_count) + _input_ports_dist = self._determine_port_distance(50 - 15, operation.operation.input_count) + + for dist in _input_ports_dist: + port = self._create_port(operation) + port.move(0, dist) + port.show() + + for dist in _output_ports_dist: + port = self._create_port(operation) + port.move(50 - 15, dist) + port.show() + + def get_operations_from_namespace(self, namespace): + return [comp for comp in dir(namespace) if hasattr(getattr(namespace, comp), "type_name")] + + def add_operations_from_namespace(self, namespace, _list): + for attr_name in self.get_operations_from_namespace(namespace): + attr = getattr(namespace, attr_name) + try: + attr.type_name() + item = QListWidgetItem(attr_name) + _list.addItem(item) + self._operations_from_name[attr_name] = attr + except NotImplementedError: + pass + + def _create_operation(self, item): + try: + attr_oper = self._operations_from_name[item.text()]() + attr_button = DragButton(attr_oper.graph_id, attr_oper, attr_oper.type_name().lower(), self) + attr_button.move(250, 100) + attr_button.setFixedSize(50, 50) + attr_button.setStyleSheet("background-color: white; border-style: solid;\ border-color: black; border-width: 2px; border-radius: 10px") - self.butterfly_operation.setIcon(QIcon(r"operation_icons\butterfly.png")) - self.butterfly_operation.setIconSize(QSize(50, 50)) - self.butterfly_operation.setParent(None) - self.scene.addWidget(self.butterfly_operation) - self.operationList.append(self.butterfly_operation) - self.add_ports(self.butterfly_operation) - - def create_input_operation(self): - self.input_counter += 1 - input_object = Input() - self.input_operation = DragButton("In" + str(self.input_counter),\ - input_object, "input", self) - self.input_operation.move(250, 100) - self.input_operation.setFixedSize(50, 50) - self.input_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.input_operation.setIcon(QIcon(r"operation_icons\input.png")) - self.input_operation.setIconSize(QSize(50, 50)) - self.input_operation.setParent(None) - self.scene.addWidget(self.input_operation) - self.operationList.append(self.input_operation) - self.add_ports(self.input_operation) - - def create_output_operation(self): - self.output_counter += 1 - output_object = Output() - self.output_operation = DragButton("Out" + str(self.output_counter),\ - output_object, "output", self) - self.output_operation.move(250, 100) - self.output_operation.setFixedSize(50, 50) - self.output_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.output_operation.setIcon(QIcon(r"operation_icons\output.png")) - self.output_operation.setIconSize(QSize(50, 50)) - self.output_operation.setParent(None) - self.scene.addWidget(self.output_operation) - self.operationList.append(self.output_operation) - self.add_ports(self.output_operation) - - def create_register_operation(self): - self.reg_counter += 1 - register_object = Register() - self.register_operation = DragButton("Reg" + str(self.reg_counter),\ - register_object, "register", self) - self.register_operation.move(250, 100) - self.register_operation.setFixedSize(50, 50) - self.register_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.register_operation.setIcon(QIcon(r"operation_icons\register.png")) - self.register_operation.setIconSize(QSize(50, 50)) - self.register_operation.setParent(None) - self.scene.addWidget(self.register_operation) - self.operationList.append(self.register_operation) - self.add_ports(self.register_operation) - - def create_custom_operation(self): - self.custom_operation = DragButton(self) - self.custom_operation.move(250, 100) - self.custom_operation.setFixedSize(50, 50) - self.custom_operation.setStyleSheet("background-color: white; border-style: solid;\ - border-color: black; border-width: 2px; border-radius: 10px") - self.custom_operation.setIcon(QIcon(r"operation_icons\custom_operation.png")) - self.custom_operation.setIconSize(QSize(50, 50)) - self.custom_operation.show() + self.add_ports(attr_button) + + icon_path = path.join("operation_icons", f"{attr_oper.type_name().lower()}.png") + if not path.exists(icon_path): + icon_path = path.join("operation_icons", f"custom_operation.png") + attr_button.setIcon(QIcon(icon_path)) + attr_button.setIconSize(QSize(50, 50)) + + attr_button.setParent(None) + self.scene.addWidget(attr_button) + self.operationList.append(attr_button) + except Exception as e: + print("Unexpected error occured: ", e) + + def _refresh_operations_list_from_namespace(self): + self.ui.core_operations_list.clear() + self.ui.special_operations_list.clear() + + self.add_operations_from_namespace(c_oper, self.ui.core_operations_list) + self.add_operations_from_namespace(s_oper, self.ui.special_operations_list) + + + 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 on_list_widget_item_clicked(self, item): - if item.text() == "Addition": - self.create_addition_operation() - elif item.text() == "Subtraction": - self.create_subtraction_operation() - elif item.text() == "Multiplication": - self.create_multiplication_operation() - elif item.text() == "Division": - self.create_division_operation() - elif item.text() == "Constant": - self.create_constant_operation() - elif item.text() == "Constant multiplication": - self.create_constant_multiplication_operation() - elif item.text() == "Square root": - self.create_square_root_operation() - elif item.text() == "Complex conjugate": - self.create_complex_conjugate_operation() - elif item.text() == "Max": - self.create_max_operation() - elif item.text() == "Min": - self.create_min_operation() - elif item.text() == "Absolute": - self.create_absolute_operation() - elif item.text() == "Butterfly": - self.create_butterfly_operation() - elif item.text() == "Input": - self.create_input_operation() - elif item.text() == "Output": - self.create_output_operation() - elif item.text() == "Register": - self.create_register_operation() - else: - print("Block for this operation is not implemented yet.") + self._create_operation(item) def keyPressEvent(self, event): pressed_buttons = [] @@ -433,11 +177,11 @@ class MainWindow(QMainWindow): self.signalList.append(line) self.update() - + def paintEvent(self, event): for signal in self.signalList: signal.moveLine() - + if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() diff --git a/b_asic/GUI/operation_icons/absolute.png b/b_asic/GUI/operation_icons/abs.png similarity index 100% rename from b_asic/GUI/operation_icons/absolute.png rename to b_asic/GUI/operation_icons/abs.png diff --git a/b_asic/GUI/operation_icons/absolute_grey.png b/b_asic/GUI/operation_icons/abs_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/absolute_grey.png rename to b_asic/GUI/operation_icons/abs_grey.png diff --git a/b_asic/GUI/operation_icons/addition.png b/b_asic/GUI/operation_icons/add.png similarity index 100% rename from b_asic/GUI/operation_icons/addition.png rename to b_asic/GUI/operation_icons/add.png diff --git a/b_asic/GUI/operation_icons/addition_grey.png b/b_asic/GUI/operation_icons/add_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/addition_grey.png rename to b_asic/GUI/operation_icons/add_grey.png diff --git a/b_asic/GUI/operation_icons/butterfly.png b/b_asic/GUI/operation_icons/bfly.png similarity index 100% rename from b_asic/GUI/operation_icons/butterfly.png rename to b_asic/GUI/operation_icons/bfly.png diff --git a/b_asic/GUI/operation_icons/butterfly_grey.png b/b_asic/GUI/operation_icons/bfly_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/butterfly_grey.png rename to b_asic/GUI/operation_icons/bfly_grey.png diff --git a/b_asic/GUI/operation_icons/constant.png b/b_asic/GUI/operation_icons/c.png similarity index 100% rename from b_asic/GUI/operation_icons/constant.png rename to b_asic/GUI/operation_icons/c.png diff --git a/b_asic/GUI/operation_icons/constant_grey.png b/b_asic/GUI/operation_icons/c_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/constant_grey.png rename to b_asic/GUI/operation_icons/c_grey.png diff --git a/b_asic/GUI/operation_icons/constant_multiplication.png b/b_asic/GUI/operation_icons/cmul.png similarity index 100% rename from b_asic/GUI/operation_icons/constant_multiplication.png rename to b_asic/GUI/operation_icons/cmul.png diff --git a/b_asic/GUI/operation_icons/constant_multiplication_grey.png b/b_asic/GUI/operation_icons/cmul_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/constant_multiplication_grey.png rename to b_asic/GUI/operation_icons/cmul_grey.png diff --git a/b_asic/GUI/operation_icons/complex_conjugate.png b/b_asic/GUI/operation_icons/conj.png similarity index 100% rename from b_asic/GUI/operation_icons/complex_conjugate.png rename to b_asic/GUI/operation_icons/conj.png diff --git a/b_asic/GUI/operation_icons/complex_conjugate_grey.png b/b_asic/GUI/operation_icons/conj_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/complex_conjugate_grey.png rename to b_asic/GUI/operation_icons/conj_grey.png diff --git a/b_asic/GUI/operation_icons/division.png b/b_asic/GUI/operation_icons/div.png similarity index 100% rename from b_asic/GUI/operation_icons/division.png rename to b_asic/GUI/operation_icons/div.png diff --git a/b_asic/GUI/operation_icons/division_grey.png b/b_asic/GUI/operation_icons/div_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/division_grey.png rename to b_asic/GUI/operation_icons/div_grey.png diff --git a/b_asic/GUI/operation_icons/input.png b/b_asic/GUI/operation_icons/in.png similarity index 100% rename from b_asic/GUI/operation_icons/input.png rename to b_asic/GUI/operation_icons/in.png diff --git a/b_asic/GUI/operation_icons/input_grey.png b/b_asic/GUI/operation_icons/in_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/input_grey.png rename to b_asic/GUI/operation_icons/in_grey.png diff --git a/b_asic/GUI/operation_icons/multiplication.png b/b_asic/GUI/operation_icons/mul.png similarity index 100% rename from b_asic/GUI/operation_icons/multiplication.png rename to b_asic/GUI/operation_icons/mul.png diff --git a/b_asic/GUI/operation_icons/multiplication_grey.png b/b_asic/GUI/operation_icons/mul_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/multiplication_grey.png rename to b_asic/GUI/operation_icons/mul_grey.png diff --git a/b_asic/GUI/operation_icons/output.png b/b_asic/GUI/operation_icons/out.png similarity index 100% rename from b_asic/GUI/operation_icons/output.png rename to b_asic/GUI/operation_icons/out.png diff --git a/b_asic/GUI/operation_icons/output_grey.png b/b_asic/GUI/operation_icons/out_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/output_grey.png rename to b_asic/GUI/operation_icons/out_grey.png diff --git a/b_asic/GUI/operation_icons/register.png b/b_asic/GUI/operation_icons/reg.png similarity index 100% rename from b_asic/GUI/operation_icons/register.png rename to b_asic/GUI/operation_icons/reg.png diff --git a/b_asic/GUI/operation_icons/register_grey.png b/b_asic/GUI/operation_icons/reg_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/register_grey.png rename to b_asic/GUI/operation_icons/reg_grey.png diff --git a/b_asic/GUI/operation_icons/square_root.png b/b_asic/GUI/operation_icons/sqrt.png similarity index 100% rename from b_asic/GUI/operation_icons/square_root.png rename to b_asic/GUI/operation_icons/sqrt.png diff --git a/b_asic/GUI/operation_icons/square_root_grey.png b/b_asic/GUI/operation_icons/sqrt_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/square_root_grey.png rename to b_asic/GUI/operation_icons/sqrt_grey.png diff --git a/b_asic/GUI/operation_icons/subtraction.png b/b_asic/GUI/operation_icons/sub.png similarity index 100% rename from b_asic/GUI/operation_icons/subtraction.png rename to b_asic/GUI/operation_icons/sub.png diff --git a/b_asic/GUI/operation_icons/subtraction_grey.png b/b_asic/GUI/operation_icons/sub_grey.png similarity index 100% rename from b_asic/GUI/operation_icons/subtraction_grey.png rename to b_asic/GUI/operation_icons/sub_grey.png