Songs now have remote edit working

This commit is contained in:
Tim Bentley 2009-10-29 09:18:26 +00:00
parent b447e382ad
commit 0ffbc050de
8 changed files with 98 additions and 16 deletions

View File

@ -78,6 +78,9 @@ class EventReceiver(QtCore.QObject):
``{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 @@ class EventReceiver(QtCore.QObject):
``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 @@ class Receiver():
"""
Get the global ``eventreceiver`` instance.
"""
return Receiver.eventreceiver
return Receiver.eventreceiver

View File

@ -70,6 +70,7 @@ class ServiceItem(object):
self.theme = None
self.service_item_path = None
self.service_item_type = None
self.editEnabled = False
self.service_frames = []
def addIcon(self, icon):

View File

@ -38,6 +38,26 @@ class ServiceManagerList(QtGui.QTreeWidget):
QtGui.QTreeWidget.__init__(self,parent)
self.parent = parent
# def mousePressEvent(self, event):
# if type(event) == QtGui.QMouseEvent:
# 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.ignore()
# else:
# event.ignore()
# else:
# event.ignore()
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
#here accept the event and do something
@ -111,6 +131,7 @@ class ServiceManager(QtGui.QWidget):
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 +178,12 @@ class ServiceManager(QtGui.QWidget):
# 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 +232,8 @@ class ServiceManager(QtGui.QWidget):
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 +539,19 @@ class ServiceManager(QtGui.QWidget):
"""
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 +570,19 @@ class ServiceManager(QtGui.QWidget):
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

View File

@ -267,7 +267,7 @@ class ThemeManager(QtGui.QWidget):
xml = file_to_xml(xml_file)
except:
newtheme = ThemeXML()
newtheme.new_document(self.trUtf8(u'New Theme'))
newtheme.new_document(unicode(self.trUtf8(u'New Theme')))
newtheme.add_background_solid(unicode(u'#000000'))
newtheme.add_font(unicode(QtGui.QFont().family()),
unicode(u'#FFFFFF'), unicode(30), u'False')

View File

@ -383,7 +383,7 @@ class Ui_EditSongDialog(object):
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)

View File

@ -403,6 +403,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if button.text() == 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():

View File

@ -56,6 +56,7 @@ class SongMediaItem(MediaManagerItem):
self.song_maintenance_form = SongMaintenanceForm(
self.parent.songmanager, self)
self.fromPreview = None
self.fromServiceManager = -1
def requiredIcons(self):
MediaManagerItem.requiredIcons(self)
@ -126,6 +127,10 @@ class SongMediaItem(MediaManagerItem):
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(
@ -181,6 +186,8 @@ class SongMediaItem(MediaManagerItem):
if song.id == self.fromPreview:
self.fromPreview = 0
self.ListView.setCurrentItem(song_name)
if song.id == self.fromServiceManager:
self.onAddClick()
def displayResultsAuthor(self, searchresults):
log.debug(u'display results Author')
@ -226,6 +233,16 @@ class SongMediaItem(MediaManagerItem):
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:
@ -253,12 +270,18 @@ class SongMediaItem(MediaManagerItem):
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()

View File

@ -180,4 +180,4 @@ class SongsPlugin(Plugin):
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>'