Skip to content
Snippets Groups Projects
Commit 2b457d5f authored by Oscar Gustafsson's avatar Oscar Gustafsson :bicyclist:
Browse files

Add zoom to fit

parent 45e05dfa
No related branches found
No related tags found
1 merge request!320Add zoom to fit
Pipeline #95982 passed
...@@ -142,10 +142,12 @@ class SFGMainWindow(QMainWindow): ...@@ -142,10 +142,12 @@ class SFGMainWindow(QMainWindow):
self._ui.actionShowPC.triggered.connect(self._show_precedence_graph) self._ui.actionShowPC.triggered.connect(self._show_precedence_graph)
self._ui.actionSimulateSFG.triggered.connect(self.simulate_sfg) self._ui.actionSimulateSFG.triggered.connect(self.simulate_sfg)
self._ui.actionSimulateSFG.setIcon(get_icon('sim'))
# About menu # About menu
self._ui.faqBASIC.triggered.connect(self.display_faq_page) self._ui.faqBASIC.triggered.connect(self.display_faq_page)
self._ui.faqBASIC.setShortcut(QKeySequence("Ctrl+?")) self._ui.faqBASIC.setShortcut(QKeySequence("Ctrl+?"))
self._ui.faqBASIC.setIcon(get_icon('faq'))
self._ui.aboutBASIC.triggered.connect(self.display_about_page) self._ui.aboutBASIC.triggered.connect(self.display_about_page)
self._ui.aboutBASIC.setIcon(get_icon('about')) self._ui.aboutBASIC.setIcon(get_icon('about'))
self._ui.keybindsBASIC.triggered.connect(self.display_keybindings_page) self._ui.keybindsBASIC.triggered.connect(self.display_keybindings_page)
...@@ -175,7 +177,9 @@ class SFGMainWindow(QMainWindow): ...@@ -175,7 +177,9 @@ class SFGMainWindow(QMainWindow):
self._ui.exit_menu.setIcon(get_icon('quit')) self._ui.exit_menu.setIcon(get_icon('quit'))
self._ui.select_all.triggered.connect(self._select_all) self._ui.select_all.triggered.connect(self._select_all)
self._ui.select_all.setShortcut(QKeySequence("Ctrl+A")) self._ui.select_all.setShortcut(QKeySequence("Ctrl+A"))
self._ui.select_all.setIcon(get_icon('all'))
self._ui.unselect_all.triggered.connect(self._unselect_all) self._ui.unselect_all.triggered.connect(self._unselect_all)
self._ui.unselect_all.setIcon(get_icon('none'))
self._shortcut_signal = QShortcut(QKeySequence(Qt.Key_Space), self) self._shortcut_signal = QShortcut(QKeySequence(Qt.Key_Space), self)
self._shortcut_signal.activated.connect(self._connect_callback) self._shortcut_signal.activated.connect(self._connect_callback)
self._create_recent_file_actions_and_menus() self._create_recent_file_actions_and_menus()
...@@ -202,6 +206,12 @@ class SFGMainWindow(QMainWindow): ...@@ -202,6 +206,12 @@ class SFGMainWindow(QMainWindow):
self._statusbar_visible.triggered.connect(self._toggle_statusbar) self._statusbar_visible.triggered.connect(self._toggle_statusbar)
self._ui.view_menu.addAction(self._statusbar_visible) self._ui.view_menu.addAction(self._statusbar_visible)
# Zoom to fit
self._ui.view_menu.addSeparator()
self._zoom_to_fit_action = QAction(get_icon('zoom-to-fit'), "Zoom to &fit")
self._zoom_to_fit_action.triggered.connect(self._zoom_to_fit)
self._ui.view_menu.addAction(self._zoom_to_fit_action)
# Non-modal dialogs # Non-modal dialogs
self._keybindings_page = None self._keybindings_page = None
self._about_page = None self._about_page = None
...@@ -411,7 +421,7 @@ class SFGMainWindow(QMainWindow): ...@@ -411,7 +421,7 @@ class SFGMainWindow(QMainWindow):
self._update_recent_file_list() self._update_recent_file_list()
def exit_app(self) -> None: def exit_app(self, event=None) -> None:
"""Exit the application.""" """Exit the application."""
self._logger.info("Exiting the application.") self._logger.info("Exiting the application.")
QApplication.quit() QApplication.quit()
...@@ -869,6 +879,12 @@ class SFGMainWindow(QMainWindow): ...@@ -869,6 +879,12 @@ class SFGMainWindow(QMainWindow):
operation._toggle_button(pressed=True) operation._toggle_button(pressed=True)
self.update_statusbar("Unselected all operations") self.update_statusbar("Unselected all operations")
def _zoom_to_fit(self, event=None):
"""Callback for zoom to fit SFGs in window."""
self._graphics_view.fitInView(
self._scene.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio
)
def _simulate_sfg(self) -> None: def _simulate_sfg(self) -> None:
"""Callback for simulating SFGs in separate threads.""" """Callback for simulating SFGs in separate threads."""
self._thread = dict() self._thread = dict()
......
...@@ -4,6 +4,7 @@ import qtawesome ...@@ -4,6 +4,7 @@ import qtawesome
ICONS = { ICONS = {
'save': 'mdi6.content-save', 'save': 'mdi6.content-save',
'save-as': 'mdi6.content-save-edit',
'undo': 'mdi6.undo', 'undo': 'mdi6.undo',
'redo': 'mdi6.redo', 'redo': 'mdi6.redo',
'new': 'mdi6.file-outline', 'new': 'mdi6.file-outline',
...@@ -23,9 +24,16 @@ ICONS = { ...@@ -23,9 +24,16 @@ ICONS = {
'about': 'ph.question', 'about': 'ph.question',
'keys': 'ph.keyboard', 'keys': 'ph.keyboard',
'add-operations': 'ph.math-operations', 'add-operations': 'ph.math-operations',
'zoom-to-fit': 'mdi6.fit-to-page',
'faq': 'mdi6.frequently-asked-questions',
'sim': 'mdi6.chart-line',
'reorder': ('msc.graph-left', {'rotated': -90}),
} }
def get_icon(name): def get_icon(name):
"""Return icon for given name""" """Return icon for given name"""
return qtawesome.icon(ICONS[name]) info = ICONS[name]
if isinstance(info, str):
return qtawesome.icon(info)
return qtawesome.icon(info[0], **info[1])
...@@ -137,14 +137,19 @@ class ScheduleMainWindow(QMainWindow, Ui_MainWindow): ...@@ -137,14 +137,19 @@ class ScheduleMainWindow(QMainWindow, Ui_MainWindow):
self.menu_save.triggered.connect(self.save) self.menu_save.triggered.connect(self.save)
self.menu_save.setIcon(get_icon('save')) self.menu_save.setIcon(get_icon('save'))
self.menu_save_as.triggered.connect(self.save_as) self.menu_save_as.triggered.connect(self.save_as)
self.menu_save_as.setIcon(get_icon('save-as'))
self.menu_quit.triggered.connect(self.close) self.menu_quit.triggered.connect(self.close)
self.menu_quit.setIcon(get_icon('quit')) self.menu_quit.setIcon(get_icon('quit'))
self.menu_node_info.triggered.connect(self.show_info_table) self.menu_node_info.triggered.connect(self.show_info_table)
self.menu_node_info.setIcon(get_icon('info')) self.menu_node_info.setIcon(get_icon('info'))
self.menu_exit_dialog.triggered.connect(self.hide_exit_dialog) self.menu_exit_dialog.triggered.connect(self.hide_exit_dialog)
self.actionReorder.triggered.connect(self._action_reorder) self.actionReorder.triggered.connect(self._action_reorder)
self.actionReorder.setIcon(get_icon('reorder'))
self.actionStatus_bar.triggered.connect(self._toggle_statusbar)
self.actionPlot_schedule.triggered.connect(self._plot_schedule) self.actionPlot_schedule.triggered.connect(self._plot_schedule)
self.actionPlot_schedule.setIcon(get_icon('plot-schedule')) self.actionPlot_schedule.setIcon(get_icon('plot-schedule'))
self.actionZoom_to_fit.triggered.connect(self._zoom_to_fit)
self.actionZoom_to_fit.setIcon(get_icon('zoom-to-fit'))
self.actionUndo.setIcon(get_icon('undo')) self.actionUndo.setIcon(get_icon('undo'))
self.actionRedo.setIcon(get_icon('redo')) self.actionRedo.setIcon(get_icon('redo'))
self.splitter.splitterMoved.connect(self._splitter_moved) self.splitter.splitterMoved.connect(self._splitter_moved)
...@@ -741,6 +746,14 @@ class ScheduleMainWindow(QMainWindow, Ui_MainWindow): ...@@ -741,6 +746,14 @@ class ScheduleMainWindow(QMainWindow, Ui_MainWindow):
self._update_recent_file_list() self._update_recent_file_list()
def _zoom_to_fit(self, event=None):
"""Callback for zoom to fit schedule in window."""
self.view.fitInView(self._scene.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
def _toggle_statusbar(self, event=None) -> None:
"""Callback for toggling the status bar."""
self.statusbar.setVisible(self.actionStatus_bar.isChecked())
def start_scheduler(schedule: Optional[Schedule] = None) -> Schedule: def start_scheduler(schedule: Optional[Schedule] = None) -> Schedule:
""" """
......
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
<bool>false</bool> <bool>false</bool>
</attribute> </attribute>
<attribute name="verticalHeaderDefaultSectionSize"> <attribute name="verticalHeaderDefaultSectionSize">
<number>19</number> <number>24</number>
</attribute> </attribute>
<row> <row>
<property name="text"> <property name="text">
...@@ -202,7 +202,7 @@ ...@@ -202,7 +202,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>800</width>
<height>20</height> <height>22</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
...@@ -228,8 +228,11 @@ ...@@ -228,8 +228,11 @@
<string>&amp;View</string> <string>&amp;View</string>
</property> </property>
<addaction name="menu_node_info"/> <addaction name="menu_node_info"/>
<addaction name="actionStatus_bar"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionPlot_schedule"/> <addaction name="actionPlot_schedule"/>
<addaction name="separator"/>
<addaction name="actionZoom_to_fit"/>
</widget> </widget>
<widget class="QMenu" name="menu_Edit"> <widget class="QMenu" name="menu_Edit">
<property name="title"> <property name="title">
...@@ -445,6 +448,22 @@ ...@@ -445,6 +448,22 @@
<string>Decrease time resolution...</string> <string>Decrease time resolution...</string>
</property> </property>
</action> </action>
<action name="actionZoom_to_fit">
<property name="text">
<string>Zoom to fit</string>
</property>
</action>
<action name="actionStatus_bar">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Status bar</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file './main_window.ui' # Form implementation generated from reading ui file '.\main_window.ui'
# #
# Created by: PyQt5 UI code generator 5.15.7 # Created by: PyQt5 UI code generator 5.15.7
# #
...@@ -123,11 +123,11 @@ class Ui_MainWindow(object): ...@@ -123,11 +123,11 @@ class Ui_MainWindow(object):
self.info_table.horizontalHeader().setHighlightSections(False) self.info_table.horizontalHeader().setHighlightSections(False)
self.info_table.horizontalHeader().setStretchLastSection(True) self.info_table.horizontalHeader().setStretchLastSection(True)
self.info_table.verticalHeader().setVisible(False) self.info_table.verticalHeader().setVisible(False)
self.info_table.verticalHeader().setDefaultSectionSize(19) self.info_table.verticalHeader().setDefaultSectionSize(24)
self.horizontalLayout.addWidget(self.splitter) self.horizontalLayout.addWidget(self.splitter)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 20)) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar") self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile") self.menuFile.setObjectName("menuFile")
...@@ -218,6 +218,12 @@ class Ui_MainWindow(object): ...@@ -218,6 +218,12 @@ class Ui_MainWindow(object):
self.actionDecrease_time_resolution.setObjectName( self.actionDecrease_time_resolution.setObjectName(
"actionDecrease_time_resolution" "actionDecrease_time_resolution"
) )
self.actionZoom_to_fit = QtWidgets.QAction(MainWindow)
self.actionZoom_to_fit.setObjectName("actionZoom_to_fit")
self.actionStatus_bar = QtWidgets.QAction(MainWindow)
self.actionStatus_bar.setCheckable(True)
self.actionStatus_bar.setChecked(True)
self.actionStatus_bar.setObjectName("actionStatus_bar")
self.menuFile.addAction(self.menu_load_from_file) self.menuFile.addAction(self.menu_load_from_file)
self.menuFile.addAction(self.menu_close_schedule) self.menuFile.addAction(self.menu_close_schedule)
self.menuFile.addAction(self.menu_save) self.menuFile.addAction(self.menu_save)
...@@ -227,8 +233,11 @@ class Ui_MainWindow(object): ...@@ -227,8 +233,11 @@ class Ui_MainWindow(object):
self.menuFile.addSeparator() self.menuFile.addSeparator()
self.menuFile.addAction(self.menu_quit) self.menuFile.addAction(self.menu_quit)
self.menuView.addAction(self.menu_node_info) self.menuView.addAction(self.menu_node_info)
self.menuView.addAction(self.actionStatus_bar)
self.menuView.addSeparator() self.menuView.addSeparator()
self.menuView.addAction(self.actionPlot_schedule) self.menuView.addAction(self.actionPlot_schedule)
self.menuView.addSeparator()
self.menuView.addAction(self.actionZoom_to_fit)
self.menu_Edit.addAction(self.actionUndo) self.menu_Edit.addAction(self.actionUndo)
self.menu_Edit.addAction(self.actionRedo) self.menu_Edit.addAction(self.actionRedo)
self.menu_Edit.addSeparator() self.menu_Edit.addSeparator()
...@@ -314,3 +323,5 @@ class Ui_MainWindow(object): ...@@ -314,3 +323,5 @@ class Ui_MainWindow(object):
self.actionDecrease_time_resolution.setText( self.actionDecrease_time_resolution.setText(
_translate("MainWindow", "Decrease time resolution...") _translate("MainWindow", "Decrease time resolution...")
) )
self.actionZoom_to_fit.setText(_translate("MainWindow", "Zoom to fit"))
self.actionStatus_bar.setText(_translate("MainWindow", "Status bar"))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment