summaryrefslogtreecommitdiff
path: root/lib/taurus/qt/qtgui/container/taurusmainwindow.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/taurus/qt/qtgui/container/taurusmainwindow.py')
-rw-r--r--lib/taurus/qt/qtgui/container/taurusmainwindow.py157
1 files changed, 104 insertions, 53 deletions
diff --git a/lib/taurus/qt/qtgui/container/taurusmainwindow.py b/lib/taurus/qt/qtgui/container/taurusmainwindow.py
index 8464dcd8..3bf50b9e 100644
--- a/lib/taurus/qt/qtgui/container/taurusmainwindow.py
+++ b/lib/taurus/qt/qtgui/container/taurusmainwindow.py
@@ -187,35 +187,62 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
perspectiveChanged = Qt.pyqtSignal('QString')
# customization options:
- # blinking semi-period in ms. Set to None for not showing the Heart beat
- # LED
- _heartbeat = 1500
- _showFileMenu = True
- _showViewMenu = True
- _showTaurusMenu = True
- _showToolsMenu = True
- _showHelpMenu = True
- # Allows the user to change/create/delete perspectives
- _supportUserPerspectives = True
- _showLogger = True
- #
- # set to None for disabling splash screen
- _splashLogo = "large:TaurusSplash.png"
- _splashMessage = "Initializing Main window..."
+ #: Heartbeat LED blinking semi-period in ms. Set to None for not showing it
+ HEARTBEAT = 1500
+ #: Whether to show the File menu
+ FILE_MENU_ENABLED = True
+ #: Whether to show the View menu
+ VIEW_MENU_ENABLED = True
+ #: Whether to show the Taurus menu
+ TAURUS_MENU_ENABLED = True
+ #: Whether to show the Tools menu
+ TOOLS_MENU_ENABLED = True
+ #: Whether to show the Help menu
+ HELP_MENU_ENABLED = True
+ #: Whether to show the Full Screen Toolbar
+ FULLSCREEN_TOOLBAR_ENABLED = True
+ #: Whether to show actions for user perspectives
+ USER_PERSPECTIVES_ENABLED = True
+ #: Whether add a dockwidget with the logger widget
+ LOGGER_WIDGET_ENABLED = True
+ #: Name of logo image for splash screen. Set to None for disabling splash
+ SPLASH_LOGO_NAME = "large:TaurusSplash.png"
+ #: Message for splash screen
+ SPLASH_MESSAGE = "Initializing Main window..."
+
+ _old_options_api = {
+ '_heartbeat': 'HEARTBEAT',
+ '_showFileMenu': 'FILE_MENU_ENABLED',
+ '_showViewMenu': 'VIEW_MENU_ENABLED',
+ '_showTaurusMenu': 'TAURUS_MENU_ENABLED',
+ '_showToolsMenu': 'TOOLS_MENU_ENABLED',
+ '_showHelpMenu': 'HELP_MENU_ENABLED',
+ '_showLogger': 'LOGGER_WIDGET_ENABLED',
+ '_supportUserPerspectives': 'USER_PERSPECTIVES_ENABLED',
+ '_splashLogo': 'SPLASH_LOGO_NAME',
+ '_splashMessage': 'SPLASH_MESSAGE',
+ }
def __init__(self, parent=None, designMode=False, splash=None):
name = self.__class__.__name__
self.call__init__wo_kw(Qt.QMainWindow, parent)
self.call__init__(TaurusBaseContainer, name, designMode=designMode)
+
+ # Provide bck-compat with old options API
+ for old, new in self._old_options_api.items():
+ if hasattr(self, old):
+ self.deprecated(dep=old, alt=new, rel='4.5.3a')
+ setattr(self, new, getattr(self, old))
+
if splash is None:
- splash = bool(self._splashLogo)
+ splash = bool(self.SPLASH_LOGO_NAME)
self.__splashScreen = None
if splash and not designMode:
self.__splashScreen = Qt.QSplashScreen(
- Qt.QPixmap(self._splashLogo))
+ Qt.QPixmap(self.SPLASH_LOGO_NAME))
self.__splashScreen.show()
- self.__splashScreen.showMessage(self._splashMessage)
+ self.__splashScreen.showMessage(self.SPLASH_MESSAGE)
self.__tangoHost = ""
self.__settings = None
@@ -224,10 +251,12 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
self.helpManualDW = None
self.helpManualBrowser = None
- self.resetHelpManualURI()
+
+ if self.HELP_MENU_ENABLED:
+ self.resetHelpManualURI()
# Heartbeat
- if self._heartbeat is not None:
+ if self.HEARTBEAT is not None:
from taurus.qt.qtgui.display import QLed
self.heartbeatLed = QLed()
self.heartbeatLed.setToolTip(
@@ -244,34 +273,49 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
self.__createActions()
# logger dock widget
- if self._showLogger:
+ if self.LOGGER_WIDGET_ENABLED:
self.addLoggerWidget()
# Create Menus
- if self._showFileMenu: # File menu
+ if self.FILE_MENU_ENABLED: # File menu
self.createFileMenu()
- if self._showViewMenu: # View menu
+ if self.VIEW_MENU_ENABLED: # View menu
self.createViewMenu()
- if self._showTaurusMenu: # Taurus Menu
+ if self.TAURUS_MENU_ENABLED: # Taurus Menu
self.createTaurusMenu()
- if self._showToolsMenu: # Tools Menu
+ if self.TOOLS_MENU_ENABLED: # Tools Menu
self.createToolsMenu()
- if self._showHelpMenu: # Help Menu
+ if self.HELP_MENU_ENABLED: # Help Menu
self.createHelpMenu()
# View Toolbar
- self.viewToolBar = self.addToolBar("View")
- self.viewToolBar.setObjectName("viewToolBar")
- self.viewToolBar.addAction(self.toggleFullScreenAction)
+ if self.FULLSCREEN_TOOLBAR_ENABLED:
+ self.viewToolBar = self.addToolBar("View")
+ self.viewToolBar.setObjectName("viewToolBar")
+ self.viewToolBar.addAction(self.toggleFullScreenAction)
# Perspectives Toolbar
- if self._supportUserPerspectives:
+ if self.USER_PERSPECTIVES_ENABLED:
self.createPerspectivesToolBar()
# disable the configuration action if there is nothing to configure
self.configurationAction.setEnabled(
self.configurationDialog._tabwidget.count())
+ def __setattr__(self, key, value):
+ super(TaurusMainWindow, self).__setattr__(key, value)
+ if key in self._old_options_api:
+ new = self._old_options_api[key]
+ setattr(self, new, value)
+ self.deprecated(dep=key, alt=new, rel='4.5.3a')
+
+ def contextMenuEvent(self, event):
+ """Reimplemented to avoid deprecation warning related to:
+ https://github.com/taurus-org/taurus/issues/905
+ """
+ # TODO: Remove this once the deprecation of the Popup menu is enforced
+ event.ignore()
+
def addLoggerWidget(self, hidden=True):
'''adds a QLoggingWidget as a dockwidget of the main window (and hides it by default)'''
from taurus.qt.qtgui.table import QLoggingWidget
@@ -286,7 +330,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
def createFileMenu(self):
'''adds a "File" Menu'''
self.fileMenu = self.menuBar().addMenu("File")
- if self._supportUserPerspectives:
+ if self.USER_PERSPECTIVES_ENABLED:
self.fileMenu.addAction(self.importSettingsFileAction)
self.fileMenu.addAction(self.exportSettingsFileAction)
# self.fileMenu.addAction(self.resetSettingsAction)
@@ -296,12 +340,12 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
def createViewMenu(self):
'''adds a "View" Menu'''
self.viewMenu = self.menuBar().addMenu("View")
- if self._showLogger:
+ if self.LOGGER_WIDGET_ENABLED:
self.viewMenu.addAction(self.__loggerDW.toggleViewAction())
self.viewToolBarsMenu = self.viewMenu.addMenu("Tool Bars")
self.viewMenu.addSeparator()
self.viewMenu.addAction(self.toggleFullScreenAction)
- if self._supportUserPerspectives:
+ if self.USER_PERSPECTIVES_ENABLED:
self.viewMenu.addSeparator()
self.perspectivesMenu = Qt.QMenu("Load Perspectives", self)
self.viewMenu.addMenu(self.perspectivesMenu)
@@ -341,7 +385,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
pbutton.setMenu(self.perspectivesMenu)
self.perspectivesToolBar.addWidget(pbutton)
self.perspectivesToolBar.addAction(self.savePerspectiveAction)
- if self._showViewMenu:
+ if self.VIEW_MENU_ENABLED:
self.viewToolBarsMenu.addAction(
self.perspectivesToolBar.toggleViewAction())
@@ -351,9 +395,10 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
.. note:: This method may need be called by derived classes at the end
of their initialization.
- :return: (QMenu) the updated perspectives menu (or None if self._supportUserPerspectives is False)
+ :return: (QMenu) the updated perspectives menu (or None if
+ self.USER_PERSPECTIVES_ENABLED is False)
'''
- if not self._supportUserPerspectives:
+ if not self.USER_PERSPECTIVES_ENABLED:
return None
self.perspectivesMenu.clear()
for pname in self.getPerspectivesList():
@@ -641,8 +686,10 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
ba = settings.value("TaurusConfig") or Qt.QByteArray()
self.applyQConfig(ba)
except Exception as e:
- msg = 'Problem loading configuration from "%s". Some settings may not be restored.\n Details: %s' % (
- str(settings.fileName()), repr(e))
+ msg = ('Problem loading configuration from "{}". '
+ + 'Some settings may not be restored.\n'
+ + ' Reason: {}'
+ ).format(str(settings.fileName()), e)
self.error(msg)
Qt.QMessageBox.warning(
self, 'Error Loading settings', msg, Qt.QMessageBox.Ok)
@@ -673,6 +720,10 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
saved (no prefix by default)
'''
settings = self.getQSettings()
+ if not settings.isWritable():
+ self.info('Settings cannot be saved in "%s"', settings.fileName())
+ return
+
if group is not None:
settings.beginGroup(group)
# main window geometry
@@ -683,7 +734,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
settings.setValue("TaurusConfig", self.createQConfig())
if group is not None:
settings.endGroup()
- self.info('MainWindow settings saved in "%s"' % settings.fileName())
+ self.info('Settings saved in "%s"' % settings.fileName())
@Qt.pyqtSlot()
@Qt.pyqtSlot('QString')
@@ -878,12 +929,12 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
self.extAppsBar.setObjectName("External Applications")
self.extAppsBar.setToolButtonStyle(
Qt.Qt.ToolButtonTextBesideIcon)
- if self._showViewMenu:
+ if self.VIEW_MENU_ENABLED:
self.viewToolBarsMenu.addAction(
self.extAppsBar.toggleViewAction())
self.extAppsBar.addAction(extapp)
- if toMenu and self._showToolsMenu:
+ if toMenu and self.TOOLS_MENU_ENABLED:
if self.toolsMenu is None:
self.createToolsMenu()
self.externalAppsMenu.addAction(extapp)
@@ -1059,7 +1110,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
def resetHeartbeat(self):
'''resets the heartbeat interval'''
- self.setHeartbeat(self.__class__._heartbeat)
+ self.setHeartbeat(self.__class__.HEARTBEAT)
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
# Public slots for apply/restore changes
@@ -1106,24 +1157,24 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
if __name__ == "__main__":
- import taurus.qt.qtgui.application
- app = taurus.qt.qtgui.application.TaurusApplication()
+ from taurus.qt.qtgui.application import TaurusApplication
+ app = TaurusApplication(cmd_line_parser=None)
app.setApplicationName('TaurusMainWindow-test')
app.setOrganizationName('ALBA')
app.basicConfig()
class MyMainWindow(TaurusMainWindow):
- _heartbeat = 300 # blinking semi-period in ms. Set to None for not showing the Heart beat LED
- _showFileMenu = True
- _showViewMenu = True
- _showTaurusMenu = False
- _showToolsMenu = True
- _showHelpMenu = True
+ HEARTBEAT = 300 # blinking semi-period in ms. Set to None for not showing the Heart beat LED
+ FILE_MENU_ENABLED = True
+ VIEW_MENU_ENABLED = True
+ TAURUS_MENU_ENABLED = False
+ TOOLS_MENU_ENABLED = True
+ HELP_MENU_ENABLED = True
# Allows the user to change/create/delete perspectives
- _supportUserPerspectives = True
- _showLogger = True
+ USER_PERSPECTIVES_ENABLED = True
+ LOGGER_WIDGET_ENABLED = True
# set to None for disabling splash screen
- _splashLogo = "large:TaurusSplash.png"
+ SPLASH_LOGO_NAME = "large:TaurusSplash.png"
_splashMessage = "Initializing Main window..."
def __init__(self):