next steps

This commit is contained in:
rimach 2010-12-08 22:03:25 +01:00
parent 5a5d03a7bd
commit 653f1e8ea6
6 changed files with 358 additions and 208 deletions

View File

@ -37,7 +37,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \
Receiver, build_icon, ItemCapabilities, SettingsManager, translate, \ Receiver, build_icon, ItemCapabilities, SettingsManager, translate, \
ThemeLevel ThemeLevel
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation, ActionConfig
class ServiceManagerList(QtGui.QTreeWidget): class ServiceManagerList(QtGui.QTreeWidget):
""" """
@ -47,34 +47,6 @@ class ServiceManagerList(QtGui.QTreeWidget):
QtGui.QTreeWidget.__init__(self, parent) QtGui.QTreeWidget.__init__(self, parent)
self.parent = parent self.parent = parent
# def keyPressEvent(self, event):
# if isinstance(event, QtGui.QKeyEvent):
# #here accept the event and do something
# if event.key() == QtCore.Qt.Key_Enter:
# self.parent.makeLive()
# event.accept()
# elif event.key() == QtCore.Qt.Key_Home:
# self.parent.onServiceTop()
# event.accept()
# elif event.key() == QtCore.Qt.Key_End:
# self.parent.onServiceEnd()
# event.accept()
# elif event.key() == QtCore.Qt.Key_PageUp:
# self.parent.onServiceUp()
# event.accept()
# elif event.key() == QtCore.Qt.Key_PageDown:
# self.parent.onServiceDown()
# event.accept()
# elif event.key() == QtCore.Qt.Key_Up:
# self.parent.onMoveSelectionUp()
# event.accept()
# elif event.key() == QtCore.Qt.Key_Down:
# self.parent.onMoveSelectionDown()
# event.accept()
# event.ignore()
# else:
# event.ignore()
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
""" """
Drag and drop event does not care what data is selected Drag and drop event does not care what data is selected
@ -282,28 +254,65 @@ class ServiceManager(QtGui.QWidget):
self.menu.addMenu(self.themeMenu) self.menu.addMenu(self.themeMenu)
self.configUpdated(True) self.configUpdated(True)
self.setServiceHotkeys(self.serviceManagerList) self.setServiceHotkeys(self.serviceManagerList)
self.serviceManagerList.addAction(self.serviceManagerList.move_down) self.serviceManagerList.addActions([self.serviceManagerList.move_down,
self.serviceManagerList.move_up,
def configureAction(self, action, widget, text, category, slot, shortcut, alternate=0): self.serviceManagerList.enter,
action.setObjectName(text) self.serviceManagerList.home,
if alternate > 0: self.serviceManagerList.end,
action.setShortcuts([shortcut, alternate]) self.serviceManagerList.up,
else: self.serviceManagerList.down])
action.setShortcut(QtGui.QKeySequence(shortcut))
action.setShortcutContext(QtCore.Qt.WidgetShortcut)
action.setData(QtCore.QVariant(category))
QtCore.QObject.connect(action,
QtCore.SIGNAL(u'triggered()'), slot)
def setServiceHotkeys(self, parent=None): def setServiceHotkeys(self, parent=None):
widget = self widget = self
self.serviceManagerList.move_down = \ self.serviceManagerList.move_down = \
QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'),
u'move_down', parent) u'Move_down', parent)
self.configureAction(self.serviceManagerList.move_down, ActionConfig.set(self.serviceManagerList.move_down,
widget, u'Move_down', widget, u'Move_down',
u'Service Settings', self.onServiceDown, u'Service Settings', self.onServiceDown,
QtCore.Qt.Key_PageDown) QtCore.Qt.Key_PageDown)
self.serviceManagerList.move_up = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'Move_up', parent)
ActionConfig.set(self.serviceManagerList.move_up,
widget, u'Move_up',
u'Service Settings', self.onServiceUp,
QtCore.Qt.Key_PageUp)
self.serviceManagerList.enter = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'Make Live', parent)
ActionConfig.set(self.serviceManagerList.enter,
widget, u'Make Live',
u'Service Settings', self.makeLive,
QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return)
self.serviceManagerList.home = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'Home', parent)
ActionConfig.set(self.serviceManagerList.home,
widget, u'Home',
u'Service Settings', self.onServiceTop,
QtCore.Qt.Key_Home)
self.serviceManagerList.end = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'End', parent)
ActionConfig.set(self.serviceManagerList.end,
widget, u'End',
u'Service Settings', self.onServiceEnd,
QtCore.Qt.Key_End)
self.serviceManagerList.up = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'Move Selection up', parent)
ActionConfig.set(self.serviceManagerList.up,
widget, u'Move Selection up',
u'Service Settings', self.onMoveSelectionUp,
QtCore.Qt.Key_Up)
self.serviceManagerList.down = \
QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'),
u'Move Selection down', parent)
ActionConfig.set(self.serviceManagerList.down,
widget, u'Move Selection down',
u'Service Settings', self.onMoveSelectionDown,
QtCore.Qt.Key_Down)
def configUpdated(self, firstTime=False): def configUpdated(self, firstTime=False):
""" """

