diff --git a/.bzrignore b/.bzrignore index 073fb531a..2620fea42 100644 --- a/.bzrignore +++ b/.bzrignore @@ -19,3 +19,4 @@ _eric4project *.qm openlp/core/resources.py.old *.qm +resources/windows/warnOpenLP.txt diff --git a/MANIFEST.in b/MANIFEST.in index efccdf79d..992685bcf 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,6 +3,7 @@ recursive-include openlp *.sqlite recursive-include openlp *.csv recursive-include openlp *.html recursive-include openlp *.js +recursive-include openlp *.css recursive-include openlp *.qm recursive-include documentation * recursive-include resources/forms * diff --git a/openlp.pyw b/openlp.pyw index 17743903f..f3455962d 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -5,8 +5,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -162,6 +162,10 @@ class OpenLP(QtGui.QApplication): #provide a listener for widgets to reqest a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -201,8 +205,21 @@ class OpenLP(QtGui.QApplication): self.exceptionForm = ExceptionForm(self.mainWindow) self.exceptionForm.exceptionTextEdit.setPlainText( ''.join(format_exception(exctype, value, traceback))) + self.setNormalCursor() self.exceptionForm.exec_() + def setBusyCursor(self): + """ + Sets the Busy Cursor for the Application + """ + self.setOverrideCursor(QtCore.Qt.BusyCursor) + + def setNormalCursor(self): + """ + Sets the Normal Cursor forthe Application + """ + self.restoreOverrideCursor() + def main(): """ The main function which parses command line options and then runs diff --git a/openlp/__init__.py b/openlp/__init__.py index f22f0ef70..b88547df6 100644 --- a/openlp/__init__.py +++ b/openlp/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### """ The :mod:`openlp` module contains all the project produced OpenLP functionality -""" +""" \ No newline at end of file diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index a6cfa60c7..17db85184 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -28,4 +28,4 @@ The :mod:`core` module provides all core application functions All the core functions of the OpenLP application including the GUI, settings, logging and a plugin framework are contained within the openlp.core module. -""" +""" \ No newline at end of file diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 956b6c787..ebbe31597 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -84,7 +84,8 @@ html_expands.append({u'desc': u'Underline', u'start tag': u'{u}', u'start html': u'', u'end tag': u'{/u}', u'end html': u'', u'protected': True}) -def translate(context, text, comment=None): +def translate(context, text, comment=None, + encoding=QtCore.QCoreApplication.CodecForTr, n=-1): """ A special shortcut method to wrap around the Qt4 translation functions. This abstracts the translation procedure so that we can change it if at a @@ -101,7 +102,7 @@ def translate(context, text, comment=None): An identifying string for when the same text is used in different roles within the same context. """ - return QtCore.QCoreApplication.translate(context, text, comment) + return QtCore.QCoreApplication.translate(context, text, comment, encoding, n) def get_text_file_string(text_file): """ diff --git a/openlp/core/lib/baselistwithdnd.py b/openlp/core/lib/baselistwithdnd.py index 2ad500e9e..86535f6e7 100644 --- a/openlp/core/lib/baselistwithdnd.py +++ b/openlp/core/lib/baselistwithdnd.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -52,4 +52,4 @@ class BaseListWithDnD(QtGui.QListWidget): mimeData = QtCore.QMimeData() drag.setMimeData(mimeData) mimeData.setText(self.PluginName) - drag.start(QtCore.Qt.CopyAction) + drag.start(QtCore.Qt.CopyAction) \ No newline at end of file diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index 8afa02111..c2e1243ce 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -295,4 +295,4 @@ class Manager(object): if self.is_dirty: engine = create_engine(self.db_url) if self.db_url.startswith(u'sqlite'): - engine.execute("vacuum") + engine.execute("vacuum") \ No newline at end of file diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index 15fd74ebc..9c4187337 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -37,13 +37,15 @@ class OpenLPDockWidget(QtGui.QDockWidget): """ Custom DockWidget class to handle events """ - def __init__(self, parent=None, name=None): + def __init__(self, parent=None, name=None, icon=None): """ Initialise the DockWidget """ + log.debug(u'Initialise the %s widget' % name) QtGui.QDockWidget.__init__(self, parent) self.parent = parent if name: self.setObjectName(name) + if icon: + self.setWindowIcon(icon) self.setFloating(False) - log.debug(u'Init done') diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index 1080cd2f5..63ad5b796 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -220,6 +220,21 @@ class EventReceiver(QtCore.QObject): Waits for openlp to do something "interesting" and sends a remotes_poll_response signal when it does + ``openlp_warning_message`` + Displays a standalone Warning Message + + ``openlp_error_message`` + Displays a standalone Error Message + + ``openlp_information_message`` + Displays a standalone Information Message + + ``cursor_busy`` + Makes the cursor got to a busy form + + ``cursor_normal`` + Resets the cursor to default + """ def __init__(self): """ diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 9bbaa65d1..0a26382f8 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -641,4 +641,4 @@ def build_alert_css(alertTab, width): align = u'top' alert = style % (width, align, alertTab.font_face, alertTab.font_size, alertTab.font_color, alertTab.bg_color) - return alert + return alert \ No newline at end of file diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 14de141fc..0be1a01c8 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -165,4 +165,4 @@ class ImageManager(QtCore.QObject): image = self._cache[key] if image.dirty: image.image_bytes = image_to_byte(image.image) - image.dirty = False + image.dirty = False \ No newline at end of file diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index acf24ae22..a9484795b 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -284,34 +284,30 @@ class MediaManagerItem(QtGui.QWidget): self.listView.addAction( context_menu_action( self.listView, u':/general/general_edit.png', - unicode(translate('OpenLP.MediaManagerItem', '&Edit %s')) % - name_string[u'singular'], + self.plugin.getString(StringContent.Edit)[u'title'], self.onEditClick)) self.listView.addAction(context_menu_separator(self.listView)) if self.hasDeleteIcon: self.listView.addAction( context_menu_action( self.listView, u':/general/general_delete.png', - unicode(translate('OpenLP.MediaManagerItem', - '&Delete %s')) % - name_string[u'singular'], + self.plugin.getString(StringContent.Delete)[u'title'], self.onDeleteClick)) self.listView.addAction(context_menu_separator(self.listView)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_preview.png', - unicode(translate('OpenLP.MediaManagerItem', '&Preview %s')) % - name_string[u'singular'], + self.plugin.getString(StringContent.Preview)[u'title'], self.onPreviewClick)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_live.png', - translate('OpenLP.MediaManagerItem', '&Show Live'), + self.plugin.getString(StringContent.Live)[u'title'], self.onLiveClick)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_add.png', - translate('OpenLP.MediaManagerItem', '&Add to Service'), + self.plugin.getString(StringContent.Service)[u'title'], self.onAddClick)) if self.addToServiceItem: self.listView.addAction( @@ -353,11 +349,13 @@ class MediaManagerItem(QtGui.QWidget): self.OnNewFileMasks) log.info(u'New files(s) %s', unicode(files)) if files: + Receiver.send_message(u'cursor_busy') self.loadList(files) lastDir = os.path.split(unicode(files[0]))[0] SettingsManager.set_last_dir(self.settingsSection, lastDir) SettingsManager.set_list(self.settingsSection, self.settingsSection, self.getFileList()) + Receiver.send_message(u'cursor_normal') def getFileList(self): """ @@ -381,7 +379,7 @@ class MediaManagerItem(QtGui.QWidget): if os.path.exists(thumb): filedate = os.stat(file).st_mtime thumbdate = os.stat(thumb).st_mtime - #if file updated rebuild icon + # if file updated rebuild icon if filedate > thumbdate: self.iconFromFile(file, thumb) else: @@ -445,7 +443,7 @@ class MediaManagerItem(QtGui.QWidget): translate('OpenLP.MediaManagerItem', 'You must select one or more items to preview.')) else: - log.debug(self.plugin.name + u' Preview requested') + log.debug(u'%s Preview requested', self.plugin.name) serviceItem = self.buildServiceItem() if serviceItem: serviceItem.from_plugin = True @@ -462,7 +460,7 @@ class MediaManagerItem(QtGui.QWidget): translate('OpenLP.MediaManagerItem', 'You must select one or more items to send live.')) else: - log.debug(self.plugin.name + u' Live requested') + log.debug(u'%s Live requested', self.plugin.name) serviceItem = self.buildServiceItem() if serviceItem: serviceItem.from_plugin = True @@ -481,7 +479,7 @@ class MediaManagerItem(QtGui.QWidget): # Is it posssible to process multiple list items to generate # multiple service items? if self.singleServiceItem or self.remoteTriggered: - log.debug(self.plugin.name + u' Add requested') + log.debug(u'%s Add requested', self.plugin.name) serviceItem = self.buildServiceItem(None, True) if serviceItem: serviceItem.from_plugin = False @@ -505,7 +503,7 @@ class MediaManagerItem(QtGui.QWidget): translate('OpenLP.MediaManagerItem', 'You must select one or more items')) else: - log.debug(self.plugin.name + u' Add requested') + log.debug(u'%s Add requested', self.plugin.name) serviceItem = self.parent.serviceManager.getServiceItem() if not serviceItem: QtGui.QMessageBox.information(self, diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index f73b58735..8bc5fdb96 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -314,4 +314,4 @@ class Plugin(QtCore.QObject): """ Called to define all translatable texts of the plugin """ - pass + pass \ No newline at end of file diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index 362d8c197..8081cbf71 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -221,4 +221,4 @@ class PluginManager(object): for plugin in self.plugins: if plugin.isActive(): plugin.finalise() - log.info(u'Finalisation Complete for %s ' % plugin.name) + log.info(u'Finalisation Complete for %s ' % plugin.name) \ No newline at end of file diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 68839f16d..fe118b76b 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -144,4 +144,4 @@ class Renderer(object): html_text = html_text[:len(html_text)-4] formatted.append(html_text) log.debug(u'format_slide - End') - return formatted + return formatted \ No newline at end of file diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index f448217ee..5896ca4e6 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -261,4 +261,4 @@ class RenderManager(object): log.debug(u'calculate default %d, %d, %f', self.width, self.height, self.screen_ratio ) # 90% is start of footer - self.footer_start = int(self.height * 0.90) + self.footer_start = int(self.height * 0.90) \ No newline at end of file diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py new file mode 100644 index 000000000..738661e14 --- /dev/null +++ b/openlp/core/lib/searchedit.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 build_icon + +log = logging.getLogger(__name__) + +class SearchEdit(QtGui.QLineEdit): + """ + This is a specialised QLineEdit with a "clear" button inside for searches. + """ + + def __init__(self, parent): + """ + Constructor. + """ + QtGui.QLineEdit.__init__(self, parent) + self._currentSearchType = -1 + self.clearButton = QtGui.QToolButton(self) + self.clearButton.setIcon(build_icon(u':/system/clear_shortcut.png')) + self.clearButton.setCursor(QtCore.Qt.ArrowCursor) + self.clearButton.setStyleSheet( + u'QToolButton { border: none; padding: 0px; }') + self.clearButton.resize(18, 18) + self.clearButton.hide() + QtCore.QObject.connect( + self.clearButton, + QtCore.SIGNAL(u'clicked()'), + self._onClearButtonClicked + ) + QtCore.QObject.connect( + self, + QtCore.SIGNAL(u'textChanged(const QString&)'), + self._onSearchEditTextChanged + ) + self._updateStyleSheet() + + def _updateStyleSheet(self): + """ + Internal method to update the stylesheet depending on which widgets are + available and visible. + """ + frameWidth = self.style().pixelMetric( + QtGui.QStyle.PM_DefaultFrameWidth) + rightPadding = self.clearButton.sizeHint().width() + frameWidth + if hasattr(self, u'menuButton'): + leftPadding = self.menuButton.width() + self.setStyleSheet( + u'QLineEdit { padding-left: %spx; padding-right: %spx; } ' % \ + (leftPadding, rightPadding)) + else: + self.setStyleSheet(u'QLineEdit { padding-right: %spx; } ' % \ + rightPadding) + msz = self.minimumSizeHint(); + self.setMinimumSize( + max(msz.width(), + self.clearButton.sizeHint().width() + (frameWidth * 2) + 2), + max(msz.height(), + self.clearButton.height() + (frameWidth * 2) + 2) + ) + + def resizeEvent(self, event): + """ + Reimplemented method to react to resizing of the widget. + + ``event`` + The event that happened. + """ + sz = self.clearButton.sizeHint() + frameWidth = self.style().pixelMetric( + QtGui.QStyle.PM_DefaultFrameWidth) + self.clearButton.move(self.rect().right() - frameWidth - sz.width(), + (self.rect().bottom() + 1 - sz.height()) / 2) + if hasattr(self, u'menuButton'): + sz = self.menuButton.sizeHint() + self.menuButton.move(self.rect().left() + frameWidth + 2, + (self.rect().bottom() + 1 - sz.height()) / 2) + + def currentSearchType(self): + """ + Readonly property to return the current search type. + """ + return self._currentSearchType + + def setSearchTypes(self, items): + """ + A list of tuples to be used in the search type menu. The first item in + the list will be preselected as the default. + + ``items`` + The list of tuples to use. The tuples should contain an integer + identifier, an icon (QIcon instance or string) and a title for the + item in the menu. In short, they should look like this:: + + (, , ) + + For instance:: + + (1, <QIcon instance>, "Titles") + + Or:: + + (2, ":/songs/authors.png", "Authors") + """ + menu = QtGui.QMenu(self) + first = None + for identifier, icon, title in items: + action = QtGui.QAction(build_icon(icon), title, menu) + action.setData(QtCore.QVariant(identifier)) + menu.addAction(action) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), + self._onMenuActionTriggered) + if first is None: + first = action + self._currentSearchType = identifier + if not hasattr(self, u'menuButton'): + self.menuButton = QtGui.QToolButton(self) + self.menuButton.setIcon(build_icon(u':/system/clear_shortcut.png')) + self.menuButton.setCursor(QtCore.Qt.ArrowCursor) + self.menuButton.setPopupMode(QtGui.QToolButton.InstantPopup) + self.menuButton.setStyleSheet( + u'QToolButton { border: none; padding: 0px 10px 0px 0px; }') + self.menuButton.resize(QtCore.QSize(28, 18)) + self.menuButton.setMenu(menu) + self.menuButton.setDefaultAction(first) + self.menuButton.show() + self._updateStyleSheet() + + def _onSearchEditTextChanged(self, text): + """ + Internally implemented slot to react to when the text in the line edit + has changed so that we can show or hide the clear button. + + ``text`` + A :class:`~PyQt4.QtCore.QString` instance which represents the text + in the line edit. + """ + self.clearButton.setVisible(not text.isEmpty()) + + def _onClearButtonClicked(self): + """ + Internally implemented slot to react to the clear button being pressed + to clear the line edit. Once it has cleared the line edit, it emits the + ``cleared()`` signal so that an application can react to the clearing + of the line edit. + """ + self.clear() + self.emit(QtCore.SIGNAL(u'cleared()')) + + def _onMenuActionTriggered(self): + """ + Internally implemented slot to react to the select of one of the search + types in the menu. Once it has set the correct action on the button, + and set the current search type (using the list of identifiers provided + by the developer), the ``searchTypeChanged(int)`` signal is emitted + with the identifier. + """ + sender = self.sender() + for action in self.menuButton.menu().actions(): + action.setChecked(False) + self.menuButton.setDefaultAction(sender) + self._currentSearchType = sender.data().toInt()[0] + self.emit(QtCore.SIGNAL(u'searchTypeChanged(int)'), + self._currentSearchType) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 9b4a035a5..f18605711 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -58,7 +58,7 @@ class ItemCapabilities(object): NoLineBreaks = 7 OnLoadUpdate = 8 AddIfNewItem = 9 - + ProvidesOwnDisplay = 10 class ServiceItem(object): """ diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 8d249d2cd..89d56cea2 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -55,7 +55,7 @@ class SettingsManager(object): self.mainwindow_left = mainwindow_docbars self.mainwindow_right = mainwindow_docbars self.slidecontroller = (self.width - ( - self.mainwindow_left + self.mainwindow_right) - 100 ) / 2 + self.mainwindow_left + self.mainwindow_right) - 100) / 2 self.slidecontroller_image = self.slidecontroller - 50 @staticmethod @@ -178,4 +178,4 @@ class SettingsManager(object): if extension == os.path.splitext(filename)[1]] else: # no filtering required - return files + return files \ No newline at end of file diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index 048751006..6586a50f2 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -31,7 +31,7 @@ class SettingsTab(QtGui.QWidget): SettingsTab is a helper widget for plugins to define Tabs for the settings dialog. """ - def __init__(self, title, visible_title=None): + def __init__(self, title, visible_title=None): """ Constructor to create the Settings tab item. diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 76271b6a7..ebd4046c0 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -158,4 +158,4 @@ class SpellAction(QtGui.QAction): def __init__(self, *args): QtGui.QAction.__init__(self, *args) self.triggered.connect(lambda x: self.correct.emit( - unicode(self.text()))) + unicode(self.text()))) \ No newline at end of file diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index 130eb817d..1e4a9854e 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -598,4 +598,4 @@ class ThemeXML(object): self.font_footer_shadow_size) self.add_display(self.display_horizontal_align, self.display_vertical_align, - self.display_slide_transition) + self.display_slide_transition) \ No newline at end of file diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index a98edab9a..e37dc6f22 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -154,4 +154,4 @@ class OpenLPToolbar(QtGui.QToolBar): push_button.setCheckable(True) push_button.setFlat(True) self.addWidget(push_button) - return push_button + return push_button \ No newline at end of file diff --git a/openlp/core/theme/__init__.py b/openlp/core/theme/__init__.py index 4ffcb2813..350b550a2 100644 --- a/openlp/core/theme/__init__.py +++ b/openlp/core/theme/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -24,4 +24,4 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from openlp.core.theme.theme import Theme +from openlp.core.theme.theme import Theme \ No newline at end of file diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index 52dda1631..e506fc2c2 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -33,11 +33,11 @@ processing version 1 themes in OpenLP version 2. from xml.etree.ElementTree import ElementTree, XML from PyQt4 import QtGui -DELPHI_COLORS = {"clRed":0xFF0000, - "clBlue":0x0000FF, - "clYellow":0xFFFF00, - "clBlack":0x000000, - "clWhite":0xFFFFFF} +DELPHI_COLORS = {u'clRed': 0xFF0000, + u'clBlue': 0x0000FF, + u'clYellow': 0xFFFF00, + u'clBlack': 0x000000, + u'clWhite': 0xFFFFFF} BLANK_STYLE_XML = \ '''<?xml version="1.0" encoding="iso-8859-1"?> diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 377999553..c806730c8 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -58,4 +58,4 @@ from thememanager import ThemeManager __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', - 'MediaDockManager', 'ServiceItemEditForm'] + 'MediaDockManager', 'ServiceItemEditForm'] \ No newline at end of file diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 401560cf0..430ca406d 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -182,8 +182,8 @@ class Ui_AboutDialog(object): self.aboutNotebook.indexOf(self.creditsTab), translate('OpenLP.AboutForm', 'Credits')) self.licenseTextEdit.setPlainText(translate('OpenLP.AboutForm', - 'Copyright \xa9 2004-2010 Raoul Snyman\n' - 'Portions copyright \xa9 2004-2010 ' + 'Copyright \xa9 2004-2011 Raoul Snyman\n' + 'Portions copyright \xa9 2004-2011 ' 'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, ' 'Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon ' 'Tibble, Carsten Tinggaard\n' @@ -575,5 +575,4 @@ class Ui_AboutDialog(object): translate('OpenLP.AboutForm', 'License')) self.contributeButton.setText(translate('OpenLP.AboutForm', 'Contribute')) - self.closeButton.setText(translate('OpenLP.AboutForm', 'Close')) - + self.closeButton.setText(translate('OpenLP.AboutForm', 'Close')) \ No newline at end of file diff --git a/openlp/core/ui/aboutform.py b/openlp/core/ui/aboutform.py index 3b49ff274..f3fcc18a8 100644 --- a/openlp/core/ui/aboutform.py +++ b/openlp/core/ui/aboutform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -61,4 +61,4 @@ class AboutForm(QtGui.QDialog, Ui_AboutDialog): import webbrowser url = u'http://www.openlp.org/en/documentation/introduction/' \ + u'contributing.html' - webbrowser.open_new(url) + webbrowser.open_new(url) \ No newline at end of file diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index df3add595..0a8547837 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -204,4 +204,4 @@ class AdvancedTab(SettingsTab): """ self.sharedLabel.setEnabled(checked) self.sharedTextEdit.setEnabled(checked) - self.sharedPushButton.setEnabled(checked) + self.sharedPushButton.setEnabled(checked) \ No newline at end of file diff --git a/openlp/core/ui/exceptiondialog.py b/openlp/core/ui/exceptiondialog.py index 03bbde764..eaed502b3 100644 --- a/openlp/core/ui/exceptiondialog.py +++ b/openlp/core/ui/exceptiondialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -98,4 +98,4 @@ class Ui_ExceptionDialog(object): self.sendReportButton.setText(translate('OpenLP.ExceptionDialog', 'Send E-Mail')) self.saveReportButton.setText(translate('OpenLP.ExceptionDialog', - 'Save to File')) + 'Save to File')) \ No newline at end of file diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 3e05ad73a..347bcf8f1 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -84,7 +84,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): u'lxml: %s\n' % etree.__version__ + \ u'Chardet: %s\n' % chardet_version + \ u'PyEnchant: %s\n' % enchant_version + \ - u'PySQLite: %s\n' % sqlite_version + u'PySQLite: %s\n' % sqlite_version if platform.system() == u'Linux': if os.environ.get(u'KDE_FULL_SESSION') == u'true': system = system + u'Desktop: KDE SC\n' @@ -135,7 +135,9 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): '--- Please enter the report below this line. ---\n\n\n' '--- Exception Traceback ---\n%s\n' '--- System information ---\n%s\n' - '--- Library Versions ---\n%s\n')) + '--- Library Versions ---\n%s\n', + 'Please add the information that bug reports are favoured written ' + 'in English.')) content = self._createReport() for line in content[1].split(u'\n'): if re.search(r'[/\\]openlp[/\\]', line): diff --git a/openlp/core/ui/filerenamedialog.py b/openlp/core/ui/filerenamedialog.py index 8bc804bb3..47d301dd9 100644 --- a/openlp/core/ui/filerenamedialog.py +++ b/openlp/core/ui/filerenamedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -54,4 +54,4 @@ class Ui_FileRenameDialog(object): def retranslateUi(self, FileRenameDialog): self.fileRenameLabel.setText(translate('OpenLP.FileRenameForm', - 'New File Name:')) + 'New File Name:')) \ No newline at end of file diff --git a/openlp/core/ui/filerenameform.py b/openlp/core/ui/filerenameform.py index 422d7ecb8..9ff310030 100644 --- a/openlp/core/ui/filerenameform.py +++ b/openlp/core/ui/filerenameform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -52,4 +52,4 @@ class FileRenameForm(QtGui.QDialog, Ui_FileRenameDialog): else: self.setWindowTitle(translate('OpenLP.FileRenameForm', 'File Rename')) - return QtGui.QDialog.exec_(self) + return QtGui.QDialog.exec_(self) \ No newline at end of file diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index f9b9f71cb..bd03cc32c 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -141,10 +141,10 @@ class GeneralTab(SettingsTab): self.settingsLayout.addWidget(self.autoPreviewCheckBox, 1, 0, 1, 2) # Moved here from image tab self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) - self.timeoutLabel.setObjectName("timeoutLabel") + self.timeoutLabel.setObjectName(u'timeoutLabel') self.settingsLayout.addWidget(self.timeoutLabel, 2, 0, 1, 1) self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) - self.timeoutSpinBox.setObjectName("timeoutSpinBox") + self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') self.settingsLayout.addWidget(self.timeoutSpinBox, 2, 1, 1, 1) self.generalLeftLayout.addWidget(self.settingsGroupBox) self.generalLeftSpacer = QtGui.QSpacerItem(20, 40, @@ -389,11 +389,11 @@ class GeneralTab(SettingsTab): settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) for screen in self.screens.screen_list: - screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), - screen[u'number'] + 1) + screen_name = unicode(translate('OpenLP.GeneralTab', 'Screen %d')) \ + % (screen[u'number'] + 1) if screen[u'primary']: - screen_name = u'%s (%s)' % (screen_name, - translate('OpenLP.GeneralTab', 'primary')) + screen_name = unicode(translate('OpenLP.GeneralTab', + '%s (primary)')) % screen_name self.monitorComboBox.addItem(screen_name) self.numberEdit.setText(unicode(settings.value( u'ccli number', QtCore.QVariant(u'')).toString())) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 69eb9305d..dd24f172d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -209,7 +209,7 @@ class MainDisplay(DisplayWidget): shrink = True else: shrink = False - js = u'show_alert("%s", "%s")' % ( + js = u'show_alert("%s", "%s")' % ( text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"'), u'top' if shrink else u'') height = self.frame.evaluateJavaScript(js) @@ -235,8 +235,8 @@ class MainDisplay(DisplayWidget): def image(self, name): """ - Add an image as the background. The image is converted to a - bytestream on route. + Add an image as the background. The image is converted to a bytestream + on route. `Image` The Image to be displayed can be QImage or QPixmap @@ -421,8 +421,8 @@ class MainDisplay(DisplayWidget): Display the Footer """ log.debug(u'footer') - js = "show_footer('" + \ - text.replace("\\", "\\\\").replace("\'", "\\\'") + "')" + js = u'show_footer(\'' + \ + text.replace(u'\\', u'\\\\').replace(u'\'', u'\\\'') + u'\')' self.frame.evaluateJavaScript(js) def hideDisplay(self, mode=HideMode.Screen): @@ -541,4 +541,3 @@ class AudioPlayer(QtCore.QObject): """ log.debug(u'AudioPlayer Reached end of media playlist') self.mediaObject.clearQueue() - diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ed06877e5..8c6117955 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -76,7 +76,7 @@ class Ui_MainWindow(object): MainIcon = build_icon(u':/icon/openlp-logo-16x16.png') MainWindow.setWindowIcon(MainIcon) self.setDockNestingEnabled(True) - # Set up the main container, which contains all the other form widgets + # Set up the main container, which contains all the other form widgets. self.MainContent = QtGui.QWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) @@ -141,13 +141,12 @@ class Ui_MainWindow(object): self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel') self.StatusBar.addPermanentWidget(self.DefaultThemeLabel) # Create the MediaManager - self.MediaManagerDock = OpenLPDockWidget(MainWindow) - self.MediaManagerDock.setWindowIcon( + self.MediaManagerDock = OpenLPDockWidget( + MainWindow, u'MediaManagerDock', build_icon(u':/system/system_mediamanager.png')) self.MediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE) self.MediaManagerDock.setMinimumWidth( self.settingsmanager.mainwindow_left) - self.MediaManagerDock.setObjectName(u'MediaManagerDock') self.MediaManagerContents = QtGui.QWidget(MainWindow) self.MediaManagerContents.setObjectName(u'MediaManagerContents') self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) @@ -161,10 +160,9 @@ class Ui_MainWindow(object): MainWindow.addDockWidget( QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) # Create the service manager - self.ServiceManagerDock = OpenLPDockWidget(MainWindow) - self.ServiceManagerDock.setWindowIcon( + self.ServiceManagerDock = OpenLPDockWidget( + MainWindow, u'ServiceManagerDock', build_icon(u':/system/system_servicemanager.png')) - self.ServiceManagerDock.setObjectName(u'ServiceManagerDock') self.ServiceManagerDock.setMinimumWidth( self.settingsmanager.mainwindow_right) self.ServiceManagerContents = ServiceManager(self) @@ -172,10 +170,9 @@ class Ui_MainWindow(object): MainWindow.addDockWidget( QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock) # Create the theme manager - self.ThemeManagerDock = OpenLPDockWidget(MainWindow) - self.ThemeManagerDock.setWindowIcon( + self.ThemeManagerDock = OpenLPDockWidget( + MainWindow, u'ThemeManagerDock', build_icon(u':/system/system_thememanager.png')) - self.ThemeManagerDock.setObjectName(u'ThemeManagerDock') self.ThemeManagerDock.setMinimumWidth( self.settingsmanager.mainwindow_right) self.ThemeManagerContents = ThemeManager(self) @@ -272,7 +269,7 @@ class Ui_MainWindow(object): self.SettingsPluginListItem.setObjectName(u'SettingsPluginListItem') MainWindow.actionList.add_action(self.SettingsPluginListItem, u'Settings') - #i18n Language Items + # i18n Language Items self.AutoLanguageItem = QtGui.QAction(MainWindow) self.AutoLanguageItem.setObjectName(u'AutoLanguageItem') self.AutoLanguageItem.setCheckable(True) @@ -331,7 +328,7 @@ class Ui_MainWindow(object): None, self.ViewMediaManagerItem, self.ViewServiceManagerItem, self.ViewThemeManagerItem, None, self.ViewPreviewPanel, self.ViewLivePanel)) - #i18n add Language Actions + # i18n add Language Actions add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None)) add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions()) add_actions(self.SettingsMenu, (self.SettingsPluginListItem, @@ -354,17 +351,8 @@ class Ui_MainWindow(object): QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu) QtCore.QObject.connect(self.FileExitItem, QtCore.SIGNAL(u'triggered()'), MainWindow.close) - QtCore.QObject.connect(self.ControlSplitter, - QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter) QtCore.QMetaObject.connectSlotsByName(MainWindow) - def trackSplitter(self, tab, pos): - """ - Splitter between the Preview and Live Controllers. - """ - self.liveController.widthChanged() - self.previewController.widthChanged() - def retranslateUi(self, MainWindow): """ Set up the translation system @@ -594,16 +582,16 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QObject.connect(self.SettingsShortcutsItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked) QtCore.QObject.connect(self.FileNewItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onNewService) + self.ServiceManagerContents.onNewServiceClicked) QtCore.QObject.connect(self.FileOpenItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onLoadService) + self.ServiceManagerContents.onLoadServiceClicked) QtCore.QObject.connect(self.FileSaveItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onQuickSaveService) + self.ServiceManagerContents.onSaveServiceClicked) QtCore.QObject.connect(self.FileSaveAsItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onSaveService) + self.ServiceManagerContents.onSaveServiceAsClicked) # i18n set signals for languages QtCore.QObject.connect(self.AutoLanguageItem, QtCore.SIGNAL(u'toggled(bool)'), self.setAutoLanguage) @@ -624,6 +612,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'config_screen_changed'), self.screenChanged) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_status_text'), self.showStatusMessage) + Receiver.send_message(u'cursor_busy') + # Simple message boxes + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_error_message'), self.onErrorMessage) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_warning_message'), self.onWarningMessage) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_information_message'), + self.onInformationMessage) # warning cyclic dependency # RenderManager needs to call ThemeManager and # ThemeManager needs to call RenderManager @@ -671,6 +668,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if savedPlugin != -1: self.MediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() + Receiver.send_message(u'cursor_normal') def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) @@ -703,7 +701,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if QtCore.QSettings().value( self.generalSettingsSection + u'/auto open', QtCore.QVariant(False)).toBool(): - self.ServiceManagerContents.onLoadService(True) + self.ServiceManagerContents.loadLastFile() view_mode = QtCore.QSettings().value(u'%s/view mode' % \ self.generalSettingsSection, u'default') if view_mode == u'default': @@ -732,6 +730,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): translate('OpenLP.MainWindow', 'The Main Display has been blanked out')) + def onErrorMessage(self, data): + QtGui.QMessageBox.critical(self, data[u'title'], data[u'message']) + + def onWarningMessage(self, data): + QtGui.QMessageBox.warning(self, data[u'title'], data[u'message']) + + def onInformationMessage(self, data): + QtGui.QMessageBox.information(self, data[u'title'], data[u'message']) + def onHelpWebSiteClicked(self): """ Load the OpenLP website @@ -759,6 +766,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ self.settingsForm.exec_() + def paintEvent(self, event): + """ + We need to make sure, that the SlidePreview's size is correct. + """ + self.previewController.previewSizeChanged() + self.liveController.previewSizeChanged() + def onSettingsShortcutsItemClicked(self): """ Show the shortcuts dialog @@ -817,7 +831,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Hook to close the main window and display windows on exit """ - if self.serviceNotSaved: + if self.ServiceManagerContents.isModified(): ret = QtGui.QMessageBox.question(self, translate('OpenLP.MainWindow', 'Save Changes to Service?'), translate('OpenLP.MainWindow', 'Your service has changed. ' @@ -828,17 +842,30 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Save), QtGui.QMessageBox.Save) if ret == QtGui.QMessageBox.Save: - self.ServiceManagerContents.onSaveService(True) - self.cleanUp() - event.accept() + #self.ServiceManagerContents.onSaveService(True) + if self.ServiceManagerContents.saveFile(): + self.cleanUp() + event.accept() + else: + event.ignore() elif ret == QtGui.QMessageBox.Discard: self.cleanUp() event.accept() else: event.ignore() else: - self.cleanUp() - event.accept() + ret = QtGui.QMessageBox.question(self, + translate('OpenLP.MainWindow', 'Close OpenLP'), + translate('OpenLP.MainWindow', 'Are you sure you want to close OpenLP?'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.Yes) + if ret == QtGui.QMessageBox.Yes: + self.cleanUp() + event.accept() + else: + event.ignore() def cleanUp(self): """ @@ -880,6 +907,23 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): title = u'%s - %s*' % (self.mainTitle, service_name) self.setWindowTitle(title) + def setServiceModified(self, modified, fileName): + """ + This method is called from the ServiceManager to set the title of the + main window. + + ``modified`` + Whether or not this service has been modified. + + ``fileName`` + The file name of the service file. + """ + if modified: + title = u'%s - %s*' % (self.mainTitle, fileName) + else: + title = u'%s - %s' % (self.mainTitle, fileName) + self.setWindowTitle(title) + def showStatusMessage(self, message): self.StatusBar.showMessage(message) @@ -981,11 +1025,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if recentFilesToDisplay: self.FileMenu.addSeparator() for fileId, filename in enumerate(recentFilesToDisplay): - action = QtGui.QAction(u'&%d %s' % (fileId +1, + log.debug('Recent file name: %s', filename) + action = QtGui.QAction(u'&%d %s' % (fileId + 1, QtCore.QFileInfo(filename).fileName()), self) action.setData(QtCore.QVariant(filename)) self.connect(action, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.loadService) + self.ServiceManagerContents.onRecentServiceClicked) self.FileMenu.addAction(action) self.FileMenu.addSeparator() self.FileMenu.addAction(self.FileMenuActions[-1]) @@ -998,8 +1043,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): The service filename to add """ # The maxRecentFiles value does not have an interface and so never gets - # actually stored in the settings therefore the default value of 20 - # will always be used. + # actually stored in the settings therefore the default value of 20 will + # always be used. maxRecentFiles = QtCore.QSettings().value(u'advanced/max recent files', QtCore.QVariant(20)).toInt()[0] if filename: diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index c49d7fab3..ced3850ec 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -85,4 +85,4 @@ class MediaDockManager(object): if self.media_dock.widget(dock_index).settingsSection == \ media_item.plugin.name.lower(): self.media_dock.widget(dock_index).hide() - self.media_dock.removeItem(dock_index) + self.media_dock.removeItem(dock_index) \ No newline at end of file diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index 45305d75c..63d7ae014 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -114,4 +114,3 @@ class Ui_PluginViewDialog(object): translate('OpenLP.PluginForm', 'Active')) self.statusComboBox.setItemText(1, translate('OpenLP.PluginForm', 'Inactive')) - diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index f3caf67a8..4d3177ef3 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -92,7 +92,7 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): self.statusComboBox.setEnabled(False) def _setDetails(self): - log.debug('PluginStatus: %s', str(self.activePlugin.status)) + log.debug(u'PluginStatus: %s', str(self.activePlugin.status)) self.versionNumberLabel.setText(self.activePlugin.version) self.aboutTextBrowser.setHtml(self.activePlugin.about()) self.programaticChange = True diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 1d4ad8c48..430426fd5 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -99,4 +99,4 @@ class ScreenList(object): user wants to use the correct screen attributes """ log.debug(u'reset_current_display') - self.set_current_display(self.current_display) + self.set_current_display(self.current_display) \ No newline at end of file diff --git a/openlp/core/ui/serviceitemeditdialog.py b/openlp/core/ui/serviceitemeditdialog.py index 215cc6146..19639a7c2 100644 --- a/openlp/core/ui/serviceitemeditdialog.py +++ b/openlp/core/ui/serviceitemeditdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -82,4 +82,4 @@ class Ui_ServiceItemEditDialog(object): serviceItemEditDialog.setWindowTitle( translate('OpenLP.ServiceItemEditForm', 'Reorder Service Item')) self.deleteButton.setText(translate('OpenLP.ServiceItemEditForm', - 'Delete')) + 'Delete')) \ No newline at end of file diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index e57474315..6516fa40f 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -122,4 +122,4 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): self.itemList.remove(self.itemList[row]) self.itemList.insert(row + 1, temp) self.loadData() - self.listWidget.setCurrentRow(row + 1) + self.listWidget.setCurrentRow(row + 1) \ No newline at end of file diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 32e46dffb..8f4e17a0c 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -37,7 +37,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ Receiver, build_icon, ItemCapabilities, SettingsManager, translate, \ ThemeLevel from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, split_filename class ServiceManagerList(QtGui.QTreeWidget): """ @@ -90,6 +90,7 @@ class ServiceManagerList(QtGui.QTreeWidget): mimeData.setText(u'ServiceManager') drag.start(QtCore.Qt.CopyAction) + class ServiceManager(QtGui.QWidget): """ Manages the services. This involves taking text strings from plugins and @@ -101,18 +102,19 @@ class ServiceManager(QtGui.QWidget): """ Sets up the service manager, toolbars, list view, et al. """ - QtGui.QWidget.__init__(self) + QtGui.QWidget.__init__(self, parent) self.parent = parent self.serviceItems = [] self.serviceName = u'' self.suffixes = [] - self.droppos = 0 + self.dropPosition = 0 self.expandTabs = False - #is a new service and has not been saved - self.isNew = True + # is a new service and has not been saved + self._modified = False + self._fileName = u'' self.serviceNoteForm = ServiceNoteForm(self.parent) self.serviceItemEditForm = ServiceItemEditForm(self.parent) - #start with the layout + # start with the layout self.layout = QtGui.QVBoxLayout(self) self.layout.setSpacing(0) self.layout.setMargin(0) @@ -123,17 +125,17 @@ class ServiceManager(QtGui.QWidget): translate('OpenLP.ServiceManager', 'New Service'), u':/general/general_new.png', translate('OpenLP.ServiceManager', 'Create a new service'), - self.onNewService) + self.onNewServiceClicked) self.toolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Open Service'), u':/general/general_open.png', translate('OpenLP.ServiceManager', 'Load an existing service'), - self.onLoadService) + self.onLoadServiceClicked) self.toolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Save Service'), u':/general/general_save.png', translate('OpenLP.ServiceManager', 'Save this service'), - self.onQuickSaveService) + self.onSaveServiceClicked) self.toolbar.addSeparator() self.themeLabel = QtGui.QLabel(translate('OpenLP.ServiceManager', 'Theme:'), self) @@ -282,6 +284,42 @@ class ServiceManager(QtGui.QWidget): self.menu.addMenu(self.themeMenu) self.configUpdated(True) + def setModified(self, modified=True): + """ + Setter for property "modified". Sets whether or not the current service + has been modified. + """ + self._modified = modified + serviceFile = self.shortFileName() or u'Untitled Service' + self.parent.setServiceModified(modified, serviceFile) + + def isModified(self): + """ + Getter for boolean property "modified". + """ + return self._modified + + def setFileName(self, fileName): + """ + Setter for service file. + """ + self._fileName = unicode(fileName) + self.parent.setServiceModified(self.isModified, self.shortFileName()) + QtCore.QSettings(). \ + setValue(u'service/last file',QtCore.QVariant(fileName)) + + def fileName(self): + """ + Return the current file name including path. + """ + return self._fileName + + def shortFileName(self): + """ + Return the current file name, excluding the path. + """ + return split_filename(self._fileName)[1] + def configUpdated(self, firstTime=False): """ Triggered when Config dialog is updated. @@ -295,6 +333,223 @@ class ServiceManager(QtGui.QWidget): def supportedSuffixes(self, suffix): self.suffixes.append(suffix) + def onNewServiceClicked(self): + """ + Create a new service. + """ + if self.isModified(): + result = QtGui.QMessageBox.question(self.parent, + translate('OpenLP.ServiceManager', 'Save Changes'), + translate('OpenLP.ServiceManager', 'The current service has ' + 'been modified, would you like to save it?'), + QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | + QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save) + if result == QtGui.QMessageBox.Cancel: + return False + elif result == QtGui.QMessageBox.Save: + if not self.saveFile(): + return False + self.newFile() + + def onLoadServiceClicked(self): + if self.isModified(): + result = QtGui.QMessageBox.question(self.parent, + translate('OpenLP.ServiceManager', 'Save Changes'), + translate('OpenLP.ServiceManager', 'The current service has ' + 'been modified, would you like to save it?'), + QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | + QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save) + if result == QtGui.QMessageBox.Cancel: + return False + elif result == QtGui.QMessageBox.Save: + self.saveFile() + fileName = unicode(QtGui.QFileDialog.getOpenFileName(self.parent, + translate('OpenLP.ServiceManager', 'Open File'), + SettingsManager.get_last_dir(self.parent.serviceSettingsSection), + translate('OpenLP.ServiceManager', + 'OpenLP Service Files (*.osz) (*.osz)'))) + if not fileName: + return False + SettingsManager.set_last_dir(self.parent.serviceSettingsSection, + split_filename(fileName)[0]) + self.loadFile(fileName) + + def onSaveServiceClicked(self): + self.saveFile() + + def onSaveServiceAsClicked(self): + self.saveFileAs() + + def onRecentServiceClicked(self): + sender = self.sender() + self.loadFile(sender.data().toString()) + + def newFile(self): + """ + Create a blank new service file. + """ + self.serviceManagerList.clear() + self.serviceItems = [] + self.setFileName(u'') + self.setModified(False) + QtCore.QSettings(). \ + setValue(u'service/last file',QtCore.QVariant(u'')) + + def saveFile(self): + """ + Save the current Service file. + """ + if not self.fileName(): + return self.saveFileAs() + else: + fileName = self.fileName() + log.debug(u'ServiceManager.saveFile - %s' % fileName) + SettingsManager.set_last_dir(self.parent.serviceSettingsSection, + split_filename(fileName)[0]) + service = [] + serviceFileName = fileName.replace(u'.osz', u'.osd') + zip = None + file = None + try: + write_list = [] + zip = zipfile.ZipFile(unicode(fileName), 'w') + for item in self.serviceItems: + service.append({u'serviceitem': \ + item[u'service_item'].get_service_repr()}) + if item[u'service_item'].uses_file(): + for frame in item[u'service_item'].get_frames(): + if item[u'service_item'].is_image(): + path_from = frame[u'path'] + else: + path_from = unicode(os.path.join( + frame[u'path'], + frame[u'title'])) + # On write a file once + if not path_from in write_list: + write_list.append(path_from) + zip.write(path_from.encode(u'utf-8')) + file = open(serviceFileName, u'wb') + cPickle.dump(service, file) + file.close() + zip.write(serviceFileName.encode(u'utf-8')) + except IOError: + log.exception(u'Failed to save service to disk') + finally: + if file: + file.close() + if zip: + zip.close() + try: + os.remove(serviceFileName) + except (IOError, OSError): + # if not present do not worry + pass + self.parent.addRecentFile(fileName) + self.setModified(False) + return True + + def saveFileAs(self): + """ + Get a file name and then call :function:`ServiceManager.saveFile` to + save the file. + """ + fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.parent, + translate('OpenLP.ServiceManager', 'Save Service'), + SettingsManager.get_last_dir(self.parent.serviceSettingsSection), + translate('OpenLP.ServiceManager', + 'OpenLP Service Files (*.osz) (*.osz)'))) + if not fileName: + return False + if os.path.splitext(fileName)[1] == u'': + fileName += u'.osz' + else: + ext = os.path.splitext(fileName)[1] + fileName.replace(ext, u'.osz') + self.setFileName(fileName) + return self.saveFile() + + def loadFile(self, fileName): + if not fileName: + return False + else: + fileName = unicode(fileName) + zip = None + fileTo = None + try: + zip = zipfile.ZipFile(unicode(fileName)) + for file in zip.namelist(): + try: + ucsfile = file.decode(u'utf-8') + except UnicodeDecodeError: + QtGui.QMessageBox.critical( + self, translate('OpenLP.ServiceManager', 'Error'), + translate('OpenLP.ServiceManager', + 'File is not a valid service.\n' + 'The content encoding is not UTF-8.')) + log.exception(u'Filename "%s" is not valid UTF-8' % + file.decode(u'utf-8', u'replace')) + continue + osfile = unicode(QtCore.QDir.toNativeSeparators(ucsfile)) + filePath = os.path.join(self.servicePath, + os.path.split(osfile)[1]) + fileTo = open(filePath, u'wb') + fileTo.write(zip.read(file)) + fileTo.flush() + fileTo.close() + if filePath.endswith(u'osd'): + p_file = filePath + if 'p_file' in locals(): + fileTo = open(p_file, u'r') + items = cPickle.load(fileTo) + fileTo.close() + self.newFile() + for item in items: + serviceItem = ServiceItem() + serviceItem.render_manager = self.parent.renderManager + serviceItem.set_from_service(item, self.servicePath) + self.validateItem(serviceItem) + self.addServiceItem(serviceItem) + if serviceItem.is_capable( + ItemCapabilities.OnLoadUpdate): + Receiver.send_message(u'%s_service_load' % + serviceItem.name.lower(), serviceItem) + try: + if os.path.isfile(p_file): + os.remove(p_file) + except (IOError, OSError): + log.exception(u'Failed to remove osd file') + else: + QtGui.QMessageBox.critical( + self, translate('OpenLP.ServiceManager', 'Error'), + translate('OpenLP.ServiceManager', + 'File is not a valid service.')) + log.exception(u'File contains no service data') + except (IOError, NameError): + log.exception(u'Problem loading a service file') + finally: + if fileTo: + fileTo.close() + if zip: + zip.close() + self.setFileName(fileName) + self.parent.addRecentFile(fileName) + self.setModified(False) + QtCore.QSettings(). \ + setValue(u'service/last file',QtCore.QVariant(fileName)) + # Refresh Plugin lists + Receiver.send_message(u'plugin_list_refresh') + + def loadLastFile(self): + """ + Load the last service item from the service manager when the + service was last closed. Can be blank if there was no service + present. + """ + fileName = QtCore.QSettings(). \ + value(u'service/last file',QtCore.QVariant(u'')).toString() + if fileName: + self.loadFile(fileName) + def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) if item is None: @@ -427,6 +682,7 @@ class ServiceManager(QtGui.QWidget): # Top Item was selected so set the last one if setLastItem: lastItem.setSelected(True) + self.isModified = True def onMoveSelectionDown(self): """ @@ -449,6 +705,7 @@ class ServiceManager(QtGui.QWidget): serviceIterator += 1 if setSelected: firstItem.setSelected(True) + self.isModified = True def onCollapseAll(self): """ @@ -492,7 +749,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(0, temp) self.repaintServiceList(0, count) - self.parent.serviceChanged(False, self.serviceName) + self.isModified = True def onServiceUp(self): """ @@ -505,7 +762,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item - 1, temp) self.repaintServiceList(item - 1, count) - self.parent.serviceChanged(False, self.serviceName) + self.setModified(True) def onServiceDown(self): """ @@ -518,7 +775,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item + 1, temp) self.repaintServiceList(item + 1, count) - self.parent.serviceChanged(False, self.serviceName) + self.setModified(True) def onServiceEnd(self): """ @@ -530,30 +787,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(len(self.serviceItems), temp) self.repaintServiceList(len(self.serviceItems) - 1, count) - self.parent.serviceChanged(False, self.serviceName) - - def onNewService(self): - """ - Clear the list to create a new service - """ - if self.parent.serviceNotSaved and QtCore.QSettings().value( - self.parent.generalSettingsSection + u'/save prompt', - QtCore.QVariant(False)).toBool(): - ret = QtGui.QMessageBox.question(self, - translate('OpenLP.ServiceManager', 'Save Changes to Service?'), - translate('OpenLP.ServiceManager', - 'Your service is unsaved, do you want to save ' - 'those changes before creating a new one?'), - QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Save), - QtGui.QMessageBox.Save) - if ret == QtGui.QMessageBox.Save: - self.onSaveService() - self.serviceManagerList.clear() - self.serviceItems = [] - self.serviceName = u'' - self.isNew = True - self.parent.serviceChanged(True, self.serviceName) + self.setModified(True) def onDeleteFromService(self): """ @@ -563,13 +797,19 @@ class ServiceManager(QtGui.QWidget): if item is not -1: self.serviceItems.remove(self.serviceItems[item]) self.repaintServiceList(0, 0) - self.parent.serviceChanged(False, self.serviceName) + self.setModified(True) def repaintServiceList(self, serviceItem, serviceItemCount): """ - Clear the existing service list and prepaint all the items - Used when moving items as the move takes place in supporting array, - and when regenerating all the items due to theme changes + Clear the existing service list and prepaint all the items. This is + used when moving items as the move takes place in a supporting list, + and when regenerating all the items due to theme changes. + + ``serviceItem`` + The item which changed. + + ``serviceItemCount`` + The number of items in the service. """ # Correct order of items in array count = 1 @@ -615,183 +855,6 @@ class ServiceManager(QtGui.QWidget): item[u'expanded'] = temp treewidgetitem.setExpanded(item[u'expanded']) - def onSaveService(self, quick=False): - """ - Save the current service in a zip (OSZ) file - This file contains - * An osd which is a pickle of the service items - * All image, presentation and video files needed to run the service. - """ - log.debug(u'onSaveService %s' % quick) - if not quick or self.isNew: - filename = QtGui.QFileDialog.getSaveFileName(self, - translate('OpenLP.ServiceManager', 'Save Service'), - SettingsManager.get_last_dir(self.parent.serviceSettingsSection), - translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)')) - else: - filename = os.path.join(SettingsManager.get_last_dir( - self.parent.serviceSettingsSection), self.serviceName) - if filename: - filename = QtCore.QDir.toNativeSeparators(filename) - splittedFile = filename.split(u'.') - if splittedFile[-1] != u'osz': - filename = filename + u'.osz' - filename = unicode(filename) - self.isNew = False - SettingsManager.set_last_dir(self.parent.serviceSettingsSection, - os.path.split(filename)[0]) - service = [] - servicefile = filename + u'.osd' - zip = None - file = None - try: - write_list = [] - zip = zipfile.ZipFile(unicode(filename), 'w') - for item in self.serviceItems: - service.append({u'serviceitem':item[u'service_item'] - .get_service_repr()}) - if item[u'service_item'].uses_file(): - for frame in item[u'service_item'].get_frames(): - if item[u'service_item'].is_image(): - path_from = frame[u'path'] - else: - path_from = unicode(os.path.join( - frame[u'path'], - frame[u'title'])) - # On write a file once - if not path_from in write_list: - write_list.append(path_from) - zip.write(path_from.encode(u'utf-8')) - file = open(servicefile, u'wb') - cPickle.dump(service, file) - file.close() - zip.write(servicefile.encode(u'utf-8')) - except IOError: - log.exception(u'Failed to save service to disk') - finally: - if file: - file.close() - if zip: - zip.close() - try: - os.remove(servicefile) - except (IOError, OSError): - pass #if not present do not worry - name = filename.split(os.path.sep) - self.serviceName = name[-1] - self.parent.addRecentFile(filename) - self.parent.serviceChanged(True, self.serviceName) - - def onQuickSaveService(self): - self.onSaveService(True) - - def onLoadService(self, lastService=False): - if lastService: - if not self.parent.recentFiles: - return - filename = self.parent.recentFiles[0] - else: - filename = QtGui.QFileDialog.getOpenFileName( - self, translate('OpenLP.ServiceManager', 'Open Service'), - SettingsManager.get_last_dir( - self.parent.serviceSettingsSection), u'Services (*.osz)') - filename = QtCore.QDir.toNativeSeparators(filename) - self.loadService(filename) - - def loadService(self, filename=None): - """ - Load an existing service from disk and rebuild the serviceitems. All - files retrieved from the zip file are placed in a temporary directory - and will only be used for this service. - """ - if self.parent.serviceNotSaved: - ret = QtGui.QMessageBox.question(self, - translate('OpenLP.ServiceManager', 'Save Changes to Service?'), - translate('OpenLP.ServiceManager', - 'Your current service is unsaved, do you want to ' - 'save the changes before opening a new one?'), - QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Discard | QtGui.QMessageBox.Save), - QtGui.QMessageBox.Save) - if ret == QtGui.QMessageBox.Save: - self.onSaveService() - if filename is None: - action = self.sender() - if isinstance(action, QtGui.QAction): - filename = action.data().toString() - else: - return - filename = unicode(filename) - name = filename.split(os.path.sep) - if filename: - SettingsManager.set_last_dir(self.parent.serviceSettingsSection, - os.path.split(filename)[0]) - zip = None - file_to = None - try: - zip = zipfile.ZipFile(unicode(filename)) - for file in zip.namelist(): - try: - ucsfile = file.decode(u'utf-8') - except UnicodeDecodeError: - QtGui.QMessageBox.critical( - self, translate('OpenLP.ServiceManager', 'Error'), - translate('OpenLP.ServiceManager', - 'File is not a valid service.\n' - 'The content encoding is not UTF-8.')) - log.exception(u'Filename "%s" is not valid UTF-8' % - file.decode(u'utf-8', u'replace')) - continue - osfile = unicode(QtCore.QDir.toNativeSeparators(ucsfile)) - names = osfile.split(os.path.sep) - file_path = os.path.join(self.servicePath, - names[len(names) - 1]) - file_to = open(file_path, u'wb') - file_to.write(zip.read(file)) - file_to.flush() - file_to.close() - if file_path.endswith(u'osd'): - p_file = file_path - if 'p_file' in locals(): - file_to = open(p_file, u'r') - items = cPickle.load(file_to) - file_to.close() - self.onNewService() - for item in items: - serviceitem = ServiceItem() - serviceitem.render_manager = self.parent.renderManager - serviceitem.set_from_service(item, self.servicePath) - self.validateItem(serviceitem) - self.addServiceItem(serviceitem) - if serviceitem.is_capable( - ItemCapabilities.OnLoadUpdate): - Receiver.send_message(u'%s_service_load' % - serviceitem.name.lower(), serviceitem) - try: - if os.path.isfile(p_file): - os.remove(p_file) - except (IOError, OSError): - log.exception(u'Failed to remove osd file') - else: - QtGui.QMessageBox.critical( - self, translate('OpenLP.ServiceManager', 'Error'), - translate('OpenLP.ServiceManager', - 'File is not a valid service.')) - log.exception(u'File contains no service data') - except (IOError, NameError): - log.exception(u'Problem loading a service file') - finally: - if file_to: - file_to.close() - if zip: - zip.close() - self.isNew = False - self.serviceName = name[len(name) - 1] - self.parent.addRecentFile(filename) - self.parent.serviceChanged(True, self.serviceName) - # Refresh Plugin lists - Receiver.send_message(u'plugin_list_refresh') - def validateItem(self, serviceItem): """ Validates the service item and if the suffix matches an accepted @@ -844,6 +907,7 @@ class ServiceManager(QtGui.QWidget): Rebuild the service list as things have changed and a repaint is the easiest way to do this. """ + Receiver.send_message(u'cursor_busy') log.debug(u'regenerateServiceItems') # force reset of renderer as theme data has changed self.parent.renderManager.themedata = None @@ -857,7 +921,8 @@ class ServiceManager(QtGui.QWidget): item[u'service_item'], False, expand=item[u'expanded']) # Set to False as items may have changed rendering # does not impact the saved song so True may also be valid - self.parent.serviceChanged(False, self.serviceName) + self.setModified(True) + Receiver.send_message(u'cursor_normal') def serviceItemUpdate(self, message): """ @@ -881,7 +946,7 @@ class ServiceManager(QtGui.QWidget): item[u'service_item'] = newItem self.repaintServiceList(itemcount + 1, 0) self.parent.liveController.replaceServiceManagerItem(newItem) - self.parent.serviceChanged(False, self.serviceName) + self.setModified(True) def addServiceItem(self, item, rebuild=False, expand=None, replace=False): """ @@ -905,7 +970,7 @@ class ServiceManager(QtGui.QWidget): self.parent.liveController.replaceServiceManagerItem(item) else: # nothing selected for dnd - if self.droppos == 0: + if self.dropPosition == 0: if isinstance(item, list): for inditem in item: self.serviceItems.append({u'service_item': inditem, @@ -917,15 +982,15 @@ class ServiceManager(QtGui.QWidget): u'expanded':expand}) self.repaintServiceList(len(self.serviceItems) + 1, 0) else: - self.serviceItems.insert(self.droppos, {u'service_item': item, - u'order': self.droppos, + self.serviceItems.insert(self.dropPosition, {u'service_item': item, + u'order': self.dropPosition, u'expanded':expand}) - self.repaintServiceList(self.droppos, 0) + self.repaintServiceList(self.dropPosition, 0) # if rebuilding list make sure live is fixed. if rebuild: self.parent.liveController.replaceServiceManagerItem(item) - self.droppos = 0 - self.parent.serviceChanged(False, self.serviceName) + self.dropPosition = 0 + self.setModified(True) def makePreview(self): """ @@ -1045,7 +1110,7 @@ class ServiceManager(QtGui.QWidget): # we are not over anything so drop replace = False if item is None: - self.droppos = len(self.serviceItems) + self.dropPosition = len(self.serviceItems) else: # we are over somthing so lets investigate pos = self._getParentItemData(item) - 1 @@ -1056,14 +1121,14 @@ class ServiceManager(QtGui.QWidget): action = self.dndMenu.exec_(QtGui.QCursor.pos()) # New action required if action == self.newAction: - self.droppos = self._getParentItemData(item) + self.dropPosition = self._getParentItemData(item) # Append to existing action if action == self.addToAction: - self.droppos = self._getParentItemData(item) + self.dropPosition = self._getParentItemData(item) item.setSelected(True) replace = True else: - self.droppos = self._getParentItemData(item) + self.dropPosition = self._getParentItemData(item) Receiver.send_message(u'%s_add_service_item' % plugin, replace) def updateThemeList(self, theme_list): diff --git a/openlp/core/ui/servicenotedialog.py b/openlp/core/ui/servicenotedialog.py index 899db64be..eb3aba9d4 100644 --- a/openlp/core/ui/servicenotedialog.py +++ b/openlp/core/ui/servicenotedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -50,4 +50,4 @@ class Ui_ServiceNoteEdit(object): def retranslateUi(self, serviceNoteEdit): serviceNoteEdit.setWindowTitle( - translate('OpenLP.ServiceNoteForm', 'Service Item Notes')) + translate('OpenLP.ServiceNoteForm', 'Service Item Notes')) \ No newline at end of file diff --git a/openlp/core/ui/servicenoteform.py b/openlp/core/ui/servicenoteform.py index a453c863e..de689e842 100644 --- a/openlp/core/ui/servicenoteform.py +++ b/openlp/core/ui/servicenoteform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -41,4 +41,4 @@ class ServiceNoteForm(QtGui.QDialog, Ui_ServiceNoteEdit): QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), self.accept) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), - self.reject) + self.reject) \ No newline at end of file diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 93b4e6141..d4bc8e110 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -65,4 +65,4 @@ class Ui_SettingsDialog(object): def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(translate('OpenLP.SettingsForm', - 'Configure OpenLP')) + 'Configure OpenLP')) \ No newline at end of file diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index d1cf19622..86e3c6150 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -98,4 +98,4 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): Run any post-setup code for the tabs on the form """ for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).postSetUp() + self.settingsTabWidget.widget(tabIndex).postSetUp() \ No newline at end of file diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index d64f4e2fc..f66772d9b 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -111,4 +111,3 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Custom:')) self.shortcutPushButton.setText( translate('OpenLP.ShortcutListDialog', 'None')) - diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index e83c2cc7d..053f2347f 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -71,7 +71,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) - existing_key = QtGui.QKeySequence("Ctrl+Shift+F8") + existing_key = QtGui.QKeySequence(u'Ctrl+Shift+F8') if key_sequence == existing_key: QtGui.QMessageBox.warning( self, @@ -107,4 +107,3 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def onShortcutPushButtonClicked(self, toggled): self.captureShortcut = toggled - diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8cf0752e2..97a02f333 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -73,6 +73,7 @@ class SlideList(QtGui.QTableWidget): else: event.ignore() + class SlideController(QtGui.QWidget): """ SlideController is the slide controller widget. This widget is what the @@ -183,41 +184,23 @@ class SlideController(QtGui.QWidget): translate('OpenLP.SlideController', 'Blank Screen'), self.HideMenu) self.BlankScreen.setCheckable(True) - QtCore.QObject.connect(self.BlankScreen, - QtCore.SIGNAL("triggered(bool)"), self.onBlankDisplay) self.ThemeScreen = QtGui.QAction(QtGui.QIcon( u':/slides/slide_theme.png'), translate('OpenLP.SlideController', 'Blank to Theme'), self.HideMenu) self.ThemeScreen.setCheckable(True) - QtCore.QObject.connect(self.ThemeScreen, - QtCore.SIGNAL("triggered(bool)"), self.onThemeDisplay) - if self.screens.display_count > 1: - self.DesktopScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_desktop.png'), - translate('OpenLP.SlideController', - 'Show Desktop'), self.HideMenu) - self.DesktopScreen.setCheckable(True) - QtCore.QObject.connect(self.DesktopScreen, - QtCore.SIGNAL("triggered(bool)"), self.onHideDisplay) self.HideMenu.setDefaultAction(self.BlankScreen) self.HideMenu.menu().addAction(self.BlankScreen) self.HideMenu.menu().addAction(self.ThemeScreen) if self.screens.display_count > 1: + self.DesktopScreen = QtGui.QAction(QtGui.QIcon( + u':/slides/slide_desktop.png'), + translate('OpenLP.SlideController', + 'Show Desktop'), self.HideMenu) self.HideMenu.menu().addAction(self.DesktopScreen) - if not self.isLive: - self.Toolbar.addToolbarSeparator(u'Close Separator') - self.Toolbar.addToolbarButton( - u'Go Live', u':/general/general_live.png', - translate('OpenLP.SlideController', 'Move to live'), - self.onGoLive) - self.Toolbar.addToolbarSeparator(u'Close Separator') - self.Toolbar.addToolbarButton( - u'Edit Song', u':/general/general_edit.png', - translate('OpenLP.SlideController', - 'Edit and reload song preview'), - self.onEditSong) - if isLive: + self.DesktopScreen.setCheckable(True) + QtCore.QObject.connect(self.DesktopScreen, + QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) self.Toolbar.addToolbarSeparator(u'Loop Separator') self.Toolbar.addToolbarButton( u'Start Loop', u':/media/media_time.png', @@ -230,12 +213,23 @@ class SlideController(QtGui.QWidget): self.DelaySpinBox = QtGui.QSpinBox() self.DelaySpinBox.setMinimum(1) self.DelaySpinBox.setMaximum(180) - self.Toolbar.addToolbarWidget( - u'Image SpinBox', self.DelaySpinBox) + self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox) self.DelaySpinBox.setSuffix(translate('OpenLP.SlideController', 's')) self.DelaySpinBox.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds')) + else: + self.Toolbar.addToolbarSeparator(u'Close Separator') + self.Toolbar.addToolbarButton( + u'Go Live', u':/general/general_live.png', + translate('OpenLP.SlideController', 'Move to live'), + self.onGoLive) + self.Toolbar.addToolbarSeparator(u'Close Separator') + self.Toolbar.addToolbarButton( + u'Edit Song', u':/general/general_edit.png', + translate('OpenLP.SlideController', + 'Edit and reload song preview'), + self.onEditSong) self.ControllerLayout.addWidget(self.Toolbar) # Build a Media ToolBar self.Mediabar = OpenLPToolbar(self) @@ -251,42 +245,39 @@ class SlideController(QtGui.QWidget): u'Media Stop', u':/slides/media_playback_stop.png', translate('OpenLP.SlideController', 'Start playing media'), self.onMediaStop) - if not self.isLive: - self.seekSlider = Phonon.SeekSlider() - self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.seekSlider.setObjectName(u'seekSlider') - self.Mediabar.addToolbarWidget( - u'Seek Slider', self.seekSlider) - self.volumeSlider = Phonon.VolumeSlider() - self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.volumeSlider.setObjectName(u'volumeSlider') - self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) - else: - self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) - self.volumeSlider.setTickInterval(1) - self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) - self.volumeSlider.setMinimum(0) - self.volumeSlider.setMaximum(10) - self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.volumeSlider.setObjectName(u'volumeSlider') - self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) - self.ControllerLayout.addWidget(self.Mediabar) - # Build the Song Toolbar - if isLive: + if self.isLive: + # Build the Song Toolbar self.SongMenu = QtGui.QToolButton(self.Toolbar) self.SongMenu.setText(translate('OpenLP.SlideController', 'Go To')) self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup) self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu) self.SongMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Go To'), - self.Toolbar)) + translate('OpenLP.SlideController', 'Go To'), self.Toolbar)) self.Toolbar.makeWidgetsInvisible([u'Song Menu']) + # Build the volumeSlider. + self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) + self.volumeSlider.setTickInterval(1) + self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) + self.volumeSlider.setMinimum(0) + self.volumeSlider.setMaximum(10) + else: + # Build the seekSlider. + self.seekSlider = Phonon.SeekSlider() + self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.seekSlider.setObjectName(u'seekSlider') + self.Mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider) + self.volumeSlider = Phonon.VolumeSlider() + self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.volumeSlider.setObjectName(u'volumeSlider') + self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) + self.ControllerLayout.addWidget(self.Mediabar) # Screen preview area self.PreviewFrame = QtGui.QFrame(self.Splitter) - self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225)) + self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio)) + self.PreviewFrame.setMinimumHeight(100) self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( - QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum, + QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Label)) self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken) @@ -306,7 +297,6 @@ class SlideController(QtGui.QWidget): Phonon.createPath(self.mediaObject, self.audio) if not self.isLive: self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) - self.video.setVisible(False) self.SlideLayout.insertWidget(0, self.video) # Actual preview screen self.SlidePreview = QtGui.QLabel(self) @@ -330,18 +320,24 @@ class SlideController(QtGui.QWidget): # Signals QtCore.QObject.connect(self.PreviewListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) - if not self.isLive: - QtCore.QObject.connect(self.PreviewListWidget, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), - self.onGoLiveClick) - if isLive: + if self.isLive: + QtCore.QObject.connect(self.BlankScreen, + QtCore.SIGNAL(u'triggered(bool)'), self.onBlankDisplay) + QtCore.QObject.connect(self.ThemeScreen, + QtCore.SIGNAL(u'triggered(bool)'), self.onThemeDisplay) + QtCore.QObject.connect(self.volumeSlider, + QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), self.receiveSpinDelay) - if isLive: self.Toolbar.makeWidgetsInvisible(self.loopList) self.Toolbar.actions[u'Stop Loop'].setVisible(False) else: + QtCore.QObject.connect(self.PreviewListWidget, + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), + self.onGoLiveClick) self.Toolbar.makeWidgetsInvisible(self.songEditList) self.Mediabar.setVisible(False) QtCore.QObject.connect(Receiver.get_receiver(), @@ -381,54 +377,49 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), self.onTextRequest) - QtCore.QObject.connect(self.Splitter, - QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.refreshServiceItem) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) - if self.isLive: - QtCore.QObject.connect(self.volumeSlider, - QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) def screenSizeChanged(self): """ Settings dialog has changed the screen size of adjust output and - screen previews + screen previews. """ - log.debug(u'screenSizeChanged live = %s' % self.isLive) # rebuild display as screen size changed self.display = MainDisplay(self, self.screens, self.isLive) self.display.imageManager = self.parent.renderManager.image_manager self.display.alertTab = self.alertTab + self.display.setup() + # The SlidePreview's ratio. self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) - self.display.setup() - self.SlidePreview.setFixedSize( - QtCore.QSize(self.settingsmanager.slidecontroller_image, - self.settingsmanager.slidecontroller_image / self.ratio)) + self.previewSizeChanged() - def widthChanged(self): + def previewSizeChanged(self): """ - Handle changes of width from the splitter between the live and preview - controller. Event only issues when changes have finished + Takes care of the SlidePreview's size. Is called when one of the the + splitters is moved or when the screen size is changed. """ - log.debug(u'widthChanged live = %s' % self.isLive) + if self.ratio < float(self.PreviewFrame.width()) / float( + self.PreviewFrame.height()): + # We have to take the height as limit. + max_height = self.PreviewFrame.height() - self.grid.margin() * 2 + self.SlidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, + max_height)) + else: + # We have to take the width as limit. + max_width = self.PreviewFrame.width() - self.grid.margin() * 2 + self.SlidePreview.setFixedSize(QtCore.QSize(max_width, + max_width / self.ratio)) width = self.parent.ControlSplitter.sizes()[self.split] - height = width * self.parent.renderManager.screen_ratio self.PreviewListWidget.setColumnWidth(0, width) # Sort out image heights (Songs, bibles excluded) if self.serviceItem and not self.serviceItem.is_text(): for framenumber in range(len(self.serviceItem.get_frames())): - self.PreviewListWidget.setRowHeight(framenumber, height) - - def trackSplitter(self, tab, pos): - """ - Splitter between the slide list and the preview panel - """ - pass + self.PreviewListWidget.setRowHeight( + framenumber, width / self.ratio) def onSongBarHandler(self): request = unicode(self.sender().text()) @@ -554,6 +545,8 @@ class SlideController(QtGui.QWidget): if self.serviceItem.is_media(): self.onMediaClose() if self.isLive: + if serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): + self._forceUnblank() blanked = self.BlankScreen.isChecked() else: blanked = False @@ -561,8 +554,6 @@ class SlideController(QtGui.QWidget): [serviceItem, self.isLive, blanked, slideno]) self.slideList = {} width = self.parent.ControlSplitter.sizes()[self.split] - # Set pointing cursor when we have something to point at - self.PreviewListWidget.setCursor(QtCore.Qt.PointingHandCursor) self.serviceItem = serviceItem self.PreviewListWidget.clear() self.PreviewListWidget.setRowCount(0) @@ -691,7 +682,7 @@ class SlideController(QtGui.QWidget): """ log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) if not self.display.primary: - self.onHideDisplay(True) + self.onBlankDisplay(True) def onSlideBlank(self): """ @@ -1034,3 +1025,23 @@ class SlideController(QtGui.QWidget): self.video.hide() self.SlidePreview.clear() self.SlidePreview.show() + + def _forceUnblank(self): + """ + Used by command items which provide their own displays to reset the + screen hide attributes + """ + if self.BlankScreen.isChecked: + self.BlankScreen.setChecked(False) + self.HideMenu.setDefaultAction(self.BlankScreen) + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(False)) + if self.ThemeScreen.isChecked: + self.ThemeScreen.setChecked(False) + self.HideMenu.setDefaultAction(self.ThemeScreen) + if self.screens.display_count > 1: + if self.DesktopScreen.isChecked: + self.DesktopScreen.setChecked(False) + self.HideMenu.setDefaultAction(self.DesktopScreen) + diff --git a/openlp/core/ui/splashscreen.py b/openlp/core/ui/splashscreen.py index 95fdba841..53546a6dd 100644 --- a/openlp/core/ui/splashscreen.py +++ b/openlp/core/ui/splashscreen.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -55,4 +55,4 @@ class SplashScreen(object): self.splash_screen.show() def finish(self, widget): - self.splash_screen.finish(widget) + self.splash_screen.finish(widget) \ No newline at end of file diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 7ed58e943..5c9517b0e 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -56,90 +56,70 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.registerFields() self.accepted = False self.updateThemeAllowed = True - QtCore.QObject.connect(self.backgroundTypeComboBox, + QtCore.QObject.connect(self.backgroundComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onBackgroundComboBox) + self.onBackgroundComboBoxCurrentIndexChanged) QtCore.QObject.connect(self.gradientComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onGradientComboBox) + self.onGradientComboBoxCurrentIndexChanged) QtCore.QObject.connect(self.colorButton, - QtCore.SIGNAL(u'pressed()'), + QtCore.SIGNAL(u'clicked()'), self.onColorButtonClicked) QtCore.QObject.connect(self.gradientStartButton, - QtCore.SIGNAL(u'pressed()'), + QtCore.SIGNAL(u'clicked()'), self.onGradientStartButtonClicked) QtCore.QObject.connect(self.gradientEndButton, - QtCore.SIGNAL(u'pressed()'), + QtCore.SIGNAL(u'clicked()'), self.onGradientEndButtonClicked) QtCore.QObject.connect(self.imageBrowseButton, - QtCore.SIGNAL(u'pressed()'), + QtCore.SIGNAL(u'clicked()'), self.onImageBrowseButtonClicked) - QtCore.QObject.connect(self.mainColorPushButton, - QtCore.SIGNAL(u'pressed()'), - self.onMainColourPushButtonClicked) - QtCore.QObject.connect(self.outlineColorPushButton, - QtCore.SIGNAL(u'pressed()'), - self.onOutlineColourPushButtonClicked) - QtCore.QObject.connect(self.shadowColorPushButton, - QtCore.SIGNAL(u'pressed()'), - self.onShadowColourPushButtonClicked) + QtCore.QObject.connect(self.mainColorButton, + QtCore.SIGNAL(u'clicked()'), + self.onMainColorButtonClicked) + QtCore.QObject.connect(self.outlineColorButton, + QtCore.SIGNAL(u'clicked()'), + self.onOutlineColorButtonClicked) + QtCore.QObject.connect(self.shadowColorButton, + QtCore.SIGNAL(u'clicked()'), + self.onShadowColorButtonClicked) QtCore.QObject.connect(self.outlineCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onOutlineCheckCheckBoxChanged) + self.onOutlineCheckCheckBoxStateChanged) QtCore.QObject.connect(self.shadowCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onShadowCheckCheckBoxChanged) - QtCore.QObject.connect(self.footerColorPushButton, - QtCore.SIGNAL(u'pressed()'), - self.onFooterColourPushButtonClicked) - QtCore.QObject.connect(self.mainDefaultPositionCheckBox, + self.onShadowCheckCheckBoxStateChanged) + QtCore.QObject.connect(self.footerColorButton, + QtCore.SIGNAL(u'clicked()'), + self.onFooterColorButtonClicked) + QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onMainDefaultPositionCheckBox) - QtCore.QObject.connect(self.footerDefaultPositionCheckBox, + self.onMainPositionCheckBoxStateChanged) + QtCore.QObject.connect(self.footerPositionCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onFooterDefaultPositionCheckBox) + self.onFooterPositionCheckBoxStateChanged) QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), - self.pageChanged) + self.onCurrentIdChanged) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_line_count'), self.updateLinesText) QtCore.QObject.connect(self.mainSizeSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) - QtCore.QObject.connect(self.mainSizeSpinBox, - QtCore.SIGNAL(u'editingFinished()'), - self.calculateLines) QtCore.QObject.connect(self.lineSpacingSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) - QtCore.QObject.connect(self.lineSpacingSpinBox, - QtCore.SIGNAL(u'editingFinished()'), - self.calculateLines) QtCore.QObject.connect(self.outlineSizeSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) - QtCore.QObject.connect(self.outlineSizeSpinBox, - QtCore.SIGNAL(u'editingFinished()'), - self.calculateLines) QtCore.QObject.connect(self.shadowSizeSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) - QtCore.QObject.connect(self.shadowSizeSpinBox, - QtCore.SIGNAL(u'editingFinished()'), - self.calculateLines) QtCore.QObject.connect(self.mainFontComboBox, QtCore.SIGNAL(u'activated(int)'), self.calculateLines) - - def pageChanged(self, pageId): - """ - Detects Page changes and updates as approprate. - """ - if pageId == 6: - self.updateTheme() - frame = self.thememanager.generateImage(self.theme) - self.previewBoxLabel.setPixmap(QtGui.QPixmap.fromImage(frame)) + QtCore.QObject.connect(self, QtCore.SIGNAL(u'accepted()'), self.accept) def setDefaults(self): """ @@ -147,19 +127,19 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ self.restart() self.accepted = False - self.setBackgroundTabValues() - self.setMainAreaTabValues() - self.setFooterAreaTabValues() - self.setAlignmentTabValues() - self.setPositionTabValues() - self.setPreviewTabValues() + self.setBackgroundPageValues() + self.setMainAreaPageValues() + self.setFooterAreaPageValues() + self.setAlignmentPageValues() + self.setPositionPageValues() + self.setPreviewPageValues() def registerFields(self): """ Map field names to screen names, """ self.backgroundPage.registerField( - u'background_type', self.backgroundTypeComboBox) + u'background_type', self.backgroundComboBox) self.backgroundPage.registerField( u'color', self.colorButton) self.backgroundPage.registerField( @@ -167,11 +147,11 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.backgroundPage.registerField( u'grandient_end', self.gradientEndButton) self.backgroundPage.registerField( - u'background_image', self.imageLineEdit) + u'background_image', self.imageFileEdit) self.backgroundPage.registerField( u'gradient', self.gradientComboBox) self.mainAreaPage.registerField( - u'mainColorPushButton', self.mainColorPushButton) + u'mainColorButton', self.mainColorButton) self.mainAreaPage.registerField( u'mainSizeSpinBox', self.mainSizeSpinBox) self.mainAreaPage.registerField( @@ -179,17 +159,17 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.mainAreaPage.registerField( u'outlineCheckBox', self.outlineCheckBox) self.mainAreaPage.registerField( - u'outlineColorPushButton', self.outlineColorPushButton) + u'outlineColorButton', self.outlineColorButton) self.mainAreaPage.registerField( u'outlineSizeSpinBox', self.outlineSizeSpinBox) self.mainAreaPage.registerField( u'shadowCheckBox', self.shadowCheckBox) self.mainAreaPage.registerField( - u'boldCheckBox', self.boldCheckBox) + u'mainBoldCheckBox', self.mainBoldCheckBox) self.mainAreaPage.registerField( - u'italicsCheckBox', self.italicsCheckBox) + u'mainItalicsCheckBox', self.mainItalicsCheckBox) self.mainAreaPage.registerField( - u'shadowColorPushButton', self.shadowColorPushButton) + u'shadowColorButton', self.shadowColorButton) self.mainAreaPage.registerField( u'shadowSizeSpinBox', self.shadowSizeSpinBox) self.mainAreaPage.registerField( @@ -224,7 +204,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Calculate the number of lines on a page by rendering text """ # Do not trigger on start up - if self.page != 0: + if self.currentPage != self.welcomePage: self.updateTheme() frame = self.thememanager.generateImage(self.theme, True) @@ -235,7 +215,37 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.mainLineCountLabel.setText(unicode(translate('OpenLP.ThemeForm', \ '(%d lines per slide)' % int(lines)))) - def onOutlineCheckCheckBoxChanged(self, state): + def resizeEvent(self, event=None): + """ + Rescale the theme preview thumbnail on resize events. + """ + if not event: + event = QtGui.QResizeEvent(self.size(), self.size()) + QtGui.QWizard.resizeEvent(self, event) + if self.currentPage() == self.previewPage: + frameWidth = self.previewBoxLabel.lineWidth() + pixmapWidth = self.previewArea.width() - 2 * frameWidth + pixmapHeight = self.previewArea.height() - 2 * frameWidth + aspectRatio = float(pixmapWidth) / pixmapHeight + if aspectRatio < self.displayAspectRatio: + pixmapHeight = int(pixmapWidth / self.displayAspectRatio + 0.5) + else: + pixmapWidth = int(pixmapHeight * self.displayAspectRatio + 0.5) + self.previewBoxLabel.setFixedSize(pixmapWidth + 2 * frameWidth, + pixmapHeight + 2 * frameWidth) + + def onCurrentIdChanged(self, pageId): + """ + Detects Page changes and updates as approprate. + """ + if self.page(pageId) == self.previewPage: + self.updateTheme() + frame = self.thememanager.generateImage(self.theme) + self.previewBoxLabel.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.displayAspectRatio = float(frame.width()) / frame.height() + self.resizeEvent() + + def onOutlineCheckCheckBoxStateChanged(self, state): """ Change state as Outline check box changed """ @@ -243,11 +253,11 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.font_main_outline = True else: self.theme.font_main_outline = False - self.outlineColorPushButton.setEnabled(self.theme.font_main_outline) + self.outlineColorButton.setEnabled(self.theme.font_main_outline) self.outlineSizeSpinBox.setEnabled(self.theme.font_main_outline) self.calculateLines() - def onShadowCheckCheckBoxChanged(self, state): + def onShadowCheckCheckBoxStateChanged(self, state): """ Change state as Shadow check box changed """ @@ -255,35 +265,21 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.font_main_shadow = True else: self.theme.font_main_shadow = False - self.shadowColorPushButton.setEnabled(self.theme.font_main_shadow) + self.shadowColorButton.setEnabled(self.theme.font_main_shadow) self.shadowSizeSpinBox.setEnabled(self.theme.font_main_shadow) self.calculateLines() - def onMainDefaultPositionCheckBox(self, value): + def onMainPositionCheckBoxStateChanged(self, value): """ Change state as Main Area Position check box changed """ - if value == QtCore.Qt.Checked: - self.theme.font_main_override = False - else: - self.theme.font_main_override = True - self.mainXSpinBox.setEnabled(self.theme.font_main_override) - self.mainYSpinBox.setEnabled(self.theme.font_main_override) - self.mainHeightSpinBox.setEnabled(self.theme.font_main_override) - self.mainWidthSpinBox.setEnabled(self.theme.font_main_override) + self.theme.font_main_override = (value == QtCore.Qt.Checked) - def onFooterDefaultPositionCheckBox(self, value): + def onFooterPositionCheckBoxStateChanged(self, value): """ Change state as Footer Area Position check box changed """ - if value == QtCore.Qt.Checked: - self.theme.font_footer_override = False - else: - self.theme.font_footer_override = True - self.footerXSpinBox.setEnabled(self.theme.font_footer_override) - self.footerYSpinBox.setEnabled(self.theme.font_footer_override) - self.footerHeightSpinBox.setEnabled(self.theme.font_footer_override) - self.footerWidthSpinBox.setEnabled(self.theme.font_footer_override) + self.theme.font_footer_override = (value == QtCore.Qt.Checked) def exec_(self, edit=False): """ @@ -293,8 +289,14 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.updateThemeAllowed = False self.setDefaults() self.updateThemeAllowed = True + self.themeNameLabel.setVisible(not edit) + self.themeNameEdit.setVisible(not edit) if edit: + self.setWindowTitle(unicode(translate('OpenLP.ThemeWizard', + 'Edit Theme %s')) % self.theme.theme_name) self.next() + else: + self.setWindowTitle(translate('OpenLP.ThemeWizard', 'New Theme')) return QtGui.QWizard.exec_(self) def initializePage(self, id): @@ -302,21 +304,21 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Set up the pages for Initial run through dialog """ log.debug(u'initializePage %s' % id) - self.page = id - if id == 1: - self.setBackgroundTabValues() - elif id == 2: - self.setMainAreaTabValues() - elif id == 3: - self.setFooterAreaTabValues() - elif id == 4: - self.setAlignmentTabValues() - elif id == 5: - self.setPositionTabValues() + wizardPage = self.page(id) + if wizardPage == self.backgroundPage: + self.setBackgroundPageValues() + elif wizardPage == self.mainAreaPage: + self.setMainAreaPageValues() + elif wizardPage == self.footerAreaPage: + self.setFooterAreaPageValues() + elif wizardPage == self.alignmentPage: + self.setAlignmentPageValues() + elif wizardPage == self.areaPositionPage: + self.setPositionPageValues() - def setBackgroundTabValues(self): + def setBackgroundPageValues(self): """ - Handle the display and State of the background display tab. + Handle the display and state of the Background page. """ if self.theme.background_type == \ BackgroundType.to_string(BackgroundType.Solid): @@ -331,7 +333,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.background_end_color) self.setField(u'background_type', QtCore.QVariant(1)) else: - self.imageLineEdit.setText(self.theme.background_filename) + self.imageFileEdit.setText(self.theme.background_filename) self.setField(u'background_type', QtCore.QVariant(2)) if self.theme.background_direction == \ BackgroundGradientType.to_string(BackgroundGradientType.Horizontal): @@ -348,122 +350,101 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): else: self.setField(u'gradient', QtCore.QVariant(4)) - def setMainAreaTabValues(self): + def setMainAreaPageValues(self): """ - Handle the display and State of the Main Area tab. + Handle the display and state of the Main Area page. """ self.mainFontComboBox.setCurrentFont( QtGui.QFont(self.theme.font_main_name)) - self.mainColorPushButton.setStyleSheet(u'background-color: %s' % + self.mainColorButton.setStyleSheet(u'background-color: %s' % self.theme.font_main_color) - self.setField(u'mainSizeSpinBox', \ + self.setField(u'mainSizeSpinBox', QtCore.QVariant(self.theme.font_main_size)) - self.setField(u'lineSpacingSpinBox', \ + self.setField(u'lineSpacingSpinBox', QtCore.QVariant(self.theme.font_main_line_adjustment)) - self.setField(u'outlineCheckBox', \ + self.setField(u'outlineCheckBox', QtCore.QVariant(self.theme.font_main_outline)) - self.outlineColorPushButton.setStyleSheet(u'background-color: %s' % + self.outlineColorButton.setStyleSheet(u'background-color: %s' % self.theme.font_main_outline_color) - self.setField(u'outlineSizeSpinBox', \ + self.setField(u'outlineSizeSpinBox', QtCore.QVariant(self.theme.font_main_outline_size)) - self.setField(u'shadowCheckBox', \ + self.setField(u'shadowCheckBox', QtCore.QVariant(self.theme.font_main_shadow)) - self.shadowColorPushButton.setStyleSheet(u'background-color: %s' % + self.shadowColorButton.setStyleSheet(u'background-color: %s' % self.theme.font_main_shadow_color) - self.setField(u'shadowSizeSpinBox', \ + self.setField(u'shadowSizeSpinBox', QtCore.QVariant(self.theme.font_main_shadow_size)) - self.setField(u'boldCheckBox', \ + self.setField(u'mainBoldCheckBox', QtCore.QVariant(self.theme.font_main_bold)) - self.setField(u'italicsCheckBox', \ + self.setField(u'mainItalicsCheckBox', QtCore.QVariant(self.theme.font_main_italics)) - # Set up field states - if self.theme.font_main_outline: - self.setField(u'outlineCheckBox', QtCore.QVariant(False)) - else: - self.setField(u'outlineCheckBox', QtCore.QVariant(True)) - self.outlineColorPushButton.setEnabled(self.theme.font_main_outline) - self.outlineSizeSpinBox.setEnabled(self.theme.font_main_outline) - if self.theme.font_main_shadow: - self.setField(u'shadowCheckBox', QtCore.QVariant(False)) - else: - self.setField(u'shadowCheckBox', QtCore.QVariant(True)) - self.shadowColorPushButton.setEnabled(self.theme.font_main_shadow) - self.shadowSizeSpinBox.setEnabled(self.theme.font_main_shadow) - def setFooterAreaTabValues(self): + def setFooterAreaPageValues(self): """ - Handle the display and State of the Footer Area tab. + Handle the display and state of the Footer Area page. """ self.footerFontComboBox.setCurrentFont( QtGui.QFont(self.theme.font_main_name)) - self.footerColorPushButton.setStyleSheet(u'background-color: %s' % + self.footerColorButton.setStyleSheet(u'background-color: %s' % self.theme.font_footer_color) - self.setField(u'footerSizeSpinBox', \ + self.setField(u'footerSizeSpinBox', QtCore.QVariant(self.theme.font_footer_size)) - def setPositionTabValues(self): + def setPositionPageValues(self): """ - Handle the display and State of the Position tab. + Handle the display and state of the Position page. """ # Main Area - if self.theme.font_main_override: - self.mainDefaultPositionCheckBox.setChecked(False) - else: - self.mainDefaultPositionCheckBox.setChecked(True) - self.setField(u'mainPositionX', \ - QtCore.QVariant(self.theme.font_main_x)) - self.setField(u'mainPositionY', \ - QtCore.QVariant(self.theme.font_main_y)) - self.setField(u'mainPositionHeight', \ + self.mainPositionCheckBox.setChecked(not self.theme.font_main_override) + self.setField(u'mainPositionX', QtCore.QVariant(self.theme.font_main_x)) + self.setField(u'mainPositionY', QtCore.QVariant(self.theme.font_main_y)) + self.setField(u'mainPositionHeight', QtCore.QVariant(self.theme.font_main_height)) - self.setField(u'mainPositionWidth', \ + self.setField(u'mainPositionWidth', QtCore.QVariant(self.theme.font_main_width)) # Footer - if self.theme.font_footer_override: - self.footerDefaultPositionCheckBox.setChecked(False) - else: - self.footerDefaultPositionCheckBox.setChecked(True) - self.setField(u'footerPositionX', \ + self.footerPositionCheckBox.setChecked( + not self.theme.font_footer_override) + self.setField(u'footerPositionX', QtCore.QVariant(self.theme.font_footer_x)) - self.setField(u'footerPositionY', \ + self.setField(u'footerPositionY', QtCore.QVariant(self.theme.font_footer_y)) - self.setField(u'footerPositionHeight', \ + self.setField(u'footerPositionHeight', QtCore.QVariant(self.theme.font_footer_height)) - self.setField(u'footerPositionWidth', \ + self.setField(u'footerPositionWidth', QtCore.QVariant(self.theme.font_footer_width)) - def setAlignmentTabValues(self): + def setAlignmentPageValues(self): """ - Define the Tab Alignments Page + Handle the display and state of the Alignments page. """ - self.setField(u'horizontal', \ + self.setField(u'horizontal', QtCore.QVariant(self.theme.display_horizontal_align)) - self.setField(u'vertical', \ + self.setField(u'vertical', QtCore.QVariant(self.theme.display_vertical_align)) - self.setField(u'slideTransition', \ + self.setField(u'slideTransition', QtCore.QVariant(self.theme.display_slide_transition)) - def setPreviewTabValues(self): + def setPreviewPageValues(self): + """ + Handle the display and state of the Preview page. + """ self.setField(u'name', QtCore.QVariant(self.theme.theme_name)) - if len(self.theme.theme_name) > 0: - self.themeNameEdit.setEnabled(False) - else: - self.themeNameEdit.setEnabled(True) - def onBackgroundComboBox(self, index): + def onBackgroundComboBoxCurrentIndexChanged(self, index): """ Background style Combo box has changed. """ self.theme.background_type = BackgroundType.to_string(index) - self.setBackgroundTabValues() + self.setBackgroundPageValues() - def onGradientComboBox(self, index): + def onGradientComboBoxCurrentIndexChanged(self, index): """ Background gradient Combo box has changed. """ self.theme.background_direction = \ BackgroundGradientType.to_string(index) - self.setBackgroundTabValues() + self.setBackgroundPageValues() def onColorButtonClicked(self): """ @@ -471,7 +452,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ self.theme.background_color = \ self._colorButton(self.theme.background_color) - self.setBackgroundTabValues() + self.setBackgroundPageValues() def onGradientStartButtonClicked(self): """ @@ -479,7 +460,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ self.theme.background_start_color = \ self._colorButton(self.theme.background_start_color) - self.setBackgroundTabValues() + self.setBackgroundPageValues() def onGradientEndButtonClicked(self): """ @@ -487,7 +468,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ self.theme.background_end_color = \ self._colorButton(self.theme.background_end_color) - self.setBackgroundTabValues() + self.setBackgroundPageValues() def onImageBrowseButtonClicked(self): """ @@ -501,27 +482,27 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): images_filter) if filename: self.theme.background_filename = unicode(filename) - self.setBackgroundTabValues() + self.setBackgroundPageValues() - def onMainColourPushButtonClicked(self): + def onMainColorButtonClicked(self): self.theme.font_main_color = \ self._colorButton(self.theme.font_main_color) - self.setMainAreaTabValues() + self.setMainAreaPageValues() - def onOutlineColourPushButtonClicked(self): + def onOutlineColorButtonClicked(self): self.theme.font_main_outline_color = \ self._colorButton(self.theme.font_main_outline_color) - self.setMainAreaTabValues() + self.setMainAreaPageValues() - def onShadowColourPushButtonClicked(self): + def onShadowColorButtonClicked(self): self.theme.font_main_shadow_color = \ self._colorButton(self.theme.font_main_shadow_color) - self.setMainAreaTabValues() + self.setMainAreaPageValues() - def onFooterColourPushButtonClicked(self): + def onFooterColorButtonClicked(self): self.theme.font_footer_color = \ self._colorButton(self.theme.font_footer_color) - self.setFooterAreaTabValues() + self.setFooterAreaPageValues() def updateTheme(self): """ @@ -543,9 +524,9 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.font_main_shadow_size = \ self.field(u'shadowSizeSpinBox').toInt()[0] self.theme.font_main_bold = \ - self.field(u'boldCheckBox').toBool() + self.field(u'mainBoldCheckBox').toBool() self.theme.font_main_italics = \ - self.field(u'italicsCheckBox').toBool() + self.field(u'mainItalicsCheckBox').toBool() # footer page self.theme.font_footer_name = \ unicode(self.footerFontComboBox.currentFont().family()) @@ -586,8 +567,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtGui.QMessageBox.critical(self, translate('OpenLP.ThemeForm', 'Theme Name Missing'), translate('OpenLP.ThemeForm', - 'There is no name for this theme. ' - 'Please enter one.'), + 'There is no name for this theme. Please enter one.'), (QtGui.QMessageBox.Ok), QtGui.QMessageBox.Ok) return @@ -595,8 +575,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtGui.QMessageBox.critical(self, translate('OpenLP.ThemeForm', 'Theme Name Invalid'), translate('OpenLP.ThemeForm', - 'Invalid theme name. ' - 'Please enter one.'), + 'Invalid theme name. Please enter one.'), (QtGui.QMessageBox.Ok), QtGui.QMessageBox.Ok) return diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 477b07422..61216c161 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -35,7 +35,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import FileRenameForm, ThemeForm from openlp.core.theme import Theme from openlp.core.lib import OpenLPToolbar, ThemeXML, get_text_file_string, \ - build_icon, Receiver, SettingsManager, translate, check_item_selected, \ + build_icon, Receiver, SettingsManager, translate, check_item_selected, \ BackgroundType, BackgroundGradientType from openlp.core.utils import AppLocation, get_filesystem_encoding @@ -223,14 +223,17 @@ class ThemeManager(QtGui.QWidget): """ Renames an existing theme to a new name """ - action = unicode(translate('OpenLP.ThemeManager', 'Rename')) - if self._validate_theme_action(action, False): + if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager', + 'You must select a theme to rename.')), + unicode(translate('OpenLP.ThemeManager', 'Rename Confirmation')), + unicode(translate('OpenLP.ThemeManager', 'Rename %s theme?')), + False): item = self.themeListWidget.currentItem() oldThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) self.fileRenameForm.fileNameEdit.setText(oldThemeName) self.saveThemeName = oldThemeName if self.fileRenameForm.exec_(): - newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) + newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) oldThemeData = self.getThemeData(oldThemeName) self.deleteTheme(oldThemeName) self.cloneThemeData(oldThemeData, newThemeName) @@ -244,7 +247,7 @@ class ThemeManager(QtGui.QWidget): self.fileRenameForm.fileNameEdit.setText(oldThemeName) self.saveThemeName = u'' if self.fileRenameForm.exec_(True): - newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) + newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) themeData = self.getThemeData(oldThemeName) self.cloneThemeData(themeData, newThemeName) self.loadThemes() @@ -288,8 +291,10 @@ class ThemeManager(QtGui.QWidget): """ Delete a theme """ - action = unicode(translate('OpenLP.ThemeManager', 'Delete')) - if self._validate_theme_action(action): + if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager', + 'You must select a theme to delete.')), + unicode(translate('OpenLP.ThemeManager', 'Delete Confirmation')), + unicode(translate('OpenLP.ThemeManager', 'Delete %s theme?'))): item = self.themeListWidget.currentItem() theme = unicode(item.text()) row = self.themeListWidget.row(item) @@ -331,7 +336,7 @@ class ThemeManager(QtGui.QWidget): theme = unicode(item.data(QtCore.Qt.UserRole).toString()) path = QtGui.QFileDialog.getExistingDirectory(self, unicode(translate('OpenLP.ThemeManager', - 'Save Theme - (%s)')) % theme, + 'Save Theme - (%s)')) % theme, SettingsManager.get_last_dir(self.settingsSection, 1)) path = unicode(path) if path: @@ -750,7 +755,8 @@ class ThemeManager(QtGui.QWidget): theme.extend_image_filename(path) return theme - def _validate_theme_action(self, action, testPlugin=True): + def _validate_theme_action(self, select_text, confirm_title, confirm_text, + testPlugin=True): """ Check to see if theme has been selected and the destructive action is allowed. @@ -758,19 +764,14 @@ class ThemeManager(QtGui.QWidget): self.global_theme = unicode(QtCore.QSettings().value( self.settingsSection + u'/global theme', QtCore.QVariant(u'')).toString()) - if check_item_selected(self.themeListWidget, - unicode(translate('OpenLP.ThemeManager', - 'You must select a theme to %s.')) % action): + if check_item_selected(self.themeListWidget, select_text): item = self.themeListWidget.currentItem() theme = unicode(item.text()) # confirm deletion - answer = QtGui.QMessageBox.question(self, - unicode(translate('OpenLP.ThemeManager', '%s Confirmation')) - % action, - unicode(translate('OpenLP.ThemeManager', '%s %s theme?')) - % (action, theme), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | - QtGui.QMessageBox.No), QtGui.QMessageBox.No) + answer = QtGui.QMessageBox.question(self, confirm_title, + confirm_text % theme, QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), + QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: return False # should be the same unless default @@ -779,6 +780,7 @@ class ThemeManager(QtGui.QWidget): translate('OpenLP.ThemeManager', 'Error'), translate('OpenLP.ThemeManager', 'You are unable to delete the default theme.')) + return False else: if testPlugin: for plugin in self.parent.pluginManager.plugins: diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 294d521dc..21df94d9d 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -212,4 +212,4 @@ class ThemesTab(SettingsTab): if not preview.isNull(): preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.DefaultListView.setPixmap(preview) + self.DefaultListView.setPixmap(preview) \ No newline at end of file diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index d86792af4..691b5e568 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -31,592 +31,393 @@ from openlp.core.lib import translate, build_icon class Ui_ThemeWizard(object): def setupUi(self, ThemeWizard): ThemeWizard.setObjectName(u'OpenLP.ThemeWizard') - ThemeWizard.resize(550, 386) ThemeWizard.setModal(True) ThemeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) ThemeWizard.setOptions( QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage) + # Welcome Page self.welcomePage = QtGui.QWizardPage() - self.welcomePage.setTitle(u'') - self.welcomePage.setSubTitle(u'') - self.welcomePage.setObjectName(u'welcomePage') self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap, QtGui.QPixmap(u':/wizards/wizard_createtheme.bmp')) - self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage) - self.welcomeLayout.setSpacing(8) - self.welcomeLayout.setMargin(0) - self.welcomeLayout.setObjectName(u'welcomeLayout') - self.welcomePageLayout = QtGui.QVBoxLayout() - self.welcomePageLayout.setSpacing(8) - self.welcomePageLayout.setObjectName(u'welcomePageLayout') + self.welcomePage.setObjectName(u'WelcomePage') + self.welcomeLayout = QtGui.QVBoxLayout(self.welcomePage) + self.welcomeLayout.setObjectName(u'WelcomeLayout') self.titleLabel = QtGui.QLabel(self.welcomePage) - self.titleLabel.setObjectName(u'titleLabel') - self.welcomePageLayout.addWidget(self.titleLabel) - self.welcomeTopSpacer = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - self.welcomePageLayout.addItem(self.welcomeTopSpacer) + self.titleLabel.setObjectName(u'TitleLabel') + self.welcomeLayout.addWidget(self.titleLabel) + self.welcomeLayout.addSpacing(40) self.informationLabel = QtGui.QLabel(self.welcomePage) self.informationLabel.setWordWrap(True) - self.informationLabel.setMargin(10) - self.informationLabel.setObjectName(u'informationLabel') - self.welcomePageLayout.addWidget(self.informationLabel) - self.welcomeBottomSpacer = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.welcomePageLayout.addItem(self.welcomeBottomSpacer) - self.welcomeLayout.addLayout(self.welcomePageLayout) + self.informationLabel.setObjectName(u'InformationLabel') + self.welcomeLayout.addWidget(self.informationLabel) + self.welcomeLayout.addStretch() ThemeWizard.addPage(self.welcomePage) + # Background Page self.backgroundPage = QtGui.QWizardPage() - self.backgroundPage.setObjectName(u'backgroundPage') + self.backgroundPage.setObjectName(u'BackgroundPage') self.backgroundLayout = QtGui.QVBoxLayout(self.backgroundPage) - self.backgroundLayout.setSpacing(8) - self.backgroundLayout.setMargin(20) - self.backgroundLayout.setObjectName(u'backgroundLayout') - self.backgroundTypeLayout = QtGui.QHBoxLayout() - self.backgroundTypeLayout.setSpacing(8) - self.backgroundTypeLayout.setObjectName(u'backgroundTypeLayout') - self.backgroundTypeLabel = QtGui.QLabel(self.backgroundPage) - self.backgroundTypeLabel.setObjectName(u'backgroundTypeLabel') - self.backgroundTypeLayout.addWidget(self.backgroundTypeLabel) - self.backgroundTypeComboBox = QtGui.QComboBox(self.backgroundPage) - self.backgroundTypeComboBox.setObjectName(u'backgroundTypeComboBox') - self.backgroundTypeComboBox.addItem(u'') - self.backgroundTypeComboBox.addItem(u'') - self.backgroundTypeComboBox.addItem(u'') - self.backgroundTypeLayout.addWidget(self.backgroundTypeComboBox) - self.backgroundTypeSpacer = QtGui.QSpacerItem(40, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.backgroundTypeLayout.addItem(self.backgroundTypeSpacer) + self.backgroundLayout.setObjectName(u'BackgroundLayout') + self.backgroundTypeLayout = QtGui.QFormLayout() + self.backgroundTypeLayout.setObjectName(u'BackgroundTypeLayout') + self.backgroundLabel = QtGui.QLabel(self.backgroundPage) + self.backgroundLabel.setObjectName(u'BackgroundLabel') + self.backgroundComboBox = QtGui.QComboBox(self.backgroundPage) + self.backgroundComboBox.addItems([u'', u'', u'']) + self.backgroundComboBox.setObjectName(u'BackgroundComboBox') + self.backgroundTypeLayout.addRow(self.backgroundLabel, + self.backgroundComboBox) + self.backgroundTypeSpacer = QtGui.QSpacerItem(10, 0, + QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) + self.backgroundTypeLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.backgroundTypeSpacer) self.backgroundLayout.addLayout(self.backgroundTypeLayout) - self.backgroundStackedWidget = QtGui.QStackedWidget( - self.backgroundPage) - self.backgroundStackedWidget.setObjectName(u'backgroundStackedWidget') - self.colorPage = QtGui.QWidget() - self.colorPage.setObjectName(u'colorPage') - self.colorLayout = QtGui.QFormLayout(self.colorPage) + self.backgroundStack = QtGui.QStackedLayout() + self.backgroundStack.setObjectName(u'BackgroundStack') + self.colorWidget = QtGui.QWidget(self.backgroundPage) + self.colorWidget.setObjectName(u'ColorWidget') + self.colorLayout = QtGui.QFormLayout(self.colorWidget) self.colorLayout.setMargin(0) - self.colorLayout.setSpacing(8) - self.colorLayout.setObjectName(u'colorLayout') - self.colorLabel = QtGui.QLabel(self.colorPage) - self.colorLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.colorLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.colorLabel.setObjectName(u'colorLabel') - self.colorLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.colorLabel) - self.colorButton = QtGui.QPushButton(self.colorPage) - self.colorButton.setText(u'') - self.colorButton.setObjectName(u'colorButton') - self.colorLayout.setWidget(0, - QtGui.QFormLayout.FieldRole, self.colorButton) - self.backgroundStackedWidget.addWidget(self.colorPage) - self.gradientPage = QtGui.QWidget() - self.gradientPage.setObjectName(u'gradientPage') - self.gradientLayout = QtGui.QFormLayout(self.gradientPage) + self.colorLayout.setObjectName(u'ColorLayout') + self.colorLabel = QtGui.QLabel(self.colorWidget) + self.colorLabel.setObjectName(u'ColorLabel') + self.colorButton = QtGui.QPushButton(self.colorWidget) + self.colorButton.setObjectName(u'ColorButton') + self.colorLayout.addRow(self.colorLabel, self.colorButton) + self.colorSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.colorLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.colorSpacer) + self.backgroundStack.addWidget(self.colorWidget) + self.gradientWidget = QtGui.QWidget(self.backgroundPage) + self.gradientWidget.setObjectName(u'GradientWidget') + self.gradientLayout = QtGui.QFormLayout(self.gradientWidget) self.gradientLayout.setMargin(0) - self.gradientLayout.setSpacing(8) - self.gradientLayout.setObjectName(u'gradientLayout') - self.gradientStartLabel = QtGui.QLabel(self.gradientPage) - self.gradientStartLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.gradientStartLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.gradientStartLabel.setObjectName(u'gradientStartLabel') - self.gradientLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.gradientStartLabel) - self.gradientStartButton = QtGui.QPushButton(self.gradientPage) - self.gradientStartButton.setText(u'') - self.gradientStartButton.setObjectName(u'gradientStartButton') - self.gradientLayout.setWidget(0, - QtGui.QFormLayout.FieldRole, self.gradientStartButton) - self.gradientEndLabel = QtGui.QLabel(self.gradientPage) - self.gradientEndLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.gradientEndLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.gradientEndLabel.setObjectName(u'gradientEndLabel') - self.gradientLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.gradientEndLabel) - self.gradientEndButton = QtGui.QPushButton(self.gradientPage) - self.gradientEndButton.setText(u'') - self.gradientEndButton.setObjectName(u'gradientEndButton') - self.gradientLayout.setWidget(1, - QtGui.QFormLayout.FieldRole, self.gradientEndButton) - self.gradientTypeLabel = QtGui.QLabel(self.gradientPage) - self.gradientTypeLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.gradientTypeLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.gradientTypeLabel.setObjectName(u'gradientTypeLabel') - self.gradientLayout.setWidget(2, - QtGui.QFormLayout.LabelRole, self.gradientTypeLabel) - self.gradientComboBox = QtGui.QComboBox(self.gradientPage) - self.gradientComboBox.setObjectName(u'gradientComboBox') - self.gradientComboBox.addItem(u'') - self.gradientComboBox.addItem(u'') - self.gradientComboBox.addItem(u'') - self.gradientComboBox.addItem(u'') - self.gradientComboBox.addItem(u'') - self.gradientLayout.setWidget(2, - QtGui.QFormLayout.FieldRole, self.gradientComboBox) - self.backgroundStackedWidget.addWidget(self.gradientPage) - self.imagePage = QtGui.QWidget() - self.imagePage.setObjectName(u'imagePage') - self.imageLayout = QtGui.QFormLayout(self.imagePage) + self.gradientLayout.setObjectName(u'GradientLayout') + self.gradientStartLabel = QtGui.QLabel(self.gradientWidget) + self.gradientStartLabel.setObjectName(u'GradientStartLabel') + self.gradientStartButton = QtGui.QPushButton(self.gradientWidget) + self.gradientStartButton.setObjectName(u'GradientStartButton') + self.gradientLayout.addRow(self.gradientStartLabel, + self.gradientStartButton) + self.gradientEndLabel = QtGui.QLabel(self.gradientWidget) + self.gradientEndLabel.setObjectName(u'GradientEndLabel') + self.gradientEndButton = QtGui.QPushButton(self.gradientWidget) + self.gradientEndButton.setObjectName(u'GradientEndButton') + self.gradientLayout.addRow(self.gradientEndLabel, + self.gradientEndButton) + self.gradientTypeLabel = QtGui.QLabel(self.gradientWidget) + self.gradientTypeLabel.setObjectName(u'GradientTypeLabel') + self.gradientComboBox = QtGui.QComboBox(self.gradientWidget) + self.gradientComboBox.setObjectName(u'GradientComboBox') + self.gradientComboBox.addItems([u'', u'', u'', u'', u'']) + self.gradientLayout.addRow(self.gradientTypeLabel, + self.gradientComboBox) + self.gradientSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.gradientLayout.setItem(3, QtGui.QFormLayout.LabelRole, + self.gradientSpacer) + self.backgroundStack.addWidget(self.gradientWidget) + self.imageWidget = QtGui.QWidget(self.backgroundPage) + self.imageWidget.setObjectName(u'ImageWidget') + self.imageLayout = QtGui.QFormLayout(self.imageWidget) self.imageLayout.setMargin(0) - self.imageLayout.setSpacing(8) - self.imageLayout.setObjectName(u'imageLayout') - self.imageLabel = QtGui.QLabel(self.imagePage) - self.imageLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.imageLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.imageLabel.setObjectName(u'imageLabel') - self.imageLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.imageLabel) + self.imageLayout.setObjectName(u'ImageLayout') + self.imageLabel = QtGui.QLabel(self.imageWidget) + self.imageLabel.setObjectName(u'ImageLabel') self.imageFileLayout = QtGui.QHBoxLayout() - self.imageFileLayout.setSpacing(8) - self.imageFileLayout.setObjectName(u'imageFileLayout') - self.imageLineEdit = QtGui.QLineEdit(self.imagePage) - self.imageLineEdit.setObjectName(u'imageLineEdit') - self.imageFileLayout.addWidget(self.imageLineEdit) - self.imageBrowseButton = QtGui.QToolButton(self.imagePage) - self.imageBrowseButton.setText(u'') + self.imageFileLayout.setObjectName(u'ImageFileLayout') + self.imageFileEdit = QtGui.QLineEdit(self.imageWidget) + self.imageFileEdit.setObjectName(u'ImageFileEdit') + self.imageFileLayout.addWidget(self.imageFileEdit) + self.imageBrowseButton = QtGui.QToolButton(self.imageWidget) + self.imageBrowseButton.setObjectName(u'ImageBrowseButton') self.imageBrowseButton.setIcon( build_icon(u':/general/general_open.png')) - self.imageBrowseButton.setObjectName(u'imageBrowseButton') self.imageFileLayout.addWidget(self.imageBrowseButton) - self.imageLayout.setLayout(0, - QtGui.QFormLayout.FieldRole, self.imageFileLayout) - self.backgroundStackedWidget.addWidget(self.imagePage) - self.backgroundLayout.addWidget(self.backgroundStackedWidget) + self.imageLayout.addRow(self.imageLabel, self.imageFileLayout) + self.imageSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.imageLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.imageSpacer) + self.backgroundStack.addWidget(self.imageWidget) + self.backgroundLayout.addLayout(self.backgroundStack) ThemeWizard.addPage(self.backgroundPage) + # Main Area Page self.mainAreaPage = QtGui.QWizardPage() - self.mainAreaPage.setObjectName(u'mainAreaPage') + self.mainAreaPage.setObjectName(u'MainAreaPage') self.mainAreaLayout = QtGui.QFormLayout(self.mainAreaPage) - self.mainAreaLayout.setFormAlignment(QtCore.Qt.AlignLeading | - QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) - self.mainAreaLayout.setMargin(20) - self.mainAreaLayout.setSpacing(8) - self.mainAreaLayout.setObjectName(u'mainAreaLayout') + self.mainAreaLayout.setObjectName(u'MainAreaLayout') self.mainFontLabel = QtGui.QLabel(self.mainAreaPage) - self.mainFontLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.mainFontLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.mainFontLabel.setObjectName(u'mainFontLabel') - self.mainAreaLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.mainFontLabel) + self.mainFontLabel.setObjectName(u'MainFontLabel') self.mainFontComboBox = QtGui.QFontComboBox(self.mainAreaPage) - self.mainFontComboBox.setObjectName(u'mainFontComboBox') - self.mainAreaLayout.setWidget(0, - QtGui.QFormLayout.FieldRole, self.mainFontComboBox) + self.mainFontComboBox.setObjectName(u'MainFontComboBox') + self.mainAreaLayout.addRow(self.mainFontLabel, self.mainFontComboBox) self.mainColorLabel = QtGui.QLabel(self.mainAreaPage) - self.mainColorLabel.setObjectName(u'mainColorLabel') - self.mainAreaLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.mainColorLabel) - self.fontPropertiesLayout = QtGui.QHBoxLayout() - self.fontPropertiesLayout.setSpacing(24) - self.fontPropertiesLayout.setObjectName(u'fontPropertiesLayout') - self.mainColorPushButton = QtGui.QPushButton(self.mainAreaPage) - self.mainColorPushButton.setText(u'') - self.mainColorPushButton.setObjectName(u'mainColorPushButton') - self.fontPropertiesLayout.addWidget(self.mainColorPushButton) - self.boldCheckBox = QtGui.QCheckBox(self.mainAreaPage) - self.boldCheckBox.setObjectName(u'boldCheckBox') - self.fontPropertiesLayout.addWidget(self.boldCheckBox) - self.italicsCheckBox = QtGui.QCheckBox(self.mainAreaPage) - self.italicsCheckBox.setObjectName(u'italicsCheckBox') - self.fontPropertiesLayout.addWidget(self.italicsCheckBox) - self.mainAreaLayout.setLayout(1, - QtGui.QFormLayout.FieldRole, self.fontPropertiesLayout) + self.mainColorLabel.setObjectName(u'MainColorLabel') + self.mainPropertiesLayout = QtGui.QHBoxLayout() + self.mainPropertiesLayout.setObjectName(u'MainPropertiesLayout') + self.mainColorButton = QtGui.QPushButton(self.mainAreaPage) + self.mainColorButton.setObjectName(u'MainColorButton') + self.mainPropertiesLayout.addWidget(self.mainColorButton) + self.mainPropertiesLayout.addSpacing(20) + self.mainBoldCheckBox = QtGui.QCheckBox(self.mainAreaPage) + self.mainBoldCheckBox.setObjectName(u'MainBoldCheckBox') + self.mainPropertiesLayout.addWidget(self.mainBoldCheckBox) + self.mainPropertiesLayout.addSpacing(20) + self.mainItalicsCheckBox = QtGui.QCheckBox(self.mainAreaPage) + self.mainItalicsCheckBox.setObjectName(u'MainItalicsCheckBox') + self.mainPropertiesLayout.addWidget(self.mainItalicsCheckBox) + self.mainAreaLayout.addRow(self.mainColorLabel, + self.mainPropertiesLayout) self.mainSizeLabel = QtGui.QLabel(self.mainAreaPage) - self.mainSizeLabel.setObjectName(u'mainSizeLabel') - self.mainAreaLayout.setWidget(2, - QtGui.QFormLayout.LabelRole, self.mainSizeLabel) + self.mainSizeLabel.setObjectName(u'MainSizeLabel') self.mainSizeLayout = QtGui.QHBoxLayout() - self.mainSizeLayout.setSpacing(8) - self.mainSizeLayout.setMargin(0) - self.mainSizeLayout.setObjectName(u'mainSizeLayout') + self.mainSizeLayout.setObjectName(u'MainSizeLayout') self.mainSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.mainSizeSpinBox.sizePolicy().hasHeightForWidth()) - self.mainSizeSpinBox.setSizePolicy(sizePolicy) - self.mainSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0)) self.mainSizeSpinBox.setMaximum(999) - self.mainSizeSpinBox.setProperty(u'value', 16) - self.mainSizeSpinBox.setObjectName(u'mainSizeSpinBox') + self.mainSizeSpinBox.setValue(16) + self.mainSizeSpinBox.setObjectName(u'MainSizeSpinBox') self.mainSizeLayout.addWidget(self.mainSizeSpinBox) self.mainLineCountLabel = QtGui.QLabel(self.mainAreaPage) - self.mainLineCountLabel.setObjectName(u'mainLineCountLabel') + self.mainLineCountLabel.setObjectName(u'MainLineCountLabel') self.mainSizeLayout.addWidget(self.mainLineCountLabel) - self.mainAreaLayout.setLayout(2, - QtGui.QFormLayout.FieldRole, self.mainSizeLayout) + self.mainAreaLayout.addRow(self.mainSizeLabel, self.mainSizeLayout) self.lineSpacingLabel = QtGui.QLabel(self.mainAreaPage) - self.lineSpacingLabel.setObjectName(u'lineSpacingLabel') - self.mainAreaLayout.setWidget(3, - QtGui.QFormLayout.LabelRole, self.lineSpacingLabel) + self.lineSpacingLabel.setObjectName(u'LineSpacingLabel') self.lineSpacingSpinBox = QtGui.QSpinBox(self.mainAreaPage) self.lineSpacingSpinBox.setMinimum(-50) self.lineSpacingSpinBox.setMaximum(50) - self.lineSpacingSpinBox.setObjectName(u'lineSpacingSpinBox') - self.mainAreaLayout.setWidget(3, - QtGui.QFormLayout.FieldRole, self.lineSpacingSpinBox) + self.lineSpacingSpinBox.setObjectName(u'LineSpacingSpinBox') + self.mainAreaLayout.addRow(self.lineSpacingLabel, + self.lineSpacingSpinBox) self.outlineCheckBox = QtGui.QCheckBox(self.mainAreaPage) - self.outlineCheckBox.setObjectName(u'outlineCheckBox') - self.mainAreaLayout.setWidget(4, - QtGui.QFormLayout.LabelRole, self.outlineCheckBox) + self.outlineCheckBox.setObjectName(u'OutlineCheckBox') self.outlineLayout = QtGui.QHBoxLayout() - self.outlineLayout.setObjectName(u'outlineLayout') - self.outlineColorPushButton = QtGui.QPushButton(self.mainAreaPage) - self.outlineColorPushButton.setEnabled(True) - self.outlineColorPushButton.setText(u'') - self.outlineColorPushButton.setObjectName(u'outlineColorPushButton') - self.outlineLayout.addWidget(self.outlineColorPushButton) + self.outlineLayout.setObjectName(u'OutlineLayout') + self.outlineColorButton = QtGui.QPushButton(self.mainAreaPage) + self.outlineColorButton.setEnabled(False) + self.outlineColorButton.setObjectName(u'OutlineColorButton') + self.outlineLayout.addWidget(self.outlineColorButton) + self.outlineLayout.addSpacing(20) self.outlineSizeLabel = QtGui.QLabel(self.mainAreaPage) - self.outlineSizeLabel.setObjectName(u'outlineSizeLabel') + self.outlineSizeLabel.setObjectName(u'OutlineSizeLabel') self.outlineLayout.addWidget(self.outlineSizeLabel) self.outlineSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage) - self.outlineSizeSpinBox.setObjectName(u'outlineSizeSpinBox') + self.outlineSizeSpinBox.setEnabled(False) + self.outlineSizeSpinBox.setObjectName(u'OutlineSizeSpinBox') self.outlineLayout.addWidget(self.outlineSizeSpinBox) - self.mainAreaLayout.setLayout(4, - QtGui.QFormLayout.FieldRole, self.outlineLayout) + self.mainAreaLayout.addRow(self.outlineCheckBox, self.outlineLayout) self.shadowCheckBox = QtGui.QCheckBox(self.mainAreaPage) - self.shadowCheckBox.setObjectName(u'shadowCheckBox') - self.mainAreaLayout.setWidget(5, - QtGui.QFormLayout.LabelRole, self.shadowCheckBox) + self.shadowCheckBox.setObjectName(u'ShadowCheckBox') self.shadowLayout = QtGui.QHBoxLayout() - self.shadowLayout.setObjectName(u'shadowLayout') - self.shadowColorPushButton = QtGui.QPushButton(self.mainAreaPage) - self.shadowColorPushButton.setEnabled(True) - self.shadowColorPushButton.setText(u'') - self.shadowColorPushButton.setObjectName(u'shadowColorPushButton') - self.shadowLayout.addWidget(self.shadowColorPushButton) + self.shadowLayout.setObjectName(u'ShadowLayout') + self.shadowColorButton = QtGui.QPushButton(self.mainAreaPage) + self.shadowColorButton.setEnabled(False) + self.shadowColorButton.setObjectName(u'shadowColorButton') + self.shadowLayout.addWidget(self.shadowColorButton) + self.shadowLayout.addSpacing(20) self.shadowSizeLabel = QtGui.QLabel(self.mainAreaPage) - self.shadowSizeLabel.setObjectName(u'shadowSizeLabel') + self.shadowSizeLabel.setObjectName(u'ShadowSizeLabel') self.shadowLayout.addWidget(self.shadowSizeLabel) self.shadowSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage) - self.shadowSizeSpinBox.setObjectName(u'shadowSizeSpinBox') + self.shadowSizeSpinBox.setEnabled(False) + self.shadowSizeSpinBox.setObjectName(u'ShadowSizeSpinBox') self.shadowLayout.addWidget(self.shadowSizeSpinBox) - self.mainAreaLayout.setLayout(5, - QtGui.QFormLayout.FieldRole, self.shadowLayout) + self.mainAreaLayout.addRow(self.shadowCheckBox, self.shadowLayout) ThemeWizard.addPage(self.mainAreaPage) + # Footer Area Page self.footerAreaPage = QtGui.QWizardPage() - self.footerAreaPage.setObjectName(u'footerAreaPage') - self.footerLayout = QtGui.QFormLayout(self.footerAreaPage) - self.footerLayout.setFieldGrowthPolicy( - QtGui.QFormLayout.ExpandingFieldsGrow) - self.footerLayout.setMargin(20) - self.footerLayout.setSpacing(8) - self.footerLayout.setObjectName(u'footerLayout') + self.footerAreaPage.setObjectName(u'FooterAreaPage') + self.footerAreaLayout = QtGui.QFormLayout(self.footerAreaPage) + self.footerAreaLayout.setObjectName(u'FooterAreaLayout') self.footerFontLabel = QtGui.QLabel(self.footerAreaPage) - self.footerFontLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.footerFontLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.footerFontLabel.setObjectName(u'footerFontLabel') - self.footerLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.footerFontLabel) + self.footerFontLabel.setObjectName(u'FooterFontLabel') self.footerFontComboBox = QtGui.QFontComboBox(self.footerAreaPage) self.footerFontComboBox.setObjectName(u'footerFontComboBox') - self.footerLayout.setWidget(0, - QtGui.QFormLayout.FieldRole, self.footerFontComboBox) + self.footerAreaLayout.addRow(self.footerFontLabel, + self.footerFontComboBox) self.footerColorLabel = QtGui.QLabel(self.footerAreaPage) - self.footerColorLabel.setObjectName(u'footerColorLabel') - self.footerLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.footerColorLabel) - self.footerColorPushButton = QtGui.QPushButton(self.footerAreaPage) - self.footerColorPushButton.setText(u'') - self.footerColorPushButton.setObjectName(u'footerColorPushButton') - self.footerLayout.setWidget(1, - QtGui.QFormLayout.FieldRole, self.footerColorPushButton) + self.footerColorLabel.setObjectName(u'FooterColorLabel') + self.footerColorButton = QtGui.QPushButton(self.footerAreaPage) + self.footerColorButton.setObjectName(u'footerColorButton') + self.footerAreaLayout.addRow(self.footerColorLabel, + self.footerColorButton) self.footerSizeLabel = QtGui.QLabel(self.footerAreaPage) - self.footerSizeLabel.setObjectName(u'footerSizeLabel') - self.footerLayout.setWidget(2, - QtGui.QFormLayout.LabelRole, self.footerSizeLabel) + self.footerSizeLabel.setObjectName(u'FooterSizeLabel') self.footerSizeSpinBox = QtGui.QSpinBox(self.footerAreaPage) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.footerSizeSpinBox.sizePolicy().hasHeightForWidth()) - self.footerSizeSpinBox.setSizePolicy(sizePolicy) - self.footerSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0)) self.footerSizeSpinBox.setMaximum(999) - self.footerSizeSpinBox.setProperty(u'value', 10) - self.footerSizeSpinBox.setObjectName(u'footerSizeSpinBox') - self.footerLayout.setWidget(2, - QtGui.QFormLayout.FieldRole, self.footerSizeSpinBox) + self.footerSizeSpinBox.setValue(10) + self.footerSizeSpinBox.setObjectName(u'FooterSizeSpinBox') + self.footerAreaLayout.addRow(self.footerSizeLabel, self.footerSizeSpinBox) ThemeWizard.addPage(self.footerAreaPage) + # Alignment Page self.alignmentPage = QtGui.QWizardPage() - self.alignmentPage.setObjectName(u'alignmentPage') + self.alignmentPage.setObjectName(u'AlignmentPage') self.alignmentLayout = QtGui.QFormLayout(self.alignmentPage) - self.alignmentLayout.setMargin(20) - self.alignmentLayout.setSpacing(8) - self.alignmentLayout.setObjectName(u'alignmentLayout') + self.alignmentLayout.setObjectName(u'AlignmentLayout') self.horizontalLabel = QtGui.QLabel(self.alignmentPage) - self.horizontalLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.horizontalLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.horizontalLabel.setObjectName(u'horizontalLabel') - self.alignmentLayout.setWidget(0, - QtGui.QFormLayout.LabelRole, self.horizontalLabel) + self.horizontalLabel.setObjectName(u'HorizontalLabel') self.horizontalComboBox = QtGui.QComboBox(self.alignmentPage) - self.horizontalComboBox.setEditable(False) - self.horizontalComboBox.setObjectName(u'horizontalComboBox') - self.horizontalComboBox.addItem(u'') - self.horizontalComboBox.addItem(u'') - self.horizontalComboBox.addItem(u'') - self.alignmentLayout.setWidget(0, - QtGui.QFormLayout.FieldRole, self.horizontalComboBox) + self.horizontalComboBox.addItems([u'', u'', u'']) + self.horizontalComboBox.setObjectName(u'HorizontalComboBox') + self.alignmentLayout.addRow(self.horizontalLabel, + self.horizontalComboBox) self.verticalLabel = QtGui.QLabel(self.alignmentPage) - self.verticalLabel.setObjectName(u'verticalLabel') - self.alignmentLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.verticalLabel) + self.verticalLabel.setObjectName(u'VerticalLabel') self.verticalComboBox = QtGui.QComboBox(self.alignmentPage) - self.verticalComboBox.setObjectName(u'verticalComboBox') - self.verticalComboBox.addItem(u'') - self.verticalComboBox.addItem(u'') - self.verticalComboBox.addItem(u'') - self.alignmentLayout.setWidget(1, - QtGui.QFormLayout.FieldRole, self.verticalComboBox) + self.verticalComboBox.addItems([u'', u'', u'']) + self.verticalComboBox.setObjectName(u'VerticalComboBox') + self.alignmentLayout.addRow(self.verticalLabel, self.verticalComboBox) + self.transitionsLabel = QtGui.QLabel(self.alignmentPage) + self.transitionsLabel.setObjectName(u'TransitionsLabel') self.transitionsCheckBox = QtGui.QCheckBox(self.alignmentPage) - self.transitionsCheckBox.setObjectName(u'transitionsCheckBox') - self.alignmentLayout.setWidget(2, - QtGui.QFormLayout.FieldRole, self.transitionsCheckBox) + self.transitionsCheckBox.setObjectName(u'TransitionsCheckBox') + self.alignmentLayout.addRow(self.transitionsLabel, + self.transitionsCheckBox) ThemeWizard.addPage(self.alignmentPage) + # Area Position Page self.areaPositionPage = QtGui.QWizardPage() - self.areaPositionPage.setObjectName(u'areaPositionPage') - self.areaPositionLayout = QtGui.QGridLayout(self.areaPositionPage) - self.areaPositionLayout.setMargin(20) - self.areaPositionLayout.setSpacing(8) - self.areaPositionLayout.setObjectName(u'areaPositionLayout') + self.areaPositionPage.setObjectName(u'AreaPositionPage') + self.areaPositionLayout = QtGui.QHBoxLayout(self.areaPositionPage) + self.areaPositionLayout.setObjectName(u'AreaPositionLayout') self.mainPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage) - self.mainPositionGroupBox.setMinimumSize(QtCore.QSize(248, 0)) - self.mainPositionGroupBox.setObjectName(u'mainPositionGroupBox') + self.mainPositionGroupBox.setObjectName(u'MainPositionGroupBox') self.mainPositionLayout = QtGui.QFormLayout(self.mainPositionGroupBox) - self.mainPositionLayout.setMargin(8) - self.mainPositionLayout.setSpacing(8) - self.mainPositionLayout.setObjectName(u'mainPositionLayout') - self.mainDefaultPositionCheckBox = QtGui.QCheckBox( - self.mainPositionGroupBox) - self.mainDefaultPositionCheckBox.setChecked(True) - self.mainDefaultPositionCheckBox.setTristate(False) - self.mainDefaultPositionCheckBox.setObjectName( - u'mainDefaultPositionCheckBox') - self.mainPositionLayout.setWidget(0, QtGui.QFormLayout.FieldRole, - self.mainDefaultPositionCheckBox) - self.nainXLabel = QtGui.QLabel(self.mainPositionGroupBox) - self.nainXLabel.setObjectName(u'nainXLabel') - self.mainPositionLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.nainXLabel) + self.mainPositionLayout.setObjectName(u'MainPositionLayout') + self.mainPositionCheckBox = QtGui.QCheckBox(self.mainPositionGroupBox) + self.mainPositionCheckBox.setObjectName(u'MainPositionCheckBox') + self.mainPositionLayout.addRow(self.mainPositionCheckBox) + self.mainXLabel = QtGui.QLabel(self.mainPositionGroupBox) + self.mainXLabel.setObjectName(u'MainXLabel') self.mainXSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) - self.mainXSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.mainXSpinBox.sizePolicy().hasHeightForWidth()) - self.mainXSpinBox.setSizePolicy(sizePolicy) - self.mainXSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.mainXSpinBox.setMaximum(9999) - self.mainXSpinBox.setProperty(u'value', 0) - self.mainXSpinBox.setObjectName(u'mainXSpinBox') - self.mainPositionLayout.setWidget(1, - QtGui.QFormLayout.FieldRole, self.mainXSpinBox) - self.mainYSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) - self.mainYSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.mainYSpinBox.sizePolicy().hasHeightForWidth()) - self.mainYSpinBox.setSizePolicy(sizePolicy) - self.mainYSpinBox.setMinimumSize(QtCore.QSize(78, 0)) - self.mainYSpinBox.setMaximum(9999) - self.mainYSpinBox.setObjectName(u'mainYSpinBox') - self.mainPositionLayout.setWidget(2, - QtGui.QFormLayout.FieldRole, self.mainYSpinBox) + self.mainXSpinBox.setObjectName(u'MainXSpinBox') + self.mainPositionLayout.addRow(self.mainXLabel, self.mainXSpinBox) self.mainYLabel = QtGui.QLabel(self.mainPositionGroupBox) - self.mainYLabel.setObjectName(u'mainYLabel') - self.mainPositionLayout.setWidget(2, - QtGui.QFormLayout.LabelRole, self.mainYLabel) - self.mainWidthSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) - self.mainWidthSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.mainWidthSpinBox.sizePolicy().hasHeightForWidth()) - self.mainWidthSpinBox.setSizePolicy(sizePolicy) - self.mainWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0)) - self.mainWidthSpinBox.setMaximum(9999) - self.mainWidthSpinBox.setObjectName(u'mainWidthSpinBox') - self.mainPositionLayout.setWidget(3, - QtGui.QFormLayout.FieldRole, self.mainWidthSpinBox) + self.mainYLabel.setObjectName(u'MainYLabel') + self.mainYSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) + self.mainYSpinBox.setMaximum(9999) + self.mainYSpinBox.setObjectName(u'MainYSpinBox') + self.mainPositionLayout.addRow(self.mainYLabel, self.mainYSpinBox) self.mainWidthLabel = QtGui.QLabel(self.mainPositionGroupBox) - self.mainWidthLabel.setObjectName(u'mainWidthLabel') - self.mainPositionLayout.setWidget(3, - QtGui.QFormLayout.LabelRole, self.mainWidthLabel) - self.mainHeightSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) - self.mainHeightSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.mainHeightSpinBox.sizePolicy().hasHeightForWidth()) - self.mainHeightSpinBox.setSizePolicy(sizePolicy) - self.mainHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0)) - self.mainHeightSpinBox.setMaximum(9999) - self.mainHeightSpinBox.setObjectName(u'mainHeightSpinBox') - self.mainPositionLayout.setWidget(4, - QtGui.QFormLayout.FieldRole, self.mainHeightSpinBox) + self.mainWidthLabel.setObjectName(u'MainWidthLabel') + self.mainWidthSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) + self.mainWidthSpinBox.setMaximum(9999) + self.mainWidthSpinBox.setObjectName(u'MainWidthSpinBox') + self.mainPositionLayout.addRow(self.mainWidthLabel, + self.mainWidthSpinBox) self.mainHeightLabel = QtGui.QLabel(self.mainPositionGroupBox) - self.mainHeightLabel.setObjectName(u'mainHeightLabel') - self.mainPositionLayout.setWidget(4, - QtGui.QFormLayout.LabelRole, self.mainHeightLabel) - self.areaPositionLayout.addWidget( - self.mainPositionGroupBox, 1, 0, 1, 1) + self.mainHeightLabel.setObjectName(u'MainHeightLabel') + self.mainHeightSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox) + self.mainHeightSpinBox.setMaximum(9999) + self.mainHeightSpinBox.setObjectName(u'MainHeightSpinBox') + self.mainPositionLayout.addRow(self.mainHeightLabel, + self.mainHeightSpinBox) + self.areaPositionLayout.addWidget(self.mainPositionGroupBox) self.footerPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage) - self.footerPositionGroupBox.setMinimumSize(QtCore.QSize(248, 0)) - self.footerPositionGroupBox.setObjectName(u'footerPositionGroupBox') - self.footerPositionLayout = QtGui.QFormLayout( - self.footerPositionGroupBox) - self.footerPositionLayout.setMargin(8) - self.footerPositionLayout.setSpacing(8) - self.footerPositionLayout.setObjectName(u'footerPositionLayout') + self.footerPositionGroupBox.setObjectName(u'FooterPositionGroupBox') + self.footerPositionLayout = QtGui.QFormLayout(self.footerPositionGroupBox) + self.footerPositionLayout.setObjectName(u'FooterPositionLayout') + self.footerPositionCheckBox = QtGui.QCheckBox(self.footerPositionGroupBox) + self.footerPositionCheckBox.setObjectName(u'FooterPositionCheckBox') + self.footerPositionLayout.addRow(self.footerPositionCheckBox) self.footerXLabel = QtGui.QLabel(self.footerPositionGroupBox) - self.footerXLabel.setObjectName(u'footerXLabel') - self.footerPositionLayout.setWidget(1, - QtGui.QFormLayout.LabelRole, self.footerXLabel) + self.footerXLabel.setObjectName(u'FooterXLabel') self.footerXSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox) - self.footerXSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.footerXSpinBox.sizePolicy().hasHeightForWidth()) - self.footerXSpinBox.setSizePolicy(sizePolicy) - self.footerXSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.footerXSpinBox.setMaximum(9999) - self.footerXSpinBox.setProperty(u'value', 0) - self.footerXSpinBox.setObjectName(u'footerXSpinBox') - self.footerPositionLayout.setWidget(1, - QtGui.QFormLayout.FieldRole, self.footerXSpinBox) + self.footerXSpinBox.setObjectName(u'FooterXSpinBox') + self.footerPositionLayout.addRow(self.footerXLabel, self.footerXSpinBox) self.footerYLabel = QtGui.QLabel(self.footerPositionGroupBox) - self.footerYLabel.setObjectName(u'footerYLabel') - self.footerPositionLayout.setWidget(2, - QtGui.QFormLayout.LabelRole, self.footerYLabel) + self.footerYLabel.setObjectName(u'FooterYLabel') self.footerYSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox) - self.footerYSpinBox.setEnabled(False) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.footerYSpinBox.sizePolicy().hasHeightForWidth()) - self.footerYSpinBox.setSizePolicy(sizePolicy) - self.footerYSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.footerYSpinBox.setMaximum(9999) - self.footerYSpinBox.setProperty(u'value', 0) - self.footerYSpinBox.setObjectName(u'footerYSpinBox') - self.footerPositionLayout.setWidget(2, - QtGui.QFormLayout.FieldRole, self.footerYSpinBox) + self.footerYSpinBox.setObjectName(u'FooterYSpinBox') + self.footerPositionLayout.addRow(self.footerYLabel, self.footerYSpinBox) self.footerWidthLabel = QtGui.QLabel(self.footerPositionGroupBox) - self.footerWidthLabel.setObjectName(u'footerWidthLabel') - self.footerPositionLayout.setWidget(3, - QtGui.QFormLayout.LabelRole, self.footerWidthLabel) + self.footerWidthLabel.setObjectName(u'FooterWidthLabel') self.footerWidthSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox) - self.footerWidthSpinBox.setEnabled(False) - self.footerWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.footerWidthSpinBox.setMaximum(9999) - self.footerWidthSpinBox.setObjectName(u'footerWidthSpinBox') - self.footerPositionLayout.setWidget(3, - QtGui.QFormLayout.FieldRole, self.footerWidthSpinBox) + self.footerWidthSpinBox.setObjectName(u'FooterWidthSpinBox') + self.footerPositionLayout.addRow(self.footerWidthLabel, + self.footerWidthSpinBox) self.footerHeightLabel = QtGui.QLabel(self.footerPositionGroupBox) - self.footerHeightLabel.setObjectName(u'footerHeightLabel') - self.footerPositionLayout.setWidget(4, - QtGui.QFormLayout.LabelRole, self.footerHeightLabel) + self.footerHeightLabel.setObjectName(u'FooterHeightLabel') self.footerHeightSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox) - self.footerHeightSpinBox.setEnabled(False) - self.footerHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.footerHeightSpinBox.setMaximum(9999) - self.footerHeightSpinBox.setObjectName(u'footerHeightSpinBox') - self.footerPositionLayout.setWidget(4, - QtGui.QFormLayout.FieldRole, self.footerHeightSpinBox) - self.footerDefaultPositionCheckBox = QtGui.QCheckBox( - self.footerPositionGroupBox) - self.footerDefaultPositionCheckBox.setChecked(True) - self.footerDefaultPositionCheckBox.setObjectName( - u'footerDefaultPositionCheckBox') - self.footerPositionLayout.setWidget(0, QtGui.QFormLayout.FieldRole, - self.footerDefaultPositionCheckBox) - self.areaPositionLayout.addWidget( - self.footerPositionGroupBox, 1, 1, 1, 1) + self.footerHeightSpinBox.setObjectName(u'FooterHeightSpinBox') + self.footerPositionLayout.addRow(self.footerHeightLabel, + self.footerHeightSpinBox) + self.areaPositionLayout.addWidget(self.footerPositionGroupBox) ThemeWizard.addPage(self.areaPositionPage) + # Preview Page self.previewPage = QtGui.QWizardPage() - self.previewPage.setObjectName(u'previewPage') + self.previewPage.setObjectName(u'PreviewPage') self.previewLayout = QtGui.QVBoxLayout(self.previewPage) - self.previewLayout.setSpacing(8) - self.previewLayout.setMargin(20) - self.previewLayout.setObjectName(u'previewLayout') - self.themeNameLayout = QtGui.QHBoxLayout() - self.themeNameLayout.setSpacing(8) - self.themeNameLayout.setObjectName(u'themeNameLayout') + self.previewLayout.setObjectName(u'PreviewLayout') + self.themeNameLayout = QtGui.QFormLayout() + self.themeNameLayout.setObjectName(u'ThemeNameLayout') self.themeNameLabel = QtGui.QLabel(self.previewPage) - self.themeNameLabel.setMinimumSize(QtCore.QSize(103, 0)) - self.themeNameLabel.setTextFormat(QtCore.Qt.PlainText) - self.themeNameLabel.setAlignment(QtCore.Qt.AlignRight | - QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) - self.themeNameLabel.setObjectName(u'themeNameLabel') - self.themeNameLayout.addWidget(self.themeNameLabel) + self.themeNameLabel.setObjectName(u'ThemeNameLabel') self.themeNameEdit = QtGui.QLineEdit(self.previewPage) - self.themeNameEdit.setObjectName(u'themeNameEdit') - self.themeNameLayout.addWidget(self.themeNameEdit) + self.themeNameEdit.setObjectName(u'ThemeNameEdit') + self.themeNameLayout.addRow(self.themeNameLabel, self.themeNameEdit) self.previewLayout.addLayout(self.themeNameLayout) - self.previewPaneLayout = QtGui.QHBoxLayout() - self.previewPaneLayout.setSpacing(0) - self.previewPaneLayout.setObjectName(u'previewPaneLayout') - self.previewLeftSpacer = QtGui.QSpacerItem(58, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.previewPaneLayout.addItem(self.previewLeftSpacer) - self.previewBoxLabel = QtGui.QLabel(self.previewPage) - sizePolicy = QtGui.QSizePolicy( - QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.previewBoxLabel.sizePolicy().hasHeightForWidth()) - self.previewBoxLabel.setSizePolicy(sizePolicy) - self.previewBoxLabel.setMinimumSize(QtCore.QSize(100, 150)) - self.previewBoxLabel.setFrameShape(QtGui.QFrame.WinPanel) - self.previewBoxLabel.setFrameShadow(QtGui.QFrame.Sunken) - self.previewBoxLabel.setLineWidth(1) - self.previewBoxLabel.setText(u'') + self.previewArea = QtGui.QWidget(self.previewPage) + self.previewArea.setObjectName(u'PreviewArea') + self.previewAreaLayout = QtGui.QGridLayout(self.previewArea) + self.previewAreaLayout.setMargin(0) + self.previewAreaLayout.setColumnStretch(0, 1) + self.previewAreaLayout.setRowStretch(0, 1) + self.previewAreaLayout.setObjectName(u'PreviewAreaLayout') + self.previewBoxLabel = QtGui.QLabel(self.previewArea) + self.previewBoxLabel.setFrameShape(QtGui.QFrame.Box) self.previewBoxLabel.setScaledContents(True) - self.previewBoxLabel.setObjectName(u'previewBoxLabel') - self.previewPaneLayout.addWidget(self.previewBoxLabel) - self.previewRightSpacer = QtGui.QSpacerItem(78, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.previewPaneLayout.addItem(self.previewRightSpacer) - self.previewLayout.addLayout(self.previewPaneLayout) + self.previewBoxLabel.setObjectName(u'PreviewBoxLabel') + self.previewAreaLayout.addWidget(self.previewBoxLabel) + self.previewLayout.addWidget(self.previewArea) ThemeWizard.addPage(self.previewPage) - self.themeNameLabel.setBuddy(self.themeNameEdit) self.retranslateUi(ThemeWizard) - self.backgroundStackedWidget.setCurrentIndex(0) - QtCore.QObject.connect( - ThemeWizard, - QtCore.SIGNAL(u'accepted()'), - ThemeWizard.accept) - QtCore.QObject.connect( - self.backgroundTypeComboBox, - QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.backgroundStackedWidget.setCurrentIndex) + QtCore.QObject.connect(self.backgroundComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), self.backgroundStack, + QtCore.SLOT(u'setCurrentIndex(int)')) + QtCore.QObject.connect(self.outlineCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.outlineColorButton, + QtCore.SLOT(u'setEnabled(bool)')) + QtCore.QObject.connect(self.outlineCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.outlineSizeSpinBox, + QtCore.SLOT(u'setEnabled(bool)')) + QtCore.QObject.connect(self.shadowCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.shadowColorButton, + QtCore.SLOT(u'setEnabled(bool)')) + QtCore.QObject.connect(self.shadowCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.shadowSizeSpinBox, + QtCore.SLOT(u'setEnabled(bool)')) + QtCore.QObject.connect(self.mainPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.mainXSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.mainPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.mainYSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.mainPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.mainWidthSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.mainPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.mainHeightSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.footerPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.footerXSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.footerPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.footerYSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.footerPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.footerWidthSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) + QtCore.QObject.connect(self.footerPositionCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.footerHeightSpinBox, + QtCore.SLOT(u'setDisabled(bool)')) QtCore.QMetaObject.connectSlotsByName(ThemeWizard) def retranslateUi(self, ThemeWizard): @@ -627,20 +428,20 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')) self.informationLabel.setText( translate('OpenLP.ThemeWizard', 'This wizard will help you to ' - 'create and edit your themes . Click the next button below to ' + 'create and edit your themes. Click the next button below to ' 'start the process by setting up your background.')) self.backgroundPage.setTitle( translate('OpenLP.ThemeWizard', 'Set Up Background')) self.backgroundPage.setSubTitle( translate('OpenLP.ThemeWizard', 'Set up your theme\'s background ' 'according to the parameters below.')) - self.backgroundTypeLabel.setText( + self.backgroundLabel.setText( translate('OpenLP.ThemeWizard', 'Background type:')) - self.backgroundTypeComboBox.setItemText(0, + self.backgroundComboBox.setItemText(0, translate('OpenLP.ThemeWizard', 'Solid Color')) - self.backgroundTypeComboBox.setItemText(1, + self.backgroundComboBox.setItemText(1, translate('OpenLP.ThemeWizard', 'Gradient')) - self.backgroundTypeComboBox.setItemText(2, + self.backgroundComboBox.setItemText(2, translate('OpenLP.ThemeWizard', 'Image')) self.colorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.gradientStartLabel.setText( @@ -682,9 +483,9 @@ class Ui_ThemeWizard(object): self.shadowCheckBox.setText(translate('OpenLP.ThemeWizard', '&Shadow:')) self.shadowSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.shadowSizeSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'pt')) - self.boldCheckBox.setText( + self.mainBoldCheckBox.setText( translate('OpenLP.ThemeWizard', 'Bold')) - self.italicsCheckBox.setText( + self.mainItalicsCheckBox.setText( translate('OpenLP.ThemeWizard', 'Italic')) self.footerAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Footer Area Font Details')) @@ -716,8 +517,8 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Middle')) self.verticalComboBox.setItemText(2, translate('OpenLP.ThemeWizard', 'Bottom')) - self.transitionsCheckBox.setText( - translate('OpenLP.ThemeWizard', 'Transitions')) + self.transitionsLabel.setText( + translate('OpenLP.ThemeWizard', 'Transitions:')) self.areaPositionPage.setTitle( translate('OpenLP.ThemeWizard', 'Output Area Locations')) self.areaPositionPage.setSubTitle( @@ -725,9 +526,9 @@ class Ui_ThemeWizard(object): ' main and footer areas.')) self.mainPositionGroupBox.setTitle( translate('OpenLP.ThemeWizard', '&Main Area')) - self.mainDefaultPositionCheckBox.setText( + self.mainPositionCheckBox.setText( translate('OpenLP.ThemeWizard', '&Use default location')) - self.nainXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:')) + self.mainXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:')) self.mainXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.mainYSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.mainYLabel.setText(translate('OpenLP.ThemeWizard', 'Y position:')) @@ -737,7 +538,7 @@ class Ui_ThemeWizard(object): self.mainHeightLabel.setText( translate('OpenLP.ThemeWizard', 'Height:')) self.footerPositionGroupBox.setTitle( - translate('OpenLP.ThemeWizard', 'Footer Area')) + translate('OpenLP.ThemeWizard', '&Footer Area')) self.footerXLabel.setText( translate('OpenLP.ThemeWizard', 'X position:')) self.footerXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px')) @@ -752,7 +553,7 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Height:')) self.footerHeightSpinBox.setSuffix( translate('OpenLP.ThemeWizard', 'px')) - self.footerDefaultPositionCheckBox.setText( + self.footerPositionCheckBox.setText( translate('OpenLP.ThemeWizard', 'Use default location')) self.previewPage.setTitle( translate('OpenLP.ThemeWizard', 'Save and Preview')) @@ -762,3 +563,18 @@ class Ui_ThemeWizard(object): 'new theme')) self.themeNameLabel.setText( translate('OpenLP.ThemeWizard', 'Theme name:')) + # Align all QFormLayouts towards each other. + width = max(self.backgroundLabel.minimumSizeHint().width(), + self.colorLabel.minimumSizeHint().width()) + width = max(width, self.gradientStartLabel.minimumSizeHint().width()) + width = max(width, self.gradientEndLabel.minimumSizeHint().width()) + width = max(width, self.gradientTypeLabel.minimumSizeHint().width()) + width = max(width, self.imageLabel.minimumSizeHint().width()) + self.backgroundTypeSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.colorSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.gradientSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.imageSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 23f77291c..54bd78ccc 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -275,6 +275,13 @@ def get_images_filter(): visible_formats, actual_formats) return images_filter +def split_filename(path): + path = os.path.abspath(path) + if not os.path.isfile(path): + return path, u'' + else: + return os.path.split(path) + from languagemanager import LanguageManager from actions import ActionList diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 31afe93d1..4434c416e 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -181,4 +181,4 @@ class ActionList(object): if weight is None: self.categories[category].actions.append(action) else: - self.categories[category].actions.add(action, weight) + self.categories[category].actions.add(action, weight) \ No newline at end of file diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 187834beb..454d14fa2 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -65,7 +65,7 @@ class LanguageManager(object): """ trans_dir = QtCore.QDir(AppLocation.get_directory( AppLocation.LanguageDir)) - file_names = trans_dir.entryList(QtCore.QStringList("*.qm"), + file_names = trans_dir.entryList(QtCore.QStringList(u'*.qm'), QtCore.QDir.Files, QtCore.QDir.Name) for name in file_names: file_names.replaceInStrings(name, trans_dir.filePath(name)) diff --git a/openlp/plugins/__init__.py b/openlp/plugins/__init__.py index 258707016..7bf441119 100644 --- a/openlp/plugins/__init__.py +++ b/openlp/plugins/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### """ The :mod:`plugins` module provides all the project produced plugins -""" +""" \ No newline at end of file diff --git a/openlp/plugins/alerts/__init__.py b/openlp/plugins/alerts/__init__.py index bb06bffb0..dafae0885 100644 --- a/openlp/plugins/alerts/__init__.py +++ b/openlp/plugins/alerts/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`alerts` module provides the Alerts plugin for producing impromptu on-screen announcements during a service. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index fbd51a13a..4a7e18cef 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -40,7 +40,7 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Alerts', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Alerts', u'1.9.4', plugin_helpers) self.weight = -3 self.icon = build_icon(u':/plugins/plugin_alerts.png') self.alertsmanager = AlertsManager(self) @@ -114,10 +114,10 @@ class AlertsPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('AlertsPlugin', 'Alert'), - u'plural': translate('AlertsPlugin', 'Alerts') + u'singular': translate('AlertsPlugin', 'Alert', 'name singular'), + u'plural': translate('AlertsPlugin', 'Alerts', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('AlertsPlugin', 'Alerts') + u'title': translate('AlertsPlugin', 'Alerts', 'container title') } diff --git a/openlp/plugins/alerts/forms/__init__.py b/openlp/plugins/alerts/forms/__init__.py index 0eb49be15..da7ae6683 100644 --- a/openlp/plugins/alerts/forms/__init__.py +++ b/openlp/plugins/alerts/forms/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -24,4 +24,4 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from alertform import AlertForm +from alertform import AlertForm \ No newline at end of file diff --git a/openlp/plugins/alerts/forms/alertdialog.py b/openlp/plugins/alerts/forms/alertdialog.py index 24cc4317b..ac0a5ebc8 100644 --- a/openlp/plugins/alerts/forms/alertdialog.py +++ b/openlp/plugins/alerts/forms/alertdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -140,4 +140,4 @@ class Ui_AlertDialog(object): self.DisplayCloseButton.setText( translate('AlertsPlugin.AlertForm', 'Display && Cl&ose')) self.CloseButton.setText( - translate('AlertsPlugin.AlertForm', '&Close')) + translate('AlertsPlugin.AlertForm', '&Close')) \ No newline at end of file diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index cf9c86c27..8e0d808a0 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -193,4 +193,4 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): text = text.replace(u'<>', unicode(self.ParameterEdit.text())) self.parent.alertsmanager.displayAlert(text) return True - return False + return False \ No newline at end of file diff --git a/openlp/plugins/alerts/lib/__init__.py b/openlp/plugins/alerts/lib/__init__.py index 722ee0c3d..f6a535b1b 100644 --- a/openlp/plugins/alerts/lib/__init__.py +++ b/openlp/plugins/alerts/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### from alertsmanager import AlertsManager -from alertstab import AlertsTab +from alertstab import AlertsTab \ No newline at end of file diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 0f2eb4ec7..6fe0ae132 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -103,4 +103,4 @@ class AlertsManager(QtCore.QObject): self.parent.liveController.display.alert(u'') self.killTimer(self.timer_id) self.timer_id = 0 - self.generateAlert() + self.generateAlert() \ No newline at end of file diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 625287603..4186627d8 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -294,4 +294,4 @@ class AlertsTab(SettingsTab): font.setPointSize(self.font_size) self.FontPreview.setFont(font) self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % - (self.bg_color, self.font_color)) + (self.bg_color, self.font_color)) \ No newline at end of file diff --git a/openlp/plugins/alerts/lib/db.py b/openlp/plugins/alerts/lib/db.py index e71007c28..e324bc838 100644 --- a/openlp/plugins/alerts/lib/db.py +++ b/openlp/plugins/alerts/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -55,4 +55,4 @@ def init_schema(url): mapper(AlertItem, alerts_table) metadata.create_all(checkfirst=True) - return session + return session \ No newline at end of file diff --git a/openlp/plugins/bibles/__init__.py b/openlp/plugins/bibles/__init__.py index a1e8f5a51..59cd2afec 100644 --- a/openlp/plugins/bibles/__init__.py +++ b/openlp/plugins/bibles/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`bibles` module provides the Bible plugin to enable OpenLP to display scripture. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 42976cde6..15181e871 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -37,7 +37,7 @@ class BiblePlugin(Plugin): log.info(u'Bible Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Bibles', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Bibles', u'1.9.4', plugin_helpers) self.weight = -9 self.icon_path = u':/plugins/plugin_bibles.png' self.icon = build_icon(self.icon_path) @@ -126,51 +126,46 @@ class BiblePlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('BiblesPlugin', 'Bible'), - u'plural': translate('BiblesPlugin', 'Bibles') + u'singular': translate('BiblesPlugin', 'Bible', 'name singular'), + u'plural': translate('BiblesPlugin', 'Bibles', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('BiblesPlugin', 'Bibles') + u'title': translate('BiblesPlugin', 'Bibles', 'container title') } # Middle Header Bar - ## Import Button ## + ## Import Action ## self.textStrings[StringContent.Import] = { - u'title': translate('BiblesPlugin', 'Import'), - u'tooltip': translate('BiblesPlugin', - 'Import a Bible') + u'title': translate('BiblesPlugin', '&Import'), + u'tooltip': translate('BiblesPlugin', 'Import a Bible') } - ## New Button ## + ## New Action ## self.textStrings[StringContent.New] = { - u'title': translate('BiblesPlugin', 'Add'), - u'tooltip': translate('BiblesPlugin', - 'Add a new Bible') + u'title': translate('BiblesPlugin', '&Add'), + u'tooltip': translate('BiblesPlugin', 'Add a new Bible') } - ## Edit Button ## + ## Edit Action ## self.textStrings[StringContent.Edit] = { - u'title': translate('BiblesPlugin', 'Edit'), - u'tooltip': translate('BiblesPlugin', - 'Edit the selected Bible') + u'title': translate('BiblesPlugin', '&Edit'), + u'tooltip': translate('BiblesPlugin', 'Edit the selected Bible') } - ## Delete Button ## + ## Delete Action ## self.textStrings[StringContent.Delete] = { - u'title': translate('BiblesPlugin', 'Delete'), - u'tooltip': translate('BiblesPlugin', - 'Delete the selected Bible') + u'title': translate('BiblesPlugin', '&Delete'), + u'tooltip': translate('BiblesPlugin', 'Delete the selected Bible') } - ## Preview ## + ## Preview Action ## self.textStrings[StringContent.Preview] = { u'title': translate('BiblesPlugin', 'Preview'), - u'tooltip': translate('BiblesPlugin', - 'Preview the selected Bible') + u'tooltip': translate('BiblesPlugin', 'Preview the selected Bible') } - ## Live Button ## + ## Send Live Action ## self.textStrings[StringContent.Live] = { u'title': translate('BiblesPlugin', 'Live'), u'tooltip': translate('BiblesPlugin', 'Send the selected Bible live') } - ## Add to service Button ## + ## Add to Service Action ## self.textStrings[StringContent.Service] = { u'title': translate('BiblesPlugin', 'Service'), u'tooltip': translate('BiblesPlugin', diff --git a/openlp/plugins/bibles/forms/__init__.py b/openlp/plugins/bibles/forms/__init__.py index e5d0317c5..1365dc5e0 100644 --- a/openlp/plugins/bibles/forms/__init__.py +++ b/openlp/plugins/bibles/forms/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -53,4 +53,4 @@ from the .ui files later if necessary. from bibleimportform import BibleImportForm -__all__ = ['BibleImportForm'] +__all__ = ['BibleImportForm'] \ No newline at end of file diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 0cc62074c..4590ea739 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -79,12 +79,12 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): QtGui.QWizard.__init__(self, parent) self.setupUi(self) self.registerFields() - if not BibleFormat.get_availability(BibleFormat.OpenLP1): - self.openlp1Page.setVisible(False) - self.openlp1LocationLabel.setVisible(False) - self.openlp1LocationEdit.setVisible(False) - self.openlp1FileButton.setVisible(False) - self.openlp1DisabledLabel.setVisible(True) + if BibleFormat.get_availability(BibleFormat.OpenLP1): + self.openlp1DisabledLabel.hide() + else: + self.openlp1FileLabel.hide() + self.openlp1FileEdit.hide() + self.openlp1BrowseButton.hide() self.finishButton = self.button(QtGui.QWizard.FinishButton) self.cancelButton = self.button(QtGui.QWizard.CancelButton) self.manager = manager @@ -92,24 +92,26 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): self.manager.set_process_dialog(self) self.web_bible_list = {} self.loadWebBibles() - QtCore.QObject.connect(self.locationComboBox, + self.restart() + self.selectStack.setCurrentIndex(0) + QtCore.QObject.connect(self.webSourceComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onLocationComboBoxChanged) - QtCore.QObject.connect(self.osisFileButton, + self.onWebSourceComboBoxCurrentIndexChanged) + QtCore.QObject.connect(self.osisBrowseButton, QtCore.SIGNAL(u'clicked()'), - self.onOsisFileButtonClicked) - QtCore.QObject.connect(self.booksFileButton, + self.onOsisBrowseButtonClicked) + QtCore.QObject.connect(self.csvBooksButton, QtCore.SIGNAL(u'clicked()'), - self.onBooksFileButtonClicked) - QtCore.QObject.connect(self.csvVersesFileButton, + self.onBooksBrowseButtonClicked) + QtCore.QObject.connect(self.csvVersesButton, QtCore.SIGNAL(u'clicked()'), - self.onCsvVersesFileButtonClicked) + self.onCsvVersesBrowseButtonClicked) QtCore.QObject.connect(self.openSongBrowseButton, QtCore.SIGNAL(u'clicked()'), self.onOpenSongBrowseButtonClicked) - QtCore.QObject.connect(self.openlp1FileButton, + QtCore.QObject.connect(self.openlp1BrowseButton, QtCore.SIGNAL(u'clicked()'), - self.onOpenlp1FileButtonClicked) + self.onOpenlp1BrowseButtonClicked) QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) @@ -125,8 +127,8 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): """ Stop the import on cancel button, close button or ESC key. """ - log.debug('Import canceled by user.') - if self.currentId() == 3: + log.debug(u'Import canceled by user.') + if self.currentPage() == self.importPage: Receiver.send_message(u'bibles_stop_import') self.done(QtGui.QDialog.Rejected) @@ -134,11 +136,9 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): """ Validate the current page before moving on to the next page. """ - if self.currentId() == 0: - # Welcome page + if self.currentPage() == self.welcomePage: return True - elif self.currentId() == 1: - # Select page + elif self.currentPage() == self.selectPage: if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS: if not self.field(u'osis_location').toString(): QtGui.QMessageBox.critical(self, @@ -147,7 +147,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file to import your ' 'Bible from.')) - self.OSISLocationEdit.setFocus() + self.osisFileEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV: if not self.field(u'csv_booksfile').toString(): @@ -157,7 +157,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file with books of ' 'the Bible to use in the import.')) - self.booksLocationEdit.setFocus() + self.csvBooksEdit.setFocus() return False elif not self.field(u'csv_versefile').toString(): QtGui.QMessageBox.critical(self, @@ -166,7 +166,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file of Bible ' 'verses to import.')) - self.csvVerseLocationEdit.setFocus() + self.csvVersesEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == \ BibleFormat.OpenSong: @@ -187,11 +187,10 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file to import your ' 'Bible from.')) - self.openlp1LocationEdit.setFocus() + self.openlp1FileEdit.setFocus() return False return True - elif self.currentId() == 2: - # License details + elif self.currentPage() == self.licenseDetailsPage: license_version = unicode(self.field(u'license_version').toString()) license_copyright = \ unicode(self.field(u'license_copyright').toString()) @@ -221,11 +220,10 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): self.versionNameEdit.setFocus() return False return True - if self.currentId() == 3: - # Progress page + if self.currentPage() == self.importPage: return True - def onLocationComboBoxChanged(self, index): + def onWebSourceComboBoxCurrentIndexChanged(self, index): """ Setup the list of Bibles when you select a different source on the web download page. @@ -233,35 +231,34 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): ``index`` The index of the combo box. """ - self.bibleComboBox.clear() + self.webTranslationComboBox.clear() bibles = self.web_bible_list[index].keys() bibles.sort() - for bible in bibles: - self.bibleComboBox.addItem(bible) + self.webTranslationComboBox.addItems(bibles) - def onOsisFileButtonClicked(self): + def onOsisBrowseButtonClicked(self): """ Show the file open dialog for the OSIS file. """ self.getFileName( translate('BiblesPlugin.ImportWizardForm', 'Open OSIS File'), - self.OSISLocationEdit) + self.osisFileEdit) - def onBooksFileButtonClicked(self): + def onBooksBrowseButtonClicked(self): """ Show the file open dialog for the books CSV file. """ self.getFileName( translate('BiblesPlugin.ImportWizardForm', 'Open Books CSV File'), - self.booksLocationEdit, u'%s (*.csv)' + self.csvBooksEdit, u'%s (*.csv)' % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) - def onCsvVersesFileButtonClicked(self): + def onCsvVersesBrowseButtonClicked(self): """ Show the file open dialog for the verses CSV file. """ self.getFileName(translate('BiblesPlugin.ImportWizardForm', - 'Open Verses CSV File'), self.csvVerseLocationEdit, u'%s (*.csv)' + 'Open Verses CSV File'), self.csvVersesEdit, u'%s (*.csv)' % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) def onOpenSongBrowseButtonClicked(self): @@ -272,36 +269,35 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): translate('BiblesPlugin.ImportWizardForm', 'Open OpenSong Bible'), self.openSongFileEdit) - def onOpenlp1FileButtonClicked(self): + def onOpenlp1BrowseButtonClicked(self): """ Show the file open dialog for the openlp.org 1.x file. """ self.getFileName( translate('BiblesPlugin.ImportWizardForm', - 'Open openlp.org 1.x Bible'), self.openlp1LocationEdit, + 'Open openlp.org 1.x Bible'), self.openlp1FileEdit, u'%s (*.bible)' % translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x bible')) def onCurrentIdChanged(self, pageId): - if pageId == 3: + if self.page(pageId) == self.importPage: self.preImport() self.performImport() self.postImport() def registerFields(self): self.selectPage.registerField(u'source_format', self.formatComboBox) - self.selectPage.registerField(u'osis_location', self.OSISLocationEdit) - self.selectPage.registerField(u'csv_booksfile', self.booksLocationEdit) - self.selectPage.registerField( - u'csv_versefile', self.csvVerseLocationEdit) + self.selectPage.registerField(u'osis_location', self.osisFileEdit) + self.selectPage.registerField(u'csv_booksfile', self.csvBooksEdit) + self.selectPage.registerField(u'csv_versefile', self.csvVersesEdit) self.selectPage.registerField(u'opensong_file', self.openSongFileEdit) - self.selectPage.registerField(u'web_location', self.locationComboBox) - self.selectPage.registerField(u'web_biblename', self.bibleComboBox) - self.selectPage.registerField(u'proxy_server', self.addressEdit) - self.selectPage.registerField(u'proxy_username', self.usernameEdit) - self.selectPage.registerField(u'proxy_password', self.passwordEdit) - self.selectPage.registerField( - u'openlp1_location', self.openlp1LocationEdit) + self.selectPage.registerField(u'web_location', self.webSourceComboBox) + self.selectPage.registerField(u'web_biblename', + self.webTranslationComboBox) + self.selectPage.registerField(u'proxy_server', self.webServerEdit) + self.selectPage.registerField(u'proxy_username', self.webUserEdit) + self.selectPage.registerField(u'proxy_password', self.webPasswordEdit) + self.selectPage.registerField(u'openlp1_location', self.openlp1FileEdit) self.licenseDetailsPage.registerField( u'license_version', self.versionNameEdit) self.licenseDetailsPage.registerField( @@ -322,7 +318,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): self.setField(u'opensong_file', QtCore.QVariant('')) self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk)) self.setField(u'web_biblename', - QtCore.QVariant(self.bibleComboBox.currentIndex())) + QtCore.QVariant(self.webTranslationComboBox.currentIndex())) self.setField(u'proxy_server', settings.value(u'proxy address', QtCore.QVariant(u''))) self.setField(u'proxy_username', @@ -336,7 +332,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): QtCore.QVariant(self.copyrightEdit.text())) self.setField(u'license_permissions', QtCore.QVariant(self.permissionsEdit.text())) - self.onLocationComboBoxChanged(WebDownload.Crosswalk) + self.onWebSourceComboBoxCurrentIndexChanged(WebDownload.Crosswalk) settings.endGroup() def loadWebBibles(self): @@ -491,7 +487,7 @@ class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): # Import a bible from the web. self.importProgressBar.setMaximum(1) download_location = self.field(u'web_location').toInt()[0] - bible_version = unicode(self.bibleComboBox.currentText()) + bible_version = unicode(self.webTranslationComboBox.currentText()) if download_location == WebDownload.Crosswalk: bible = \ self.web_bible_list[WebDownload.Crosswalk][bible_version] diff --git a/openlp/plugins/bibles/forms/bibleimportwizard.py b/openlp/plugins/bibles/forms/bibleimportwizard.py index a0b2b99b9..a85e430a1 100644 --- a/openlp/plugins/bibles/forms/bibleimportwizard.py +++ b/openlp/plugins/bibles/forms/bibleimportwizard.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -31,269 +31,216 @@ from openlp.core.lib import build_icon, translate class Ui_BibleImportWizard(object): def setupUi(self, bibleImportWizard): bibleImportWizard.setObjectName(u'bibleImportWizard') - bibleImportWizard.resize(550, 386) bibleImportWizard.setModal(True) bibleImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle) bibleImportWizard.setOptions( QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) - # Welcome page + # Welcome Page self.welcomePage = QtGui.QWizardPage() self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap, QtGui.QPixmap(u':/wizards/wizard_importbible.bmp')) self.welcomePage.setObjectName(u'WelcomePage') self.welcomeLayout = QtGui.QVBoxLayout(self.welcomePage) - self.welcomeLayout.setSpacing(8) - self.welcomeLayout.setMargin(0) self.welcomeLayout.setObjectName(u'WelcomeLayout') self.titleLabel = QtGui.QLabel(self.welcomePage) self.titleLabel.setObjectName(u'TitleLabel') self.welcomeLayout.addWidget(self.titleLabel) - spacerItem = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - self.welcomeLayout.addItem(spacerItem) + self.welcomeLayout.addSpacing(40) self.informationLabel = QtGui.QLabel(self.welcomePage) self.informationLabel.setWordWrap(True) - self.informationLabel.setMargin(10) self.informationLabel.setObjectName(u'InformationLabel') self.welcomeLayout.addWidget(self.informationLabel) - spacerItem1 = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.welcomeLayout.addItem(spacerItem1) + self.welcomeLayout.addStretch() bibleImportWizard.addPage(self.welcomePage) - # Select page + # Select Page self.selectPage = QtGui.QWizardPage() self.selectPage.setObjectName(u'SelectPage') self.selectPageLayout = QtGui.QVBoxLayout(self.selectPage) - self.selectPageLayout.setSpacing(8) - self.selectPageLayout.setMargin(20) - self.selectPageLayout.setObjectName(u'selectPageLayout') - self.formatSelectLayout = QtGui.QHBoxLayout() - self.formatSelectLayout.setSpacing(8) - self.formatSelectLayout.setObjectName(u'FormatSelectLayout') + self.selectPageLayout.setObjectName(u'SelectPageLayout') + self.formatLayout = QtGui.QFormLayout() + self.formatLayout.setObjectName(u'FormatLayout') self.formatLabel = QtGui.QLabel(self.selectPage) self.formatLabel.setObjectName(u'FormatLabel') - self.formatSelectLayout.addWidget(self.formatLabel) self.formatComboBox = QtGui.QComboBox(self.selectPage) + self.formatComboBox.addItems([u'', u'', u'', u'', u'']) self.formatComboBox.setObjectName(u'FormatComboBox') - self.formatComboBox.addItem(u'') - self.formatComboBox.addItem(u'') - self.formatComboBox.addItem(u'') - self.formatComboBox.addItem(u'') - self.formatComboBox.addItem(u'') - self.formatSelectLayout.addWidget(self.formatComboBox) - spacerItem2 = QtGui.QSpacerItem(40, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.formatSelectLayout.addItem(spacerItem2) - self.selectPageLayout.addLayout(self.formatSelectLayout) - self.formatWidget = QtGui.QStackedWidget(self.selectPage) - self.formatWidget.setObjectName(u'FormatWidget') - generalIcon = build_icon(u':/general/general_open.png') - self.osisPage = QtGui.QWidget() - self.osisPage.setObjectName(u'OsisPage') - self.osisLayout = QtGui.QFormLayout(self.osisPage) - self.osisLayout.setFieldGrowthPolicy( - QtGui.QFormLayout.ExpandingFieldsGrow) + self.formatLayout.addRow(self.formatLabel, self.formatComboBox) + self.formatSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.formatLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.formatSpacer) + self.selectPageLayout.addLayout(self.formatLayout) + self.selectStack = QtGui.QStackedLayout() + self.selectStack.setObjectName(u'SelectStack') + self.osisWidget = QtGui.QWidget(self.selectPage) + self.osisWidget.setObjectName(u'OsisWidget') + self.osisLayout = QtGui.QFormLayout(self.osisWidget) self.osisLayout.setMargin(0) - self.osisLayout.setSpacing(8) self.osisLayout.setObjectName(u'OsisLayout') - self.osisLocationLabel = QtGui.QLabel(self.osisPage) - self.osisLocationLabel.setObjectName(u'OsisLocationLabel') - self.osisLayout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.osisLocationLabel) - self.osisLocationLayout = QtGui.QHBoxLayout() - self.osisLocationLayout.setSpacing(8) - self.osisLocationLayout.setObjectName(u'OsisLocationLayout') - self.OSISLocationEdit = QtGui.QLineEdit(self.osisPage) - self.OSISLocationEdit.setObjectName(u'OSISLocationEdit') - self.osisLocationLayout.addWidget(self.OSISLocationEdit) - self.osisFileButton = QtGui.QToolButton(self.osisPage) - self.osisFileButton.setMaximumSize(QtCore.QSize(32, 16777215)) - self.osisFileButton.setIcon(generalIcon) - self.osisFileButton.setObjectName(u'OsisFileButton') - self.osisLocationLayout.addWidget(self.osisFileButton) - self.osisLayout.setLayout(1, QtGui.QFormLayout.FieldRole, - self.osisLocationLayout) - self.formatWidget.addWidget(self.osisPage) - self.csvPage = QtGui.QWidget() - self.csvPage.setObjectName(u'CsvPage') - self.csvSourceLayout = QtGui.QFormLayout(self.csvPage) - self.csvSourceLayout.setFieldGrowthPolicy( - QtGui.QFormLayout.ExpandingFieldsGrow) - self.csvSourceLayout.setLabelAlignment(QtCore.Qt.AlignBottom | - QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing) - self.csvSourceLayout.setFormAlignment(QtCore.Qt.AlignLeading | - QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) - self.csvSourceLayout.setMargin(0) - self.csvSourceLayout.setSpacing(8) - self.csvSourceLayout.setObjectName(u'CsvSourceLayout') - self.booksLocationLabel = QtGui.QLabel(self.csvPage) - self.booksLocationLabel.setObjectName(u'BooksLocationLabel') - self.csvSourceLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.booksLocationLabel) + self.osisFileLabel = QtGui.QLabel(self.osisWidget) + self.osisFileLabel.setObjectName(u'OsisFileLabel') + self.osisFileLayout = QtGui.QHBoxLayout() + self.osisFileLayout.setObjectName(u'OsisFileLayout') + self.osisFileEdit = QtGui.QLineEdit(self.osisWidget) + self.osisFileEdit.setObjectName(u'OsisFileEdit') + self.osisFileLayout.addWidget(self.osisFileEdit) + self.osisBrowseButton = QtGui.QToolButton(self.osisWidget) + self.osisBrowseButton.setIcon(build_icon(u':/general/general_open.png')) + self.osisBrowseButton.setObjectName(u'OsisBrowseButton') + self.osisFileLayout.addWidget(self.osisBrowseButton) + self.osisLayout.addRow(self.osisFileLabel, self.osisFileLayout) + self.osisSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.osisLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.osisSpacer) + self.selectStack.addWidget(self.osisWidget) + self.csvWidget = QtGui.QWidget(self.selectPage) + self.csvWidget.setObjectName(u'CsvWidget') + self.csvLayout = QtGui.QFormLayout(self.csvWidget) + self.csvLayout.setMargin(0) + self.csvLayout.setObjectName(u'CsvLayout') + self.csvBooksLabel = QtGui.QLabel(self.csvWidget) + self.csvBooksLabel.setObjectName(u'CsvBooksLabel') self.csvBooksLayout = QtGui.QHBoxLayout() - self.csvBooksLayout.setSpacing(8) self.csvBooksLayout.setObjectName(u'CsvBooksLayout') - self.booksLocationEdit = QtGui.QLineEdit(self.csvPage) - self.booksLocationEdit.setObjectName(u'BooksLocationEdit') - self.csvBooksLayout.addWidget(self.booksLocationEdit) - self.booksFileButton = QtGui.QToolButton(self.csvPage) - self.booksFileButton.setMaximumSize(QtCore.QSize(32, 16777215)) - self.booksFileButton.setIcon(generalIcon) - self.booksFileButton.setObjectName(u'BooksFileButton') - self.csvBooksLayout.addWidget(self.booksFileButton) - self.csvSourceLayout.setLayout(0, QtGui.QFormLayout.FieldRole, - self.csvBooksLayout) - self.verseLocationLabel = QtGui.QLabel(self.csvPage) - self.verseLocationLabel.setObjectName(u'VerseLocationLabel') - self.csvSourceLayout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.verseLocationLabel) - self.csvVerseLayout = QtGui.QHBoxLayout() - self.csvVerseLayout.setSpacing(8) - self.csvVerseLayout.setObjectName(u'CsvVerseLayout') - self.csvVerseLocationEdit = QtGui.QLineEdit(self.csvPage) - self.csvVerseLocationEdit.setObjectName(u'CsvVerseLocationEdit') - self.csvVerseLayout.addWidget(self.csvVerseLocationEdit) - self.csvVersesFileButton = QtGui.QToolButton(self.csvPage) - self.csvVersesFileButton.setMaximumSize(QtCore.QSize(32, 16777215)) - self.csvVersesFileButton.setIcon(generalIcon) - self.csvVersesFileButton.setObjectName(u'CsvVersesFileButton') - self.csvVerseLayout.addWidget(self.csvVersesFileButton) - self.csvSourceLayout.setLayout(1, QtGui.QFormLayout.FieldRole, - self.csvVerseLayout) - self.formatWidget.addWidget(self.csvPage) - self.openSongPage = QtGui.QWidget() - self.openSongPage.setObjectName(u'OpenSongPage') - self.openSongLayout = QtGui.QFormLayout(self.openSongPage) + self.csvBooksEdit = QtGui.QLineEdit(self.csvWidget) + self.csvBooksEdit.setObjectName(u'CsvBooksEdit') + self.csvBooksLayout.addWidget(self.csvBooksEdit) + self.csvBooksButton = QtGui.QToolButton(self.csvWidget) + self.csvBooksButton.setIcon(build_icon(u':/general/general_open.png')) + self.csvBooksButton.setObjectName(u'CsvBooksButton') + self.csvBooksLayout.addWidget(self.csvBooksButton) + self.csvLayout.addRow(self.csvBooksLabel, self.csvBooksLayout) + self.csvVersesLabel = QtGui.QLabel(self.csvWidget) + self.csvVersesLabel.setObjectName(u'CsvVersesLabel') + self.csvVersesLayout = QtGui.QHBoxLayout() + self.csvVersesLayout.setObjectName(u'CsvVersesLayout') + self.csvVersesEdit = QtGui.QLineEdit(self.csvWidget) + self.csvVersesEdit.setObjectName(u'CsvVersesEdit') + self.csvVersesLayout.addWidget(self.csvVersesEdit) + self.csvVersesButton = QtGui.QToolButton(self.csvWidget) + self.csvVersesButton.setIcon(build_icon(u':/general/general_open.png')) + self.csvVersesButton.setObjectName(u'CsvVersesButton') + self.csvVersesLayout.addWidget(self.csvVersesButton) + self.csvLayout.addRow(self.csvVersesLabel, self.csvVersesLayout) + self.csvSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.csvLayout.setItem(2, QtGui.QFormLayout.LabelRole, self.csvSpacer) + self.selectStack.addWidget(self.csvWidget) + self.openSongWidget = QtGui.QWidget(self.selectPage) + self.openSongWidget.setObjectName(u'OpenSongWidget') + self.openSongLayout = QtGui.QFormLayout(self.openSongWidget) self.openSongLayout.setMargin(0) - self.openSongLayout.setSpacing(8) self.openSongLayout.setObjectName(u'OpenSongLayout') - self.openSongFileLabel = QtGui.QLabel(self.openSongPage) + self.openSongFileLabel = QtGui.QLabel(self.openSongWidget) self.openSongFileLabel.setObjectName(u'OpenSongFileLabel') - self.openSongLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.openSongFileLabel) self.openSongFileLayout = QtGui.QHBoxLayout() - self.openSongFileLayout.setSpacing(8) self.openSongFileLayout.setObjectName(u'OpenSongFileLayout') - self.openSongFileEdit = QtGui.QLineEdit(self.openSongPage) + self.openSongFileEdit = QtGui.QLineEdit(self.openSongWidget) self.openSongFileEdit.setObjectName(u'OpenSongFileEdit') self.openSongFileLayout.addWidget(self.openSongFileEdit) - self.openSongBrowseButton = QtGui.QToolButton(self.openSongPage) - self.openSongBrowseButton.setIcon(generalIcon) + self.openSongBrowseButton = QtGui.QToolButton(self.openSongWidget) + self.openSongBrowseButton.setIcon( + build_icon(u':/general/general_open.png')) self.openSongBrowseButton.setObjectName(u'OpenSongBrowseButton') self.openSongFileLayout.addWidget(self.openSongBrowseButton) - self.openSongLayout.setLayout(0, QtGui.QFormLayout.FieldRole, + self.openSongLayout.addRow(self.openSongFileLabel, self.openSongFileLayout) - self.formatWidget.addWidget(self.openSongPage) - self.webDownloadPage = QtGui.QWidget() - self.webDownloadPage.setObjectName(u'WebDownloadPage') - self.webDownloadLayout = QtGui.QVBoxLayout(self.webDownloadPage) - self.webDownloadLayout.setSpacing(8) - self.webDownloadLayout.setMargin(0) - self.webDownloadLayout.setObjectName(u'WebDownloadLayout') - self.webDownloadTabWidget = QtGui.QTabWidget(self.webDownloadPage) - self.webDownloadTabWidget.setObjectName(u'WebDownloadTabWidget') - self.downloadOptionsTab = QtGui.QWidget() - self.downloadOptionsTab.setObjectName(u'DownloadOptionsTab') - self.downloadOptionsLayout = QtGui.QFormLayout(self.downloadOptionsTab) - self.downloadOptionsLayout.setMargin(8) - self.downloadOptionsLayout.setSpacing(8) - self.downloadOptionsLayout.setObjectName(u'DownloadOptionsLayout') - self.locationLabel = QtGui.QLabel(self.downloadOptionsTab) - self.locationLabel.setObjectName(u'LocationLabel') - self.downloadOptionsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.locationLabel) - self.locationComboBox = QtGui.QComboBox(self.downloadOptionsTab) - self.locationComboBox.setObjectName(u'LocationComboBox') - self.locationComboBox.addItem(u'') - self.locationComboBox.addItem(u'') - self.locationComboBox.addItem(u'') - self.downloadOptionsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, - self.locationComboBox) - self.bibleLabel = QtGui.QLabel(self.downloadOptionsTab) - self.bibleLabel.setObjectName(u'BibleLabel') - self.downloadOptionsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.bibleLabel) - self.bibleComboBox = QtGui.QComboBox(self.downloadOptionsTab) - self.bibleComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) - self.bibleComboBox.setObjectName(u'BibleComboBox') - self.bibleComboBox.addItem(u'') - self.bibleComboBox.addItem(u'') - self.bibleComboBox.addItem(u'') - self.downloadOptionsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, - self.bibleComboBox) - self.webDownloadTabWidget.addTab(self.downloadOptionsTab, u'') - self.proxyServerTab = QtGui.QWidget() - self.proxyServerTab.setObjectName(u'ProxyServerTab') - self.proxyServerLayout = QtGui.QFormLayout(self.proxyServerTab) - self.proxyServerLayout.setObjectName(u'ProxyServerLayout') - self.addressLabel = QtGui.QLabel(self.proxyServerTab) - self.addressLabel.setObjectName(u'AddressLabel') - self.proxyServerLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.addressLabel) - self.addressEdit = QtGui.QLineEdit(self.proxyServerTab) - self.addressEdit.setObjectName(u'AddressEdit') - self.proxyServerLayout.setWidget(0, QtGui.QFormLayout.FieldRole, - self.addressEdit) - self.usernameLabel = QtGui.QLabel(self.proxyServerTab) - self.usernameLabel.setObjectName(u'UsernameLabel') - self.proxyServerLayout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.usernameLabel) - self.usernameEdit = QtGui.QLineEdit(self.proxyServerTab) - self.usernameEdit.setObjectName(u'UsernameEdit') - self.proxyServerLayout.setWidget(1, QtGui.QFormLayout.FieldRole, - self.usernameEdit) - self.passwordLabel = QtGui.QLabel(self.proxyServerTab) - self.passwordLabel.setObjectName(u'PasswordLabel') - self.proxyServerLayout.setWidget(2, QtGui.QFormLayout.LabelRole, - self.passwordLabel) - self.passwordEdit = QtGui.QLineEdit(self.proxyServerTab) - self.passwordEdit.setObjectName(u'PasswordEdit') - self.proxyServerLayout.setWidget(2, QtGui.QFormLayout.FieldRole, - self.passwordEdit) - self.webDownloadTabWidget.addTab(self.proxyServerTab, u'') - self.webDownloadLayout.addWidget(self.webDownloadTabWidget) - self.formatWidget.addWidget(self.webDownloadPage) - self.openlp1Page = QtGui.QWidget() - self.openlp1Page.setObjectName(u'Openlp1Page') - self.openlp1Layout = QtGui.QFormLayout(self.openlp1Page) - self.openlp1Layout.setFieldGrowthPolicy( - QtGui.QFormLayout.ExpandingFieldsGrow) + self.openSongSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.openSongLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.openSongSpacer) + self.selectStack.addWidget(self.openSongWidget) + self.webTabWidget = QtGui.QTabWidget(self.selectPage) + self.webTabWidget.setObjectName(u'WebTabWidget') + self.webBibleTab = QtGui.QWidget() + self.webBibleTab.setObjectName(u'WebBibleTab') + self.webBibleLayout = QtGui.QFormLayout(self.webBibleTab) + self.webBibleLayout.setObjectName(u'WebBibleLayout') + self.webSourceLabel = QtGui.QLabel(self.webBibleTab) + self.webSourceLabel.setObjectName(u'WebSourceLabel') + self.webBibleLayout.setWidget(0, QtGui.QFormLayout.LabelRole, + self.webSourceLabel) + self.webSourceComboBox = QtGui.QComboBox(self.webBibleTab) + self.webSourceComboBox.setObjectName(u'WebSourceComboBox') + self.webSourceComboBox.addItems([u'', u'', u'']) + self.webBibleLayout.setWidget(0, QtGui.QFormLayout.FieldRole, + self.webSourceComboBox) + self.webTranslationLabel = QtGui.QLabel(self.webBibleTab) + self.webTranslationLabel.setObjectName(u'webTranslationLabel') + self.webBibleLayout.setWidget(1, QtGui.QFormLayout.LabelRole, + self.webTranslationLabel) + self.webTranslationComboBox = QtGui.QComboBox(self.webBibleTab) + self.webTranslationComboBox.setSizeAdjustPolicy( + QtGui.QComboBox.AdjustToContents) + self.webTranslationComboBox.setObjectName(u'WebTranslationComboBox') + self.webBibleLayout.setWidget(1, QtGui.QFormLayout.FieldRole, + self.webTranslationComboBox) + self.webTabWidget.addTab(self.webBibleTab, u'') + self.webProxyTab = QtGui.QWidget() + self.webProxyTab.setObjectName(u'WebProxyTab') + self.webProxyLayout = QtGui.QFormLayout(self.webProxyTab) + self.webProxyLayout.setObjectName(u'WebProxyLayout') + self.webServerLabel = QtGui.QLabel(self.webProxyTab) + self.webServerLabel.setObjectName(u'WebServerLabel') + self.webProxyLayout.setWidget(0, QtGui.QFormLayout.LabelRole, + self.webServerLabel) + self.webServerEdit = QtGui.QLineEdit(self.webProxyTab) + self.webServerEdit.setObjectName(u'WebServerEdit') + self.webProxyLayout.setWidget(0, QtGui.QFormLayout.FieldRole, + self.webServerEdit) + self.webUserLabel = QtGui.QLabel(self.webProxyTab) + self.webUserLabel.setObjectName(u'WebUserLabel') + self.webProxyLayout.setWidget(1, QtGui.QFormLayout.LabelRole, + self.webUserLabel) + self.webUserEdit = QtGui.QLineEdit(self.webProxyTab) + self.webUserEdit.setObjectName(u'WebUserEdit') + self.webProxyLayout.setWidget(1, QtGui.QFormLayout.FieldRole, + self.webUserEdit) + self.webPasswordLabel = QtGui.QLabel(self.webProxyTab) + self.webPasswordLabel.setObjectName(u'WebPasswordLabel') + self.webProxyLayout.setWidget(2, QtGui.QFormLayout.LabelRole, + self.webPasswordLabel) + self.webPasswordEdit = QtGui.QLineEdit(self.webProxyTab) + self.webPasswordEdit.setObjectName(u'WebPasswordEdit') + self.webProxyLayout.setWidget(2, QtGui.QFormLayout.FieldRole, + self.webPasswordEdit) + self.webTabWidget.addTab(self.webProxyTab, u'') + self.selectStack.addWidget(self.webTabWidget) + self.openlp1Widget = QtGui.QWidget(self.selectPage) + self.openlp1Widget.setObjectName(u'Openlp1Widget') + self.openlp1Layout = QtGui.QFormLayout(self.openlp1Widget) self.openlp1Layout.setMargin(0) - self.openlp1Layout.setSpacing(8) self.openlp1Layout.setObjectName(u'Openlp1Layout') - self.openlp1LocationLabel = QtGui.QLabel(self.openlp1Page) - self.openlp1LocationLabel.setObjectName(u'Openlp1LocationLabel') - self.openlp1Layout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.openlp1LocationLabel) - self.openlp1LocationLayout = QtGui.QHBoxLayout() - self.openlp1LocationLayout.setSpacing(8) - self.openlp1LocationLayout.setObjectName(u'Openlp1LocationLayout') - self.openlp1LocationEdit = QtGui.QLineEdit(self.openlp1Page) - self.openlp1LocationEdit.setObjectName(u'Openlp1LocationEdit') - self.openlp1LocationLayout.addWidget(self.openlp1LocationEdit) - self.openlp1FileButton = QtGui.QToolButton(self.openlp1Page) - self.openlp1FileButton.setMaximumSize(QtCore.QSize(32, 16777215)) - self.openlp1FileButton.setIcon(generalIcon) - self.openlp1FileButton.setObjectName(u'Openlp1FileButton') - self.openlp1LocationLayout.addWidget(self.openlp1FileButton) - self.openlp1Layout.setLayout(1, QtGui.QFormLayout.FieldRole, - self.openlp1LocationLayout) - self.openlp1DisabledLabel = QtGui.QLabel(self.openlp1Page) - self.openlp1DisabledLabel.setObjectName(u'openlp1DisabledLabel') - self.openlp1DisabledLabel.setVisible(False) + self.openlp1FileLabel = QtGui.QLabel(self.openlp1Widget) + self.openlp1FileLabel.setObjectName(u'Openlp1FileLabel') + self.openlp1FileLayout = QtGui.QHBoxLayout() + self.openlp1FileLayout.setObjectName(u'Openlp1FileLayout') + self.openlp1FileEdit = QtGui.QLineEdit(self.openlp1Widget) + self.openlp1FileEdit.setObjectName(u'Openlp1FileEdit') + self.openlp1FileLayout.addWidget(self.openlp1FileEdit) + self.openlp1BrowseButton = QtGui.QToolButton(self.openlp1Widget) + self.openlp1BrowseButton.setIcon( + build_icon(u':/general/general_open.png')) + self.openlp1BrowseButton.setObjectName(u'Openlp1BrowseButton') + self.openlp1FileLayout.addWidget(self.openlp1BrowseButton) + self.openlp1Layout.addRow(self.openlp1FileLabel, self.openlp1FileLayout) + self.openlp1DisabledLabel = QtGui.QLabel(self.openlp1Widget) self.openlp1DisabledLabel.setWordWrap(True) - self.openlp1Layout.addWidget(self.openlp1DisabledLabel) - self.formatWidget.addWidget(self.openlp1Page) - self.selectPageLayout.addWidget(self.formatWidget) + self.openlp1DisabledLabel.setObjectName(u'Openlp1DisabledLabel') + self.openlp1Layout.addRow(self.openlp1DisabledLabel) + self.openlp1Spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.openlp1Layout.setItem(1, QtGui.QFormLayout.LabelRole, + self.openlp1Spacer) + self.selectStack.addWidget(self.openlp1Widget) + self.selectPageLayout.addLayout(self.selectStack) bibleImportWizard.addPage(self.selectPage) - # License page + # License Page self.licenseDetailsPage = QtGui.QWizardPage() self.licenseDetailsPage.setObjectName(u'LicenseDetailsPage') self.licenseDetailsLayout = QtGui.QFormLayout(self.licenseDetailsPage) - self.licenseDetailsLayout.setMargin(20) - self.licenseDetailsLayout.setSpacing(8) self.licenseDetailsLayout.setObjectName(u'LicenseDetailsLayout') self.versionNameLabel = QtGui.QLabel(self.licenseDetailsPage) self.versionNameLabel.setObjectName(u'VersionNameLabel') @@ -320,29 +267,24 @@ class Ui_BibleImportWizard(object): self.licenseDetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.permissionsEdit) bibleImportWizard.addPage(self.licenseDetailsPage) - # Progress page + # Progress Page self.importPage = QtGui.QWizardPage() self.importPage.setObjectName(u'ImportPage') self.importLayout = QtGui.QVBoxLayout(self.importPage) - self.importLayout.setSpacing(8) - self.importLayout.setMargin(50) + self.importLayout.setMargin(48) self.importLayout.setObjectName(u'ImportLayout') self.importProgressLabel = QtGui.QLabel(self.importPage) self.importProgressLabel.setObjectName(u'ImportProgressLabel') self.importLayout.addWidget(self.importProgressLabel) self.importProgressBar = QtGui.QProgressBar(self.importPage) - self.importProgressBar.setValue(0) self.importProgressBar.setObjectName(u'ImportProgressBar') self.importLayout.addWidget(self.importProgressBar) bibleImportWizard.addPage(self.importPage) - self.retranslateUi(bibleImportWizard) - self.formatWidget.setCurrentIndex(0) - self.webDownloadTabWidget.setCurrentIndex(0) - QtCore.QObject.connect(self.formatComboBox, - QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.formatWidget.setCurrentIndex) QtCore.QMetaObject.connectSlotsByName(bibleImportWizard) + QtCore.QObject.connect(self.formatComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), self.selectStack, + QtCore.SLOT(u'setCurrentIndex(int)')) def retranslateUi(self, bibleImportWizard): bibleImportWizard.setWindowTitle( @@ -373,37 +315,37 @@ class Ui_BibleImportWizard(object): translate('BiblesPlugin.ImportWizardForm', 'Web Download')) self.formatComboBox.setItemText(4, translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x')) - self.openlp1LocationLabel.setText( + self.openlp1FileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'File location:')) - self.osisLocationLabel.setText( + self.osisFileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'File location:')) - self.booksLocationLabel.setText( + self.csvBooksLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Books location:')) - self.verseLocationLabel.setText( + self.csvVersesLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Verse location:')) self.openSongFileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Bible filename:')) - self.locationLabel.setText( + self.webSourceLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Location:')) - self.locationComboBox.setItemText(0, + self.webSourceComboBox.setItemText(0, translate('BiblesPlugin.ImportWizardForm', 'Crosswalk')) - self.locationComboBox.setItemText(1, + self.webSourceComboBox.setItemText(1, translate('BiblesPlugin.ImportWizardForm', 'BibleGateway')) - self.locationComboBox.setItemText(2, + self.webSourceComboBox.setItemText(2, translate('BiblesPlugin.ImportWizardForm', 'Bibleserver')) - self.bibleLabel.setText( + self.webTranslationLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Bible:')) - self.webDownloadTabWidget.setTabText( - self.webDownloadTabWidget.indexOf(self.downloadOptionsTab), + self.webTabWidget.setTabText( + self.webTabWidget.indexOf(self.webBibleTab), translate('BiblesPlugin.ImportWizardForm', 'Download Options')) - self.addressLabel.setText( + self.webServerLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Server:')) - self.usernameLabel.setText( + self.webUserLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Username:')) - self.passwordLabel.setText( + self.webPasswordLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Password:')) - self.webDownloadTabWidget.setTabText( - self.webDownloadTabWidget.indexOf(self.proxyServerTab), + self.webTabWidget.setTabText( + self.webTabWidget.indexOf(self.webProxyTab), translate('BiblesPlugin.ImportWizardForm', 'Proxy Server (Optional)')) self.licenseDetailsPage.setTitle( @@ -430,3 +372,20 @@ class Ui_BibleImportWizard(object): 'importer has been disabled due to a missing Python module. If ' 'you want to use this importer, you will need to install the ' '"python-sqlite" module.')) + # Align all QFormLayouts towards each other. + width = max(self.formatLabel.minimumSizeHint().width(), + self.osisFileLabel.minimumSizeHint().width()) + width = max(width, self.csvBooksLabel.minimumSizeHint().width()) + width = max(width, self.csvVersesLabel.minimumSizeHint().width()) + width = max(width, self.openSongFileLabel.minimumSizeHint().width()) + width = max(width, self.openlp1FileLabel.minimumSizeHint().width()) + self.formatSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.osisSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.csvSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.openSongSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.openlp1Spacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 7975bfed7..f2797e16d 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -77,9 +77,9 @@ def parse_reference(reference): - After a verse reference all further single values are treat as verse in the last selected chapter. ``John 3:16-18`` refers to John chapter 3 verses 16 to 18 - - After a list separator it is possible to refer to additional verses. They - are build analog to the first ones. This way it is possible to define each - number of verse references. It is not possible to refer to verses in + - After a list separator it is possible to refer to additional verses. They + are build analog to the first ones. This way it is possible to define + each number of verse references. It is not possible to refer to verses in additional books. ``John 3:16,18`` refers to John chapter 3 verses 16 and 18 ``John 3:16-18,20`` refers to John chapter 3 verses 16 to 18 and 20 @@ -96,7 +96,7 @@ def parse_reference(reference): a verse separator. 2. ``(?P<from_verse>[0-9]+)`` The verse reference ``from_verse`` is manditory - 3. ``(?P<range_to>%(sep_r)s(?:`` ... ``|%(sep_e)s)?)?`` + 3. ``(?P<range_to>%(sep_r)s(?:`` ... ``|%(sep_e)s)?)?`` A ``range_to`` declaration is optional. It starts with a range separator and contains optional a chapter and verse declaration or a end separator. @@ -105,15 +105,15 @@ def parse_reference(reference): 5. ``(?P<to_verse>[0-9]+)`` The ``to_verse`` reference is equivalent to group 2. - The full reference is matched against get_reference_match(u'full'). This + The full reference is matched against get_reference_match(u'full'). This regular expression looks like this: 1. ``^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*`` - The ``book`` group starts with the first non-whitespace character. There + The ``book`` group starts with the first non-whitespace character. There are optional leading digits followed by non-digits. The group ends before the whitspace in front of the next digit. 2. ``(?P<ranges>(?:`` + range_string + ``(?:%(sep_l)s|(?=\s*$)))+)\s*$`` - The second group contains all ``ranges``. This can be multiple + The second group contains all ``ranges``. This can be multiple declarations of a range_string separated by a list separator. The reference list is a list of tuples, with each tuple structured like @@ -126,7 +126,7 @@ def parse_reference(reference): Returns None or a reference list. """ - log.debug('parse_reference("%s")', reference) + log.debug(u'parse_reference("%s")', reference) match = get_reference_match(u'full').match(reference) if match: log.debug(u'Matched reference %s' % reference) @@ -194,7 +194,7 @@ def parse_reference(reference): class SearchResults(object): """ - Encapsulate a set of search results. This is Bible-type independent. + Encapsulate a set of search results. This is Bible-type independent. """ def __init__(self, book, chapter, verselist): """ diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index a52c31fb7..c4815f2aa 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -251,4 +251,4 @@ class BiblesTab(SettingsTab): # Not Found. index = 0 self.bible_theme = u'' - self.BibleThemeComboBox.setCurrentIndex(index) + self.BibleThemeComboBox.setCurrentIndex(index) \ No newline at end of file diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index d02ff2a70..8b1d70128 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -72,7 +72,7 @@ class CSVBible(BibleDB): self.create_book(unicode(line[1], details['encoding']), line[2], int(line[0])) Receiver.send_message(u'openlp_process_events') - except IOError: + except IOError, IndexError: log.exception(u'Loading books from file failed') success = False finally: @@ -86,15 +86,17 @@ class CSVBible(BibleDB): verse_file.seek(0) verse_reader = csv.reader(verse_file, dialect) for line in verse_reader: - if self.stop_import_flag: # cancel pressed + if self.stop_import_flag: + # cancel pressed break details = chardet.detect(line[3]) if book_ptr != line[0]: book = self.get_book(line[0]) book_ptr = book.name - self.wizard.incrementProgressBar(u'%s %s %s...' % ( - translate('BiblesPlugin.CSVImport', 'Importing'), - book.name, line[1])) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.CSVImport', 'Importing %s %s...', + 'Importing <book name> <chapter>...')) % + (book.name, int(line[1]))) self.session.commit() self.create_verse(book.id, line[1], line[2], unicode(line[3], details['encoding'])) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index cdc81d408..62068437a 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -33,7 +33,7 @@ from sqlalchemy import Column, ForeignKey, or_, Table, types from sqlalchemy.orm import class_mapper, mapper, relation from sqlalchemy.orm.exc import UnmappedClassError -from openlp.core.lib import translate +from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager log = logging.getLogger(__name__) @@ -166,7 +166,7 @@ class BibleDB(QtCore.QObject, Manager): """ Stops the import of the Bible. """ - log.debug('Stopping import') + log.debug(u'Stopping import') self.stop_import_flag = True def get_name(self): @@ -354,12 +354,12 @@ class BibleDB(QtCore.QObject, Manager): verse_list.extend(verses) else: log.debug(u'OpenLP failed to find book %s', book) - QtGui.QMessageBox.information(self.bible_plugin.mediaItem, - translate('BiblesPlugin.BibleDB', 'Book not found'), - translate('BiblesPlugin.BibleDB', 'The book you requested ' - 'could not be found in this Bible. Please check your ' - 'spelling and that this is a complete Bible not just ' - 'one testament.')) + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblesPlugin', 'No Book Found'), + u'message': translate('BiblesPlugin', 'No matching book ' + 'could be found in this Bible. Check that you have ' + 'spelled the name of the book correctly.') + }) return verse_list def verse_search(self, text): @@ -430,7 +430,7 @@ class BibleDB(QtCore.QObject, Manager): Utility debugging method to dump the contents of a bible. """ log.debug(u'.........Dumping Bible Database') - log.debug('...............................Books ') + log.debug(u'...............................Books ') books = self.session.query(Book).all() log.debug(books) log.debug(u'...............................Verses ') diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 79d3f311f..a4f93f929 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -28,13 +28,14 @@ import logging import os import re import sqlite3 +import socket import urllib import urllib2 from HTMLParser import HTMLParseError from BeautifulSoup import BeautifulSoup, NavigableString -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, translate from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib import SearchResults from openlp.plugins.bibles.lib.db import BibleDB, Book @@ -184,6 +185,7 @@ class BGExtract(object): def __init__(self, proxyurl=None): log.debug(u'init %s', proxyurl) self.proxyurl = proxyurl + socket.setdefaulttimeout(30) def get_bible_chapter(self, version, bookname, chapter): """ @@ -210,6 +212,13 @@ class BGExtract(object): Receiver.send_message(u'openlp_process_events') except urllib2.URLError: log.exception(u'The web bible page could not be downloaded.') + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblePlugin.HTTPBible', 'Download Error'), + u'message': translate('BiblePlugin.HTTPBible', 'There was a ' + 'problem downloading your verse selection. Please check your ' + 'Internet connection, and if this error continues to occur ' + 'consider reporting a bug.') + }) finally: if not page: return None @@ -219,6 +228,7 @@ class BGExtract(object): soup = BeautifulSoup(page, markupMassage=cleaner) except HTMLParseError: log.exception(u'BeautifulSoup could not parse the bible page.') + Receiver.send_message(u'bibles_download_error') finally: if not soup: return None @@ -247,6 +257,7 @@ class BSExtract(object): def __init__(self, proxyurl=None): log.debug(u'init %s', proxyurl) self.proxyurl = proxyurl + socket.setdefaulttimeout(30) def get_bible_chapter(self, version, bookname, chapter): """ @@ -264,7 +275,7 @@ class BSExtract(object): log.debug(u'get_bible_chapter %s,%s,%s', version, bookname, chapter) chapter_url = u'http://m.bibleserver.com/text/%s/%s%s' % \ (version, bookname, chapter) - + log.debug(u'URL: %s', chapter_url) page = None try: @@ -272,6 +283,13 @@ class BSExtract(object): Receiver.send_message(u'openlp_process_events') except urllib2.URLError: log.exception(u'The web bible page could not be downloaded.') + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblePlugin.HTTPBible', 'Download Error'), + u'message': translate('BiblePlugin.HTTPBible', 'There was a ' + 'problem downloading your verse selection. Please check your ' + 'Internet connection, and if this error continues to occur ' + 'consider reporting a bug.') + }) finally: if not page: return None @@ -280,9 +298,13 @@ class BSExtract(object): soup = BeautifulSoup(page) except HTMLParseError: log.exception(u'BeautifulSoup could not parse the bible page.') - finally: - if not soup: - return None + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblePlugin.HTTPBible', 'Parse Error'), + u'message': translate('BiblePlugin.HTTPBible', 'There was a ' + 'problem extracting your verse selection. If this error ' + 'continues to occur consider reporting a bug.') + }) + return None Receiver.send_message(u'openlp_process_events') content = None try: @@ -308,6 +330,7 @@ class CWExtract(object): def __init__(self, proxyurl=None): log.debug(u'init %s', proxyurl) self.proxyurl = proxyurl + socket.setdefaulttimeout(30) def get_bible_chapter(self, version, bookname, chapter): """ @@ -333,17 +356,26 @@ class CWExtract(object): Receiver.send_message(u'openlp_process_events') except urllib2.URLError: log.exception(u'The web bible page could not be downloaded.') - finally: - if not page: - return None + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblePlugin.HTTPBible', 'Download Error'), + u'message': translate('BiblePlugin.HTTPBible', 'There was a ' + 'problem downloading your verse selection. Please check your ' + 'Internet connection, and if this error continues to occur ' + 'consider reporting a bug.') + }) + return None soup = None try: soup = BeautifulSoup(page) except HTMLParseError: log.exception(u'BeautifulSoup could not parse the bible page.') - finally: - if not soup: - return None + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblePlugin.HTTPBible', 'Parse Error'), + u'message': translate('BiblePlugin.HTTPBible', 'There was a ' + 'problem extracting your verse selection. If this error ' + 'continues to occur consider reporting a bug.') + }) + return None Receiver.send_message(u'openlp_process_events') htmlverses = soup.findAll(u'span', u'versetext') verses = {} @@ -447,13 +479,18 @@ class HTTPBible(BibleDB): [(u'Genesis', 1, 1, 1), (u'Genesis', 2, 2, 3)] """ for reference in reference_list: - log.debug('Reference: %s', reference) + log.debug(u'Reference: %s', reference) book = reference[0] db_book = self.get_book(book) if not db_book: book_details = self.lookup_book(book) if not book_details: - Receiver.send_message(u'bibles_nobook') + Receiver.send_message(u'openlp_error_message', { + u'title': translate('BiblesPlugin', 'No Book Found'), + u'message': translate('BiblesPlugin', 'No matching ' + 'book could be found in this Bible. Check that you' + 'have spelled the name of the book correctly.') + }) return [] db_book = self.create_book(book_details[u'name'], book_details[u'abbreviation'], diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 93f301713..9dc70e85a 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -357,4 +357,3 @@ class BibleManager(object): BibleFormat.set_availability(BibleFormat.OpenLP1, has_openlp1) __all__ = [u'BibleFormat'] - diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index dfed1697d..d557897ed 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -259,8 +259,6 @@ class BibleMediaItem(MediaManagerItem): QtCore.SIGNAL(u'bibles_showprogress'), self.onSearchProgressShow) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'bibles_hideprogress'), self.onSearchProgressHide) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'bibles_nobook'), self.onNoBookFound) def addListViewToToolBar(self): MediaManagerItem.addListViewToToolBar(self) @@ -360,13 +358,6 @@ class BibleMediaItem(MediaManagerItem): def onSearchProgressHide(self): self.SearchProgress.setVisible(False) - def onNoBookFound(self): - QtGui.QMessageBox.critical(self, - translate('BiblesPlugin.MediaItem', 'No Book Found'), - translate('BiblesPlugin.MediaItem', - 'No matching book could be found in this Bible.')) - self.AdvancedSearchButton.setEnabled(True) - def onImportClick(self): if not hasattr(self, u'import_wizard'): self.import_wizard = BibleImportForm(self, self.parent.manager, @@ -912,7 +903,7 @@ class BibleMediaItem(MediaManagerItem): old_chapter != chapter: verse_text = unicode(chapter) + verse_separator + unicode(verse) else: - verse_text = u'%s' % verse + verse_text = unicode(verse) if self.parent.settings_tab.display_style == 1: verse_text = u'{su}(' + verse_text + u'){/su}' elif self.parent.settings_tab.display_style == 2: diff --git a/openlp/plugins/bibles/lib/openlp1.py b/openlp/plugins/bibles/lib/openlp1.py index ba9476fca..866652e5b 100644 --- a/openlp/plugins/bibles/lib/openlp1.py +++ b/openlp/plugins/bibles/lib/openlp1.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -73,8 +73,8 @@ class OpenLP1Bible(BibleDB): abbreviation = unicode(book[3], u'cp1252') self.create_book(name, abbreviation, testament_id) # Update the progess bar. - self.wizard.incrementProgressBar(u'%s %s...' % (translate( - 'BiblesPlugin.OpenLP1Import', 'Importing'), name)) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.OpenLP1Import', 'Importing %s...')) % name) # Import the verses for this book. cursor.execute(u'SELECT chapter, verse, text || \'\' AS text FROM ' 'verse WHERE book_id=%s' % book_id) diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 14454a69f..c0b60f911 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -84,11 +84,12 @@ class OpenSongBible(BibleDB): unicode(verse.text) ) Receiver.send_message(u'openlp_process_events') - self.wizard.incrementProgressBar(u'%s %s %s...' % ( - translate('BiblesPlugin.Opensong', 'Importing'), - db_book.name, chapter.attrib[u'n'])) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.Opensong', 'Importing %s %s...', + 'Importing <book name> <chapter>...')) % + (db_book.name, int(chapter.attrib[u'n']))) self.session.commit() - except IOError: + except IOError, AttributeError: log.exception(u'Loading bible from OpenSong file failed') success = False finally: diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index f39a4ab0f..bf070c4bd 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -125,7 +125,7 @@ class OSISBible(BibleDB): verse = int(match.group(3)) verse_text = match.group(4) if not db_book or db_book.name != self.books[book][0]: - log.debug('New book: "%s"', self.books[book][0]) + log.debug(u'New book: "%s"', self.books[book][0]) if book == u'Matt': testament += 1 db_book = self.create_book( @@ -140,9 +140,10 @@ class OSISBible(BibleDB): if last_chapter != chapter: if last_chapter != 0: self.session.commit() - self.wizard.incrementProgressBar(u'%s %s %s...' % ( - translate('BiblesPlugin.OsisImport', 'Importing'), - self.books[match.group(1)][0], chapter)) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.OsisImport', 'Importing %s %s...', + 'Importing <book name> <chapter>...')) % + (self.books[match.group(1)][0], chapter)) last_chapter = chapter # All of this rigmarol below is because the mod2osis # tool from the Sword library embeds XML in the OSIS diff --git a/openlp/plugins/custom/__init__.py b/openlp/plugins/custom/__init__.py index 2bbf2a58b..fb86201a3 100644 --- a/openlp/plugins/custom/__init__.py +++ b/openlp/plugins/custom/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -27,4 +27,4 @@ The :mod:`custom` module provides the Custom plugin which allows custom, themed, text based items to be displayed without having to misuse another item type. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index ad170ea12..54cb38501 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -47,7 +47,7 @@ class CustomPlugin(Plugin): log.info(u'Custom Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Custom', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Custom', u'1.9.4', plugin_helpers) self.weight = -5 self.manager = Manager(u'custom', init_schema) self.edit_custom_form = EditCustomForm(self.manager) @@ -104,57 +104,57 @@ class CustomPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('CustomsPlugin', 'Custom'), - u'plural': translate('CustomsPlugin', 'Customs') + u'singular': translate('CustomsPlugin', 'Custom', 'name singular'), + u'plural': translate('CustomsPlugin', 'Customs', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('CustomsPlugin', 'Custom') + u'title': translate('CustomsPlugin', 'Custom', 'container title') } # Middle Header Bar - ## Import Button ## + ## Import Action ## self.textStrings[StringContent.Import] = { u'title': translate('CustomsPlugin', 'Import'), u'tooltip': translate('CustomsPlugin', 'Import a Custom') } - ## Load Button ## + ## Load Action ## self.textStrings[StringContent.Load] = { u'title': translate('CustomsPlugin', 'Load'), u'tooltip': translate('CustomsPlugin', 'Load a new Custom') } - ## New Button ## + ## New Action ## self.textStrings[StringContent.New] = { u'title': translate('CustomsPlugin', 'Add'), u'tooltip': translate('CustomsPlugin', 'Add a new Custom') } - ## Edit Button ## + ## Edit Action ## self.textStrings[StringContent.Edit] = { u'title': translate('CustomsPlugin', 'Edit'), u'tooltip': translate('CustomsPlugin', 'Edit the selected Custom') } - ## Delete Button ## + ## Delete Action ## self.textStrings[StringContent.Delete] = { u'title': translate('CustomsPlugin', 'Delete'), u'tooltip': translate('CustomsPlugin', 'Delete the selected Custom') } - ## Preview ## + ## Preview Action ## self.textStrings[StringContent.Preview] = { u'title': translate('CustomsPlugin', 'Preview'), u'tooltip': translate('CustomsPlugin', 'Preview the selected Custom') } - ## Live Button ## + ## Send Live Action ## self.textStrings[StringContent.Live] = { u'title': translate('CustomsPlugin', 'Live'), u'tooltip': translate('CustomsPlugin', 'Send the selected Custom live') } - ## Add to service Button ## + ## Add to Service Action ## self.textStrings[StringContent.Service] = { u'title': translate('CustomsPlugin', 'Service'), u'tooltip': translate('CustomsPlugin', diff --git a/openlp/plugins/custom/forms/__init__.py b/openlp/plugins/custom/forms/__init__.py index f31745e14..60f1395fb 100644 --- a/openlp/plugins/custom/forms/__init__.py +++ b/openlp/plugins/custom/forms/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### from editcustomform import EditCustomForm -from editcustomslideform import EditCustomSlideForm +from editcustomslideform import EditCustomSlideForm \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 1b16c6236..266673daf 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -152,4 +152,4 @@ class Ui_CustomEditDialog(object): self.themeLabel.setText( translate('CustomPlugin.EditCustomForm', 'The&me:')) self.creditLabel.setText( - translate('CustomPlugin.EditCustomForm', '&Credits:')) + translate('CustomPlugin.EditCustomForm', '&Credits:')) \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 359cc9eae..2f005828a 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -265,4 +265,4 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): if self.slideListView.count() == 0: return False, translate('CustomPlugin.EditCustomForm', 'You need to add at least one slide') - return True, u'' + return True, u'' \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomslidedialog.py b/openlp/plugins/custom/forms/editcustomslidedialog.py index ce4cf6e29..d16dc67f0 100644 --- a/openlp/plugins/custom/forms/editcustomslidedialog.py +++ b/openlp/plugins/custom/forms/editcustomslidedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -56,4 +56,4 @@ class Ui_CustomSlideEditDialog(object): translate('CustomPlugin.EditCustomForm', 'Split Slide')) self.splitButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Split a slide into two ' - 'by inserting a slide splitter.')) + 'by inserting a slide splitter.')) \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomslideform.py b/openlp/plugins/custom/forms/editcustomslideform.py index 72c7dbb4a..c8b74a387 100644 --- a/openlp/plugins/custom/forms/editcustomslideform.py +++ b/openlp/plugins/custom/forms/editcustomslideform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -72,4 +72,4 @@ class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog): if self.slideTextEdit.textCursor().columnNumber() != 0: self.slideTextEdit.insertPlainText(u'\n') self.slideTextEdit.insertPlainText(u'[---]\n' ) - self.slideTextEdit.setFocus() + self.slideTextEdit.setFocus() \ No newline at end of file diff --git a/openlp/plugins/custom/lib/__init__.py b/openlp/plugins/custom/lib/__init__.py index 15e764dcd..d3d8312d7 100644 --- a/openlp/plugins/custom/lib/__init__.py +++ b/openlp/plugins/custom/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ from customxmlhandler import CustomXMLBuilder, CustomXMLParser from mediaitem import CustomMediaItem -from customtab import CustomTab +from customtab import CustomTab \ No newline at end of file diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index 461d6af59..5063ee995 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -76,4 +76,4 @@ class CustomTab(SettingsTab): def save(self): QtCore.QSettings().setValue(self.settingsSection + u'/display footer', - QtCore.QVariant(self.displayFooter)) + QtCore.QVariant(self.displayFooter)) \ No newline at end of file diff --git a/openlp/plugins/custom/lib/customxmlhandler.py b/openlp/plugins/custom/lib/customxmlhandler.py index 14ca23ee0..1171ce6bd 100644 --- a/openlp/plugins/custom/lib/customxmlhandler.py +++ b/openlp/plugins/custom/lib/customxmlhandler.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -153,4 +153,4 @@ class CustomXMLParser(object): """ Debugging aid to dump XML so that we can see what we have. """ - return dump(self.custom_xml) + return dump(self.custom_xml) \ No newline at end of file diff --git a/openlp/plugins/custom/lib/db.py b/openlp/plugins/custom/lib/db.py index 1977a4188..1fbc04980 100644 --- a/openlp/plugins/custom/lib/db.py +++ b/openlp/plugins/custom/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -59,4 +59,4 @@ def init_schema(url): mapper(CustomSlide, custom_slide_table) metadata.create_all(checkfirst=True) - return session + return session \ No newline at end of file diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 5d9d49a25..304773ea5 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -182,4 +182,4 @@ class CustomMediaItem(MediaManagerItem): else: raw_footer.append(u'') service_item.raw_footer = raw_footer - return True + return True \ No newline at end of file diff --git a/openlp/plugins/images/__init__.py b/openlp/plugins/images/__init__.py index a98ed8ed1..6ea473c72 100644 --- a/openlp/plugins/images/__init__.py +++ b/openlp/plugins/images/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`images` module provides the Images plugin. The Images plugin provides the facility to display images from OpenLP. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index a1e539799..ea118d3ec 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -41,7 +41,7 @@ class ImagePlugin(Plugin): self.icon = build_icon(self.icon_path) def getMediaManagerItem(self): - # Create the MediaManagerItem object + # Create the MediaManagerItem object. return ImageMediaItem(self, self, self.icon) def about(self): @@ -64,12 +64,12 @@ class ImagePlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('ImagePlugin', 'Image'), - u'plural': translate('ImagePlugin', 'Images') + u'singular': translate('ImagePlugin', 'Image', 'name singular'), + u'plural': translate('ImagePlugin', 'Images', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('ImagePlugin', 'Images') + u'title': translate('ImagePlugin', 'Images', 'container title') } # Middle Header Bar ## Load Button ## @@ -113,4 +113,4 @@ class ImagePlugin(Plugin): u'title': translate('ImagePlugin', 'Service'), u'tooltip': translate('ImagePlugin', 'Add the selected Image to the service') - } \ No newline at end of file + } diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index fb7b0a249..6ff2a295b 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -24,4 +24,4 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from mediaitem import ImageMediaItem +from mediaitem import ImageMediaItem \ No newline at end of file diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 0774787f5..ccc432931 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ context_menu_action, ItemCapabilities, SettingsManager, translate, \ - check_item_selected, Receiver + check_item_selected from openlp.core.utils import AppLocation, get_images_filter log = logging.getLogger(__name__) @@ -43,6 +43,7 @@ class ImageListView(BaseListWithDnD): self.PluginName = u'Images' BaseListWithDnD.__init__(self, parent) + class ImageMediaItem(MediaManagerItem): """ This is the custom media manager item for images. @@ -51,8 +52,8 @@ class ImageMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'images/image' - # this next is a class, not an instance of a class - it will - # be instanced by the base MediaManagerItem + # This next is a class, not an instance of a class - it will + # be instanced by the base MediaManagerItem. self.ListViewWithDnD_class = ImageListView MediaManagerItem.__init__(self, parent, self, icon) @@ -109,11 +110,11 @@ class ImageMediaItem(MediaManagerItem): translate('ImagePlugin.MediaItem', 'Replace Live Background'), self.onReplaceClick, False) self.resetButton = self.toolbar.addToolbarButton( - translate('ImagePlugin.MediaItem', u'Reset Background'), + translate('ImagePlugin.MediaItem', 'Reset Background'), u':/system/system_close.png', translate('ImagePlugin.MediaItem', 'Reset Live Background'), self.onResetClick, False) - # Add the song widget to the page layout + # Add the song widget to the page layout. self.pageLayout.addWidget(self.ImageWidget) self.resetButton.setVisible(False) @@ -132,15 +133,13 @@ class ImageMediaItem(MediaManagerItem): os.remove(os.path.join(self.servicePath, unicode(text.text()))) except OSError: - #if not present do not worry + # if not present do not worry pass self.listView.takeItem(row) SettingsManager.set_list(self.settingsSection, self.settingsSection, self.getFileList()) def loadList(self, list): - self.listView.setCursor(QtCore.Qt.BusyCursor) - Receiver.send_message(u'openlp_process_events') for file in list: filename = os.path.split(unicode(file))[1] thumb = os.path.join(self.servicePath, filename) @@ -155,8 +154,6 @@ class ImageMediaItem(MediaManagerItem): item_name.setIcon(icon) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) self.listView.addItem(item_name) - self.listView.setCursor(QtCore.Qt.ArrowCursor) - Receiver.send_message(u'openlp_process_events') def generateSlideData(self, service_item, item=None, xmlVersion=False): items = self.listView.selectedIndexes() @@ -169,6 +166,34 @@ class ImageMediaItem(MediaManagerItem): service_item.add_capability(ItemCapabilities.AllowsAdditions) # force a nonexistent theme service_item.theme = -1 + missing_items = [] + missing_items_filenames = [] + for item in items: + bitem = self.listView.item(item.row()) + filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + if not os.path.exists(filename): + missing_items.append(item) + missing_items_filenames.append(filename) + for item in missing_items: + items.remove(item) + # We cannot continue, as all images do not exist. + if not items: + QtGui.QMessageBox.critical(self, + translate('ImagePlugin.MediaItem', 'Missing Image(s)'), + unicode(translate('ImagePlugin.MediaItem', + 'The following image(s) no longer exist: %s')) % + u'\n'.join(missing_items_filenames)) + return False + # We have missing as well as existing images. We ask what to do. + elif missing_items and QtGui.QMessageBox.question(self, + translate('ImagePlugin.MediaItem', 'Missing Image(s)'), + unicode(translate('ImagePlugin.MediaItem', 'The following ' + 'image(s) no longer exist: %s\nDo you want to add the other ' + 'images anyway?')) % u'\n'.join(missing_items_filenames), + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | + QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.No: + return False + # Continue with the existing images. for item in items: bitem = self.listView.item(item.row()) filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) @@ -186,12 +211,18 @@ class ImageMediaItem(MediaManagerItem): if check_item_selected(self.listView, translate('ImagePlugin.MediaItem', 'You must select an image to replace the background with.')): - items = self.listView.selectedIndexes() - for item in items: - bitem = self.listView.item(item.row()) - filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + item = self.listView.selectedIndexes()[0] + bitem = self.listView.item(item.row()) + filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + if os.path.exists(filename): (path, name) = os.path.split(filename) self.parent.liveController.display.directImage(name, filename) + else: + QtGui.QMessageBox.critical(self, + translate('ImagePlugin.MediaItem', 'Live Background Could ' + 'Not Be Replaced'), + unicode(translate('ImagePlugin.MediaItem', + 'The image %s no longer exists.')) % filename) self.resetButton.setVisible(True) def onPreviewClick(self): diff --git a/openlp/plugins/media/__init__.py b/openlp/plugins/media/__init__.py index d45371e8d..7be6e5ea9 100644 --- a/openlp/plugins/media/__init__.py +++ b/openlp/plugins/media/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -28,4 +28,4 @@ The :mod:`media` module provides the Media plugin which allows OpenLP to display videos. The media supported depends not only on the Python support but also extensively on the codecs installed on the underlying operating system being picked up and usable by Python. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/media/lib/__init__.py b/openlp/plugins/media/lib/__init__.py index 8d3ba2fe4..59d7642df 100644 --- a/openlp/plugins/media/lib/__init__.py +++ b/openlp/plugins/media/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -27,4 +27,4 @@ from mediaitem import MediaMediaItem from mediatab import MediaTab -__all__ = ['MediaMediaItem'] +__all__ = ['MediaMediaItem'] \ No newline at end of file diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 11e00628e..49b26446f 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -30,7 +30,7 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ - ItemCapabilities, SettingsManager, translate, check_item_selected, \ + ItemCapabilities, SettingsManager, translate, check_item_selected, \ context_menu_action log = logging.getLogger(__name__) @@ -60,10 +60,9 @@ class MediaMediaItem(MediaManagerItem): def retranslateUi(self): self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media') - self.OnNewFileMasks = translate('MediaPlugin.MediaItem', - u'Videos (%s);;' - u'Audio (%s);;' - u'All files (*)' % (self.parent.video_list, self.parent.audio_list)) + self.OnNewFileMasks = unicode(translate('MediaPlugin.MediaItem', + 'Videos (%s);;Audio (%s);;All files (*)')) % \ + (self.parent.video_list, self.parent.audio_list) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -89,7 +88,7 @@ class MediaMediaItem(MediaManagerItem): self.ImageWidget.sizePolicy().hasHeightForWidth()) self.ImageWidget.setSizePolicy(sizePolicy) self.ImageWidget.setObjectName(u'ImageWidget') - #Replace backgrounds do not work at present so remove functionality. + # Replace backgrounds do not work at present so remove functionality. self.blankButton = self.toolbar.addToolbarButton( translate('MediaPlugin.MediaItem', 'Replace Background'), u':/slides/slide_blank.png', @@ -122,15 +121,24 @@ class MediaMediaItem(MediaManagerItem): if item is None: return False filename = unicode(item.data(QtCore.Qt.UserRole).toString()) - service_item.title = unicode( - translate('MediaPlugin.MediaItem', 'Media')) - service_item.add_capability(ItemCapabilities.RequiresMedia) - # force a nonexistent theme - service_item.theme = -1 - frame = u':/media/image_clapperboard.png' - (path, name) = os.path.split(filename) - service_item.add_from_command(path, name, frame) - return True + if os.path.exists(filename): + service_item.title = unicode( + translate('MediaPlugin.MediaItem', 'Media')) + service_item.add_capability(ItemCapabilities.RequiresMedia) + # force a nonexistent theme + service_item.theme = -1 + frame = u':/media/image_clapperboard.png' + (path, name) = os.path.split(filename) + service_item.add_from_command(path, name, frame) + return True + else: + # File is no longer present + QtGui.QMessageBox.critical( + self, translate('MediaPlugin.MediaItem', + 'Missing Media File'), + unicode(translate('MediaPlugin.MediaItem', + 'The file %s no longer exists.')) % filename) + return False def initialise(self): self.listView.setSelectionMode( diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index e67da62df..2fc372070 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -79,4 +79,4 @@ class MediaTab(SettingsTab): if oldUsePhonon != self.usePhonon: QtCore.QSettings().setValue(self.settingsSection + u'/use phonon', QtCore.QVariant(self.usePhonon)) - Receiver.send_message(u'config_screen_changed') + Receiver.send_message(u'config_screen_changed') \ No newline at end of file diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 7660e8514..64caaa0de 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -38,7 +38,7 @@ class MediaPlugin(Plugin): log.info(u'%s MediaPlugin loaded', __name__) def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Media', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Media', u'1.9.4', plugin_helpers) self.weight = -6 self.icon_path = u':/plugins/plugin_media.png' self.icon = build_icon(self.icon_path) @@ -65,7 +65,7 @@ class MediaPlugin(Plugin): def _addToList(self, list, value, mimetype): # Is it a media type if len(value) == 2: - extensions = mimetypes.guess_all_extensions(unicode(mimetype)) + extensions = mimetypes.guess_all_extensions(unicode(mimetype)) # we have an extension if extensions: for extension in extensions: @@ -93,51 +93,51 @@ class MediaPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('MediaPlugin', 'Media'), - u'plural': translate('MediaPlugin', 'Media') + u'singular': translate('MediaPlugin', 'Media', 'name singular'), + u'plural': translate('MediaPlugin', 'Media', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('MediaPlugin', 'Media') + u'title': translate('MediaPlugin', 'Media', 'container title') } # Middle Header Bar - ## Load Button ## + ## Load Action ## self.textStrings[StringContent.Load] = { u'title': translate('MediaPlugin', 'Load'), u'tooltip': translate('MediaPlugin', 'Load a new Media') } - ## New Button ## + ## New Action ## self.textStrings[StringContent.New] = { u'title': translate('MediaPlugin', 'Add'), u'tooltip': translate('MediaPlugin', 'Add a new Media') } - ## Edit Button ## + ## Edit Action ## self.textStrings[StringContent.Edit] = { u'title': translate('MediaPlugin', 'Edit'), u'tooltip': translate('MediaPlugin', 'Edit the selected Media') } - ## Delete Button ## + ## Delete Action ## self.textStrings[StringContent.Delete] = { u'title': translate('MediaPlugin', 'Delete'), u'tooltip': translate('MediaPlugin', 'Delete the selected Media') } - ## Preview ## + ## Preview Action ## self.textStrings[StringContent.Preview] = { u'title': translate('MediaPlugin', 'Preview'), u'tooltip': translate('MediaPlugin', 'Preview the selected Media') } - ## Live Button ## + ## Send Live Action ## self.textStrings[StringContent.Live] = { u'title': translate('MediaPlugin', 'Live'), u'tooltip': translate('MediaPlugin', 'Send the selected Media live') } - ## Add to service Button ## + ## Add to Service Action ## self.textStrings[StringContent.Service] = { u'title': translate('MediaPlugin', 'Service'), u'tooltip': translate('MediaPlugin', diff --git a/openlp/plugins/presentations/__init__.py b/openlp/plugins/presentations/__init__.py index 4e492fa0c..317281c23 100644 --- a/openlp/plugins/presentations/__init__.py +++ b/openlp/plugins/presentations/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`presentations` module provides the Presentations plugin which allows OpenLP to show presentations from most popular presentation packages. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/__init__.py b/openlp/plugins/presentations/lib/__init__.py index e64169b92..2e46cf486 100644 --- a/openlp/plugins/presentations/lib/__init__.py +++ b/openlp/plugins/presentations/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -27,4 +27,4 @@ from presentationcontroller import PresentationController from messagelistener import MessageListener from mediaitem import PresentationMediaItem -from presentationtab import PresentationTab +from presentationtab import PresentationTab \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 8f8e06734..d7407b729 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -255,8 +255,9 @@ class ImpressDocument(PresentationDocument): self.document = desktop.loadComponentFromURL(url, u'_blank', 0, properties) except: - log.exception(u'Failed to load presentation') + log.exception(u'Failed to load presentation %s' % url) return False + self.presentation = self.document.getPresentation() self.presentation.Display = \ self.controller.plugin.renderManager.screens.current_display + 1 diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 8e3a2fc36..e832f1a10 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -30,7 +30,7 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ - SettingsManager, translate, check_item_selected, Receiver + SettingsManager, translate, check_item_selected, Receiver, ItemCapabilities from openlp.plugins.presentations.lib import MessageListener log = logging.getLogger(__name__) @@ -90,8 +90,8 @@ class PresentationMediaItem(MediaManagerItem): if fileType.find(type) == -1: fileType += u'*.%s ' % type self.parent.serviceManager.supportedSuffixes(type) - self.OnNewFileMasks = translate('PresentationPlugin.MediaItem', - 'Presentations (%s)' % fileType) + self.OnNewFileMasks = unicode(translate('PresentationPlugin.MediaItem', + 'Presentations (%s)')) % fileType def requiredIcons(self): """ @@ -153,7 +153,7 @@ class PresentationMediaItem(MediaManagerItem): """ self.DisplayTypeComboBox.clear() for item in self.controllers: - #load the drop down selection + # load the drop down selection if self.controllers[item].enabled(): self.DisplayTypeComboBox.addItem(item) if self.DisplayTypeComboBox.count() > 1: @@ -249,28 +249,39 @@ class PresentationMediaItem(MediaManagerItem): return False service_item.title = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) + service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay) shortname = service_item.shortname if shortname: for item in items: bitem = self.listView.item(item.row()) filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) - if shortname == self.Automatic: - service_item.shortname = self.findControllerByType(filename) - if not service_item.shortname: - return False - controller = self.controllers[service_item.shortname] - (path, name) = os.path.split(filename) - doc = controller.add_doc(filename) - if doc.get_thumbnail_path(1, True) is None: - doc.load_presentation() - i = 1 - img = doc.get_thumbnail_path(i, True) - while img: - service_item.add_from_command(path, name, img) - i = i + 1 + if os.path.exists(filename): + if shortname == self.Automatic: + service_item.shortname = \ + self.findControllerByType(filename) + if not service_item.shortname: + return False + controller = self.controllers[service_item.shortname] + (path, name) = os.path.split(filename) + doc = controller.add_doc(filename) + if doc.get_thumbnail_path(1, True) is None: + doc.load_presentation() + i = 1 img = doc.get_thumbnail_path(i, True) - doc.close_presentation() - return True + while img: + service_item.add_from_command(path, name, img) + i = i + 1 + img = doc.get_thumbnail_path(i, True) + doc.close_presentation() + return True + else: + # File is no longer present + QtGui.QMessageBox.critical( + self, translate('PresentationPlugin.MediaItem', + 'Missing Presentation'), + unicode(translate('PresentationPlugin.MediaItem', + 'The Presentation %s no longer exists.')) % filename) + return False else: return False @@ -280,7 +291,7 @@ class PresentationMediaItem(MediaManagerItem): file type. This is used if "Automatic" is set as the preferred controller. Find the first (alphabetic) enabled controller which "supports" the extension. If none found, then look for a controller - which "alsosupports" it instead. + which "also supports" it instead. """ filetype = filename.split(u'.')[1] if not filetype: diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 535744369..19abadf0d 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -90,7 +90,7 @@ class Controller(object): """ Go to a specific slide """ - log.debug(u'Live = %s, slide' % self.is_live) + log.debug(u'Live = %s, slide' % self.is_live) if not self.is_live: return if self.doc.is_blank(): @@ -249,7 +249,7 @@ class MessageListener(object): self.timer = QtCore.QTimer() self.timer.setInterval(500) QtCore.QObject.connect( - self.timer, QtCore.SIGNAL("timeout()"), self.timeout) + self.timer, QtCore.SIGNAL(u'timeout()'), self.timeout) def startup(self, message): """ diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 58bb6b3d6..012f8534a 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -312,4 +312,4 @@ class PowerpointDocument(PresentationDocument): shape = shapes(idx + 1) if shape.HasTextFrame: text += shape.TextFrame.TextRange.Text + '\n' - return text + return text \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 281e647de..4c8e7bf95 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -247,4 +247,4 @@ class PptviewDocument(PresentationDocument): """ Triggers the previous slide on the running presentation """ - self.controller.process.PrevStep(self.pptid) + self.controller.process.PrevStep(self.pptid) \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py index 304c942f0..de0be3e73 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py +++ b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 5bd0719e9..42f7b654a 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -440,4 +440,4 @@ class PresentationDocument(object): ``slide_no`` The slide the notes are required for, starting at 1 """ - return '' + return '' \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index d1ebb570c..cd4dd7901 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -160,4 +160,4 @@ class PresentationTab(SettingsTab): QtCore.QVariant(self.OverrideAppCheckBox.checkState())) changed = True if changed: - Receiver.send_message(u'mediaitem_presentation_rebuild') + Receiver.send_message(u'mediaitem_presentation_rebuild') \ No newline at end of file diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 300314bde..8afed6022 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -51,7 +51,7 @@ class PresentationPlugin(Plugin): """ log.debug(u'Initialised') self.controllers = {} - Plugin.__init__(self, u'Presentations', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Presentations', u'1.9.4', plugin_helpers) self.weight = -8 self.icon_path = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.icon_path) @@ -152,39 +152,42 @@ class PresentationPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('PresentationPlugin', 'Presentation'), - u'plural': translate('PresentationPlugin', 'Presentations') + u'singular': translate('PresentationPlugin', 'Presentation', + 'name singular'), + u'plural': translate('PresentationPlugin', 'Presentations', + 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('PresentationPlugin', 'Presentations') + u'title': translate('PresentationPlugin', 'Presentations', + 'container title') } # Middle Header Bar - ## Load Button ## + ## Load Action ## self.textStrings[StringContent.Load] = { u'title': translate('PresentationPlugin', 'Load'), u'tooltip': translate('PresentationPlugin', 'Load a new Presentation') } - ## Delete Button ## + ## Delete Action ## self.textStrings[StringContent.Delete] = { u'title': translate('PresentationPlugin', 'Delete'), u'tooltip': translate('PresentationPlugin', 'Delete the selected Presentation') } - ## Preview ## + ## Preview Action ## self.textStrings[StringContent.Preview] = { u'title': translate('PresentationPlugin', 'Preview'), u'tooltip': translate('PresentationPlugin', 'Preview the selected Presentation') } - ## Live Button ## + ## Send Live Action ## self.textStrings[StringContent.Live] = { u'title': translate('PresentationPlugin', 'Live'), u'tooltip': translate('PresentationPlugin', 'Send the selected Presentation live') } - ## Add to service Button ## + ## Add to Service Action ## self.textStrings[StringContent.Service] = { u'title': translate('PresentationPlugin', 'Service'), u'tooltip': translate('PresentationPlugin', diff --git a/openlp/plugins/remotes/__init__.py b/openlp/plugins/remotes/__init__.py index 3c35beb4c..4e619fb67 100644 --- a/openlp/plugins/remotes/__init__.py +++ b/openlp/plugins/remotes/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`remotes` plugin allows OpenLP to be controlled from another machine over a network connection. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/remotes/lib/__init__.py b/openlp/plugins/remotes/lib/__init__.py index 829afe759..b6f952242 100644 --- a/openlp/plugins/remotes/lib/__init__.py +++ b/openlp/plugins/remotes/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### from remotetab import RemoteTab -from httpserver import HttpServer +from httpserver import HttpServer \ No newline at end of file diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index f1796101f..6ec9476a8 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -347,4 +347,4 @@ class HttpConnection(object): log.debug(u'close socket') self.socket.close() self.socket = None - self.parent.close_connection(self) + self.parent.close_connection(self) \ No newline at end of file diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 123aa291d..e81cc99ae 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -78,4 +78,4 @@ class RemoteTab(SettingsTab): QtCore.QSettings().setValue(self.settingsSection + u'/port', QtCore.QVariant(self.portSpinBox.value())) QtCore.QSettings().setValue(self.settingsSection + u'/ip address', - QtCore.QVariant(self.addressEdit.text())) + QtCore.QVariant(self.addressEdit.text())) \ No newline at end of file diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 4b6a57cad..dbc56a61c 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -38,7 +38,7 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'Remotes', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Remotes', u'1.9.4', plugin_helpers) self.icon = build_icon(u':/plugins/plugin_remote.png') self.weight = -1 self.server = None @@ -84,10 +84,10 @@ class RemotesPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('RemotePlugin', 'Remote'), - u'plural': translate('RemotePlugin', 'Remotes') + u'singular': translate('RemotePlugin', 'Remote', 'name singular'), + u'plural': translate('RemotePlugin', 'Remotes', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('RemotePlugin', 'Remote') + u'title': translate('RemotePlugin', 'Remote', 'container title') } diff --git a/openlp/plugins/songs/__init__.py b/openlp/plugins/songs/__init__.py index 7631351e0..c95d29c46 100644 --- a/openlp/plugins/songs/__init__.py +++ b/openlp/plugins/songs/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -26,4 +26,4 @@ """ The :mod:`songs` module provides the Songs plugin. The Songs plugin provides the main lyric projection function of OpenLP. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index 511d82747..160a014ac 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -57,4 +57,4 @@ from songbookform import SongBookForm from editverseform import EditVerseForm from editsongform import EditSongForm from songmaintenanceform import SongMaintenanceForm -from songimportform import SongImportForm +from songimportform import SongImportForm \ No newline at end of file diff --git a/openlp/plugins/songs/forms/authorsdialog.py b/openlp/plugins/songs/forms/authorsdialog.py index 8141703b0..1c5191702 100644 --- a/openlp/plugins/songs/forms/authorsdialog.py +++ b/openlp/plugins/songs/forms/authorsdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -83,4 +83,4 @@ class Ui_AuthorsDialog(object): self.FirstNameLabel.setText( translate('SongsPlugin.AuthorsForm', 'First name:')) self.LastNameLabel.setText( - translate('SongsPlugin.AuthorsForm', 'Last name:')) + translate('SongsPlugin.AuthorsForm', 'Last name:')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 1dacd82cc..6777d2f49 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -108,4 +108,4 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): self.DisplayEdit.setFocus() return False else: - return QtGui.QDialog.accept(self) + return QtGui.QDialog.accept(self) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 66ade5bcd..7765b1a26 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -470,4 +470,4 @@ class Ui_EditSongDialog(object): self.SongTabWidget.setTabText( self.SongTabWidget.indexOf(self.ThemeTab), translate('SongsPlugin.EditSongForm', - 'Theme, Copyright Info && Comments')) + 'Theme, Copyright Info && Comments')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index ad4182d54..70b0e912b 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -186,9 +186,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.AuthorsListView.clear() self.TopicsListView.clear() self.TitleEditItem.setFocus(QtCore.Qt.OtherFocusReason) + self.songBookNumberEdit.setText(u'') self.loadAuthors() self.loadTopics() self.loadBooks() + self.ThemeSelectionComboItem.setCurrentIndex(0) # it's a new song to preview is not possible self.previewButton.setVisible(False) diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 43dc8b96d..f83579044 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -104,4 +104,4 @@ class Ui_EditVerseDialog(object): self.verseTypeComboBox.setItemText(6, VerseType.to_string(VerseType.Other)) self.insertButton.setText( - translate('SongsPlugin.EditVerseForm', '&Insert')) + translate('SongsPlugin.EditVerseForm', '&Insert')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 8f5f04194..a1a301b61 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -172,4 +172,4 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): translate('SongsPlugin.EditSongForm', 'You need to type some text in to the verse.')) return False - QtGui.QDialog.accept(self) + QtGui.QDialog.accept(self) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songbookdialog.py b/openlp/plugins/songs/forms/songbookdialog.py index 5a02674b3..8166453a2 100644 --- a/openlp/plugins/songs/forms/songbookdialog.py +++ b/openlp/plugins/songs/forms/songbookdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -74,4 +74,4 @@ class Ui_SongBookDialog(object): translate('SongsPlugin.SongBookForm', 'Song Book Maintenance')) self.NameLabel.setText(translate('SongsPlugin.SongBookForm', '&Name:')) self.PublisherLabel.setText( - translate('SongsPlugin.SongBookForm', '&Publisher:')) + translate('SongsPlugin.SongBookForm', '&Publisher:')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index bdec26dfe..23c8c6533 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -56,4 +56,4 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): self.NameEdit.setFocus() return False else: - return QtGui.QDialog.accept(self) + return QtGui.QDialog.accept(self) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 81acea00f..5ec7f45e1 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -133,8 +133,8 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): """ Stop the import on cancel button, close button or ESC key. """ - log.debug('Import canceled by user.') - if self.currentId() == 2: + log.debug(u'Import canceled by user.') + if self.currentPage() == self.importPage: Receiver.send_message(u'songs_stop_import') self.done(QtGui.QDialog.Rejected) @@ -142,11 +142,9 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): """ Validate the current page before moving on to the next page. """ - if self.currentId() == 0: - # Welcome page + if self.currentPage() == self.welcomePage: return True - elif self.currentId() == 1: - # Select page + elif self.currentPage() == self.sourcePage: source_format = self.formatComboBox.currentIndex() if source_format == SongFormat.OpenLP2: if self.openLP2FilenameEdit.text().isEmpty(): @@ -250,8 +248,7 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): self.songBeamerAddButton.setFocus() return False return True - elif self.currentId() == 2: - # Progress page + elif self.currentPage() == self.importPage: return True def getFileName(self, title, editbox, filters=u''): @@ -275,8 +272,8 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): filters += u'%s (*)' % translate('SongsPlugin.ImportWizardForm', 'All Files') filename = QtGui.QFileDialog.getOpenFileName(self, title, - os.path.dirname(SettingsManager.get_last_dir( - self.plugin.settingsSection, 1)), filters) + SettingsManager.get_last_dir(self.plugin.settingsSection, 1), + filters) if filename: editbox.setText(filename) SettingsManager.set_last_dir(self.plugin.settingsSection, @@ -303,8 +300,8 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): filters += u'%s (*)' % translate('SongsPlugin.ImportWizardForm', 'All Files') filenames = QtGui.QFileDialog.getOpenFileNames(self, title, - os.path.dirname(SettingsManager.get_last_dir( - self.plugin.settingsSection, 1)), filters) + SettingsManager.get_last_dir(self.plugin.settingsSection, 1), + filters) if filenames: listbox.addItems(filenames) SettingsManager.set_last_dir( @@ -423,7 +420,7 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): self.removeSelectedItems(self.songBeamerFileListWidget) def onCurrentIdChanged(self, id): - if id == 2: + if self.page(id) == self.importPage: self.preImport() self.performImport() self.postImport() diff --git a/openlp/plugins/songs/forms/songimportwizard.py b/openlp/plugins/songs/forms/songimportwizard.py index aafff1051..85fbb07fe 100644 --- a/openlp/plugins/songs/forms/songimportwizard.py +++ b/openlp/plugins/songs/forms/songimportwizard.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -33,68 +33,48 @@ class Ui_SongImportWizard(object): self.openIcon = build_icon(u':/general/general_open.png') self.deleteIcon = build_icon(u':/general/general_delete.png') songImportWizard.setObjectName(u'songImportWizard') - songImportWizard.resize(550, 386) songImportWizard.setModal(True) songImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle) songImportWizard.setOptions( QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) + # Welcome Page self.welcomePage = QtGui.QWizardPage() - self.welcomePage.setObjectName(u'welcomePage') self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap, QtGui.QPixmap(u':/wizards/wizard_importsong.bmp')) - self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage) - self.welcomeLayout.setSpacing(8) - self.welcomeLayout.setMargin(0) - self.welcomeLayout.setObjectName(u'welcomeLayout') - self.welcomeTextLayout = QtGui.QVBoxLayout() - self.welcomeTextLayout.setSpacing(8) - self.welcomeTextLayout.setObjectName(u'welcomeTextLayout') + self.welcomePage.setObjectName(u'WelcomePage') + self.welcomeLayout = QtGui.QVBoxLayout(self.welcomePage) + self.welcomeLayout.setObjectName(u'WelcomeLayout') self.titleLabel = QtGui.QLabel(self.welcomePage) self.titleLabel.setObjectName(u'TitleLabel') - self.welcomeTextLayout.addWidget(self.titleLabel) - self.welcomeTopSpacer = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) - self.welcomeTextLayout.addItem(self.welcomeTopSpacer) + self.welcomeLayout.addWidget(self.titleLabel) + self.welcomeLayout.addSpacing(40) self.informationLabel = QtGui.QLabel(self.welcomePage) self.informationLabel.setWordWrap(True) - self.informationLabel.setMargin(10) self.informationLabel.setObjectName(u'InformationLabel') - self.welcomeTextLayout.addWidget(self.informationLabel) - self.welcomeBottomSpacer = QtGui.QSpacerItem(20, 40, - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.welcomeTextLayout.addItem(self.welcomeBottomSpacer) - self.welcomeLayout.addLayout(self.welcomeTextLayout) + self.welcomeLayout.addWidget(self.informationLabel) + self.welcomeLayout.addStretch() songImportWizard.addPage(self.welcomePage) + # Source Page self.sourcePage = QtGui.QWizardPage() self.sourcePage.setObjectName(u'SourcePage') self.sourceLayout = QtGui.QVBoxLayout(self.sourcePage) - self.sourceLayout.setSpacing(8) - self.sourceLayout.setMargin(20) self.sourceLayout.setObjectName(u'SourceLayout') - self.formatLayout = QtGui.QHBoxLayout() - self.formatLayout.setSpacing(8) + self.formatLayout = QtGui.QFormLayout() self.formatLayout.setObjectName(u'FormatLayout') self.formatLabel = QtGui.QLabel(self.sourcePage) self.formatLabel.setObjectName(u'FormatLabel') - self.formatLayout.addWidget(self.formatLabel) self.formatComboBox = QtGui.QComboBox(self.sourcePage) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, - QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.formatComboBox.sizePolicy().hasHeightForWidth()) - self.formatComboBox.setSizePolicy(sizePolicy) - self.formatComboBox.setObjectName(u'formatComboBox') - self.formatLayout.addWidget(self.formatComboBox) - self.formatSpacer = QtGui.QSpacerItem(40, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.formatLayout.addItem(self.formatSpacer) + self.formatComboBox.setObjectName(u'FormatComboBox') + self.formatLayout.addRow(self.formatLabel, self.formatComboBox) + self.formatSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.formatLayout.setItem(1, QtGui.QFormLayout.LabelRole, + self.formatSpacer) self.sourceLayout.addLayout(self.formatLayout) - self.formatStackedWidget = QtGui.QStackedWidget(self.sourcePage) - self.formatStackedWidget.setObjectName(u'FormatStackedWidget') + self.formatStack = QtGui.QStackedLayout() + self.formatStack.setObjectName(u'FormatStack') # OpenLP 2.0 self.addSingleFileSelectItem(u'openLP2') # openlp.org 1.x @@ -120,28 +100,26 @@ class Ui_SongImportWizard(object): self.addMultiFileSelectItem(u'songBeamer') # Commented out for future use. # self.addSingleFileSelectItem(u'csv', u'CSV') - self.sourceLayout.addWidget(self.formatStackedWidget) + self.sourceLayout.addLayout(self.formatStack) songImportWizard.addPage(self.sourcePage) + # Import Page self.importPage = QtGui.QWizardPage() - self.importPage.setObjectName(u'importPage') + self.importPage.setObjectName(u'ImportPage') self.importLayout = QtGui.QVBoxLayout(self.importPage) - self.importLayout.setSpacing(8) - self.importLayout.setMargin(50) - self.importLayout.setObjectName(u'importLayout') + self.importLayout.setMargin(48) + self.importLayout.setObjectName(u'ImportLayout') self.importProgressLabel = QtGui.QLabel(self.importPage) - self.importProgressLabel.setObjectName(u'importProgressLabel') + self.importProgressLabel.setObjectName(u'ImportProgressLabel') self.importLayout.addWidget(self.importProgressLabel) self.importProgressBar = QtGui.QProgressBar(self.importPage) - self.importProgressBar.setProperty(u'value', 0) - self.importProgressBar.setInvertedAppearance(False) - self.importProgressBar.setObjectName(u'importProgressBar') + self.importProgressBar.setObjectName(u'ImportProgressBar') self.importLayout.addWidget(self.importProgressBar) songImportWizard.addPage(self.importPage) self.retranslateUi(songImportWizard) - self.formatStackedWidget.setCurrentIndex(0) + self.formatStack.setCurrentIndex(0) QtCore.QObject.connect(self.formatComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.formatStackedWidget.setCurrentIndex) + self.formatStack.setCurrentIndex) QtCore.QMetaObject.connectSlotsByName(songImportWizard) def retranslateUi(self, songImportWizard): @@ -257,6 +235,19 @@ class Ui_SongImportWizard(object): translate('SongsPlugin.ImportWizardForm', 'Ready.')) self.importProgressBar.setFormat( translate('SongsPlugin.ImportWizardForm', '%p%')) + # Align all QFormLayouts towards each other. + width = max(self.formatLabel.minimumSizeHint().width(), + self.openLP2FilenameLabel.minimumSizeHint().width()) + self.formatSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + self.openLP2FormLabelSpacer.changeSize(width, 0, + QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + self.openLP1FormLabelSpacer.changeSize(width, 0, + QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + self.ewFormLabelSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) +# self.csvFormLabelSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed, +# QtGui.QSizePolicy.Fixed) def addSingleFileSelectItem(self, prefix, obj_prefix=None, can_disable=False): @@ -270,16 +261,13 @@ class Ui_SongImportWizard(object): importWidget = page importLayout = QtGui.QFormLayout(importWidget) importLayout.setMargin(0) - importLayout.setSpacing(8) if can_disable: importLayout.setObjectName(obj_prefix + u'ImportLayout') else: importLayout.setObjectName(obj_prefix + u'Layout') filenameLabel = QtGui.QLabel(importWidget) filenameLabel.setObjectName(obj_prefix + u'FilenameLabel') - importLayout.setWidget(0, QtGui.QFormLayout.LabelRole, filenameLabel) fileLayout = QtGui.QHBoxLayout() - fileLayout.setSpacing(8) fileLayout.setObjectName(obj_prefix + u'FileLayout') filenameEdit = QtGui.QLineEdit(importWidget) filenameEdit.setObjectName(obj_prefix + u'FilenameEdit') @@ -288,10 +276,14 @@ class Ui_SongImportWizard(object): browseButton.setIcon(self.openIcon) browseButton.setObjectName(obj_prefix + u'BrowseButton') fileLayout.addWidget(browseButton) - importLayout.setLayout(0, QtGui.QFormLayout.FieldRole, fileLayout) - self.formatStackedWidget.addWidget(page) + importLayout.addRow(filenameLabel, fileLayout) + formSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + importLayout.setItem(1, QtGui.QFormLayout.LabelRole, formSpacer) + self.formatStack.addWidget(page) setattr(self, prefix + u'Page', page) setattr(self, prefix + u'FilenameLabel', filenameLabel) + setattr(self, prefix + u'FormLabelSpacer', formSpacer) setattr(self, prefix + u'FileLayout', fileLayout) setattr(self, prefix + u'FilenameEdit', filenameEdit) setattr(self, prefix + u'BrowseButton', browseButton) @@ -313,7 +305,6 @@ class Ui_SongImportWizard(object): importWidget = page importLayout = QtGui.QVBoxLayout(importWidget) importLayout.setMargin(0) - importLayout.setSpacing(8) if can_disable: importLayout.setObjectName(obj_prefix + u'ImportLayout') else: @@ -324,25 +315,21 @@ class Ui_SongImportWizard(object): fileListWidget.setObjectName(obj_prefix + u'FileListWidget') importLayout.addWidget(fileListWidget) buttonLayout = QtGui.QHBoxLayout() - buttonLayout.setSpacing(8) buttonLayout.setObjectName(obj_prefix + u'ButtonLayout') addButton = QtGui.QPushButton(importWidget) addButton.setIcon(self.openIcon) addButton.setObjectName(obj_prefix + u'AddButton') buttonLayout.addWidget(addButton) - buttonSpacer = QtGui.QSpacerItem(40, 20, - QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - buttonLayout.addItem(buttonSpacer) + buttonLayout.addStretch() removeButton = QtGui.QPushButton(importWidget) removeButton.setIcon(self.deleteIcon) removeButton.setObjectName(obj_prefix + u'RemoveButton') buttonLayout.addWidget(removeButton) importLayout.addLayout(buttonLayout) - self.formatStackedWidget.addWidget(page) + self.formatStack.addWidget(page) setattr(self, prefix + u'Page', page) setattr(self, prefix + u'FileListWidget', fileListWidget) setattr(self, prefix + u'ButtonLayout', buttonLayout) - setattr(self, prefix + u'ButtonSpacer', buttonSpacer) setattr(self, prefix + u'AddButton', addButton) setattr(self, prefix + u'RemoveButton', removeButton) if can_disable: @@ -361,7 +348,6 @@ class Ui_SongImportWizard(object): disabledWidget.setObjectName(obj_prefix + u'DisabledWidget') disabledLayout = QtGui.QVBoxLayout(disabledWidget) disabledLayout.setMargin(0) - disabledLayout.setSpacing(8) disabledLayout.setObjectName(obj_prefix + u'DisabledLayout') disabledLabel = QtGui.QLabel(disabledWidget) disabledLabel.setWordWrap(True) diff --git a/openlp/plugins/songs/forms/songmaintenancedialog.py b/openlp/plugins/songs/forms/songmaintenancedialog.py index 909294707..87d99e853 100644 --- a/openlp/plugins/songs/forms/songmaintenancedialog.py +++ b/openlp/plugins/songs/forms/songmaintenancedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -236,4 +236,4 @@ class Ui_SongMaintenanceDialog(object): self.BookEditButton.setText( translate('SongsPlugin.SongMaintenanceForm', '&Edit')) self.BookDeleteButton.setText( - translate('SongsPlugin.SongMaintenanceForm', '&Delete')) + translate('SongsPlugin.SongMaintenanceForm', '&Delete')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index f004ef026..0364a4df4 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -109,7 +109,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): author_name = QtGui.QListWidgetItem(author.display_name) else: author_name = QtGui.QListWidgetItem( - u'%s %s' % (author.first_name, author.last_name)) + u' '.join(author.first_name, author.last_name)) author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id)) self.AuthorsListWidget.addItem(author_name) if self.AuthorsListWidget.count() == 0: @@ -305,12 +305,13 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): 'Could not save your changes.')) elif QtGui.QMessageBox.critical(self, translate('SongsPlugin.SongMaintenanceForm', 'Error'), - translate('SongsPlugin.SongMaintenanceForm', 'The author %s' - ' already exists. Would you like to make songs with author ' - '%s use the existing author %s?' % (author.display_name, - temp_display_name, author.display_name)), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | - QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: + unicode(translate('SongsPlugin.SongMaintenanceForm', + 'The author %s already exists. Would you like to make songs' + ' with author %s use the existing author %s?')) % + (author.display_name, temp_display_name, + author.display_name), QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \ + QtGui.QMessageBox.Yes: self.mergeAuthors(author) self.resetAuthors() Receiver.send_message(u'songs_load_list') @@ -346,12 +347,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): 'Could not save your changes.')) elif QtGui.QMessageBox.critical(self, translate('SongsPlugin.SongMaintenanceForm', 'Error'), - translate('SongsPlugin.SongMaintenanceForm', 'The topic %s ' - 'already exists. Would you like to make songs with topic %s' - ' use the existing topic %s?' % (topic.name, temp_name, - topic.name)), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | - QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: + unicode(translate('SongsPlugin.SongMaintenanceForm', + 'The topic %s already exists. Would you like to make songs ' + 'with topic %s use the existing topic %s?')) % (topic.name, + temp_name, topic.name), QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \ + QtGui.QMessageBox.Yes: self.mergeTopics(topic) self.resetTopics() else: @@ -389,12 +390,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): 'Could not save your changes.')) elif QtGui.QMessageBox.critical(self, translate('SongsPlugin.SongMaintenanceForm', 'Error'), - translate('SongsPlugin.SongMaintenanceForm', 'The book %s ' - 'already exists. Would you like to make songs with book %s ' - 'use the existing book %s?' % (book.name, temp_name, - book.name)), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | - QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: + unicode(translate('SongsPlugin.SongMaintenanceForm', + 'The book %s already exists. Would you like to make songs ' + 'with book %s use the existing book %s?')) % (book.name, + temp_name, book.name), QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \ + QtGui.QMessageBox.Yes: self.mergeBooks(book) self.resetBooks() else: diff --git a/openlp/plugins/songs/forms/topicsdialog.py b/openlp/plugins/songs/forms/topicsdialog.py index fbb149aa8..2c1144631 100644 --- a/openlp/plugins/songs/forms/topicsdialog.py +++ b/openlp/plugins/songs/forms/topicsdialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -65,4 +65,4 @@ class Ui_TopicsDialog(object): TopicsDialog.setWindowTitle( translate('SongsPlugin.TopicsForm', 'Topic Maintenance')) self.NameLabel.setText( - translate('SongsPlugin.TopicsForm', 'Topic name:')) + translate('SongsPlugin.TopicsForm', 'Topic name:')) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index c45228527..f15f0bba5 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -55,4 +55,4 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): self.NameEdit.setFocus() return False else: - return QtGui.QDialog.accept(self) + return QtGui.QDialog.accept(self) \ No newline at end of file diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 5ca5d5a0f..5093d6180 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -125,4 +125,4 @@ class VerseType(object): from xml import LyricsXML, SongXMLBuilder, SongXMLParser, OpenLyricsParser from songstab import SongsTab -from mediaitem import SongMediaItem +from mediaitem import SongMediaItem \ No newline at end of file diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 88b9a8569..1b8531755 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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, Derek Scotney # @@ -29,6 +29,7 @@ import os import chardet import codecs +from openlp.core.lib import translate from songimport import SongImport log = logging.getLogger(__name__) @@ -69,8 +70,9 @@ class CCLIFileImport(SongImport): self.import_wizard.importProgressBar.setMaximum(song_total) song_count = 1 for filename in self.filenames: - self.import_wizard.incrementProgressBar( - u'Importing song %s of %s' % (song_count, song_total)) + self.import_wizard.incrementProgressBar(unicode(translate( + 'SongsPlugin.CCLIFileImport', 'Importing song %d of %d')) % + (song_count, song_total)) filename = unicode(filename) log.debug(u'Importing CCLI File: %s', filename) lines = [] @@ -86,11 +88,11 @@ class CCLIFileImport(SongImport): infile = codecs.open(filename, u'r', details['encoding']) lines = infile.readlines() ext = os.path.splitext(filename)[1] - if ext.lower() == ".usr": + if ext.lower() == u'.usr': log.info(u'SongSelect .usr format file found %s: ', filename) self.do_import_usr_file(lines) - elif ext.lower() == ".txt": + elif ext.lower() == u'.txt': log.info(u'SongSelect .txt format file found %s: ', filename) self.do_import_txt_file(lines) @@ -124,7 +126,7 @@ class CCLIFileImport(SongImport): ``Title=`` Contains the song title (e.g. *Title=Above All*) ``Author=`` - Contains a | delimited list of the song authors + Contains a | delimited list of the song authors e.g. *Author=LeBlanc, Lenny | Baloche, Paul* ``Copyright=`` Contains a | delimited list of the song copyrights @@ -184,8 +186,8 @@ class CCLIFileImport(SongImport): verse_type = u'O' check_first_verse_line = True verse_text = unicode(words_list[counter]) - verse_text = verse_text.replace("/n", "\n") - verse_lines = verse_text.split(u'\n', 1) + verse_text = verse_text.replace(u'/n', u'\n') + verse_lines = verse_text.split(u'\n', 1) if check_first_verse_line: if verse_lines[0].startswith(u'(PRE-CHORUS'): verse_type = u'P' @@ -207,7 +209,7 @@ class CCLIFileImport(SongImport): author_list = song_author.split(u'|') for author in author_list: seperated = author.split(u',') - self.add_author(seperated[1].strip() + " " + seperated[0].strip()) + self.add_author(seperated[1].strip() + u' ' + seperated[0].strip()) self.title = song_name self.copyright = song_copyright self.ccli_number = song_ccli diff --git a/openlp/plugins/songs/lib/db.py b/openlp/plugins/songs/lib/db.py index 987d1dd79..fc3aa06d1 100644 --- a/openlp/plugins/songs/lib/db.py +++ b/openlp/plugins/songs/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -181,4 +181,4 @@ def init_schema(url): mapper(Topic, topics_table) metadata.create_all(checkfirst=True) - return session + return session \ No newline at end of file diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 6b9b675c5..cb46eb798 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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, Jeffrey Smith # @@ -347,4 +347,4 @@ class EasyWorshipSongImport(SongImport): return u'' return self.memo_file.read(blob_size) else: - return 0 + return 0 \ No newline at end of file diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 63d19b95c..b82e14c12 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -126,4 +126,4 @@ SongFormat.set_availability(SongFormat.OpenLP1, has_openlp1) SongFormat.set_availability(SongFormat.SongsOfFellowship, has_sof) SongFormat.set_availability(SongFormat.Generic, has_ooo) -__all__ = [u'SongFormat'] +__all__ = [u'SongFormat'] \ No newline at end of file diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index e42cb7fa3..cd305877c 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -29,6 +29,7 @@ import locale import re from PyQt4 import QtCore, QtGui +from sqlalchemy.sql import or_ from openlp.core.lib import MediaManagerItem, BaseListWithDnD, Receiver, \ ItemCapabilities, translate, check_item_selected @@ -36,6 +37,7 @@ from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm from openlp.plugins.songs.lib import SongXMLParser, OpenLyricsParser from openlp.plugins.songs.lib.db import Author, Song +from openlp.core.lib.searchedit import SearchEdit log = logging.getLogger(__name__) @@ -88,20 +90,10 @@ class SongMediaItem(MediaManagerItem): self.SearchTextLabel.setObjectName(u'SearchTextLabel') self.SearchLayout.setWidget( 0, QtGui.QFormLayout.LabelRole, self.SearchTextLabel) - self.SearchTextEdit = QtGui.QLineEdit(self) + self.SearchTextEdit = SearchEdit(self) self.SearchTextEdit.setObjectName(u'SearchTextEdit') self.SearchLayout.setWidget( 0, QtGui.QFormLayout.FieldRole, self.SearchTextEdit) - self.SearchTypeLabel = QtGui.QLabel(self) - self.SearchTypeLabel.setAlignment( - QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) - self.SearchTypeLabel.setObjectName(u'SearchTypeLabel') - self.SearchLayout.setWidget( - 1, QtGui.QFormLayout.LabelRole, self.SearchTypeLabel) - self.SearchTypeComboBox = QtGui.QComboBox(self) - self.SearchTypeComboBox.setObjectName(u'SearchTypeComboBox') - self.SearchLayout.setWidget( - 1, QtGui.QFormLayout.FieldRole, self.SearchTypeComboBox) self.pageLayout.addLayout(self.SearchLayout) self.SearchButtonLayout = QtGui.QHBoxLayout() self.SearchButtonLayout.setMargin(0) @@ -113,9 +105,6 @@ class SongMediaItem(MediaManagerItem): self.SearchTextButton = QtGui.QPushButton(self) self.SearchTextButton.setObjectName(u'SearchTextButton') self.SearchButtonLayout.addWidget(self.SearchTextButton) - self.ClearTextButton = QtGui.QPushButton(self) - self.ClearTextButton.setObjectName(u'ClearTextButton') - self.SearchButtonLayout.addWidget(self.ClearTextButton) self.pageLayout.addLayout(self.SearchButtonLayout) # Signals and slots QtCore.QObject.connect(Receiver.get_receiver(), @@ -124,8 +113,6 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick) QtCore.QObject.connect(self.SearchTextButton, QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) - QtCore.QObject.connect(self.ClearTextButton, - QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick) QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) @@ -139,6 +126,11 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'songs_edit'), self.onRemoteEdit) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'songs_edit_clear'), self.onRemoteEditClear) + QtCore.QObject.connect(self.SearchTextEdit, + QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick) + QtCore.QObject.connect(self.SearchTextEdit, + QtCore.SIGNAL(u'searchTypeChanged(int)'), + self.onSearchTextButtonClick) def configUpdated(self): self.searchAsYouType = QtCore.QSettings().value( @@ -154,39 +146,44 @@ class SongMediaItem(MediaManagerItem): def retranslateUi(self): self.SearchTextLabel.setText( translate('SongsPlugin.MediaItem', 'Search:')) - self.SearchTypeLabel.setText( - translate('SongsPlugin.MediaItem', 'Type:')) - self.ClearTextButton.setText( - translate('SongsPlugin.MediaItem', 'Clear')) self.SearchTextButton.setText( translate('SongsPlugin.MediaItem', 'Search')) def initialise(self): - self.SearchTypeComboBox.addItem( - translate('SongsPlugin.MediaItem', 'Titles')) - self.SearchTypeComboBox.addItem( - translate('SongsPlugin.MediaItem', 'Lyrics')) - self.SearchTypeComboBox.addItem( - translate('SongsPlugin.MediaItem', 'Authors')) + self.SearchTextEdit.setSearchTypes([ + (1, u':/songs/song_search_all.png', translate('SongsPlugin.MediaItem', 'Entire Song')), + (2, u':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles')), + (3, u':/songs/song_search_lyrics.png', translate('SongsPlugin.MediaItem', 'Lyrics')), + (4, u':/songs/song_search_author.png', translate('SongsPlugin.MediaItem', 'Authors')) + ]) self.configUpdated() def onSearchTextButtonClick(self): search_keywords = unicode(self.SearchTextEdit.displayText()) search_results = [] - search_type = self.SearchTypeComboBox.currentIndex() - if search_type == 0: + # search_type = self.SearchTypeComboBox.currentIndex() + search_type = self.SearchTextEdit.currentSearchType() + if search_type == 1: + log.debug(u'Entire Song Search') + search_results = self.parent.manager.get_all_objects(Song, + or_(Song.search_title.like(u'%' + self.whitespace.sub(u' ', + search_keywords.lower()) + u'%'), + Song.search_lyrics.like(u'%' + search_keywords.lower() + \ + u'%')), Song.search_title.asc()) + self.displayResultsSong(search_results) + if search_type == 2: log.debug(u'Titles Search') search_results = self.parent.manager.get_all_objects(Song, Song.search_title.like(u'%' + self.whitespace.sub(u' ', search_keywords.lower()) + u'%'), Song.search_title.asc()) self.displayResultsSong(search_results) - elif search_type == 1: + elif search_type == 3: log.debug(u'Lyrics Search') search_results = self.parent.manager.get_all_objects(Song, Song.search_lyrics.like(u'%' + search_keywords.lower() + u'%'), Song.search_lyrics.asc()) self.displayResultsSong(search_results) - elif search_type == 2: + elif search_type == 4: log.debug(u'Authors Search') search_results = self.parent.manager.get_all_objects(Author, Author.display_name.like(u'%' + search_keywords + u'%'), @@ -235,7 +232,7 @@ class SongMediaItem(MediaManagerItem): self.listView.clear() for author in searchresults: for song in author.songs: - song_detail = '%s (%s)' % (author.display_name, song.title) + song_detail = u'%s (%s)' % (author.display_name, song.title) song_name = QtGui.QListWidgetItem(song_detail) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) self.listView.addItem(song_name) @@ -255,7 +252,9 @@ class SongMediaItem(MediaManagerItem): """ if self.searchAsYouType: search_length = 1 - if self.SearchTypeComboBox.currentIndex() == 1: + if self.SearchTextEdit.currentSearchType() == 1: + search_length = 3 + elif self.SearchTextEdit.currentSearchType() == 3: search_length = 7 if len(text) > search_length: self.onSearchTextButtonClick() @@ -315,16 +314,11 @@ class SongMediaItem(MediaManagerItem): translate('SongsPlugin.MediaItem', 'You must select an item to delete.')): items = self.listView.selectedIndexes() - if len(items) == 1: - del_message = translate('SongsPlugin.MediaItem', - 'Are you sure you want to delete the selected song?') - else: - del_message = unicode(translate('SongsPlugin.MediaItem', - 'Are you sure you want to delete the %d selected ' - 'songs?')) % len(items) ans = QtGui.QMessageBox.question(self, translate('SongsPlugin.MediaItem', 'Delete Song(s)?'), - del_message, + translate('SongsPlugin.MediaItem', + 'Are you sure you want to delete the %n selected song(s)?', '', + QtCore.QCoreApplication.CodecForTr, len(items)), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok| QtGui.QMessageBox.Cancel), QtGui.QMessageBox.Ok) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 7c01a4c19..69714e773 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -245,4 +245,4 @@ class OpenLP1SongImport(SongImport): if not chosen_encoding[1]: return None return filter(lambda item: item[1] == chosen_encoding[0], - encodings)[0][0] + encodings)[0][0] \ No newline at end of file diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index 662a94f5b..e366ddf4b 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -34,6 +34,7 @@ from sqlalchemy.orm import class_mapper, mapper, relation, scoped_session, \ sessionmaker from sqlalchemy.orm.exc import UnmappedClassError +from openlp.core.lib import translate from openlp.core.lib.db import BaseModel from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile from songimport import SongImport @@ -148,8 +149,9 @@ class OpenLPSongImport(SongImport): self.import_wizard.importProgressBar.setMaximum(song_total) song_count = 1 for song in source_songs: - self.import_wizard.incrementProgressBar( - u'Importing song %s of %s' % (song_count, song_total)) + self.import_wizard.incrementProgressBar(unicode(translate( + 'SongsPlugin.OpenLPSongImport', 'Importing song %d of %d.')) % + (song_count, song_total)) new_song = Song() new_song.title = song.title if has_media_files and hasattr(song, 'alternate_title'): diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 727af2c7b..b467eab65 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -232,4 +232,4 @@ class OooImport(SongImport): text += paratext + u'\n' songs = SongImport.process_songs_text(self.manager, text) for song in songs: - song.finish() + song.finish() \ No newline at end of file diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 767fc012a..6a60fcc6c 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -128,7 +128,7 @@ class OpenSongImport(SongImport): numfiles += len(z.infolist()) else: numfiles += 1 - log.debug("Total number of files: %d", numfiles) + log.debug(u'Total number of files: %d', numfiles) self.import_wizard.importProgressBar.setMaximum(numfiles) for filename in self.filenames: if self.stop_import_flag: @@ -159,7 +159,7 @@ class OpenSongImport(SongImport): break else: # not a zipfile - log.info('Direct import %s', filename) + log.info(u'Direct import %s', filename) self.import_wizard.incrementProgressBar( unicode(translate('SongsPlugin.ImportWizardForm', 'Importing %s...')) % os.path.split(filename)[-1]) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 320e5c88a..3e6ee8c3a 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -550,4 +550,4 @@ class SofImport(OooImport): return 6 if song_number == 1119: return 7 - return None + return None \ No newline at end of file diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 651d16a3d..f30c40a09 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -85,7 +85,7 @@ class SongBeamerImport(SongImport): """ Recieve a single file, or a list of files to import. """ - if isinstance(self.import_source, list): + if isinstance(self.import_source, list): self.import_wizard.importProgressBar.setMaximum( len(self.import_source)) for file in self.import_source: @@ -96,7 +96,7 @@ class SongBeamerImport(SongImport): read_verses = False self.file_name = os.path.split(file)[1] self.import_wizard.incrementProgressBar( - "Importing %s" % (self.file_name), 0) + u'Importing %s' % (self.file_name), 0) if os.path.isfile(file): detect_file = open(file, u'r') details = chardet.detect(detect_file.read(2048)) @@ -126,17 +126,17 @@ class SongBeamerImport(SongImport): if verse_start: verse_start = False if not self.check_verse_marks(line): - self.current_verse = u'%s\n' % line + self.current_verse = line + u'\n' else: - self.current_verse += u'%s\n' % line + self.current_verse += line + u'\n' if self.current_verse: self.replace_html_tags() self.add_verse(self.current_verse, self.current_verse_type) if self.check_complete(): self.finish() - self.import_wizard.incrementProgressBar(u'%s %s...' % - (translate('SongsPlugin.SongBeamerImport', 'Importing'), - self.file_name)) + self.import_wizard.incrementProgressBar(unicode(translate( + 'SongsPlugin.SongBeamerImport', 'Importing %s...')) % + self.file_name) return True def replace_html_tags(self): @@ -252,7 +252,7 @@ class SongBeamerImport(SongImport): elif tag_val[0] == u'#TextAlign': pass elif tag_val[0] == u'#Title': - self.title = u'%s' % tag_val[1] + self.title = unicode(tag_val[1]) elif tag_val[0] == u'#TitleAlign': pass elif tag_val[0] == u'#TitleFontSize': diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index f305b90c7..3a21a5b50 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -364,4 +364,4 @@ class SongImport(QtCore.QObject): if self.theme_name: print u'THEME: ' + self.theme_name if self.ccli_number: - print u'CCLI: ' + self.ccli_number + print u'CCLI: ' + self.ccli_number \ No newline at end of file diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 7744a28d3..25c7ba6df 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -139,4 +139,4 @@ class SongsTab(SettingsTab): QtCore.QVariant(self.update_edit)) settings.setValue(u'add song from service', QtCore.QVariant(self.update_load)) - settings.endGroup() + settings.endGroup() \ No newline at end of file diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index 2f20cf20d..1d5470f9b 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -32,7 +32,7 @@ import logging from openlp.plugins.songs.lib.songimport import SongImport -BLOCK_TYPES = (u'V', u'C', u'B') +BLOCK_TYPES = (u'V', u'C', u'B') log = logging.getLogger(__name__) @@ -111,7 +111,7 @@ class WowImport(SongImport): Recieve a single file, or a list of files to import. """ - if isinstance(self.import_source, list): + if isinstance(self.import_source, list): self.import_wizard.importProgressBar.setMaximum( len(self.import_source)) for file in self.import_source: @@ -119,7 +119,7 @@ class WowImport(SongImport): self.copyright = u'' self.file_name = os.path.split(file)[1] self.import_wizard.incrementProgressBar( - "Importing %s" % (self.file_name), 0) + u'Importing %s' % (self.file_name), 0) # Get the song title self.title = self.file_name.rpartition(u'.')[0] self.songData = open(file, 'rb') @@ -167,6 +167,5 @@ class WowImport(SongImport): self.songData.close() self.finish() self.import_wizard.incrementProgressBar( - "Importing %s" % (self.file_name)) + u'Importing %s' % (self.file_name)) return True - diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 9d98737dc..f00711bb6 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -396,4 +396,4 @@ class OpenLyricsParser(object): new_author = Author.populate(first_name=name.rsplit(u' ', 1)[0], last_name=name.rsplit(u' ', 1)[1], display_name=name) self.manager.save_object(new_author) - song.authors.append(new_author) + song.authors.append(new_author) \ No newline at end of file diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index b55b05988..545497acb 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -51,7 +51,7 @@ class SongsPlugin(Plugin): """ Create and set up the Songs plugin. """ - Plugin.__init__(self, u'Songs', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'Songs', u'1.9.4', plugin_helpers) self.weight = -10 self.manager = Manager(u'songs', init_schema) self.icon_path = u':/plugins/plugin_songs.png' @@ -213,45 +213,45 @@ class SongsPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('SongsPlugin', 'Song'), - u'plural': translate('SongsPlugin', 'Songs') + u'singular': translate('SongsPlugin', 'Song', 'name singular'), + u'plural': translate('SongsPlugin', 'Songs', 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('SongsPlugin', 'Songs') + u'title': translate('SongsPlugin', 'Songs', 'container title') } # Middle Header Bar - ## New Button ## + ## New Action ## self.textStrings[StringContent.New] = { u'title': translate('SongsPlugin', 'Add'), u'tooltip': translate('SongsPlugin', 'Add a new Song') } - ## Edit Button ## + ## Edit Action ## self.textStrings[StringContent.Edit] = { u'title': translate('SongsPlugin', 'Edit'), u'tooltip': translate('SongsPlugin', 'Edit the selected Song') } - ## Delete Button ## + ## Delete Action ## self.textStrings[StringContent.Delete] = { u'title': translate('SongsPlugin', 'Delete'), u'tooltip': translate('SongsPlugin', 'Delete the selected Song') } - ## Preview ## + ## Preview Action ## self.textStrings[StringContent.Preview] = { u'title': translate('SongsPlugin', 'Preview'), u'tooltip': translate('SongsPlugin', 'Preview the selected Song') } - ## Live Button ## + ## Send Live Action ## self.textStrings[StringContent.Live] = { u'title': translate('SongsPlugin', 'Live'), u'tooltip': translate('SongsPlugin', 'Send the selected Song live') } - ## Add to service Button ## + ## Add to Service Action ## self.textStrings[StringContent.Service] = { u'title': translate('SongsPlugin', 'Service'), u'tooltip': translate('SongsPlugin', @@ -266,4 +266,3 @@ class SongsPlugin(Plugin): self.manager.finalise() self.toolsReindexItem.setVisible(False) Plugin.finalise(self) - diff --git a/openlp/plugins/songusage/__init__.py b/openlp/plugins/songusage/__init__.py index 68caa18e6..7f532aada 100644 --- a/openlp/plugins/songusage/__init__.py +++ b/openlp/plugins/songusage/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -27,4 +27,4 @@ The :mod:`songusage` module contains the Song Usage plugin. The Song Usage plugin provides auditing capabilities for reporting the songs you are using to copyright license organisations. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/songusage/forms/__init__.py b/openlp/plugins/songusage/forms/__init__.py index b551d7168..ef99bce89 100644 --- a/openlp/plugins/songusage/forms/__init__.py +++ b/openlp/plugins/songusage/forms/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### from songusagedeleteform import SongUsageDeleteForm -from songusagedetailform import SongUsageDetailForm +from songusagedetailform import SongUsageDetailForm \ No newline at end of file diff --git a/openlp/plugins/songusage/forms/songusagedeletedialog.py b/openlp/plugins/songusage/forms/songusagedeletedialog.py index c29142ab8..af85ad5a9 100644 --- a/openlp/plugins/songusage/forms/songusagedeletedialog.py +++ b/openlp/plugins/songusage/forms/songusagedeletedialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -61,4 +61,4 @@ class Ui_SongUsageDeleteDialog(object): def retranslateUi(self, songUsageDeleteDialog): songUsageDeleteDialog.setWindowTitle( translate('SongUsagePlugin.SongUsageDeleteForm', - 'Delete Song Usage Data')) + 'Delete Song Usage Data')) \ No newline at end of file diff --git a/openlp/plugins/songusage/forms/songusagedeleteform.py b/openlp/plugins/songusage/forms/songusagedeleteform.py index 45e4e91a9..f83ec8c82 100644 --- a/openlp/plugins/songusage/forms/songusagedeleteform.py +++ b/openlp/plugins/songusage/forms/songusagedeleteform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -55,4 +55,4 @@ class SongUsageDeleteForm(QtGui.QDialog, Ui_SongUsageDeleteDialog): deleteDate = self.deleteCalendar.selectedDate().toPyDate() self.manager.delete_all_objects(SongUsageItem, SongUsageItem.usagedate <= deleteDate) - self.close() + self.close() \ No newline at end of file diff --git a/openlp/plugins/songusage/forms/songusagedetaildialog.py b/openlp/plugins/songusage/forms/songusagedetaildialog.py index 0eff17783..9383e147d 100644 --- a/openlp/plugins/songusage/forms/songusagedetaildialog.py +++ b/openlp/plugins/songusage/forms/songusagedetaildialog.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -96,4 +96,4 @@ class Ui_SongUsageDetailDialog(object): translate('SongUsagePlugin.SongUsageDetailForm', 'to')) self.fileGroupBox.setTitle( translate('SongUsagePlugin.SongUsageDetailForm', - 'Report Location')) + 'Report Location')) \ No newline at end of file diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 18aa1797f..8588ddcff 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -73,7 +73,8 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): def accept(self): log.debug(u'Detailed report generated') - filename = u'usage_detail_%s_%s.txt' % ( + filename = unicode(translate('SongUsagePlugin.SongUsageDetailForm', + 'usage_detail_%s_%s.txt')) % ( self.fromDate.selectedDate().toString(u'ddMMyyyy'), self.toDate.selectedDate().toString(u'ddMMyyyy')) usage = self.plugin.manager.get_all_objects( diff --git a/openlp/plugins/songusage/lib/__init__.py b/openlp/plugins/songusage/lib/__init__.py index d23d36e5f..c981e023b 100644 --- a/openlp/plugins/songusage/lib/__init__.py +++ b/openlp/plugins/songusage/lib/__init__.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -25,4 +25,4 @@ ############################################################################### """ The :mod:`lib` module contains the library functions for the songusage plugin. -""" +""" \ No newline at end of file diff --git a/openlp/plugins/songusage/lib/db.py b/openlp/plugins/songusage/lib/db.py index 0865d8682..80079bf85 100644 --- a/openlp/plugins/songusage/lib/db.py +++ b/openlp/plugins/songusage/lib/db.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -61,4 +61,4 @@ def init_schema(url): mapper(SongUsageItem, songusage_table) metadata.create_all(checkfirst=True) - return session + return session \ No newline at end of file diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index a4081a10c..ec37dc65e 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -4,8 +4,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -42,7 +42,7 @@ class SongUsagePlugin(Plugin): log.info(u'SongUsage Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'SongUsage', u'1.9.3', plugin_helpers) + Plugin.__init__(self, u'SongUsage', u'1.9.4', plugin_helpers) self.weight = -4 self.icon = build_icon(u':/plugins/plugin_songusage.png') self.manager = None @@ -175,10 +175,13 @@ class SongUsagePlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('SongUsagePlugin', 'SongUsage'), - u'plural': translate('SongUsagePlugin', 'SongUsage') + u'singular': translate('SongUsagePlugin', 'SongUsage', + 'name singular'), + u'plural': translate('SongUsagePlugin', 'SongUsage', + 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('SongUsagePlugin', 'SongUsage') + u'title': translate('SongUsagePlugin', 'SongUsage', + 'container title') } diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 72fbe938b..fdbacc00c 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1809,13 +1809,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1829,17 +1829,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1859,15 +1859,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1877,122 +1882,122 @@ Version: %s <translation>Algemeen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitors</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Selekteer monitor vir uitgaande vertoning:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Vertoon as dit 'n enkel skerm is</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Applikasie Aanskakel</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Vertoon leë skerm waarskuwing</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Maak vanself die laaste diens oop</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Wys die spatsel skerm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Program Verstellings</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Vra om te stoor voordat 'n nuwe diens begin word</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Wys voorskou van volgende item in diens automaties</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Skyfie herhaal vertraging:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation>sek</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI Inligting</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI nommer:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect gebruikersnaam:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect wagwoord:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Vertoon Posisie</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Hoogte</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Wydte</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Oorskryf vertoon posisie</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Skerm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>primêre</translation> </message> @@ -3043,104 +3048,94 @@ Die inhoud enkodering is nie UTF-8 nie.</translation> <translation>Stel in As &Globale Standaard</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (standaard)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>Kies 'n tema om te redigeer.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>Kies 'n tema om uit te wis.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Uitwis Bevestiging</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Fout</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>Die standaard tema kan nie uitgewis word nie.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>Geen tema is geselekteer nie.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Stoor Tema - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Tema Uitvoer</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>Die tema was suksesvol uitgevoer.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>Tema Uitvoer het Misluk</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>Die tema kon nie uitgevoer word nie weens 'n fout.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Kies Tema Invoer Lêer</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Tema (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>Lêer is nie 'n geldige tema nie. Die inhoud enkodering is nie UTF-8 nie.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>Lêer is nie 'n geldige tema nie.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Tema Bestaan Reeds</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>'n Tema met hierdie naam bestaan alreeds. Kan dit oorskryf word?</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>Tema %s is in gebruik deur die %s mini-program.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>Tema %s is in gebruik deur die diens bestuurder.</translation> </message> @@ -3160,285 +3155,305 @@ Die inhoud enkodering is nie UTF-8 nie.</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Wis uit</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Soliede Kleur</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Gradiënt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Beeld</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Kleur:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Gradiënt:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horisontaal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertikaal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Sirkelvormig</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Beeld:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Skrif:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Grootte:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Vetgedruk</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Links</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Regs</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Middel</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Bo</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Middel</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Onder</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X posisie:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y posisie:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Wydte:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Hoogte:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Gebruik verstek ligging</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3628,12 +3643,12 @@ Die inhoud enkodering is nie UTF-8 nie.</translation> <translation><strong>Afgeleë Mini-program</strong><br/>Die afgeleë mini-program verskaf die vermoë om boodskappe na 'n lopende weergawe van OpenLP op 'n ander rekenaar te stuur deur 'n web-blaaier of deur die afgeleë PPK (API).</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Afstandbehere</translation> </message> @@ -3904,142 +3919,142 @@ Die inhoud enkodering is nie UTF-8 nie.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Lied Redigeerder</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Titel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>Alt&ernatiewe titel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>&Lirieke:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>&Vers orde:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>&Voeg by</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>R&edigeer</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>Red&igeer Alles</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Wis Uit</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Titel && Lirieke</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Skrywers</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Voeg by Lied</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>Ve&rwyder</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>&Bestuur Skrywers, Onderwerpe en Lied Boeke</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Onderwerp</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>Voeg by Lie&d</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>V&erwyder</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Lied Boek</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Boek:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Nommer:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Skrywers, Onderwerpe && Lied Boek</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>Nuwe &Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Kopiereg Informasie</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI nommer:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Kommentaar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Tema, Kopiereg Informasie && Kommentaar</translation> </message> @@ -4927,17 +4942,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Vers</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Koor</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Brug</translation> </message> @@ -4947,22 +4962,22 @@ Usually you are fine with the preselected choise.</source> <translation>Voor-Refrein</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Inleiding</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Slot</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Ander</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 29c1344ae..4b544af0f 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1820,13 +1820,13 @@ Bitte senden Sie eine E-Mail an: bugs@openlp.org mit einer auführlichen Beschre <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1840,17 +1840,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1870,15 +1870,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1888,122 +1893,122 @@ Version: %s <translation>Allgemein</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitore</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Projektionsbildschirm:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Anzeige, bei nur einem Bildschirm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Programmstart</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Warnung anzeigen, wenn die Projektion deaktiviert wurde</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Zuletzt benutzten Ablauf beim Start laden</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Zeige den Startbildschirm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Anwendungseinstellungen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Aufforderung zum Speichern, bevor ein ein neuer Ablauf gestartet wird</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Automatische Vorschau des nächsten Elementes im Ablauf</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Pause während Schleifen:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation> sek</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI-Details</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI Nummer:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect Benutzername:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect Passwort:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Position der Anzeige</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Höhe</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Position der Anzeige überschreiben</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Bildschirm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>Hauptbildschirm</translation> </message> @@ -3054,104 +3059,94 @@ Der Inhalt wurde nicht in UTF-8 kodiert.</translation> <translation>Setze als &globalen Standard</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (Standard)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>Bitte wählen Sie ein Design zum Bearbeiten aus.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>Bitte wählen Sie ein Design zum Löschen aus.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Löschen Bestätigen</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>Es ist nicht möglich das Standard Design zu entfernen.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>Sie haben kein Design ausgewählt.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Speichere Design - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Design exportiert</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>Das Design wurde erfolgreich exportiert.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>Design Export fehlgeschlagen</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>Dieses Design konnte aufgrund eines Fehlers nicht exportiert werden.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Wähle Datei für Design Import</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Design (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>Dies ist kein gültiges Design. Die Datei ist nicht in UTF-8 kodiert.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>Diese Datei beinhaltet kein gültiges Design.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Design existiert</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>Ein Design mit diesem Namen existiert bereits. Soll es überschrieben werden?</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>Design %s wird in der %s Erweiterung benutzt.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>Design %s wird in der Ablaufverwaltung benutzt.</translation> </message> @@ -3171,285 +3166,305 @@ Die Datei ist nicht in UTF-8 kodiert.</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Löschen</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Füllfarbe</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Farbverlauf</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Bild</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Farbe:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Übergang:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horizontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertikal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Radial</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Bild:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Schriftart:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Größe:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Fett</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Links</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Rechts</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Mitte</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Oben</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Mittig</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Unten</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Breite:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Höhe:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Benutze Standard Pfad</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3639,12 +3654,12 @@ Die Datei ist nicht in UTF-8 kodiert.</translation> <translation><strong>Erweiterung Fernprojektion</strong><br/>Die Erweiterung Fernprojektion ermöglicht es eine laufende Version von OpenLP von einem anderen Computer über einen Web-Browser oder über die Fernprojektions Oberfläche zu steuern.</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Fernprojektion</translation> </message> @@ -3915,109 +3930,109 @@ Die Datei ist nicht in UTF-8 kodiert.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Lied bearbeiten</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Titel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>Noten:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>Hinzufügen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Bearbeiten</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>Alles Bearbeiten</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>Löschen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Titel && Liedtext</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Autoren</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>Zum Lied &hinzufügen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>Entfe&rnen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Thema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>Zum Lied &hinzufügen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>&Entfernen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Liederbuch</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Design</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>Neues Design</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Kopierrecht Informationen</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Kommentare</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> - <translation>Design, Copyrightinformationen && Kommentare</translation> + <translation>Design, Copyright && Kommentare</translation> </message> <message> <location filename="openlp/plugins/songs/forms/editsongform.py" line="96"/> @@ -4105,27 +4120,27 @@ Die Datei ist nicht in UTF-8 kodiert.</translation> <translation>%s wurde nirgends in der Versfolge verwendet. Wollen Sie das Lied trotzdem so abspeichern?</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>Alt&ernativer Titel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>&Versfolge:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>Verwalte Autoren, Themen, Liederbücher</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Autoren, Themen && Liederbücher</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI-Nummer:</translation> </message> @@ -4140,12 +4155,12 @@ Die Datei ist nicht in UTF-8 kodiert.</translation> <translation>Dieses Thema ist bereits vorhanden.</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Buch:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Nummer:</translation> </message> @@ -4938,17 +4953,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Vers</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Refrain</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Bridge</translation> </message> @@ -4958,22 +4973,22 @@ Usually you are fine with the preselected choise.</source> <translation>Vor-Refrain</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Intro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Schluss</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Weitere</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index e7f1f6f57..72da457d4 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1674,13 +1674,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1694,17 +1694,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1724,15 +1724,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1742,122 +1747,122 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished"></translation> </message> @@ -2905,103 +2910,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> @@ -3021,285 +3016,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3489,12 +3504,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished"></translation> </message> @@ -3765,142 +3780,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation type="unfinished"></translation> </message> @@ -4788,17 +4803,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished"></translation> </message> @@ -4808,22 +4823,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 7bf01decf..473d192d0 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1811,13 +1811,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1831,17 +1831,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1861,15 +1861,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1879,122 +1884,122 @@ Version: %s <translation>General</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitors</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Select monitor for output display:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Display if a single screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Application Startup</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Show blank screen warning</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Automatically open the last service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Show the splash screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Application Settings</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Prompt to save before starting a new service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Automatically preview next item in service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Slide loop delay:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation> sec</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI Details</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect username:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect password:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Display Position</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Height</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Width</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Override display position</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>primary</translation> </message> @@ -3044,104 +3049,94 @@ The content encoding is not UTF-8.</translation> <translation>Set As &Global Default</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (default)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>You must select a theme to edit.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>You must select a theme to delete.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Delete Confirmation</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>You are unable to delete the default theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>You have not selected a theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Save Theme - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Theme Exported</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>Your theme has been successfully exported.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>Theme Export Failed</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>Your theme could not be exported due to an error.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Select Theme Import File</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Theme (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>File is not a valid theme. The content encoding is not UTF-8.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>File is not a valid theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Theme Exists</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>A theme with this name already exists. Would you like to overwrite it?</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>Theme %s is used in the %s plugin.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>Theme %s is used by the service manager.</translation> </message> @@ -3161,285 +3156,305 @@ The content encoding is not UTF-8.</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Delete</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Solid Colour</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Gradient</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Image</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Colour:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Gradient:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horizontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertical</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Circular</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Image:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Font:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Size:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Bold</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Left</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Right</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Centre</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Top</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Middle</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Bottom</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Width:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Height:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Use default location</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3629,12 +3644,12 @@ The content encoding is not UTF-8.</translation> <translation><strong>Remote Plugin</strong><br />The remote plugin provides the ability to send messages to a running version of OpenLP on a different computer via a web browser or through the remote API.</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Remotes</translation> </message> @@ -3905,142 +3920,142 @@ The content encoding is not UTF-8.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Song Editor</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Title:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>Alt&ernate title:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>&Lyrics:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>&Verse order:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>&Add</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Edit</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>Ed&it All</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Delete</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Title && Lyrics</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Authors</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Add to Song</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>&Remove</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>&Manage Authors, Topics, Song Books</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Topic</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>A&dd to Song</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>R&emove</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Song Book</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Book:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Number:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Authors, Topics && Song Book</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Theme</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>New &Theme</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Copyright Information</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Comments</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Theme, Copyright Info && Comments</translation> </message> @@ -4928,17 +4943,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Verse</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Chorus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Bridge</translation> </message> @@ -4948,22 +4963,22 @@ Usually you are fine with the preselected choise.</source> <translation>Pre-Chorus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Intro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Ending</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Other</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index 24aab6f39..fe24a3670 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -5,7 +5,7 @@ <message> <location filename="openlp/plugins/alerts/forms/alertform.py" line="174"/> <source>No Parameter found</source> - <translation type="unfinished"></translation> + <translation>No Parameter found</translation> </message> <message> <location filename="openlp/plugins/alerts/forms/alertform.py" line="174"/> @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1820,13 +1820,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1840,17 +1840,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1870,15 +1870,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation>File Rename</translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation>New File Name:</translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1888,122 +1893,122 @@ Version: %s <translation>General</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitors</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Select monitor for output display:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Display if a single screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Application Startup</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Show blank screen warning</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Automatically open the last service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Show the splash screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Application Settings</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI Details</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect username:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect password:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Display Position</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Height</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Width</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Override display position</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Screen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>primary</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Prompt to save before starting a new service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Automatically preview next item in service</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Slide loop delay:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation> sec</translation> </message> @@ -3054,104 +3059,94 @@ The content encoding is not UTF-8.</translation> <translation>Set As &Global Default</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (default)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>You must select a theme to edit.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>You must select a theme to delete.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Delete Confirmation</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>You are unable to delete the default theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>You have not selected a theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Save Theme - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Theme Exported</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>Your theme has been successfully exported.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>Theme Export Failed</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>Your theme could not be exported due to an error.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Select Theme Import File</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Theme (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>File is not a valid theme. The content encoding is not UTF-8.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>File is not a valid theme.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Theme Exists</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>A theme with this name already exists. Would you like to overwrite it?</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>Theme %s is used in the %s plugin.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>Theme %s is used by the service manager.</translation> </message> @@ -3171,285 +3166,305 @@ The content encoding is not UTF-8.</translation> <translation>&Export Theme</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> - <translation>Delete %s theme?</translation> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Delete</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation>Theme Wizard</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation>Welcome to the Theme Wizard</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation>Set Up Background</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation>Set up your theme's background according to the parameters below.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation>Background type:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Solid Colour</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Gradient</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Image</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Color:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Gradient:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horizontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertical</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Circular</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation>Top Left - Bottom Right</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation>Bottom Left - Top Right</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Image:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation>Main Area Font Details</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation>Define the font and display characteristics for the Display text</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Font:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Size:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation>(%d lines per slide)</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation>Line Spacing:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation>&Outline:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation>&Shadow:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Bold</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation>Italic</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation>Footer Area Font Details</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation>Define the font and display characteristics for the Footer text</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation>Text Formatting Details</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation>Allows additional display formatting information to be defined</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation>Horizontal Align:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Left</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Right</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Centre</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Top</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Middle</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Bottom</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Width:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Height:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Use default location</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> @@ -3639,12 +3654,12 @@ The content encoding is not UTF-8.</translation> <translation><strong>Remote Plugin</strong><br />The remote plugin provides the ability to send messages to a running version of OpenLP on a different computer via a web browser or through the remote API.</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Remotes</translation> </message> @@ -3915,117 +3930,117 @@ The content encoding is not UTF-8.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Song Editor</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Title:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>&Lyrics:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>&Add</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Edit</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>Ed&it All</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Delete</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Title && Lyrics</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Authors</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Add to Song</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>&Remove</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>&Manage Authors, Topics, Song Books</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Topic</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>A&dd to Song</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>R&emove</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Song Book</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Authors, Topics && Song Book</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Theme</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>New &Theme</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Copyright Information</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Comments</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Theme, Copyright Info && Comments</translation> </message> @@ -4125,27 +4140,27 @@ The content encoding is not UTF-8.</translation> <translation>This song book does not exist, do you want to add it?</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>Alt&ernate title:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>&Verse order:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Book:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Number:</translation> </message> @@ -4938,17 +4953,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Verse</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Chorus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Bridge</translation> </message> @@ -4958,22 +4973,22 @@ Usually you are fine with the preselected choise.</source> <translation>Pre-Chorus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Intro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Ending</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Other</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index a14dc033c..07fc5678b 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1674,13 +1674,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1694,17 +1694,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1724,15 +1724,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1742,122 +1747,122 @@ Version: %s <translation type="unfinished">General</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished">Monitores</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished">Seleccionar monitor para visualizar la salida:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished">Inicio de la Aplicación</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished">Mostrar advertencia de pantalla en blanco</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished">Abrir automáticamente el último servicio</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished">Mostrar pantalla de bienvenida</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished">Configuración del Programa</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished">Detalles de CCLI</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished">Pantalla</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished">primario</translation> </message> @@ -2905,103 +2910,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished">Error</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished">Guardar Tema - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished">Seleccione el Archivo de Tema a Importar</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished">Ya existe el Tema</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> @@ -3021,285 +3016,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Color Sólido</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Gradiente</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Imagen</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horizontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertical</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Circular</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Imagen:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Fuente:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Tamaño:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Negrita</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Izquierda</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Derecha</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Centro</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Superior</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Medio</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Inferior</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Ancho:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Altura:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3489,12 +3504,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Remotas</translation> </message> @@ -3765,142 +3780,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished">Editor de Canción</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished">&Editar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished">&Eliminar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished">Título && Letra</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished">Autores</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished">&Agregar a Canción</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished">&Quitar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished">Categoría</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation type="unfinished">A&gregar a Canción</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished">&Quitar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished">Himnario</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished">Libro:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished">Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation type="unfinished">Información de Derechos de Autor</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished">Comentarios</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation type="unfinished">Tema, Derechos de Autor && Comentarios</translation> </message> @@ -4788,17 +4803,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished">Verso</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished">Coro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished">Puente</translation> </message> @@ -4808,22 +4823,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished">Pre-Coro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished">Intro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished">Final</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished">Otro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index cc05aefdf..f9948ec1a 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -5,24 +5,26 @@ <message> <location filename="openlp/plugins/alerts/forms/alertform.py" line="174"/> <source>No Parameter found</source> - <translation type="unfinished"></translation> + <translation>Ühtegi parameetrit ei leitud</translation> </message> <message> <location filename="openlp/plugins/alerts/forms/alertform.py" line="174"/> <source>You have not entered a parameter to be replaced. Do you want to continue anyway?</source> - <translation type="unfinished"></translation> + <translation>Sa ei ole sisestanud parameetrit, mida asendada. +Kas tahad sellegipoolest jätkata?</translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> - <translation type="unfinished"></translation> + <translation>Ühtegi kohahoidjat ei leitud</translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> - <translation type="unfinished"></translation> + <translation>Teate tekst ei sisalda '<>' märke. +Kas tahad sellegipoolest jätkata?</translation> </message> </context> <context> @@ -45,7 +47,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/alerts/alertsplugin.py" line="117"/> <source>Alert</source> - <translation type="unfinished"></translation> + <translation>Teade</translation> </message> <message> <location filename="openlp/plugins/alerts/alertsplugin.py" line="122"/> @@ -108,7 +110,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/alerts/forms/alertdialog.py" line="130"/> <source>&Parameter:</source> - <translation type="unfinished"></translation> + <translation>&Parameeter:</translation> </message> </context> <context> @@ -202,7 +204,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/lib/mediaitem.py" line="628"/> <source>You cannot combine single and second bible verses. Do you want to delete your search results and start a new search?</source> - <translation type="unfinished"></translation> + <translation>Ühe- ja kahekeelseid piiblisalme pole võimalik kombineerida. Kas sa tahad kustutada otsingutulemused ja alustada uut otsingut?</translation> </message> </context> <context> @@ -230,22 +232,22 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="139"/> <source>Import</source> - <translation type="unfinished"></translation> + <translation>Impordi</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="140"/> <source>Import a Bible</source> - <translation type="unfinished"></translation> + <translation>Piibli importimine</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="145"/> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lisa</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="146"/> <source>Add a new Bible</source> - <translation type="unfinished"></translation> + <translation>Uue Piibli lisamine</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="151"/> @@ -255,7 +257,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="152"/> <source>Edit the selected Bible</source> - <translation type="unfinished"></translation> + <translation>Valitud Piibli muutmine</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="157"/> @@ -265,7 +267,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="158"/> <source>Delete the selected Bible</source> - <translation type="unfinished"></translation> + <translation>Valitud Piibli kustutamine</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="163"/> @@ -275,7 +277,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="164"/> <source>Preview the selected Bible</source> - <translation type="unfinished"></translation> + <translation>Valitud Piibli eelvaade</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="169"/> @@ -285,17 +287,17 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="170"/> <source>Send the selected Bible live</source> - <translation type="unfinished"></translation> + <translation>Valitud Piibli saatmine ekraanile</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="175"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Teenistus</translation> </message> <message> <location filename="openlp/plugins/bibles/bibleplugin.py" line="176"/> <source>Add the selected Bible to the service</source> - <translation type="unfinished"></translation> + <translation>Valitud Piibli lisamine teenistusse</translation> </message> </context> <context> @@ -308,7 +310,7 @@ Do want to continue anyway?</source> <message> <location filename="openlp/plugins/bibles/lib/db.py" line="357"/> <source>The book you requested could not be found in this Bible. Please check your spelling and that this is a complete Bible not just one testament.</source> - <translation type="unfinished"></translation> + <translation>Nõutud raamatud ei leitud sellest Piiblist. Kontrolli õigekirja ning kas tegemist on terve Piibli või ühe testamendiga.</translation> </message> </context> <context> @@ -328,23 +330,32 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse</source> - <translation type="unfinished"></translation> + <translation>Sinu kirjakohaviide on vigane või pole OpenLP poolt toetatud vormingus. Veendu, et viide vastab ühele järgnevatest mustritest: + +Raamat peatükk +Raamat peatükk-peatükk +Raamat peatükk:salm-salm +Raamat peatükk:salm-salm,salm-salm +Raamat peatükk:salm-salm,peatükk:salm-salm +Raamat peatükk:salm-peatükk:salm +</translation> </message> <message> <location filename="openlp/plugins/bibles/lib/manager.py" line="301"/> <source>Web Bible cannot be used</source> - <translation type="unfinished"></translation> + <translation>Veebipiiblit pole võimalik kasutada</translation> </message> <message> <location filename="openlp/plugins/bibles/lib/manager.py" line="301"/> <source>Text Search is not available with Web Bibles.</source> - <translation type="unfinished"></translation> + <translation>Tekstiotsing veebipiiblist pole võimalik.</translation> </message> <message> <location filename="openlp/plugins/bibles/lib/manager.py" line="310"/> <source>You did not enter a search keyword. You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them.</source> - <translation type="unfinished"></translation> + <translation>Sa ei sisestanud otsingusõna. +Sa võid eraldada võtmesõnad tühikuga, et otsida neid kõiki, või eraldada need komaga, et otsitaks ühte neist.</translation> </message> </context> <context> @@ -419,7 +430,7 @@ Muudatused ei rakendu juba teenistusesse lisatud salmidele.</translation> <message> <location filename="openlp/plugins/bibles/lib/biblestab.py" line="179"/> <source>Display second Bible verses</source> - <translation type="unfinished"></translation> + <translation>Piiblit kuvatakse kahes keeles</translation> </message> </context> <context> @@ -690,18 +701,19 @@ Muudatused ei rakendu juba teenistusesse lisatud salmidele.</translation> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="279"/> <source>Open openlp.org 1.x Bible</source> - <translation type="unfinished"></translation> + <translation>Ava openlp.org 1.x Piibel</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="453"/> <source>Starting Registering bible...</source> - <translation type="unfinished"></translation> + <translation>Piibli registreerimise alustamine...</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="525"/> <source>Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required.</source> - <translation type="unfinished"></translation> + <translation>Piibel on registreeritud. Pane tähele, et salmid laaditakse alla +vajadusel, seetõttu on vajalik internetiühendus.</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="374"/> @@ -711,17 +723,17 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="418"/> <source>Permissions:</source> - <translation type="unfinished"></translation> + <translation>Õigused:</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="263"/> <source>CSV File</source> - <translation type="unfinished"></translation> + <translation>CSV fail</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="279"/> <source>openlp.org 1.x bible</source> - <translation type="unfinished"></translation> + <translation>openlp.org 1.x Piibel</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportform.py" line="427"/> @@ -731,7 +743,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="392"/> <source>Bibleserver</source> - <translation type="unfinished"></translation> + <translation>Piibliserver</translation> </message> <message> <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="428"/> @@ -844,7 +856,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/bibles/lib/mediaitem.py" line="307"/> <source>Second:</source> - <translation type="unfinished"></translation> + <translation>Teine:</translation> </message> </context> <context> @@ -868,7 +880,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/bibles/lib/osis.py" line="104"/> <source>Detecting encoding (this may take a few minutes)...</source> - <translation type="unfinished"></translation> + <translation>Kooditabeli tuvastamine (see võib võtta mõne minuti)...</translation> </message> <message> <location filename="openlp/plugins/bibles/lib/osis.py" line="143"/> @@ -1023,37 +1035,37 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/custom/customplugin.py" line="108"/> <source>Customs</source> - <translation type="unfinished"></translation> + <translation>Kohandatud</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="117"/> <source>Import</source> - <translation type="unfinished"></translation> + <translation>Impordi</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="118"/> <source>Import a Custom</source> - <translation type="unfinished"></translation> + <translation>Impordi kohandatud</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="123"/> <source>Load</source> - <translation type="unfinished"></translation> + <translation>Laadi</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="124"/> <source>Load a new Custom</source> - <translation type="unfinished"></translation> + <translation>Laadi uus kohandatud</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="129"/> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lisa</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="130"/> <source>Add a new Custom</source> - <translation type="unfinished"></translation> + <translation>Lisa uus kohandatud</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="135"/> @@ -1063,7 +1075,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/custom/customplugin.py" line="136"/> <source>Edit the selected Custom</source> - <translation type="unfinished"></translation> + <translation>Muuda valitud kohandatut</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="141"/> @@ -1073,7 +1085,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/custom/customplugin.py" line="142"/> <source>Delete the selected Custom</source> - <translation type="unfinished"></translation> + <translation>Kustuta valitud kohandatud</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="147"/> @@ -1083,7 +1095,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/custom/customplugin.py" line="148"/> <source>Preview the selected Custom</source> - <translation type="unfinished"></translation> + <translation>Valitud kohandatu eelvaade</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="153"/> @@ -1093,17 +1105,17 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/custom/customplugin.py" line="154"/> <source>Send the selected Custom live</source> - <translation type="unfinished"></translation> + <translation>Valitud kohandatu saatmine ekraanile</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="159"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Teenistus</translation> </message> <message> <location filename="openlp/plugins/custom/customplugin.py" line="160"/> <source>Add the selected Custom to the service</source> - <translation type="unfinished"></translation> + <translation>Valitud kohandatud slaidi lisamine teenistusse</translation> </message> </context> <context> @@ -1121,27 +1133,27 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/images/imageplugin.py" line="72"/> <source>Images</source> - <translation type="unfinished"></translation> + <translation>Pildid</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="77"/> <source>Load</source> - <translation type="unfinished"></translation> + <translation>Laadi</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="78"/> <source>Load a new Image</source> - <translation type="unfinished"></translation> + <translation>Uue pildi laadimine</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="83"/> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lisa</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="84"/> <source>Add a new Image</source> - <translation type="unfinished"></translation> + <translation>Uue pildi lisamine</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="89"/> @@ -1151,7 +1163,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/images/imageplugin.py" line="90"/> <source>Edit the selected Image</source> - <translation type="unfinished"></translation> + <translation>Valitud pildi muutmine</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="95"/> @@ -1161,7 +1173,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/images/imageplugin.py" line="96"/> <source>Delete the selected Image</source> - <translation type="unfinished"></translation> + <translation>Valitud pildi kustutamine</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="101"/> @@ -1171,7 +1183,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/images/imageplugin.py" line="102"/> <source>Preview the selected Image</source> - <translation type="unfinished"></translation> + <translation>Valitud pildi eelvaatlemine</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="107"/> @@ -1181,17 +1193,17 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/images/imageplugin.py" line="108"/> <source>Send the selected Image live</source> - <translation type="unfinished"></translation> + <translation>Valitud pildi saatmine ekraanile</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="113"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Teenistus</translation> </message> <message> <location filename="openlp/plugins/images/imageplugin.py" line="114"/> <source>Add the selected Image to the service</source> - <translation type="unfinished"></translation> + <translation>Valitud pildi lisamine teenistusele</translation> </message> </context> <context> @@ -1257,22 +1269,22 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="106"/> <source>Load</source> - <translation type="unfinished"></translation> + <translation>Laadi</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="107"/> <source>Load a new Media</source> - <translation type="unfinished"></translation> + <translation>Uue meedia laadimine</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="112"/> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lisa</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="113"/> <source>Add a new Media</source> - <translation type="unfinished"></translation> + <translation>Uue meedia lisamine</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="118"/> @@ -1282,7 +1294,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="119"/> <source>Edit the selected Media</source> - <translation type="unfinished"></translation> + <translation>Valitud meedia muutmine</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="124"/> @@ -1292,7 +1304,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="125"/> <source>Delete the selected Media</source> - <translation type="unfinished"></translation> + <translation>Valitud meedia kustutamine</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="130"/> @@ -1302,7 +1314,7 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="131"/> <source>Preview the selected Media</source> - <translation type="unfinished"></translation> + <translation>Valitud meedia eelvaatlus</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="136"/> @@ -1312,17 +1324,17 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="137"/> <source>Send the selected Media live</source> - <translation type="unfinished"></translation> + <translation>Valitud meedia saatmine ekraanile</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="142"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Teenistus</translation> </message> <message> <location filename="openlp/plugins/media/mediaplugin.py" line="143"/> <source>Add the selected Media to the service</source> - <translation type="unfinished"></translation> + <translation>Valitud meedia lisamine teenistusse.</translation> </message> </context> <context> @@ -1363,12 +1375,12 @@ demand and thus an internet connection is required.</source> <message> <location filename="openlp/plugins/media/lib/mediatab.py" line="61"/> <source>Media Display</source> - <translation type="unfinished"></translation> + <translation>Meediakuva</translation> </message> <message> <location filename="openlp/plugins/media/lib/mediatab.py" line="63"/> <source>Use Phonon for video playback</source> - <translation type="unfinished"></translation> + <translation>Phononi kasutamine video esitamiseks</translation> </message> </context> <context> @@ -1749,7 +1761,54 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free.</source> - <translation type="unfinished"></translation> + <translation>Projekti juht +Raoul "superfly" Snyman + +Arendajad +Tim "TRB143" Bentley +Jonathan "gushie" Corwin +Michael "cocooncrash" Gorven +Scott "sguerrieri" Guerrieri +Raoul "superfly" Snyman +Martin "mijiti" Thompson +Jon "Meths" Tibble + +Abilised +Meinert "m2j" Jordan +Andreas "googol" Preikschat +Christian "crichter" Richter +Philip "Phill" Ridout +Maikel Stuivenberg +Carsten "catini" Tingaard +Frode "frodus" Woldsund + +Testijad +Philip "Phill" Ridout +Wesley "wrst" Stout (lead) + +Pakendajad +Thomas "tabthorpe" Abthorpe (FreeBSD) +Tim "TRB143" Bentley (Fedora) +Michael "cocooncrash" Gorven (Ubuntu) +Matthias "matthub" Hub (Mac OS X) +Raoul "superfly" Snyman (Windows, Ubuntu) + +Kasutatud tehnoloogiad +Python: http://www.python.org/ +Qt4: http://qt.nokia.com/ +PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro +Oxygeni ikoonid: http://oxygen-icons.org/ + +Lõpptänu +"Sest nõnda on Jumal maailma armastanud, +et ta oma ainusündinud Poja on andnud, +et ükski, kes temasse usub, ei hukkuks, +vaid et tal oleks igavene elu. -- Johannese 3:16 + +Lõpuks suurim tänu kuulub Jumalale meie Isale, +kes saatis oma Poja ristile surema, et vabastada +meid patust. Me anname selle tarkvara sulle +tasuta, sest Tema on teinud meid vabaks.</translation> </message> </context> <context> @@ -1777,12 +1836,12 @@ Final Credit <message> <location filename="openlp/core/ui/advancedtab.py" line="149"/> <source>Double-click to send items straight to live</source> - <translation type="unfinished"></translation> + <translation>Topeltklõps otse ekraanile saatmiseks</translation> </message> <message> <location filename="openlp/core/ui/advancedtab.py" line="151"/> <source>Expand new service items on creation</source> - <translation type="unfinished"></translation> + <translation>Uued teenistuse kirjed on loomisel laiendatud</translation> </message> </context> <context> @@ -1800,24 +1859,25 @@ Final Credit <message> <location filename="openlp/core/ui/exceptiondialog.py" line="98"/> <source>Send E-Mail</source> - <translation type="unfinished"></translation> + <translation>Saada e-kiri</translation> </message> <message> <location filename="openlp/core/ui/exceptiondialog.py" line="100"/> <source>Save to File</source> - <translation type="unfinished"></translation> + <translation>Salvesta faili</translation> </message> </context> <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> - <translation type="unfinished"></translation> + <translation>Platvorm: %s +</translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1828,20 +1888,29 @@ Version: %s --- Library Versions --- %s </source> - <translation type="unfinished"></translation> + <translation>**OpenLP vearaport** +versioon: %s + +--- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s +</translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> - <translation type="unfinished"></translation> + <translation>Vearaporti salvestamine</translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> - <translation type="unfinished"></translation> + <translation>Tekstifailid (*.txt *.log *.text)</translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1855,19 +1924,36 @@ Version: %s --- Library Versions --- %s </source> - <translation type="unfinished"></translation> + <translation>*OpenLP vearaport* +versioon: %s + +--- Palun sisesta vea kirjeldus järgmistele ridadele. --- + + +--- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s +</translation> </message> </context> <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> - <translation type="unfinished"></translation> + <translation>Faili ümbernimetamine</translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> + <translation>Uue faili nimi:</translation> + </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> <translation type="unfinished"></translation> </message> </context> @@ -1879,122 +1965,122 @@ Version: %s <translation>Üldine</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitorid</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Vali väljundkuva ekraan:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Kuvatakse, kui on ainult üks ekraan</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Rakenduse käivitumine</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Kuvatakse tühja ekraani hoiatust</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Automaatselt avatakse viimane teenistus</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Käivitumisel kuvatakse logo</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Rakenduse sätted</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Enne uue teenistuse alustamist küsitakse, kas salvestada avatud teenistus</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Järgmise teenistuse elemendi automaatne eelvaade</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Slaidi näitamise pikkus korduses:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation>sek</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI andmed</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelecti kasutajanimi:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelecti parool:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Kuva asukoht</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Kõrgus</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Laius</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Kuva asukoht määratakse jõuga</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Ekraan</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>peamine</translation> </message> @@ -2432,7 +2518,7 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.</translat <message> <location filename="openlp/core/ui/mainwindow.py" line="430"/> <source>Configure &Shortcuts...</source> - <translation type="unfinished"></translation> + <translation>&Kiirklahvide seadistamine...</translation> </message> </context> <context> @@ -2771,22 +2857,22 @@ Sisu ei ole UTF-8 kodeeringus.</translation> <message> <location filename="openlp/core/ui/servicemanager.py" line="205"/> <source>&Expand all</source> - <translation type="unfinished"></translation> + <translation type="unfinished">&Laienda kõik</translation> </message> <message> <location filename="openlp/core/ui/servicemanager.py" line="205"/> <source>Expand all the service items.</source> - <translation type="unfinished"></translation> + <translation>Kõigi teenistuse kirjete laiendamine.</translation> </message> <message> <location filename="openlp/core/ui/servicemanager.py" line="211"/> <source>&Collapse all</source> - <translation type="unfinished"></translation> + <translation>&Ahenda kõik</translation> </message> <message> <location filename="openlp/core/ui/servicemanager.py" line="211"/> <source>Collapse all the service items.</source> - <translation type="unfinished"></translation> + <translation>Kõigi teenistuse kirjete ahendamine.</translation> </message> </context> <context> @@ -2810,42 +2896,42 @@ Sisu ei ole UTF-8 kodeeringus.</translation> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="102"/> <source>Customize Shortcuts</source> - <translation type="unfinished"></translation> + <translation>Kiirklahvide kohandamine</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="104"/> <source>Action</source> - <translation type="unfinished"></translation> + <translation>Tegevus</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="104"/> <source>Shortcut</source> - <translation type="unfinished"></translation> + <translation>Kiirklahv</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="108"/> <source>Default: %s</source> - <translation type="unfinished"></translation> + <translation>Vaikimisi: %s</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="110"/> <source>Custom:</source> - <translation type="unfinished"></translation> + <translation>Kohandatud:</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistdialog.py" line="112"/> <source>None</source> - <translation type="unfinished"></translation> + <translation>Pole</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistform.py" line="76"/> <source>Duplicate Shortcut</source> - <translation type="unfinished"></translation> + <translation>Dubleeriv kiirklahv</translation> </message> <message> <location filename="openlp/core/ui/shortcutlistform.py" line="76"/> <source>The shortcut "%s" is already assigned to another action, please use a different shortcut.</source> - <translation type="unfinished"></translation> + <translation>Kiirklahv "%s" on juba seotud teise tegevusega, kasuta mingit muud kiirklahvi.</translation> </message> </context> <context> @@ -2918,17 +3004,17 @@ Sisu ei ole UTF-8 kodeeringus.</translation> <message> <location filename="openlp/core/ui/slidecontroller.py" line="181"/> <source>Blank Screen</source> - <translation type="unfinished"></translation> + <translation>Ekraani tühjendamine</translation> </message> <message> <location filename="openlp/core/ui/slidecontroller.py" line="188"/> <source>Blank to Theme</source> - <translation type="unfinished"></translation> + <translation>Teematausta näitamine</translation> </message> <message> <location filename="openlp/core/ui/slidecontroller.py" line="196"/> <source>Show Desktop</source> - <translation type="unfinished"></translation> + <translation>Töölaua näitamine</translation> </message> </context> <context> @@ -2959,22 +3045,22 @@ Sisu ei ole UTF-8 kodeeringus.</translation> <message> <location filename="openlp/core/ui/themeform.py" line="586"/> <source>Theme Name Missing</source> - <translation type="unfinished"></translation> + <translation>Puudub teema nimi</translation> </message> <message> <location filename="openlp/core/ui/themeform.py" line="586"/> <source>There is no name for this theme. Please enter one.</source> - <translation type="unfinished"></translation> + <translation>Teemal ei ole nime. Palun sisesta nimi.</translation> </message> <message> <location filename="openlp/core/ui/themeform.py" line="595"/> <source>Theme Name Invalid</source> - <translation type="unfinished"></translation> + <translation>Sobimatu teema nimi</translation> </message> <message> <location filename="openlp/core/ui/themeform.py" line="595"/> <source>Invalid theme name. Please enter one.</source> - <translation type="unfinished"></translation> + <translation>Teema nimi pole sobiv. Palun sisesta sobiv nimi.</translation> </message> </context> <context> @@ -3045,402 +3131,412 @@ Sisu ei ole UTF-8 kodeeringus.</translation> <translation>Määra &globaalseks vaikeväärtuseks</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (vaikimisi)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>Pead valima kujunduse, mida muuta.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>Pead valima kujunduse, mida tahad kustutada.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Kustutamise kinnitus</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Viga</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>Vaikimisi kujundust pole võimalik kustutada.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>Kujundust %s kasutatakse pluginas %s.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>Teenistuse halduri nähtavuse ümberlülitamine.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>Sa ei ole kujundust valinud.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Salvesta kujundus - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Kujundus eksporditud</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>Sinu kujunduse on edukalt eksporditud.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>Kujunduse eksportimine nurjus</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>Sinu kujundust polnud võimalik eksportida, kuna esines viga.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Importimiseks kujunduse faili valimine</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Kujundus (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>See fail ei ole korrektne kujundus. Sisu kodeering ei ole UTF-8.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>See fail ei ole sobilik kujundus.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Kujundus on juba olemas</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>Sellenimeline kujundus on juba olemas. Kas tahad selle üle kirjutada?</translation> </message> <message> <location filename="openlp/core/ui/thememanager.py" line="100"/> <source>&Copy Theme</source> - <translation type="unfinished"></translation> + <translation>&Kopeeri teemat</translation> </message> <message> <location filename="openlp/core/ui/thememanager.py" line="103"/> <source>&Rename Theme</source> - <translation type="unfinished"></translation> + <translation>&Nimeta teema ümber</translation> </message> <message> <location filename="openlp/core/ui/thememanager.py" line="114"/> <source>&Export Theme</source> + <translation>&Ekspordi teema</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Kustuta</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> - <translation type="unfinished"></translation> + <translation>Teemanõustaja</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> - <translation type="unfinished"></translation> + <translation>Tere tulemast teemanõustajasse</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> - <translation type="unfinished"></translation> + <translation>See nõustaja aitab luua ja muuda kujundusi. Klõpsa edasi nupul, et seda alustada tausta määramisest.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> - <translation type="unfinished"></translation> + <translation>Tausta määramine</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> - <translation type="unfinished"></translation> + <translation>Määra kujunduse taust, kasutades järgnevaid parameetreid.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> - <translation type="unfinished"></translation> + <translation>Tausta liik:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Ühtlane värv</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Üleminek</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Pilt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Värvus:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Üleminek:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horisontaalne</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertikaalne</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> - <translation type="unfinished">Ümmargune</translation> + <translation>Radiaalne</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> - <translation type="unfinished"></translation> + <translation>Loodest kagusse</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> - <translation type="unfinished"></translation> + <translation>Edelast kirdesse</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Pilt:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> - <translation type="unfinished"></translation> + <translation>Peamise kirja üksikasjad</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> - <translation type="unfinished"></translation> + <translation>Määra font ja teised kuvatava teksti omadused</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Kirjastiil:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Suurus:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> - <translation type="unfinished"></translation> + <translation>(%d rida slaidil)</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> - <translation type="unfinished"></translation> + <translation>Reavahe:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> - <translation type="unfinished"></translation> + <translation>&Kontuurjoon:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Rasvane</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Vasakul</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Paremal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Keskel</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Üleval</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Keskel</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">All</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X-asukoht:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y-asukoht:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Laius:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Kõrgus:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Vaikimisi asukoht</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3513,7 +3609,7 @@ Sisu kodeering ei ole UTF-8.</translation> <message> <location filename="openlp/plugins/presentations/presentationplugin.py" line="165"/> <source>Load</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Laadi</translation> </message> <message> <location filename="openlp/plugins/presentations/presentationplugin.py" line="166"/> @@ -3553,7 +3649,7 @@ Sisu kodeering ei ole UTF-8.</translation> <message> <location filename="openlp/plugins/presentations/presentationplugin.py" line="189"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Teenistus</translation> </message> <message> <location filename="openlp/plugins/presentations/presentationplugin.py" line="190"/> @@ -3630,12 +3726,12 @@ Sisu kodeering ei ole UTF-8.</translation> <translation><b>Kaugjuhtimisplugin</b><br>See plugin võimaldab töötavale openlp programmile teadete saatmise teisest arvutist veebilehitseja või mõne muu rakenduse kaudu.<br>Selle peamine rakendus on teadete saatmine lastehoiust.</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Kaugjuhtimine</translation> </message> @@ -3802,7 +3898,7 @@ Sisu kodeering ei ole UTF-8.</translation> <message> <location filename="openlp/plugins/songs/songsplugin.py" line="226"/> <source>Add</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lisa</translation> </message> <message> <location filename="openlp/plugins/songs/songsplugin.py" line="227"/> @@ -3852,7 +3948,7 @@ Sisu kodeering ei ole UTF-8.</translation> <message> <location filename="openlp/plugins/songs/songsplugin.py" line="256"/> <source>Service</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Teenistus</translation> </message> <message> <location filename="openlp/plugins/songs/songsplugin.py" line="257"/> @@ -3906,142 +4002,142 @@ Sisu kodeering ei ole UTF-8.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Lauluredaktor</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Pealkiri:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>&Alternatiivne pealkiri:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>&Sõnad:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>&Salmide järjekord:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>&Lisa</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Muuda</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>Muuda &kõiki</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Kustuta</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Pealkiri && laulusõnad</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Autorid</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Lisa laulule</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>&Eemalda</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>&Autorite, teemade ja laulikute haldamine</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Teema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>L&isa laulule</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>&Eemalda</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Laulik</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Book:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Number:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Autorid, teemad && laulik</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Kujundus</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>Uus &kujundus</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Autoriõiguse andmed</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI number:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Kommentaarid</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Kujundus, autoriõigus && kommentaarid</translation> </message> @@ -4929,17 +5025,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Salm</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Refrään</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Vahemäng</translation> </message> @@ -4949,24 +5045,24 @@ Usually you are fine with the preselected choise.</source> <translation>Eelrefrään</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Sissejuhatus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Lõpetus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Muu</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> - <translation type="unfinished"></translation> + <translation>Eelrefrään</translation> </message> </context> </TS> diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 857f1f912..ff559b636 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation>Nincs megadva a cserélendő paraméter. Folytatható?</translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation>Nem található a helyjelölő</translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation>A figyelmeztető szöveg nem tartalmaz „<>” karaktereket. @@ -1689,13 +1689,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1709,17 +1709,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1739,15 +1739,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation>Fájl átnevezése</translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation>Új fájl neve:</translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1757,122 +1762,122 @@ Version: %s <translation>Általános</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitorok</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Válaszd ki a vetítési képernyőt:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation>Megjelenítés egy képernyő esetén</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Alkalmazás indítása</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Figyelmeztetés megjelenítése a fekete képernyőről</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Utolsó szolgálat automatikus megnyitása</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Indító képernyő megjelenítése</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Alkalmazás beállítások</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Rákérdezés mentésre új szolgálat kezdése előtt</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Következő elem automatikus előnézete a szolgálatban</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Időzített diák késleltetése:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation> mp</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>CCLI részletek</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI szám:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect felhasználói név:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect jelszó:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Megjelenítés pozíciója</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Magasság</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Szélesség</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Megjelenítési pozíció felülírása</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Képernyő</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>elsődleges</translation> </message> @@ -2923,104 +2928,94 @@ A tartalom kódolása nem UTF-8.</translation> <translation>Beállítás &globális alapértelmezetté</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation>%s (alapértelmezett)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation>Ki kell választani témát a szerkesztéshez.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation>Ki kell választani témát a törléshez.</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation>Törlés megerősítése</translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Hiba</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation>Az alapértelmezett témát nem lehet törölni.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>Nincs kiválasztva egy téma sem.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Téma mentése – (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation>Téma exportálva</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation>A téma sikeresen exportálásra került.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation>A téma exportálása nem sikerült</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>A témát nem sikerült exportálni egy hiba miatt.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Importálandó téma fájl kiválasztása</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation>Témák (*.*)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>Nem érvényes témafájl. A tartalom kódolása nem UTF-8.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>Nem érvényes témafájl.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>A téma már létezik</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation>Egy ilyen nevű téma már létezik. Szeretnéd felülírni?</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation>A(z) %s témát a(z) %s bővítmény használja.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation>A(z) %s témát a szolgálatkezelő használja.</translation> </message> @@ -3040,285 +3035,305 @@ A tartalom kódolása nem UTF-8.</translation> <translation>Téma e&xportálása</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> - <translation>Törölhető ez a téma: %s?</translation> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Törlés</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> + <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation>Téma tündér</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation>Üdvözlet a téma tündérben</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation>A tündérrel témákat lehet létrehozni és módosítani. Az alább található Tovább gombra való kattintással indítható a folyamat első lépése a háttér beállításával.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation>Háttér beállítása</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation>A téma háttere az alábbi paraméterekkel állítható be.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation>Háttér típusa:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation>Homogén szín</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation>Színátmenet</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation>Kép</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation>Szín:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation>Színátmenet:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation>Vízszintes</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation>Függőleges</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation>Körkörös</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation>Bal felső sarokból jobb alsó sarokba</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation>Bal alső sarokbó jobb felső sarokba</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation>Kép:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation>Fő tartalom betűkészlet jellemzői</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation>A fő szöveg betűkészlete és a megjelenési tulajdonságai</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation>Betűkészlet:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation>Méret:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation>(%d sor diánként)</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation>Sorköz:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation>&Körvonal:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation>&Árnyék:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation>Félkövér</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation>Dőlt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation>Lábléc betűkészlet jellemzői</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation>A lábléc szöveg betűkészlete és a megjelenési tulajdonságai</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation>Szövegformázás jellemzői</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation>További megjelenési formázások</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation>Vízszintes igazítás:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation>Balra zárt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation>Jobbra zárt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation>Középre igazított</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation>Függőleges igazítás:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation>Felülre</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation>Középre</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation>Alulra</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation>Átmenetek</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation>Pozíciók</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation>A fő szöveg és a lábléc helyzetének mozgatása.</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation>&Fő szöveg</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation>&Alapértelmezett helyen</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation>X pozíció:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation>Y pozíció:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation>Szélesség:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation>Magasság:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation>Lábléc</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation>Alapértelmezett helyen</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation>Mentés és előnézet</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation>A téma előnézete és mentése. Felülírható már egy meglévő vagy egy új név megadásával új téma hozható létre</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation>Téma neve:</translation> </message> @@ -3508,12 +3523,12 @@ A tartalom kódolása nem UTF-8.</translation> <translation><strong>Távvezérlő bővítmény</strong><br />A távvezérlő bővítmény egy böngésző vagy egy távoli API segítségével lehetővé teszi egy másik számítógépen futó OpenLP számára való üzenetküldést.</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation>Távvezérlő</translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation>Távvezérlők</translation> </message> @@ -3784,142 +3799,142 @@ A tartalom kódolása nem UTF-8.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Dalszerkesztő</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Cím:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>&Alternatív cím:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation>&Dalszöveg:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>Versszak &sorrend:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>&Hozzáadás</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Szerkesztés</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation>&Összes szerkesztése</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Törlés</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Cím és dalszöveg</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Szerzők</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Hozzáadás dalhoz</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>&Eltávolítás</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation>Szerzők, témakörök, énekeskönyvek &kezelése</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation>Témakör</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>&Hozzáadás dalhoz</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>&Eltávolítás</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Énekeskönyv</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Könyv:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Szám:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation>Szerzők, témakörök és énekeskönyvek</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Téma</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>Új &téma</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Szerzői jogi információ</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI szám:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Megjegyzések</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Téma, szerzői jogi infók és megjegyzések</translation> </message> @@ -4808,17 +4823,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation>Versszak</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation>Refrén</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation>Mellékdal</translation> </message> @@ -4828,22 +4843,22 @@ Usually you are fine with the preselected choise.</source> <translation>Elő-refrén</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation>Bevezetés</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation>Befejezés</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>Egyéb</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation>Elő-refrén</translation> </message> diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index c010b05e7..3d08ea94f 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1674,13 +1674,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1694,17 +1694,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1724,15 +1724,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1742,122 +1747,122 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished"></translation> </message> @@ -2905,103 +2910,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> @@ -3021,285 +3016,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3489,12 +3504,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished"></translation> </message> @@ -3765,142 +3780,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished">削除(&D)</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation type="unfinished"></translation> </message> @@ -4788,17 +4803,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished"></translation> </message> @@ -4808,22 +4823,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation>その他</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 358235d10..d2a1e9af4 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1675,13 +1675,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1695,17 +1695,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1725,15 +1725,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1743,122 +1748,122 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished"></translation> </message> @@ -2906,103 +2911,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished">에러</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> @@ -3022,285 +3017,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">위</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">가운데</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">아래</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3490,12 +3505,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished"></translation> </message> @@ -3766,142 +3781,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished">삭제(&D)</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation type="unfinished"></translation> </message> @@ -4789,17 +4804,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished"></translation> </message> @@ -4809,22 +4824,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index fc8b35776..374307ba7 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1674,13 +1674,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1694,17 +1694,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1724,15 +1724,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1742,122 +1747,122 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished">Velg hvilken skjerm som skal brukes til fremvisning:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished">Programoppstart </translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished">Åpne forrige møteplan automatisk </translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished">Programinnstillinger </translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished">CCLI-detaljer</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished">primær</translation> </message> @@ -2905,103 +2910,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished">Feil</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished">Du kan ikke slette det globale temaet </translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished">Filen er ikke et gyldig tema. </translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished">Temaet eksisterer</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> @@ -3021,285 +3016,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Ensfarget</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertikal </translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Størrelse:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Fet</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Sentrert </translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Topp</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Midtstilt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Bunn</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Bredde: </translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Høyde:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3489,12 +3504,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Fjernmeldinger</translation> </message> @@ -3765,142 +3780,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished">Sangredigeringsverktøy </translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished">&Tittel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished">&Rediger </translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished">&Slett</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished">Tittel && Sangtekst</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished">&Fjern</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished">Emne </translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished">&Fjern</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished">Bok:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished">Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation type="unfinished">Copyright-informasjon</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation type="unfinished"></translation> </message> @@ -4788,17 +4803,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished">Vers</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished"></translation> </message> @@ -4808,22 +4823,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished">Pre-Chorus</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished">Annet </translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 526cb676c..36c15980e 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1675,13 +1675,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1695,17 +1695,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1725,15 +1725,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1743,122 +1748,122 @@ Version: %s <translation>Geral</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation>Monitores</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation>Selecione um monitor para exibição:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation>Inicialização da Aplicação</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation>Exibir alerta de tela em branco</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation>Abrir a última Lista de Exibição automaticamente</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation>Exibir a tela inicial</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation>Configurações da Aplicação</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation>Perguntar sobre salvamento antes de iniciar uma nova lista</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Pré-visualizar automaticamente o próximo item na Lista de Exibição</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation>Atraso no loop de slide:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation>seg</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation>Detalhes de CCLI</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>Número CCLI:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>Usuário SongSelect:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>Senha do SongSelect:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation>Posição do Display</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Altura</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Largura</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation>Modificar posição do display</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation>Tela</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation>principal</translation> </message> @@ -2906,104 +2911,94 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation>Você não selecionou um tema.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation>Salvar Tema - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation>O tema não pôde ser exportado devido a um erro.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation>Selecionar Arquivo de Importação de Tema</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation>O arquivo não é um tema válido. A codificação do conteúdo não é UTF-8.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation>O arquivo não é um tema válido.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation>Tema Existe</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> @@ -3023,285 +3018,305 @@ A codificação do conteúdo não é UTF-8.</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished">Deletar</translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Cor Sólida</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Gradiente</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Imagem</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Cor:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Gradiente:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horizontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertical</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Circular</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Imagem:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Fonte:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Tamanho:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Negrito</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Esquerda</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Direita</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Centralizar</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Topo</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Meio</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Rodapé</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">Posição X:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Posição Y:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Largura:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Altura:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished">Usar local padrão</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3491,12 +3506,12 @@ A codificação do conteúdo não é UTF-8.</translation> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Remoto</translation> </message> @@ -3767,142 +3782,142 @@ A codificação do conteúdo não é UTF-8.</translation> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation>Editor de Músicas</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation>&Título:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation>Título &Alternativo:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation>Ordem das &estrofes:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation>%Adicionar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation>&Editar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation>&Deletar</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation>Título && Letras</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation>Autores</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation>&Adicionar à Música</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation>&Remover</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished">Tópico</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>A&dicionar uma Música</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation>R&emover</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation>Livro de Músicas</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation>Livro:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation>Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Informação de Direitos Autorais</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation type="unfinished">Número CCLI:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation>Comentários</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Tema, Direitos Autorais && Comentários</translation> </message> @@ -4790,17 +4805,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished"></translation> </message> @@ -4810,22 +4825,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index df7cbff79..0cf1e4abc 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -14,12 +14,12 @@ Do you want to continue anyway?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>No Placeholder found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/alerts/forms/alertform.py" line="186"/> + <location filename="openlp/plugins/alerts/forms/alertform.py" line="185"/> <source>The alert text does not contain '<>'. Do want to continue anyway?</source> <translation type="unfinished"></translation> @@ -1675,13 +1675,13 @@ Final Credit <context> <name>OpenLP.ExceptionForm</name> <message> - <location filename="openlp/core/ui/exceptionform.py" line="74"/> + <location filename="openlp/core/ui/exceptionform.py" line="76"/> <source>Platform: %s </source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="97"/> + <location filename="openlp/core/ui/exceptionform.py" line="99"/> <source>**OpenLP Bug Report** Version: %s @@ -1695,17 +1695,17 @@ Version: %s <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Save Crash Report</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="103"/> + <location filename="openlp/core/ui/exceptionform.py" line="105"/> <source>Text files (*.txt *.log *.text)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/exceptionform.py" line="129"/> + <location filename="openlp/core/ui/exceptionform.py" line="132"/> <source>*OpenLP Bug Report* Version: %s @@ -1725,15 +1725,20 @@ Version: %s <context> <name>OpenLP.FileRenameForm</name> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> + <location filename="openlp/core/ui/filerenameform.py" line="53"/> <source>File Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/filerenamedialog.py" line="58"/> + <location filename="openlp/core/ui/filerenamedialog.py" line="56"/> <source>New File Name:</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="openlp/core/ui/filerenameform.py" line="50"/> + <source>File Copy</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>OpenLP.GeneralTab</name> @@ -1743,122 +1748,122 @@ Version: %s <translation type="unfinished">Allmänt</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="320"/> + <location filename="openlp/core/ui/generaltab.py" line="332"/> <source>Monitors</source> <translation type="unfinished">Skärmar</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="322"/> + <location filename="openlp/core/ui/generaltab.py" line="334"/> <source>Select monitor for output display:</source> <translation type="unfinished">Välj skärm för utsignal:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="324"/> + <location filename="openlp/core/ui/generaltab.py" line="336"/> <source>Display if a single screen</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="326"/> + <location filename="openlp/core/ui/generaltab.py" line="338"/> <source>Application Startup</source> <translation type="unfinished">Programstart</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="328"/> + <location filename="openlp/core/ui/generaltab.py" line="340"/> <source>Show blank screen warning</source> <translation type="unfinished">Visa varning vid tom skärm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="330"/> + <location filename="openlp/core/ui/generaltab.py" line="342"/> <source>Automatically open the last service</source> <translation type="unfinished">Öppna automatiskt den senaste planeringen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="332"/> + <location filename="openlp/core/ui/generaltab.py" line="344"/> <source>Show the splash screen</source> <translation type="unfinished">Visa startbilden</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="334"/> + <location filename="openlp/core/ui/generaltab.py" line="346"/> <source>Application Settings</source> <translation type="unfinished">Programinställningar</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="336"/> + <location filename="openlp/core/ui/generaltab.py" line="348"/> <source>Prompt to save before starting a new service</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="338"/> + <location filename="openlp/core/ui/generaltab.py" line="350"/> <source>Automatically preview next item in service</source> <translation>Automatiskt förhandsgranska nästa post i planeringen</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="340"/> + <location filename="openlp/core/ui/generaltab.py" line="352"/> <source>Slide loop delay:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="342"/> + <location filename="openlp/core/ui/generaltab.py" line="354"/> <source> sec</source> <translation> sekunder</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="344"/> + <location filename="openlp/core/ui/generaltab.py" line="356"/> <source>CCLI Details</source> <translation type="unfinished">CCLI-detaljer</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="346"/> + <location filename="openlp/core/ui/generaltab.py" line="358"/> <source>CCLI number:</source> <translation>CCLI-nummer</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="348"/> + <location filename="openlp/core/ui/generaltab.py" line="360"/> <source>SongSelect username:</source> <translation>SongSelect användarnamn:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="350"/> + <location filename="openlp/core/ui/generaltab.py" line="362"/> <source>SongSelect password:</source> <translation>SongSelect lösenord:</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="353"/> + <location filename="openlp/core/ui/generaltab.py" line="365"/> <source>Display Position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="367"/> + <location filename="openlp/core/ui/generaltab.py" line="379"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="368"/> + <location filename="openlp/core/ui/generaltab.py" line="380"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="369"/> + <location filename="openlp/core/ui/generaltab.py" line="381"/> <source>Height</source> <translation>Höjd</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="371"/> + <location filename="openlp/core/ui/generaltab.py" line="383"/> <source>Width</source> <translation>Bredd</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="365"/> + <location filename="openlp/core/ui/generaltab.py" line="377"/> <source>Override display position</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="380"/> + <location filename="openlp/core/ui/generaltab.py" line="392"/> <source>Screen</source> <translation type="unfinished">Skärm</translation> </message> <message> - <location filename="openlp/core/ui/generaltab.py" line="383"/> + <location filename="openlp/core/ui/generaltab.py" line="395"/> <source>primary</source> <translation type="unfinished">primär</translation> </message> @@ -2906,103 +2911,93 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="712"/> + <location filename="openlp/core/ui/thememanager.py" line="679"/> <source>%s (default)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="269"/> + <location filename="openlp/core/ui/thememanager.py" line="271"/> <source>You must select a theme to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="292"/> - <source>You must select a theme to delete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete Confirmation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Error</source> <translation type="unfinished">Fel</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="308"/> + <location filename="openlp/core/ui/thememanager.py" line="778"/> <source>You are unable to delete the default theme.</source> <translation type="unfinished">Du kan inte ta bort standardtemat.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="358"/> + <location filename="openlp/core/ui/thememanager.py" line="326"/> <source>You have not selected a theme.</source> <translation type="unfinished">Du har inte valt ett tema.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="364"/> + <location filename="openlp/core/ui/thememanager.py" line="332"/> <source>Save Theme - (%s)</source> <translation type="unfinished">Spara tema - (%s)</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Theme Exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="381"/> + <location filename="openlp/core/ui/thememanager.py" line="349"/> <source>Your theme has been successfully exported.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Theme Export Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="387"/> + <location filename="openlp/core/ui/thememanager.py" line="355"/> <source>Your theme could not be exported due to an error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Select Theme Import File</source> <translation type="unfinished">Välj tema importfil</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="401"/> + <location filename="openlp/core/ui/thememanager.py" line="369"/> <source>Theme (*.*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="507"/> + <location filename="openlp/core/ui/thememanager.py" line="475"/> <source>File is not a valid theme. The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="557"/> + <location filename="openlp/core/ui/thememanager.py" line="525"/> <source>File is not a valid theme.</source> <translation type="unfinished">Filen är inte ett giltigt tema.</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>Theme Exists</source> <translation type="unfinished">Temat finns</translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="658"/> + <location filename="openlp/core/ui/thememanager.py" line="626"/> <source>A theme with this name already exists. Would you like to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="315"/> + <location filename="openlp/core/ui/thememanager.py" line="786"/> <source>Theme %s is used in the %s plugin.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="322"/> + <location filename="openlp/core/ui/thememanager.py" line="793"/> <source>Theme %s is used by the service manager.</source> <translation type="unfinished"></translation> </message> @@ -3022,285 +3017,305 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/thememanager.py" line="298"/> - <source>Delete %s theme?</source> + <location filename="openlp/core/ui/thememanager.py" line="226"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="291"/> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="761"/> + <source>You must select a theme to %s.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s Confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="openlp/core/ui/thememanager.py" line="767"/> + <source>%s %s theme?</source> <translation type="unfinished"></translation> </message> </context> <context> <name>OpenLP.ThemeWizard</name> <message> - <location filename="openlp/core/ui/themewizard.py" line="622"/> + <location filename="openlp/core/ui/themewizard.py" line="623"/> <source>Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="624"/> + <location filename="openlp/core/ui/themewizard.py" line="625"/> <source>Welcome to the Theme Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="627"/> + <location filename="openlp/core/ui/themewizard.py" line="628"/> <source>This wizard will help you to create and edit your themes . Click the next button below to start the process by setting up your background.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="631"/> + <location filename="openlp/core/ui/themewizard.py" line="632"/> <source>Set Up Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="633"/> + <location filename="openlp/core/ui/themewizard.py" line="634"/> <source>Set up your theme's background according to the parameters below.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="636"/> + <location filename="openlp/core/ui/themewizard.py" line="637"/> <source>Background type:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="638"/> + <location filename="openlp/core/ui/themewizard.py" line="639"/> <source>Solid Color</source> <translation type="unfinished">Solid färg</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="640"/> + <location filename="openlp/core/ui/themewizard.py" line="641"/> <source>Gradient</source> <translation type="unfinished">Stegvis</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="642"/> + <location filename="openlp/core/ui/themewizard.py" line="643"/> <source>Image</source> <translation type="unfinished">Bild</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="694"/> + <location filename="openlp/core/ui/themewizard.py" line="695"/> <source>Color:</source> <translation type="unfinished">Färg:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="649"/> + <location filename="openlp/core/ui/themewizard.py" line="650"/> <source>Gradient:</source> <translation type="unfinished">Stegvis:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="651"/> + <location filename="openlp/core/ui/themewizard.py" line="652"/> <source>Horizontal</source> <translation type="unfinished">Horisontal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="653"/> + <location filename="openlp/core/ui/themewizard.py" line="654"/> <source>Vertical</source> <translation type="unfinished">Vertikal</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="655"/> + <location filename="openlp/core/ui/themewizard.py" line="656"/> <source>Circular</source> <translation type="unfinished">Cirkulär</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="657"/> + <location filename="openlp/core/ui/themewizard.py" line="658"/> <source>Top Left - Bottom Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="659"/> + <location filename="openlp/core/ui/themewizard.py" line="660"/> <source>Bottom Left - Top Right</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="661"/> + <location filename="openlp/core/ui/themewizard.py" line="662"/> <source>Image:</source> <translation type="unfinished">Bild:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="662"/> + <location filename="openlp/core/ui/themewizard.py" line="663"/> <source>Main Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="664"/> + <location filename="openlp/core/ui/themewizard.py" line="665"/> <source>Define the font and display characteristics for the Display text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="693"/> + <location filename="openlp/core/ui/themewizard.py" line="694"/> <source>Font:</source> <translation type="unfinished">Typsnitt:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="695"/> + <location filename="openlp/core/ui/themewizard.py" line="696"/> <source>Size:</source> <translation type="unfinished">Storlek:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="696"/> + <location filename="openlp/core/ui/themewizard.py" line="697"/> <source>pt</source> <translation type="unfinished">pt</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="672"/> + <location filename="openlp/core/ui/themewizard.py" line="673"/> <source>(%d lines per slide)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="674"/> + <location filename="openlp/core/ui/themewizard.py" line="675"/> <source>Line Spacing:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="677"/> + <location filename="openlp/core/ui/themewizard.py" line="678"/> <source>&Outline:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="681"/> + <location filename="openlp/core/ui/themewizard.py" line="682"/> <source>&Shadow:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="684"/> + <location filename="openlp/core/ui/themewizard.py" line="685"/> <source>Bold</source> <translation type="unfinished">Fetstil</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="686"/> + <location filename="openlp/core/ui/themewizard.py" line="687"/> <source>Italic</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="688"/> + <location filename="openlp/core/ui/themewizard.py" line="689"/> <source>Footer Area Font Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="690"/> + <location filename="openlp/core/ui/themewizard.py" line="691"/> <source>Define the font and display characteristics for the Footer text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="697"/> + <location filename="openlp/core/ui/themewizard.py" line="698"/> <source>Text Formatting Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="699"/> + <location filename="openlp/core/ui/themewizard.py" line="700"/> <source>Allows additional display formatting information to be defined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="702"/> + <location filename="openlp/core/ui/themewizard.py" line="703"/> <source>Horizontal Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="704"/> + <location filename="openlp/core/ui/themewizard.py" line="705"/> <source>Left</source> <translation type="unfinished">Vänster</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="706"/> + <location filename="openlp/core/ui/themewizard.py" line="707"/> <source>Right</source> <translation type="unfinished">Höger</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="708"/> + <location filename="openlp/core/ui/themewizard.py" line="709"/> <source>Center</source> <translation type="unfinished">Centrera</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="710"/> + <location filename="openlp/core/ui/themewizard.py" line="711"/> <source>Vertical Align:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="712"/> + <location filename="openlp/core/ui/themewizard.py" line="713"/> <source>Top</source> <translation type="unfinished">Toppen</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="714"/> + <location filename="openlp/core/ui/themewizard.py" line="715"/> <source>Middle</source> <translation type="unfinished">Mitten</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="716"/> + <location filename="openlp/core/ui/themewizard.py" line="717"/> <source>Bottom</source> <translation type="unfinished">Botten</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="718"/> + <location filename="openlp/core/ui/themewizard.py" line="719"/> <source>Transitions</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="720"/> + <location filename="openlp/core/ui/themewizard.py" line="721"/> <source>Output Area Locations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="722"/> + <location filename="openlp/core/ui/themewizard.py" line="723"/> <source>Allows you to change and move the main and footer areas.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="725"/> + <location filename="openlp/core/ui/themewizard.py" line="726"/> <source>&Main Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="727"/> + <location filename="openlp/core/ui/themewizard.py" line="728"/> <source>&Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="739"/> + <location filename="openlp/core/ui/themewizard.py" line="741"/> <source>X position:</source> <translation type="unfinished">X-position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="747"/> + <location filename="openlp/core/ui/themewizard.py" line="753"/> <source>px</source> <translation type="unfinished">px</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="741"/> + <location filename="openlp/core/ui/themewizard.py" line="744"/> <source>Y position:</source> <translation type="unfinished">Y-position:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="743"/> + <location filename="openlp/core/ui/themewizard.py" line="747"/> <source>Width:</source> <translation type="unfinished">Bredd:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="745"/> + <location filename="openlp/core/ui/themewizard.py" line="751"/> <source>Height:</source> <translation type="unfinished">Höjd:</translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="737"/> + <location filename="openlp/core/ui/themewizard.py" line="739"/> <source>Footer Area</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="748"/> + <location filename="openlp/core/ui/themewizard.py" line="755"/> <source>Use default location</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="750"/> + <location filename="openlp/core/ui/themewizard.py" line="757"/> <source>Save and Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="752"/> + <location filename="openlp/core/ui/themewizard.py" line="759"/> <source>View the theme and save it replacing the current one or change the name to create a new theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/core/ui/themewizard.py" line="756"/> + <location filename="openlp/core/ui/themewizard.py" line="763"/> <source>Theme name:</source> <translation type="unfinished"></translation> </message> @@ -3490,12 +3505,12 @@ The content encoding is not UTF-8.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="87"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> <source>Remote</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/remotes/remoteplugin.py" line="92"/> + <location filename="openlp/plugins/remotes/remoteplugin.py" line="88"/> <source>Remotes</source> <translation type="unfinished">Fjärrstyrningar</translation> </message> @@ -3766,142 +3781,142 @@ The content encoding is not UTF-8.</source> <context> <name>SongsPlugin.EditSongForm</name> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="411"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> <source>Song Editor</source> <translation type="unfinished">Sångredigerare</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="413"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> <source>&Title:</source> <translation type="unfinished">&Titel:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="415"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> <source>Alt&ernate title:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="417"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> <source>&Lyrics:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="419"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> <source>&Verse order:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="421"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> <source>&Add</source> <translation type="unfinished">&Lägg till</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="423"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> <source>&Edit</source> <translation type="unfinished">&Redigera</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="425"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> <source>Ed&it All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="427"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> <source>&Delete</source> <translation type="unfinished">&Ta bort</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="429"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="431"/> <source>Title && Lyrics</source> <translation type="unfinished">Titel && Sångtexter</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="432"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> <source>Authors</source> <translation type="unfinished">Författare</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="434"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> <source>&Add to Song</source> <translation type="unfinished">&Lägg till i sång</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="436"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> <source>&Remove</source> <translation type="unfinished">&Ta bort</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> <source>&Manage Authors, Topics, Song Books</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> <source>Topic</source> <translation type="unfinished">Ämne</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> <source>A&dd to Song</source> <translation>Lä&gg till i sång</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> <source>R&emove</source> <translation type="unfinished">Ta &bort</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> <source>Song Book</source> <translation type="unfinished">Sångbok</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> <source>Book:</source> <translation type="unfinished">Bok:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> <source>Number:</source> <translation>Nummer:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/> <source>Authors, Topics && Song Book</source> <translation type="unfinished"></translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> <source>Theme</source> <translation type="unfinished">Tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="458"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> <source>New &Theme</source> <translation>Nytt &tema</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="460"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> <source>Copyright Information</source> <translation>Copyrightinformation</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="462"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> <source>©</source> <translation>©</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="464"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> <source>CCLI number:</source> <translation>CCLI nummer:</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="466"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> <source>Comments</source> <translation type="unfinished">Kommentarer</translation> </message> <message> - <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="468"/> + <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="470"/> <source>Theme, Copyright Info && Comments</source> <translation>Tema, copyrightinfo && kommentarer</translation> </message> @@ -4789,17 +4804,17 @@ Usually you are fine with the preselected choise.</source> <context> <name>SongsPlugin.VerseType</name> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="75"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="76"/> <source>Verse</source> <translation type="unfinished">Vers</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="78"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="79"/> <source>Chorus</source> <translation type="unfinished">Refräng</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="81"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="82"/> <source>Bridge</source> <translation type="unfinished">Brygga</translation> </message> @@ -4809,22 +4824,22 @@ Usually you are fine with the preselected choise.</source> <translation type="unfinished">Brygga</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="87"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="88"/> <source>Intro</source> <translation type="unfinished">Intro</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="90"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="91"/> <source>Ending</source> <translation type="unfinished">Ending</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="93"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="94"/> <source>Other</source> <translation type="unfinished">Övrigt</translation> </message> <message> - <location filename="openlp/plugins/songs/lib/__init__.py" line="84"/> + <location filename="openlp/plugins/songs/lib/__init__.py" line="85"/> <source>PreChorus</source> <translation type="unfinished"></translation> </message> diff --git a/resources/images/general_search_clear.png b/resources/images/general_search_clear.png new file mode 100644 index 000000000..6c4b83b7a Binary files /dev/null and b/resources/images/general_search_clear.png differ diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index e9ec5c0a3..6b9d6dd54 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -1,5 +1,9 @@ <RCC> <qresource prefix="songs"> + <file>song_search_all.png</file> + <file>song_search_author.png</file> + <file>song_search_lyrics.png</file> + <file>song_search_title.png</file> <file>topic_edit.png</file> <file>author_add.png</file> <file>author_delete.png</file> diff --git a/resources/images/song_search_all.png b/resources/images/song_search_all.png new file mode 100644 index 000000000..cedee7700 Binary files /dev/null and b/resources/images/song_search_all.png differ diff --git a/resources/images/song_search_author.png b/resources/images/song_search_author.png new file mode 100644 index 000000000..c974107d2 Binary files /dev/null and b/resources/images/song_search_author.png differ diff --git a/resources/images/song_search_lyrics.png b/resources/images/song_search_lyrics.png new file mode 100644 index 000000000..1ab7145c6 Binary files /dev/null and b/resources/images/song_search_lyrics.png differ diff --git a/resources/images/song_search_title.png b/resources/images/song_search_title.png new file mode 100644 index 000000000..2323757e0 Binary files /dev/null and b/resources/images/song_search_title.png differ diff --git a/resources/windows/warnOpenLP.txt b/resources/windows/warnOpenLP.txt deleted file mode 100644 index 19c579942..000000000 --- a/resources/windows/warnOpenLP.txt +++ /dev/null @@ -1,611 +0,0 @@ -W: no module named openlp.core.lib.build_html (top-level import by openlp.core.ui.maindisplay) -W: no module named mx (top-level import by sqlite.main) -W: no module named ctypes.create_string_buffer (delayed import by urllib) -W: no module named openlp.core.ui.ServiceNoteForm (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.core.ui.mainwindow) -W: no module named email.Iterators (delayed import by email.message) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named sqlalchemy.sql.join (top-level import by sqlalchemy) -W: no module named java (conditional import by xml.sax._exceptions) -W: no module named openlp.plugins.images.lib.ImageMediaItem (top-level import by openlp.plugins.images.imageplugin) -W: no module named sqlalchemy.SMALLINT (top-level import by sqlalchemy.databases.sybase) -W: no module named sqlalchemy.engine.create_engine (top-level import by sqlalchemy) -W: no module named sqlalchemy.sql.asc (top-level import by sqlalchemy) -W: no module named openlp.plugins.bibles.lib.BiblesTab (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named PyQt4._qt (top-level import by PyQt4.QtCore) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.alerts.lib.alertstab) -W: no module named sqlalchemy.Column (top-level import by openlp.plugins.custom.lib.db) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named openlp.plugins.alerts.lib.AlertsManager (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.generaltab) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.alerts.forms.alertdialog) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named sqlalchemy.orm.MapperExtension (top-level import by sqlalchemy.orm.scoping) -W: no module named pyodbc (delayed import by sqlalchemy.databases.access) -W: no module named openlp.core.lib.expand_tags (top-level import by openlp.core.lib.renderer) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.servicemanager) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.dynamic) -W: no module named ctypes._SimpleCData (top-level import by ctypes.wintypes) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.core.ui.generaltab) -W: no module named simplejson (conditional import by openlp.plugins.remotes.lib.httpserver) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.alerts.forms.alertdialog) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.collections) -W: no module named openlp.core.lib.resize_image (top-level import by openlp.core.lib.serviceitem) -W: no module named openlp.plugins.songs.lib.SongXMLParser (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named xml.dom.XMLNS_NAMESPACE (top-level import by xml.dom.minidom) -W: no module named openlp.plugins.songs.lib.VerseType (top-level import by openlp.plugins.songs.lib.songimport) -W: no module named openlp.plugins.songs.lib.SongXMLBuilder (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.core.ui.GeneralTab (top-level import by openlp.core.ui.settingsform) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named informixdb (delayed import by sqlalchemy.databases.informix) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.custom.customplugin) -W: no module named cjkcodecs (top-level import by BeautifulSoup) -W: no module named readline (delayed, conditional import by cmd) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.lib.songimport) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.media.mediaplugin) -W: no module named openlp.core.lib.ThemeXML (top-level import by openlp.core.ui.amendthemeform) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.lib.manager) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named openlp.core.lib.ServiceItem (top-level import by openlp.core.ui.maindisplay) -W: no module named openlp.plugins.songs.forms.EditVerseForm (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.ewimport) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.songs.lib.songstab) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.ui.HideMode (top-level import by openlp.core.ui.maindisplay) -W: no module named sqlalchemy.Column (top-level import by sqlalchemy.databases.sybase) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.slidecontroller) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.forms.songimportform) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.aboutdialog) -W: no module named sqlalchemy.sql.insert (top-level import by sqlalchemy) -W: no module named openlp.core.lib.str_to_bool (top-level import by openlp.core.ui.thememanager) -W: no module named sqlalchemy.MetaData (top-level import by sqlalchemy.databases.sybase) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.lib.biblestab) -W: no module named openlp.plugins.bibles.lib.BibleManager (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named openlp.core.ui.SlideController (top-level import by openlp.core.ui.mainwindow) -W: no module named MacOS (delayed import by platform) -W: no module named openlp.core.lib.ThemeXML (top-level import by openlp.core.ui.thememanager) -W: no module named cx_Oracle (delayed import by sqlalchemy.databases.oracle) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.slidecontroller) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.servicenotedialog) -W: no module named sqlalchemy.sql.except_ (top-level import by sqlalchemy) -W: no module named openlp.core.ui.AboutForm (top-level import by openlp.core.ui.mainwindow) -W: no module named EasyDialogs (conditional import by getpass) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.core.lib.mediamanageritem) -W: no module named sqlalchemy.orm.SessionExtension (top-level import by sqlalchemy.orm.session) -W: no module named sqlalchemy.orm.relation (top-level import by openlp.plugins.bibles.lib.db) -W: no module named openlp.plugins.songs.lib.VerseType (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.bibles.lib.http) -W: no module named sqlalchemy.sql.func (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.utils.languagemanager) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.mainwindow) -W: no module named uno (conditional import by openlp.plugins.songs.lib.oooimport) -W: no module named kinterbasdb (delayed import by sqlalchemy.databases.firebird) -W: no module named multiprocessing.RLock (top-level import by multiprocessing.sharedctypes) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.filerenameform) -W: no module named sqlalchemy.ForeignKey (top-level import by sqlalchemy.databases.mssql) -W: no module named openlp.core.lib.Renderer (top-level import by openlp.core.lib.rendermanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songmaintenancedialog) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.lib.mediamanageritem) -W: no module named openlp.core.ui.FileRenameForm (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.songsplugin) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named vms_lib (delayed, conditional import by platform) -W: no module named openlp.core.lib.resize_image (top-level import by openlp.core.ui.slidecontroller) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.alerts.lib.alertsmanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songusage.forms.songusagedetaildialog) -W: no module named openlp.plugins.remotes.lib.RemoteTab (top-level import by openlp.plugins.remotes.remoteplugin) -W: no module named openlp.core.ui.ServiceManager (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.songusage.forms.songusagedetailform) -W: no module named openlp.core.ui.SettingsForm (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.plugins.alerts.lib.AlertsTab (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named xdg (delayed, conditional import by openlp.core.utils) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.custom.customplugin) -W: no module named openlp.core.ui.AmendThemeForm (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named posix (delayed, conditional import by iu) -W: no module named openlp.plugins.songs.lib.VerseType (top-level import by openlp.plugins.songs.forms.editversedialog) -W: no module named multiprocessing.dummy.Process (delayed import by __main__) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named sqlalchemy.String (top-level import by sqlalchemy.databases.mssql) -W: no module named xml.dom.EMPTY_PREFIX (top-level import by xml.dom.expatbuilder) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named openlp.core.lib.ServiceItem (top-level import by openlp.core.lib.mediamanageritem) -W: no module named openlp.core.lib.PluginManager (top-level import by openlp.core.ui.mainwindow) -W: no module named multiprocessing.current_process (top-level import by multiprocessing.reduction) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songbookform) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named xmltok (top-level import by pyexpat) -W: no module named openlp.plugins.bibles.lib.SearchResults (top-level import by openlp.plugins.bibles.lib.http) -W: no module named sqlalchemy.sql.delete (top-level import by sqlalchemy) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.lib.oooimport) -W: no module named _emx_link (conditional import by os) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.aboutdialog) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.bibles.forms.bibleimportwizard) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.core.lib.pluginmanager) -W: no module named openlp.plugins.songs.lib.SongsTab (top-level import by openlp.plugins.songs.songsplugin) -W: no module named sqlalchemy.CHAR (top-level import by sqlalchemy.databases.sybase) -W: no module named sqlalchemy.sql.collate (top-level import by sqlalchemy) -W: no module named sqlalchemy.sql.outparam (top-level import by sqlalchemy) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.lib.db) -W: no module named openlp.core.ui.PluginForm (top-level import by openlp.core.ui.mainwindow) -W: no module named gobject (top-level import by enchant.checker.GtkSpellCheckerDialog) -W: no module named openlp.core.utils.VersionThread (top-level import by __main__) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.topicsform) -W: no module named sqlalchemy.Integer (top-level import by sqlalchemy.databases.mssql) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.exceptiondialog) -W: no module named pwd (delayed, conditional import by distutils.util) -W: no module named uno (conditional import by openlp.plugins.presentations.lib.impresscontroller) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.utils) -W: no module named sqlalchemy.orm.class_mapper (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named sqlalchemy.orm.relation (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named readline (delayed import by pdb) -W: no module named openlp.core.ui.MainDisplay (top-level import by openlp.core.lib.rendermanager) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sqlalchemy.Table (top-level import by openlp.plugins.songusage.lib.db) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.forms.importwizardform) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.remotes.remoteplugin) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.images.imageplugin) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.alerts.lib.alertstab) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.editversedialog) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named openlp.core.ui.HideMode (top-level import by openlp.core.ui.slidecontroller) -W: no module named sqlalchemy.sql.between (top-level import by sqlalchemy) -W: no module named xml.dom.EMPTY_PREFIX (top-level import by xml.dom.minidom) -W: no module named pysqlite2 (delayed import by sqlalchemy.databases.sqlite) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.custom.lib.customtab) -W: no module named gtk (top-level import by enchant.checker.GtkSpellCheckerDialog) -W: no module named xml.dom.EMPTY_NAMESPACE (top-level import by xml.dom.expatbuilder) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.remotes.lib.httpserver) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songusage.forms.songusagedeleteform) -W: no module named sqlalchemy.orm.scoped_session (top-level import by openlp.core.lib.db) -W: no module named openlp.core.lib.clean_tags (top-level import by openlp.core.lib.serviceitem) -W: no module named openlp.core.utils.get_filesystem_encoding (top-level import by openlp.core.ui.thememanager) -W: no module named xml.dom.EMPTY_NAMESPACE (top-level import by xml.dom.minidom) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.lib.toolbar) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.remotes.remoteplugin) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.attributes) -W: no module named sqlalchemy.ForeignKey (top-level import by sqlalchemy.databases.sybase) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.servicemanager) -W: no module named sqlalchemy.Column (top-level import by openlp.plugins.alerts.lib.db) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.core.ui.advancedtab) -W: no module named AES (delayed, conditional import by archive) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named openlp.core.lib.context_menu_separator (top-level import by openlp.core.lib.mediamanageritem) -W: no module named fcntl (top-level import by tempfile) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.thememanager) -W: no module named mx (top-level import by sqlalchemy.databases.mxODBC) -W: no module named sqlalchemy.sql.union (top-level import by sqlalchemy) -W: no module named openlp.plugins.songs.forms.TopicsForm (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named MacOS (delayed import by distutils.sysconfig) -W: no module named openlp.core.lib.SpellTextEdit (top-level import by openlp.plugins.custom.forms.editcustomdialog) -W: no module named ic (top-level import by webbrowser) -W: no module named com (conditional import by openlp.plugins.presentations.lib.impresscontroller) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.media.mediaplugin) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.custom.forms.editcustomform) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.lib.spelltextedit) -W: no module named openlp.core.lib.html_expands (top-level import by openlp.core.lib.spelltextedit) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named sqlalchemy.Column (top-level import by openlp.plugins.songs.lib.db) -W: no module named py2exe (delayed import by enchant.tests) -W: no module named openlp.plugins.songs.forms.AuthorsForm (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.authorsform) -W: no module named openlp.plugins.remotes.lib.HttpServer (top-level import by openlp.plugins.remotes.remoteplugin) -W: no module named sqlalchemy.Table (top-level import by openlp.plugins.bibles.lib.db) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.remotes.remoteplugin) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.filerenamedialog) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sapdb (delayed import by sqlalchemy.databases.maxdb) -W: no module named ctypes.cdll (delayed import by ctypes.util) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.presentations.lib.presentationtab) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named sqlalchemy.sql.text (top-level import by sqlalchemy) -W: no module named openlp.core.lib.image_to_byte (top-level import by openlp.core.lib.renderer) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.bibles.forms.importwizardform) -W: no module named openlp.core.lib.image_to_byte (top-level import by openlp.core.ui.maindisplay) -W: no module named iconv_codec (top-level import by BeautifulSoup) -W: no module named openlp.plugins.songs.forms.SongBookForm (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named sqlalchemy.sql.not_ (top-level import by sqlalchemy) -W: no module named multiprocessing.Pipe (top-level import by multiprocessing.queues) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songusage.forms.songusagedetailform) -W: no module named sqlalchemy.sql.subquery (top-level import by sqlalchemy) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songs.songsplugin) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.editsongdialog) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named openlp.plugins.songs.forms.SongMaintenanceForm (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named xmlparse (top-level import by pyexpat) -W: no module named sqlalchemy.sql.exists (top-level import by sqlalchemy) -W: no module named sqlalchemy.sql.and_ (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named multiprocessing.Process (top-level import by multiprocessing.pool) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.settingsdialog) -W: no module named sqlalchemy.exceptions (top-level import by openlp.core.lib.db) -W: no module named sqlalchemy.sql.outerjoin (top-level import by sqlalchemy) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songs.forms.editsongdialog) -W: no module named openlp.plugins.custom.lib.CustomXMLParser (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.custom.forms.editcustomdialog) -W: no module named sqlalchemy.Integer (top-level import by sqlalchemy.databases.sybase) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.properties) -W: no module named multiprocessing.current_process (top-level import by multiprocessing.managers) -W: no module named openlp.core.ui.SplashScreen (top-level import by __main__) -W: no module named multiprocessing.TimeoutError (top-level import by multiprocessing.dummy) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.songs.forms.songimportform) -W: no module named xml.dom.XMLNS_NAMESPACE (top-level import by xml.dom.expatbuilder) -W: no module named ctypes.c_int32 (delayed import by urllib) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.amendthemedialog) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.lib.serviceitem) -W: no module named openlp.core.utils.LanguageManager (top-level import by __main__) -W: no module named sqlalchemy.orm.object_mapper (top-level import by sqlalchemy.orm.properties) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.utils.languagemanager) -W: no module named sqlalchemy.sql.literal_column (top-level import by sqlalchemy) -W: no module named openlp.plugins.songs.lib.SongXMLParser (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named ctypes.c_char_p (delayed import by urllib) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.images.imageplugin) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.remotes.lib.remotetab) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.lib.opensong) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songimportform) -W: no module named sqlalchemy.sql.select (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songbookdialog) -W: no module named openlp.plugins.bibles.lib.BibleMediaItem (top-level import by openlp.plugins.bibles.bibleplugin) -W: no module named PyQt4._qt (top-level import by PyQt4.QtNetwork) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.songs.songsplugin) -W: no module named sqlalchemy.sql.case (top-level import by sqlalchemy) -W: no module named wx (top-level import by enchant.checker.wxSpellCheckerDialog) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named com (conditional import by openlp.plugins.songs.lib.sofimport) -W: no module named PyQt4._qt (top-level import by PyQt4) -W: no module named SOCKS (top-level import by ftplib) -W: no module named openlp.plugins.songusage.forms.SongUsageDetailForm (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named sqlalchemy.sql.null (top-level import by sqlalchemy) -W: no module named sqlalchemy.MetaData (top-level import by openlp.core.lib.db) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.plugins.custom.forms.EditCustomForm (top-level import by openlp.plugins.custom.customplugin) -W: no module named org (delayed import by xml.sax) -W: no module named openlp.core.lib.SpellTextEdit (top-level import by openlp.plugins.songs.forms.editversedialog) -W: no module named sqlalchemy.orm.EXT_CONTINUE (top-level import by sqlalchemy.orm.scoping) -W: no module named openlp.core.lib.build_lyrics_outline_css (top-level import by openlp.core.lib.renderer) -W: no module named openlp.plugins.songs.lib.VerseType (top-level import by openlp.plugins.songs.forms.editverseform) -W: no module named com (conditional import by openlp.plugins.songs.lib.oooimport) -W: no module named openlp.core.lib.str_to_bool (top-level import by openlp.core.lib.theme) -W: no module named sqlalchemy.sql.literal (top-level import by sqlalchemy) -W: no module named termios (top-level import by getpass) -W: no module named openlp.core.lib.build_lyrics_format_css (top-level import by openlp.core.lib.renderer) -W: no module named ctypes.byref (delayed import by urllib) -W: no module named openlp.plugins.custom.lib.CustomTab (top-level import by openlp.plugins.custom.customplugin) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.plugins.bibles.lib.parse_reference (top-level import by openlp.plugins.bibles.lib.manager) -W: no module named java (delayed import by platform) -W: no module named openlp.core.ui.ServiceItemEditForm (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.custom.customplugin) -W: no module named openlp.core.lib.ThemeLevel (top-level import by openlp.core.lib.rendermanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.lib.db) -W: no module named _xmlrpclib (top-level import by xmlrpclib) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.plugins.media.lib.MediaMediaItem (top-level import by openlp.plugins.media.mediaplugin) -W: no module named openlp.plugins.custom.lib.CustomXMLBuilder (top-level import by openlp.plugins.custom.forms.editcustomform) -W: no module named rourl2path (conditional import by urllib) -W: no module named pwd (delayed import by webbrowser) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.themestab) -W: no module named PyQt4._qt (top-level import by PyQt4.QtWebKit) -W: no module named sqlalchemy.orm.class_mapper (delayed, conditional import by sqlalchemy.orm.interfaces) -W: no module named PyQt4._qt (top-level import by PyQt4.phonon) -W: no module named openlp.core.ui.HideMode (top-level import by openlp.plugins.presentations.lib.messagelistener) -W: no module named openlp.plugins.songusage.forms.SongUsageDeleteForm (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named openlp.core.lib.context_menu_separator (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.plugindialog) -W: no module named fcntl (conditional import by subprocess) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named openlp.core.lib.PluginStatus (top-level import by openlp.core.lib.pluginmanager) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.core.ui.ScreenList (top-level import by __main__) -W: no module named sqlalchemy.or_ (top-level import by openlp.plugins.bibles.lib.db) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.editsongform) -W: no module named openlp.plugins.songs.forms.ImportWizardForm (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.ui.ThemeManager (top-level import by openlp.core.ui.mainwindow) -W: no module named pyodbc (delayed, conditional import by sqlalchemy.databases.mssql) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.lib.mediamanageritem) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.biblestab) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named multiprocessing.active_children (top-level import by multiprocessing.managers) -W: no module named openlp.plugins.songs.forms.EditSongForm (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named email.Generator (delayed import by email.message) -W: no module named mx (delayed import by sqlalchemy.databases.mxODBC) -W: no module named sqlalchemy.sql.or_ (top-level import by sqlalchemy) -W: no module named sqlalchemy.Table (top-level import by openlp.plugins.custom.lib.db) -W: no module named sqlalchemy.Table (top-level import by sqlalchemy.databases.sybase) -W: no module named openlp.core.lib.get_text_file_string (top-level import by openlp.core.ui.thememanager) -W: no module named sqlalchemy.orm.object_session (top-level import by sqlalchemy.orm.scoping) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named sqlalchemy.Table (top-level import by sqlalchemy.databases.mssql) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.forms.bibleimportwizard) -W: no module named openlp.core.lib.resize_image (top-level import by openlp.core.lib.renderer) -W: no module named pymssql (delayed import by sqlalchemy.databases.mssql) -W: no module named sqlalchemy.orm.sessionmaker (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.expand_tags (top-level import by openlp.core.lib.serviceitem) -W: no module named gestalt (delayed import by platform) -W: no module named enchant.checker.SpellChecker (top-level import by enchant.checker.CmdLineChecker) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.themestab) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.olp1import) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.presentations.lib.messagelistener) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.interfaces) -W: no module named sqlalchemy.orm.object_mapper (top-level import by sqlalchemy.orm.query) -W: no module named sqlalchemy.sql.distinct (top-level import by sqlalchemy) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sqlalchemy.sql.extract (top-level import by sqlalchemy) -W: no module named sqlalchemy.Column (top-level import by openlp.plugins.bibles.lib.db) -W: no module named psycopg2 (delayed import by sqlalchemy.databases.postgres) -W: no module named enchant.checker.SpellChecker (delayed import by enchant.checker.GtkSpellCheckerDialog) -W: no module named clr (conditional import by adodbapi.adodbapi) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named openlp.plugins.custom.lib.CustomXMLParser (top-level import by openlp.plugins.custom.forms.editcustomform) -W: no module named openlp.core.theme.Theme (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.custom.forms.editcustomform) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.core.lib.settingsmanager) -W: no module named openlp.core.lib.Receiver (top-level import by __main__) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.bibles.lib.manager) -W: no module named org (top-level import by pickle) -W: no module named enchant.DictNotFoundError (top-level import by openlp.core.lib.spelltextedit) -W: no module named sqlalchemy.sql.except_all (top-level import by sqlalchemy) -W: no module named openlp.plugins.presentations.lib.PresentationTab (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named sqlalchemy.sql.cast (top-level import by sqlalchemy) -W: no module named sqlalchemy.orm.relation (top-level import by openlp.plugins.songs.lib.db) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.settingsdialog) -W: no module named openlp.core.utils.LanguageManager (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sqlalchemy.sql.intersect (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.songimport) -W: no module named sqlalchemy.orm.class_mapper (top-level import by sqlalchemy.orm.scoping) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.util) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.opensongimport) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.bibles.lib.biblestab) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.aboutform) -W: no module named openlp.plugins.custom.lib.CustomMediaItem (top-level import by openlp.plugins.custom.customplugin) -W: no module named sqlalchemy.orm.scoped_session (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.amendthemeform) -W: no module named sqlalchemy.engine.engine_from_config (top-level import by sqlalchemy) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.core.ui.themestab) -W: no module named openlp.core.lib.OpenLPToolbar (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.maindisplay) -W: no module named openlp.core.lib.PluginStatus (top-level import by openlp.core.ui.pluginform) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.http) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.remotes.lib.httpserver) -W: no module named sqlalchemy.Table (top-level import by openlp.plugins.songs.lib.db) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.utils) -W: no module named openlp.core.lib.RenderManager (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.lib.plugin) -W: no module named sqlalchemy.ForeignKey (top-level import by openlp.plugins.bibles.lib.db) -W: no module named openlp.plugins.songs.lib.SongMediaItem (top-level import by openlp.plugins.songs.songsplugin) -W: no module named sqlalchemy.Index (top-level import by openlp.plugins.songs.lib.db) -W: no module named multiprocessing.TimeoutError (top-level import by multiprocessing.pool) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songusage.forms.songusagedetaildialog) -W: no module named enchant.DictWithPWL (delayed import by enchant.checker.tests) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.songstab) -W: no module named openlp.core.ui.AdvancedTab (top-level import by openlp.core.ui.settingsform) -W: no module named MySQLdb (delayed import by sqlalchemy.databases.mysql) -W: no module named openlp.plugins.presentations.lib.PresentationMediaItem (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named openlp.plugins.alerts.forms.AlertForm (top-level import by openlp.plugins.alerts.alertsplugin) -W: no module named ctypes.c_int (delayed import by urllib) -W: no module named xml.dom.XML_NAMESPACE (delayed import by xml.dom.pulldom) -W: no module named ctypes.c_void_p (delayed import by urllib) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.bibles.lib.osis) -W: no module named sqlalchemy.create_engine (top-level import by openlp.core.lib.db) -W: no module named win32com.client._get_good_object_ (top-level import by win32com.client.util) -W: no module named openlp.core.ui.MainDisplay (top-level import by openlp.core.ui.slidecontroller) -W: no module named openlp.core.lib.resize_image (top-level import by openlp.plugins.presentations.lib.presentationcontroller) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.remotes.lib.remotetab) -W: no module named openlp.core.ui.MediaDockManager (top-level import by openlp.core.ui.mainwindow) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.session) -W: no module named sqlalchemy.Column (top-level import by sqlalchemy.databases.mssql) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songs.forms.editversedialog) -W: no module named multiprocessing.Process (top-level import by multiprocessing.managers) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.presentations.lib.presentationcontroller) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.custom.forms.editcustomdialog) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.alerts.lib.alertsmanager) -W: no module named sgmlop (top-level import by xmlrpclib) -W: no module named MacOS (conditional import by py_compile) -W: no module named multiprocessing.cpu_count (top-level import by multiprocessing.dummy) -W: no module named _dummy_threading (top-level import by dummy_threading) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songmaintenanceform) -W: no module named openlp.plugins.presentations.lib.PresentationController (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named openlp.core.lib.OpenLPToolbar (top-level import by openlp.core.lib.mediamanageritem) -W: no module named sqlalchemy.sql.union_all (top-level import by sqlalchemy) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.opensong) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.osis) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.settingsform) -W: no module named enchant.tokenize.get_tokenizer (top-level import by enchant.checker) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.bibles.lib.manager) -W: no module named org (top-level import by copy) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.core.ui.servicemanager) -W: no module named sqlalchemy.MetaData (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songs.forms.songmaintenancedialog) -W: no module named sqlalchemy.sql.select (top-level import by sqlalchemy.databases.mssql) -W: no module named openlp.core.lib.SettingsManager (top-level import by openlp.plugins.bibles.forms.importwizardform) -W: no module named multiprocessing.current_process (top-level import by multiprocessing.connection) -W: no module named sqlalchemy.orm.sessionmaker (top-level import by openlp.core.lib.db) -W: no module named sqlalchemy.sql.desc (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songusage.forms.songusagedeletedialog) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named ctypes.cdll (delayed import by urllib) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.lib) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.media.mediaplugin) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.presentations.lib.presentationtab) -W: no module named MySQLdb (delayed, conditional import by sqlalchemy.databases.mysql) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.core.lib.MediaManagerItem (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sqlalchemy.orm.object_session (top-level import by sqlalchemy.orm.dynamic) -W: no module named sqlalchemy.sql.modifier (top-level import by sqlalchemy) -W: no module named _xmlplus (top-level import by xml) -W: no module named sqlalchemy.Column (top-level import by openlp.plugins.songusage.lib.db) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.advancedtab) -W: no module named sqlalchemy.sql.and_ (top-level import by sqlalchemy) -W: no module named sqlalchemy.MetaData (top-level import by sqlalchemy.databases.mssql) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.dependency) -W: no module named openlp.core.lib.ThemeLevel (top-level import by openlp.core.ui.themestab) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.presentations.lib.presentationtab) -W: no module named openlp.core.utils.get_images_filter (top-level import by openlp.core.ui.amendthemeform) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.presentations.presentationplugin) -W: no module named openlp.plugins.presentations.lib.MessageListener (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.plugins.bibles.forms.ImportWizardForm (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named openlp.core.utils.AppLocation (top-level import by __main__) -W: no module named sqlalchemy.ForeignKey (top-level import by openlp.plugins.songs.lib.db) -W: no module named openlp.core.lib.OpenLPToolbar (top-level import by openlp.core.ui.thememanager) -W: no module named ctypes.cdll (conditional import by openlp.plugins.presentations.lib.pptviewcontroller) -W: no module named pwd (delayed import by getpass) -W: no module named sqlalchemy.sql.and_ (top-level import by openlp.plugins.songusage.forms.songusagedetailform) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.amendthemedialog) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.plugins.songs.forms.songimportwizard) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.serviceitemeditdialog) -W: no module named openlp.core.lib.resize_image (top-level import by openlp.core.ui.maindisplay) -W: no module named openlp.core.lib.BaseListWithDnD (top-level import by openlp.plugins.custom.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.topicsdialog) -W: no module named PyQt4._qt (top-level import by PyQt4.QtGui) -W: no module named sqlalchemy.sql.update (top-level import by sqlalchemy) -W: no module named multiprocessing.current_process (delayed, conditional import by logging) -W: no module named multiprocessing.Pool (top-level import by multiprocessing.managers) -W: no module named sqlalchemy.create_engine (delayed, conditional import by sqlalchemy.schema) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.forms.importwizardform) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.core.lib.mediamanageritem) -W: no module named posix (conditional import by os) -W: no module named sqlalchemy.sql.bindparam (top-level import by sqlalchemy) -W: no module named xml.dom.DOMImplementation (top-level import by xml.dom.domreg) -W: no module named openlp.core.utils.add_actions (top-level import by openlp.core.ui.mainwindow) -W: no module named sqlalchemy.create_engine (top-level import by openlp.plugins.songs.lib.olpimport) -W: no module named multiprocessing.cpu_count (top-level import by multiprocessing.pool) -W: no module named multiprocessing.AuthenticationError (top-level import by multiprocessing.connection) -W: no module named openlp.core.ui.ThemesTab (top-level import by openlp.core.ui.settingsform) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.plugins.media.lib.mediaitem) -W: no module named sqlalchemy.orm.class_mapper (top-level import by openlp.plugins.bibles.lib.db) -W: no module named sqlalchemy.String (top-level import by sqlalchemy.databases.sybase) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named pwd (delayed, conditional import by posixpath) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.strategies) -W: no module named mx (top-level import by adodbapi.adodbapi) -W: no module named sqlalchemy.sql.alias (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.authorsdialog) -W: no module named sqlalchemy.Table (top-level import by openlp.plugins.alerts.lib.db) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.bibles.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.images.imageplugin) -W: no module named sqlalchemy.orm.mapperlib (delayed import by sqlalchemy.orm.util) -W: no module named openlp.core.lib.ServiceItem (top-level import by openlp.core.lib.rendermanager) -W: no module named openlp.core.lib.OpenLPDockWidget (top-level import by openlp.core.ui.mainwindow) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.songs.forms.songimportwizard) -W: no module named openlp.core.lib.Plugin (top-level import by openlp.plugins.songusage.songusageplugin) -W: no module named openlp.core.utils.AppLocation (top-level import by openlp.plugins.presentations.lib.presentationcontroller) -W: no module named openlp.core.lib.context_menu_action (top-level import by openlp.core.lib.spelltextedit) -W: no module named openlp.core.lib.build_icon (top-level import by openlp.core.ui.thememanager) -W: no module named openlp.core.lib.check_item_selected (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.pluginform) -W: no module named enchant.checker.SpellChecker (delayed import by enchant.checker.wxSpellCheckerDialog) -W: no module named sqlalchemy.DefaultClause (top-level import by sqlalchemy.databases.sqlite) -W: no module named openlp.core.lib.ServiceItem (top-level import by openlp.core.ui.servicemanager) -W: no module named openlp.core.lib.ItemCapabilities (top-level import by openlp.core.ui.slidecontroller) -W: no module named openlp.core.utils.get_images_filter (top-level import by openlp.plugins.images.lib.mediaitem) -W: no module named pyodbc (delayed import by sqlalchemy.databases.mssql) -W: no module named openlp.core.lib.OpenLPToolbar (top-level import by openlp.core.ui.slidecontroller) -W: no module named System (conditional import by adodbapi.adodbapi) -W: no module named openlp.core.lib.SettingsTab (top-level import by openlp.plugins.custom.lib.customtab) -W: no module named openlp.core.lib.Receiver (top-level import by openlp.plugins.bibles.lib.csvbible) -W: no module named openlp.core.lib.translate (top-level import by openlp.core.ui.generaltab) -W: no module named openlp.core.lib.ThemeLevel (top-level import by openlp.core.ui.servicemanager) -W: no module named sqlalchemy.exceptions (top-level import by sqlalchemy.orm.scoping) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.alerts.forms.alertform) -W: no module named mypyodbc (delayed import by sqlalchemy.databases.sybase) -W: no module named sqlalchemy.sql.intersect_all (top-level import by sqlalchemy) -W: no module named openlp.core.lib.translate (top-level import by openlp.plugins.presentations.lib.mediaitem) -W: __all__ is built strangely at line 0 - dummy_threading (C:\Python26\lib\dummy_threading.pyc) -W: delayed exec statement detected at line 0 - bdb (C:\Python26\lib\bdb.pyc) -W: delayed eval hack detected at line 0 - bdb (C:\Python26\lib\bdb.pyc) -W: delayed eval hack detected at line 0 - bdb (C:\Python26\lib\bdb.pyc) -W: delayed __import__ hack detected at line 0 - optparse (C:\Python26\lib\optparse.pyc) -W: delayed conditional __import__ hack detected at line 0 - pkg_resources (build/bdist.linux-i686/egg/pkg_resources.pyc) -W: delayed conditional exec statement detected at line 0 - pkg_resources (build/bdist.linux-i686/egg/pkg_resources.pyc) -W: delayed conditional __import__ hack detected at line 0 - pkg_resources (build/bdist.linux-i686/egg/pkg_resources.pyc) -W: delayed __import__ hack detected at line 0 - pkg_resources (build/bdist.linux-i686/egg/pkg_resources.pyc) -W: delayed conditional __import__ hack detected at line 0 - doctest (C:\Python26\lib\doctest.pyc) -W: delayed exec statement detected at line 0 - doctest (C:\Python26\lib\doctest.pyc) -W: delayed conditional __import__ hack detected at line 0 - doctest (C:\Python26\lib\doctest.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.orm.interfaces (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\orm\interfaces.pyc) -W: __all__ is built strangely at line 0 - tokenize (C:\Python26\lib\tokenize.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.engine (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\engine\__init__.pyc) -W: delayed __import__ hack detected at line 0 - pickle (C:\Python26\lib\pickle.pyc) -W: delayed __import__ hack detected at line 0 - pickle (C:\Python26\lib\pickle.pyc) -W: top-level conditional exec statement detected at line 0 - sqlalchemy.sql.util (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\sql\util.pyc) -W: top-level conditional exec statement detected at line 0 - sqlalchemy.sql.util (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\sql\util.pyc) -W: delayed conditional __import__ hack detected at line 0 - openlp.core.lib.pluginmanager (c:\Documents and Settings\raoul\My Documents\My Projects\openlp\movements\openlp\core\lib\pluginmanager.pyc) -W: delayed conditional exec statement detected at line 0 - multiprocessing.sharedctypes (C:\Python26\lib\multiprocessing\sharedctypes.pyc) -W: delayed __import__ hack detected at line 0 - encodings (C:\Python26\lib\encodings\__init__.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.databases.mysql (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\databases\mysql.pyc) -W: delayed exec statement detected at line 0 - sqlalchemy.orm.attributes (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\orm\attributes.pyc) -W: delayed conditional __import__ hack detected at line 0 - openlp.plugins.presentations.presentationplugin (c:\Documents and Settings\raoul\My Documents\My Projects\openlp\movements\openlp\plugins\presentations\presentationplugin.pyc) -W: delayed __import__ hack detected at line 0 - enchant.tokenize (C:\Python26\lib\site-packages\enchant\tokenize\__init__.pyc) -W: __all__ is built strangely at line 0 - multiprocessing (C:\Python26\lib\multiprocessing\__init__.pyc) -W: __all__ is built strangely at line 0 - dis (C:\Python26\lib\dis.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.databases (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\databases\__init__.pyc) -W: delayed __import__ hack detected at line 0 - win32com.server.policy (C:\Python26\lib\site-packages\win32com\server\policy.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.orm.mapper (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\orm\mapper.pyc) -W: top-level exec statement detected at line 0 - hashlib (C:\Python26\lib\hashlib.pyc) -W: top-level conditional exec statement detected at line 0 - hashlib (C:\Python26\lib\hashlib.pyc) -W: delayed conditional eval hack detected at line 0 - warnings (C:\Python26\lib\warnings.pyc) -W: delayed conditional __import__ hack detected at line 0 - warnings (C:\Python26\lib\warnings.pyc) -W: delayed exec statement detected at line 0 - cgi (C:\Python26\lib\cgi.pyc) -W: delayed __import__ hack detected at line 0 - email (C:\Python26\lib\email\__init__.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.orm (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\orm\__init__.pyc) -W: delayed __import__ hack detected at line 0 - ctypes (C:\Python26\lib\ctypes\__init__.pyc) -W: delayed __import__ hack detected at line 0 - ctypes (C:\Python26\lib\ctypes\__init__.pyc) -W: delayed conditional __import__ hack detected at line 0 - xml.dom.domreg (C:\Python26\lib\xml\dom\domreg.pyc) -W: delayed exec statement detected at line 0 - pdb (C:\Python26\lib\pdb.pyc) -W: delayed conditional eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc) -W: delayed eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc) -W: delayed conditional eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc) -W: delayed eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc) -W: delayed conditional __import__ hack detected at line 0 - unittest (C:\Python26\lib\unittest.pyc) -W: delayed conditional __import__ hack detected at line 0 - unittest (C:\Python26\lib\unittest.pyc) -W: delayed conditional __import__ hack detected at line 0 - pkgutil (C:\Python26\lib\pkgutil.pyc) -W: delayed conditional __import__ hack detected at line 0 - pkgutil (C:\Python26\lib\pkgutil.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.orm.properties (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\orm\properties.pyc) -W: delayed conditional exec statement detected at line 0 - iu (c:\Documents and Settings\raoul\My Documents\My Projects\pyinstaller\iu.pyc) -W: delayed conditional exec statement detected at line 0 - iu (c:\Documents and Settings\raoul\My Documents\My Projects\pyinstaller\iu.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy.sql (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\sql\__init__.pyc) -W: __all__ is built strangely at line 0 - collections (C:\Python26\lib\collections.pyc) -W: delayed exec statement detected at line 0 - collections (C:\Python26\lib\collections.pyc) -W: delayed __import__ hack detected at line 0 - sqlalchemy.engine.url (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\engine\url.pyc) -W: delayed exec statement detected at line 0 - multiprocessing.managers (C:\Python26\lib\multiprocessing\managers.pyc) -W: delayed exec statement detected at line 0 - socket (C:\Python26\lib\socket.pyc) -W: delayed conditional __import__ hack detected at line 0 - win32com.client.gencache (C:\Python26\lib\site-packages\win32com\client\gencache.pyc) -W: delayed __import__ hack detected at line 0 - win32com.client.gencache (C:\Python26\lib\site-packages\win32com\client\gencache.pyc) -W: delayed eval hack detected at line 0 - os (C:\Python26\lib\os.pyc) -W: __all__ is built strangely at line 0 - __future__ (C:\Python26\lib\__future__.pyc) -W: delayed __import__ hack detected at line 0 - win32com.client.makepy (C:\Python26\lib\site-packages\win32com\client\makepy.pyc) -W: delayed exec statement detected at line 0 - win32com.client.dynamic (C:\Python26\lib\site-packages\win32com\client\dynamic.pyc) -W: __all__ is built strangely at line 0 - sqlalchemy (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\__init__.pyc) -W: delayed __import__ hack detected at line 0 - xml.sax (C:\Python26\lib\xml\sax\__init__.pyc) -W: delayed eval hack detected at line 0 - gettext (C:\Python26\lib\gettext.pyc) -W: delayed eval hack detected at line 0 - sqlalchemy.util (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\util.pyc) -W: delayed exec statement detected at line 0 - sqlalchemy.util (C:\Python26\lib\site-packages\sqlalchemy-0.5.8-py2.6.egg\sqlalchemy\util.pyc) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 1900fab99..1af85853d 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -115,17 +115,30 @@ build_path = os.path.join(branch_path, u'build', u'pyi.win32', u'OpenLP') dist_path = os.path.join(branch_path, u'dist', u'OpenLP') enchant_path = os.path.join(site_packages, u'enchant') +def update_code(): + print u'Updating the code...' + os.chdir(branch_path) + bzr = Popen((u'bzr', u'update'), stdout=PIPE) + output, error = bzr.communicate() + code = bzr.wait() + if code != 0: + print output + raise Exception(u'Error updating the code') + def clean_build_directories(): - #if not os.path.exists(build_path) - for root, dirs, files in os.walk(build_path, topdown=False): - print root - for file in files: - os.remove(os.path.join(root, file)) - #os.removedirs(build_path) - for root, dirs, files in os.walk(dist_path, topdown=False): - for file in files: - os.remove(os.path.join(root, file)) - #os.removedirs(dist_path) + dist_dir = os.path.join(build_path, u'dist') + build_dir = os.path.join(build_path, u'build') + if os.path.exists(dist_dir): + for root, dirs, files in os.walk(dist_dir, topdown=False): + print root + for file in files: + os.remove(os.path.join(root, file)) + os.removedirs(dist_dir) + if os.path.exists(build_dir): + for root, dirs, files in os.walk(build_dir, topdown=False): + for file in files: + os.remove(os.path.join(root, file)) + os.removedirs(build_dir) def run_pyinstaller(): print u'Running PyInstaller...' @@ -239,6 +252,7 @@ def main(): print "PyInstaller:", pyi_build print "Inno Setup path:", innosetup_path print "Windows resources:", winres_path + update_code() #clean_build_directories() run_pyinstaller() write_version_file() diff --git a/setup.py b/setup.py index c216a17c1..a435c5496 100755 --- a/setup.py +++ b/setup.py @@ -5,8 +5,8 @@ ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 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 # @@ -79,4 +79,4 @@ OpenLP (previously openlp.org) is free church presentation software, or lyrics p entry_points=""" # -*- Entry points: -*- """ -) +) \ No newline at end of file