From 45de016abbac6d70cba4a6a53c5b2fac4d9ae639 Mon Sep 17 00:00:00 2001 From: M2j Date: Fri, 2 Mar 2012 13:11:13 +0100 Subject: [PATCH] derive OpenLPToolbar().actions keys from object names to prevent collisions in case translators translate different strings same. --- openlp/core/lib/toolbar.py | 66 ++++++++---------------- openlp/core/ui/media/mediacontroller.py | 10 ++-- openlp/core/ui/servicemanager.py | 13 ++--- openlp/core/ui/slidecontroller.py | 68 ++++++++++++------------- 4 files changed, 63 insertions(+), 94 deletions(-) diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 4fae1aebd..8b50081db 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -47,76 +47,50 @@ class OpenLPToolbar(QtGui.QToolBar): """ QtGui.QToolBar.__init__(self, parent) # useful to be able to reuse button icons... - self.icons = {} self.setIconSize(QtCore.QSize(20, 20)) self.actions = {} log.debug(u'Init done for %s' % parent.__class__.__name__) def addToolbarButton(self, name, **kwargs): """ - A method to help developers easily add a button to the toolbar. A new - QAction is created by calling ``create_action()``. The action is added - to the toolbar and the toolbar is set as parent. For more details please - look at openlp.core.lib.ui.create_action() + A method to help developers easily add a button to the toolbar. + A new QAction is created by calling ``create_action()``. The action is + added to the toolbar and the toolbar is set as parent. + For more details please look at openlp.core.lib.ui.create_action() """ action = create_widget_action(self, name, **kwargs) - # The ObjectNames should be used as keys. So translators can't break - # anything. - title = kwargs.get(u'text', u'') - self.actions[title] = action - if u'icon' in kwargs: - self.icons[title] = action.icon() + self.actions[name] = action return action def addToolbarSeparator(self, handle): """ - Add a Separator bar to the toolbar and store it's Handle + Add a separator bar and store it's handle. """ action = self.addSeparator() self.actions[handle] = action - def addToolbarWidget(self, handle, widget): + def addToolbarWidget(self, widget): """ - Add a Widget to the toolbar and store it's Handle + Add a widget and store it's handle under the widgets object name. """ action = self.addWidget(widget) - self.actions[handle] = action + self.actions[unicode(widget.objectName())] = action - def getIconFromTitle(self, title): + def setWidgetVisible(self, widgets, visible=True): """ - Search through the list of icons for an icon with a particular title, - and return that icon. + Set the visibitity for a widget or a list of widgets. - ``title`` - The title of the icon to search for. - """ - title = QtCore.QString(title) - try: - if self.icons[title]: - return self.icons[title] - except KeyError: - log.exception(u'getIconFromTitle - no icon for %s' % title) - return QtGui.QIcon() + ``widget`` + A list of string with widget object names. - def makeWidgetsInvisible(self, widgets): + ``visible`` + The new state as bool. """ - Hide a set of widgets. - - ``widgets`` - The list of names of widgets to be hidden. - """ - for widget in widgets: - self.actions[widget].setVisible(False) - - def makeWidgetsVisible(self, widgets): - """ - Show a set of widgets. - - ``widgets`` - The list of names of widgets to be shown. - """ - for widget in widgets: - self.actions[widget].setVisible(True) + for handle in widgets: + if handle in self.actions: + self.actions[handle].setVisible(visible) + else: + log.warn(u'No handle "%s" in actions list.', unicode(handle)) def addPushButton(self, image_file=None, text=u''): """ diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 3bb9da6a0..ba9d5a6e5 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -226,9 +226,8 @@ class MediaController(object): controller.seekSlider.setToolTip(translate( 'OpenLP.SlideController', 'Video position.')) controller.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - controller.seekSlider.setObjectName(u'seek_slider') - controller.mediabar.addToolbarWidget(u'Seek Slider', - controller.seekSlider) + controller.seekSlider.setObjectName(u'seekSlider') + controller.mediabar.addToolbarWidget(controller.seekSlider) # Build the volumeSlider. controller.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) controller.volumeSlider.setTickInterval(10) @@ -240,9 +239,8 @@ class MediaController(object): 'OpenLP.SlideController', 'Audio Volume.')) controller.volumeSlider.setValue(controller.media_info.volume) controller.volumeSlider.setGeometry(QtCore.QRect(90, 160, 221, 24)) - controller.volumeSlider.setObjectName(u'volume_slider') - controller.mediabar.addToolbarWidget(u'Audio Volume', - controller.volumeSlider) + controller.volumeSlider.setObjectName(u'volumeSlider') + controller.mediabar.addToolbarWidget(controller.volumeSlider) control_panel.addWidget(controller.mediabar) controller.mediabar.setVisible(False) # Signals diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 03fad5dae..593806079 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -133,7 +133,7 @@ class ServiceManager(QtGui.QWidget): self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) self.themeLabel.setMargin(3) self.themeLabel.setObjectName(u'themeLabel') - self.toolbar.addToolbarWidget(u'ThemeLabel', self.themeLabel) + self.toolbar.addToolbarWidget(self.themeLabel) self.themeComboBox = QtGui.QComboBox(self.toolbar) self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager', 'Select a theme for the service.')) @@ -142,7 +142,7 @@ class ServiceManager(QtGui.QWidget): self.themeComboBox.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) self.themeComboBox.setObjectName(u'themeComboBox') - self.toolbar.addToolbarWidget(u'ThemeWidget', self.themeComboBox) + self.toolbar.addToolbarWidget(self.themeComboBox) self.toolbar.setObjectName(u'toolbar') self.layout.addWidget(self.toolbar) # Create the service manager list @@ -1120,12 +1120,9 @@ class ServiceManager(QtGui.QWidget): sure the theme combo box is in the correct state. """ log.debug(u'themeChange') - if self.mainwindow.renderer.theme_level == ThemeLevel.Global: - self.toolbar.actions[u'ThemeLabel'].setVisible(False) - self.toolbar.actions[u'ThemeWidget'].setVisible(False) - else: - self.toolbar.actions[u'ThemeLabel'].setVisible(True) - self.toolbar.actions[u'ThemeWidget'].setVisible(True) + visible = self.mainwindow.renderer.theme_level == ThemeLevel.Global + self.themeLabel.setVisible(visible) + self.themeComboBox.setVisible(visible) def regenerateServiceItems(self): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c4c3e5adb..e0ea398bb 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -91,16 +91,16 @@ class SlideController(Controller): self.imageManager = self.parent().imageManager self.mediaController = self.parent().mediaController self.loopList = [ - u'Play Slides Menu', - u'Loop Separator', - u'Image SpinBox' + u'playSlidesMenu', + u'loopSeparator', + u'delaySpinBox' ] self.songEditList = [ - u'Edit Song', + u'editSong', ] self.nextPreviousList = [ - u'Previous Slide', - u'Next Slide' + u'previousItem', + u'nextItem' ] self.timer_id = 0 self.songEdit = False @@ -169,13 +169,13 @@ class SlideController(Controller): self.toolbar.sizePolicy().hasHeightForWidth()) self.toolbar.setSizePolicy(sizeToolbarPolicy) self.previousItem = self.toolbar.addToolbarButton(u'previousItem', - text=u'Previous Slide', icon=u':/slides/slide_previous.png', + icon=u':/slides/slide_previous.png', tooltip=translate('OpenLP.SlideController', 'Move to previous.'), shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], context=QtCore.Qt.WidgetWithChildrenShortcut, triggers=self.onSlideSelectedPrevious) self.nextItem = self.toolbar.addToolbarButton(u'nextItem', - text=u'Next Slide', icon=u':/slides/slide_next.png', + icon=u':/slides/slide_next.png', tooltip=translate('OpenLP.SlideController', 'Move to next.'), shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], context=QtCore.Qt.WidgetWithChildrenShortcut, @@ -184,11 +184,12 @@ class SlideController(Controller): if self.isLive: # Hide Menu self.hideMenu = QtGui.QToolButton(self.toolbar) + self.hideMenu.setObjectName(u'hideMenu') self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) self.hideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.toolbar)) + self.toolbar.addToolbarWidget(self.hideMenu) self.blankScreen = create_action(self.hideMenu, u'blankScreen', text=translate('OpenLP.SlideController', 'Blank Screen'), icon=u':/slides/slide_blank.png', checked=False, @@ -208,17 +209,17 @@ class SlideController(Controller): self.hideMenu.menu().addAction(self.blankScreen) self.hideMenu.menu().addAction(self.themeScreen) self.hideMenu.menu().addAction(self.desktopScreen) - self.toolbar.addToolbarSeparator(u'Loop Separator') + self.toolbar.addToolbarSeparator(u'loopSeparator') # Play Slides Menu self.playSlidesMenu = QtGui.QToolButton(self.toolbar) + self.playSlidesMenu.setObjectName(u'playSlidesMenu') self.playSlidesMenu.setText(translate('OpenLP.SlideController', 'Play Slides')) self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.toolbar.addToolbarWidget(u'Play Slides Menu', - self.playSlidesMenu) self.playSlidesMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Play Slides'), self.toolbar)) + self.toolbar.addToolbarWidget(self.playSlidesMenu) self.playSlidesLoop = create_action(self.playSlidesMenu, u'playSlidesLoop', text=UiStrings().PlaySlidesInLoop, icon=u':/media/media_time.png', checked=False, shortcuts=[], @@ -238,26 +239,24 @@ class SlideController(Controller): self.playSlidesMenu.menu().addAction(self.playSlidesOnce) # Loop Delay Spinbox self.delaySpinBox = QtGui.QSpinBox() + self.delaySpinBox.setObjectName(u'delaySpinBox') self.delaySpinBox.setRange(1, 180) - self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) self.delaySpinBox.setSuffix(UiStrings().Seconds) self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds.')) + self.toolbar.addToolbarWidget(self.delaySpinBox) else: self.toolbar.addToolbarButton(u'goLive', - # Does not need translating - control string. - text=u'Go Live', icon=u':/general/general_live.png', + icon=u':/general/general_live.png', tooltip=translate('OpenLP.SlideController', 'Move to live.'), triggers=self.onGoLive) self.toolbar.addToolbarButton(u'addToService', - # Does not need translating - control string. - text=u'Add to Service', icon=u':/general/general_add.png', + icon=u':/general/general_add.png', tooltip=translate('OpenLP.SlideController', 'Add to Service.'), triggers=self.onPreviewAddToService) self.toolbar.addToolbarSeparator(u'Close Separator') self.toolbar.addToolbarButton(u'editSong', - # Does not need translating - control string. - text=u'Edit Song', icon=u':/general/general_edit.png', + icon=u':/general/general_edit.png', tooltip=translate('OpenLP.SlideController', 'Edit and reload song preview.'), triggers=self.onEditSong) self.controllerLayout.addWidget(self.toolbar) @@ -266,12 +265,13 @@ class SlideController(Controller): if self.isLive: # Build the Song Toolbar self.songMenu = QtGui.QToolButton(self.toolbar) + self.songMenu.setObjectName(u'songMenu') self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) - self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) self.songMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Go To'), self.toolbar)) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) + self.songMenu.hide() + self.toolbar.addToolbarWidget(self.songMenu) # Stuff for items with background audio. self.audioPauseItem = self.toolbar.addToolbarButton(u'audioPause', text=u'Pause Audio', icon=u':/slides/media_playback_pause.png', @@ -358,12 +358,12 @@ class SlideController(Controller): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_toggle_display'), self.toggleDisplay) - self.toolbar.makeWidgetsInvisible(self.loopList) + self.toolbar.setWidgetVisible(self.loopList, False) else: QtCore.QObject.connect(self.previewListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onGoLiveClick) - self.toolbar.makeWidgetsInvisible(self.songEditList) + self.toolbar.setWidgetVisible(self.songEditList, False) if self.isLive: self.setLiveHotkeys(self) self.__addActionsToWidget(self.previewListWidget) @@ -661,9 +661,9 @@ class SlideController(Controller): # Work-around for OS X, hide and then show the toolbar # See bug #791050 self.toolbar.hide() - self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) - self.toolbar.makeWidgetsInvisible(self.loopList) + self.mediabar.hide() + self.songMenu.hide() + self.toolbar.setWidgetVisible(self.loopList, False) # Reset the button self.playSlidesOnce.setChecked(False) self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) @@ -673,17 +673,17 @@ class SlideController(Controller): if QtCore.QSettings().value( self.parent().songsSettingsSection + u'/display songbar', QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: - self.toolbar.makeWidgetsVisible([u'Song Menu']) + self.songMenu.show() if item.is_capable(ItemCapabilities.CanLoop) and \ len(item.get_frames()) > 1: - self.toolbar.makeWidgetsVisible(self.loopList) + self.toolbar.setWidgetVisible(self.loopList) if item.is_media(): self.mediabar.setVisible(True) - self.toolbar.makeWidgetsInvisible(self.nextPreviousList) + self.toolbar.setWidgetVisible(self.nextPreviousList, False) else: # Work-around for OS X, hide and then show the toolbar # See bug #791050 - self.toolbar.makeWidgetsVisible(self.nextPreviousList) + self.toolbar.setWidgetVisible(self.nextPreviousList) self.toolbar.show() def enablePreviewToolBar(self, item): @@ -694,16 +694,16 @@ class SlideController(Controller): # See bug #791050 self.toolbar.hide() self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible(self.songEditList) + self.toolbar.setWidgetVisible(self.songEditList, False) if item.is_capable(ItemCapabilities.CanEdit) and item.from_plugin: - self.toolbar.makeWidgetsVisible(self.songEditList) + self.toolbar.setWidgetVisible(self.songEditList) elif item.is_media(): self.mediabar.setVisible(True) - self.toolbar.makeWidgetsInvisible(self.nextPreviousList) + self.toolbar.setWidgetVisible(self.nextPreviousList, False) if not item.is_media(): # Work-around for OS X, hide and then show the toolbar # See bug #791050 - self.toolbar.makeWidgetsVisible(self.nextPreviousList) + self.toolbar.setWidgetVisible(self.nextPreviousList) self.toolbar.show() def refreshServiceItem(self):