diff --git a/.gitignore b/.gitignore index 7d2fcdc4735e9fdbf5bd3aff9109a7a96b8001a7..c086e1589ed48917aa621f8295aaf36bc2f99ce9 100644 --- a/.gitignore +++ b/.gitignore @@ -111,7 +111,6 @@ _b_asic_debug_log.txt .qt_for_python/ *.pyproject.user *.pyproject -ui_*.py TODO.txt *.log b_asic/_version.py diff --git a/b_asic/scheduler_gui/compile.py b/b_asic/scheduler_gui/compile.py index d7ae14add4fb1329bbdd282b0519754ae2a0216b..29fe65767367193da8732a71ea1c5cf7bad68e3b 100644 --- a/b_asic/scheduler_gui/compile.py +++ b/b_asic/scheduler_gui/compile.py @@ -13,12 +13,14 @@ import os import shutil import subprocess import argparse -from b_asic.scheduler_gui._version import __version__ -import b_asic.scheduler_gui.logger as logger - -log = logger.getLogger() -sys.excepthook = logger.handle_exceptions +from setuptools_scm import get_version +try: + import b_asic.scheduler_gui.logger as logger + log = logger.getLogger() + sys.excepthook = logger.handle_exceptions +except ModuleNotFoundError: + log = None def _check_filenames(*filenames: str) -> None: """Check if the filename(s) exist, otherwise raise FileNotFoundError @@ -68,16 +70,25 @@ def compile_rc(*filenames: str) -> None: elif os_.startswith("win32"): # Windows # TODO: implement - log.error('Windows RC compiler not implemented') + if log is not None: + log.error('Windows RC compiler not implemented') + else: + print('Windows RC compiler not implemented') raise NotImplementedError elif os_.startswith("darwin"): # macOS # TODO: implement - log.error('macOS RC compiler not implemented') + if log is not None: + log.error('macOS RC compiler not implemented') + else: + print('macOS RC compiler not implemented') raise NotImplementedError else: # other OS - log.error(f'{os_} RC compiler not supported') + if log is not None: + log.error(f'{os_} RC compiler not supported') + else: + print(f'{os_} RC compiler not supported') raise NotImplementedError replace_qt_bindings(outfile) # replace qt-bindings with qtpy @@ -169,9 +180,12 @@ if __name__ == '__main__': parser = argparse.ArgumentParser(description=f'{__doc__}', formatter_class=argparse.RawTextHelpFormatter) + + version = get_version(root='../..', relative_to=__file__) + parser.add_argument('-v', '--version', action='version', - version=f'%(prog)s v{__version__}') + version=f'%(prog)s v{version}') if sys.version_info >= (3, 8): parser.add_argument('--ui', diff --git a/b_asic/scheduler_gui/ui_main_window.py b/b_asic/scheduler_gui/ui_main_window.py new file mode 100644 index 0000000000000000000000000000000000000000..b84799fa7357bdbec36a6ab87d754ac6701dc2ac --- /dev/null +++ b/b_asic/scheduler_gui/ui_main_window.py @@ -0,0 +1,213 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file './main_window.ui' +# +# Created by: PyQt5 UI code generator 5.15.7 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from qtpy import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(800, 600) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/basic/small_logo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + MainWindow.setWindowIcon(icon) + self.centralwidget = QtWidgets.QWidget(MainWindow) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) + self.centralwidget.setSizePolicy(sizePolicy) + self.centralwidget.setObjectName("centralwidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.splitter = QtWidgets.QSplitter(self.centralwidget) + self.splitter.setOrientation(QtCore.Qt.Horizontal) + self.splitter.setHandleWidth(0) + self.splitter.setObjectName("splitter") + self.view = QtWidgets.QGraphicsView(self.splitter) + self.view.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) + self.view.setRenderHints(QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.TextAntialiasing) + self.view.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) + self.view.setObjectName("view") + self.info_table = QtWidgets.QTableWidget(self.splitter) + self.info_table.setStyleSheet("alternate-background-color: #fadefb;background-color: #ebebeb;") + self.info_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.info_table.setAlternatingRowColors(True) + self.info_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + self.info_table.setRowCount(2) + self.info_table.setColumnCount(2) + self.info_table.setObjectName("info_table") + item = QtWidgets.QTableWidgetItem() + self.info_table.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.info_table.setVerticalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter) + self.info_table.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter) + self.info_table.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + item.setFont(font) + brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) + brush.setStyle(QtCore.Qt.SolidPattern) + item.setBackground(brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + item.setForeground(brush) + item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable) + self.info_table.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + item.setFont(font) + brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) + brush.setStyle(QtCore.Qt.SolidPattern) + item.setBackground(brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + item.setForeground(brush) + item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable) + self.info_table.setItem(1, 0, item) + self.info_table.horizontalHeader().setHighlightSections(False) + self.info_table.horizontalHeader().setStretchLastSection(True) + self.info_table.verticalHeader().setVisible(False) + self.info_table.verticalHeader().setDefaultSectionSize(19) + self.horizontalLayout.addWidget(self.splitter) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 20)) + self.menubar.setObjectName("menubar") + self.menuFile = QtWidgets.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + self.menuView = QtWidgets.QMenu(self.menubar) + self.menuView.setObjectName("menuView") + self.menu_Edit = QtWidgets.QMenu(self.menubar) + self.menu_Edit.setObjectName("menu_Edit") + self.menuWindow = QtWidgets.QMenu(self.menubar) + self.menuWindow.setObjectName("menuWindow") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.toolBar = QtWidgets.QToolBar(MainWindow) + self.toolBar.setObjectName("toolBar") + MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) + self.menu_load_from_file = QtWidgets.QAction(MainWindow) + icon = QtGui.QIcon.fromTheme("document-open-folder") + self.menu_load_from_file.setIcon(icon) + self.menu_load_from_file.setStatusTip("") + self.menu_load_from_file.setObjectName("menu_load_from_file") + self.menu_save = QtWidgets.QAction(MainWindow) + self.menu_save.setEnabled(False) + icon = QtGui.QIcon.fromTheme("document-save") + self.menu_save.setIcon(icon) + self.menu_save.setObjectName("menu_save") + self.menu_node_info = QtWidgets.QAction(MainWindow) + self.menu_node_info.setCheckable(True) + self.menu_node_info.setChecked(True) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/misc/right_panel.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon1.addPixmap(QtGui.QPixmap(":/icons/misc/right_filled_panel.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On) + self.menu_node_info.setIcon(icon1) + self.menu_node_info.setIconVisibleInMenu(False) + self.menu_node_info.setObjectName("menu_node_info") + self.menu_quit = QtWidgets.QAction(MainWindow) + icon = QtGui.QIcon.fromTheme("application-exit") + self.menu_quit.setIcon(icon) + self.menu_quit.setObjectName("menu_quit") + self.menu_save_as = QtWidgets.QAction(MainWindow) + self.menu_save_as.setEnabled(False) + icon = QtGui.QIcon.fromTheme("document-save-as") + self.menu_save_as.setIcon(icon) + self.menu_save_as.setObjectName("menu_save_as") + self.menu_exit_dialog = QtWidgets.QAction(MainWindow) + self.menu_exit_dialog.setCheckable(True) + icon = QtGui.QIcon.fromTheme("view-close") + self.menu_exit_dialog.setIcon(icon) + self.menu_exit_dialog.setObjectName("menu_exit_dialog") + self.actionT = QtWidgets.QAction(MainWindow) + self.actionT.setObjectName("actionT") + self.menu_close_schedule = QtWidgets.QAction(MainWindow) + self.menu_close_schedule.setEnabled(False) + icon = QtGui.QIcon.fromTheme("view-close") + self.menu_close_schedule.setIcon(icon) + self.menu_close_schedule.setObjectName("menu_close_schedule") + self.menuFile.addAction(self.menu_load_from_file) + self.menuFile.addAction(self.menu_close_schedule) + self.menuFile.addAction(self.menu_save) + self.menuFile.addAction(self.menu_save_as) + self.menuFile.addSeparator() + self.menuFile.addAction(self.menu_quit) + self.menuView.addAction(self.menu_node_info) + self.menuWindow.addAction(self.menu_exit_dialog) + self.menubar.addAction(self.menuFile.menuAction()) + self.menubar.addAction(self.menu_Edit.menuAction()) + self.menubar.addAction(self.menuView.menuAction()) + self.menubar.addAction(self.menuWindow.menuAction()) + self.toolBar.addAction(self.menu_load_from_file) + self.toolBar.addAction(self.menu_save) + self.toolBar.addAction(self.menu_save_as) + self.toolBar.addSeparator() + self.toolBar.addAction(self.menu_node_info) + self.toolBar.addAction(self.actionT) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + item = self.info_table.verticalHeaderItem(0) + item.setText(_translate("MainWindow", "1")) + item = self.info_table.verticalHeaderItem(1) + item.setText(_translate("MainWindow", "2")) + item = self.info_table.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Property")) + item = self.info_table.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Value")) + __sortingEnabled = self.info_table.isSortingEnabled() + self.info_table.setSortingEnabled(False) + item = self.info_table.item(0, 0) + item.setText(_translate("MainWindow", "Schedule")) + item = self.info_table.item(1, 0) + item.setText(_translate("MainWindow", "Operator")) + self.info_table.setSortingEnabled(__sortingEnabled) + self.menuFile.setTitle(_translate("MainWindow", "&File")) + self.menuView.setTitle(_translate("MainWindow", "&View")) + self.menu_Edit.setTitle(_translate("MainWindow", "&Edit")) + self.menuWindow.setTitle(_translate("MainWindow", "&Window")) + self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar")) + self.menu_load_from_file.setText(_translate("MainWindow", "&Load Schedule From File...")) + self.menu_load_from_file.setToolTip(_translate("MainWindow", "Load schedule from python script")) + self.menu_load_from_file.setShortcut(_translate("MainWindow", "Ctrl+O")) + self.menu_save.setText(_translate("MainWindow", "&Save")) + self.menu_save.setToolTip(_translate("MainWindow", "Save schedule")) + self.menu_save.setShortcut(_translate("MainWindow", "Ctrl+S")) + self.menu_node_info.setText(_translate("MainWindow", "&Node Info")) + self.menu_node_info.setToolTip(_translate("MainWindow", "Show node information")) + self.menu_node_info.setShortcut(_translate("MainWindow", "Ctrl+I")) + self.menu_quit.setText(_translate("MainWindow", "&Quit")) + self.menu_quit.setShortcut(_translate("MainWindow", "Ctrl+Q")) + self.menu_save_as.setText(_translate("MainWindow", "Save &As...")) + self.menu_exit_dialog.setText(_translate("MainWindow", "&Hide exit dialog")) + self.menu_exit_dialog.setToolTip(_translate("MainWindow", "Hide exit dialog")) + self.actionT.setText(_translate("MainWindow", "T")) + self.menu_close_schedule.setText(_translate("MainWindow", "&Close Schedule"))