From 3c3c1f19cefaa80846288d87d556c120569a665e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Sep 2009 05:54:22 +0100 Subject: [PATCH] Custom Plugin cleaup --- openlp/core/lib/mediamanageritem.py | 21 ++- openlp/plugins/custom/customplugin.py | 10 +- .../plugins/custom/forms/editcustomdialog.py | 136 ++++++++++------ openlp/plugins/custom/forms/editcustomform.py | 99 +++++++---- openlp/plugins/custom/lib/__init__.py | 1 - openlp/plugins/custom/lib/customtab.py | 33 ---- openlp/plugins/custom/lib/mediaitem.py | 154 ++++++++++-------- openlp/plugins/images/lib/mediaitem.py | 1 - openlp/plugins/presentations/lib/mediaitem.py | 2 +- resources/forms/editcustomdialog.ui | 84 +++++++--- 10 files changed, 324 insertions(+), 217 deletions(-) delete mode 100644 openlp/plugins/custom/lib/customtab.py diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 8ccc51919..93f24a01f 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -173,6 +173,8 @@ class MediaManagerItem(QtGui.QWidget): """ # Add a toolbar self.addToolbar() + #Allow the plugin to define it's own header + self.addHeaderBar1() # Create buttons for the toolbar ## File Button ## if self.hasFileIcon: @@ -185,13 +187,13 @@ class MediaManagerItem(QtGui.QWidget): self.addToolbarButton( translate(self.TranslationContext, u'New '+self.PluginTextShort), translate(self.TranslationContext, u'Add a new '+self.PluginTextShort), - u':'+self.IconPath+ u'_load.png', self.onNewClick, self.PluginTextShort+u'NewItem') + u':'+self.IconPath+ u'_new.png', self.onNewClick, self.PluginTextShort+u'NewItem') ## Edit Button ## if self.hasEditIcon: self.addToolbarButton( translate(self.TranslationContext, u'Edit '+self.PluginTextShort), translate(self.TranslationContext, u'Edit the selected '+self.PluginTextShort), - u':'+self.IconPath+ u'_load.png', self.onEditClick, self.PluginTextShort+u'EditItem') + u':'+self.IconPath+ u'_edit.png', self.onEditClick, self.PluginTextShort+u'EditItem') ## Delete Button ## self.addToolbarButton( translate(self.TranslationContext, u'Delete '+self.PluginTextShort), @@ -215,7 +217,7 @@ class MediaManagerItem(QtGui.QWidget): translate(self.TranslationContext, u'Add the selected item(s) to the service'), u':/system/system_add.png', self.onAddClick, self.PluginTextShort+u'AddItem') #Allow the plugin to define it's own header - self.addHeaderBar() + self.addHeaderBar2() #Add the List widget self.ListView = self.ListViewWithDnD_class() self.ListView.uniformItemSizes = True @@ -234,7 +236,7 @@ class MediaManagerItem(QtGui.QWidget): ':' +self.IconPath+u'_new.png', translate(self.TranslationContext, u'&Edit '+self.PluginTextShort), self.onEditClick)) - self.ListView.addAction(self.contextMenuSeparator(self.SongListWidget)) + self.ListView.addAction(contextMenuSeparator(self.ListView)) self.ListView.addAction(contextMenuAction( self.ListView, ':/system/system_preview.png', translate(self.TranslationContext, u'&Preview '+self.PluginTextShort), @@ -258,7 +260,16 @@ class MediaManagerItem(QtGui.QWidget): """ pass - def addHeaderBar(self): + def addHeaderBar1(self): + """ + Slot at start of toolbar for pluin to addwidgets + """ + pass + + def addHeaderBar2(self): + """ + Slot at end of toolbar for pluin to add widgets + """ pass def onFileClick(self): diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index fd1cb43e1..352cf1c53 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -23,10 +23,18 @@ from PyQt4 import QtCore, QtGui from forms import EditCustomForm from openlp.core.lib import Plugin -from openlp.plugins.custom.lib import CustomManager, CustomTab, CustomMediaItem +from openlp.plugins.custom.lib import CustomManager, CustomMediaItem class CustomPlugin(Plugin): + """ + This plugin enables the user to create, edit and display + custom slide shows. Custom shows are divided into slides. + Each show is able to have it's own theme. + Custom shows are designed to replace the use of songs where + the songs plugin has become restrictive. Examples could be + Welcome slides, Bible Reading information, Orders of service. + """ global log log=logging.getLogger(u'CustomPlugin') diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 6b2fefa32..8eef9291b 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -1,11 +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 'editcustomdialog.ui' -# -# Created: Sat Mar 7 09:01:43 2009 -# by: PyQt4 UI code generator 4.4.4 -# -# 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.core.lib import translate @@ -15,7 +26,7 @@ class Ui_customEditDialog(object): customEditDialog.setObjectName(u'customEditDialog') customEditDialog.resize(590, 541) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'), QtGui.QIcon.Normal, QtGui.QIcon.Off) customEditDialog.setWindowIcon(icon) self.gridLayout = QtGui.QGridLayout(customEditDialog) self.gridLayout.setObjectName(u'gridLayout') @@ -31,8 +42,8 @@ class Ui_customEditDialog(object): self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setObjectName(u'horizontalLayout_4') self.VerseListView = QtGui.QListWidget(customEditDialog) - self.VerseListView.setObjectName(u'VerseListView') self.VerseListView.setAlternatingRowColors(True) + self.VerseListView.setObjectName(u'VerseListView') self.horizontalLayout_4.addWidget(self.VerseListView) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(u'verticalLayout') @@ -54,47 +65,49 @@ class Ui_customEditDialog(object): self.gridLayout.addLayout(self.horizontalLayout_4, 1, 0, 1, 1) self.EditWidget = QtGui.QWidget(customEditDialog) self.EditWidget.setObjectName(u'EditWidget') - self.EditLayout = QtGui.QHBoxLayout(self.EditWidget) - self.EditLayout.setSpacing(8) - self.EditLayout.setMargin(0) - self.EditLayout.setObjectName(u'EditLayout') + self.EditLayout_3 = QtGui.QHBoxLayout(self.EditWidget) + self.EditLayout_3.setSpacing(8) + self.EditLayout_3.setMargin(0) + self.EditLayout_3.setObjectName(u'EditLayout_3') self.VerseTextEdit = QtGui.QTextEdit(self.EditWidget) self.VerseTextEdit.setObjectName(u'VerseTextEdit') - self.EditLayout.addWidget(self.VerseTextEdit) - self.ButtonWidget = QtGui.QWidget(self.EditWidget) - self.ButtonWidget.setObjectName(u'ButtonWidget') - self.ButtonLayout = QtGui.QVBoxLayout(self.ButtonWidget) - self.ButtonLayout.setSpacing(8) - self.ButtonLayout.setMargin(0) - self.ButtonLayout.setObjectName(u'ButtonLayout') - self.AddButton = QtGui.QPushButton(self.ButtonWidget) + self.EditLayout_3.addWidget(self.VerseTextEdit) + self.ButtonWidge = QtGui.QWidget(self.EditWidget) + self.ButtonWidge.setObjectName(u'ButtonWidge') + self.verticalLayout_2 = QtGui.QVBoxLayout(self.ButtonWidge) + self.verticalLayout_2.setObjectName(u'verticalLayout_2') + self.AddButton = QtGui.QPushButton(self.ButtonWidge) self.AddButton.setObjectName(u'AddButton') - self.ButtonLayout.addWidget(self.AddButton) - self.EditButton = QtGui.QPushButton(self.ButtonWidget) + self.AddButton.setToolTip(translate(u'customEditDialog', u'Add new slide at bottom')) + self.verticalLayout_2.addWidget(self.AddButton) + self.EditButton = QtGui.QPushButton(self.ButtonWidge) self.EditButton.setObjectName(u'EditButton') - self.ButtonLayout.addWidget(self.EditButton) - self.SaveButton = QtGui.QPushButton(self.ButtonWidget) + self.verticalLayout_2.addWidget(self.EditButton) + self.EditAllButton = QtGui.QPushButton(self.ButtonWidge) + self.EditAllButton.setObjectName(u'EditAllButton') + self.verticalLayout_2.addWidget(self.EditAllButton) + self.SaveButton = QtGui.QPushButton(self.ButtonWidge) self.SaveButton.setObjectName(u'SaveButton') - self.ButtonLayout.addWidget(self.SaveButton) - self.DeleteButton = QtGui.QPushButton(self.ButtonWidget) + self.verticalLayout_2.addWidget(self.SaveButton) + self.DeleteButton = QtGui.QPushButton(self.ButtonWidge) self.DeleteButton.setObjectName(u'DeleteButton') - self.ButtonLayout.addWidget(self.DeleteButton) - self.ClearButton = QtGui.QPushButton(self.ButtonWidget) + self.verticalLayout_2.addWidget(self.DeleteButton) + self.ClearButton = QtGui.QPushButton(self.ButtonWidge) self.ClearButton.setObjectName(u'ClearButton') - self.ButtonLayout.addWidget(self.ClearButton) + self.verticalLayout_2.addWidget(self.ClearButton) spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.ButtonLayout.addItem(spacerItem1) - self.EditLayout.addWidget(self.ButtonWidget) + self.verticalLayout_2.addItem(spacerItem1) + self.EditLayout_3.addWidget(self.ButtonWidge) self.gridLayout.addWidget(self.EditWidget, 2, 0, 1, 1) - self.horizontalLayout = QtGui.QHBoxLayout() - self.horizontalLayout.setObjectName(u'horizontalLayout') + self.horizontalLayout_3 = QtGui.QHBoxLayout() + self.horizontalLayout_3.setObjectName(u'horizontalLayout_3') self.ThemeLabel = QtGui.QLabel(customEditDialog) self.ThemeLabel.setObjectName(u'ThemeLabel') - self.horizontalLayout.addWidget(self.ThemeLabel) - self.ThemecomboBox = QtGui.QComboBox(customEditDialog) - self.ThemecomboBox.setObjectName(u'ThemecomboBox') - self.horizontalLayout.addWidget(self.ThemecomboBox) - self.gridLayout.addLayout(self.horizontalLayout, 3, 0, 1, 1) + self.horizontalLayout_3.addWidget(self.ThemeLabel) + self.ThemeComboBox = QtGui.QComboBox(customEditDialog) + self.ThemeComboBox.setObjectName(u'ThemeComboBox') + self.horizontalLayout_3.addWidget(self.ThemeComboBox) + self.gridLayout.addLayout(self.horizontalLayout_3, 3, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(u'horizontalLayout_2') self.CreditLabel = QtGui.QLabel(customEditDialog) @@ -108,24 +121,39 @@ class Ui_customEditDialog(object): 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.QMetaObject.connectSlotsByName(customEditDialog) customEditDialog.setTabOrder(self.TitleEdit, self.VerseTextEdit) - customEditDialog.setTabOrder(self.VerseTextEdit, self.EditButton) - customEditDialog.setTabOrder(self.EditButton, self.SaveButton) - customEditDialog.setTabOrder(self.SaveButton, self.CreditEdit) - customEditDialog.setTabOrder(self.CreditEdit, self.VerseListView) - customEditDialog.setTabOrder(self.VerseListView, self.AddButton) - customEditDialog.setTabOrder(self.AddButton, self.DeleteButton) - customEditDialog.setTabOrder(self.DeleteButton, self.buttonBox) + customEditDialog.setTabOrder(self.VerseTextEdit, self.AddButton) + customEditDialog.setTabOrder(self.AddButton, self.VerseListView) + customEditDialog.setTabOrder(self.VerseListView, self.EditButton) + customEditDialog.setTabOrder(self.EditButton, self.EditAllButton) + customEditDialog.setTabOrder(self.EditAllButton, self.SaveButton) + customEditDialog.setTabOrder(self.SaveButton, self.DeleteButton) + customEditDialog.setTabOrder(self.DeleteButton, self.CreditEdit) + customEditDialog.setTabOrder(self.CreditEdit, self.UpButton) + customEditDialog.setTabOrder(self.UpButton, self.DownButton) + customEditDialog.setTabOrder(self.DownButton, self.ThemeComboBox) + customEditDialog.setTabOrder(self.ThemeComboBox, self.buttonBox) def retranslateUi(self, customEditDialog): - customEditDialog.setWindowTitle(translate(u'customEditDialog', u'Edit Custom Slides')) - self.TitleLabel.setText(translate(u'customEditDialog', u'Title:')) - self.AddButton.setText(translate(u'customEditDialog', u'Add')) - self.EditButton.setText(translate(u'customEditDialog', u'Edit')) - self.SaveButton.setText(translate(u'customEditDialog', u'Save')) - self.DeleteButton.setText(translate(u'customEditDialog', u'Delete')) - self.ClearButton.setText(translate(u'customEditDialog', u'Clear')) - self.ThemeLabel.setText(translate(u'customEditDialog', u'Theme:')) - self.CreditLabel.setText(translate(u'customEditDialog', u'Credits:')) + self.UpButton.setToolTip(translate(u'customEditDialog', u'Move slide Up 1')) + self.DownButton.setToolTip(translate(u'customEditDialog', u'Move slide down 1')) + customEditDialog.setWindowTitle(translate(u'customEditDialog', 'Edit Custom Slides')) + self.TitleLabel.setText(translate(u'customEditDialog', 'Title:')) + self.AddButton.setText(translate(u'customEditDialog', 'Add New')) + self.AddButton.setToolTip(translate(u'customEditDialog', u'Add new slide at bottom')) + self.EditButton.setText(translate(u'customEditDialog', 'Edit')) + self.EditButton.setToolTip(translate(u'customEditDialog', u'Edit selected slide')) + self.EditAllButton.setText(translate(u'customEditDialog', 'Edit All')) + self.EditAllButton.setToolTip(translate(u'customEditDialog', u'Edit all slides')) + self.SaveButton.setText(translate(u'customEditDialog', 'Save')) + self.SaveButton.setToolTip(translate(u'customEditDialog', u'Replace edited slide')) + self.DeleteButton.setText(translate(u'customEditDialog', 'Delete')) + self.DeleteButton.setToolTip(translate(u'customEditDialog', u'Delete selected slide')) + self.ClearButton.setText(translate(u'customEditDialog', 'Clear')) + self.ClearButton.setToolTip(translate(u'customEditDialog', u'Clear edit area')) + self.ThemeLabel.setText(translate(u'customEditDialog', 'Theme:')) + self.ThemeComboBox.setToolTip(translate(u'customEditDialog', u'Set Theme for Slides')) + self.CreditLabel.setText(translate(u'customEditDialog', 'Credits:')) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index a223a9429..260e08424 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -35,20 +35,33 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): #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, QtCore.SIGNAL(u'pressed()'), self.onEditButtonPressed) - QtCore.QObject.connect(self.SaveButton, QtCore.SIGNAL(u'pressed()'), self.onSaveButtonPressed) - QtCore.QObject.connect(self.DeleteButton, QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonPressed) - QtCore.QObject.connect(self.ClearButton, QtCore.SIGNAL(u'pressed()'), self.onClearButtonPressed) - QtCore.QObject.connect(self.UpButton, QtCore.SIGNAL(u'pressed()'), self.onUpButtonPressed) - QtCore.QObject.connect(self.DownButton, QtCore.SIGNAL(u'pressed()'), self.onDownButtonPressed) + 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, + QtCore.SIGNAL(u'pressed()'), self.onEditButtonPressed) + QtCore.QObject.connect(self.EditAllButton, + QtCore.SIGNAL(u'pressed()'), self.onEditAllButtonPressed) + QtCore.QObject.connect(self.SaveButton, + QtCore.SIGNAL(u'pressed()'), self.onSaveButtonPressed) + QtCore.QObject.connect(self.DeleteButton, + QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonPressed) + QtCore.QObject.connect(self.ClearButton, + QtCore.SIGNAL(u'pressed()'), self.onClearButtonPressed) + QtCore.QObject.connect(self.UpButton, + QtCore.SIGNAL(u'pressed()'), self.onUpButtonPressed) + QtCore.QObject.connect(self.DownButton, + QtCore.SIGNAL(u'pressed()'), self.onDownButtonPressed) QtCore.QObject.connect(self.VerseListView, - QtCore.SIGNAL(u'itemDoubleClicked(QListWidgetItem*)'), self.onVerseListViewSelected) + QtCore.SIGNAL(u'itemDoubleClicked(QListWidgetItem*)'), + self.onVerseListViewSelected) QtCore.QObject.connect(self.VerseListView, - QtCore.SIGNAL(u'itemClicked(QListWidgetItem*)'), self.onVerseListViewPressed) + QtCore.SIGNAL(u'itemClicked(QListWidgetItem*)'), + self.onVerseListViewPressed) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'update_themes'), self.loadThemes) # Create other objects and forms @@ -56,23 +69,25 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): self.initialise() def initialise(self): - self.valid = True + self.editAll = False self.DeleteButton.setEnabled(False) self.EditButton.setEnabled(False) + self.EditAllButton.setEnabled(True) self.SaveButton.setEnabled(False) + self.ClearButton.setEnabled(False) self.TitleEdit.setText(u'') self.CreditEdit.setText(u'') self.VerseTextEdit.clear() self.VerseListView.clear() #make sure we have a new item self.customSlide = CustomSlide() - self.ThemecomboBox.addItem(u'') + self.ThemeComboBox.addItem(u'') def loadThemes(self, themelist): - self.ThemecomboBox.clear() - self.ThemecomboBox.addItem(u'') + self.ThemeComboBox.clear() + self.ThemeComboBox.addItem(u'') for themename in themelist: - self.ThemecomboBox.addItem(themename) + self.ThemeComboBox.addItem(themename) def loadCustom(self, id): self.customSlide = CustomSlide() @@ -87,12 +102,12 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): for verse in verseList: self.VerseListView.addItem(verse[1]) theme = unicode(self.customSlide.theme_name) - id = self.ThemecomboBox.findText(theme, QtCore.Qt.MatchExactly) + id = self.ThemeComboBox.findText(theme, QtCore.Qt.MatchExactly) if id == -1: id = 0 # Not Found - self.ThemecomboBox.setCurrentIndex(id) + self.ThemeComboBox.setCurrentIndex(id) else: - self.ThemecomboBox.setCurrentIndex(0) + self.ThemeComboBox.setCurrentIndex(0) def accept(self): valid , message = self._validate() @@ -111,7 +126,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.customSlide.theme_name = unicode(self.ThemeComboBox.currentText()) self.custommanager.save_slide(self.customSlide) self.close() @@ -135,6 +150,10 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): def onClearButtonPressed(self): self.VerseTextEdit.clear() + self.editAll = False + self.AddButton.setEnabled(True) + self.EditAllButton.setEnabled(True) + self.SaveButton.setEnabled(False) def onVerseListViewPressed(self, item): self.DeleteButton.setEnabled(True) @@ -151,30 +170,52 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): def onEditButtonPressed(self): self.editText(self.VerseListView.currentItem().text()) + def onEditAllButtonPressed(self): + self.editAll = True + self.AddButton.setEnabled(False) + if self.VerseListView.count() > 0: + verse_list = u'' + for row in range(0, self.VerseListView.count()): + item = self.VerseListView.item(row) + verse_list += item.text() + verse_list += u'\n---\n' + self.editText(verse_list) + def editText(self, text): self.beforeText = text self.VerseTextEdit.setPlainText(text) self.DeleteButton.setEnabled(False) self.EditButton.setEnabled(False) + self.EditAllButton.setEnabled(False) self.SaveButton.setEnabled(True) + self.ClearButton.setEnabled(True) def onSaveButtonPressed(self): - self.VerseListView.currentItem().setText(self.VerseTextEdit.toPlainText()) - #number of lines has change - if len(self.beforeText.split(u'\n')) != len(self.VerseTextEdit.toPlainText().split(u'\n')): - tempList = {} - for row in range(0, self.VerseListView.count()): - tempList[row] = self.VerseListView.item(row).text() + if self.editAll: self.VerseListView.clear() - for row in range (0, len(tempList)): - self.VerseListView.addItem(tempList[row]) - self.VerseListView.repaint() + for row in unicode(self.VerseTextEdit.toPlainText()).split(u'---'): + self.VerseListView.addItem(row) + else: + self.VerseListView.currentItem().setText(self.VerseTextEdit.toPlainText()) + #number of lines has change + if len(self.beforeText.split(u'\n')) != len(self.VerseTextEdit.toPlainText().split(u'\n')): + tempList = {} + for row in range(0, self.VerseListView.count()): + tempList[row] = self.VerseListView.item(row).text() + self.VerseListView.clear() + for row in range (0, len(tempList)): + self.VerseListView.addItem(tempList[row]) + self.VerseListView.repaint() + self.AddButton.setEnabled(True) self.SaveButton.setEnabled(False) self.EditButton.setEnabled(False) + self.EditAllButton.setEnabled(True) + self.VerseTextEdit.clear() def onDeleteButtonPressed(self): self.VerseListView.takeItem(self.VerseListView.currentRow()) self.EditButton.setEnabled(False) + self.EditAllButton.setEnabled(True) def _validate(self): valid = True diff --git a/openlp/plugins/custom/lib/__init__.py b/openlp/plugins/custom/lib/__init__.py index afecb5dd1..92c85de87 100644 --- a/openlp/plugins/custom/lib/__init__.py +++ b/openlp/plugins/custom/lib/__init__.py @@ -18,5 +18,4 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ from manager import CustomManager -from customtab import CustomTab from mediaitem import CustomMediaItem diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py deleted file mode 100644 index 2140cd1e2..000000000 --- a/openlp/plugins/custom/lib/customtab.py +++ /dev/null @@ -1,33 +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 -""" - -from PyQt4 import QtCore, QtGui - -from openlp.core.lib import SettingsTab, translate - -class CustomTab(SettingsTab): - """ - SongsTab is the songs settings tab in the settings dialog. - """ - def __init__(self): - SettingsTab.__init__(self, translate(u'CustomTab', u'Custom'), u'Custom') - - def setupUi(self): - self.setObjectName(u'CustomTab') diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index d264d52d4..3ce6433c7 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -21,7 +21,8 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, translate, contextMenuAction, contextMenuSeparator, BaseListWithDnD +from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, \ + translate, contextMenuAction, contextMenuSeparator, BaseListWithDnD class CustomListView(BaseListWithDnD): def __init__(self, parent=None): @@ -40,77 +41,86 @@ class CustomMediaItem(MediaManagerItem): self.TranslationContext = u'CustomPlugin' self.PluginTextShort = u'Custom' self.ConfigSection = u'custom' + self.IconPath = u'custom/custom' + self.hasFileIcon = False + self.hasNewIcon = True + self.hasEditIcon = True + # this next is a class, not an instance of a class - it will + # be instanced by the base MediaManagerItem + self.ListViewWithDnD_class = CustomListView + self.ServiceItemIconName = u':/custom/custom_image.png' + self.servicePath = None MediaManagerItem.__init__(self, parent, icon, title) self.parent = parent - def setupUi(self): - # Add a toolbar - self.addToolbar() - # Create buttons for the toolbar - ## New Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'New Custom Item'), - translate(u'CustomMediaItem',u'Add a new Custom Item'), - u':/custom/custom_new.png', self.onCustomNewClick, u'CustomNewItem') - ## Edit Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'Edit Custom Item'), - translate(u'CustomMediaItem',u'Edit the selected Custom Item'), - u':/custom/custom_edit.png', self.onCustomEditClick, u'CustomEditItem') - ## Delete Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'Delete Custom Item'), - translate(u'CustomMediaItem',u'Delete the selected Custom Item'), - u':/custom/custom_delete.png', self.onCustomDeleteClick, u'CustomDeleteItem') - ## Separator Line ## - self.addToolbarSeparator() - ## Preview Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'Preview Custom Item'), - translate(u'CustomMediaItem',u'Preview the selected Custom Item'), - u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem') - ## Live Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'Go Live'), - translate(u'CustomMediaItem', u'Send the selected Custom live'), - u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem') - ## Add Custom Button ## - self.addToolbarButton( - translate(u'CustomMediaItem',u'Add Custom To Service'), - translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), - u':/system/system_add.png', self.onAddClick, u'CustomAddItem') - # Add the CustomListView widget - self.CustomWidget = QtGui.QWidget(self) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.CustomWidget.sizePolicy().hasHeightForWidth()) - self.CustomWidget.setSizePolicy(sizePolicy) - self.CustomWidget.setObjectName(u'CustomWidget') - # Add the Custom widget to the page layout - self.PageLayout.addWidget(self.CustomWidget) - self.ListView = CustomListView() - self.ListView.setAlternatingRowColors(True) - self.ListView.setDragEnabled(True) - self.PageLayout.addWidget(self.ListView) - # Signals - QtCore.QObject.connect(self.ListView, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) - #define and add the context menu - self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - self.ListView.addAction(contextMenuAction(self.ListView, - ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), - self.onCustomEditClick)) - self.ListView.addAction(contextMenuSeparator(self.ListView)) - self.ListView.addAction(contextMenuAction( - self.ListView, ':/system/system_preview.png', - translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick)) - self.ListView.addAction(contextMenuAction( - self.ListView, ':/system/system_live.png', - translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick)) - self.ListView.addAction(contextMenuAction( - self.ListView, ':/system/system_add.png', - translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick)) +# def addHeaderBar(self): +# # Add a toolbar +# self.addToolbar() +# # Create buttons for the toolbar +# ## New Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'New Custom Item'), +# translate(u'CustomMediaItem',u'Add a new Custom Item'), +# u':/custom/custom_new.png', self.onCustomNewClick, u'CustomNewItem') +# ## Edit Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'Edit Custom Item'), +# translate(u'CustomMediaItem',u'Edit the selected Custom Item'), +# u':/custom/custom_edit.png', self.onCustomEditClick, u'CustomEditItem') +# ## Delete Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'Delete Custom Item'), +# translate(u'CustomMediaItem',u'Delete the selected Custom Item'), +# u':/custom/custom_delete.png', self.onCustomDeleteClick, u'CustomDeleteItem') +# ## Separator Line ## +# self.addToolbarSeparator() +# ## Preview Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'Preview Custom Item'), +# translate(u'CustomMediaItem',u'Preview the selected Custom Item'), +# u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem') +# ## Live Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'Go Live'), +# translate(u'CustomMediaItem', u'Send the selected Custom live'), +# u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem') +# ## Add Custom Button ## +# self.addToolbarButton( +# translate(u'CustomMediaItem',u'Add Custom To Service'), +# translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), +# u':/system/system_add.png', self.onAddClick, u'CustomAddItem') +# # Add the CustomListView widget +# self.CustomWidget = QtGui.QWidget(self) +# sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) +# sizePolicy.setHorizontalStretch(0) +# sizePolicy.setVerticalStretch(0) +# sizePolicy.setHeightForWidth(self.CustomWidget.sizePolicy().hasHeightForWidth()) +# self.CustomWidget.setSizePolicy(sizePolicy) +# self.CustomWidget.setObjectName(u'CustomWidget') +# # Add the Custom widget to the page layout +# self.PageLayout.addWidget(self.CustomWidget) +# self.ListView = CustomListView() +# self.ListView.setAlternatingRowColors(True) +# self.ListView.setDragEnabled(True) +# self.PageLayout.addWidget(self.ListView) +# # Signals +# QtCore.QObject.connect(self.ListView, +# QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) +# #define and add the context menu +# self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) +# self.ListView.addAction(contextMenuAction(self.ListView, +# ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), +# self.onCustomEditClick)) +# self.ListView.addAction(contextMenuSeparator(self.ListView)) +# self.ListView.addAction(contextMenuAction( +# self.ListView, ':/system/system_preview.png', +# translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick)) +# self.ListView.addAction(contextMenuAction( +# self.ListView, ':/system/system_live.png', +# translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick)) +# self.ListView.addAction(contextMenuAction( +# self.ListView, ':/system/system_add.png', +# translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick)) def initialise(self): self.loadCustomListView(self.parent.custommanager.get_all_slides()) @@ -122,12 +132,12 @@ class CustomMediaItem(MediaManagerItem): custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id)) self.ListView.addItem(custom_name) - def onCustomNewClick(self): + def onNewClick(self): self.parent.edit_custom_form.loadCustom(0) self.parent.edit_custom_form.exec_() self.initialise() - def onCustomEditClick(self): + def onEditClick(self): item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] @@ -135,7 +145,7 @@ class CustomMediaItem(MediaManagerItem): self.parent.edit_custom_form.exec_() self.initialise() - def onCustomDeleteClick(self): + def onDeleteClick(self): item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 467ab20e2..c725e27a4 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -48,7 +48,6 @@ class ImageMediaItem(MediaManagerItem): self.hasEditIcon = False self.OnNewPrompt = u'Select Image(s)' self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)' - self.slidecontroller = u'image' # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = ImageListView diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 96b64b6cb..35f37f704 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -57,7 +57,7 @@ class PresentationMediaItem(MediaManagerItem): MediaManagerItem.__init__(self, parent, icon, title) self.message_listener = MessageListener(controllers) - def addHeaderBar(self): + def addHeaderBar2(self): self.PresentationWidget = QtGui.QWidget(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) diff --git a/resources/forms/editcustomdialog.ui b/resources/forms/editcustomdialog.ui index 3fce3f588..98bc1abb0 100644 --- a/resources/forms/editcustomdialog.ui +++ b/resources/forms/editcustomdialog.ui @@ -14,7 +14,7 @@ Edit Custom Slides - + :/icon/openlp.org-icon-32.bmp:/icon/openlp.org-icon-32.bmp @@ -35,12 +35,19 @@ - + + + true + + + + + @@ -65,6 +72,9 @@ + + + @@ -88,33 +98,46 @@ 0 - + - - - 8 - - - 0 - + - + + + + - Add + Add New - + + + + Edit - + + + + + + Edit All + + + + + + + + Save @@ -122,11 +145,24 @@ + + + Delete + + + + + + + Clear + + + @@ -156,7 +192,11 @@ - + + + + + @@ -185,13 +225,17 @@ TitleEdit - VerseTextEdit_3 - EditButton_3 - SaveButton_3 - CreditEdit + VerseTextEdit + AddButton VerseListView - AddButton_3 + EditButton + EditAllButton + SaveButton DeleteButton + CreditEdit + UpButton + DownButton + ThemeComboBox buttonBox