forked from openlp/openlp
derive OpenLPToolbar().actions keys from object names to prevent collisions in
case translators translate different strings same.
This commit is contained in:
parent
6d909c64eb
commit
45de016abb
@ -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''):
|
||||
"""
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
"""
|
||||
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user