diff options
Diffstat (limited to 'lib/taurus/qt/qtgui/container/taurusmainwindow.py')
-rw-r--r-- | lib/taurus/qt/qtgui/container/taurusmainwindow.py | 157 |
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): |