From 9da5a3223f4f3d5d8d24fbec85ad637bd8476b68 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 21 Jul 2009 19:10:14 +0100 Subject: [PATCH] Fix song conversions Fix focus for Song dialog Preserve state when moving serviceitems --- cnvdb.py | 3 +- openlp/core/ui/maindisplay.py | 12 ++++- openlp/core/ui/servicemanager.py | 53 ++++++++++++++++++---- openlp/plugins/songs/forms/authorsform.py | 3 +- openlp/plugins/songs/forms/songbookform.py | 3 +- openlp/plugins/songs/forms/topicsform.py | 3 +- openlp/plugins/songs/lib/mediaitem.py | 2 +- 7 files changed, 63 insertions(+), 16 deletions(-) diff --git a/cnvdb.py b/cnvdb.py index 4463ec887..a76c942a9 100755 --- a/cnvdb.py +++ b/cnvdb.py @@ -20,6 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA """ import codecs import sys +import chardet def convert_file(inname, outname): """ @@ -31,7 +32,7 @@ def convert_file(inname, outname): ``outname`` The output file name. """ - infile = codecs.open(inname, 'r', encoding='iso-8859-1') + infile = codecs.open(inname, 'r', encoding='CP1252') writefile = codecs.open(outname, 'w', encoding='utf-8') for line in infile: #replace the quotes with quotes diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 183917549..a38891633 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -62,12 +62,22 @@ class MainDisplay(QtGui.QWidget): self.showFullScreen() else: self.showMinimized() + #Build a custom splash screen + self.InitialFrame = QtGui.QImage(screen[u'size'].width(), + screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) + splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') + painter_image = QtGui.QPainter() + painter_image.begin(self.InitialFrame) + painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white) + painter_image.drawImage((screen[u'size'].width() - splash_image.width()) / 2, + (screen[u'size'].height() - splash_image.height()) / 2 , splash_image) + self.frameView(self.InitialFrame) + #Build a Black screen painter = QtGui.QPainter() self.blankFrame = QtGui.QImage(screen[u'size'].width(), screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) painter.begin(self.blankFrame) painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black) - self.frameView(self.blankFrame) def frameView(self, frame): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 5229715c0..732768505 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -41,10 +41,39 @@ class ServiceManagerList(QtGui.QTreeWidget): 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.onServiceUp() + event.accept() + elif event.key() == QtCore.Qt.Key_Down: + self.parent.onServiceDown() + event.accept() event.ignore() else: event.ignore() +class Iter(QtGui.QTreeWidgetItemIterator): + def __init__(self, *args): + QTreeWidgetItemIterator.__init__(self, *args) + def next(self): + self.__iadd__(1) + value = self.value() + if value: + return self.value() + else: + raise StopIteration + class ServiceManager(QtGui.QWidget): """ Manages the orders of service. Currently this involves taking @@ -159,7 +188,7 @@ class ServiceManager(QtGui.QWidget): temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(0, temp) - self.repaintServiceList() + self.repaintServiceList(0, count) self.parent.OosChanged(False, self.serviceName) def onServiceUp(self): @@ -172,7 +201,7 @@ class ServiceManager(QtGui.QWidget): temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item - 1, temp) - self.repaintServiceList() + self.repaintServiceList(item - 1 , count) self.parent.OosChanged(False, self.serviceName) def onServiceDown(self): @@ -185,7 +214,7 @@ class ServiceManager(QtGui.QWidget): temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item + 1, temp) - self.repaintServiceList() + self.repaintServiceList(item + 1 , count) self.parent.OosChanged(False, self.serviceName) def onServiceEnd(self): @@ -197,7 +226,7 @@ class ServiceManager(QtGui.QWidget): temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(len(self.serviceItems), temp) - self.repaintServiceList() + self.repaintServiceList(len(self.serviceItems) - 1, count) self.parent.OosChanged(False, self.serviceName) def onNewService(self): @@ -216,15 +245,19 @@ class ServiceManager(QtGui.QWidget): item, count = self.findServiceItem() if item is not -1: self.serviceItems.remove(self.serviceItems[item]) - self.repaintServiceList() + self.repaintServiceList(0, 0) self.parent.OosChanged(False, self.serviceName) - def repaintServiceList(self): + def repaintServiceList(self, serviceItem, serviceItemCount): """ Clear the existing service list and prepaint all the items Used when moving items as the move takes place in supporting array, and when regenerating all the items due to theme changes """ + aa = Iter(self.ServiceManagerList) + print aa + for a in aa: + print a #Correct order of idems in array count = 1 for item in self.serviceItems: @@ -232,20 +265,20 @@ class ServiceManager(QtGui.QWidget): count += 1 #Repaint the screen self.ServiceManagerList.clear() - for item in self.serviceItems: + for itemcount, item in enumerate(self.serviceItems): serviceitem = item[u'data'] treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) treewidgetitem.setText(0,serviceitem.title) treewidgetitem.setIcon(0,serviceitem.iconic_representation) treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) treewidgetitem.setExpanded(item[u'expanded']) - count = 0 - for frame in serviceitem.frames: + for count , frame in enumerate(serviceitem.frames): treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) text = frame[u'title'] treewidgetitem1.setText(0,text[:40]) treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count)) - count = count + 1 + if serviceItem == itemcount and serviceItemCount == count: + self.ServiceManagerList.setCurrentItem(treewidgetitem1) def onSaveService(self): """ diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 256ac2002..f5191f094 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -63,6 +63,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): else: self.AuthorListWidget.setCurrentRow(self.currentRow) self._validate_form() + self.onAuthorListWidgetItemClicked() def onDeleteButtonClick(self): """ @@ -100,7 +101,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): self._validate_form() self.DisplayEdit.setFocus() - def onAuthorListWidgetItemClicked(self, index): + def onAuthorListWidgetItemClicked(self): """ An Author has been selected display it If the author is attached to a Song prevent delete diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index cc203cdb4..147c588fb 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -62,6 +62,7 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): self.BookSongListWidget.setCurrentRow(self.BookSongListWidget.count() - 1) else: self.BookSongListWidget.setCurrentRow(self.currentRow) + self.onBooksListViewItemClicked() def onDeleteButtonClick(self): """ @@ -98,7 +99,7 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): self._validate_form() self.NameEdit.setFocus() - def onBooksListViewItemClicked(self, index): + def onBooksListViewItemClicked(self): """ An Book has been selected display it If the Book is attached to a Song prevent delete diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index 825d1a66b..759e72ae3 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -63,6 +63,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): else: self.TopicsListWidget.setCurrentRow(self.currentRow) self._validate_form() + self.onTopicsListWidgetItemClicked() def onDeleteButtonClick(self): """ @@ -97,7 +98,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): self._validate_form() self.TopicNameEdit.setFocus() - def onTopicsListWidgetItemClicked(self, index): + def onTopicsListWidgetItemClicked(self): """ An Topic has been selected display it If the Topic is attached to a Song prevent delete diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index b49bcac95..0a3b01c5e 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -289,7 +289,7 @@ class SongMediaItem(MediaManagerItem): else: verses = song.lyrics.split(u'\n\n') for slide in verses: - service_item.add_from_text(slide[:30], slide) + service_item.add_from_text(slide[:30], unicode(slide)) service_item.title = song.title for author in song.authors: if len(author_list) > 1: