From dd8bc1dd9d2060c006ca4278c5d1130afcd754de Mon Sep 17 00:00:00 2001 From: rimach Date: Tue, 7 Dec 2010 23:38:41 +0100 Subject: [PATCH 01/17] next steps for shortcuts, please give a try --- openlp/core/ui/maindisplay.py | 83 +++++++------- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/servicemanager.py | 77 ++++++++----- openlp/core/ui/shortcutlistdialog.py | 5 +- openlp/core/ui/shortcutlistform.py | 17 ++- openlp/core/ui/slidecontroller.py | 157 ++++++++++++++++++++++----- 6 files changed, 240 insertions(+), 101 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 90f920a50..dd483c14e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -49,45 +49,46 @@ class DisplayWidget(QtGui.QGraphicsView): QtGui.QGraphicsView.__init__(self) self.parent = parent self.live = live - self.hotkey_map = { - 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'} - self.setStyleSheet(u'border: none;') - def keyPressEvent(self, event): - """ - Handle key events from display screen - """ - # Key events only needed for live - if not self.live: - return - if isinstance(event, QtGui.QKeyEvent): - # Here accept the event and do something - if event.key() == QtCore.Qt.Key_Up: - Receiver.send_message(u'slidecontroller_live_previous') - event.accept() - elif event.key() == QtCore.Qt.Key_Down: - Receiver.send_message(u'slidecontroller_live_next') - event.accept() - elif event.key() == QtCore.Qt.Key_PageUp: - Receiver.send_message(u'slidecontroller_live_first') - event.accept() - elif event.key() == QtCore.Qt.Key_PageDown: - Receiver.send_message(u'slidecontroller_live_last') - event.accept() - elif event.key() in self.hotkey_map: - Receiver.send_message(self.hotkey_map[event.key()]) - event.accept() - elif event.key() == QtCore.Qt.Key_Escape: - self.setVisible(False) - self.videoStop() - event.accept() - event.ignore() - else: - event.ignore() +# self.hotkey_map = { +# 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'} +# self.setStyleSheet(u'border: none;') +# +# def keyPressEvent(self, event): +# """ +# Handle key events from display screen +# """ +# # Key events only needed for live +# if not self.live: +# return +# if isinstance(event, QtGui.QKeyEvent): +# # Here accept the event and do something +# if event.key() == QtCore.Qt.Key_Up: +# Receiver.send_message(u'slidecontroller_live_previous') +# event.accept() +# elif event.key() == QtCore.Qt.Key_Down: +# Receiver.send_message(u'slidecontroller_live_next') +# event.accept() +# elif event.key() == QtCore.Qt.Key_PageUp: +# Receiver.send_message(u'slidecontroller_live_first') +# event.accept() +# elif event.key() == QtCore.Qt.Key_PageDown: +# Receiver.send_message(u'slidecontroller_live_last') +# event.accept() +# elif event.key() in self.hotkey_map: +# Receiver.send_message(self.hotkey_map[event.key()]) +# event.accept() +# elif event.key() == QtCore.Qt.Key_Escape: +# self.setVisible(False) +# self.videoStop() +# event.accept() +# event.ignore() +# else: +# event.ignore() class MainDisplay(DisplayWidget): """ @@ -110,6 +111,12 @@ class MainDisplay(DisplayWidget): QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) +# if self.live: +# 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) def setup(self): """ diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0f997d278..82fb0a5a2 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -671,7 +671,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if savedPlugin != -1: self.MediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() - + def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) LanguageManager.auto_language = value diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 6d721823a..d85cc5533 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -47,33 +47,33 @@ class ServiceManagerList(QtGui.QTreeWidget): QtGui.QTreeWidget.__init__(self, 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 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): """ @@ -281,6 +281,29 @@ class ServiceManager(QtGui.QWidget): translate('OpenLP.ServiceManager', '&Change Item Theme')) self.menu.addMenu(self.themeMenu) self.configUpdated(True) + self.setServiceHotkeys(self.serviceManagerList) + self.serviceManagerList.addAction(self.serviceManagerList.move_down) + + 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.WidgetShortcut) + action.setData(QtCore.QVariant(category)) + QtCore.QObject.connect(action, + QtCore.SIGNAL(u'triggered()'), slot) + + def setServiceHotkeys(self, parent=None): + widget = self + self.serviceManagerList.move_down = \ + QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), + u'move_down', parent) + self.configureAction(self.serviceManagerList.move_down, + widget, u'Move_down', + u'Service Settings', self.onServiceDown, + QtCore.Qt.Key_PageDown) def configUpdated(self, firstTime=False): """ diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index d64f4e2fc..cef49ef41 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -39,7 +39,7 @@ class Ui_ShortcutListDialog(object): self.shortcutListTreeWidget = QtGui.QTreeWidget(shortcutListDialog) self.shortcutListTreeWidget.setAlternatingRowColors(True) self.shortcutListTreeWidget.setObjectName(u'shortcutListTreeWidget') - self.shortcutListTreeWidget.setColumnCount(2) + self.shortcutListTreeWidget.setColumnCount(3) self.shortcutListTreeWidget.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.shortcutListLayout.addWidget(self.shortcutListTreeWidget) @@ -103,7 +103,8 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) self.shortcutListTreeWidget.setHeaderLabels([ translate('OpenLP.ShortcutListDialog', 'Action'), - translate('OpenLP.ShortcutListDialog', 'Shortcut') + translate('OpenLP.ShortcutListDialog', 'Shortcut'), + translate('OpenLP.ShortcutListDialog', 'Alternative') ]) self.defaultRadioButton.setText( translate('OpenLP.ShortcutListDialog', 'Default: %s')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 164d2cd98..b45ed57a2 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -106,13 +106,20 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): for num in range(len(self.actionList)): action = self.actionList[num] actionText = action.objectName() or action.parentWidget().objectName() - shortcutText = action.shortcut().toString() - #if not shortcutText: - # continue - categorie = action.data().toString() or 'Sonstige' + shortcutText = u'' + shortcutAlternate = u'' + if len(action.shortcuts()) > 0: + shortcutText = action.shortcuts()[0].toString() + if len(action.shortcuts()) > 1: + shortcutAlternate = action.shortcuts()[1].toString() + if action.isSeparator(): + continue + if not shortcutText: + continue + categorie = action.data().toString() or 'Unknown' if not catItemDict.has_key(categorie): catItemDict[categorie] = QtGui.QTreeWidgetItem([categorie]) - actionItem = QtGui.QTreeWidgetItem([actionText, shortcutText], num) + actionItem = QtGui.QTreeWidgetItem([actionText, shortcutText, shortcutAlternative], num) actionItem.setIcon(0, action.icon()) catItemDict[categorie].addChild(actionItem) catItemDict[categorie].setExpanded(True) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 48810990a..ab86bfa10 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -44,34 +44,44 @@ class SlideList(QtGui.QTableWidget): def __init__(self, parent=None, name=None): QtGui.QTableWidget.__init__(self, parent.Controller) self.parent = parent - 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'} +# 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() +# 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): """ @@ -87,6 +97,8 @@ class SlideController(QtGui.QWidget): self.isLive = isLive self.parent = parent self.screens = screens +# self.setPreviewHotkeys(self) +# self.setLiveHotkeys(self) self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) self.display = MainDisplay(self, screens, isLive) @@ -343,6 +355,21 @@ class SlideController(QtGui.QWidget): else: self.Toolbar.makeWidgetsInvisible(self.songEditList) self.Mediabar.setVisible(False) + if self.isLive: + self.setLiveHotkeys(self) + self.PreviewListWidget.addAction(self.previous_item) + self.PreviewListWidget.addAction(self.next_item) + self.PreviewListWidget.addAction(self.previous_service) + self.PreviewListWidget.addAction(self.next_service) + self.PreviewListWidget.addAction(self.escape_item) + self.display.addAction(self.previous_item) + self.display.addAction(self.previous_service) + self.display.addAction(self.next_service) + self.display.addAction(self.escape_item) + else: + self.setPreviewHotkeys()#self.PreviewListWidget) + self.PreviewListWidget.addAction(self.preview_next_item) + self.PreviewListWidget.addAction(self.preview_previous_item) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), self.onStopLoop) @@ -392,6 +419,76 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), 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): + widget = self + self.preview_previous_item = QtGui.QAction(u'previous_item', parent) + self.configureAction(self.preview_previous_item, widget, u'previous_item', + u'Preview Settings', self.previewPrevious, QtCore.Qt.Key_Up) + + self.preview_next_item = QtGui.QAction(u'next_item', parent) + self.configureAction(self.preview_next_item, widget, u'next_item', + u'Preview Settings', self.previewNext, QtCore.Qt.Key_Down) + #self.parent.display.addAction(self.next_item) + + def setLiveHotkeys(self, parent=None): + widget = self + self.next_item = QtGui.QAction(u'next_item', parent) + self.configureAction(self.next_item, widget, u'next_item', + u'Live View Settings', self.liveNext, QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown) + #self.parent.display.addAction(self.next_item) + + parent.previous_service = QtGui.QAction(u'previous_service', parent) + self.configureAction(parent.previous_service, widget, u'previous_service', + u'Live View Settings', self.servicePrevious, QtCore.Qt.Key_Left) + + self.next_service = QtGui.QAction(u'next_service', parent) + self.configureAction(self.next_service, widget, u'next_service', + u'Live View Settings', self.serviceNext, QtCore.Qt.Key_Right) + + self.previous_item = QtGui.QAction(u'previous_item', parent) + self.configureAction(self.previous_item, widget, u'previous_item', + u'Live View Settings', self.livePrevious, QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp) + #self.parent.display.addAction(self.previous_item) + + self.escape_item = QtGui.QAction(u'escape_item', parent) + self.configureAction(self.escape_item, widget, u'escape_item', + u'Live View Settings', self.liveEscape, QtCore.Qt.Key_Escape) + + def liveNext(self): + self.onSlideSelectedNext() + + + def livePrevious(self): + self.onSlideSelectedPrevious() + + def previewNext(self): + self.onSlideSelectedNext() + + def previewPrevious(self): + self.onSlideSelectedPrevious() + + def liveEscape(self): + self.display.setVisible(False) + self.display.videoStop() + + def servicePrevious(self): + Receiver.send_message('servicemanager_previous_item') + + def serviceNext(self): + Receiver.send_message('servicemanager_next_item') + + def screenSizeChanged(self): """ Settings dialog has changed the screen size of adjust output and @@ -408,6 +505,10 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setFixedSize( QtCore.QSize(self.settingsmanager.slidecontroller_image, self.settingsmanager.slidecontroller_image / self.ratio)) + if self.isLive: + self.display.addActions([self.previous_item, + self.next_item, self.previous_service, + self.next_service, self.escape_item]) def widthChanged(self): """ @@ -859,7 +960,7 @@ class SlideController(QtGui.QWidget): if loop: row = 0 else: - Receiver.send_message('servicemanager_next_item') + #Receiver.send_message('servicemanager_next_item') return if row + 1 < self.PreviewListWidget.rowCount(): self.PreviewListWidget.scrollToItem( From 653f1e8ea6744667e0845187d58d8554273170f6 Mon Sep 17 00:00:00 2001 From: rimach Date: Wed, 8 Dec 2010 22:03:25 +0100 Subject: [PATCH 02/17] next steps --- openlp/core/ui/servicemanager.py | 95 ++++++----- openlp/core/ui/shortcutlistdialog.py | 78 +++++++++ openlp/core/ui/shortcutlistform.py | 235 +++++++++++++++++++-------- openlp/core/ui/slidecontroller.py | 140 +++++----------- openlp/core/utils/__init__.py | 2 +- openlp/core/utils/actions.py | 16 ++ 6 files changed, 358 insertions(+), 208 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index d2589416a..00d9f0df8 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -37,7 +37,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ Receiver, build_icon, ItemCapabilities, SettingsManager, translate, \ ThemeLevel from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, ActionConfig class ServiceManagerList(QtGui.QTreeWidget): """ @@ -47,34 +47,6 @@ class ServiceManagerList(QtGui.QTreeWidget): QtGui.QTreeWidget.__init__(self, 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): """ 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.configUpdated(True) self.setServiceHotkeys(self.serviceManagerList) - self.serviceManagerList.addAction(self.serviceManagerList.move_down) + self.serviceManagerList.addActions([self.serviceManagerList.move_down, + self.serviceManagerList.move_up, + self.serviceManagerList.enter, + self.serviceManagerList.home, + self.serviceManagerList.end, + self.serviceManagerList.up, + self.serviceManagerList.down]) - 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.WidgetShortcut) - action.setData(QtCore.QVariant(category)) - QtCore.QObject.connect(action, - QtCore.SIGNAL(u'triggered()'), slot) - def setServiceHotkeys(self, parent=None): widget = self self.serviceManagerList.move_down = \ QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), - u'move_down', parent) - self.configureAction(self.serviceManagerList.move_down, + u'Move_down', parent) + ActionConfig.set(self.serviceManagerList.move_down, widget, u'Move_down', u'Service Settings', self.onServiceDown, 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): """ diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index cef49ef41..7b462dadd 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -113,3 +113,81 @@ class Ui_ShortcutListDialog(object): self.shortcutPushButton.setText( 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)) + diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index b45ed57a2..3efd2f019 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -30,7 +30,7 @@ import re from PyQt4 import QtCore, QtGui from openlp.core.utils import translate -from shortcutlistdialog import Ui_ShortcutListDialog +from shortcutlistdialog import Ui_ShortcutListDialog, Ui_ShortcutDialog REMOVE_AMPERSAND = re.compile(r'&{1}') @@ -58,42 +58,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): ) self.shortcutListTreeWidget.itemDoubleClicked.connect(self.shortcutEdit) - def keyReleaseEvent(self, event): - 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: - self.actionList[self.currentItem].setShortcut(QtGui.QKeySequence(self.newShortcut)) - self.shortcutListTreeWidget.currentItem().setText(1, self.newShortcut) - - self.shortcutPushButton.setChecked(False) - self.captureShortcut = False + def setNewShortcut(self, shortcut, alternate): + if self.currentItem: + self.actionList[self.currentItem].setShortcuts([shortcut, alternate]) + self.shortcutListTreeWidget.currentItem().setText(1, shortcut.toString()) + self.shortcutListTreeWidget.currentItem().setText(2, alternate.toString()) def exec_(self, parent): self.actionList = parent.findChildren(QtGui.QAction) @@ -119,45 +88,175 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): categorie = action.data().toString() or 'Unknown' if not catItemDict.has_key(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()) catItemDict[categorie].addChild(actionItem) catItemDict[categorie].setExpanded(True) - for item in catItemDict: - self.shortcutListTreeWidget.addTopLevelItem(catItemDict[item]) - self.shortcutListTreeWidget.expandItem(catItemDict[item]) - - 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 + for key in sorted(catItemDict.iterkeys()): + self.shortcutListTreeWidget.addTopLevelItem(catItemDict[key]) + self.shortcutListTreeWidget.expandItem(catItemDict[key]) + self.shortcutListTreeWidget.sortItems(0, QtCore.Qt.AscendingOrder) def onShortcutPushButtonClicked(self, toggled): self.captureShortcut = toggled def shortcutEdit(self, item, column): - #print "ändern", item.parent().text(0), item.text(0), column, item.type(), item self.currentItem = item.type() self.newShortcut = item.text(1) - self.shortcutListTreeWidget.currentItem().setText(column, u'Press new Shortcut') - self.captureShortcut = True + dialog = ShortcutDialog(self, u'Press new Shortcut', item.text(1), item.text(2)) + 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]))) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4c7639826..35b6f6ebf 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -33,7 +33,7 @@ from PyQt4.phonon import Phonon from openlp.core.ui import HideMode, MainDisplay from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate - +from openlp.core.utils import ActionConfig log = logging.getLogger(__name__) class SlideList(QtGui.QTableWidget): @@ -44,44 +44,6 @@ class SlideList(QtGui.QTableWidget): def __init__(self, parent=None, name=None): QtGui.QTableWidget.__init__(self, parent.Controller) 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): """ @@ -97,8 +59,6 @@ class SlideController(QtGui.QWidget): self.isLive = isLive self.parent = parent self.screens = screens -# self.setPreviewHotkeys(self) -# self.setLiveHotkeys(self) self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) self.display = MainDisplay(self, screens, isLive) @@ -357,19 +317,20 @@ class SlideController(QtGui.QWidget): self.Mediabar.setVisible(False) if self.isLive: self.setLiveHotkeys(self) - self.PreviewListWidget.addAction(self.previous_item) - self.PreviewListWidget.addAction(self.next_item) - self.PreviewListWidget.addAction(self.previous_service) - self.PreviewListWidget.addAction(self.next_service) - self.PreviewListWidget.addAction(self.escape_item) - self.display.addAction(self.previous_item) - self.display.addAction(self.previous_service) - self.display.addAction(self.next_service) - self.display.addAction(self.escape_item) + self.PreviewListWidget.addActions([self.previous_item, + self.next_item, + self.previous_service, + self.next_service, + self.escape_item]) + self.display.addActions([self.previous_item, + self.next_item, + self.previous_service, + self.next_service, + self.escape_item]) else: - self.setPreviewHotkeys()#self.PreviewListWidget) - self.PreviewListWidget.addAction(self.preview_next_item) - self.PreviewListWidget.addAction(self.preview_previous_item) + self.setPreviewHotkeys() + self.PreviewListWidget.addActions([self.preview_next_item, + self.preview_previous_item]) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), self.onStopLoop) @@ -419,65 +380,50 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), 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): widget = self self.preview_previous_item = QtGui.QAction(u'previous_item', parent) - self.configureAction(self.preview_previous_item, widget, u'previous_item', - u'Preview Settings', self.previewPrevious, QtCore.Qt.Key_Up) + ActionConfig.set(self.preview_previous_item, widget, u'previous_item', + u'Preview Settings', self.onSlideSelectedPrevious, QtCore.Qt.Key_Up) self.preview_next_item = QtGui.QAction(u'next_item', parent) - self.configureAction(self.preview_next_item, widget, u'next_item', - u'Preview Settings', self.previewNext, QtCore.Qt.Key_Down) + ActionConfig.set(self.preview_next_item, widget, u'next_item', + u'Preview Settings', self.onSlideSelectedNext, QtCore.Qt.Key_Down) #self.parent.display.addAction(self.next_item) def setLiveHotkeys(self, parent=None): widget = self self.next_item = QtGui.QAction(u'next_item', parent) - self.configureAction(self.next_item, widget, u'next_item', - u'Live View Settings', self.liveNext, QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown) - #self.parent.display.addAction(self.next_item) + ActionConfig.set(self.next_item, widget, u'next_item', + u'Live View Settings', self.onSlideSelectedNext, + QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown, + context=QtCore.Qt.WidgetWithChildrenShortcut) + parent.previous_service = QtGui.QAction(u'previous_service', parent) - self.configureAction(parent.previous_service, widget, u'previous_service', - u'Live View Settings', self.servicePrevious, QtCore.Qt.Key_Left) + ActionConfig.set(parent.previous_service, widget, u'previous_service', + u'Live View Settings', self.servicePrevious, + QtCore.Qt.Key_Left, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.next_service = QtGui.QAction(u'next_service', parent) - self.configureAction(self.next_service, widget, u'next_service', - u'Live View Settings', self.serviceNext, QtCore.Qt.Key_Right) + ActionConfig.set(self.next_service, widget, u'next_service', + u'Live View Settings', self.serviceNext, + QtCore.Qt.Key_Right, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.previous_item = QtGui.QAction(u'previous_item', parent) - self.configureAction(self.previous_item, widget, u'previous_item', - u'Live View Settings', self.livePrevious, QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp) - #self.parent.display.addAction(self.previous_item) + ActionConfig.set(self.previous_item, widget, u'previous_item', + u'Live View Settings', self.onSlideSelectedPrevious, + QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.escape_item = QtGui.QAction(u'escape_item', parent) - self.configureAction(self.escape_item, widget, u'escape_item', - u'Live View Settings', self.liveEscape, QtCore.Qt.Key_Escape) - - def liveNext(self): - self.onSlideSelectedNext() - - - def livePrevious(self): - self.onSlideSelectedPrevious() - - def previewNext(self): - self.onSlideSelectedNext() - - def previewPrevious(self): - self.onSlideSelectedPrevious() - + ActionConfig.set(self.escape_item, widget, u'escape_item', + u'Live View Settings', self.liveEscape, + QtCore.Qt.Key_Escape, + context=QtCore.Qt.WidgetWithChildrenShortcut) + def liveEscape(self): self.display.setVisible(False) self.display.videoStop() @@ -507,8 +453,10 @@ class SlideController(QtGui.QWidget): self.settingsmanager.slidecontroller_image / self.ratio)) if self.isLive: self.display.addActions([self.previous_item, - self.next_item, self.previous_service, - self.next_service, self.escape_item]) + self.next_item, + self.previous_service, + self.next_service, + self.escape_item]) def widthChanged(self): """ diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 23f77291c..984c876a1 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -276,7 +276,7 @@ def get_images_filter(): return images_filter from languagemanager import LanguageManager -from actions import ActionList +from actions import ActionList, ActionConfig __all__ = [u'AppLocation', u'check_latest_version', u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'ActionList'] diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 31afe93d1..b0e0bd3e5 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,6 +27,7 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ +from PyQt4 import QtCore class ActionCategory(object): """ @@ -182,3 +183,18 @@ class ActionList(object): self.categories[category].actions.append(action) else: 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) From 77da076c3bed5fb12e48a25485ff484078d6ccbb Mon Sep 17 00:00:00 2001 From: rimach Date: Sun, 16 Jan 2011 21:54:31 +0100 Subject: [PATCH 03/17] correct longlines, use camelNames, correct indentations --- openlp/core/ui/maindisplay.py | 46 ----------- openlp/core/ui/servicemanager.py | 115 +++++++++++++++------------ openlp/core/ui/shortcutlistdialog.py | 79 ------------------ openlp/core/ui/slidecontroller.py | 93 ++++++++++++---------- 4 files changed, 114 insertions(+), 219 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 808d7a319..76c374676 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -55,46 +55,6 @@ class DisplayWidget(QtGui.QGraphicsView): self.parent = parent self.live = live -# self.hotkey_map = { -# 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'} -# self.setStyleSheet(u'border: none;') -# -# def keyPressEvent(self, event): -# """ -# Handle key events from display screen -# """ -# # Key events only needed for live -# if not self.live: -# return -# if isinstance(event, QtGui.QKeyEvent): -# # Here accept the event and do something -# if event.key() == QtCore.Qt.Key_Up: -# Receiver.send_message(u'slidecontroller_live_previous') -# event.accept() -# elif event.key() == QtCore.Qt.Key_Down: -# Receiver.send_message(u'slidecontroller_live_next') -# event.accept() -# elif event.key() == QtCore.Qt.Key_PageUp: -# Receiver.send_message(u'slidecontroller_live_first') -# event.accept() -# elif event.key() == QtCore.Qt.Key_PageDown: -# Receiver.send_message(u'slidecontroller_live_last') -# event.accept() -# elif event.key() in self.hotkey_map: -# Receiver.send_message(self.hotkey_map[event.key()]) -# event.accept() -# elif event.key() == QtCore.Qt.Key_Escape: -# self.setVisible(False) -# self.videoStop() -# event.accept() -# event.ignore() -# else: -# event.ignore() - class MainDisplay(DisplayWidget): """ This is the display screen. @@ -117,12 +77,6 @@ class MainDisplay(DisplayWidget): QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) -# if self.live: -# 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) def retranslateUi(self): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 12889a440..a2af84885 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -263,72 +263,81 @@ class ServiceManager(QtGui.QWidget): self.menu.addMenu(self.themeMenu) self.configUpdated(True) self.setServiceHotkeys(self.serviceManagerList) - self.serviceManagerList.addActions([self.serviceManagerList.move_down, - self.serviceManagerList.move_up, - self.serviceManagerList.enter, - self.serviceManagerList.home, - self.serviceManagerList.end, - self.serviceManagerList.up, - self.serviceManagerList.down]) + self.serviceManagerList.addActions( + [self.serviceManagerList.moveDown, + self.serviceManagerList.moveUp, + self.serviceManagerList.enter, + self.serviceManagerList.home, + self.serviceManagerList.end, + self.serviceManagerList.up, + self.serviceManagerList.down]) def setServiceHotkeys(self, parent=None): widget = self - self.serviceManagerList.move_down = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), - u'Move_down', parent) - ActionList.set(self.serviceManagerList.move_down, - widget, u'Move_down', - u'Service Settings', self.onServiceDown, - QtCore.Qt.Key_PageDown) - self.mainwindow.actionList.add_action(self.serviceManagerList.move_down, u'Service') - self.serviceManagerList.move_up = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move_up', parent) - ActionList.set(self.serviceManagerList.move_up, - widget, u'Move_up', - u'Service Settings', self.onServiceUp, - QtCore.Qt.Key_PageUp) - self.mainwindow.actionList.add_action(self.serviceManagerList.move_up, u'Service') + self.serviceManagerList.moveDown = \ + QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), + u'Move_down', parent) + ActionList.set(self.serviceManagerList.moveDown, + widget, u'Move_down', + u'Service Settings', self.onServiceDown, + QtCore.Qt.Key_PageDown) + self.mainwindow.actionList.add_action( + self.serviceManagerList.moveDown, + u'Service') + self.serviceManagerList.moveUp = \ + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'Move_up', parent) + ActionList.set(self.serviceManagerList.moveUp, + widget, u'Move_up', + u'Service Settings', self.onServiceUp, + QtCore.Qt.Key_PageUp) + self.mainwindow.actionList.add_action(self.serviceManagerList.moveUp, + u'Service') self.serviceManagerList.enter = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Make Live', parent) + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'Make Live', parent) ActionList.set(self.serviceManagerList.enter, - widget, u'Make Live', - u'Service Settings', self.makeLive, - QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return) - self.mainwindow.actionList.add_action(self.serviceManagerList.enter, u'Service') + widget, u'Make Live', + u'Service Settings', self.makeLive, + QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return) + self.mainwindow.actionList.add_action(self.serviceManagerList.enter, + u'Service') self.serviceManagerList.home = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Home', parent) + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'Home', parent) ActionList.set(self.serviceManagerList.home, - widget, u'Home', - u'Service Settings', self.onServiceTop, - QtCore.Qt.Key_Home) - self.mainwindow.actionList.add_action(self.serviceManagerList.home, u'Service') + widget, u'Home', + u'Service Settings', self.onServiceTop, + QtCore.Qt.Key_Home) + self.mainwindow.actionList.add_action(self.serviceManagerList.home, + u'Service') self.serviceManagerList.end = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'End', parent) + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'End', parent) ActionList.set(self.serviceManagerList.end, - widget, u'End', - u'Service Settings', self.onServiceEnd, - QtCore.Qt.Key_End) - self.mainwindow.actionList.add_action(self.serviceManagerList.end, u'Service') + widget, u'End', + u'Service Settings', self.onServiceEnd, + QtCore.Qt.Key_End) + self.mainwindow.actionList.add_action(self.serviceManagerList.end, + u'Service') self.serviceManagerList.up = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move Selection up', parent) + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'Move Selection up', parent) ActionList.set(self.serviceManagerList.up, - widget, u'Move Selection up', - u'Service Settings', self.onMoveSelectionUp, - QtCore.Qt.Key_Up) - self.mainwindow.actionList.add_action(self.serviceManagerList.up, u'Service') + widget, u'Move Selection up', + u'Service Settings', self.onMoveSelectionUp, + QtCore.Qt.Key_Up) + self.mainwindow.actionList.add_action(self.serviceManagerList.up, + u'Service') self.serviceManagerList.down = \ - QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move Selection down', parent) + QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), + u'Move Selection down', parent) ActionList.set(self.serviceManagerList.down, - widget, u'Move Selection down', - u'Service Settings', self.onMoveSelectionDown, - QtCore.Qt.Key_Down) - self.mainwindow.actionList.add_action(self.serviceManagerList.down, u'Service') + widget, u'Move Selection down', + u'Service Settings', self.onMoveSelectionDown, + QtCore.Qt.Key_Down) + self.mainwindow.actionList.add_action(self.serviceManagerList.down, + u'Service') def setModified(self, modified=True): """ diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 538568dda..3f41d377a 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -85,82 +85,3 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Custom:')) self.shortcutButton.setText( 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)) - diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index a1036f2a5..b6af8e5e9 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -314,20 +314,23 @@ class SlideController(QtGui.QWidget): self.Mediabar.setVisible(False) if self.isLive: self.setLiveHotkeys(self) - self.PreviewListWidget.addActions([self.previous_item, - self.next_item, - self.previous_service, - self.next_service, - self.escape_item]) - self.display.addActions([self.previous_item, - self.next_item, - self.previous_service, - self.next_service, - self.escape_item]) + self.PreviewListWidget.addActions( + [self.previousItem, + self.nextItem, + self.previousService, + self.nextService, + self.escapeItem]) + self.display.addActions( + [self.previousItem, + self.nextItem, + self.previousService, + self.nextService, + self.escapeItem]) else: self.setPreviewHotkeys() - self.PreviewListWidget.addActions([self.preview_next_item, - self.preview_previous_item]) + self.PreviewListWidget.addActions( + [self.previewNextItem, + self.previewPreviousItem]) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), self.onStopLoop) @@ -372,52 +375,59 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): widget = self - self.preview_previous_item = QtGui.QAction(u'previous_item', parent) - ActionList.set(self.preview_previous_item, widget, u'previous_item', - u'Preview Settings', self.onSlideSelectedPrevious, QtCore.Qt.Key_Up) - self.parent.actionList.add_action(self.preview_previous_item, u'Preview') - - self.preview_next_item = QtGui.QAction(u'next_item', parent) - ActionList.set(self.preview_next_item, widget, u'next_item', - u'Preview Settings', self.onSlideSelectedNext, QtCore.Qt.Key_Down) - self.parent.actionList.add_action(self.preview_next_item, u'Preview') + self.previewPreviousItem = QtGui.QAction(u'previous_item', parent) + ActionList.set( + self.previewPreviousItem, widget, u'previous_item', + u'Preview Settings', self.onSlideSelectedPrevious, + QtCore.Qt.Key_Up) + self.parent.actionList.add_action(self.previewPreviousItem, + u'Preview') + self.previewNextItem = QtGui.QAction(u'next_item', parent) + ActionList.set(self.previewNextItem, widget, u'next_item', + u'Preview Settings', self.onSlideSelectedNext, + QtCore.Qt.Key_Down) + self.parent.actionList.add_action(self.previewNextItem, u'Preview') def setLiveHotkeys(self, parent=None): widget = self - self.next_item = QtGui.QAction(u'next_item', parent) - ActionList.set(self.next_item, widget, u'next_item', + self.nextItem = QtGui.QAction(u'next_item', parent) + ActionList.set(self.nextItem, widget, u'next_item', u'Live View Settings', self.onSlideSelectedNext, QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown, context=QtCore.Qt.WidgetWithChildrenShortcut) - self.parent.actionList.add_action(self.next_item, u'Live View Settings') + self.parent.actionList.add_action(self.nextItem, u'Live View Settings') - parent.previous_service = QtGui.QAction(u'previous_service', parent) - ActionList.set(parent.previous_service, widget, u'previous_service', + parent.previousService = QtGui.QAction(u'previous_service', parent) + ActionList.set(parent.previousService, widget, u'previous_service', u'Live View Settings', self.servicePrevious, QtCore.Qt.Key_Left, context=QtCore.Qt.WidgetWithChildrenShortcut) - self.parent.actionList.add_action(self.previous_service, u'Live View Settings') + self.parent.actionList.add_action(self.previousService, + u'Live View Settings') - self.next_service = QtGui.QAction(u'next_service', parent) - ActionList.set(self.next_service, widget, u'next_service', + self.nextService = QtGui.QAction(u'next_service', parent) + ActionList.set(self.nextService, widget, u'next_service', u'Live View Settings', self.serviceNext, QtCore.Qt.Key_Right, context=QtCore.Qt.WidgetWithChildrenShortcut) - self.parent.actionList.add_action(self.next_service, u'Live View Settings') + self.parent.actionList.add_action(self.nextService, + u'Live View Settings') - self.previous_item = QtGui.QAction(u'previous_item', parent) - ActionList.set(self.previous_item, widget, u'previous_item', + self.previousItem = QtGui.QAction(u'previous_item', parent) + ActionList.set(self.previousItem, widget, u'previous_item', u'Live View Settings', self.onSlideSelectedPrevious, QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp, context=QtCore.Qt.WidgetWithChildrenShortcut) - self.parent.actionList.add_action(self.previous_item, u'Live View Settings') + self.parent.actionList.add_action(self.previousItem, + u'Live View Settings') - self.escape_item = QtGui.QAction(u'escape_item', parent) - ActionList.set(self.escape_item, widget, u'escape_item', + self.escapeItem = QtGui.QAction(u'escape_item', parent) + ActionList.set(self.escapeItem, widget, u'escape_item', u'Live View Settings', self.liveEscape, QtCore.Qt.Key_Escape, context=QtCore.Qt.WidgetWithChildrenShortcut) - self.parent.actionList.add_action(self.escape_item, u'Live View Settings') + self.parent.actionList.add_action(self.escapeItem, + u'Live View Settings') def liveEscape(self): self.display.setVisible(False) @@ -444,11 +454,12 @@ class SlideController(QtGui.QWidget): QtCore.QSize(self.settingsmanager.slidecontroller_image, self.settingsmanager.slidecontroller_image / self.ratio)) if self.isLive: - self.display.addActions([self.previous_item, - self.next_item, - self.previous_service, - self.next_service, - self.escape_item]) + self.display.addActions( + [self.previousItem, + self.nextItem, + self.previousService, + self.nextService, + self.escapeItem]) # The SlidePreview's ratio. self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) From abf5353993d8c4b82d7df5306d698d8560be5de6 Mon Sep 17 00:00:00 2001 From: rimach Date: Mon, 17 Jan 2011 23:25:05 +0100 Subject: [PATCH 04/17] correct indentation, cleanup, docu --- openlp/core/ui/servicemanager.py | 60 ++++++++++++------------------- openlp/core/ui/slidecontroller.py | 46 +++++++++--------------- openlp/core/utils/actions.py | 18 +++++++--- 3 files changed, 51 insertions(+), 73 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index a2af84885..14a434572 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -273,69 +273,53 @@ class ServiceManager(QtGui.QWidget): self.serviceManagerList.down]) def setServiceHotkeys(self, parent=None): - widget = self self.serviceManagerList.moveDown = \ QtGui.QAction(QtGui.QIcon(u':/services/service_down.png'), - u'Move_down', parent) - ActionList.set(self.serviceManagerList.moveDown, - widget, u'Move_down', - u'Service Settings', self.onServiceDown, - QtCore.Qt.Key_PageDown) + u'Move_down', parent) + ActionList.set(self.serviceManagerList.moveDown, u'Move_down', + self.onServiceDown, QtCore.Qt.Key_PageDown) self.mainwindow.actionList.add_action( - self.serviceManagerList.moveDown, - u'Service') + self.serviceManagerList.moveDown, u'Service') self.serviceManagerList.moveUp = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move_up', parent) - ActionList.set(self.serviceManagerList.moveUp, - widget, u'Move_up', - u'Service Settings', self.onServiceUp, - QtCore.Qt.Key_PageUp) + u'Move_up', parent) + ActionList.set(self.serviceManagerList.moveUp, + u'Move_up', self.onServiceUp, QtCore.Qt.Key_PageUp) self.mainwindow.actionList.add_action(self.serviceManagerList.moveUp, u'Service') self.serviceManagerList.enter = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Make Live', parent) - ActionList.set(self.serviceManagerList.enter, - widget, u'Make Live', - u'Service Settings', self.makeLive, - QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return) + u'Make Live', parent) + ActionList.set(self.serviceManagerList.enter, u'Make Live', + self.makeLive, QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return) self.mainwindow.actionList.add_action(self.serviceManagerList.enter, u'Service') self.serviceManagerList.home = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Home', parent) - ActionList.set(self.serviceManagerList.home, - widget, u'Home', - u'Service Settings', self.onServiceTop, - QtCore.Qt.Key_Home) + u'Home', parent) + ActionList.set(self.serviceManagerList.home, u'Home', + self.onServiceTop, QtCore.Qt.Key_Home) self.mainwindow.actionList.add_action(self.serviceManagerList.home, u'Service') self.serviceManagerList.end = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'End', parent) - ActionList.set(self.serviceManagerList.end, - widget, u'End', - u'Service Settings', self.onServiceEnd, - QtCore.Qt.Key_End) + u'End', parent) + ActionList.set(self.serviceManagerList.end, u'End', + self.onServiceEnd, QtCore.Qt.Key_End) self.mainwindow.actionList.add_action(self.serviceManagerList.end, u'Service') self.serviceManagerList.up = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move Selection up', parent) - ActionList.set(self.serviceManagerList.up, - widget, u'Move Selection up', - u'Service Settings', self.onMoveSelectionUp, - QtCore.Qt.Key_Up) + u'Move Selection up', parent) + ActionList.set(self.serviceManagerList.up, u'Move Selection up', + self.onMoveSelectionUp, QtCore.Qt.Key_Up) self.mainwindow.actionList.add_action(self.serviceManagerList.up, u'Service') self.serviceManagerList.down = \ QtGui.QAction(QtGui.QIcon(u':/services/service_up.png'), - u'Move Selection down', parent) - ActionList.set(self.serviceManagerList.down, - widget, u'Move Selection down', - u'Service Settings', self.onMoveSelectionDown, - QtCore.Qt.Key_Down) + u'Move Selection down', parent) + ActionList.set(self.serviceManagerList.down, u'Move Selection down', + self.onMoveSelectionDown, QtCore.Qt.Key_Down) self.mainwindow.actionList.add_action(self.serviceManagerList.down, u'Service') diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b6af8e5e9..5192beee4 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -374,57 +374,43 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - widget = self self.previewPreviousItem = QtGui.QAction(u'previous_item', parent) - ActionList.set( - self.previewPreviousItem, widget, u'previous_item', - u'Preview Settings', self.onSlideSelectedPrevious, - QtCore.Qt.Key_Up) + ActionList.set(self.previewPreviousItem, u'previous_item', + self.onSlideSelectedPrevious, QtCore.Qt.Key_Up) self.parent.actionList.add_action(self.previewPreviousItem, u'Preview') self.previewNextItem = QtGui.QAction(u'next_item', parent) - ActionList.set(self.previewNextItem, widget, u'next_item', - u'Preview Settings', self.onSlideSelectedNext, - QtCore.Qt.Key_Down) + ActionList.set(self.previewNextItem, u'next_item', + self.onSlideSelectedNext, QtCore.Qt.Key_Down) self.parent.actionList.add_action(self.previewNextItem, u'Preview') def setLiveHotkeys(self, parent=None): - widget = self self.nextItem = QtGui.QAction(u'next_item', parent) - ActionList.set(self.nextItem, widget, u'next_item', - u'Live View Settings', self.onSlideSelectedNext, - QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown, + ActionList.set(self.nextItem, u'next_item', self.onSlideSelectedNext, + QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown, context=QtCore.Qt.WidgetWithChildrenShortcut) self.parent.actionList.add_action(self.nextItem, u'Live View Settings') - parent.previousService = QtGui.QAction(u'previous_service', parent) - ActionList.set(parent.previousService, widget, u'previous_service', - u'Live View Settings', self.servicePrevious, - QtCore.Qt.Key_Left, + ActionList.set(parent.previousService, u'previous_service', + self.servicePrevious, QtCore.Qt.Key_Left, context=QtCore.Qt.WidgetWithChildrenShortcut) self.parent.actionList.add_action(self.previousService, u'Live View Settings') - self.nextService = QtGui.QAction(u'next_service', parent) - ActionList.set(self.nextService, widget, u'next_service', - u'Live View Settings', self.serviceNext, - QtCore.Qt.Key_Right, + ActionList.set(self.nextService, u'next_service', + self.serviceNext, QtCore.Qt.Key_Right, context=QtCore.Qt.WidgetWithChildrenShortcut) self.parent.actionList.add_action(self.nextService, u'Live View Settings') - self.previousItem = QtGui.QAction(u'previous_item', parent) - ActionList.set(self.previousItem, widget, u'previous_item', - u'Live View Settings', self.onSlideSelectedPrevious, - QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp, - context=QtCore.Qt.WidgetWithChildrenShortcut) + ActionList.set(self.previousItem, u'previous_item', + self.onSlideSelectedPrevious, QtCore.Qt.Key_Up, + QtCore.Qt.Key_PageUp, context=QtCore.Qt.WidgetWithChildrenShortcut) self.parent.actionList.add_action(self.previousItem, u'Live View Settings') - self.escapeItem = QtGui.QAction(u'escape_item', parent) - ActionList.set(self.escapeItem, widget, u'escape_item', - u'Live View Settings', self.liveEscape, - QtCore.Qt.Key_Escape, + ActionList.set(self.escapeItem, u'escape_item', + self.liveEscape, QtCore.Qt.Key_Escape, context=QtCore.Qt.WidgetWithChildrenShortcut) self.parent.actionList.add_action(self.escapeItem, u'Live View Settings') @@ -949,7 +935,7 @@ class SlideController(QtGui.QWidget): if loop: row = 0 else: - #Receiver.send_message('servicemanager_next_item') + Receiver.send_message('servicemanager_next_item') return if row + 1 < self.PreviewListWidget.rowCount(): self.PreviewListWidget.scrollToItem( diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 9cc586f28..f75affad5 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -185,11 +185,19 @@ class ActionList(object): self.categories[category].actions.add(action, weight) @staticmethod - def set(action, widget, text, category, slot, shortcut, - alternate=0, context=QtCore.Qt.WidgetShortcut): + def set(action, text, slot, shortcut, alternate=0, + context=QtCore.Qt.WidgetShortcut): + """ + Set Parameter for Action Items + + ``action`` action Item + ``text`` object name and menu title + ``slot`` connected slot + ``shortcut`` first shortcut + ``alternate`` alternate shortcut + ``context`` used context for this action + """ action.setObjectName(text) action.setShortcuts([shortcut, alternate]) action.setShortcutContext(context) - action.setData(QtCore.QVariant(category)) - QtCore.QObject.connect(action, - QtCore.SIGNAL(u'triggered()'), slot) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) From cbeb289875643be3d130013f0bd2a8519897aa1b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 20:22:43 +0100 Subject: [PATCH 05/17] add verse language to db (like OpenLyrics) --- openlp/plugins/songs/lib/openlyricsimport.py | 7 +++++-- openlp/plugins/songs/lib/xml.py | 22 ++++++++++++++++---- openlp/plugins/songs/songsplugin.py | 12 +++++++---- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index 220160b1d..60d032b7e 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -61,14 +61,17 @@ class OpenLyricsImport(SongImport): Imports the songs. """ self.import_wizard.progressBar.setMaximum(len(self.import_source)) + parser = etree.XMLParser(remove_blank_text=True) for file_path in self.import_source: if self.stop_import_flag: return False self.import_wizard.incrementProgressBar(unicode(translate( 'SongsPlugin.OpenLyricsImport', 'Importing %s...')) % os.path.basename(file_path)) - parser = etree.XMLParser(remove_blank_text=True) - parsed_file = etree.parse(file_path, parser) + try: + parsed_file = etree.parse(file_path, parser) + except etree.XMLSyntaxError: + return False xml = unicode(etree.tostring(parsed_file)) if self.openLyrics.xml_to_song(xml) is None: log.debug(u'File could not be imported: %s' % file_path) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 88459b797..2d8babf65 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -31,7 +31,7 @@ The basic XML for storing the lyrics in the song database is of the format:: - + @@ -84,7 +84,7 @@ class SongXML(object): self.song_xml = objectify.fromstring(u'') self.lyrics = etree.SubElement(self.song_xml, u'lyrics') - def add_verse_to_lyrics(self, type, number, content): + def add_verse_to_lyrics(self, type, number, content, lang=None): """ Add a verse to the ** tag. @@ -97,9 +97,15 @@ class SongXML(object): ``content`` The actual text of the verse to be stored. + + ``lang`` + The verse's language code. This is not required, but should be added + if available. """ verse = etree.Element(u'verse', type=unicode(type), label=unicode(number)) + if lang: + verse.set(u'lang', lang) verse.text = etree.CDATA(content) self.lyrics.append(verse) @@ -117,6 +123,11 @@ class SongXML(object): ``xml`` The XML of the song to be parsed. + + The returned list has the following format:: + + [[{'lang': 'en', 'type': 'V', 'label': '1'}, u"The English verse."], + [{'lang': 'en', 'type': 'C', 'label': '1'}, u"The English chorus."]] """ self.song_xml = None if xml[:5] == u'* - The attribute *translit* and *lang* are not supported. + The attribute *translit* is not supported. ** OpenLP supports this property. @@ -442,7 +453,10 @@ class OpenLyrics(object): if not verse_number: verse_number = u'1' temp_verse_order.append((verse_type, verse_number, verse_part)) - sxml.add_verse_to_lyrics(verse_type, verse_number, text) + lang = None + if self._get(verse, u'lang'): + lang = self._get(verse, u'lang') + sxml.add_verse_to_lyrics(verse_type, verse_number, text, lang) search_text = search_text + text song.search_lyrics = search_text.lower() song.lyrics = unicode(sxml.extract_xml(), u'utf-8') diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 17e609fd4..66f457d24 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -134,7 +134,7 @@ class SongsPlugin(Plugin): def onToolsReindexItemTriggered(self): """ - Rebuild the search title of each song. + Rebuild each song. """ maxSongs = self.manager.get_object_count(Song) progressDialog = QtGui.QProgressDialog( @@ -150,8 +150,13 @@ class SongsPlugin(Plugin): song.title = u'' if song.alternate_title is None: song.alternate_title = u'' - song.search_title = self.whitespace.sub(u' ', song.title.lower() + \ + song.search_title = self.whitespace.sub(u' ', song.title.lower() + u' ' + song.alternate_title.lower()) + # Remove the "language" attribute from lyrics tag. This is not very + # important, but this keeps the database clean. This can be removed + # when everybody has run the reindex tool once. + song.lyrics = song.lyrics.replace( + u'', u'') lyrics = u'' verses = SongXML().get_verses(song.lyrics) for verse in verses: @@ -159,8 +164,7 @@ class SongsPlugin(Plugin): song.search_lyrics = lyrics.lower() progressDialog.setValue(counter) self.manager.save_objects(songs) - counter += 1 - progressDialog.setValue(counter) + progressDialog.setValue(counter + 1) self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) From da1070468b7638472b140c84d86b3b5f2820ec52 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 20:37:44 +0100 Subject: [PATCH 06/17] removed white spaces --- openlp/plugins/songs/forms/songimportform.py | 2 +- openlp/plugins/songs/lib/easislidesimport.py | 2 +- openlp/plugins/songs/songsplugin.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index d14ab9c36..e3d7b635e 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -654,7 +654,7 @@ class SongImportForm(OpenLPWizard): 'Select EasiSlides songfile'), self.easiSlidesFilenameEdit ) - + def onEWBrowseButtonClicked(self): """ Get EasyWorship song database files diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index 8685b6934..85384efd7 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -313,7 +313,7 @@ class EasiSlidesImport(SongImport): tag = SeqTypes[tag.lower()] else: continue - + if tag in versetags: self.verse_order_list.append(tag) else: diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 66f457d24..7efe73db2 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -153,7 +153,7 @@ class SongsPlugin(Plugin): song.search_title = self.whitespace.sub(u' ', song.title.lower() + u' ' + song.alternate_title.lower()) # Remove the "language" attribute from lyrics tag. This is not very - # important, but this keeps the database clean. This can be removed + # important, but this keeps the database clean. This can be removed # when everybody has run the reindex tool once. song.lyrics = song.lyrics.replace( u'', u'') From 6f344bd85aefbb5255f8460daafe73b5271bedec Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 20:57:08 +0100 Subject: [PATCH 07/17] added possibility to add language to songimporter --- openlp/plugins/songs/lib/songimport.py | 32 ++++++++++++++++---------- openlp/plugins/songs/lib/xml.py | 4 ++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 3ce271466..67aa8094f 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -197,16 +197,24 @@ class SongImport(QtCore.QObject): return self.media_files.append(filename) - def add_verse(self, verse, versetag=u'V'): + def add_verse(self, versetext, versetag=u'V', lang=None): """ - Add a verse. This is the whole verse, lines split by \n - Verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the verses/ - choruses itself) or None, where it will assume verse - It will also attempt to detect duplicates. In this case it will just - add to the verse order + Add a verse. This is the whole verse, lines split by \n. It will also + attempt to detect duplicates. In this case it will just add to the verse + order. + + ``versetext`` + The text of the verse. + + ``versetag`` + The verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the verses/ + choruses itself) or None, where it will assume verse. + + ``lang`` + The language code (ISO-639) of the verse, for example *en* or *de*. """ - for (oldversetag, oldverse) in self.verses: - if oldverse.strip() == verse.strip(): + for (oldversetag, oldverse, oldlang) in self.verses: + if oldverse.strip() == versetext.strip(): self.verse_order_list.append(oldversetag) return if versetag[0] in self.versecounts: @@ -217,7 +225,7 @@ class SongImport(QtCore.QObject): versetag += unicode(self.versecounts[versetag[0]]) elif int(versetag[1:]) > self.versecounts[versetag[0]]: self.versecounts[versetag[0]] = int(versetag[1:]) - self.verses.append([versetag, verse.rstrip()]) + self.verses.append([versetag, versetext.rstrip(), lang]) self.verse_order_list.append(versetag) if versetag.startswith(u'V') and self.contains_verse(u'C1'): self.verse_order_list.append(u'C1') @@ -266,7 +274,7 @@ class SongImport(QtCore.QObject): verses_changed_to_other = {} sxml = SongXML() other_count = 1 - for (versetag, versetext) in self.verses: + for (versetag, versetext, lang) in self.verses: if versetag[0] == u'C': versetype = VerseType.to_string(VerseType.Chorus) elif versetag[0] == u'V': @@ -286,7 +294,7 @@ class SongImport(QtCore.QObject): versetype = VerseType.to_string(VerseType.Other) log.info(u'Versetype %s changing to %s' , versetag, newversetag) versetag = newversetag - sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext) + sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext, lang) song.search_lyrics += u' ' + self.remove_punctuation(versetext) song.search_lyrics = song.search_lyrics.lower() song.lyrics = unicode(sxml.extract_xml(), u'utf-8') @@ -338,7 +346,7 @@ class SongImport(QtCore.QObject): + u'========================================' print u'TITLE: ' + self.title print u'ALT TITLE: ' + self.alternate_title - for (versetag, versetext) in self.verses: + for (versetag, versetext, lang) in self.verses: print u'VERSE ' + versetag + u': ' + versetext print u'ORDER: ' + u' '.join(self.verse_order_list) for author in self.authors: diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 2d8babf65..7fc102e81 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -99,8 +99,8 @@ class SongXML(object): The actual text of the verse to be stored. ``lang`` - The verse's language code. This is not required, but should be added - if available. + The verse's language code (ISO-639). This is not required, but + should be added if available. """ verse = etree.Element(u'verse', type=unicode(type), label=unicode(number)) From 57abf340576595d55a4124bf2ea5d1c28dbd629c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 21:08:07 +0100 Subject: [PATCH 08/17] fixed long line --- openlp/plugins/songs/lib/songimport.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 67aa8094f..cab0aacf6 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -207,8 +207,8 @@ class SongImport(QtCore.QObject): The text of the verse. ``versetag`` - The verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the verses/ - choruses itself) or None, where it will assume verse. + The verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the + verses/choruses itself) or None, where it will assume verse. ``lang`` The language code (ISO-639) of the verse, for example *en* or *de*. From 9504df4f6f5ff0c36edaaf083157d3fb93ff2f79 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 21:27:43 +0100 Subject: [PATCH 09/17] docs, comments, better button handling --- .../songs/forms/songmaintenanceform.py | 115 +++++++++++++----- 1 file changed, 84 insertions(+), 31 deletions(-) diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index bf7fb40b7..d7d1b9313 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -50,6 +50,14 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): self.authorform = AuthorsForm(self) self.topicform = TopicsForm(self) self.bookform = SongBookForm(self) + # Disable all edit and delete buttons, as there is no row selected. + self.authorsDeleteButton.setEnabled(False) + self.authorsEditButton.setEnabled(False) + self.topicsDeleteButton.setEnabled(False) + self.topicsEditButton.setEnabled(False) + self.booksDeleteButton.setEnabled(False) + self.booksEditButton.setEnabled(False) + # Signals QtCore.QObject.connect(self.authorsAddButton, QtCore.SIGNAL(u'pressed()'), self.onAuthorAddButtonClick) QtCore.QObject.connect(self.topicsAddButton, @@ -68,6 +76,15 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): QtCore.SIGNAL(u'pressed()'), self.onTopicDeleteButtonClick) QtCore.QObject.connect(self.booksDeleteButton, QtCore.SIGNAL(u'pressed()'), self.onBookDeleteButtonClick) + QtCore.QObject.connect(self.authorsListWidget, + QtCore.SIGNAL(u'currentRowChanged(int)'), + self.onAuthorsListRowChanged) + QtCore.QObject.connect(self.topicsListWidget, + QtCore.SIGNAL(u'currentRowChanged(int)'), + self.onTopicsListRowChanged) + QtCore.QObject.connect(self.booksListWidget, + QtCore.SIGNAL(u'currentRowChanged(int)'), + self.onBooksListRowChanged) def exec_(self): self.typeListWidget.setCurrentRow(0) @@ -115,12 +132,6 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): u' '.join([author.first_name, author.last_name])) author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id)) self.authorsListWidget.addItem(author_name) - if self.authorsListWidget.count() == 0: - self.authorsDeleteButton.setEnabled(False) - self.authorsEditButton.setEnabled(False) - else: - self.authorsDeleteButton.setEnabled(True) - self.authorsEditButton.setEnabled(True) def resetTopics(self): """ @@ -132,12 +143,6 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): topic_name = QtGui.QListWidgetItem(topic.name) topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) self.topicsListWidget.addItem(topic_name) - if self.topicsListWidget.count() == 0: - self.topicsDeleteButton.setEnabled(False) - self.topicsEditButton.setEnabled(False) - else: - self.topicsDeleteButton.setEnabled(True) - self.topicsEditButton.setEnabled(True) def resetBooks(self): """ @@ -150,26 +155,22 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): book.publisher)) book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id)) self.booksListWidget.addItem(book_name) - if self.booksListWidget.count() == 0: - self.booksDeleteButton.setEnabled(False) - self.booksEditButton.setEnabled(False) - else: - self.booksDeleteButton.setEnabled(True) - self.booksEditButton.setEnabled(True) def checkAuthor(self, new_author, edit=False): """ - Returns False if the given Author is already in the list otherwise - True. + Returns *False* if the given Author already exists, otherwise *True*. + + ``edit`` + If we edit an item, this should be *True*. """ authors = self.manager.get_all_objects(Author, and_(Author.first_name == new_author.first_name, Author.last_name == new_author.last_name, Author.display_name == new_author.display_name)) + # Check if this author already exists. if len(authors) > 0: # If we edit an existing Author, we need to make sure that we do - # not return False when nothing has changed (because this would - # cause an error message later on). + # not return False when nothing has changed. if edit: for author in authors: if author.id != new_author.id: @@ -182,14 +183,16 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): def checkTopic(self, new_topic, edit=False): """ - Returns False if the given Topic is already in the list otherwise True. + Returns *False* if the given Topic already exists, otherwise *True*. + + ``edit`` + If we edit an item, this should be *True*. """ topics = self.manager.get_all_objects(Topic, Topic.name == new_topic.name) if len(topics) > 0: # If we edit an existing Topic, we need to make sure that we do - # not return False when nothing has changed (because this would - # cause an error message later on). + # not return False when nothing has changed. if edit: for topic in topics: if topic.id != new_topic.id: @@ -202,15 +205,17 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): def checkBook(self, new_book, edit=False): """ - Returns False if the given Book is already in the list otherwise True. + Returns *False* if the given Topic already exists, otherwise *True*. + + ``edit`` + If we edit an item, this should be *True*. """ books = self.manager.get_all_objects(Book, and_(Book.name == new_book.name, Book.publisher == new_book.publisher)) if len(books) > 0: # If we edit an existing Book, we need to make sure that we do - # not return False when nothing has changed (because this would - # cause an error message later on). + # not return False when nothing has changed. if edit: for book in books: if book.id != new_book.id: @@ -390,12 +395,14 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): Merges two authors into one author. ``old_author`` - The author which will be deleted afterwards. + The author, which was edited. It will be deleted. """ + # Find the duplicate. existing_author = self.manager.get_object_filtered(Author, and_(Author.first_name == old_author.first_name, Author.last_name == old_author.last_name, Author.display_name == old_author.display_name)) + # Find the songs, which have the old_author as author. songs = self.manager.get_all_objects(Song, Song.authors.contains(old_author)) for song in songs: @@ -412,10 +419,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): Merges two topics into one topic. ``old_topic`` - The topic which will be deleted afterwards. + The topic, which was edited. It will be deleted. """ + # Find the duplicate. existing_topic = self.manager.get_object_filtered(Topic, Topic.name == old_topic.name) + # Find the songs, which have the old_topic as topic. songs = self.manager.get_all_objects(Song, Song.topics.contains(old_topic)) for song in songs: @@ -432,11 +441,13 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): Merges two books into one book. ``old_book`` - The book which will be deleted afterwards. + The book, which was edited. It will be deleted. """ + # Find the duplicate. existing_book = self.manager.get_object_filtered(Book, and_(Book.name == old_book.name, Book.publisher == old_book.publisher)) + # Find the songs, which have the old_book as book. songs = self.manager.get_all_objects(Song, Song.song_book_id == old_book.id) for song in songs: @@ -482,3 +493,45 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): 'This book cannot be deleted, it is currently ' 'assigned to at least one song.'), translate('SongsPlugin.SongMaintenanceForm', 'No book selected!')) + + def onAuthorsListRowChanged(self, row): + """ + Called when the *authorsListWidget* current's row has changed. + + ``row`` + The current row. If there is no current row, the value is -1 + """ + if row == -1: + self.authorsDeleteButton.setEnabled(False) + self.authorsEditButton.setEnabled(False) + else: + self.authorsDeleteButton.setEnabled(True) + self.authorsEditButton.setEnabled(True) + + def onTopicsListRowChanged(self, row): + """ + Called when the *booksListWidget* current's row has changed. + + ``row`` + The current row. If there is no current row, the value is -1. + """ + if row == -1: + self.topicsDeleteButton.setEnabled(False) + self.topicsEditButton.setEnabled(False) + else: + self.topicsDeleteButton.setEnabled(True) + self.topicsEditButton.setEnabled(True) + + def onBooksListRowChanged(self, row): + """ + Called when the *booksListWidget* current's row has changed. + + ``row`` + The current row. If there is no current row, the value is -1. + """ + if row == -1: + self.booksDeleteButton.setEnabled(False) + self.booksEditButton.setEnabled(False) + else: + self.booksDeleteButton.setEnabled(True) + self.booksEditButton.setEnabled(True) From 3a818af9fc99f038547913130c9946dbf264eec1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 19 Jan 2011 21:31:14 +0100 Subject: [PATCH 10/17] empty line --- openlp/plugins/songs/forms/songmaintenanceform.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index d7d1b9313..fefd3ed33 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -535,3 +535,4 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: self.booksDeleteButton.setEnabled(True) self.booksEditButton.setEnabled(True) + From d052098287655a86f4c16c3c772a8f11e43cc66d Mon Sep 17 00:00:00 2001 From: rimach Date: Wed, 19 Jan 2011 22:17:32 +0100 Subject: [PATCH 11/17] correct icons, use existant actions --- openlp/core/lib/toolbar.py | 14 +++- openlp/core/ui/servicemanager.py | 122 +++++++++++++----------------- openlp/core/ui/slidecontroller.py | 115 ++++++++++++++-------------- openlp/core/utils/actions.py | 18 ----- 4 files changed, 121 insertions(+), 148 deletions(-) diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 93aed62e5..1689f0605 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -51,7 +51,8 @@ class OpenLPToolbar(QtGui.QToolBar): log.debug(u'Init done') def addToolbarButton(self, title, icon, tooltip=None, slot=None, - checkable=False): + checkable=False, shortcut=0, alternate=0, + context=QtCore.Qt.WidgetShortcut): """ A method to help developers easily add a button to the toolbar. @@ -71,6 +72,15 @@ class OpenLPToolbar(QtGui.QToolBar): ``objectname`` The name of the object, as used in `