Skip to content
Snippets Groups Projects

Add scheduler GUI

Merged Oscar Gustafsson requested to merge scheduler-gui into master
2 files
+ 167
91
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -4,20 +4,19 @@ Contains the scheduler-gui class for scheduling operations in an SFG.
"""
# This Python file uses the following encoding: utf-8
import os
import os, sys
from pathlib import Path
import sys
from typing import Any
from pytest import ExitCode
#from matplotlib.pyplot import bar
#from diagram import *
from qtpy import uic, QtCore, QtGui, QtWidgets
from qtpy.QtCore import Qt, Slot
from qtpy import uic, QtCore, QtGui, QtWidgets
from qtpy.QtCore import Qt, Slot, QSettings
from qtpy.QtGui import QCloseEvent
from qtpy.QtWidgets import QApplication, QMainWindow, QMessageBox
# QPainter imports
from qtpy.QtWidgets import QGraphicsView, QGraphicsScene
from qtpy.QtWidgets import QGraphicsView, QGraphicsScene, QMessageBox
from qtpy.QtGui import (
QPaintEvent, QPainter, QPainterPath, QColor, QBrush, QPen, QFont, QPolygon,
QLinearGradient)
@@ -72,7 +71,6 @@ if __debug__:
argv = ' '.join(argv)
print("DEBUG: Running in debug mode. To disable, start program with: '" + argv + "'")
# Only availible when the form is compiled
from ui.main_window_ui import Ui_MainWindow
@@ -82,20 +80,17 @@ from ui.main_window_ui import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
"""Schedule of an SFG with scheduled Operations."""
#_ui: QMainWindow # <class '__main__.Ui_MainWindow'>
#_widget: QMainWindow # <class 'PyQt5.QtWidgets.QMainWindow'>
#ui = Ui_MainWindow() # DEBUG, remove later
_settings: QSettings
def __init__(self):
"""Construct a Schedule from an SFG and show it in the UI."""
"""Initialize Schedule-gui."""
super(MainWindow, self).__init__()
self._init_ui()
self._init_graphics_view()
def _init_ui(self):
def _init_ui(self) -> None:
# self._ui = uic.loadUi("main_window.ui", None) # Load the .ui file
# #self._ui.setupUi(self)
# print('self:\t\t' + str(type(self)))
@@ -115,55 +110,102 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# else:
# uic.loadUi("main_window.ui", self) # Load the .ui file
self._settings = QSettings()
self.setupUi(self)
# Init signals/slots
self.pushbutton_add.clicked.connect(self.callback_pushButton)
self.menu_load_sfg.triggered.connect(self.load_sfg)
self.menu_save_schedule.triggered.connect(self.save_schedule)
self.menu_load_sfg.triggered.connect(self.open)
self.menu_save_schedule.triggered.connect(self.save)
self.menu_quit.triggered.connect(self.close)
self.menu_node_info.triggered.connect(self.toggle_node_info)
#self.show()
#print('self:\t\t' + str(type(self)))
def _init_graphics_view(self):
self.setCentralWidget(self.graphicsView)
self.menu_node_info.triggered.connect(self._toggle_component_info)
self.splitter_center.splitterMoved.connect(self._splitter_center_moved)
# Init info sidebar
for i in range(10):
self.listWidget.addItem('this is a very very very very long string that says abolutly nothing' + str(i))
self.listWidget.addItem('this is a short string' + str(i))
# Init central-widget splitter
self.splitter_center.setStretchFactor(0, 1)
self.splitter_center.setStretchFactor(1, 0)
self.splitter_center.setCollapsible(0, False)
self.splitter_center.setCollapsible(1, True)
def _init_graphics_view(self) -> None:
pass
#self.setCentralWidget(self.graphicsView)
# pass
# self.scene = QGraphicsScene(self)
# self.graphic_view = QGraphicsView(self.scene, self)
# self.graphic_view.setRenderHint(QPainter.Antialiasing)
# self.graphic_view.setGeometry(20, 20, self.width(), self.height())
# self.graphic_view.setDragMode(QGraphicsView.RubberBandDrag)
self.graphic_scene = QGraphicsScene(self)
self.graphic_view.setScene(self.graphic_scene)
#self.graphic_view = QGraphicsView(self.scene, self)
self.graphic_view.setRenderHint(QPainter.Antialiasing)
self.graphic_view.setGeometry(20, 20, self.width(), self.height())
self.graphic_view.setDragMode(QGraphicsView.RubberBandDrag)
# print(self.centralwidget.baseSize())
#self.setupUi(self) # Need to setup ui again
###############
#### Slots ####
###############
@Slot()
def callback_pushButton(self):
def callback_pushButton(self) -> None:
#diagram = Diagram()
self.printButtonPressed('callback_pushButton')
@Slot()
def load_sfg(self):
def open(self) -> None:
"""This method loads an SFG and create a base schedule in gui."""
#TODO: all
self.printButtonPressed('load_sfg()')
self.update_statusbar('SFG loaded successfully')
@Slot()
def save_schedule(self):
def save(self) -> None:
"""This method save an schedule."""
#TODO: all
self.printButtonPressed('save_schedule()')
self.update_statusbar('Schedule saved successfully')
@Slot(bool)
def toggle_node_info(self, checked: bool):
#if _ui.actionNode_info.
print(type(checked))
print(checked)
self.printButtonPressed('toggle_node_info()')
#self.update_statusbar()
def _toggle_component_info(self, checked: bool) -> None:
widths = list(self.splitter_center.sizes())
max_range = widths[0] + widths[1]
if checked:
self.splitter_center.restoreState(self._settings.value("splitterSizes"));
else:
self._settings.setValue("splitterSizes", self.splitter_center.saveState());
self.splitter_center.moveSplitter(max_range, 1) # Note: splitter index starts at 1
@Slot(int, int)
def _splitter_center_moved(self, pos: int, index: int) -> None:
widths: list[int, int] = list(self.splitter_center.sizes())
#TODO: Custom move handler, save state on click-release?
if widths[1] == 0:
self.menu_node_info.setChecked(False)
else:
self.menu_node_info.setChecked(True)
################
#### Events ####
################
def closeEvent(self, event: QCloseEvent) -> None:
"""Overloads QMainWindow default closeEvent(QCloseEvent) event"""
QMessageBox.StandardButton resBtn = QMessageBox::question( this, APP_NAME,
self.tr("Are you sure?\n"),
QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
QMessageBox::Yes);
pass
def printButtonPressed(self, func_name: str):
#################################
#### Helper member functions ####
#################################
def printButtonPressed(self, func_name: str) -> None:
#TODO: remove
self.label.setText("hello")
@@ -171,7 +213,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
alert.setText("Called from " + func_name + '!')
alert.exec_()
def update_statusbar(self, msg: str):
def update_statusbar(self, msg: str) -> None:
"""Write the given str to the statusbar with temporarily policy."""
self.statusbar.showMessage(msg)
Loading