View File

@ -113,3 +113,81 @@ class Ui_ShortcutListDialog(object):
self.shortcutPushButton.setText( self.shortcutPushButton.setText(
translate('OpenLP.ShortcutListDialog', 'None')) translate('OpenLP.ShortcutListDialog', 'None'))
class Ui_ShortcutDialog(object):
def setupUi(self, ShortcutDialog):
ShortcutDialog.setObjectName(u'ShortcutDialog')
ShortcutDialog.resize(539, 125)
self.vboxlayout = QtGui.QVBoxLayout(ShortcutDialog)
self.vboxlayout.setObjectName(u'vboxlayout')
self.shortcutsGroup = QtGui.QGroupBox(ShortcutDialog)
self.shortcutsGroup.setTitle(u'')
self.shortcutsGroup.setObjectName(u'shortcutsGroup')
self.gridlayout = QtGui.QGridLayout(self.shortcutsGroup)
self.gridlayout.setObjectName(u'gridlayout')
self.alternateButton = QtGui.QRadioButton(self.shortcutsGroup)
self.alternateButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.alternateButton.setObjectName(u'alternateButton')
self.gridlayout.addWidget(self.alternateButton, 1, 0, 1, 1)
self.primaryClearButton = QtGui.QPushButton(self.shortcutsGroup)
self.primaryClearButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.primaryClearButton.setObjectName(u'primaryClearButton')
self.gridlayout.addWidget(self.primaryClearButton, 0, 1, 1, 1)
self.alternateKeyLabel = QtGui.QLabel(self.shortcutsGroup)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.alternateKeyLabel.sizePolicy().hasHeightForWidth())
self.alternateKeyLabel.setSizePolicy(sizePolicy)
self.alternateKeyLabel.setToolTip(u'')
self.alternateKeyLabel.setFrameShape(QtGui.QFrame.StyledPanel)
self.alternateKeyLabel.setFrameShadow(QtGui.QFrame.Sunken)
self.alternateKeyLabel.setText(u'')
self.alternateKeyLabel.setObjectName(u'alternateKeyLabel')
self.gridlayout.addWidget(self.alternateKeyLabel, 1, 2, 1, 1)
self.keyLabel = QtGui.QLabel(self.shortcutsGroup)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.keyLabel.sizePolicy().hasHeightForWidth())
self.keyLabel.setSizePolicy(sizePolicy)
self.keyLabel.setToolTip(u'')
self.keyLabel.setFrameShape(QtGui.QFrame.StyledPanel)
self.keyLabel.setFrameShadow(QtGui.QFrame.Sunken)
self.keyLabel.setText(u'')
self.keyLabel.setObjectName(u'keyLabel')
self.gridlayout.addWidget(self.keyLabel, 0, 2, 1, 1)
self.primaryButton = QtGui.QRadioButton(self.shortcutsGroup)
self.primaryButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.primaryButton.setChecked(True)
self.primaryButton.setObjectName(u'primaryButton')
self.gridlayout.addWidget(self.primaryButton, 0, 0, 1, 1)
self.alternateClearButton = QtGui.QPushButton(self.shortcutsGroup)
self.alternateClearButton.setEnabled(False)
self.alternateClearButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.alternateClearButton.setObjectName(u'alternateClearButton')
self.gridlayout.addWidget(self.alternateClearButton, 1, 1, 1, 1)
self.vboxlayout.addWidget(self.shortcutsGroup)
self.buttonBox = QtGui.QDialogButtonBox(ShortcutDialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName(u'buttonBox')
self.vboxlayout.addWidget(self.buttonBox)
self.retranslateUi(ShortcutDialog)
QtCore.QObject.connect(self.primaryButton, QtCore.SIGNAL(u'toggled(bool)'), self.primaryClearButton.setEnabled)
QtCore.QObject.connect(self.alternateButton, QtCore.SIGNAL(u'toggled(bool)'), self.alternateClearButton.setEnabled)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), ShortcutDialog.reject)
QtCore.QMetaObject.connectSlotsByName(ShortcutDialog)
def retranslateUi(self, ShortcutDialog):
ShortcutDialog.setWindowTitle(QtGui.QApplication.translate("ShortcutDialog", "Edit Shortcut", None, QtGui.QApplication.UnicodeUTF8))
ShortcutDialog.setWhatsThis(QtGui.QApplication.translate("ShortcutDialog", "Press your shortcut keys and select OK", None, QtGui.QApplication.UnicodeUTF8))
self.alternateButton.setToolTip(QtGui.QApplication.translate("ShortcutDialog", "Select to change the alternative keyboard shortcut", None, QtGui.QApplication.UnicodeUTF8))
self.alternateButton.setText(QtGui.QApplication.translate("ShortcutDialog", "Alternative Shortcut:", None, QtGui.QApplication.UnicodeUTF8))
self.primaryClearButton.setToolTip(QtGui.QApplication.translate("ShortcutDialog", "Press to clear the key sequence buffer.", None, QtGui.QApplication.UnicodeUTF8))
self.primaryClearButton.setText(QtGui.QApplication.translate("ShortcutDialog", "Clear", None, QtGui.QApplication.UnicodeUTF8))
self.primaryButton.setToolTip(QtGui.QApplication.translate("ShortcutDialog", "Select to change the primary keyboard shortcut", None, QtGui.QApplication.UnicodeUTF8))
self.primaryButton.setText(QtGui.QApplication.translate("ShortcutDialog", "Primary Shortcut:", None, QtGui.QApplication.UnicodeUTF8))
self.alternateClearButton.setToolTip(QtGui.QApplication.translate("ShortcutDialog", "Press to clear the key sequence buffer.", None, QtGui.QApplication.UnicodeUTF8))
self.alternateClearButton.setText(QtGui.QApplication.translate("ShortcutDialog", "Clear", None, QtGui.QApplication.UnicodeUTF8))

