diff --git a/openlp/plugins/custom/forms/__init__.py b/openlp/plugins/custom/forms/__init__.py index 008caff8d..f31745e14 100644 --- a/openlp/plugins/custom/forms/__init__.py +++ b/openlp/plugins/custom/forms/__init__.py @@ -25,3 +25,4 @@ ############################################################################### from editcustomform import EditCustomForm +from editcustomslideform import EditCustomSlideForm diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 84a310cb9..89cd0b6df 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -26,7 +26,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, translate, SpellTextEdit +from openlp.core.lib import build_icon, translate class Ui_CustomEditDialog(object): def setupUi(self, customEditDialog): @@ -36,6 +36,70 @@ class Ui_CustomEditDialog(object): build_icon(u':/icon/openlp.org-icon-32.bmp')) self.gridLayout = QtGui.QGridLayout(customEditDialog) self.gridLayout.setObjectName(u'gridLayout') + self.horizontalLayout3 = QtGui.QHBoxLayout() + self.horizontalLayout3.setObjectName(u'horizontalLayout3') + self.themeLabel = QtGui.QLabel(customEditDialog) + self.themeLabel.setObjectName(u'themeLabel') + self.horizontalLayout3.addWidget(self.themeLabel) + self.themeComboBox = QtGui.QComboBox(customEditDialog) + self.themeLabel.setBuddy(self.themeComboBox) + self.themeComboBox.setObjectName(u'themeComboBox') + self.horizontalLayout3.addWidget(self.themeComboBox) + self.gridLayout.addLayout(self.horizontalLayout3, 2, 0, 1, 1) + self.horizontalLayout2 = QtGui.QHBoxLayout() + self.horizontalLayout2.setObjectName(u'horizontalLayout2') + self.creditLabel = QtGui.QLabel(customEditDialog) + self.creditLabel.setObjectName(u'creditLabel') + self.horizontalLayout2.addWidget(self.creditLabel) + self.creditEdit = QtGui.QLineEdit(customEditDialog) + self.creditLabel.setBuddy(self.creditEdit) + self.creditEdit.setObjectName(u'creditEdit') + self.horizontalLayout2.addWidget(self.creditEdit) + self.gridLayout.addLayout(self.horizontalLayout2, 3, 0, 1, 1) + self.buttonBox = QtGui.QDialogButtonBox(customEditDialog) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | + QtGui.QDialogButtonBox.Save) + self.buttonBox.setObjectName(u'buttonBox') + self.gridLayout.addWidget(self.buttonBox, 4, 0, 1, 1) + self.horizontalLayout4 = QtGui.QHBoxLayout() + self.horizontalLayout4.setObjectName(u'horizontalLayout4') + self.slideListView = QtGui.QListWidget(customEditDialog) + self.slideListView.setAlternatingRowColors(True) + self.slideListView.setObjectName(u'slideListView') + self.horizontalLayout4.addWidget(self.slideListView) + self.verticalLayout = QtGui.QVBoxLayout() + self.verticalLayout.setObjectName(u'verticalLayout') + self.addButton = QtGui.QPushButton(customEditDialog) + self.addButton.setObjectName(u'addButton') + self.verticalLayout.addWidget(self.addButton) + self.editButton = QtGui.QPushButton(customEditDialog) + self.editButton.setObjectName(u'editButton') + self.verticalLayout.addWidget(self.editButton) + self.editAllButton = QtGui.QPushButton(customEditDialog) + self.editAllButton.setObjectName(u'editAllButton') + self.verticalLayout.addWidget(self.editAllButton) + self.deleteButton = QtGui.QPushButton(customEditDialog) + self.deleteButton.setObjectName(u'deleteButton') + self.verticalLayout.addWidget(self.deleteButton) + spacerItem = QtGui.QSpacerItem(20, 128, QtGui.QSizePolicy.Minimum, + QtGui.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem) + self.upButton = QtGui.QPushButton(customEditDialog) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(u':/services/service_up.png'), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.upButton.setIcon(icon1) + self.upButton.setObjectName(u'upButton') + self.verticalLayout.addWidget(self.upButton) + self.downButton = QtGui.QPushButton(customEditDialog) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(u':/services/service_down.png'), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.downButton.setIcon(icon2) + self.downButton.setObjectName(u'downButton') + self.verticalLayout.addWidget(self.downButton) + self.horizontalLayout4.addLayout(self.verticalLayout) + self.gridLayout.addLayout(self.horizontalLayout4, 1, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(u'horizontalLayout') self.titleLabel = QtGui.QLabel(customEditDialog) @@ -46,91 +110,6 @@ class Ui_CustomEditDialog(object): self.titleEdit.setObjectName(u'titleEdit') self.horizontalLayout.addWidget(self.titleEdit) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) - self.horizontalLayout4 = QtGui.QHBoxLayout() - self.horizontalLayout4.setObjectName(u'horizontalLayout4') - self.verseListView = QtGui.QListWidget(customEditDialog) - self.verseListView.setAlternatingRowColors(True) - self.verseListView.setObjectName(u'verseListView') - self.horizontalLayout4.addWidget(self.verseListView) - self.verticalLayout = QtGui.QVBoxLayout() - self.verticalLayout.setObjectName(u'verticalLayout') - self.upButton = QtGui.QPushButton(customEditDialog) - self.upButton.setIcon(build_icon(u':/services/service_up.png')) - self.upButton.setObjectName(u'upButton') - self.verticalLayout.addWidget(self.upButton) - spacerItem = QtGui.QSpacerItem(20, 128, QtGui.QSizePolicy.Minimum, - QtGui.QSizePolicy.Expanding) - self.verticalLayout.addItem(spacerItem) - self.downButton = QtGui.QPushButton(customEditDialog) - self.downButton.setIcon(build_icon(u':/services/service_down.png')) - self.downButton.setObjectName(u'downButton') - self.verticalLayout.addWidget(self.downButton) - self.horizontalLayout4.addLayout(self.verticalLayout) - self.gridLayout.addLayout(self.horizontalLayout4, 1, 0, 1, 1) - self.editWidget = QtGui.QWidget(customEditDialog) - self.editWidget.setObjectName(u'editWidget') - self.editLayout3 = QtGui.QHBoxLayout(self.editWidget) - self.editLayout3.setSpacing(8) - self.editLayout3.setMargin(0) - self.editLayout3.setObjectName(u'editLayout3') - self.verseTextEdit = SpellTextEdit(self) - self.verseTextEdit.setObjectName(u'verseTextEdit') - self.editLayout3.addWidget(self.verseTextEdit) - self.buttonWidget = QtGui.QWidget(self.editWidget) - self.buttonWidget.setObjectName(u'buttonWidget') - self.verticalLayout2 = QtGui.QVBoxLayout(self.buttonWidget) - self.verticalLayout2.setObjectName(u'verticalLayout2') - self.addButton = QtGui.QPushButton(self.buttonWidget) - self.addButton.setObjectName(u'addButton') - self.verticalLayout2.addWidget(self.addButton) - self.editButton = QtGui.QPushButton(self.buttonWidget) - self.editButton.setObjectName(u'editButton') - self.verticalLayout2.addWidget(self.editButton) - self.editAllButton = QtGui.QPushButton(self.buttonWidget) - self.editAllButton.setObjectName(u'editAllButton') - self.verticalLayout2.addWidget(self.editAllButton) - self.saveButton = QtGui.QPushButton(self.buttonWidget) - self.saveButton.setObjectName(u'saveButton') - self.verticalLayout2.addWidget(self.saveButton) - self.deleteButton = QtGui.QPushButton(self.buttonWidget) - self.deleteButton.setObjectName(u'deleteButton') - self.verticalLayout2.addWidget(self.deleteButton) - self.clearButton = QtGui.QPushButton(self.buttonWidget) - self.clearButton.setObjectName(u'clearButton') - self.verticalLayout2.addWidget(self.clearButton) - self.splitButton = QtGui.QPushButton(self.buttonWidget) - self.splitButton.setObjectName(u'splitButton') - self.verticalLayout2.addWidget(self.splitButton) - spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, - QtGui.QSizePolicy.Expanding) - self.verticalLayout2.addItem(spacerItem1) - self.editLayout3.addWidget(self.buttonWidget) - self.gridLayout.addWidget(self.editWidget, 2, 0, 1, 1) - self.horizontalLayout3 = QtGui.QHBoxLayout() - self.horizontalLayout3.setObjectName(u'horizontalLayout3') - self.themeLabel = QtGui.QLabel(customEditDialog) - self.themeLabel.setObjectName(u'themeLabel') - self.horizontalLayout3.addWidget(self.themeLabel) - self.themeComboBox = QtGui.QComboBox(customEditDialog) - self.themeLabel.setBuddy(self.themeComboBox) - self.themeComboBox.setObjectName(u'themeComboBox') - self.horizontalLayout3.addWidget(self.themeComboBox) - self.gridLayout.addLayout(self.horizontalLayout3, 3, 0, 1, 1) - self.horizontalLayout2 = QtGui.QHBoxLayout() - self.horizontalLayout2.setObjectName(u'horizontalLayout2') - self.creditLabel = QtGui.QLabel(customEditDialog) - self.creditLabel.setObjectName(u'creditLabel') - self.horizontalLayout2.addWidget(self.creditLabel) - self.creditEdit = QtGui.QLineEdit(customEditDialog) - self.creditLabel.setBuddy(self.creditEdit) - self.creditEdit.setObjectName(u'creditEdit') - self.horizontalLayout2.addWidget(self.creditEdit) - self.gridLayout.addLayout(self.horizontalLayout2, 4, 0, 1, 1) - self.buttonBox = QtGui.QDialogButtonBox(customEditDialog) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Save) - self.buttonBox.setObjectName(u'buttonBox') - self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 1) self.retranslateUi(customEditDialog) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), customEditDialog.accept) @@ -143,46 +122,32 @@ class Ui_CustomEditDialog(object): translate('CustomPlugin.EditCustomForm', 'Edit Custom Slides')) self.upButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Move slide up one ' - 'position.')) + 'position.')) self.downButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Move slide down one ' - 'position.')) + 'position.')) self.titleLabel.setText( translate('CustomPlugin.EditCustomForm', '&Title:')) self.addButton.setText( - translate('CustomPlugin.EditCustomForm', 'Add New')) + translate('CustomPlugin.EditCustomForm', '&Add')) self.addButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Add a new slide at ' - 'bottom.')) + 'bottom.')) self.editButton.setText( - translate('CustomPlugin.EditCustomForm', 'Edit')) + translate('CustomPlugin.EditCustomForm', '&Edit')) self.editButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Edit the selected ' - 'slide.')) + 'slide.')) self.editAllButton.setText( - translate('CustomPlugin.EditCustomForm', 'Edit All')) + translate('CustomPlugin.EditCustomForm', 'Ed&it All')) self.editAllButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Edit all the slides at ' - 'once.')) - self.saveButton.setText( - translate('CustomPlugin.EditCustomForm', 'Save')) - self.saveButton.setToolTip( - translate('CustomPlugin.EditCustomForm', 'Save the slide currently ' - 'being edited.')) + 'once.')) self.deleteButton.setText( - translate('CustomPlugin.EditCustomForm', 'Delete')) + translate('CustomPlugin.EditCustomForm', '&Delete')) self.deleteButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Delete the selected ' - 'slide.')) - self.clearButton.setText( - translate('CustomPlugin.EditCustomForm', 'Clear')) - self.clearButton.setToolTip( - translate('CustomPlugin.EditCustomForm', 'Clear edit area')) - self.splitButton.setText( - translate('CustomPlugin.EditCustomForm', 'Split Slide')) - self.splitButton.setToolTip( - translate('CustomPlugin.EditCustomForm', 'Split a slide into two ' - 'by inserting a slide splitter.')) + 'slide.')) self.themeLabel.setText( translate('CustomPlugin.EditCustomForm', 'The&me:')) self.creditLabel.setText( diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 910fe65e7..8ee4d2673 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -32,6 +32,7 @@ from openlp.core.lib import Receiver, translate from openlp.plugins.custom.lib import CustomXMLBuilder, CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide from editcustomdialog import Ui_CustomEditDialog +from editcustomslideform import EditCustomSlideForm log = logging.getLogger(__name__) @@ -40,7 +41,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): Class documentation goes here. """ log.info(u'Custom Editor loaded') - def __init__(self, custommanager, parent = None): + def __init__(self, custommanager, parent=None): """ Constructor """ @@ -61,28 +62,20 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): 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.splitButton, - QtCore.SIGNAL(u'pressed()'), self.onSplitButtonPressed) - QtCore.QObject.connect(self.verseListView, - QtCore.SIGNAL(u'itemDoubleClicked(QListWidgetItem*)'), - self.onVerseListViewSelected) - QtCore.QObject.connect(self.verseListView, + QtCore.QObject.connect(self.slideListView, QtCore.SIGNAL(u'itemClicked(QListWidgetItem*)'), - self.onVerseListViewPressed) + self.onSlideListViewPressed) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) - # Create other objects and forms + # Create other objects and forms. self.custommanager = custommanager + self.editSlideForm = EditCustomSlideForm(self) self.initialise() def onPreview(self, button): @@ -92,21 +85,15 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): Receiver.send_message(u'custom_preview') def initialise(self): - self.editAll = False self.addButton.setEnabled(True) self.deleteButton.setEnabled(False) self.editButton.setEnabled(False) self.editAllButton.setEnabled(True) - self.saveButton.setEnabled(False) - self.clearButton.setEnabled(False) - self.splitButton.setEnabled(False) self.titleEdit.setText(u'') self.creditEdit.setText(u'') - self.verseTextEdit.clear() - self.verseListView.clear() - #make sure we have a new item + self.slideListView.clear() + # Make sure we have a new item. self.customSlide = CustomSlide() - self.themeComboBox.addItem(u'') def loadThemes(self, themelist): self.themeComboBox.clear() @@ -115,6 +102,16 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.themeComboBox.addItem(themename) def loadCustom(self, id, preview=False): + """ + Called when editing or creating a new custom. + + ``id`` + The cutom's id. If zero, then a new custom is created. + + ``preview`` + States whether the custom is edited while being previewed in the + preview panel. + """ self.customSlide = CustomSlide() self.initialise() if id != 0: @@ -122,9 +119,9 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.titleEdit.setText(self.customSlide.title) self.creditEdit.setText(self.customSlide.credits) customXML = CustomXMLParser(self.customSlide.text) - verseList = customXML.get_verses() - for verse in verseList: - self.verseListView.addItem(verse[1]) + slideList = customXML.get_verses() + for slide in slideList: + self.slideListView.addItem(slide[1]) theme = self.customSlide.theme_name id = self.themeComboBox.findText(theme, QtCore.Qt.MatchExactly) if id == -1: @@ -132,7 +129,8 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.themeComboBox.setCurrentIndex(id) else: self.themeComboBox.setCurrentIndex(0) - #if not preview hide the preview button + self.editAllButton.setEnabled(False) + # If not preview hide the preview button. self.previewButton.setVisible(False) if preview: self.previewButton.setVisible(True) @@ -148,6 +146,9 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.close() def saveCustom(self): + """ + Saves the custom. + """ valid, message = self._validate() if not valid: QtGui.QMessageBox.critical(self, @@ -157,9 +158,9 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): sxml.new_document() sxml.add_lyrics_to_song() count = 1 - for i in range(0, self.verseListView.count()): + for i in range(0, self.slideListView.count()): sxml.add_verse_to_lyrics(u'custom', unicode(count), - unicode(self.verseListView.item(i).text())) + unicode(self.slideListView.item(i).text())) count += 1 self.customSlide.title = unicode(self.titleEdit.displayText(), u'utf-8') self.customSlide.text = unicode(sxml.extract_xml(), u'utf-8') @@ -170,114 +171,103 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): return self.custommanager.save_object(self.customSlide) def onUpButtonPressed(self): - selectedRow = self.verseListView.currentRow() + selectedRow = self.slideListView.currentRow() if selectedRow != 0: - qw = self.verseListView.takeItem(selectedRow) - self.verseListView.insertItem(selectedRow - 1, qw) - self.verseListView.setCurrentRow(selectedRow - 1) + qw = self.slideListView.takeItem(selectedRow) + self.slideListView.insertItem(selectedRow - 1, qw) + self.slideListView.setCurrentRow(selectedRow - 1) def onDownButtonPressed(self): - selectedRow = self.verseListView.currentRow() + selectedRow = self.slideListView.currentRow() # zero base arrays - if selectedRow != self.verseListView.count() - 1: - qw = self.verseListView.takeItem(selectedRow) - self.verseListView.insertItem(selectedRow + 1, qw) - self.verseListView.setCurrentRow(selectedRow + 1) + if selectedRow != self.slideListView.count() - 1: + qw = self.slideListView.takeItem(selectedRow) + self.slideListView.insertItem(selectedRow + 1, qw) + self.slideListView.setCurrentRow(selectedRow + 1) - 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): + def onSlideListViewPressed(self, item): self.deleteButton.setEnabled(True) self.editButton.setEnabled(True) - def onVerseListViewSelected(self, item): - self.editText(item.text()) - def onAddButtonPressed(self): - self.verseListView.addItem(self.verseTextEdit.toPlainText()) - self.deleteButton.setEnabled(False) - self.verseTextEdit.clear() + self.editSlideForm.setText(u'') + if self.editSlideForm.exec_(): + for slide in self.editSlideForm.getText(): + self.slideListView.addItem(slide) + self.editAllButton.setEnabled(True) def onEditButtonPressed(self): - self.editText(self.verseListView.currentItem().text()) + self.editSlideForm.setText(self.slideListView.currentItem().text()) + if self.editSlideForm.exec_(): + self.updateSlideList(self.editSlideForm.getText()) def onEditAllButtonPressed(self): - self.editAll = True - self.addButton.setEnabled(False) - self.splitButton.setEnabled(True) - 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() - if row != self.verseListView.count() - 1: - verse_list += u'\n[---]\n' - self.editText(verse_list) + """ + Edits all slides. + """ + if self.slideListView.count() > 0: + slide_list = u'' + for row in range(0, self.slideListView.count()): + item = self.slideListView.item(row) + slide_list += item.text() + if row != self.slideListView.count() - 1: + slide_list += u'\n[---]\n' + self.editSlideForm.setText(slide_list) + if self.editSlideForm.exec_(): + self.updateSlideList(self.editSlideForm.getText(), True) - 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 updateSlideList(self, slides, edit_all=False): + """ + Updates the slide list after editing slides. - def onSaveButtonPressed(self): - if self.editAll: - self.verseListView.clear() - for row in unicode(self.verseTextEdit.toPlainText()).split( - u'\n[---]\n'): - self.verseListView.addItem(row) + ``slides`` + A list of all slides which have been edited. + + ``edit_all`` + Indicates if all slides or only one slide has been edited. + """ + if len(slides) == 1: + self.slideListView.currentItem().setText(slides[0]) 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.splitButton.setEnabled(False) - self.verseTextEdit.clear() - - def onSplitButtonPressed(self): - if self.verseTextEdit.textCursor().columnNumber() != 0: - self.verseTextEdit.insertPlainText(u'\n') - self.verseTextEdit.insertPlainText(u'[---]\n' ) - self.verseTextEdit.setFocus() + if edit_all: + self.slideListView.clear() + for slide in slides: + self.slideListView.addItem(slide) + else: + old_slides = [] + old_row = self.slideListView.currentRow() + # Create a list with all (old/unedited) slides. + old_slides = [self.slideListView.item(row).text() for row in \ + range(0, self.slideListView.count())] + self.slideListView.clear() + old_slides.pop(old_row) + # Insert all slides to make the old_slides list complete. + for slide in slides: + old_slides.insert(old_row, slide) + for slide in old_slides: + self.slideListView.addItem(slide) + self.slideListView.repaint() def onDeleteButtonPressed(self): - self.verseListView.takeItem(self.verseListView.currentRow()) - self.editButton.setEnabled(False) + self.slideListView.takeItem(self.slideListView.currentRow()) + self.editButton.setEnabled(True) self.editAllButton.setEnabled(True) + if self.slideListView.count() == 0: + self.deleteButton.setEnabled(False) + self.editButton.setEnabled(False) + self.editAllButton.setEnabled(False) def _validate(self): + """ + Checks whether a custom is valid or not. + """ + # We must have a title. if len(self.titleEdit.displayText()) == 0: self.titleEdit.setFocus() return False, translate('CustomPlugin.EditCustomForm', 'You need to type in a title.') - # must have 1 slide - if self.verseListView.count() == 0: - self.verseTextEdit.setFocus() + # We must have one slide. + if self.slideListView.count() == 0: return False, translate('CustomPlugin.EditCustomForm', 'You need to add at least one slide') - if self.verseTextEdit.toPlainText(): - self.verseTextEdit.setFocus() - return False, translate('CustomPlugin.EditCustomForm', - 'You have one or more unsaved slides, please either save your ' - 'slide(s) or clear your changes.') return True, u'' diff --git a/openlp/plugins/custom/forms/editcustomslidedialog.py b/openlp/plugins/custom/forms/editcustomslidedialog.py new file mode 100644 index 000000000..ce4cf6e29 --- /dev/null +++ b/openlp/plugins/custom/forms/editcustomslidedialog.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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, SpellTextEdit + +class Ui_CustomSlideEditDialog(object): + def setupUi(self, customSlideEditDialog): + customSlideEditDialog.setObjectName(u'customSlideEditDialog') + customSlideEditDialog.resize(474, 442) + self.buttonBox = QtGui.QDialogButtonBox(customSlideEditDialog) + self.buttonBox.setGeometry(QtCore.QRect(8, 407, 458, 32)) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | + QtGui.QDialogButtonBox.Save) + self.buttonBox.setObjectName(u'buttonBox') + self.slideTextEdit = SpellTextEdit(self) + self.slideTextEdit.setGeometry(QtCore.QRect(8, 8, 458, 349)) + self.slideTextEdit.setObjectName(u'slideTextEdit') + self.splitButton = QtGui.QPushButton(customSlideEditDialog) + self.splitButton.setGeometry(QtCore.QRect(380, 370, 85, 27)) + self.splitButton.setObjectName(u'splitButton') + self.retranslateUi(customSlideEditDialog) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), + customSlideEditDialog.accept) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), + customSlideEditDialog.reject) + QtCore.QMetaObject.connectSlotsByName(customSlideEditDialog) + + def retranslateUi(self, customSlideEditDialog): + self.splitButton.setText( + translate('CustomPlugin.EditCustomForm', 'Split Slide')) + self.splitButton.setToolTip( + translate('CustomPlugin.EditCustomForm', 'Split a slide into two ' + 'by inserting a slide splitter.')) diff --git a/openlp/plugins/custom/forms/editcustomslideform.py b/openlp/plugins/custom/forms/editcustomslideform.py new file mode 100644 index 000000000..ff396658f --- /dev/null +++ b/openlp/plugins/custom/forms/editcustomslideform.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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 + +from openlp.core.lib import Receiver, translate +from editcustomslidedialog import Ui_CustomSlideEditDialog + +log = logging.getLogger(__name__) + +class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog): + """ + Class documentation goes here. + """ + log.info(u'Custom Verse Editor loaded') + def __init__(self, parent=None): + """ + Constructor + """ + QtGui.QDialog.__init__(self, parent) + self.setupUi(self) + # Connecting signals and slots + QtCore.QObject.connect(self.splitButton, + QtCore.SIGNAL(u'pressed()'), self.onSplitButtonPressed) + + def setText(self, text): + """ + Set the text for slideTextEdit. + + ``text`` + The text (unicode). + """ + self.slideTextEdit.clear() + if text: + self.slideTextEdit.setPlainText(text) + self.slideTextEdit.setFocus() + + def getText(self): + """ + Returns a list with all slides. + """ + return self.slideTextEdit.toPlainText().split(u'\n[---]\n') + + def onSplitButtonPressed(self): + """ + Splits a slide in two slides. + """ + if self.slideTextEdit.textCursor().columnNumber() != 0: + self.slideTextEdit.insertPlainText(u'\n') + self.slideTextEdit.insertPlainText(u'[---]\n' ) + self.slideTextEdit.setFocus() diff --git a/resources/forms/editcustomdialog.ui b/resources/forms/editcustomdialog.ui index 44ce46ca7..7c714baab 100644 --- a/resources/forms/editcustomdialog.ui +++ b/resources/forms/editcustomdialog.ui @@ -18,20 +18,48 @@ :/icon/openlp.org-icon-32.bmp:/icon/openlp.org-icon-32.bmp - - + + - + - Title: + Theme: - + + + + + + + + + + + Credits: + + + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Save + + + @@ -44,16 +72,42 @@ - + - + - + Add New - - - :/services/service_up.png:/services/service_up.png + + + + + + + + + Edit + + + + + + + + + + Edit All + + + + + + + + + + Delete @@ -70,6 +124,20 @@ + + + + + + + + + + + :/services/service_up.png:/services/service_up.png + + + @@ -88,166 +156,26 @@ - - - - - 8 - - - 0 - - - - - - - - - - - - - - Add New - - - - - - - - - - Edit - - - - - - - - - - Edit All - - - - - - - - - - Save - - - - - - - - - - Delete - - - - - - - - - - Clear - - - - - - - - - - Split Slide - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - + + - + - Theme: + Title: - - - - - + - - - - - - Credits: - - - - - - - - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Save - - - TitleEdit - VerseTextEdit - AddButton VerseListView - EditButton - EditAllButton - SaveButton - DeleteButton CreditEdit - UpButton - DownButton ThemeComboBox diff --git a/resources/forms/editcustomslidedialog.ui b/resources/forms/editcustomslidedialog.ui new file mode 100644 index 000000000..f537f854e --- /dev/null +++ b/resources/forms/editcustomslidedialog.ui @@ -0,0 +1,96 @@ + + + customSlideEditDialog + + + + 0 + 0 + 474 + 442 + + + + Dialog + + + + + 8 + 407 + 458 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Save + + + + + + 8 + 8 + 458 + 349 + + + + + + + 380 + 370 + 85 + 27 + + + + + + + Split Slide + + + + + + + + + buttonBox + accepted() + customSlideEditDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + customSlideEditDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +