diff --git a/b_asic/GUI/gui_interface.py b/b_asic/GUI/gui_interface.py index a42c7b6e6bdc4fe422b8d8b29eee022617eb8eff..50c6c1dd419744b9366057a357af8e81f4a4c64a 100644 --- a/b_asic/GUI/gui_interface.py +++ b/b_asic/GUI/gui_interface.py @@ -241,6 +241,8 @@ class Ui_main_window(object): self.actionRedo.setObjectName("actionRedo") self.actionSimulateSFG = QtWidgets.QAction(main_window) self.actionSimulateSFG.setObjectName("actionSimulateSFG") + self.actionShowPC = QtWidgets.QAction(main_window) + self.actionShowPC.setObjectName("actionShowPC") self.aboutBASIC = QtWidgets.QAction(main_window) self.aboutBASIC.setObjectName("aboutBASIC") self.faqBASIC = QtWidgets.QAction(main_window) @@ -256,6 +258,7 @@ class Ui_main_window(object): self.edit_menu.addAction(self.actionUndo) self.edit_menu.addAction(self.actionRedo) self.view_menu.addAction(self.actionToolbar) + self.run_menu.addAction(self.actionShowPC) self.run_menu.addAction(self.actionSimulateSFG) self.help_menu.addAction(self.aboutBASIC) self.help_menu.addAction(self.faqBASIC) @@ -288,6 +291,7 @@ class Ui_main_window(object): self.edit_menu.setTitle(_translate("main_window", "Edit")) self.view_menu.setTitle(_translate("main_window", "View")) self.run_menu.setTitle(_translate("main_window", "Run")) + self.actionShowPC.setText(_translate("main_window", "Show PC")) self.help_menu.setTitle(_translate("main_window", "Help")) self.actionSimulateSFG.setText(_translate("main_window", "Simulate SFG")) self.aboutBASIC.setText(_translate("main_window", "About B-ASIC")) diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index 72dfdcf6133931e54476d0cb0836114451fd6e12..178eeefaf7053ebfffc83f18ac7acda509977788 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -14,6 +14,7 @@ from drag_button import DragButton from gui_interface import Ui_main_window from arrow import Arrow from port_button import PortButton +from show_pc_window import ShowPCWindow from b_asic import Operation, SFG, InputPort, OutputPort from b_asic.simulation import Simulation @@ -54,7 +55,6 @@ class MainWindow(QMainWindow): self.signalPortDict = dict() self.pressed_ports = [] self.sfg_list = [] - self.source = None self._window = self self.logger = logging.getLogger(__name__) self.init_ui() @@ -76,6 +76,7 @@ class MainWindow(QMainWindow): self.check_show_names.setChecked(1) self.ui.view_menu.addAction(self.check_show_names) + self.ui.actionShowPC.triggered.connect(self.show_precedence_chart) self.ui.actionSimulateSFG.triggered.connect(self.simulate_sfg) self.ui.faqBASIC.triggered.connect(self.display_faq_page) self.ui.aboutBASIC.triggered.connect(self.display_about_page) @@ -97,7 +98,7 @@ class MainWindow(QMainWindow): self.scene = QGraphicsScene(self) self.graphic_view = QGraphicsView(self.scene, self) self.graphic_view.setRenderHint(QPainter.Antialiasing) - self.graphic_view.setGeometry(self.ui.operation_box.width(), 0, self.width(), self.height()) + self.graphic_view.setGeometry(self.ui.operation_box.width(), 20, self.width(), self.height()) self.graphic_view.setDragMode(QGraphicsView.RubberBandDrag) def create_toolbar_view(self): @@ -106,7 +107,7 @@ class MainWindow(QMainWindow): 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()) + self.graphic_view.setGeometry(self.ui.operation_box.width() + 20, 30, self.width() - self.ui.operation_box.width() - 20, self.height()-30) super(MainWindow, self).resizeEvent(event) def wheelEvent(self, event): @@ -149,6 +150,11 @@ class MainWindow(QMainWindow): op.setToolTip(sfg.name) self.sfg_list.append(sfg) + def show_precedence_chart(self): + self.dialog = ShowPCWindow(self) + self.dialog.add_sfg_to_dialog() + self.dialog.show() + 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. @@ -242,6 +248,7 @@ class MainWindow(QMainWindow): for pressed_op in self.pressed_operations: pressed_op.remove() self.move_button_index -= 1 + self.pressed_operations.clear() super().keyPressEvent(event) def connectButton(self, button): diff --git a/b_asic/GUI/show_pc_window.py b/b_asic/GUI/show_pc_window.py new file mode 100644 index 0000000000000000000000000000000000000000..3946ba9f821caed80893c52cb27213cbe3143edf --- /dev/null +++ b/b_asic/GUI/show_pc_window.py @@ -0,0 +1,49 @@ +from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QCheckBox,\ +QFrame, QFormLayout +from PySide2.QtCore import Qt, Signal + +from b_asic import SFG + +class ShowPCWindow(QDialog): + pc = Signal() + + def __init__(self, window): + super(ShowPCWindow, self).__init__() + self._window = window + self.check_box_list = [] + self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint) + self.setWindowTitle("Show PC") + + self.dialog_layout = QVBoxLayout() + self.pc_btn = QPushButton("Show PC") + self.pc_btn.clicked.connect(self.show_precedence_graph) + self.dialog_layout.addWidget(self.pc_btn) + self.setLayout(self.dialog_layout) + + def add_sfg_to_dialog(self): + sfg_layout = QVBoxLayout() + options_layout = QFormLayout() + + for sfg in self._window.sfg_list: + check_box = QCheckBox() + options_layout.addRow(sfg.name, check_box) + self.check_box_list.append(check_box) + + sfg_layout.addLayout(options_layout) + + frame = QFrame() + frame.setFrameShape(QFrame.HLine) + frame.setFrameShadow(QFrame.Sunken) + self.dialog_layout.addWidget(frame) + + self.dialog_layout.addLayout(sfg_layout) + + def show_precedence_graph(self): + for i, check_box in enumerate(self.check_box_list): + if check_box.isChecked(): + self._window.logger.info("Creating a precedence chart from " + self._window.sfg_list[i].name) + self._window.sfg_list[i].show_precedence_graph() + break + + self.accept() + self.pc.emit() \ No newline at end of file