Tim Bentley has proposed merging lp:~trb143/openlp/fixes into lp:openlp. Requested reviews: OpenLP Core (openlp-core)
-- https://code.launchpad.net/~trb143/openlp/fixes/+merge/14166 Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/eventreceiver.py' --- openlp/core/lib/eventreceiver.py 2009-10-27 08:38:02 +0000 +++ openlp/core/lib/eventreceiver.py 2009-10-29 14:05:22 +0000 @@ -78,6 +78,9 @@ ``{plugin}_stop`` Requests a plugin to handle a stop event + ``{plugin}_edit`` + Requests a plugin edit a database item with the key as the payload + ``songusage_live`` Sends live song audit requests to the audit component @@ -93,10 +96,14 @@ ``preview_song`` Tells the song plugin the edit has finished and the song can be previewed Only available if the edit was triggered by the Preview button. - + ``slidecontroller_change`` Informs the slidecontroller that a slide change has occurred + + ``remote_edite_clear`` + Informs all components that remote edit has been aborted. + """ global log log = logging.getLogger(u'EventReceiver') @@ -154,4 +161,4 @@ """ Get the global ``eventreceiver`` instance. """ - return Receiver.eventreceiver \ No newline at end of file + return Receiver.eventreceiver === modified file 'openlp/core/lib/serviceitem.py' --- openlp/core/lib/serviceitem.py 2009-10-16 23:34:56 +0000 +++ openlp/core/lib/serviceitem.py 2009-10-29 14:05:22 +0000 @@ -70,6 +70,7 @@ self.theme = None self.service_item_path = None self.service_item_type = None + self.editEnabled = False self.service_frames = [] def addIcon(self, icon): === modified file 'openlp/core/ui/servicemanager.py' --- openlp/core/ui/servicemanager.py 2009-10-25 18:07:23 +0000 +++ openlp/core/ui/servicemanager.py 2009-10-29 14:05:22 +0000 @@ -38,6 +38,24 @@ QtGui.QTreeWidget.__init__(self,parent) self.parent = parent +# def mousePressEvent(self, event): +# if event.button() == QtCore.Qt.RightButton: +# item = self.itemAt(event.pos()) +# parentitem = item.parent() +# if parentitem is None: +# pos = item.data(0, QtCore.Qt.UserRole).toInt()[0] +# else: +# pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0] +# serviceItem = self.parent.serviceItems[pos - 1] +# if serviceItem[u'data'].editEnabled: +# self.parent.editAction.setVisible(True) +# else: +# self.parent.editAction.setVisible(False) +# event.accept() +# else: +# event.ignore() + + def keyPressEvent(self, event): if type(event) == QtGui.QKeyEvent: #here accept the event and do something @@ -111,6 +129,7 @@ self.serviceItems = [] self.serviceName = u'' self.isNew = True + self.remoteEditTriggered = False self.Layout = QtGui.QVBoxLayout(self) self.Layout.setSpacing(0) self.Layout.setMargin(0) @@ -157,6 +176,12 @@ # Add a context menu to the service manager list self.ServiceManagerList.setContextMenuPolicy( QtCore.Qt.ActionsContextMenu) + self.editAction = contextMenuAction( + self.ServiceManagerList, ':/system/system_live.png', + self.trUtf8(u'&Edit Item'), self.remoteEdit) + self.ServiceManagerList.addAction(self.editAction) + self.ServiceManagerList.addAction(contextMenuSeparator( + self.ServiceManagerList)) self.ServiceManagerList.addAction(contextMenuAction( self.ServiceManagerList, ':/system/system_preview.png', self.trUtf8(u'&Preview Verse'), self.makePreview)) @@ -205,6 +230,8 @@ QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'update_themes'), self.updateThemeList) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'remote_edit_clear'), self.onRemoteEditClear) # Last little bits of setting up self.config = PluginConfig(u'ServiceManager') self.servicePath = self.config.get_data_path() @@ -510,14 +537,19 @@ """ sitem, count = self.findServiceItem() item.render() - if sitem == -1: - self.serviceItems.append({u'data': item, - u'order': len(self.serviceItems) + 1, u'expanded':True}) - self.repaintServiceList(len(self.serviceItems) + 1, 0) - else: - self.serviceItems.insert(sitem + 1, {u'data': item, - u'order': len(self.serviceItems)+1, u'expanded':True}) + if self.remoteEditTriggered: + self.serviceItems[sitem][u'data'] = item + self.remoteEditTriggered = False self.repaintServiceList(sitem + 1, 0) + else: + if sitem == -1: + self.serviceItems.append({u'data': item, + u'order': len(self.serviceItems) + 1, u'expanded':True}) + self.repaintServiceList(len(self.serviceItems) + 1, 0) + else: + self.serviceItems.insert(sitem + 1, {u'data': item, + u'order': len(self.serviceItems)+1, u'expanded':True}) + self.repaintServiceList(sitem + 1, 0) self.parent.serviceChanged(False, self.serviceName) def makePreview(self): @@ -536,6 +568,19 @@ self.parent.LiveController.addServiceManagerItem( self.serviceItems[item][u'data'], count) + def remoteEdit(self): + """ + Posts a remote edit message to a plugin to allow item to be edited. + """ + item, count = self.findServiceItem() + if self.serviceItems[item][u'data'].editEnabled: + self.remoteEditTriggered = True + Receiver().send_message(u'%s_edit' % self.serviceItems[item][u'data'].name, + self.serviceItems[item][u'data'].editId ) + + def onRemoteEditClear(self): + self.remoteEditTriggered = False + def findServiceItem(self): """ Finds a ServiceItem in the list === modified file 'openlp/core/ui/thememanager.py' --- openlp/core/ui/thememanager.py 2009-10-29 13:19:31 +0000 +++ openlp/core/ui/thememanager.py 2009-10-29 14:05:22 +0000 @@ -266,7 +266,7 @@ try: xml = file_to_xml(xml_file) except: - xml = baseTheme() + xml = self.baseTheme() theme = ThemeXML() theme.parse(xml) self.cleanTheme(theme) === modified file 'openlp/plugins/custom/customplugin.py' --- openlp/plugins/custom/customplugin.py 2009-10-10 13:39:32 +0000 +++ openlp/plugins/custom/customplugin.py 2009-10-29 14:05:22 +0000 @@ -69,4 +69,4 @@ self.remove_toolbox_item() def about(self): - return u'<b>Custom Plugin</b> <br>This plugin allows slides to be displayed on the screen in the same way songs are. The difference between this plugin and songs is this plugin provides greater freedom.<br><br>This is a core plugin and cannot be made inactive</b>' + return u'<b>Custom Plugin</b> <br>This plugin allows slides to be displayed on the screen in the same way songs are. The difference between this plugin and songs is this plugin provides greater freedom.<br>' === modified file 'openlp/plugins/custom/forms/editcustomdialog.py' --- openlp/plugins/custom/forms/editcustomdialog.py 2009-10-24 16:40:36 +0000 +++ openlp/plugins/custom/forms/editcustomdialog.py 2009-10-29 14:05:22 +0000 @@ -54,7 +54,8 @@ self.UpButton.setIcon(icon1) self.UpButton.setObjectName(u'UpButton') self.verticalLayout.addWidget(self.UpButton) - spacerItem = QtGui.QSpacerItem(20, 128, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem = QtGui.QSpacerItem(20, 128, + QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.DownButton = QtGui.QPushButton(customEditDialog) icon2 = buildIcon(u':/services/service_down.png') @@ -94,7 +95,8 @@ self.ClearButton = QtGui.QPushButton(self.ButtonWidge) self.ClearButton.setObjectName(u'ClearButton') self.verticalLayout_2.addWidget(self.ClearButton) - spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem1 = QtGui.QSpacerItem(20, 40, + QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem1) self.EditLayout_3.addWidget(self.ButtonWidge) self.gridLayout.addWidget(self.EditWidget, 2, 0, 1, 1) @@ -117,11 +119,16 @@ self.horizontalLayout_2.addWidget(self.CreditEdit) self.gridLayout.addLayout(self.horizontalLayout_2, 4, 0, 1, 1) self.buttonBox = QtGui.QDialogButtonBox(customEditDialog) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) + self.buttonBox.setStandardButtons( + QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) self.buttonBox.setObjectName(u'buttonBox') self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 1) self.retranslateUi(customEditDialog) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'rejected()'), customEditDialog.closePressed) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'accepted()'), customEditDialog.accept) QtCore.QMetaObject.connectSlotsByName(customEditDialog) customEditDialog.setTabOrder(self.TitleEdit, self.VerseTextEdit) customEditDialog.setTabOrder(self.VerseTextEdit, self.AddButton) === modified file 'openlp/plugins/custom/forms/editcustomform.py' --- openlp/plugins/custom/forms/editcustomform.py 2009-10-24 16:40:36 +0000 +++ openlp/plugins/custom/forms/editcustomform.py 2009-10-29 14:05:22 +0000 @@ -40,10 +40,6 @@ #self.parent = parent self.setupUi(self) # Connecting signals and slots - QtCore.QObject.connect(self.buttonBox, - QtCore.SIGNAL(u'rejected()'), self.rejected) - QtCore.QObject.connect(self.buttonBox, - QtCore.SIGNAL(u'accepted()'), self.accept) QtCore.QObject.connect(self.AddButton, QtCore.SIGNAL(u'pressed()'), self.onAddButtonPressed) QtCore.QObject.connect(self.EditButton, @@ -113,6 +109,10 @@ else: self.ThemeComboBox.setCurrentIndex(0) + def closePressed(self): + Receiver().send_message(u'remote_edit_clear') + self.close() + def accept(self): valid, message = self._validate() if not valid: @@ -132,9 +132,7 @@ self.customSlide.credits = unicode(self.CreditEdit.displayText()) self.customSlide.theme_name = unicode(self.ThemeComboBox.currentText()) self.custommanager.save_slide(self.customSlide) - self.close() - - def rejected(self): + Receiver().send_message(u'load_custom_list') self.close() def onUpButtonPressed(self): === modified file 'openlp/plugins/custom/lib/mediaitem.py' --- openlp/plugins/custom/lib/mediaitem.py 2009-09-28 20:45:04 +0000 +++ openlp/plugins/custom/lib/mediaitem.py 2009-10-29 14:05:22 +0000 @@ -26,7 +26,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD +from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD, Receiver class CustomListView(BaseListWithDnD): def __init__(self, parent=None): @@ -53,6 +53,15 @@ self.servicePath = None MediaManagerItem.__init__(self, parent, icon, title) self.parent = parent + self.fromServiceManager = -1 + + def addEndHeaderBar(self): + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'%s_edit' % self.parent.name), self.onRemoteEdit) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'remote_edit_clear' ), self.onRemoteEditClear) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'load_custom_list'), self.initialise) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -68,12 +77,24 @@ custom_name.setData( QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id)) self.ListView.addItem(custom_name) + if CustomSlide.id == self.fromServiceManager: + self.onAddClick() def onNewClick(self): self.parent.edit_custom_form.loadCustom(0) self.parent.edit_custom_form.exec_() self.initialise() + def onRemoteEditClear(self): + self.fromServiceManager = -1 + + def onRemoteEdit(self, item_id): + valid = self.parent.custommanager.get_custom(item_id) + if valid is not None: + self.fromServiceManager = item_id + self.parent.edit_custom_form.loadCustom(item_id) + self.parent.edit_custom_form.exec_() + def onEditClick(self): item = self.ListView.currentItem() if item is not None: @@ -95,13 +116,19 @@ raw_footer = [] slide = None theme = None - item = self.ListView.currentItem() - if item is None: - return False - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + if self.fromServiceManager == -1: + item = self.ListView.currentItem() + if item is None: + return False + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + else: + item_id = self.fromServiceManager + self.fromServiceManager = -1 customSlide = self.parent.custommanager.get_custom(item_id) title = customSlide.title credit = customSlide.credits + service_item.editEnabled = True + service_item.editId = item_id theme = customSlide.theme_name if len(theme) is not 0 : service_item.theme = theme === modified file 'openlp/plugins/songs/forms/editsongdialog.py' --- openlp/plugins/songs/forms/editsongdialog.py 2009-10-25 18:07:23 +0000 +++ openlp/plugins/songs/forms/editsongdialog.py 2009-10-29 14:05:22 +0000 @@ -383,7 +383,7 @@ self.retranslateUi(EditSongDialog) QtCore.QObject.connect(self.ButtonBox, - QtCore.SIGNAL(u'rejected()'), EditSongDialog.close) + QtCore.SIGNAL(u'rejected()'), EditSongDialog.closePressed) QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), EditSongDialog.accept) QtCore.QMetaObject.connectSlotsByName(EditSongDialog) === modified file 'openlp/plugins/songs/forms/editsongform.py' --- openlp/plugins/songs/forms/editsongform.py 2009-10-27 07:20:01 +0000 +++ openlp/plugins/songs/forms/editsongform.py 2009-10-29 14:05:22 +0000 @@ -400,15 +400,18 @@ def onPreview(self, button): log.debug(u'onPreview') - if button.text() == self.trUtf8(u'Save & Preview') and self.saveSong(): + if button.text() == unicode(self.trUtf8(u'Save && Preview')) \ + and self.saveSong(): Receiver().send_message(u'preview_song') + def closePressed(self): + Receiver().send_message(u'remote_edit_clear') + self.close() + def accept(self): log.debug(u'accept') if self.saveSong(): - if self.title_change: - Receiver().send_message(u'load_song_list') - Receiver().send_message(u'preview_song') + Receiver().send_message(u'load_song_list') self.close() def saveSong(self): === modified file 'openlp/plugins/songs/lib/mediaitem.py' --- openlp/plugins/songs/lib/mediaitem.py 2009-10-25 08:09:41 +0000 +++ openlp/plugins/songs/lib/mediaitem.py 2009-10-29 14:05:22 +0000 @@ -55,7 +55,8 @@ self.edit_song_form = EditSongForm(self.parent.songmanager, self) self.song_maintenance_form = SongMaintenanceForm( self.parent.songmanager, self) - self.fromPreview = None + self.fromPreview = -1 + self.fromServiceManager = -1 def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -126,6 +127,10 @@ QtCore.SIGNAL(u'edit_song'), self.onEventEditSong) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'preview_song'), self.onPreviewClick) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'%s_edit' % self.parent.name), self.onRemoteEdit) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'remote_edit_clear' ), self.onRemoteEditClear) def configUpdated(self): self.searchAsYouType = str_to_bool( @@ -179,8 +184,11 @@ song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) self.ListView.addItem(song_name) if song.id == self.fromPreview: - self.fromPreview = 0 self.ListView.setCurrentItem(song_name) + self.onPreviewClick() + self.fromPreview = -1 + if song.id == self.fromServiceManager: + self.onAddClick() def displayResultsAuthor(self, searchresults): log.debug(u'display results Author') @@ -226,11 +234,21 @@ def onSongMaintenanceClick(self): self.song_maintenance_form.exec_() + def onRemoteEditClear(self): + self.fromServiceManager = -1 + + def onRemoteEdit(self, songid): + valid = self.parent.songmanager.get_song(songid) + if valid is not None: + self.fromServiceManager = songid + self.edit_song_form.loadSong(songid) + self.edit_song_form.exec_() + def onEditClick(self, preview=False): item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.fromPreview = 0 + self.fromPreview = -1 if preview: self.fromPreview = item_id self.edit_song_form.loadSong(item_id) @@ -253,12 +271,18 @@ author_list = u'' author_audit = [] ccl = u'' - item = self.ListView.currentItem() - if item is None: - return False - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + if self.fromServiceManager == -1: + item = self.ListView.currentItem() + if item is None: + return False + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + else: + item_id = self.fromServiceManager + self.fromServiceManager = -1 song = self.parent.songmanager.get_song(item_id) service_item.theme = song.theme_name + service_item.editEnabled = True + service_item.editId = item_id if song.lyrics.startswith(u'<?xml version='): songXML=SongXMLParser(song.lyrics) verseList = songXML.get_verses() === modified file 'openlp/plugins/songs/songsplugin.py' --- openlp/plugins/songs/songsplugin.py 2009-10-24 16:40:36 +0000 +++ openlp/plugins/songs/songsplugin.py 2009-10-29 14:05:22 +0000 @@ -180,4 +180,4 @@ self.opensong_export_form.show() def about(self): - return u'<b>Song Plugin</b> <br>This plugin allows Songs to be managed and displayed.<br><br>This is a core plugin and cannot be made inactive</b>' + return u'<b>Song Plugin</b> <br>This plugin allows Songs to be managed and displayed.<br>'
_______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : openlp-core@lists.launchpad.net Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp