openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #00707
[Merge] lp:~trb143/openlp/fixes into lp:openlp
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>'
Follow ups