From 0dfe60ef9ff218f7fa727905423826b93d166514 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 7 Apr 2009 20:03:36 +0100 Subject: [PATCH 1/2] Fix Problems from last merge review Get Custom Plugin theme combo working following event post from ThemeManager --- openlp/core/__init__.py | 5 +-- openlp/core/ui/thememanager.py | 14 +++++-- openlp/plugins/custom/customplugin.py | 11 ++++-- openlp/plugins/custom/forms/editcustomform.py | 37 +++++++++++++------ 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index f795b6040..b19fe8fdf 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -29,8 +29,5 @@ def translate(context, text): return QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8) def fileToXML(xmlfile): - file=open(xmlfile) - xml =''.join(file.readlines()) # read the file and change list to a string - file.close() - return xml + return open(xmlfile).read() diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 46638e819..122e785c1 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -52,6 +52,7 @@ class ThemeData(QAbstractItemModel): """ global log log=logging.getLogger(u'ThemeData') + def __init__(self): QAbstractItemModel.__init__(self) self.items=[] @@ -132,9 +133,13 @@ class ThemeData(QAbstractItemModel): log.info(u'Get Item:%d -> %s' %(row, str(self.items))) return self.items[row] + def getList(self): + filelist = [item[3] for item in self.items]; + return filelist + class ThemeManager(QWidget): """ - Manages the orders of Theme. C + Manages the orders of Theme. """ global log log=logging.getLogger(u'ThemeManager') @@ -178,6 +183,7 @@ class ThemeManager(QWidget): self.eventManager = eventManager def onAddTheme(self): + self.amendThemeForm.loadTheme(None) self.amendThemeForm.exec_() def onEditTheme(self): @@ -213,7 +219,7 @@ class ThemeManager(QWidget): self.eventManager.post_event(Event(EventType.ThemeListChanged)) def getThemes(self): - return self.themelist + return self.Theme_data.getList() def checkThemesExists(self, dir): log.debug(u'check themes') @@ -232,7 +238,7 @@ class ThemeManager(QWidget): fullpath = os.path.join(dir, file) names = file.split(u'/') xml_data = zip.read(file) - if file.endswith(u'.xml'): + if os.path.splitext (file) [1].lower () in [u'.xml']: if self.checkVersion1(xml_data): filexml = self.migrateVersion122(filename, fullpath, xml_data) outfile = open(fullpath, 'w') @@ -240,7 +246,7 @@ class ThemeManager(QWidget): outfile.close() self.generateImage(dir,names[0], filexml) else: - if file.endswith(u'.bmp'): + if os.path.splitext (file) [1].lower () in [u'.bmp']: if fullpath is not os.path.join(dir, file): outfile = open(fullpath, 'w') outfile.write(zip.read(file)) diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index d4ed4f36e..f12b51cec 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -23,15 +23,17 @@ from PyQt4 import QtCore, QtGui from openlp.core.resources import * from openlp.core.lib import Plugin, Event +from openlp.core.lib import EventType from forms import EditCustomForm from openlp.plugins.custom.lib import CustomManager, CustomTab, CustomMediaItem, CustomServiceItem + class CustomPlugin(Plugin): global log log=logging.getLogger(u'CustomPlugin') log.info(u'Custom Plugin loaded') - + def __init__(self, plugin_helpers): # Call the parent constructor Plugin.__init__(self, u'Custom', u'1.9.0', plugin_helpers) @@ -49,9 +51,12 @@ class CustomPlugin(Plugin): # Create the CustomManagerItem object self.media_item = CustomMediaItem(self, self.icon, u'Custom Slides') return self.media_item - + def handle_event(self, event): """ Handle the event contained in the event object. """ - log.debug(u'Handle event called with event %s' %event.get_type()) + log.debug(u'Handle event called with event %s' %event.event_type) + if event.event_type == EventType.ThemeListChanged: + log.debug(u'New Theme request received') + self.edit_custom_form.loadThemes(self.theme_manager.getThemes()) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index b01ce9bb9..ef934ac7d 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -32,7 +32,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): Constructor """ QtGui.QDialog.__init__(self, parent) - #self.parent = parent + #self.parent = parent self.setupUi(self) # Connecting signals and slots QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), self.rejected) @@ -43,18 +43,18 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): QtCore.QObject.connect(self.DeleteButton, QtCore.SIGNAL("pressed()"), self.onDeleteButtonPressed) QtCore.QObject.connect(self.ClearButton, QtCore.SIGNAL("pressed()"), self.onClearButtonPressed) QtCore.QObject.connect(self.UpButton, QtCore.SIGNAL("pressed()"), self.onUpButtonPressed) - QtCore.QObject.connect(self.DownButton, QtCore.SIGNAL("pressed()"), self.onDownButtonPressed) - QtCore.QObject.connect(self.TitleEdit, QtCore.SIGNAL("lostFocus()"), self.validate) + QtCore.QObject.connect(self.DownButton, QtCore.SIGNAL("pressed()"), self.onDownButtonPressed) + QtCore.QObject.connect(self.TitleEdit, QtCore.SIGNAL("lostFocus()"), self.validate) - QtCore.QObject.connect(self.VerseListView, + QtCore.QObject.connect(self.VerseListView, QtCore.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self.onVerseListViewSelected) - QtCore.QObject.connect(self.VerseListView, + QtCore.QObject.connect(self.VerseListView, QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.onVerseListViewPressed) # Create other objects and forms self.custommanager = custommanager self.initialise() - self.VerseListView.setAlternatingRowColors(True) - + self.VerseListView.setAlternatingRowColors(True) + def initialise(self): self.valid = True self.DeleteButton.setEnabled(False) @@ -64,10 +64,15 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): self.CreditEdit.setText('') self.VerseTextEdit.clear() self.VerseListView.clear() - #make sure we have a new item + #make sure we have a new item self.customSlide = CustomSlide() self.ThemecomboBox.addItem(u'') - #self.theme_manager.getThemes() + + def loadThemes(self, themelist): + self.ThemecomboBox.clear() + self.ThemecomboBox.addItem(u'') + for themename in themelist: + self.ThemecomboBox.addItem(themename) def loadCustom(self, id): self.customSlide = CustomSlide() @@ -76,12 +81,19 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): self.customSlide = self.custommanager.get_custom(id) self.TitleEdit.setText(self.customSlide.title) self.CreditEdit.setText(self.customSlide.title) - + songXML=SongXMLParser(self.customSlide.text) verseList = songXML.get_verses() for verse in verseList: self.VerseListView.addItem(verse[1]) + theme = str(self.customSlide.theme_name) + id = self.ThemecomboBox.findText(theme, QtCore.Qt.MatchExactly) + if id == -1: + id = 0 # Not Found + self.ThemecomboBox.setCurrentIndex(id) self.validate() + else: + self.ThemecomboBox.setCurrentIndex(0) def accept(self): self.validate() @@ -96,6 +108,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): self.customSlide.title = unicode(self.TitleEdit.displayText()) self.customSlide.text = unicode(sxml.extract_xml()) self.customSlide.credits = unicode(self.CreditEdit.displayText()) + self.customSlide.theme_name = unicode(self.ThemecomboBox.currentText()) self.custommanager.save_slide(self.customSlide) self.close() @@ -114,7 +127,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): if selectedRow != self.VerseListView.count() - 1: # zero base arrays qw = self.VerseListView.takeItem(selectedRow) self.VerseListView.insertItem(selectedRow + 1, qw) - self.VerseListView.setCurrentRow(selectedRow + 1) + self.VerseListView.setCurrentRow(selectedRow + 1) def onClearButtonPressed(self): self.VerseTextEdit.clear() @@ -122,7 +135,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): def onVerseListViewPressed(self, item): self.DeleteButton.setEnabled(True) self.EditButton.setEnabled(True) - + def onVerseListViewSelected(self, item): self.VerseTextEdit.setPlainText(item.text()) self.DeleteButton.setEnabled(False) From 1fb2b366b2299ab7d2e2fbbe51f3c9fb0278adce Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 7 Apr 2009 20:45:21 +0100 Subject: [PATCH 2/2] Fix ThemeXML class as per review comments Change all references to it --- openlp/core/lib/__init__.py | 5 ++--- openlp/core/lib/themexmlhandler.py | 5 ++--- openlp/core/ui/thememanager.py | 8 ++++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 0195a6cc9..721437d6e 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -31,9 +31,8 @@ from serviceitem import ServiceItem from toolbar import OpenLPToolbar from songxmlhandler import SongXMLBuilder from songxmlhandler import SongXMLParser -from themexmlhandler import ThemeXMLBuilder -from themexmlhandler import ThemeXMLParser +from themexmlhandler import ThemeXML __all__ = ['PluginConfig', 'Plugin', 'SettingsTab', 'MediaManagerItem', 'Event', 'EventType' 'XmlRootClass', 'ServiceItem', 'Receiver', 'OpenLPToolbar', 'SongXMLBuilder', - 'SongXMLParser', 'EventManager', 'ThemeXMLBuilder', 'ThemeXMLParser'] + 'SongXMLParser', 'EventManager', 'ThemeXML'] diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index f57c77718..ea7ffb2df 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -24,7 +24,7 @@ For XML Schema see wiki.openlp.org from xml.dom.minidom import Document from xml.etree.ElementTree import ElementTree, XML, dump -class ThemeXMLBuilder(): +class ThemeXML(): def __init__(self): # Create the minidom document self.theme_xml = Document() @@ -154,8 +154,7 @@ class ThemeXMLBuilder(): # Print our newly created XML return self.theme_xml.toxml() -class ThemeXMLParser(): - def __init__(self, xml): + def parse(self, xml): theme_xml = ElementTree(element=XML(xml)) iter=theme_xml.getiterator() master = u'' diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 122e785c1..ee7ffb176 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -37,8 +37,7 @@ from openlp.core.lib import Event from openlp.core.lib import EventType from openlp.core.lib import EventManager from openlp.core.lib import OpenLPToolbar -from openlp.core.lib import ThemeXMLBuilder -from openlp.core.lib import ThemeXMLParser +from openlp.core.lib import ThemeXML from openlp.core.utils import ConfigHelper @@ -265,7 +264,7 @@ class ThemeManager(QWidget): log.debug(u'migrateVersion122 %s %s', filename , fullpath) t=Theme(xml_data) - newtheme = ThemeXMLBuilder() + newtheme = ThemeXML() newtheme.new_document(t.Name) if t.BackgroundType == 0: newtheme.add_background_solid(str(t.BackgroundParameter1.name())) @@ -291,7 +290,8 @@ class ThemeManager(QWidget): def generateImage(self, dir, name, theme_xml): log.debug(u'generateImage %s %s ', dir, theme_xml) - theme = ThemeXMLParser(theme_xml) + theme = ThemeXML() + theme.parse(theme_xml) #print theme size=QtCore.QSize(800,600) frame=TstFrame(size)