Skip to content
Snippets Groups Projects
Commit 14ddce62 authored by Jacob Wahlman's avatar Jacob Wahlman :ok_hand:
Browse files

Merge branch 'gui-import-fixes' into 'develop'

Include GUI in the setup.py file and fixes for GUI functionality

See merge request PUM_TDDD96/B-ASIC!63
parents 5f883350 6840a5fd
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,!63Include GUI in the setup.py file and fixes for GUI functionality
Pipeline #16464 passed
include README.md include README.md
include LICENSE include LICENSE
include CMakeLists.txt include CMakeLists.txt
include b_asic/GUI/operation_icons/*
recursive-include src *.cpp *.h recursive-include src *.cpp *.h
"""TODO""" """
from drag_button import * Better ASIC Toolbox GUI.
from improved_main_window import * TODO: More info.
from gui_interface import * """
from b_asic.GUI.main_window import *
from b_asic.GUI.about_window import *
from b_asic.GUI.arrow import *
from b_asic.GUI.drag_button import *
from b_asic.GUI.gui_interface import *
from b_asic.GUI.port_button import *
from b_asic.GUI.properties_window import *
from b_asic.GUI.select_sfg_window import *
from b_asic.GUI.show_pc_window import *
from b_asic.GUI.simulate_sfg_window import *
from b_asic.GUI.utils import *
...@@ -5,7 +5,7 @@ QGraphicsLineItem, QGraphicsWidget ...@@ -5,7 +5,7 @@ QGraphicsLineItem, QGraphicsWidget
from PySide2.QtCore import Qt, QSize, QLineF, QPoint, QRectF from PySide2.QtCore import Qt, QSize, QLineF, QPoint, QRectF
from PySide2.QtGui import QIcon, QFont, QPainter, QPen from PySide2.QtGui import QIcon, QFont, QPainter, QPen
from b_asic import Signal from b_asic.signal import Signal
class Arrow(QGraphicsLineItem): class Arrow(QGraphicsLineItem):
......
...@@ -5,14 +5,13 @@ This class creates a dragbutton which can be clicked, dragged and dropped. ...@@ -5,14 +5,13 @@ This class creates a dragbutton which can be clicked, dragged and dropped.
import os.path import os.path
from properties_window import PropertiesWindow from b_asic.GUI.properties_window import PropertiesWindow
from b_asic.GUI.utils import decorate_class, handle_error
from PySide2.QtWidgets import QPushButton, QMenu, QAction from PySide2.QtWidgets import QPushButton, QMenu, QAction
from PySide2.QtCore import Qt, QSize, Signal from PySide2.QtCore import Qt, QSize, Signal
from PySide2.QtGui import QIcon from PySide2.QtGui import QIcon
from utils import decorate_class, handle_error
@decorate_class(handle_error) @decorate_class(handle_error)
class DragButton(QPushButton): class DragButton(QPushButton):
...@@ -93,7 +92,7 @@ class DragButton(QPushButton): ...@@ -93,7 +92,7 @@ class DragButton(QPushButton):
self.pressed = not pressed self.pressed = not pressed
self.setStyleSheet(f"background-color: {'white' if not self.pressed else 'grey'}; border-style: solid;\ self.setStyleSheet(f"background-color: {'white' if not self.pressed else 'grey'}; border-style: solid;\
border-color: black; border-width: 2px") border-color: black; border-width: 2px")
path_to_image = os.path.join('operation_icons', f"{self.operation_path_name}{'_grey.png' if self.pressed else '.png'}") path_to_image = os.path.join(os.path.dirname(__file__), 'operation_icons', f"{self.operation_path_name}{'_grey.png' if self.pressed else '.png'}")
self.setIcon(QIcon(path_to_image)) self.setIcon(QIcon(path_to_image))
self.setIconSize(QSize(55, 55)) self.setIconSize(QSize(55, 55))
......
...@@ -7,23 +7,26 @@ from pprint import pprint ...@@ -7,23 +7,26 @@ from pprint import pprint
from os import getcwd, path from os import getcwd, path
import importlib import importlib
import logging import logging
logging.basicConfig(level=logging.INFO)
import sys import sys
from about_window import AboutWindow, FaqWindow, KeybindsWindow from b_asic.GUI.about_window import AboutWindow, FaqWindow, KeybindsWindow
from drag_button import DragButton from b_asic.GUI.drag_button import DragButton
from gui_interface import Ui_main_window from b_asic.GUI.gui_interface import Ui_main_window
from arrow import Arrow from b_asic.GUI.arrow import Arrow
from port_button import PortButton from b_asic.GUI.port_button import PortButton
from show_pc_window import ShowPCWindow from b_asic.GUI.show_pc_window import ShowPCWindow
from b_asic.GUI.utils import decorate_class, handle_error
from b_asic.GUI.simulate_sfg_window import SimulateSFGWindow, Plot
from b_asic.GUI.select_sfg_window import SelectSFGWindow
from b_asic import FastSimulation
from b_asic.simulation import Simulation from b_asic.simulation import Simulation
from b_asic import Operation, SFG, InputPort, OutputPort, Input, Output, FastSimulation from b_asic.operation import Operation
from b_asic.port import InputPort, OutputPort
from b_asic.signal_flow_graph import SFG
from b_asic.special_operations import Input, Output
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 simulate_sfg_window import SimulateSFGWindow, Plot
from select_sfg_window import SelectSFGWindow
from b_asic.save_load_structure import * from b_asic.save_load_structure import *
from numpy import linspace from numpy import linspace
...@@ -36,12 +39,11 @@ QGraphicsProxyWidget, QInputDialog, QTextEdit, QFileDialog ...@@ -36,12 +39,11 @@ QGraphicsProxyWidget, QInputDialog, QTextEdit, QFileDialog
from PySide2.QtCore import Qt, QSize, QFileInfo from PySide2.QtCore import Qt, QSize, QFileInfo
from PySide2.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence from PySide2.QtGui import QIcon, QFont, QPainter, QPen, QBrush, QKeySequence
from tkinter import Tk
from tkinter.filedialog import askopenfilename, askopenfile
MIN_WIDTH_SCENE = 600 MIN_WIDTH_SCENE = 600
MIN_HEIGHT_SCENE = 520 MIN_HEIGHT_SCENE = 520
logging.basicConfig(level=logging.INFO)
@decorate_class(handle_error) @decorate_class(handle_error)
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
...@@ -387,9 +389,9 @@ class MainWindow(QMainWindow): ...@@ -387,9 +389,9 @@ class MainWindow(QMainWindow):
border-color: black; border-width: 2px") border-color: black; border-width: 2px")
self.add_ports(attr_button) self.add_ports(attr_button)
icon_path = path.join("operation_icons", f"{op.type_name().lower()}.png") icon_path = path.join(path.dirname(__file__), "operation_icons", f"{op.type_name().lower()}.png")
if not path.exists(icon_path): if not path.exists(icon_path):
icon_path = path.join("operation_icons", f"custom_operation.png") icon_path = path.join(path.dirname(__file__), "operation_icons", f"custom_operation.png")
attr_button.setIcon(QIcon(icon_path)) attr_button.setIcon(QIcon(icon_path))
attr_button.setIconSize(QSize(55, 55)) attr_button.setIconSize(QSize(55, 55))
attr_button.setToolTip("No sfg") attr_button.setToolTip("No sfg")
...@@ -532,8 +534,13 @@ class MainWindow(QMainWindow): ...@@ -532,8 +534,13 @@ class MainWindow(QMainWindow):
self.keybinds_page.show() self.keybinds_page.show()
if __name__ == "__main__": def start_gui():
app = QApplication(sys.argv) app = QApplication(sys.argv)
window = MainWindow() window = MainWindow()
window.show() window.show()
sys.exit(app.exec_()) sys.exit(app.exec_())
if __name__ == "__main__":
start_gui()
...@@ -4,6 +4,7 @@ import sys ...@@ -4,6 +4,7 @@ import sys
from PySide2.QtWidgets import QPushButton, QMenu from PySide2.QtWidgets import QPushButton, QMenu
from PySide2.QtCore import Qt, Signal from PySide2.QtCore import Qt, Signal
class PortButton(QPushButton): class PortButton(QPushButton):
connectionRequested = Signal(QPushButton) connectionRequested = Signal(QPushButton)
moved = Signal() moved = Signal()
......
...@@ -3,6 +3,7 @@ QLabel, QCheckBox, QGridLayout ...@@ -3,6 +3,7 @@ QLabel, QCheckBox, QGridLayout
from PySide2.QtCore import Qt from PySide2.QtCore import Qt
from PySide2.QtGui import QDoubleValidator from PySide2.QtGui import QDoubleValidator
class PropertiesWindow(QDialog): class PropertiesWindow(QDialog):
def __init__(self, operation, main_window): def __init__(self, operation, main_window):
super(PropertiesWindow, self).__init__() super(PropertiesWindow, self).__init__()
......
from b_asic.signal_flow_graph import SFG
from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QCheckBox,\ from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QCheckBox,\
QFrame, QFormLayout QFrame, QFormLayout
from PySide2.QtCore import Qt, Signal from PySide2.QtCore import Qt, Signal
from b_asic import SFG
class ShowPCWindow(QDialog): class ShowPCWindow(QDialog):
pc = Signal() pc = Signal()
...@@ -45,4 +46,4 @@ class ShowPCWindow(QDialog): ...@@ -45,4 +46,4 @@ class ShowPCWindow(QDialog):
self._window.sfg_dict[sfg].show_precedence_graph() self._window.sfg_dict[sfg].show_precedence_graph()
self.accept() self.accept()
self.pc.emit() self.pc.emit()
\ No newline at end of file
...@@ -4,7 +4,8 @@ Given a structure try to serialize it and save it to a file. ...@@ -4,7 +4,8 @@ Given a structure try to serialize it and save it to a file.
Given a serialized file try to deserialize it and load it to the library. Given a serialized file try to deserialize it and load it to the library.
""" """
from b_asic import SFG, GraphComponent from b_asic.signal_flow_graph import SFG
from b_asic.graph_component import GraphComponent
from datetime import datetime from datetime import datetime
from inspect import signature from inspect import signature
...@@ -76,4 +77,4 @@ def python_to_sfg(path: str) -> SFG: ...@@ -76,4 +77,4 @@ def python_to_sfg(path: str) -> SFG:
code = compile(f.read(), path, 'exec') code = compile(f.read(), path, 'exec')
exec(code, globals(), locals()) exec(code, globals(), locals())
return locals()["prop"]["name"], locals()["positions"] if "positions" in locals() else {} return locals()["prop"]["name"], locals()["positions"] if "positions" in locals() else {}
\ No newline at end of file
...@@ -76,8 +76,9 @@ setuptools.setup( ...@@ -76,8 +76,9 @@ setuptools.setup(
"graphviz", "graphviz",
"matplotlib" "matplotlib"
], ],
packages = ["b_asic"], packages = ["b_asic", "b_asic/GUI"],
ext_modules = [CMakeExtension("b_asic")], ext_modules = [CMakeExtension("b_asic")],
cmdclass = {"build_ext": CMakeBuild}, cmdclass = {"build_ext": CMakeBuild},
zip_safe = False zip_safe = False,
include_package_data = True
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment