derive OpenLPToolbar().actions keys from object names to prevent collisions in

case translators translate different strings same.
This commit is contained in:
M2j 2012-03-02 13:11:13 +01:00
parent 6d909c64eb
commit 45de016abb
4 changed files with 63 additions and 94 deletions

View File

@ -47,76 +47,50 @@ class OpenLPToolbar(QtGui.QToolBar):
""" """
QtGui.QToolBar.__init__(self, parent) QtGui.QToolBar.__init__(self, parent)
# useful to be able to reuse button icons... # useful to be able to reuse button icons...
self.icons = {}
self.setIconSize(QtCore.QSize(20, 20)) self.setIconSize(QtCore.QSize(20, 20))
self.actions = {} self.actions = {}
log.debug(u'Init done for %s' % parent.__class__.__name__) log.debug(u'Init done for %s' % parent.__class__.__name__)
def addToolbarButton(self, name, **kwargs): def addToolbarButton(self, name, **kwargs):
""" """
A method to help developers easily add a button to the toolbar. A new A method to help developers easily add a button to the toolbar.
QAction is created by calling ``create_action()``. The action is added A new QAction is created by calling ``create_action()``. The action is
to the toolbar and the toolbar is set as parent. For more details please added to the toolbar and the toolbar is set as parent.
look at openlp.core.lib.ui.create_action() For more details please look at openlp.core.lib.ui.create_action()
""" """
action = create_widget_action(self, name, **kwargs) action = create_widget_action(self, name, **kwargs)
# The ObjectNames should be used as keys. So translators can't break self.actions[name] = action
# anything.
title = kwargs.get(u'text', u'')
self.actions[title] = action
if u'icon' in kwargs:
self.icons[title] = action.icon()
return action return action
def addToolbarSeparator(self, handle): 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() action = self.addSeparator()
self.actions[handle] = action 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) 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, Set the visibitity for a widget or a list of widgets.
and return that icon.
``title`` ``widget``
The title of the icon to search for. A list of string with widget object names.
"""
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()
def makeWidgetsInvisible(self, widgets): ``visible``
The new state as bool.
""" """
Hide a set of widgets. for handle in widgets:
if handle in self.actions:
``widgets`` self.actions[handle].setVisible(visible)
The list of names of widgets to be hidden. else:
""" log.warn(u'No handle "%s" in actions list.', unicode(handle))
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)
def addPushButton(self, image_file=None, text=u''): def addPushButton(self, image_file=None, text=u''):
""" """

View File

@ -226,9 +226,8 @@ class MediaController(object):
controller.seekSlider.setToolTip(translate( controller.seekSlider.setToolTip(translate(
'OpenLP.SlideController', 'Video position.')) 'OpenLP.SlideController', 'Video position.'))
controller.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) controller.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
controller.seekSlider.setObjectName(u'seek_slider') controller.seekSlider.setObjectName(u'seekSlider')
controller.mediabar.addToolbarWidget(u'Seek Slider', controller.mediabar.addToolbarWidget(controller.seekSlider)
controller.seekSlider)
# Build the volumeSlider. # Build the volumeSlider.
controller.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) controller.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
controller.volumeSlider.setTickInterval(10) controller.volumeSlider.setTickInterval(10)
@ -240,9 +239,8 @@ class MediaController(object):
'OpenLP.SlideController', 'Audio Volume.')) 'OpenLP.SlideController', 'Audio Volume.'))
controller.volumeSlider.setValue(controller.media_info.volume) controller.volumeSlider.setValue(controller.media_info.volume)
controller.volumeSlider.setGeometry(QtCore.QRect(90, 160, 221, 24)) controller.volumeSlider.setGeometry(QtCore.QRect(90, 160, 221, 24))
controller.volumeSlider.setObjectName(u'volume_slider') controller.volumeSlider.setObjectName(u'volumeSlider')
controller.mediabar.addToolbarWidget(u'Audio Volume', controller.mediabar.addToolbarWidget(controller.volumeSlider)
controller.volumeSlider)
control_panel.addWidget(controller.mediabar) control_panel.addWidget(controller.mediabar)
controller.mediabar.setVisible(False) controller.mediabar.setVisible(False)
# Signals # Signals

View File

@ -133,7 +133,7 @@ class ServiceManager(QtGui.QWidget):
self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self)
self.themeLabel.setMargin(3) self.themeLabel.setMargin(3)
self.themeLabel.setObjectName(u'themeLabel') 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 = QtGui.QComboBox(self.toolbar)
self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager', self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager',
'Select a theme for the service.')) 'Select a theme for the service.'))
@ -142,7 +142,7 @@ class ServiceManager(QtGui.QWidget):
self.themeComboBox.setSizePolicy( self.themeComboBox.setSizePolicy(
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
self.themeComboBox.setObjectName(u'themeComboBox') self.themeComboBox.setObjectName(u'themeComboBox')
self.toolbar.addToolbarWidget(u'ThemeWidget', self.themeComboBox) self.toolbar.addToolbarWidget(self.themeComboBox)
self.toolbar.setObjectName(u'toolbar') self.toolbar.setObjectName(u'toolbar')
self.layout.addWidget(self.toolbar) self.layout.addWidget(self.toolbar)
# Create the service manager list # Create the service manager list
@ -1120,12 +1120,9 @@ class ServiceManager(QtGui.QWidget):
sure the theme combo box is in the correct state. sure the theme combo box is in the correct state.
""" """
log.debug(u'themeChange') log.debug(u'themeChange')
if self.mainwindow.renderer.theme_level == ThemeLevel.Global: visible = self.mainwindow.renderer.theme_level == ThemeLevel.Global
self.toolbar.actions[u'ThemeLabel'].setVisible(False) self.themeLabel.setVisible(visible)
self.toolbar.actions[u'ThemeWidget'].setVisible(False) self.themeComboBox.setVisible(visible)
else:
self.toolbar.actions[u'ThemeLabel'].setVisible(True)
self.toolbar.actions[u'ThemeWidget'].setVisible(True)
def regenerateServiceItems(self): def regenerateServiceItems(self):
""" """

View File

@ -91,16 +91,16 @@ class SlideController(Controller):
self.imageManager = self.parent().imageManager self.imageManager = self.parent().imageManager
self.mediaController = self.parent().mediaController self.mediaController = self.parent().mediaController
self.loopList = [ self.loopList = [
u'Play Slides Menu', u'playSlidesMenu',
u'Loop Separator', u'loopSeparator',
u'Image SpinBox' u'delaySpinBox'
] ]
self.songEditList = [ self.songEditList = [
u'Edit Song', u'editSong',
] ]
self.nextPreviousList = [ self.nextPreviousList = [
u'Previous Slide', u'previousItem',
u'Next Slide' u'nextItem'
] ]
self.timer_id = 0 self.timer_id = 0
self.songEdit = False self.songEdit = False
@ -169,13 +169,13 @@ class SlideController(Controller):
self.toolbar.sizePolicy().hasHeightForWidth()) self.toolbar.sizePolicy().hasHeightForWidth())
self.toolbar.setSizePolicy(sizeToolbarPolicy) self.toolbar.setSizePolicy(sizeToolbarPolicy)
self.previousItem = self.toolbar.addToolbarButton(u'previousItem', 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.'), tooltip=translate('OpenLP.SlideController', 'Move to previous.'),
shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp],
context=QtCore.Qt.WidgetWithChildrenShortcut, context=QtCore.Qt.WidgetWithChildrenShortcut,
triggers=self.onSlideSelectedPrevious) triggers=self.onSlideSelectedPrevious)
self.nextItem = self.toolbar.addToolbarButton(u'nextItem', 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.'), tooltip=translate('OpenLP.SlideController', 'Move to next.'),
shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown],
context=QtCore.Qt.WidgetWithChildrenShortcut, context=QtCore.Qt.WidgetWithChildrenShortcut,
@ -184,11 +184,12 @@ class SlideController(Controller):
if self.isLive: if self.isLive:
# Hide Menu # Hide Menu
self.hideMenu = QtGui.QToolButton(self.toolbar) self.hideMenu = QtGui.QToolButton(self.toolbar)
self.hideMenu.setObjectName(u'hideMenu')
self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide'))
self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu)
self.hideMenu.setMenu(QtGui.QMenu( self.hideMenu.setMenu(QtGui.QMenu(
translate('OpenLP.SlideController', 'Hide'), self.toolbar)) translate('OpenLP.SlideController', 'Hide'), self.toolbar))
self.toolbar.addToolbarWidget(self.hideMenu)
self.blankScreen = create_action(self.hideMenu, u'blankScreen', self.blankScreen = create_action(self.hideMenu, u'blankScreen',
text=translate('OpenLP.SlideController', 'Blank Screen'), text=translate('OpenLP.SlideController', 'Blank Screen'),
icon=u':/slides/slide_blank.png', checked=False, 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.blankScreen)
self.hideMenu.menu().addAction(self.themeScreen) self.hideMenu.menu().addAction(self.themeScreen)
self.hideMenu.menu().addAction(self.desktopScreen) self.hideMenu.menu().addAction(self.desktopScreen)
self.toolbar.addToolbarSeparator(u'Loop Separator') self.toolbar.addToolbarSeparator(u'loopSeparator')
# Play Slides Menu # Play Slides Menu
self.playSlidesMenu = QtGui.QToolButton(self.toolbar) self.playSlidesMenu = QtGui.QToolButton(self.toolbar)
self.playSlidesMenu.setObjectName(u'playSlidesMenu')
self.playSlidesMenu.setText(translate('OpenLP.SlideController', self.playSlidesMenu.setText(translate('OpenLP.SlideController',
'Play Slides')) 'Play Slides'))
self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
self.toolbar.addToolbarWidget(u'Play Slides Menu',
self.playSlidesMenu)
self.playSlidesMenu.setMenu(QtGui.QMenu( self.playSlidesMenu.setMenu(QtGui.QMenu(
translate('OpenLP.SlideController', 'Play Slides'), translate('OpenLP.SlideController', 'Play Slides'),
self.toolbar)) self.toolbar))
self.toolbar.addToolbarWidget(self.playSlidesMenu)
self.playSlidesLoop = create_action(self.playSlidesMenu, self.playSlidesLoop = create_action(self.playSlidesMenu,
u'playSlidesLoop', text=UiStrings().PlaySlidesInLoop, u'playSlidesLoop', text=UiStrings().PlaySlidesInLoop,
icon=u':/media/media_time.png', checked=False, shortcuts=[], icon=u':/media/media_time.png', checked=False, shortcuts=[],
@ -238,26 +239,24 @@ class SlideController(Controller):
self.playSlidesMenu.menu().addAction(self.playSlidesOnce) self.playSlidesMenu.menu().addAction(self.playSlidesOnce)
# Loop Delay Spinbox # Loop Delay Spinbox
self.delaySpinBox = QtGui.QSpinBox() self.delaySpinBox = QtGui.QSpinBox()
self.delaySpinBox.setObjectName(u'delaySpinBox')
self.delaySpinBox.setRange(1, 180) self.delaySpinBox.setRange(1, 180)
self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox)
self.delaySpinBox.setSuffix(UiStrings().Seconds) self.delaySpinBox.setSuffix(UiStrings().Seconds)
self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', self.delaySpinBox.setToolTip(translate('OpenLP.SlideController',
'Delay between slides in seconds.')) 'Delay between slides in seconds.'))
self.toolbar.addToolbarWidget(self.delaySpinBox)
else: else:
self.toolbar.addToolbarButton(u'goLive', self.toolbar.addToolbarButton(u'goLive',
# Does not need translating - control string. icon=u':/general/general_live.png',
text=u'Go Live', icon=u':/general/general_live.png',
tooltip=translate('OpenLP.SlideController', 'Move to live.'), tooltip=translate('OpenLP.SlideController', 'Move to live.'),
triggers=self.onGoLive) triggers=self.onGoLive)
self.toolbar.addToolbarButton(u'addToService', self.toolbar.addToolbarButton(u'addToService',
# Does not need translating - control string. icon=u':/general/general_add.png',
text=u'Add to Service', icon=u':/general/general_add.png',
tooltip=translate('OpenLP.SlideController', 'Add to Service.'), tooltip=translate('OpenLP.SlideController', 'Add to Service.'),
triggers=self.onPreviewAddToService) triggers=self.onPreviewAddToService)
self.toolbar.addToolbarSeparator(u'Close Separator') self.toolbar.addToolbarSeparator(u'Close Separator')
self.toolbar.addToolbarButton(u'editSong', self.toolbar.addToolbarButton(u'editSong',
# Does not need translating - control string. icon=u':/general/general_edit.png',
text=u'Edit Song', icon=u':/general/general_edit.png',
tooltip=translate('OpenLP.SlideController', tooltip=translate('OpenLP.SlideController',
'Edit and reload song preview.'), triggers=self.onEditSong) 'Edit and reload song preview.'), triggers=self.onEditSong)
self.controllerLayout.addWidget(self.toolbar) self.controllerLayout.addWidget(self.toolbar)
@ -266,12 +265,13 @@ class SlideController(Controller):
if self.isLive: if self.isLive:
# Build the Song Toolbar # Build the Song Toolbar
self.songMenu = QtGui.QToolButton(self.toolbar) self.songMenu = QtGui.QToolButton(self.toolbar)
self.songMenu.setObjectName(u'songMenu')
self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) self.songMenu.setText(translate('OpenLP.SlideController', 'Go To'))
self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu)
self.songMenu.setMenu(QtGui.QMenu( self.songMenu.setMenu(QtGui.QMenu(
translate('OpenLP.SlideController', 'Go To'), self.toolbar)) 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. # Stuff for items with background audio.
self.audioPauseItem = self.toolbar.addToolbarButton(u'audioPause', self.audioPauseItem = self.toolbar.addToolbarButton(u'audioPause',
text=u'Pause Audio', icon=u':/slides/media_playback_pause.png', 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.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_toggle_display'), QtCore.SIGNAL(u'slidecontroller_toggle_display'),
self.toggleDisplay) self.toggleDisplay)
self.toolbar.makeWidgetsInvisible(self.loopList) self.toolbar.setWidgetVisible(self.loopList, False)
else: else:
QtCore.QObject.connect(self.previewListWidget, QtCore.QObject.connect(self.previewListWidget,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
self.onGoLiveClick) self.onGoLiveClick)
self.toolbar.makeWidgetsInvisible(self.songEditList) self.toolbar.setWidgetVisible(self.songEditList, False)
if self.isLive: if self.isLive:
self.setLiveHotkeys(self) self.setLiveHotkeys(self)
self.__addActionsToWidget(self.previewListWidget) self.__addActionsToWidget(self.previewListWidget)
@ -661,9 +661,9 @@ class SlideController(Controller):
# Work-around for OS X, hide and then show the toolbar # Work-around for OS X, hide and then show the toolbar
# See bug #791050 # See bug #791050
self.toolbar.hide() self.toolbar.hide()
self.mediabar.setVisible(False) self.mediabar.hide()
self.toolbar.makeWidgetsInvisible([u'Song Menu']) self.songMenu.hide()
self.toolbar.makeWidgetsInvisible(self.loopList) self.toolbar.setWidgetVisible(self.loopList, False)
# Reset the button # Reset the button
self.playSlidesOnce.setChecked(False) self.playSlidesOnce.setChecked(False)
self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png'))
@ -673,17 +673,17 @@ class SlideController(Controller):
if QtCore.QSettings().value( if QtCore.QSettings().value(
self.parent().songsSettingsSection + u'/display songbar', self.parent().songsSettingsSection + u'/display songbar',
QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: 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 \ if item.is_capable(ItemCapabilities.CanLoop) and \
len(item.get_frames()) > 1: len(item.get_frames()) > 1:
self.toolbar.makeWidgetsVisible(self.loopList) self.toolbar.setWidgetVisible(self.loopList)
if item.is_media(): if item.is_media():
self.mediabar.setVisible(True) self.mediabar.setVisible(True)
self.toolbar.makeWidgetsInvisible(self.nextPreviousList) self.toolbar.setWidgetVisible(self.nextPreviousList, False)
else: else:
# Work-around for OS X, hide and then show the toolbar # Work-around for OS X, hide and then show the toolbar
# See bug #791050 # See bug #791050
self.toolbar.makeWidgetsVisible(self.nextPreviousList) self.toolbar.setWidgetVisible(self.nextPreviousList)
self.toolbar.show() self.toolbar.show()
def enablePreviewToolBar(self, item): def enablePreviewToolBar(self, item):
@ -694,16 +694,16 @@ class SlideController(Controller):
# See bug #791050 # See bug #791050
self.toolbar.hide() self.toolbar.hide()
self.mediabar.setVisible(False) 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: if item.is_capable(ItemCapabilities.CanEdit) and item.from_plugin:
self.toolbar.makeWidgetsVisible(self.songEditList) self.toolbar.setWidgetVisible(self.songEditList)
elif item.is_media(): elif item.is_media():
self.mediabar.setVisible(True) self.mediabar.setVisible(True)
self.toolbar.makeWidgetsInvisible(self.nextPreviousList) self.toolbar.setWidgetVisible(self.nextPreviousList, False)
if not item.is_media(): if not item.is_media():
# Work-around for OS X, hide and then show the toolbar # Work-around for OS X, hide and then show the toolbar
# See bug #791050 # See bug #791050
self.toolbar.makeWidgetsVisible(self.nextPreviousList) self.toolbar.setWidgetVisible(self.nextPreviousList)
self.toolbar.show() self.toolbar.show()
def refreshServiceItem(self): def refreshServiceItem(self):