View File

@ -30,7 +30,7 @@ import re
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.utils import translate from openlp.core.utils import translate
from shortcutlistdialog import Ui_ShortcutListDialog from shortcutlistdialog import Ui_ShortcutListDialog, Ui_ShortcutDialog
REMOVE_AMPERSAND = re.compile(r'&{1}') REMOVE_AMPERSAND = re.compile(r'&{1}')
@ -58,42 +58,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
) )
self.shortcutListTreeWidget.itemDoubleClicked.connect(self.shortcutEdit) self.shortcutListTreeWidget.itemDoubleClicked.connect(self.shortcutEdit)
def keyReleaseEvent(self, event): def setNewShortcut(self, shortcut, alternate):
Qt = QtCore.Qt
if not self.captureShortcut:
return
key = event.key()
if key == Qt.Key_Shift or key == Qt.Key_Control or \
key == Qt.Key_Meta or key == Qt.Key_Alt:
return
key_string = QtGui.QKeySequence(key).toString()
if event.modifiers() & Qt.ControlModifier == Qt.ControlModifier:
key_string = u'Ctrl+' + key_string
if event.modifiers() & Qt.AltModifier == Qt.AltModifier:
key_string = u'Alt+' + key_string
if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier:
key_string = u'Shift+' + key_string
key_sequence = QtGui.QKeySequence(key_string)
existing_key = QtGui.QKeySequence("Ctrl+Shift+F8")
if key_sequence == existing_key:
QtGui.QMessageBox.warning(
self,
translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'),
unicode(translate('OpenLP.ShortcutListDialog', 'The shortcut '
'"%s" is already assigned to another action, please '
'use a different shortcut.')) % key_sequence.toString(),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok
)
else:
self.newShortcut = key_sequence.toString()
self.shortcutPushButton.setText(key_sequence.toString())
if self.currentItem: if self.currentItem:
self.actionList[self.currentItem].setShortcut(QtGui.QKeySequence(self.newShortcut)) self.actionList[self.currentItem].setShortcuts([shortcut, alternate])
self.shortcutListTreeWidget.currentItem().setText(1, self.newShortcut) self.shortcutListTreeWidget.currentItem().setText(1, shortcut.toString())
self.shortcutListTreeWidget.currentItem().setText(2, alternate.toString())
self.shortcutPushButton.setChecked(False)
self.captureShortcut = False
def exec_(self, parent): def exec_(self, parent):
self.actionList = parent.findChildren(QtGui.QAction) self.actionList = parent.findChildren(QtGui.QAction)
@ -119,45 +88,175 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
categorie = action.data().toString() or 'Unknown' categorie = action.data().toString() or 'Unknown'
if not catItemDict.has_key(categorie): if not catItemDict.has_key(categorie):
catItemDict[categorie] = QtGui.QTreeWidgetItem([categorie]) catItemDict[categorie] = QtGui.QTreeWidgetItem([categorie])
actionItem = QtGui.QTreeWidgetItem([actionText, shortcutText, shortcutAlternative], num) actionItem = QtGui.QTreeWidgetItem([actionText, shortcutText, shortcutAlternate], num)
actionItem.setIcon(0, action.icon()) actionItem.setIcon(0, action.icon())
catItemDict[categorie].addChild(actionItem) catItemDict[categorie].addChild(actionItem)
catItemDict[categorie].setExpanded(True) catItemDict[categorie].setExpanded(True)
for item in catItemDict: for key in sorted(catItemDict.iterkeys()):
self.shortcutListTreeWidget.addTopLevelItem(catItemDict[item]) self.shortcutListTreeWidget.addTopLevelItem(catItemDict[key])
self.shortcutListTreeWidget.expandItem(catItemDict[item]) self.shortcutListTreeWidget.expandItem(catItemDict[key])
self.shortcutListTreeWidget.sortItems(0, QtCore.Qt.AscendingOrder)
def load_action_list(self, file):
"""
Load an actionList from a xml file
"""
pass
def write_action_list(self, file):
"""
Write the current actionList into a xml file
"""
pass
def read_action_list(self):
"""
disply current actionList
"""
pass
def update_action_list(self):
"""
apply shortcut changes to the related actions
"""
pass
def onShortcutPushButtonClicked(self, toggled): def onShortcutPushButtonClicked(self, toggled):
self.captureShortcut = toggled self.captureShortcut = toggled
def shortcutEdit(self, item, column): def shortcutEdit(self, item, column):
#print "ändern", item.parent().text(0), item.text(0), column, item.type(), item
self.currentItem = item.type() self.currentItem = item.type()
self.newShortcut = item.text(1) self.newShortcut = item.text(1)
self.shortcutListTreeWidget.currentItem().setText(column, u'Press new Shortcut') dialog = ShortcutDialog(self, u'Press new Shortcut', item.text(1), item.text(2))
self.captureShortcut = True dialog.show()
#self.shortcutListTreeWidget.currentItem().setText(column, u'Press new Shortcut')
#self.captureShortcut = True
class ShortcutDialog(QtGui.QDialog, Ui_ShortcutDialog):
"""
Class implementing a dialog for the configuration of a keyboard shortcut.
"""
def __init__(self, parent = None, name = None, key=0, alternate=0):
"""
Constructor
@param parent The parent widget of this dialog. (QWidget)
@param name The name of this dialog. (QString)
@param modal Flag indicating a modal dialog. (boolean)
"""
QtGui.QDialog.__init__(self, parent)
self.parent = parent
if name:
self.setObjectName(name)
self.setupUi(self)
self.setKeys(key, alternate)
self.keyIndex = 0
self.keys = [0, 0, 0, 0]
self.noCheck = False
self.objectType = None
self.connect(self.primaryClearButton, QtCore.SIGNAL("clicked()"), self.__clear)
self.connect(self.alternateClearButton, QtCore.SIGNAL("clicked()"), self.__clear)
self.connect(self.primaryButton, QtCore.SIGNAL("clicked()"), self.__typeChanged)
self.connect(self.alternateButton, QtCore.SIGNAL("clicked()"), self.__typeChanged)
self.shortcutsGroup.installEventFilter(self)
self.primaryButton.installEventFilter(self)
self.alternateButton.installEventFilter(self)
self.primaryClearButton.installEventFilter(self)
self.alternateClearButton.installEventFilter(self)
self.buttonBox.button(QtGui.QDialogButtonBox.Ok).installEventFilter(self)
self.buttonBox.button(QtGui.QDialogButtonBox.Cancel).installEventFilter(self)
def setKeys(self, key, alternateKey, noCheck=None, objectType=None):
"""
Public method to set the key to be configured.
@param key key sequence to be changed (QKeySequence)
@param alternateKey alternate key sequence to be changed (QKeySequence)
@param noCheck flag indicating that no uniqueness check should
be performed (boolean)
@param objectType type of the object (string).
"""
self.keyIndex = 0
self.keys = [0, 0, 0, 0]
self.keyLabel.setText(QtCore.QString(key))
self.alternateKeyLabel.setText(QtCore.QString(alternateKey))
self.primaryButton.setChecked(True)
self.noCheck = noCheck
self.objectType = objectType
def on_buttonBox_accepted(self):
"""
Private slot to handle the OK button press.
"""
self.parent.setNewShortcut(QtGui.QKeySequence(self.keyLabel.text()),
QtGui.QKeySequence(self.alternateKeyLabel.text()))#,
# self.noCheck, self.objectType)
self.close()
def __clear(self):
"""
Private slot to handle the Clear button press.
"""
self.keyIndex = 0
self.keys = [0, 0, 0, 0]
self.__setKeyLabelText("")
def __typeChanged(self):
"""
Private slot to handle the change of the shortcuts type.
"""
self.keyIndex = 0
self.keys = [0, 0, 0, 0]
def __setKeyLabelText(self, txt):
"""
Private method to set the text of a key label.
@param txt text to be set (QString)
"""
if self.primaryButton.isChecked():
self.keyLabel.setText(txt)
else:
self.alternateKeyLabel.setText(txt)
def eventFilter(self, watched, event):
"""
Method called to filter the event queue.
@param watched the QObject being watched
@param event the event that occurred
@return always False
"""
if event.type() == QtCore.QEvent.KeyPress:
self.keyPressEvent(event)
return True
return False
def keyPressEvent(self, evt):
"""
Private method to handle a key press event.
@param evt the key event (QKeyEvent)
"""
if evt.key() == QtCore.Qt.Key_Control:
return
if evt.key() == QtCore.Qt.Key_Meta:
return
if evt.key() == QtCore.Qt.Key_Shift:
return
if evt.key() == QtCore.Qt.Key_Alt:
return
if evt.key() == QtCore.Qt.Key_Menu:
return
if self.keyIndex == 4:
self.keyIndex = 0
self.keys = [0, 0, 0, 0]
if evt.key() == QtCore.Qt.Key_Backtab and evt.modifiers() & QtCore.Qt.ShiftModifier:
self.keys[self.keyIndex] = QtCore.Qt.Key_Tab
else:
self.keys[self.keyIndex] = evt.key()
if evt.modifiers() & QtCore.Qt.ShiftModifier:
self.keys[self.keyIndex] += QtCore.Qt.SHIFT
if evt.modifiers() & QtCore.Qt.ControlModifier:
self.keys[self.keyIndex] += QtCore.Qt.CTRL
if evt.modifiers() & QtCore.Qt.AltModifier:
self.keys[self.keyIndex] += QtCore.Qt.ALT
if evt.modifiers() & QtCore.Qt.MetaModifier:
self.keys[self.keyIndex] += QtCore.Qt.META
self.keyIndex += 1
if self.keyIndex == 1:
self.__setKeyLabelText(QtCore.QString(QtGui.QKeySequence(self.keys[0])))
elif self.keyIndex == 2:
self.__setKeyLabelText(QtCore.QString(QtGui.QKeySequence(self.keys[0], self.keys[1])))
elif self.keyIndex == 3:
self.__setKeyLabelText(QtCore.QString(QtGui.QKeySequence(self.keys[0], self.keys[1],
self.keys[2])))
elif self.keyIndex == 4:
self.__setKeyLabelText(QtCore.QString(QtGui.QKeySequence(self.keys[0], self.keys[1],
self.keys[2], self.keys[3])))

View File

@ -33,7 +33,7 @@ from PyQt4.phonon import Phonon
from openlp.core.ui import HideMode, MainDisplay from openlp.core.ui import HideMode, MainDisplay
from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \
ItemCapabilities, translate ItemCapabilities, translate
from openlp.core.utils import ActionConfig
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class SlideList(QtGui.QTableWidget): class SlideList(QtGui.QTableWidget):
@ -44,44 +44,6 @@ class SlideList(QtGui.QTableWidget):
def __init__(self, parent=None, name=None): def __init__(self, parent=None, name=None):
QtGui.QTableWidget.__init__(self, parent.Controller) QtGui.QTableWidget.__init__(self, parent.Controller)
self.parent = parent self.parent = parent
# if self.parent.isLive:
# self.addAction(self.parent.next_item)
# self.addAction(self.parent.previous_item)
# self.addAction(self.parent.previous_service)
# self.addAction(self.parent.next_service)
# self.addAction(self.parent.escape_item)
# else:
# self.addAction(self.parent.preview_previous_item)
# self.addAction(self.parent.preview_next_item)
# self.hotkeyMap = {
# QtCore.Qt.Key_Return: 'servicemanager_next_item',
# QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop',
# QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop',
# QtCore.Qt.Key_0: 'servicemanager_next_item',
# QtCore.Qt.Key_Backspace: 'slidecontroller_live_previous_noloop'}
# def keyPressEvent(self, event):
# if isinstance(event, QtGui.QKeyEvent):
# #here accept the event and do something
# if event.key() == QtCore.Qt.Key_Up:
# self.parent.onSlideSelectedPrevious()
# event.accept()
# elif event.key() == QtCore.Qt.Key_Down:
# self.parent.onSlideSelectedNext()
# event.accept()
# elif event.key() == QtCore.Qt.Key_PageUp:
# self.parent.onSlideSelectedFirst()
# event.accept()
# elif event.key() == QtCore.Qt.Key_PageDown:
# self.parent.onSlideSelectedLast()
# event.accept()
# elif event.key() in self.hotkeyMap and self.parent.isLive:
# Receiver.send_message(self.hotkeyMap[event.key()])
# event.accept()
# event.ignore()
# else:
# event.ignore()
class SlideController(QtGui.QWidget): class SlideController(QtGui.QWidget):
""" """
@ -97,8 +59,6 @@ class SlideController(QtGui.QWidget):
self.isLive = isLive self.isLive = isLive
self.parent = parent self.parent = parent
self.screens = screens self.screens = screens
# self.setPreviewHotkeys(self)
# self.setLiveHotkeys(self)
self.ratio = float(self.screens.current[u'size'].width()) / \ self.ratio = float(self.screens.current[u'size'].width()) / \
float(self.screens.current[u'size'].height()) float(self.screens.current[u'size'].height())
self.display = MainDisplay(self, screens, isLive) self.display = MainDisplay(self, screens, isLive)
@ -357,19 +317,20 @@ class SlideController(QtGui.QWidget):
self.Mediabar.setVisible(False) self.Mediabar.setVisible(False)
if self.isLive: if self.isLive:
self.setLiveHotkeys(self) self.setLiveHotkeys(self)
self.PreviewListWidget.addAction(self.previous_item) self.PreviewListWidget.addActions([self.previous_item,
self.PreviewListWidget.addAction(self.next_item) self.next_item,
self.PreviewListWidget.addAction(self.previous_service) self.previous_service,
self.PreviewListWidget.addAction(self.next_service) self.next_service,
self.PreviewListWidget.addAction(self.escape_item) self.escape_item])
self.display.addAction(self.previous_item) self.display.addActions([self.previous_item,
self.display.addAction(self.previous_service) self.next_item,
self.display.addAction(self.next_service) self.previous_service,
self.display.addAction(self.escape_item) self.next_service,
self.escape_item])
else: else:
self.setPreviewHotkeys()#self.PreviewListWidget) self.setPreviewHotkeys()
self.PreviewListWidget.addAction(self.preview_next_item) self.PreviewListWidget.addActions([self.preview_next_item,
self.PreviewListWidget.addAction(self.preview_previous_item) self.preview_previous_item])
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix),
self.onStopLoop) self.onStopLoop)
@ -419,64 +380,49 @@ class SlideController(QtGui.QWidget):
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview)
def configureAction(self, action, widget, text, category, slot, shortcut, alternate=0):
action.setObjectName(text)
if alternate > 0:
action.setShortcuts([shortcut, alternate])
else:
action.setShortcut(QtGui.QKeySequence(shortcut))
action.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut)
action.setData(QtCore.QVariant(category))
QtCore.QObject.connect(action,
QtCore.SIGNAL(u'triggered()'), slot)
def setPreviewHotkeys(self, parent=None): def setPreviewHotkeys(self, parent=None):
widget = self widget = self
self.preview_previous_item = QtGui.QAction(u'previous_item', parent) self.preview_previous_item = QtGui.QAction(u'previous_item', parent)
self.configureAction(self.preview_previous_item, widget, u'previous_item', ActionConfig.set(self.preview_previous_item, widget, u'previous_item',
u'Preview Settings', self.previewPrevious, QtCore.Qt.Key_Up) u'Preview Settings', self.onSlideSelectedPrevious, QtCore.Qt.Key_Up)
self.preview_next_item = QtGui.QAction(u'next_item', parent) self.preview_next_item = QtGui.QAction(u'next_item', parent)
self.configureAction(self.preview_next_item, widget, u'next_item', ActionConfig.set(self.preview_next_item, widget, u'next_item',
u'Preview Settings', self.previewNext, QtCore.Qt.Key_Down) u'Preview Settings', self.onSlideSelectedNext, QtCore.Qt.Key_Down)
#self.parent.display.addAction(self.next_item) #self.parent.display.addAction(self.next_item)
def setLiveHotkeys(self, parent=None): def setLiveHotkeys(self, parent=None):
widget = self widget = self
self.next_item = QtGui.QAction(u'next_item', parent) self.next_item = QtGui.QAction(u'next_item', parent)
self.configureAction(self.next_item, widget, u'next_item', ActionConfig.set(self.next_item, widget, u'next_item',
u'Live View Settings', self.liveNext, QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown) u'Live View Settings', self.onSlideSelectedNext,
#self.parent.display.addAction(self.next_item) QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown,
context=QtCore.Qt.WidgetWithChildrenShortcut)
parent.previous_service = QtGui.QAction(u'previous_service', parent) parent.previous_service = QtGui.QAction(u'previous_service', parent)
self.configureAction(parent.previous_service, widget, u'previous_service', ActionConfig.set(parent.previous_service, widget, u'previous_service',
u'Live View Settings', self.servicePrevious, QtCore.Qt.Key_Left) u'Live View Settings', self.servicePrevious,
QtCore.Qt.Key_Left,
context=QtCore.Qt.WidgetWithChildrenShortcut)
self.next_service = QtGui.QAction(u'next_service', parent) self.next_service = QtGui.QAction(u'next_service', parent)
self.configureAction(self.next_service, widget, u'next_service', ActionConfig.set(self.next_service, widget, u'next_service',
u'Live View Settings', self.serviceNext, QtCore.Qt.Key_Right) u'Live View Settings', self.serviceNext,
QtCore.Qt.Key_Right,
context=QtCore.Qt.WidgetWithChildrenShortcut)
self.previous_item = QtGui.QAction(u'previous_item', parent) self.previous_item = QtGui.QAction(u'previous_item', parent)
self.configureAction(self.previous_item, widget, u'previous_item', ActionConfig.set(self.previous_item, widget, u'previous_item',
u'Live View Settings', self.livePrevious, QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp) u'Live View Settings', self.onSlideSelectedPrevious,
#self.parent.display.addAction(self.previous_item) QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp,
context=QtCore.Qt.WidgetWithChildrenShortcut)
self.escape_item = QtGui.QAction(u'escape_item', parent) self.escape_item = QtGui.QAction(u'escape_item', parent)
self.configureAction(self.escape_item, widget, u'escape_item', ActionConfig.set(self.escape_item, widget, u'escape_item',
u'Live View Settings', self.liveEscape, QtCore.Qt.Key_Escape) u'Live View Settings', self.liveEscape,
QtCore.Qt.Key_Escape,
def liveNext(self): context=QtCore.Qt.WidgetWithChildrenShortcut)
self.onSlideSelectedNext()
def livePrevious(self):
self.onSlideSelectedPrevious()
def previewNext(self):
self.onSlideSelectedNext()
def previewPrevious(self):
self.onSlideSelectedPrevious()
def liveEscape(self): def liveEscape(self):
self.display.setVisible(False) self.display.setVisible(False)
@ -507,8 +453,10 @@ class SlideController(QtGui.QWidget):
self.settingsmanager.slidecontroller_image / self.ratio)) self.settingsmanager.slidecontroller_image / self.ratio))
if self.isLive: if self.isLive:
self.display.addActions([self.previous_item, self.display.addActions([self.previous_item,
self.next_item, self.previous_service, self.next_item,
self.next_service, self.escape_item]) self.previous_service,
self.next_service,
self.escape_item])
def widthChanged(self): def widthChanged(self):
""" """

View File

@ -276,7 +276,7 @@ def get_images_filter():
return images_filter return images_filter
from languagemanager import LanguageManager from languagemanager import LanguageManager
from actions import ActionList from actions import ActionList, ActionConfig
__all__ = [u'AppLocation', u'check_latest_version', u'add_actions', __all__ = [u'AppLocation', u'check_latest_version', u'add_actions',
u'get_filesystem_encoding', u'LanguageManager', u'ActionList'] u'get_filesystem_encoding', u'LanguageManager', u'ActionList']

View File

@ -27,6 +27,7 @@
The :mod:`~openlp.core.utils.actions` module provides action list classes used The :mod:`~openlp.core.utils.actions` module provides action list classes used
by the shortcuts system. by the shortcuts system.
""" """
from PyQt4 import QtCore
class ActionCategory(object): class ActionCategory(object):
""" """
@ -182,3 +183,18 @@ class ActionList(object):
self.categories[category].actions.append(action) self.categories[category].actions.append(action)
else: else:
self.categories[category].actions.add(action, weight) self.categories[category].actions.add(action, weight)
class ActionConfig(object):
"""
Helper for configuration of OpenLP Shortcut actions
"""
@staticmethod
def set(action, widget, text, category, slot, shortcut,
alternate=0, context=QtCore.Qt.WidgetShortcut):
action.setObjectName(text)
action.setShortcuts([shortcut, alternate])
action.setShortcutContext(context)
action.setData(QtCore.QVariant(category))
QtCore.QObject.connect(action,
QtCore.SIGNAL(u'triggered()'), slot)