From 69a846c7c90e0f446dc90de44042fc57cea81b25 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 14 Jun 2009 14:50:56 +0100 Subject: [PATCH 1/2] Update list handling for Plugin and Edit Screen Add error handling displays to show whats in error --- openlp/plugins/songs/forms/authorsdialog.py | 26 +++-- openlp/plugins/songs/forms/authorsform.py | 1 - openlp/plugins/songs/forms/editsongdialog.py | 18 ++++ openlp/plugins/songs/forms/editsongform.py | 42 +++++--- openlp/plugins/songs/lib/manager.py | 18 ---- openlp/plugins/songs/lib/mediaitem.py | 102 +++++++++---------- 6 files changed, 109 insertions(+), 98 deletions(-) diff --git a/openlp/plugins/songs/forms/authorsdialog.py b/openlp/plugins/songs/forms/authorsdialog.py index 0fd81a353..d2e20e123 100644 --- a/openlp/plugins/songs/forms/authorsdialog.py +++ b/openlp/plugins/songs/forms/authorsdialog.py @@ -1,12 +1,22 @@ # -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, -# Form implementation generated from reading ui file 'authorsdialog.ui' -# -# Created: Sat Jan 3 11:48:36 2009 -# by: PyQt4 UI code generator 4.4.3 -# -# WARNING! All changes made in this file will be lost! +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +""" from PyQt4 import QtCore, QtGui from openlp.plugins.songs.lib import TextListData @@ -18,13 +28,9 @@ class Ui_AuthorsDialog(object): self.DialogLayout.setSpacing(8) self.DialogLayout.setMargin(8) self.DialogLayout.setObjectName("DialogLayout") - self.AuthorListView = QtGui.QListView() self.AuthorListView.setAlternatingRowColors(True) - self.AuthorListData = TextListData() - self.AuthorListView.setModel(self.AuthorListData) self.DialogLayout.addWidget(self.AuthorListView) - self.AuthorDetails = QtGui.QGroupBox(AuthorsDialog) self.AuthorDetails.setMinimumSize(QtCore.QSize(0, 0)) self.AuthorDetails.setObjectName("AuthorDetails") diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 495396c39..09d6dc216 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -19,7 +19,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA from PyQt4 import QtGui, QtCore from openlp.core.lib import translate from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog -from openlp.plugins.songs.lib import TextListData class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): """ diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 5178fa937..3e1ec3717 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -1,4 +1,22 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +""" from openlp.core.lib import translate from PyQt4 import QtCore, QtGui diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 202c6ec31..2d1bd3994 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -99,20 +99,26 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): authors = self.songmanager.get_authors() self.AuthorsSelectionComboItem.clear() for author in authors: + row = self.AuthorsSelectionComboItem.count() self.AuthorsSelectionComboItem.addItem(author.display_name) + self.AuthorsSelectionComboItem.setItemData(row, QtCore.QVariant(author.id)) def loadTopics(self): topics = self.songmanager.get_topics() self.SongTopicCombo.clear() for topic in topics: + row = self.SongTopicCombo.count() self.SongTopicCombo.addItem(topic.name) + self.SongTopicCombo.setItemData(row, QtCore.QVariant(topic.id)) def loadBooks(self): books = self.songmanager.get_books() self.SongbookCombo.clear() self.SongbookCombo.addItem(u' ') for book in books: + row = self.SongbookCombo.count() self.SongbookCombo.addItem(book.name) + self.SongbookCombo.setItemData(row, QtCore.QVariant(book.id)) def loadThemes(self, theme_list): self.ThemeSelectionComboItem.clear() @@ -180,8 +186,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.title_change = False def onAuthorAddtoSongItemClicked(self): - author_name = unicode(self.AuthorsSelectionComboItem.currentText()) - author = self.songmanager.get_author_by_name(author_name) + item = int(self.AuthorsSelectionComboItem.currentIndex()) + item_id = (self.AuthorsSelectionComboItem.itemData(item)).toInt()[0] + author = self.songmanager.get_author(item_id) self.song.authors.append(author) author_item = QtGui.QListWidgetItem(unicode(author.display_name)) author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id)) @@ -201,8 +208,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.AuthorsListView.takeItem(row) def onTopicAddtoSongItemClicked(self): - topic_name = unicode(self.SongTopicCombo.currentText()) - topic = self.songmanager.get_topic_by_name(topic_name) + item = int(self.SongTopicCombo.currentIndex()) + item_id = (self.SongTopicCombo.itemData(item)).toInt()[0] + topic = self.songmanager.get_topic(item_id) self.song.topics.append(topic) topic_item = QtGui.QListWidgetItem(unicode(topic.name)) topic_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) @@ -248,9 +256,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if item == 0: self.song.song_book_id = 0 else: - book_name = unicode(self.SongbookCombo.itemText(item)) - book = self.songmanager.get_book_by_name(book_name) - self.song.song_book_id = book.id + item = int(self.SongbookCombo.currentIndex()) + self.song.song_book_id = (self.SongbookCombo.itemData(item)).toInt()[0] def onThemeComboChanged(self, item): if item == 0: @@ -293,22 +300,25 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): valid = True if len(self.TitleEditItem.displayText()) == 0: valid = False + self.TitleEditItem.setStyleSheet(u'background-color: red; color: white') + else: + self.TitleEditItem.setStyleSheet(u'') if len(self.CopyrightEditItem.displayText()) == 0: valid = False + self.CopyrightEditItem.setStyleSheet(u'background-color: red; color: white') + else: + self.CopyrightEditItem.setStyleSheet(u'') if self.VerseListWidget.count() == 0: valid = False + self.VerseListWidget.setStyleSheet(u'background-color: red; color: white') + else: + self.VerseListWidget.setStyleSheet(u'') if self.AuthorsListView.count() == 0: valid = False - return valid - - def _color_widget(self, slot, invalid): - r = Qt.QPalette(slot.palette()) - if invalid == True: - r.setColor(Qt.QPalette.Base, Qt.QColor(u'darkRed')) + self.AuthorsListView.setStyleSheet(u'background-color: red; color: white') else: - r.setColor(Qt.QPalette.Base, Qt.QColor(u'white')) - slot.setPalette(r) - slot.setAutoFillBackground(True) + self.AuthorsListView.setStyleSheet(u'') + return valid def on_TitleEditItem_lostFocus(self): self.song.title = self.TitleEditItem.text() diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index 5a75ac506..c21721fd1 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -127,12 +127,6 @@ class SongManager(): """ return self.session.query(Author).get(id) - def get_author_by_name(self, name): - """ - Details of the Author - """ - return self.session.query(Author).filter_by(display_name = name).first() - def save_author(self, author): """ Save the Author and refresh the cache @@ -172,12 +166,6 @@ class SongManager(): """ return self.session.query(Topic).get(id) - def get_topic_by_name(self, name): - """ - Details of the Topic - """ - return self.session.query(Topic).filter_by(name = name).first() - def save_topic(self, topic): """ Save the Topic @@ -217,12 +205,6 @@ class SongManager(): """ return self.session.query(Book).get(id) - def get_book_by_name(self, name): - """ - Details of the Books - """ - return self.session.query(Book).filter_by(name = name).first() - def save_book(self, book): """ Save the Book diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 32cbce9b1..7a7692d23 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -23,12 +23,11 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, translate, ServiceItem, SongXMLParser from openlp.plugins.songs.forms import EditSongForm -from openlp.plugins.songs.lib import TextListData -class SongList(QtGui.QListView): +class SongList(QtGui.QListWidget): def __init__(self,parent=None,name=None): - QtGui.QListView.__init__(self,parent) + QtGui.QListWidget.__init__(self,parent) def mouseMoveEvent(self, event): """ @@ -119,14 +118,12 @@ class SongMediaItem(MediaManagerItem): self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) # Add the song widget to the page layout self.PageLayout.addWidget(self.SongWidget) - self.SongListView = SongList() - self.SongListView.setAlternatingRowColors(True) - self.SongListData = TextListData() - self.SongListView.setModel(self.SongListData) - self.SongListView.setDragEnabled(True) - self.SongListView.setObjectName(u'SongListView') - self.PageLayout.addWidget(self.SongListView) - self.SongListView.setDragEnabled(True) + self.SongListWidget = SongList() + self.SongListWidget.setAlternatingRowColors(True) + self.SongListWidget.setDragEnabled(True) + self.SongListWidget.setObjectName(u'SongListWidget') + self.PageLayout.addWidget(self.SongListWidget) + self.SongListWidget.setDragEnabled(True) # Signals and slots QtCore.QObject.connect(self.SearchTextButton, QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) @@ -134,21 +131,21 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick) QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) - QtCore.QObject.connect(self.SongListView, + QtCore.QObject.connect(self.SongListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) #define and add the context menu - self.SongListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - self.SongListView.addAction(self.contextMenuAction(self.SongListView, + self.SongListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'), self.onSongEditClick)) - self.SongListView.addAction(self.contextMenuSeparator(self.SongListView)) - self.SongListView.addAction(self.contextMenuAction(self.SongListView, + self.SongListWidget.addAction(self.contextMenuSeparator(self.SongListWidget)) + self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), self.onSongPreviewClick)) - self.SongListView.addAction(self.contextMenuAction(self.SongListView, + self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), self.onSongLiveClick)) - self.SongListView.addAction(self.contextMenuAction(self.SongListView, + self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), self.onSongAddClick)) @@ -165,7 +162,7 @@ class SongMediaItem(MediaManagerItem): def displayResults(self, searchresults): log.debug(u'display results') - self.SongListData.resetStore() + self.SongListWidget.clear() #log.debug(u'Records returned from search %s", len(searchresults)) for song in searchresults: author_list = u'' @@ -174,7 +171,9 @@ class SongMediaItem(MediaManagerItem): author_list = author_list + u', ' author_list = author_list + author.display_name song_detail = unicode(u'%s (%s)' % (unicode(song.title), unicode(author_list))) - self.SongListData.addRow(song.id,song_detail) + song_name = QtGui.QListWidgetItem(song_detail) + song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) + self.SongListWidget.addItem(song_name) def onClearTextButtonClick(self): """ @@ -209,18 +208,16 @@ class SongMediaItem(MediaManagerItem): self.edit_song_form.exec_() def onSongEditClick(self): - indexes = self.SongListView.selectedIndexes() - for index in indexes: - id = self.SongListData.getId(index) - self.edit_song_form.loadSong(id) - self.edit_song_form.exec_() + item = self.SongListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.edit_song_form.loadSong(item_id) + self.edit_song_form.exec_() def onSongDeleteClick(self): - indexes = self.SongListView.selectedIndexes() - for index in indexes: - id = self.SongListData.getId(index) - self.parent.songmanager.delete_song(id) - self.SongListData.deleteRow(index) + item = self.SongListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.parent.songmanager.delete_song(id) + self.SongListWidget.removeItem(item) def onSongPreviewClick(self): service_item = ServiceItem(self.parent) @@ -233,29 +230,28 @@ class SongMediaItem(MediaManagerItem): raw_footer = [] author_list = u'' ccl = u'' - indexes = self.SongListView.selectedIndexes() - for index in indexes: - id = self.SongListData.getId(index) - song = self.parent.songmanager.get_song(id) - service_item.theme = song.theme_name - if song.lyrics.startswith(u' 1: - author_list = author_list + u', ' - author_list = author_list + unicode(author.display_name) - if song.ccli_number == None or len(song.ccli_number) == 0: - ccl = self.parent.settings.GeneralTab.CCLNumber - else: - ccl = unicode(song.ccli_number) + item = self.SongListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + song = self.parent.songmanager.get_song(item_id) + service_item.theme = song.theme_name + if song.lyrics.startswith(u' 1: + author_list = author_list + u', ' + author_list = author_list + unicode(author.display_name) + if song.ccli_number == None or len(song.ccli_number) == 0: + ccl = self.parent.settings.GeneralTab.CCLNumber + else: + ccl = unicode(song.ccli_number) raw_footer.append(song.title) raw_footer.append(author_list) raw_footer.append(song.copyright ) From 50d41d562ed3404438eab7b1c81d6ac71b1a29fd Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 14 Jun 2009 16:12:40 +0100 Subject: [PATCH 2/2] Complete Song Plugin Tidy Up All lists now use same MVC mechanisms Code in the same style. --- openlp/plugins/songs/forms/authorsdialog.py | 80 +++++++-------- openlp/plugins/songs/forms/authorsform.py | 34 +++---- openlp/plugins/songs/forms/songbookdialog.py | 101 ++++++++++--------- openlp/plugins/songs/forms/songbookform.py | 34 +++---- openlp/plugins/songs/forms/topicsdialog.py | 84 ++++++++------- openlp/plugins/songs/forms/topicsform.py | 34 +++---- openlp/plugins/songs/lib/__init__.py | 1 - openlp/plugins/songs/lib/textlistdata.py | 81 --------------- 8 files changed, 184 insertions(+), 265 deletions(-) delete mode 100644 openlp/plugins/songs/lib/textlistdata.py diff --git a/openlp/plugins/songs/forms/authorsdialog.py b/openlp/plugins/songs/forms/authorsdialog.py index d2e20e123..44fe4c478 100644 --- a/openlp/plugins/songs/forms/authorsdialog.py +++ b/openlp/plugins/songs/forms/authorsdialog.py @@ -18,104 +18,104 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ from PyQt4 import QtCore, QtGui -from openlp.plugins.songs.lib import TextListData +from openlp.core.lib import translate class Ui_AuthorsDialog(object): def setupUi(self, AuthorsDialog): - AuthorsDialog.setObjectName("AuthorsDialog") + AuthorsDialog.setObjectName(u'AuthorsDialog') AuthorsDialog.resize(410, 505) self.DialogLayout = QtGui.QVBoxLayout(AuthorsDialog) self.DialogLayout.setSpacing(8) self.DialogLayout.setMargin(8) - self.DialogLayout.setObjectName("DialogLayout") - self.AuthorListView = QtGui.QListView() - self.AuthorListView.setAlternatingRowColors(True) - self.DialogLayout.addWidget(self.AuthorListView) + self.DialogLayout.setObjectName(u'DialogLayout') + self.AuthorListWidget = QtGui.QListWidget() + self.AuthorListWidget.setAlternatingRowColors(True) + self.DialogLayout.addWidget(self.AuthorListWidget) self.AuthorDetails = QtGui.QGroupBox(AuthorsDialog) self.AuthorDetails.setMinimumSize(QtCore.QSize(0, 0)) - self.AuthorDetails.setObjectName("AuthorDetails") + self.AuthorDetails.setObjectName(u'AuthorDetails') self.AuthorLayout = QtGui.QVBoxLayout(self.AuthorDetails) self.AuthorLayout.setSpacing(8) self.AuthorLayout.setMargin(8) - self.AuthorLayout.setObjectName("AuthorLayout") + self.AuthorLayout.setObjectName(u'AuthorLayout') self.DetailsWidget = QtGui.QWidget(self.AuthorDetails) - self.DetailsWidget.setObjectName("DetailsWidget") + self.DetailsWidget.setObjectName(u'DetailsWidget') self.DetailsLayout = QtGui.QFormLayout(self.DetailsWidget) self.DetailsLayout.setMargin(0) self.DetailsLayout.setSpacing(8) - self.DetailsLayout.setObjectName("DetailsLayout") + self.DetailsLayout.setObjectName(u'DetailsLayout') self.DisplayLabel = QtGui.QLabel(self.DetailsWidget) - self.DisplayLabel.setObjectName("DisplayLabel") + self.DisplayLabel.setObjectName(u'DisplayLabel') self.DetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.DisplayLabel) self.DisplayEdit = QtGui.QLineEdit(self.DetailsWidget) - self.DisplayEdit.setObjectName("DisplayEdit") + self.DisplayEdit.setObjectName(u'DisplayEdit') self.DetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.DisplayEdit) self.FirstNameLabel = QtGui.QLabel(self.DetailsWidget) - self.FirstNameLabel.setObjectName("FirstNameLabel") + self.FirstNameLabel.setObjectName(u'FirstNameLabel') self.DetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FirstNameLabel) self.FirstNameEdit = QtGui.QLineEdit(self.DetailsWidget) - self.FirstNameEdit.setObjectName("FirstNameEdit") + self.FirstNameEdit.setObjectName(u'FirstNameEdit') self.DetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FirstNameEdit) self.LastNameLabel = QtGui.QLabel(self.DetailsWidget) - self.LastNameLabel.setObjectName("LastNameLabel") + self.LastNameLabel.setObjectName(u'LastNameLabel') self.DetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.LastNameLabel) self.LastNameEdit = QtGui.QLineEdit(self.DetailsWidget) - self.LastNameEdit.setObjectName("LastNameEdit") + self.LastNameEdit.setObjectName(u'LastNameEdit') self.DetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.LastNameEdit) self.AuthorLayout.addWidget(self.DetailsWidget) self.MessageLabel = QtGui.QLabel(self.AuthorDetails) - self.MessageLabel.setObjectName("MessageLabel") + self.MessageLabel.setObjectName(u'MessageLabel') self.AuthorLayout.addWidget(self.MessageLabel) self.ButtonWidget = QtGui.QWidget(self.AuthorDetails) self.ButtonWidget.setMinimumSize(QtCore.QSize(0, 0)) - self.ButtonWidget.setObjectName("ButtonWidget") + self.ButtonWidget.setObjectName(u'ButtonWidget') self.ButtonLayout = QtGui.QHBoxLayout(self.ButtonWidget) self.ButtonLayout.setSpacing(8) self.ButtonLayout.setMargin(0) - self.ButtonLayout.setObjectName("ButtonLayout") + self.ButtonLayout.setObjectName(u'ButtonLayout') spacerItem = QtGui.QSpacerItem(198, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.ButtonLayout.addItem(spacerItem) self.ClearButton = QtGui.QPushButton(self.ButtonWidget) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/services/service_new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ClearButton.setIcon(icon) - self.ClearButton.setObjectName("ClearButton") + self.ClearButton.setObjectName(u'ClearButton') self.ButtonLayout.addWidget(self.ClearButton) self.AddUpdateButton = QtGui.QPushButton(self.ButtonWidget) icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(":/services/service_save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.AddUpdateButton.setIcon(icon1) - self.AddUpdateButton.setObjectName("AddUpdateButton") + self.AddUpdateButton.setObjectName(u'AddUpdateButton') self.ButtonLayout.addWidget(self.AddUpdateButton) self.DeleteButton = QtGui.QPushButton(self.ButtonWidget) icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap(":/services/service_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon2.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.DeleteButton.setIcon(icon2) - self.DeleteButton.setObjectName("DeleteButton") + self.DeleteButton.setObjectName(u'DeleteButton') self.ButtonLayout.addWidget(self.DeleteButton) self.AuthorLayout.addWidget(self.ButtonWidget) self.DialogLayout.addWidget(self.AuthorDetails) self.buttonBox = QtGui.QDialogButtonBox(AuthorsDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) - self.buttonBox.setObjectName("buttonBox") + self.buttonBox.setObjectName(u'buttonBox') self.DialogLayout.addWidget(self.buttonBox) self.retranslateUi(AuthorsDialog) - QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), AuthorsDialog.accept) - QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), AuthorsDialog.reject) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), AuthorsDialog.accept) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), AuthorsDialog.reject) QtCore.QMetaObject.connectSlotsByName(AuthorsDialog) def retranslateUi(self, AuthorsDialog): - AuthorsDialog.setWindowTitle(QtGui.QApplication.translate("AuthorsDialog", "Author Maintenance", None, QtGui.QApplication.UnicodeUTF8)) - self.AuthorDetails.setTitle(QtGui.QApplication.translate("AuthorsDialog", "Author Details", None, QtGui.QApplication.UnicodeUTF8)) - self.DisplayLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "Display Name:", None, QtGui.QApplication.UnicodeUTF8)) - self.FirstNameLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "First Name:", None, QtGui.QApplication.UnicodeUTF8)) - self.LastNameLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "Last Name:", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setToolTip(QtGui.QApplication.translate("AuthorsDialog", "Clear Selection", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setText(QtGui.QApplication.translate("AuthorsDialog", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setToolTip(QtGui.QApplication.translate("AuthorsDialog", "Add Update Author", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setText(QtGui.QApplication.translate("AuthorsDialog", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.DeleteButton.setToolTip(QtGui.QApplication.translate("AuthorsDialog", "Delete Author", None, QtGui.QApplication.UnicodeUTF8)) - self.DeleteButton.setText(QtGui.QApplication.translate("AuthorsDialog", "Delete", None, QtGui.QApplication.UnicodeUTF8)) - self.buttonBox.setToolTip(QtGui.QApplication.translate("AuthorsDialog", "Exit Screen", None, QtGui.QApplication.UnicodeUTF8)) + AuthorsDialog.setWindowTitle(translate(u'AuthorsDialog', u'Author Maintenance')) + self.AuthorDetails.setTitle(translate(u'AuthorsDialog', u'Author Details')) + self.DisplayLabel.setText(translate(u'AuthorsDialog', u'Display Name:')) + self.FirstNameLabel.setText(translate(u'AuthorsDialog', u'First Name:')) + self.LastNameLabel.setText(translate(u'AuthorsDialog', u'Last Name:')) + self.ClearButton.setToolTip(translate(u'AuthorsDialog', u'Clear Selection')) + self.ClearButton.setText(translate(u'AuthorsDialog', u'Clear')) + self.AddUpdateButton.setToolTip(translate(u'AuthorsDialog', u'Add Update Author')) + self.AddUpdateButton.setText(translate(u'AuthorsDialog', u'Save')) + self.DeleteButton.setToolTip(translate(u'AuthorsDialog', u'Delete Author')) + self.DeleteButton.setText(translate(u'AuthorsDialog', u'Delete')) + self.buttonBox.setToolTip(translate(u'AuthorsDialog', u'Exit Screen')) diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 09d6dc216..9d9db05e7 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -19,6 +19,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA from PyQt4 import QtGui, QtCore from openlp.core.lib import translate from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog +from openlp.plugins.songs.lib.classes import Author class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): """ @@ -42,27 +43,24 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick) QtCore.QObject.connect(self.DisplayEdit, QtCore.SIGNAL(u'lostFocus()'), self.onDisplayEditLostFocus) - QtCore.QObject.connect(self.AuthorListView, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onAuthorListViewItemClicked) + QtCore.QObject.connect(self.AuthorListWidget, + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onAuthorListWidgetItemClicked) def load_form(self): """ Refresh the screen and rest fields """ - self.AuthorListData.resetStore() + self.AuthorListWidget.clear() self.onClearButtonClick() # tidy up screen authors = self.songmanager.get_authors() for author in authors: - self.AuthorListData.addRow(author.id,author.display_name) - #rowCount is number of rows BUT test should be Zero based - row_count = self.AuthorListData.rowCount(None) - 1 - if self.currentRow > row_count: - # in case we have delete the last row of the table - self.currentRow = row_count - row = self.AuthorListData.createIndex(self.currentRow, 0) - if row.isValid(): - self.AuthorListView.selectionModel().setCurrentIndex(row, - QtGui.QItemSelectionModel.SelectCurrent) + author_name = QtGui.QListWidgetItem(author.display_name) + author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id)) + self.AuthorListWidget.addItem(author_name) + if self.currentRow >= self.AuthorListWidget.count() : + self.AuthorListWidget.setCurrentRow(self.AuthorListWidget.count() - 1) + else: + self.AuthorListWidget.setCurrentRow(self.currentRow) self._validate_form() def onDeleteButtonClick(self): @@ -100,15 +98,15 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): self.author = None self._validate_form() - def onAuthorListViewItemClicked(self, index): + def onAuthorListWidgetItemClicked(self, index): """ An Author has been selected display it If the author is attached to a Song prevent delete """ - self.currentRow = index.row() - id = int(self.AuthorListData.getId(index)) - self.author = self.songmanager.get_author(id) - + self.currentRow = self.AuthorListWidget.currentRow() + item = self.AuthorListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.author = self.songmanager.get_author(item_id) self.DisplayEdit.setText(self.author.display_name) self.FirstNameEdit.setText(self.author.first_name) self.LastNameEdit.setText(self.author.last_name) diff --git a/openlp/plugins/songs/forms/songbookdialog.py b/openlp/plugins/songs/forms/songbookdialog.py index 9a53d5f28..90e9989cc 100644 --- a/openlp/plugins/songs/forms/songbookdialog.py +++ b/openlp/plugins/songs/forms/songbookdialog.py @@ -1,60 +1,66 @@ # -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, -# Form implementation generated from reading ui file 'songbookdialog.ui' -# -# Created: Sun Jan 4 08:43:12 2009 -# by: PyQt4 UI code generator 4.4.3 -# -# WARNING! All changes made in this file will be lost! +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +""" from PyQt4 import QtCore, QtGui -from openlp.plugins.songs.lib import TextListData +from openlp.core.lib import translate class Ui_SongBookDialog(object): def setupUi(self, SongBookDialog): - SongBookDialog.setObjectName("SongBookDialog") + SongBookDialog.setObjectName(u'SongBookDialog') SongBookDialog.resize(387, 531) self.DialogLayout = QtGui.QVBoxLayout(SongBookDialog) self.DialogLayout.setSpacing(8) self.DialogLayout.setMargin(8) - self.DialogLayout.setObjectName("DialogLayout") - - self.BookSongListView = QtGui.QListView() - self.BookSongListView.setAlternatingRowColors(True) - self.BookSongListData = TextListData() - self.BookSongListView.setModel(self.BookSongListData) - self.DialogLayout.addWidget(self.BookSongListView) - - self.DialogLayout.addWidget(self.BookSongListView) + self.DialogLayout.setObjectName(u'DialogLayout') + self.BookSongListWidget = QtGui.QListWidget() + self.BookSongListWidget.setAlternatingRowColors(True) + self.DialogLayout.addWidget(self.BookSongListWidget) + self.DialogLayout.addWidget(self.BookSongListWidget) self.SongBookGroup = QtGui.QGroupBox(SongBookDialog) self.SongBookGroup.setMinimumSize(QtCore.QSize(0, 200)) - self.SongBookGroup.setObjectName("SongBookGroup") + self.SongBookGroup.setObjectName(u'SongBookGroup') self.SongBookLayout = QtGui.QVBoxLayout(self.SongBookGroup) self.SongBookLayout.setSpacing(8) self.SongBookLayout.setMargin(8) - self.SongBookLayout.setObjectName("SongBookLayout") + self.SongBookLayout.setObjectName(u'SongBookLayout') self.DetailsWidget = QtGui.QWidget(self.SongBookGroup) self.DetailsWidget.setMinimumSize(QtCore.QSize(0, 0)) - self.DetailsWidget.setObjectName("DetailsWidget") + self.DetailsWidget.setObjectName(u'DetailsWidget') self.DetailsLayout = QtGui.QFormLayout(self.DetailsWidget) self.DetailsLayout.setMargin(0) self.DetailsLayout.setSpacing(8) - self.DetailsLayout.setObjectName("DetailsLayout") + self.DetailsLayout.setObjectName(u'DetailsLayout') self.NameLabel = QtGui.QLabel(self.DetailsWidget) - self.NameLabel.setObjectName("NameLabel") + self.NameLabel.setObjectName(u'NameLabel') self.DetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.NameLabel) self.NameEdit = QtGui.QLineEdit(self.DetailsWidget) - self.NameEdit.setObjectName("NameEdit") + self.NameEdit.setObjectName(u'NameEdit') self.DetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.NameEdit) self.PublisherLabel = QtGui.QLabel(self.DetailsWidget) - self.PublisherLabel.setObjectName("PublisherLabel") + self.PublisherLabel.setObjectName(u'PublisherLabel') self.DetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.PublisherLabel) self.PublisherEdit = QtGui.QLineEdit(self.DetailsWidget) - self.PublisherEdit.setObjectName("PublisherEdit") + self.PublisherEdit.setObjectName(u'PublisherEdit') self.DetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.PublisherEdit) self.SongBookLayout.addWidget(self.DetailsWidget) self.MessageLabel = QtGui.QLabel(self.SongBookGroup) - self.MessageLabel.setObjectName("MessageLabel") + self.MessageLabel.setObjectName(u'MessageLabel') self.SongBookLayout.addWidget(self.MessageLabel) self.ButtonWidget = QtGui.QWidget(self.SongBookGroup) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) @@ -63,52 +69,51 @@ class Ui_SongBookDialog(object): sizePolicy.setHeightForWidth(self.ButtonWidget.sizePolicy().hasHeightForWidth()) self.ButtonWidget.setSizePolicy(sizePolicy) self.ButtonWidget.setMinimumSize(QtCore.QSize(0, 0)) - self.ButtonWidget.setObjectName("ButtonWidget") + self.ButtonWidget.setObjectName(u'ButtonWidget') self.ButtonLayout = QtGui.QHBoxLayout(self.ButtonWidget) self.ButtonLayout.setSpacing(8) self.ButtonLayout.setMargin(0) - self.ButtonLayout.setObjectName("ButtonLayout") + self.ButtonLayout.setObjectName(u'ButtonLayout') spacerItem = QtGui.QSpacerItem(61, 24, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.ButtonLayout.addItem(spacerItem) self.ClearButton = QtGui.QPushButton(self.ButtonWidget) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/services/service_new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ClearButton.setIcon(icon) - self.ClearButton.setObjectName("ClearButton") + self.ClearButton.setObjectName(u'ClearButton') self.ButtonLayout.addWidget(self.ClearButton) self.AddUpdateButton = QtGui.QPushButton(self.ButtonWidget) icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(":/services/service_save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.AddUpdateButton.setIcon(icon1) - self.AddUpdateButton.setObjectName("AddUpdateButton") + self.AddUpdateButton.setObjectName(u'AddUpdateButton') self.ButtonLayout.addWidget(self.AddUpdateButton) self.DeleteButton = QtGui.QPushButton(self.ButtonWidget) icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap(":/services/service_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon2.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.DeleteButton.setIcon(icon2) - self.DeleteButton.setObjectName("DeleteButton") + self.DeleteButton.setObjectName(u'DeleteButton') self.ButtonLayout.addWidget(self.DeleteButton) self.SongBookLayout.addWidget(self.ButtonWidget) self.DialogLayout.addWidget(self.SongBookGroup) self.ButtonBox = QtGui.QDialogButtonBox(SongBookDialog) self.ButtonBox.setOrientation(QtCore.Qt.Horizontal) self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) - self.ButtonBox.setObjectName("ButtonBox") + self.ButtonBox.setObjectName(u'ButtonBox') self.DialogLayout.addWidget(self.ButtonBox) - self.retranslateUi(SongBookDialog) - QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), SongBookDialog.accept) - QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("rejected()"), SongBookDialog.reject) + QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), SongBookDialog.accept) + QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'rejected()'), SongBookDialog.reject) QtCore.QMetaObject.connectSlotsByName(SongBookDialog) def retranslateUi(self, SongBookDialog): - SongBookDialog.setWindowTitle(QtGui.QApplication.translate("SongBookDialog", "Book Song Maintenance", None, QtGui.QApplication.UnicodeUTF8)) - self.SongBookGroup.setTitle(QtGui.QApplication.translate("SongBookDialog", "Song Book", None, QtGui.QApplication.UnicodeUTF8)) - self.NameLabel.setText(QtGui.QApplication.translate("SongBookDialog", "Name:", None, QtGui.QApplication.UnicodeUTF8)) - self.PublisherLabel.setText(QtGui.QApplication.translate("SongBookDialog", "Publisher:", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setToolTip(QtGui.QApplication.translate("SongBookDialog", "Clear Selection", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setText(QtGui.QApplication.translate("SongBookDialog", "New", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setToolTip(QtGui.QApplication.translate("SongBookDialog", "Add Update Author", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setText(QtGui.QApplication.translate("SongBookDialog", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.DeleteButton.setToolTip(QtGui.QApplication.translate("SongBookDialog", "Delete Author", None, QtGui.QApplication.UnicodeUTF8)) - self.DeleteButton.setText(QtGui.QApplication.translate("SongBookDialog", "Delete", None, QtGui.QApplication.UnicodeUTF8)) + SongBookDialog.setWindowTitle(translate(u'SongBookDialog', u'Book Song Maintenance')) + self.SongBookGroup.setTitle(translate(u'SongBookDialog', u'Song Book')) + self.NameLabel.setText(translate(u'SongBookDialog', u'Name:')) + self.PublisherLabel.setText(translate(u'SongBookDialog', u'Publisher:')) + self.ClearButton.setToolTip(translate(u'SongBookDialog', u'Clear Selection')) + self.ClearButton.setText(translate(u'SongBookDialog', u'Clear')) + self.AddUpdateButton.setToolTip(translate(u'SongBookDialog', u'Add Update Author')) + self.AddUpdateButton.setText(translate(u'SongBookDialog', u'Save')) + self.DeleteButton.setToolTip(translate(u'SongBookDialog', u'Delete Author')) + self.DeleteButton.setText(translate(u'SongBookDialog', u'Delete')) diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index ce430cb56..73f36f797 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -44,28 +44,24 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick) QtCore.QObject.connect(self.NameEdit, QtCore.SIGNAL(u'lostFocus()'), self.onBookNameEditLostFocus) - QtCore.QObject.connect(self.BookSongListView, + QtCore.QObject.connect(self.BookSongListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onBooksListViewItemClicked) def load_form(self): """ Refresh the screen and rest fields """ - self.BookSongListData.resetStore() + self.BookSongListWidget.clear() self.onClearButtonClick() # tidy up screen - Books = self.songmanager.get_books() - for Book in Books: - self.BookSongListData.addRow(Book.id,Book.name) - #rowCount is number of rows BUT test should be Zero based - row_count = self.BookSongListData.rowCount(None) - 1 - if self.currentRow > row_count: - # in case we have delete the last row of the table - self.currentRow = row_count - row = self.BookSongListData.createIndex(self.currentRow, 0) - if row.isValid(): - self.BookSongListView.selectionModel().setCurrentIndex(row, - QtGui.QItemSelectionModel.SelectCurrent) - self._validate_form() + books = self.songmanager.get_books() + for book in books: + book_name = QtGui.QListWidgetItem(book.name) + book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id)) + self.BookSongListWidget.addItem(book_name) + if self.currentRow >= self.BookSongListWidget.count() : + self.BookSongListWidget.setCurrentRow(self.BookSongListWidget.count() - 1) + else: + self.BookSongListWidget.setCurrentRow(self.currentRow) def onDeleteButtonClick(self): """ @@ -106,10 +102,10 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): An Book has been selected display it If the Book is attached to a Song prevent delete """ - self.currentRow = index.row() - id = int(self.BookSongListData.getId(index)) - self.Book = self.songmanager.get_book(id) - + self.currentRow = self.BookSongListWidget.currentRow() + item = self.BookSongListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.Book = self.songmanager.get_book(item_id) self.NameEdit.setText(self.Book.name) self.PublisherEdit.setText(self.Book.publisher) if len(self.Book.songs) > 0: diff --git a/openlp/plugins/songs/forms/topicsdialog.py b/openlp/plugins/songs/forms/topicsdialog.py index 68411f552..2a56837fa 100644 --- a/openlp/plugins/songs/forms/topicsdialog.py +++ b/openlp/plugins/songs/forms/topicsdialog.py @@ -1,82 +1,88 @@ # -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, -# Form implementation generated from reading ui file 'topicsdialog.ui' -# -# Created: Sun Jan 4 08:42:59 2009 -# by: PyQt4 UI code generator 4.4.3 -# -# WARNING! All changes made in this file will be lost! +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +""" from PyQt4 import QtCore, QtGui -from openlp.plugins.songs.lib import TextListData +from openlp.core.lib import translate class Ui_TopicsDialog(object): def setupUi(self, TopicsDialog): - TopicsDialog.setObjectName("TopicsDialog") + TopicsDialog.setObjectName(u'TopicsDialog') TopicsDialog.resize(387, 463) self.gridLayout_2 = QtGui.QGridLayout(TopicsDialog) - self.gridLayout_2.setObjectName("gridLayout_2") + self.gridLayout_2.setObjectName(u'gridLayout_2') self.TopicGroupBox = QtGui.QGroupBox(TopicsDialog) - self.TopicGroupBox.setObjectName("TopicGroupBox") + self.TopicGroupBox.setObjectName(u'TopicGroupBox') self.gridLayout = QtGui.QGridLayout(self.TopicGroupBox) - self.gridLayout.setObjectName("gridLayout") + self.gridLayout.setObjectName(u'gridLayout') self.TopicNameLabel = QtGui.QLabel(self.TopicGroupBox) - self.TopicNameLabel.setObjectName("TopicNameLabel") + self.TopicNameLabel.setObjectName(u'TopicNameLabel') self.gridLayout.addWidget(self.TopicNameLabel, 0, 0, 1, 1) self.TopicNameEdit = QtGui.QLineEdit(self.TopicGroupBox) - self.TopicNameEdit.setObjectName("TopicNameEdit") + self.TopicNameEdit.setObjectName(u'TopicNameEdit') self.gridLayout.addWidget(self.TopicNameEdit, 0, 1, 1, 4) spacerItem = QtGui.QSpacerItem(198, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 1, 0, 1, 2) self.DeleteButton = QtGui.QPushButton(self.TopicGroupBox) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/services/service_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.DeleteButton.setIcon(icon) - self.DeleteButton.setObjectName("DeleteButton") + self.DeleteButton.setObjectName(u'DeleteButton') self.gridLayout.addWidget(self.DeleteButton, 1, 3, 1, 1) self.AddUpdateButton = QtGui.QPushButton(self.TopicGroupBox) icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(":/services/service_save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.AddUpdateButton.setIcon(icon1) - self.AddUpdateButton.setObjectName("AddUpdateButton") + self.AddUpdateButton.setObjectName(u'AddUpdateButton') self.gridLayout.addWidget(self.AddUpdateButton, 1, 4, 1, 1) self.ClearButton = QtGui.QPushButton(self.TopicGroupBox) icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap(":/services/service_new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon2.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ClearButton.setIcon(icon2) - self.ClearButton.setObjectName("ClearButton") + self.ClearButton.setObjectName(u'ClearButton') self.gridLayout.addWidget(self.ClearButton, 1, 2, 1, 1) self.gridLayout_2.addWidget(self.TopicGroupBox, 1, 0, 1, 1) self.MessageLabel = QtGui.QLabel(TopicsDialog) - self.MessageLabel.setObjectName("MessageLabel") + self.MessageLabel.setObjectName(u'MessageLabel') self.gridLayout_2.addWidget(self.MessageLabel, 3, 0, 1, 1) - - self.TopicsListView = QtGui.QListView() - self.TopicsListView.setAlternatingRowColors(True) - self.TopicsListData = TextListData() - self.TopicsListView.setModel(self.TopicsListData) - self.gridLayout_2.addWidget(self.TopicsListView, 0, 0, 1, 1) - + self.TopicsListWidget = QtGui.QListWidget() + self.TopicsListWidget.setAlternatingRowColors(True) + self.gridLayout_2.addWidget(self.TopicsListWidget, 0, 0, 1, 1) self.ButtonBox = QtGui.QDialogButtonBox(TopicsDialog) self.ButtonBox.setOrientation(QtCore.Qt.Horizontal) self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) - self.ButtonBox.setObjectName("ButtonBox") + self.ButtonBox.setObjectName(u'ButtonBox') self.gridLayout_2.addWidget(self.ButtonBox, 2, 0, 1, 1) self.retranslateUi(TopicsDialog) - QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), TopicsDialog.accept) - QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("rejected()"), TopicsDialog.reject) + QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), TopicsDialog.accept) + QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'rejected()'), TopicsDialog.reject) QtCore.QMetaObject.connectSlotsByName(TopicsDialog) def retranslateUi(self, TopicsDialog): - TopicsDialog.setWindowTitle(QtGui.QApplication.translate("TopicsDialog", "Topic Maintenance", None, QtGui.QApplication.UnicodeUTF8)) - self.TopicGroupBox.setTitle(QtGui.QApplication.translate("TopicsDialog", "Topic", None, QtGui.QApplication.UnicodeUTF8)) - self.TopicNameLabel.setText(QtGui.QApplication.translate("TopicsDialog", "Topic Name:", None, QtGui.QApplication.UnicodeUTF8)) + TopicsDialog.setWindowTitle(translate(u'TopicsDialog', u'Topic Maintenance')) + self.TopicGroupBox.setTitle(translate(u'TopicsDialog', u'Topic')) + self.TopicNameLabel.setText(translate(u'TopicsDialog', u'Topic Name:')) - self.DeleteButton.setToolTip(QtGui.QApplication.translate("TopicsDialog", "Delete Author", None, QtGui.QApplication.UnicodeUTF8)) - self.DeleteButton.setText(QtGui.QApplication.translate("AuthorsDialog", "Delete", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setToolTip(QtGui.QApplication.translate("TopicsDialog", "Add Update Author", None, QtGui.QApplication.UnicodeUTF8)) - self.AddUpdateButton.setText(QtGui.QApplication.translate("AuthorsDialog", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setToolTip(QtGui.QApplication.translate("TopicsDialog", "Clear Selection", None, QtGui.QApplication.UnicodeUTF8)) - self.ClearButton.setText(QtGui.QApplication.translate("TopicsDialog", "Clear", None, QtGui.QApplication.UnicodeUTF8)) + self.DeleteButton.setToolTip(translate(u'TopicsDialog', u'Delete Author')) + self.DeleteButton.setText(translate(u'AuthorsDialog', u'Delete')) + self.AddUpdateButton.setToolTip(translate(u'TopicsDialog', u'Add Update Author')) + self.AddUpdateButton.setText(translate(u'AuthorsDialog', u'Save')) + self.ClearButton.setToolTip(translate(u'TopicsDialog', u'Clear Selection')) + self.ClearButton.setText(translate(u'TopicsDialog', u'Clear')) diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index decd36b5b..d5aaafe9d 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -18,7 +18,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA """ from PyQt4 import QtGui, QtCore from openlp.core.lib import translate -from openlp.plugins.songs.lib import TextListData from openlp.plugins.songs.forms.topicsdialog import Ui_TopicsDialog from openlp.plugins.songs.lib.classes import Topic @@ -44,27 +43,24 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick) QtCore.QObject.connect(self.TopicNameEdit, QtCore.SIGNAL(u'lostFocus()'), self.onTopicNameEditLostFocus) - QtCore.QObject.connect(self.TopicsListView, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onTopicsListViewItemClicked) + QtCore.QObject.connect(self.TopicsListWidget, + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onTopicsListWidgetItemClicked) def load_form(self): """ Refresh the screen and rest fields """ - self.TopicsListData.resetStore() + self.TopicsListWidget.clear() self.onClearButtonClick() # tidy up screen topics = self.songmanager.get_topics() for topic in topics: - self.TopicsListData.addRow(topic.id,topic.name) - #rowCount is number of rows BUT test should be Zero based - row_count = self.TopicsListData.rowCount(None) - 1 - if self.currentRow > row_count: - # in case we have delete the last row of the table - self.currentRow = row_count - row = self.TopicsListData.createIndex(self.currentRow, 0) - if row.isValid(): - self.TopicsListView.selectionModel().setCurrentIndex(row, - QtGui.QItemSelectionModel.SelectCurrent) + topic_name = QtGui.QListWidgetItem(topic.name) + topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) + self.TopicsListWidget.addItem(topic_name) + if self.currentRow >= self.TopicsListWidget.count() : + self.TopicsListWidget.setCurrentRow(self.TopicsListWidget.count() - 1) + else: + self.TopicsListWidget.setCurrentRow(self.currentRow) self._validate_form() def onDeleteButtonClick(self): @@ -99,15 +95,15 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): self.topic = None self._validate_form() - def onTopicsListViewItemClicked(self, index): + def onTopicsListWidgetItemClicked(self, index): """ An Topic has been selected display it If the Topic is attached to a Song prevent delete """ - self.currentRow = index.row() - id = int(self.TopicsListData.getId(index)) - self.topic = self.songmanager.get_topic(id) - + self.currentRow = self.TopicsListWidget.currentRow() + item = self.TopicsListWidget.currentItem() + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.topic = self.songmanager.get_topic(item_id) self.TopicNameEdit.setText(self.topic.name) if len(self.topic.songs) > 0: self.MessageLabel.setText(translate(u'TopicForm', u'Topic in use "Delete" is disabled')) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 0bc7d70f2..d1b7ae1af 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from textlistdata import TextListData from manager import SongManager from songstab import SongsTab from mediaitem import SongMediaItem diff --git a/openlp/plugins/songs/lib/textlistdata.py b/openlp/plugins/songs/lib/textlistdata.py deleted file mode 100644 index 64703ea79..000000000 --- a/openlp/plugins/songs/lib/textlistdata.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -""" -OpenLP - Open Source Lyrics Projection -Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA -""" -import logging - -from PyQt4 import QtCore, QtGui - -class TextListData(QtCore.QAbstractListModel): - """ - An abstract list of strings - """ - global log - log = logging.getLogger(u'TextListData') - log.info(u'started') - - def __init__(self): - QtCore.QAbstractListModel.__init__(self) - self.items = [] # will be a list of (database id , title) tuples - - def resetStore(self): - #reset list so can be reloaded - self.items = [] - - def rowCount(self, parent): - return len(self.items) - - def insertRow(self, row, id, title): - self.beginInsertRows(QtCore.QModelIndex(),row,row) - self.items.insert(row, (id, title)) - self.endInsertRows() - - def removeRow(self, row): - self.beginRemoveRows(QtCore.QModelIndex(), row,row) - self.items.pop(row) - self.endRemoveRows() - - def addRow(self, id, title): - self.insertRow(len(self.items), id, title) - - def data(self, index, role): - row = index.row() - if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row! - return QtCore.QVariant() - if role == QtCore.Qt.DisplayRole: - if row == self.rowCount(None): - row -= 1 - retval = self.items[row][1] - else: - retval = QtCore.QVariant() - if type(retval) is not type(QtCore.QVariant): - return QtCore.QVariant(retval) - else: - return retval - - def getIdList(self): - filelist = [item[0] for item in self.items]; - return filelist - - def getId(self, index): - row = index.row() - return self.items[row][0] - - def deleteRow(self, index): - row = index.row() - self.removeRow(row)