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)
# 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''):
"""

View File

@ -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

View File

@ -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):
"""

View File

@ -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):