diff --git a/b_asic/GUI/gui_interface.py b/b_asic/GUI/gui_interface.py index c087ee1ef038225cdcd8e1f5fd9487c48918a918..760e46449c8e074a1e91f4e3bf73edd5cccd4501 100644 --- a/b_asic/GUI/gui_interface.py +++ b/b_asic/GUI/gui_interface.py @@ -121,6 +121,8 @@ class Ui_main_window(object): self.keybindsBASIC.setObjectName("keybindsBASIC") self.aboutBASIC = QtWidgets.QAction(main_window) self.aboutBASIC.setObjectName("aboutBASIC") + self.documentationBASIC = QtWidgets.QAction(main_window) + self.documentationBASIC.setObjectName("documentationBASIC") self.file_menu.addAction(self.load_menu) self.file_menu.addAction(self.save_menu) self.file_menu.addAction(self.load_operations) @@ -132,6 +134,7 @@ class Ui_main_window(object): self.edit_menu.addAction(self.unselect_all) self.run_menu.addAction(self.actionShowPC) self.run_menu.addAction(self.actionSimulateSFG) + self.help_menu.addAction(self.documentationBASIC) self.help_menu.addAction(self.faqBASIC) self.help_menu.addAction(self.keybindsBASIC) self.help_menu.addSeparator() @@ -185,6 +188,7 @@ class Ui_main_window(object): self.aboutBASIC.setText(_translate("main_window", "&About B-ASIC")) self.faqBASIC.setText(_translate("main_window", "&FAQ")) self.keybindsBASIC.setText(_translate("main_window", "&Keybinds")) + self.documentationBASIC.setText(_translate("main_window", "&Documentation")) self.load_menu.setText(_translate("main_window", "&Load SFG")) self.save_menu.setText(_translate("main_window", "&Save SFG")) self.load_operations.setText(_translate("main_window", "Load &operations")) diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index 0a7c19b84817ee61f82644d977ee9c687063951f..cfc0fa7c00f664d381391cf566ea45cae1e3e816 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -9,10 +9,11 @@ import importlib.util import logging import os import sys +import webbrowser from collections import deque from typing import TYPE_CHECKING, Deque, Dict, List, Optional, Sequence, Tuple, cast -from qtpy.QtCore import QCoreApplication, QFileInfo, QSettings, QSize, Qt, QThread +from qtpy.QtCore import QCoreApplication, QFileInfo, QSettings, QSize, Qt, QThread, Slot from qtpy.QtGui import QCursor, QIcon, QKeySequence, QPainter from qtpy.QtWidgets import ( QAction, @@ -139,10 +140,15 @@ class SFGMainWindow(QMainWindow): self._ui.actionShowPC.triggered.connect(self._show_precedence_graph) self._ui.actionSimulateSFG.triggered.connect(self.simulate_sfg) + + # About menu self._ui.faqBASIC.triggered.connect(self.display_faq_page) self._ui.faqBASIC.setShortcut(QKeySequence("Ctrl+?")) self._ui.aboutBASIC.triggered.connect(self.display_about_page) self._ui.keybindsBASIC.triggered.connect(self.display_keybindings_page) + self._ui.documentationBASIC.triggered.connect(self._open_documentation) + + # Operation lists self._ui.core_operations_list.itemClicked.connect( self._on_list_widget_item_clicked ) @@ -857,6 +863,11 @@ class SFGMainWindow(QMainWindow): # Kinda buggy because of the separate window in the same thread. self._simulation_dialog.simulate.connect(self._simulate_sfg) + @Slot() + def _open_documentation(self, event=None) -> None: + """Callback to open documentation web page.""" + webbrowser.open_new_tab("https://da.gitlab-pages.liu.se/B-ASIC/") + def display_faq_page(self, event=None) -> None: if self._faq_page is None: self._faq_page = FaqWindow(self)