Bug #943919: Make shortcuts for "Move to Previous/Next" in live slide controller

configurable.
This commit is contained in:
M2j 2012-03-03 14:52:57 +01:00
parent 45de016abb
commit 587850bb59
11 changed files with 65 additions and 108 deletions

View File

@ -147,20 +147,6 @@ class MediaManagerItem(QtGui.QWidget):
self.toolbar = OpenLPToolbar(self)
self.pageLayout.addWidget(self.toolbar)
def addToolbarButton(self, name, **kwargs):
"""
A method to help developers easily add a button to the toolbar. For
details please have a look at OpenLPToolbar.addToolbarButton() and
openlp.core.lib.ui.create_action().
"""
return self.toolbar.addToolbarButton(name, **kwargs)
def addToolbarSeparator(self):
"""
A very simple method to add a separator to the toolbar.
"""
self.toolbar.addSeparator()
def setupUi(self):
"""
This method sets up the interface on the button. Plugin
@ -214,8 +200,9 @@ class MediaManagerItem(QtGui.QWidget):
u':/general/general_add.png', self.onAddClick])
for action in toolbar_actions:
if action[0] == StringContent.Preview:
self.addToolbarSeparator()
self.addToolbarButton(u'%s%sAction' % (self.plugin.name, action[0]),
self.toolbar.addSeparator()
self.toolbar.addToolbarAction(
u'%s%sAction' % (self.plugin.name, action[0]),
text=self.plugin.getString(action[1])[u'title'], icon=action[2],
tooltip=self.plugin.getString(action[1])[u'tooltip'],
triggers=action[3])

View File

@ -30,7 +30,7 @@ import logging
from PyQt4 import QtCore, QtGui
from openlp.core.lib import build_icon
from openlp.core.lib.ui import create_action
from openlp.core.lib.ui import create_widget_action
log = logging.getLogger(__name__)
@ -150,9 +150,8 @@ class SearchEdit(QtGui.QLineEdit):
menu = QtGui.QMenu(self)
first = None
for identifier, icon, title in items:
action = create_action(menu, u'', text=title, icon=icon,
action = create_widget_action(menu, text=title, icon=icon,
data=identifier, triggers=self._onMenuActionTriggered)
menu.addAction(action)
if first is None:
first = action
self._currentSearchType = identifier

View File

@ -51,7 +51,7 @@ class OpenLPToolbar(QtGui.QToolBar):
self.actions = {}
log.debug(u'Init done for %s' % parent.__class__.__name__)
def addToolbarButton(self, name, **kwargs):
def addToolbarAction(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
@ -62,13 +62,6 @@ class OpenLPToolbar(QtGui.QToolBar):
self.actions[name] = action
return action
def addToolbarSeparator(self, handle):
"""
Add a separator bar and store it's handle.
"""
action = self.addSeparator()
self.actions[handle] = action
def addToolbarWidget(self, widget):
"""
Add a widget and store it's handle under the widgets object name.
@ -88,18 +81,7 @@ class OpenLPToolbar(QtGui.QToolBar):
"""
for handle in widgets:
if handle in self.actions:
self.actions[handle].setVisible(visible)
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''):
"""
Adds a push button to the toolbar.
Returns the push button
"""
push_button = QtGui.QPushButton(build_icon(image_file), text)
push_button.setCheckable(True)
push_button.setFlat(True)
self.addWidget(push_button)
return push_button

View File

@ -204,17 +204,17 @@ class MediaController(object):
controller.media_info = MediaInfo()
# Build a Media ToolBar
controller.mediabar = OpenLPToolbar(controller)
controller.mediabar.addToolbarButton(u'playbackPlay',
controller.mediabar.addToolbarAction(u'playbackPlay',
text=u'media_playback_play',
icon=u':/slides/media_playback_start.png',
tooltip=translate('OpenLP.SlideController', 'Start playing media.'),
triggers=controller.sendToPlugins)
controller.mediabar.addToolbarButton(u'playbackPause',
controller.mediabar.addToolbarAction(u'playbackPause',
text=u'media_playback_pause',
icon=u':/slides/media_playback_pause.png',
tooltip=translate('OpenLP.SlideController', 'Pause playing media.'),
triggers=controller.sendToPlugins)
controller.mediabar.addToolbarButton(u'playbackStop',
controller.mediabar.addToolbarAction(u'playbackStop',
text=u'media_playback_stop',
icon=u':/slides/media_playback_stop.png',
tooltip=translate('OpenLP.SlideController', 'Stop playing media.'),

View File

@ -117,15 +117,15 @@ class ServiceManager(QtGui.QWidget):
self.layout.setMargin(0)
# Create the top toolbar
self.toolbar = OpenLPToolbar(self)
self.toolbar.addToolbarButton(u'newService',
self.toolbar.addToolbarAction(u'newService',
text=UiStrings().NewService, icon=u':/general/general_new.png',
tooltip=UiStrings().CreateService,
triggers=self.onNewServiceClicked)
self.toolbar.addToolbarButton(u'openService',
self.toolbar.addToolbarAction(u'openService',
text=UiStrings().OpenService, icon=u':/general/general_open.png',
tooltip=translate('OpenLP.ServiceManager',
'Load an existing service.'), triggers=self.onLoadServiceClicked)
self.toolbar.addToolbarButton(u'saveService',
self.toolbar.addToolbarAction(u'saveService',
text=UiStrings().SaveService, icon=u':/general/general_save.png',
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'),
triggers=self.saveFile)
@ -172,47 +172,47 @@ class ServiceManager(QtGui.QWidget):
action_list = ActionList.get_instance()
action_list.add_category(
unicode(UiStrings().Service), CategoryOrder.standardToolbar)
self.serviceManagerList.moveTop = self.orderToolbar.addToolbarButton(
self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(
u'moveTop', text=translate('OpenLP.ServiceManager', 'Move to &top'),
icon=u':/services/service_top.png', tooltip=translate(
'OpenLP.ServiceManager', 'Move item to the top of the service.'),
shortcuts=[QtCore.Qt.Key_Home], category=UiStrings().Service,
triggers=self.onServiceTop)
self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton(
self.serviceManagerList.moveUp = self.orderToolbar.addToolbarAction(
u'moveUp', text=translate('OpenLP.ServiceManager', 'Move &up'),
icon=u':/services/service_up.png',
tooltip=translate( 'OpenLP.ServiceManager',
'Move item up one position in the service.'),
shortcuts=[QtCore.Qt.Key_PageUp], category=UiStrings().Service,
triggers=self.onServiceUp)
self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton(
self.serviceManagerList.moveDown = self.orderToolbar.addToolbarAction(
u'moveDown', text=translate('OpenLP.ServiceManager', 'Move &down'),
icon=u':/services/service_down.png',
tooltip=translate('OpenLP.ServiceManager',
'Move item down one position in the service.'),
shortcuts=[QtCore.Qt.Key_PageDown], category=UiStrings().Service,
triggers=self.onServiceDown)
self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton(
self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarAction(
u'moveBottom',
text=translate('OpenLP.ServiceManager', 'Move to &bottom'),
icon=u':/services/service_bottom.png', tooltip=translate(
'OpenLP.ServiceManager', 'Move item to the end of the service.'),
shortcuts=[QtCore.Qt.Key_End], category=UiStrings().Service,
triggers=self.onServiceEnd)
self.serviceManagerList.down = self.orderToolbar.addToolbarButton(
self.serviceManagerList.down = self.orderToolbar.addToolbarAction(
u'down', text=translate('OpenLP.ServiceManager', 'Move &down'),
tooltip=translate('OpenLP.ServiceManager',
'Moves the selection down the window.'), visible=False,
shortcuts=[QtCore.Qt.Key_Down], triggers=self.onMoveSelectionDown)
action_list.add_action(self.serviceManagerList.down)
self.serviceManagerList.up = self.orderToolbar.addToolbarButton(
self.serviceManagerList.up = self.orderToolbar.addToolbarAction(
u'up', text=translate('OpenLP.ServiceManager', 'Move up'),
tooltip=translate('OpenLP.ServiceManager',
'Moves the selection up the window.'), visible=False,
shortcuts=[QtCore.Qt.Key_Up], triggers=self.onMoveSelectionUp)
action_list.add_action(self.serviceManagerList.up)
self.orderToolbar.addSeparator()
self.serviceManagerList.delete = self.orderToolbar.addToolbarButton(
self.serviceManagerList.delete = self.orderToolbar.addToolbarAction(
u'delete',
text=translate('OpenLP.ServiceManager', '&Delete From Service'),
icon=u':/general/general_delete.png',
@ -220,13 +220,13 @@ class ServiceManager(QtGui.QWidget):
'Delete the selected item from the service.'),
triggers=self.onDeleteFromService)
self.orderToolbar.addSeparator()
self.serviceManagerList.expand = self.orderToolbar.addToolbarButton(
self.serviceManagerList.expand = self.orderToolbar.addToolbarAction(
u'expand', text=translate('OpenLP.ServiceManager', '&Expand all'),
icon=u':/services/service_expand_all.png', tooltip=translate(
'OpenLP.ServiceManager', 'Expand all the service items.'),
shortcuts=[QtCore.Qt.Key_Plus], category=UiStrings().Service,
triggers=self.onExpandAll)
self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton(
self.serviceManagerList.collapse = self.orderToolbar.addToolbarAction(
u'collapse',
text=translate('OpenLP.ServiceManager', '&Collapse all'),
icon=u':/services/service_collapse_all.png', tooltip=translate(
@ -234,7 +234,7 @@ class ServiceManager(QtGui.QWidget):
shortcuts=[QtCore.Qt.Key_Minus], category=UiStrings().Service,
triggers=self.onCollapseAll)
self.orderToolbar.addSeparator()
self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton(
self.serviceManagerList.makeLive = self.orderToolbar.addToolbarAction(
u'makeLive', text=translate('OpenLP.ServiceManager', 'Go Live'),
icon=u':/general/general_live.png', tooltip=translate(
'OpenLP.ServiceManager', 'Send the selected item to Live.'),

View File

@ -122,10 +122,14 @@ class SlideController(Controller):
self.typePrefix = u'live'
self.keypress_queue = deque()
self.keypress_loop = False
self.category = UiStrings().LiveToolbar
ActionList.get_instance().add_category(
unicode(self.category), CategoryOrder.standardToolbar)
else:
self.typeLabel.setText(UiStrings().Preview)
self.split = 0
self.typePrefix = u'preview'
self.category = None
self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;')
self.typeLabel.setAlignment(QtCore.Qt.AlignCenter)
self.panelLayout.addWidget(self.typeLabel)
@ -168,19 +172,23 @@ class SlideController(Controller):
sizeToolbarPolicy.setHeightForWidth(
self.toolbar.sizePolicy().hasHeightForWidth())
self.toolbar.setSizePolicy(sizeToolbarPolicy)
self.previousItem = self.toolbar.addToolbarButton(u'previousItem',
self.previousItem = self.toolbar.addToolbarAction(
u'previousItem_' + self.typePrefix,
text=translate('OpenLP.SlideController', 'Previous Item'),
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',
category=self.category, triggers=self.onSlideSelectedPrevious)
self.nextItem = self.toolbar.addToolbarAction(
u'nextItem_' + self.typePrefix,
text=translate('OpenLP.SlideController', 'Next Item'),
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,
triggers=self.onSlideSelectedNext)
self.toolbar.addToolbarSeparator(u'Close Separator')
category=self.category, triggers=self.onSlideSelectedNext)
self.toolbar.addSeparator()
if self.isLive:
# Hide Menu
self.hideMenu = QtGui.QToolButton(self.toolbar)
@ -194,22 +202,22 @@ class SlideController(Controller):
text=translate('OpenLP.SlideController', 'Blank Screen'),
icon=u':/slides/slide_blank.png', checked=False,
shortcuts=[QtCore.Qt.Key_Period],
category=UiStrings().LiveToolbar, triggers=self.onBlankDisplay)
category=self.category, triggers=self.onBlankDisplay)
self.themeScreen = create_action(self.hideMenu, u'themeScreen',
text=translate('OpenLP.SlideController', 'Blank to Theme'),
icon=u':/slides/slide_theme.png', checked=False,
shortcuts=[QtGui.QKeySequence(u'T')],
category=UiStrings().LiveToolbar, triggers=self.onThemeDisplay)
category=self.category, triggers=self.onThemeDisplay)
self.desktopScreen = create_action(self.hideMenu, u'desktopScreen',
text=translate('OpenLP.SlideController', 'Show Desktop'),
icon=u':/slides/slide_desktop.png', checked=False,
shortcuts=[QtGui.QKeySequence(u'D')],
category=UiStrings().LiveToolbar, triggers=self.onHideDisplay)
category=self.category, triggers=self.onHideDisplay)
self.hideMenu.setDefaultAction(self.blankScreen)
self.hideMenu.menu().addAction(self.blankScreen)
self.hideMenu.menu().addAction(self.themeScreen)
self.hideMenu.menu().addAction(self.desktopScreen)
self.toolbar.addToolbarSeparator(u'loopSeparator')
self.toolbar.addToolbarAction(u'loopSeparator', separator=True)
# Play Slides Menu
self.playSlidesMenu = QtGui.QToolButton(self.toolbar)
self.playSlidesMenu.setObjectName(u'playSlidesMenu')
@ -223,13 +231,11 @@ class SlideController(Controller):
self.playSlidesLoop = create_action(self.playSlidesMenu,
u'playSlidesLoop', text=UiStrings().PlaySlidesInLoop,
icon=u':/media/media_time.png', checked=False, shortcuts=[],
category=UiStrings().LiveToolbar,
triggers=self.onPlaySlidesLoop)
category=self.category, triggers=self.onPlaySlidesLoop)
self.playSlidesOnce = create_action(self.playSlidesMenu,
u'playSlidesOnce', text=UiStrings().PlaySlidesToEnd,
icon=u':/media/media_time.png', checked=False, shortcuts=[],
category=UiStrings().LiveToolbar,
triggers=self.onPlaySlidesOnce)
category=self.category, triggers=self.onPlaySlidesOnce)
if QtCore.QSettings().value(self.parent().generalSettingsSection +
u'/enable slide loop', QtCore.QVariant(True)).toBool():
self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
@ -246,16 +252,16 @@ class SlideController(Controller):
'Delay between slides in seconds.'))
self.toolbar.addToolbarWidget(self.delaySpinBox)
else:
self.toolbar.addToolbarButton(u'goLive',
self.toolbar.addToolbarAction(u'goLive',
icon=u':/general/general_live.png',
tooltip=translate('OpenLP.SlideController', 'Move to live.'),
triggers=self.onGoLive)
self.toolbar.addToolbarButton(u'addToService',
self.toolbar.addToolbarAction(u'addToService',
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',
self.toolbar.addSeparator()
self.toolbar.addToolbarAction(u'editSong',
icon=u':/general/general_edit.png',
tooltip=translate('OpenLP.SlideController',
'Edit and reload song preview.'), triggers=self.onEditSong)
@ -273,7 +279,7 @@ class SlideController(Controller):
self.songMenu.hide()
self.toolbar.addToolbarWidget(self.songMenu)
# Stuff for items with background audio.
self.audioPauseItem = self.toolbar.addToolbarButton(u'audioPause',
self.audioPauseItem = self.toolbar.addToolbarAction(u'audioPause',
text=u'Pause Audio', icon=u':/slides/media_playback_pause.png',
tooltip=translate('OpenLP.SlideController', 'Pause audio.'),
checked=False, visible=False,
@ -342,8 +348,7 @@ class SlideController(Controller):
u'shortcutAction_%s' % s[u'key'], text=s.get(u'text'),
shortcuts=[QtGui.QKeySequence(s[u'key'])],
context=QtCore.Qt.WidgetWithChildrenShortcut,
category=UiStrings().LiveToolbar \
if s.get(u'configurable') else None,
category=self.category if s.get(u'configurable') else None,
triggers=self._slideShortcutActivated) for s in shortcuts])
QtCore.QObject.connect(
self.shortcutTimer, QtCore.SIGNAL(u'timeout()'),
@ -368,10 +373,8 @@ class SlideController(Controller):
self.setLiveHotkeys(self)
self.__addActionsToWidget(self.previewListWidget)
else:
self.setPreviewHotkeys()
self.previewListWidget.addActions(
[self.nextItem,
self.previousItem])
[self.nextItem, self.previousItem])
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix),
self.onStopLoop)
@ -467,36 +470,22 @@ class SlideController(Controller):
# Reset the shortcut.
self.current_shortcut = u''
def setPreviewHotkeys(self, parent=None):
self.previousItem.setObjectName(u'previousItemPreview')
self.nextItem.setObjectName(u'nextItemPreview')
action_list = ActionList.get_instance()
action_list.add_action(self.previousItem)
action_list.add_action(self.nextItem)
def setLiveHotkeys(self, parent=None):
self.previousItem.setObjectName(u'previousItemLive')
self.nextItem.setObjectName(u'nextItemLive')
action_list = ActionList.get_instance()
action_list.add_category(
unicode(UiStrings().LiveToolbar), CategoryOrder.standardToolbar)
action_list.add_action(self.previousItem)
action_list.add_action(self.nextItem)
self.previousService = create_action(parent, u'previousService',
text=translate('OpenLP.SlideController', 'Previous Service'),
shortcuts=[QtCore.Qt.Key_Left],
context=QtCore.Qt.WidgetWithChildrenShortcut,
category=UiStrings().LiveToolbar, triggers=self.servicePrevious)
category=self.category, triggers=self.servicePrevious)
self.nextService = create_action(parent, 'nextService',
text=translate('OpenLP.SlideController', 'Next Service'),
shortcuts=[QtCore.Qt.Key_Right],
context=QtCore.Qt.WidgetWithChildrenShortcut,
category=UiStrings().LiveToolbar, triggers=self.serviceNext)
category=self.category, triggers=self.serviceNext)
self.escapeItem = create_action(parent, 'escapeItem',
text=translate('OpenLP.SlideController', 'Escape Item'),
shortcuts=[QtCore.Qt.Key_Escape],
context=QtCore.Qt.WidgetWithChildrenShortcut,
category=UiStrings().LiveToolbar, triggers=self.liveEscape)
category=self.category, triggers=self.liveEscape)
def liveEscape(self):
self.display.setVisible(False)

View File

@ -65,27 +65,27 @@ class ThemeManager(QtGui.QWidget):
self.layout.setObjectName(u'layout')
self.toolbar = OpenLPToolbar(self)
self.toolbar.setObjectName(u'toolbar')
self.toolbar.addToolbarButton(u'newTheme',
self.toolbar.addToolbarAction(u'newTheme',
text=UiStrings().NewTheme, icon=u':/themes/theme_new.png',
tooltip=translate('OpenLP.ThemeManager', 'Create a new theme.'),
triggers=self.onAddTheme)
self.toolbar.addToolbarButton(u'editTheme',
self.toolbar.addToolbarAction(u'editTheme',
text=translate('OpenLP.ThemeManager', 'Edit Theme'),
icon=u':/themes/theme_edit.png',
tooltip=translate('OpenLP.ThemeManager', 'Edit a theme.'),
triggers=self.onEditTheme)
self.deleteToolbarAction = self.toolbar.addToolbarButton(u'deleteTheme',
self.deleteToolbarAction = self.toolbar.addToolbarAction(u'deleteTheme',
text=translate('OpenLP.ThemeManager', 'Delete Theme'),
icon=u':/general/general_delete.png',
tooltip=translate('OpenLP.ThemeManager', 'Delete a theme.'),
triggers=self.onDeleteTheme)
self.toolbar.addSeparator()
self.toolbar.addToolbarButton(u'importTheme',
self.toolbar.addToolbarAction(u'importTheme',
text=translate('OpenLP.ThemeManager', 'Import Theme'),
icon=u':/general/general_import.png',
tooltip=translate('OpenLP.ThemeManager', 'Import a theme.'),
triggers=self.onImportTheme)
self.toolbar.addToolbarButton(u'exportTheme',
self.toolbar.addToolbarAction(u'exportTheme',
text=translate('OpenLP.ThemeManager', 'Export Theme'),
icon=u':/general/general_export.png',
tooltip=translate('OpenLP.ThemeManager', 'Export a theme.'),

View File

@ -68,7 +68,7 @@ class CustomMediaItem(MediaManagerItem):
self.manager = plugin.manager
def addEndHeaderBar(self):
self.addToolbarSeparator()
self.toolbar.addSeparator()
self.addSearchToToolBar()
# Signals and slots
QtCore.QObject.connect(self.searchTextEdit,

View File

@ -89,9 +89,9 @@ class ImageMediaItem(MediaManagerItem):
self.listView.addAction(self.replaceAction)
def addEndHeaderBar(self):
self.replaceAction = self.addToolbarButton(u'replaceAction',
self.replaceAction = self.toolbar.addToolbarAction(u'replaceAction',
icon=u':/slides/slide_blank.png', triggers=self.onReplaceClick)
self.resetAction = self.addToolbarButton(u'resetAction',
self.resetAction = self.toolbar.addToolbarAction(u'resetAction',
icon=u':/system/system_close.png', visible=False,
triggers=self.onResetClick)

View File

@ -118,9 +118,9 @@ class MediaMediaItem(MediaManagerItem):
def addEndHeaderBar(self):
# Replace backgrounds do not work at present so remove functionality.
self.replaceAction = self.addToolbarButton(u'replaceAction',
self.replaceAction = self.toolbar.addToolbarAction(u'replaceAction',
icon=u':/slides/slide_blank.png', triggers=self.onReplaceClick)
self.resetAction = self.addToolbarButton(u'resetAction',
self.resetAction = self.toolbar.addToolbarAction(u'resetAction',
icon=u':/system/system_close.png', visible=False,
triggers=self.onResetClick)
self.mediaWidget = QtGui.QWidget(self)

View File

@ -97,10 +97,10 @@ class SongMediaItem(MediaManagerItem):
self.plugin.manager.save_object(song, True)
def addEndHeaderBar(self):
self.addToolbarSeparator()
self.toolbar.addSeparator()
## Song Maintenance Button ##
self.maintenanceAction = self.addToolbarButton(u'maintenanceAction',
icon=':/songs/song_maintenance.png',
self.maintenanceAction = self.toolbar.addToolbarAction(
u'maintenanceAction', icon=':/songs/song_maintenance.png',
triggers=self.onSongMaintenanceClick)
self.addSearchToToolBar()
# Signals and slots