diff --git a/.bzrignore b/.bzrignore index 2620fea42..1d2bb8267 100644 --- a/.bzrignore +++ b/.bzrignore @@ -20,3 +20,4 @@ _eric4project openlp/core/resources.py.old *.qm resources/windows/warnOpenLP.txt +openlp.cfg diff --git a/README.txt b/README.txt index 0b26d74fc..b937e1d5f 100644 --- a/README.txt +++ b/README.txt @@ -8,12 +8,7 @@ page on the web site:: http://openlp.org/en/download.html If you're looking for how to contribute to OpenLP, then please look at the -contribution page on the web site:: - - http://openlp.org/en/documentation/introduction/contributing.html - -If you've looked at that page, and are wanting to help develop, test or -translate OpenLP, have a look at the OpenLP wiki:: +OpenLP wiki:: http://wiki.openlp.org/ diff --git a/copyright.txt b/copyright.txt index 0ef481f2b..0fb988622 100644 --- a/copyright.txt +++ b/copyright.txt @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/documentation/PluginDevelopersGuide.txt b/documentation/PluginDevelopersGuide.txt deleted file mode 100644 index 79e8ef1b2..000000000 --- a/documentation/PluginDevelopersGuide.txt +++ /dev/null @@ -1,8 +0,0 @@ -openlp.org 2.x Plugin Developer's Guide -======================================================================== - -Introduction ------------- -This document will show you how to write your own module for openlp.org. -openlp.org has been written in plugins so that you can add your own -functionality to openlp.org. diff --git a/documentation/api/Makefile b/documentation/api/Makefile deleted file mode 100644 index 70c821142..000000000 --- a/documentation/api/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf build/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html - @echo - @echo "Build finished. The HTML pages are in build/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml - @echo - @echo "Build finished. The HTML pages are in build/dirhtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in build/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in build/qthelp, like this:" - @echo "# qcollectiongenerator build/qthelp/OpenLP.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile build/qthelp/OpenLP.qhc" - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex - @echo - @echo "Build finished; the LaTeX files are in build/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes - @echo - @echo "The overview file is in build/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in build/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in build/doctest/output.txt." diff --git a/documentation/api/make.bat b/documentation/api/make.bat deleted file mode 100644 index 8d21b45ce..000000000 --- a/documentation/api/make.bat +++ /dev/null @@ -1,112 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -set SPHINXBUILD=sphinx-build -set ALLSPHINXOPTS=-d build/doctrees %SPHINXOPTS% source -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (build\*) do rmdir /q /s %%i - del /q /s build\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% build/html - echo. - echo.Build finished. The HTML pages are in build/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% build/dirhtml - echo. - echo.Build finished. The HTML pages are in build/dirhtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% build/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% build/json - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% build/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in build/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% build/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in build/qthelp, like this: - echo.^> qcollectiongenerator build\qthelp\OpenLP.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile build\qthelp\OpenLP.ghc - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% build/latex - echo. - echo.Build finished; the LaTeX files are in build/latex. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% build/changes - echo. - echo.The overview file is in build/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% build/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ -or in build/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% build/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in build/doctest/output.txt. - goto end -) - -:end diff --git a/documentation/api/source/conf.py b/documentation/api/source/conf.py deleted file mode 100644 index 51ecfee0c..000000000 --- a/documentation/api/source/conf.py +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- -# -# OpenLP documentation build configuration file, created by -# sphinx-quickstart on Fri Jul 10 17:20:40 2009. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import os -import sys - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..'))) - -# -- General configuration ----------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -source_encoding = 'utf-8' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'OpenLP' -copyright = u'2004-2010, Raoul Snyman' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '2.0' -# The full version, including alpha/beta/rc tags. -release = '1.9.3' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = False - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - 'sidebarbgcolor': '#3a60a9', - 'relbarbgcolor': '#203b6f', - 'footerbgcolor': '#26437c', - 'headtextcolor': '#203b6f', - 'linkcolor': '#26437c', - 'sidebarlinkcolor': '#ceceff' -} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = 'OpenLP 2.0 Developer API' - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'OpenLP-2.0-api' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'OpenLP.tex', u'OpenLP 2.0 Developer API', - u'Raoul Snyman', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_use_modindex = True diff --git a/documentation/api/source/core/index.rst b/documentation/api/source/core/index.rst deleted file mode 100644 index 8555e1ebe..000000000 --- a/documentation/api/source/core/index.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. _core-index: - -:mod:`core` Module -================== - -.. automodule:: openlp.core - :members: - -.. toctree:: - :maxdepth: 2 - - lib - theme - ui - utils \ No newline at end of file diff --git a/documentation/api/source/core/lib.rst b/documentation/api/source/core/lib.rst deleted file mode 100644 index 6be95de5f..000000000 --- a/documentation/api/source/core/lib.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. _core-lib: - -Object Library -============== - -.. automodule:: openlp.core.lib - :members: - -:mod:`EventReceiver` --------------------- - -.. autoclass:: openlp.core.lib.eventreceiver.EventReceiver - :members: - -:mod:`ListWidgetWithDnD` ------------------------- - -.. autoclass:: openlp.core.lib.listwidgetwithdnd.ListWidgetWithDnD - :members: - -:mod:`MediaManagerItem` ------------------------ - -.. autoclass:: openlp.core.lib.mediamanageritem.MediaManagerItem - :members: - -:mod:`Plugin` -------------- - -.. autoclass:: openlp.core.lib.plugin.Plugin - :members: - -:mod:`PluginManager` --------------------- - -.. autoclass:: openlp.core.lib.pluginmanager.PluginManager - :members: - -:mod:`Renderer` ---------------- - -.. autoclass:: openlp.core.lib.renderer.Renderer - :members: - -:mod:`RenderManager` --------------------- - -.. autoclass:: openlp.core.lib.rendermanager.RenderManager - :members: - -:mod:`ServiceItem` ------------------- - -.. autoclass:: openlp.core.lib.serviceitem.ServiceItem - :members: - -:mod:`SettingsTab` ------------------- - -.. autoclass:: openlp.core.lib.settingstab.SettingsTab - :members: - -:mod:`OpenLPToolbar` --------------------- - -.. autoclass:: openlp.core.lib.toolbar.OpenLPToolbar - :members: diff --git a/documentation/api/source/core/theme.rst b/documentation/api/source/core/theme.rst deleted file mode 100644 index 3621c6581..000000000 --- a/documentation/api/source/core/theme.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _core-theme: - -Theme Function Library -====================== - -.. automodule:: openlp.core.theme - :members: - -.. autoclass:: openlp.core.theme.theme.Theme - :members: diff --git a/documentation/api/source/core/ui.rst b/documentation/api/source/core/ui.rst deleted file mode 100644 index 63db7478e..000000000 --- a/documentation/api/source/core/ui.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _core-ui: - -User Interface -============== - -.. automodule:: openlp.core.ui - -Main Windows ------------- - -.. autoclass:: openlp.core.ui.mainwindow.MainWindow - :members: - -.. autoclass:: openlp.core.ui.maindisplay.MainDisplay - :members: - -Managers --------- - -.. autoclass:: openlp.core.ui.servicemanager.ServiceManager - :members: - -.. autoclass:: openlp.core.ui.mediadockmanager.MediaDockManager - :members: - -.. autoclass:: openlp.core.ui.thememanager.ThemeManager - :members: diff --git a/documentation/api/source/core/utils.rst b/documentation/api/source/core/utils.rst deleted file mode 100644 index d0c6a672b..000000000 --- a/documentation/api/source/core/utils.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. _core-utils: - -Utilities -========= - -.. automodule:: openlp.core.utils - :members: diff --git a/documentation/api/source/index.rst b/documentation/api/source/index.rst deleted file mode 100644 index e1aeebbab..000000000 --- a/documentation/api/source/index.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. OpenLP documentation master file, created by - sphinx-quickstart on Fri Jul 10 17:20:40 2009. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome -======= - -Welcome to the OpenLP 2.0 API Documentation! In here you will find all -information relating to OpenLP's core classes, core plugins, and anything else -deemed necessary or interesting by the developers. - -Contents: - -.. toctree:: - :maxdepth: 2 - - core/index - plugins/index - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/documentation/api/source/plugins/alerts.rst b/documentation/api/source/plugins/alerts.rst deleted file mode 100644 index e7cf33d63..000000000 --- a/documentation/api/source/plugins/alerts.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. _plugins-alerts: - -Alerts Plugin -============= - -.. automodule:: openlp.plugins.alerts - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.alerts.alertsplugin.AlertsPlugin - :members: - -Forms ------ - -.. automodule:: openlp.plugins.alerts.forms - :members: - -.. autoclass:: openlp.plugins.alerts.forms.alertform.AlertForm - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.alerts.lib - :members: - -.. automodule:: openlp.plugins.alerts.lib.db - :members: diff --git a/documentation/api/source/plugins/bibles.rst b/documentation/api/source/plugins/bibles.rst deleted file mode 100644 index c89f9c6ae..000000000 --- a/documentation/api/source/plugins/bibles.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _plugins-bibles: - -Bibles Plugin -============= - -.. automodule:: openlp.plugins.bibles - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.bibles.bibleplugin.BiblePlugin - :members: - -Forms ------ - -.. automodule:: openlp.plugins.bibles.forms - :members: - -.. autoclass:: openlp.plugins.bibles.forms.bibleimportform.BibleImportForm - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.bibles.lib - :members: - -.. automodule:: openlp.plugins.bibles.lib.db - :members: - -.. automodule:: openlp.plugins.bibles.lib.biblestab - :members: - -.. automodule:: openlp.plugins.bibles.lib.manager - :members: - -.. automodule:: openlp.plugins.bibles.lib.mediaitem - :members: - -Bible Importers ---------------- - -.. automodule:: openlp.plugins.bibles.lib.csvbible - :members: - -.. automodule:: openlp.plugins.bibles.lib.http - :members: - -.. automodule:: openlp.plugins.bibles.lib.osis - :members: - -.. automodule:: openlp.plugins.bibles.lib.opensong - :members: diff --git a/documentation/api/source/plugins/custom.rst b/documentation/api/source/plugins/custom.rst deleted file mode 100644 index f50b86d41..000000000 --- a/documentation/api/source/plugins/custom.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _plugins-custom: - -Custom Slides Plugin -==================== - -.. automodule:: openlp.plugins.custom - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.custom.customplugin.CustomPlugin - :members: - -Forms ------ - -.. automodule:: openlp.plugins.custom.forms - :members: - -.. autoclass:: openlp.plugins.custom.forms.editcustomform.EditCustomForm - :members: - -.. autoclass:: openlp.plugins.custom.forms.editcustomslideform.EditCustomSlideForm - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.custom.lib - :members: - -.. automodule:: openlp.plugins.custom.lib.mediaitem - :members: diff --git a/documentation/api/source/plugins/images.rst b/documentation/api/source/plugins/images.rst deleted file mode 100644 index 1007fc64c..000000000 --- a/documentation/api/source/plugins/images.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. _plugins-images: - -Images Plugin -============= - -.. automodule:: openlp.plugins.images - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.images.imageplugin.ImagePlugin - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.images.lib - :members: - -.. automodule:: openlp.plugins.images.lib.mediaitem - :members: diff --git a/documentation/api/source/plugins/index.rst b/documentation/api/source/plugins/index.rst deleted file mode 100644 index 78126ff9e..000000000 --- a/documentation/api/source/plugins/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. _plugins-index: - -Plugins -======= - -.. automodule:: openlp.plugins - :members: - -.. toctree:: - :maxdepth: 2 - - songs - bibles - presentations - media - images - custom - remotes - songusage - alerts diff --git a/documentation/api/source/plugins/media.rst b/documentation/api/source/plugins/media.rst deleted file mode 100644 index a8486c9b4..000000000 --- a/documentation/api/source/plugins/media.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. _plugins-media: - -Media Plugin -============ - -.. automodule:: openlp.plugins.media - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.media.mediaplugin.MediaPlugin - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.media.lib - :members: - -.. automodule:: openlp.plugins.media.lib.mediaitem - :members: diff --git a/documentation/api/source/plugins/presentations.rst b/documentation/api/source/plugins/presentations.rst deleted file mode 100644 index dd688ddf6..000000000 --- a/documentation/api/source/plugins/presentations.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. _plugins-presentations: - -Presentations Plugin -==================== - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.presentations.presentationplugin.PresentationPlugin - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.presentations.lib - :members: - -.. automodule:: openlp.plugins.presentations.lib.mediaitem - :members: - -.. automodule:: openlp.plugins.presentations.lib.presentationtab - :members: - -.. automodule:: openlp.plugins.presentations.lib.messagelistener - :members: - -.. automodule:: openlp.plugins.presentations.lib.presentationcontroller - :members: - -Presentation Application Controllers ------------------------------------- - -.. automodule:: openlp.plugins.presentations.lib.impresscontroller - :members: - -.. automodule:: openlp.plugins.presentations.lib.pptviewcontroller - :members: - -.. automodule:: openlp.plugins.presentations.lib.powerpointcontroller - :members: diff --git a/documentation/api/source/plugins/remotes.rst b/documentation/api/source/plugins/remotes.rst deleted file mode 100644 index 0bb05b8b9..000000000 --- a/documentation/api/source/plugins/remotes.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. _plugins-remotes: - -Remotes Plugin -============== - -.. automodule:: openlp.plugins.remotes - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.remotes.remoteplugin.RemotesPlugin - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.remotes.lib - :members: - -.. autoclass:: openlp.plugins.remotes.lib.httpserver.HttpConnection - :members: - -.. autoclass:: openlp.plugins.remotes.lib.httpserver.HttpResponse - :members: diff --git a/documentation/api/source/plugins/songs.rst b/documentation/api/source/plugins/songs.rst deleted file mode 100644 index a9a3a8219..000000000 --- a/documentation/api/source/plugins/songs.rst +++ /dev/null @@ -1,97 +0,0 @@ -.. _plugins-songs: - -Songs Plugin -============ - -.. automodule:: openlp.plugins.songs - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.songs.songsplugin.SongsPlugin - :members: - -Forms ------ - -.. automodule:: openlp.plugins.songs.forms - :members: - -.. autoclass:: openlp.plugins.songs.forms.authorsform.AuthorsForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.editsongform.EditSongForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.editverseform.EditVerseForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.songbookform.SongBookForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.songimportform.SongImportForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.songmaintenanceform.SongMaintenanceForm - :members: - -.. autoclass:: openlp.plugins.songs.forms.topicsform.TopicsForm - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.songs.lib - :members: - -.. automodule:: openlp.plugins.songs.lib.db - :members: - -.. automodule:: openlp.plugins.songs.lib.importer - :members: - -.. automodule:: openlp.plugins.songs.lib.mediaitem - :members: - -.. automodule:: openlp.plugins.songs.lib.songimport - :members: - -.. automodule:: openlp.plugins.songs.lib.songstab - :members: - -.. automodule:: openlp.plugins.songs.lib.xml - :members: - -Song Importers --------------- - -.. automodule:: openlp.plugins.songs.lib.cclifileimport - :members: - -.. automodule:: openlp.plugins.songs.lib.ewimport - :members: - -.. autoclass:: openlp.plugins.songs.lib.ewimport.FieldDescEntry - :members: - -.. automodule:: openlp.plugins.songs.lib.olp1import - :members: - -.. automodule:: openlp.plugins.songs.lib.olpimport - :members: - -.. automodule:: openlp.plugins.songs.lib.oooimport - :members: - -.. automodule:: openlp.plugins.songs.lib.opensongimport - :members: - -.. automodule:: openlp.plugins.songs.lib.sofimport - :members: - -.. automodule:: openlp.plugins.songs.lib.songbeamerimport - :members: - -.. automodule:: openlp.plugins.songs.lib.wowimport - :members: diff --git a/documentation/api/source/plugins/songusage.rst b/documentation/api/source/plugins/songusage.rst deleted file mode 100644 index e4804ea34..000000000 --- a/documentation/api/source/plugins/songusage.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _plugins-songusage: - -Song Usage Plugin -================= - -.. automodule:: openlp.plugins.songusage - :members: - -Plugin Class ------------- - -.. autoclass:: openlp.plugins.songusage.songusageplugin.SongUsagePlugin - :members: - -Forms ------ - -.. automodule:: openlp.plugins.songusage.forms - :members: - -.. autoclass:: openlp.plugins.songusage.forms.songusagedeleteform.SongUsageDeleteForm - :members: - -.. autoclass:: openlp.plugins.songusage.forms.songusagedetailform.SongUsageDetailForm - :members: - -Helper Classes & Functions --------------------------- - -.. automodule:: openlp.plugins.songusage.lib - :members: - -.. automodule:: openlp.plugins.songusage.lib.db - :members: diff --git a/documentation/manual.txt b/documentation/manual.txt new file mode 100644 index 000000000..55a3f7d98 --- /dev/null +++ b/documentation/manual.txt @@ -0,0 +1,7 @@ +OpenLP Manual +============= + +If you're reading this file, you're probably looking for the OpenLP manual. The +manual is hosted online at http://manual.openlp.org/. If you want to help with +the manual, contact the OpenLP team via IRC in the #openlp.org channel on the +Freenode network. diff --git a/documentation/manual/Makefile b/documentation/manual/Makefile deleted file mode 100644 index 70c821142..000000000 --- a/documentation/manual/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf build/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html - @echo - @echo "Build finished. The HTML pages are in build/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml - @echo - @echo "Build finished. The HTML pages are in build/dirhtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in build/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in build/qthelp, like this:" - @echo "# qcollectiongenerator build/qthelp/OpenLP.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile build/qthelp/OpenLP.qhc" - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex - @echo - @echo "Build finished; the LaTeX files are in build/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes - @echo - @echo "The overview file is in build/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in build/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in build/doctest/output.txt." diff --git a/documentation/manual/make.bat b/documentation/manual/make.bat deleted file mode 100644 index 20bff1ee7..000000000 --- a/documentation/manual/make.bat +++ /dev/null @@ -1,112 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -set SPHINXBUILD=sphinx-build -set ALLSPHINXOPTS=-d build/doctrees %SPHINXOPTS% source -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (build\*) do rmdir /q /s %%i - del /q /s build\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% build/html - echo. - echo.Build finished. The HTML pages are in build/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% build/dirhtml - echo. - echo.Build finished. The HTML pages are in build/dirhtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% build/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% build/json - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% build/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in build/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% build/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in build/qthelp, like this: - echo.^> qcollectiongenerator build\qthelp\OpenLP.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile build\qthelp\OpenLP.ghc - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% build/latex - echo. - echo.Build finished; the LaTeX files are in build/latex. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% build/changes - echo. - echo.The overview file is in build/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% build/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ -or in build/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% build/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in build/doctest/output.txt. - goto end -) - -:end diff --git a/documentation/manual/source/bibles.rst b/documentation/manual/source/bibles.rst deleted file mode 100644 index 41b3933aa..000000000 --- a/documentation/manual/source/bibles.rst +++ /dev/null @@ -1,180 +0,0 @@ -====== -Bibles -====== - -Managing Bibles in OpenLP is a relatively simple process. There are also -converters provided to get data from other formats into OpenLP. - -Bible Importer -============== - -If you are using an earlier version of OpenLP or, come from another software -package, you may be able to convert your existing database to work in OpenLP -2.0. To access the Bible Importer :menuselection:`File --> Import --> Bible`. -You may also enter the Bible Importer by clicking the :guilabel:`Import Icon:` - -.. image:: pics/themeimportexport.png - -You will see the Bible Importer window, click :guilabel:`Next`. - -.. image:: pics/bibleimport01.png - -After clicking :guilabel:`Next` you can select from the various types of -software that OpenLP will convert Bibles from. - -.. image:: pics/bibleimport02.png - -Click on the file folder icon to choose the file of the Bible database you -want to import. See the following sections for information on the different -formats that OpenLP will import. - -Importing from OpenLP Version 1 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Converting from OpenLP Version 1 is a simple process. First you will need to -locate your Version 1 Bibles. - -Windows XP:: - - C:\Documents and Settings\All Users\Application Data\openlp.org\Data\Bibles\ - -Windows Vista / Windows 7:: - - C:\ProgramData\openlp.org\Data\Bibles\ - -OpenLP Version 1 Bibles have the `.bible` file extension. After selecting -all of the OpenLP Version 1 Bibles you want to convert, click :guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter your Bible name and copyright details. Click :guilabel:`Next`. It may -take some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -When the import has finished click :guilabel:`Finish` and you should be -ready to use your OpenLP Version 1 Bibles. - -Importing OSIS Bibles -^^^^^^^^^^^^^^^^^^^^^ - -**About OSIS Formatted Bibles** - -OSIS is a format intended to provide a common format for Bibles. More -information can be found out here: http://www.bibletechnologies.net/ - -If you have any software installed that is part of the Sword Project -http://www.crosswire.org/sword/index.jsp it can be easily converted. - -Importing OSIS files is very simple. Select your OSIS Bible file and click -:guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter you Bible name and copyright details. Click :guilabel:`Next`. It may take -some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -Click :guilabel:`Finish` and you should be ready to use your OpenLP Version -1 Bibles. - -You can use the commands below convert Bibles from that software to OSIS format. - -The following commands are used in all platforms and the commands are case -sensitive across all platforms. To convert a Bible using Command Prompt in -Windows or a Terminal in Linux or MAC you would type:: - - mod2osis biblename > biblename.osis - -For example: if I wanted to convert a King James Version Bible I would type -something similar to this:: - - mod2osis KJV > kjv.osis - -You may also wish to dictate a file location for the conversion to place the -osis file for example:: - - mod2osis KJV > /home/user/bibles/kjv.osis - -Importing OpenSong Bibles -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Converting from OpenSong you will need to locate your bibles database. In the -later versions of OpenSong you are asked to define the location of this. The -songs will be located in a folder named :guilabel:`Bibles`. This folder should -contain files with all your bibles in them without a file extension. (file.xmms). -When you have located this folder you will need to select the bible from the -folder. - -You may also import downloaded bibles from OpenSong. The process is the same, -except you will need to extract the bible from a zip file. This is usually done -by right clicking on the downloaded file and select `Extract` or `Extract Here`. - -After selecting the OpenSong Bibles you want to convert, click :guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter your Bible name and copyright details. Click :guilabel:`Next`. It may -take some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -When the import has finished then click :guilabel:`Finish` and you should now be -ready to use your OpenSong Bibles. - -Importing Web Download Bibles -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -**About Web Download** - -OpenLP provides a Web Download method to import Bibles when you do not have a -locally installed Bible available. The Web Download method registers the Bible -in OpenLP like the other bibles only it downloads the verses as you need them. -This import is not meant to be used as your sole source for Bibles, but rather -as another option and does require an internet connection. - -To use the web download feature select web download from the import wizard. - -.. image:: pics/bibleimport01.png - -You can select from several options of location to download from and also -what Bible translation you need. You will probably want to choose the location -from where you get the best performance or has the translation you need. - -.. image:: pics/webbible1.png - -You can also select a proxy server if needed from the `Proxy Server` tab. Your -network administrator will know if this is necessary, in most cases this will -not be needed. - -.. image:: pics/webbibleproxy1.png - -After selecting your download location and the Bible you wish to use, click -:guilabel:`Next` When your import is completed click :guilabel:`Finish` - -.. image:: pics/biblewebcomplete.png - -You should now be ready to use the web bible. - -Importing CSV formatted Bibles -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you have a Bible in .csv format OpenLP can import it. CSV Bibles will -consist of two files a `books` file and a `verse` file. - -Select CSV from the list of Bible types to import. - -.. image:: pics/bibleimport02.png - -You are now ready to select your .csv files. You will need to select both your -books and verse file location. - -.. image:: pics/csvimport1.png - -After you have selected the file locations you can click :guilabel:`Next` - -.. image:: pics/bibleimportfinished1.png - -Click :guilabel:`Finish` and you should now be ready to use your imported CSV -Bible \ No newline at end of file diff --git a/documentation/manual/source/conf.py b/documentation/manual/source/conf.py deleted file mode 100644 index 2e9c0a88f..000000000 --- a/documentation/manual/source/conf.py +++ /dev/null @@ -1,228 +0,0 @@ -# -*- coding: utf-8 -*- -# -# OpenLP documentation build configuration file, created by -# sphinx-quickstart on Thu Sep 30 21:24:54 2010. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'OpenLP' -copyright = u'2004 - 2011, Raoul Snyman' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '2.0' -# The full version, including alpha/beta/rc tags. -release = '2.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -if sys.argv[2] == 'qthelp' or sys.argv[2] == 'htmlhelp': - html_theme = 'openlp_qthelp' -else: - html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -if sys.argv[2] == 'html': - html_theme_options = { - 'sidebarbgcolor': '#3a60a9', - 'relbarbgcolor': '#203b6f', - 'footerbgcolor': '#26437c', - 'headtextcolor': '#203b6f', - 'linkcolor': '#26437c', - 'sidebarlinkcolor': '#ceceff' - } - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = [os.path.join(os.path.abspath('..'), 'themes')] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = u'OpenLP 2.0 Reference Manual' - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = 'pics/logo.png' - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -html_favicon = 'pics/openlp.ico' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'OpenLP' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'OpenLP.tex', u'OpenLP Reference Manual', - u'Wesley Stout', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'openlp', u'OpenLP Reference Manual', - [u'Wesley Stout'], 1) -] diff --git a/documentation/manual/source/configure.rst b/documentation/manual/source/configure.rst deleted file mode 100644 index 9b4cc6f8f..000000000 --- a/documentation/manual/source/configure.rst +++ /dev/null @@ -1,363 +0,0 @@ -================== -Configuring OpenLP -================== - -OpenLP has many options you can configure to suit your needs. Most options are -self-explanatory and we will quickly review them. - -To configure OpenLP, click on :menuselection:`Settings --> Configure OpenLP...` - -The plugins you have activated will have configure options. If all the plugins -are activated there will be 9 tabs across the top you can configure. - -General Tab -=========== - -.. image:: pics/configuregeneral.png - -Monitors -^^^^^^^^ -To select the monitor you want to display OpenLP on, click the drop-down box -and choose. - -Display if a single screen -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -When this box is selected, you will be able to see your display on a separate -window on the monitor you are using. Click the display and push the Esc key -on your keyboard to close the display window. - -Application Startup -^^^^^^^^^^^^^^^^^^^ - -**Show blank screen warning:** - -When this box is selected, you will get a warning when opening OpenLP that the -output display has been blanked. You may have blanked it and shut down the -program and this will warn you it is still blanked. - -**Automatically open the last service:** - -When this box is selected, OpenLP will remember the last service you were -working on when you closed the program. - -**Show the splash screen:** - -When this box it selected, the OpenLP logo will be displayed in the center of -the screen until the program opens. This is useful to know if the program is -opening. - -Application Settings -^^^^^^^^^^^^^^^^^^^^ - -**Prompt to save before starting a new service** - -When this box is selected, OpenLP will prompt you to save the service you are -working on before starting a new service. - -**Automatically preview next item in service** - -When this box is selected, the next item in the Service Manager will show in the -Preview pane. - -**Slide loop delay** - -This setting is the time delay in seconds if you want to continuously loop -images, verses, or lyrics. This control timer is also accessible on the "live -toolbar. - -CCLI Details -^^^^^^^^^^^^ - -**CCLI number** - -If you subscribe to CCLI, this box is for your License number. This number is -also displayed in the Song Footer box. - -Display Position -^^^^^^^^^^^^^^^^ -This setting will default to your computer monitor. It will override the output -display combo box. If your projector display is different, select the Override -display position and make the changes here to match your projector display. This -option also comes in handy when you have the "Display if a single screen" box -selected. You can make the display smaller so it does not cover your whole -screen. - -Themes Tab -========== - -.. image:: pics/configurethemes.png - -Global Theme -^^^^^^^^^^^^ - -Choose the theme you would like to use as your default global theme from the -drop down box. The theme selected appears below. The global theme use is -determined by the Theme Level you have selected. - -Theme Level -^^^^^^^^^^^ - -Choose from one of three options for the default use of your theme. - -**Song Level:** - -With this level selected, your theme is associated with the song. The theme is -controlled by adding or editing a song in the Song editor and your song theme -takes priority. If your song does not have a theme associated with it, OpenLP -will use the theme set in the Service Manager. - -**Service Level:** - -With this level selected, your theme is controlled at the top of the Service -Manager. Select your default service theme there. This setting will override -your Song theme. - -**Global Level:** - -With this level selected, all songs and verses will use the theme selected on -the left in the Global Theme drop down. - -Advanced Tab -============ - -.. image:: pics/configureadvanced.png - - -UI Settings (user interface) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -**Number of recent files to display:** - -Set this number for OpenLP to remember your last files open. These will show -under File. - -**Remember active media manager tab on startup:** - -With this box selected OpenLP media manager will open on the same tab that it -was closed on. - -**Double-click to send items straight to live:** - -With this box selected, double-clicking on anything in the Media Manager will -immediately send it live instead of to Preview. - -**Expand new service items on creation:** - -With this box selected, everything you add to the Service Manager will be -expanded so you can see all the verses, lyrics and presentations, line by line. -When you open OpenLP, everything will automatically be expanded in the Service -Manager. - -Songs Tab -========= - -.. image:: pics/configuresongs.png - -Songs Mode -^^^^^^^^^^ - -**Enable search as you type:** - -With this box selected, Media Manager/Songs will display the song you are -searching for as you are typing. If this box is not selected, you need to type -in your search box and then click on the Search button. - -**Display verses on live tool bar:** - -With this box selected, a Go To drop down box is available on the live toolbar -to select any part of the verse type you want displayed live. - -**Update service from song edit:** - -With this box selected and you edit a song in the media manager, the results -will also change the song if it is added to the Service Manager. If this box -is not selected, your song edit changes will only be available in the Service -Manager if you add it again. - -**Add missing songs when opening service:** - -With this box selected, when you open an order of service created on another -computer, or if one of the songs are no longer in your Media Manager, it will -automatically enter the song in your Songs Media Manager. If this box is not -checked, the song is available in the service but will not be added to the -Media Manager. - -Bibles Tab -========== - -.. image:: pics/configurebibles.png - -Verse Display -^^^^^^^^^^^^^ - -**Only show new chapter numbers:** - -With this box selected, the live display of the verse will only show the -chapter number and verse for the first verse, and just the verse numbers after -that. If the chapter changes, the new chapter number will be displayed with the -verse number for the first line, and only the verse number displayed thereafter. - -**Display style:** - -This option will put brackets around the chapter and verse numbers. You may -select No Brackets or your bracket style from the drop down menu. - -**Layout style:** - -There are three options to determine how your Bible verses are displayed. - -`Verse Per Slide` will display one verse per slide. -`Verse Per Line` will start each verse on a new line until the slide is full. -`Continuous` will run all verses together separated by verse number and chapter -if chapter is selected to show above. - -**Note: Changes do not affect verses already in the service.** - -**Display second Bible verses:** - -OpenLP has the ability to display the same verse in two different Bible -versions for comparison. With this option selected, there will be a Second -choice in the Bible Media Manager to use this option. Verses will display with -one verse per slide with the second Bible verse below. - -**Bible theme:** - -You may select your default Bible theme from this drop down box. This selected -theme will only be used if your `Theme Level` is set at `Song Level`. - -**Note: Changes do not affect verses already in the service.** - - -Presentations Tab -================= - -.. image:: pics/configurepresentations.png - -Available Controllers -^^^^^^^^^^^^^^^^^^^^^ - -OpenLP has the ability to import OpenOffice Impress or Microsoft PowerPoint -presentations, and use Impress, PowerPoint, or PowerPoint Viewer to display -them and they are controlled from within OpenLP. Please remember that in order -to use this function, you must have Impress, PowerPoint or PowerPoint Viewer -installed on your computer because OpenLP uses these programs to open and run -the presentation. You may select your default controllers here in this tab. - -Advanced -^^^^^^^^ - -**Allow presentation application to be overridden** - -With this option selected, you will see `Present using` area with a dropdown -box on the Presentations toolbar in Media Manager which gives you the option -to select the presentation program you want to use. - -Media Tab -========= - -.. image:: pics/configuremedia.png - -Media Display -^^^^^^^^^^^^^ - -**Use Phonon for video playback** - -If you are having trouble displaying media, selecting this box could help. - -Custom Tab: -=========== - -.. image:: pics/configurecustom.png - -Custom Display -^^^^^^^^^^^^^^ - -**Display Footer** - -With this option selected, your Custom slide Title will be displayed in the -footer. - -**Note: If you have an entry in the Credits box of your custom slide, title and -credits will always be displayed.** - -Alerts Tab -========== - -.. image:: pics/configurealerts.png - -Font -^^^^ - -**Font name:** - -Choose your desired font from the drop down menu - -**Font color:** - -Choose your font color here. - -**Background color:** - -Choose the background color the font will be displayed on. - -**Font size:** - -This will adjust the size of the font. - -**Alert timeout:** - -This setting will determine how long your Alert will be displayed on the screen, -in seconds. - -**Location:** - -Choose the location where you want the alert displayed on the -screen, Top, Middle or Bottom. - -**Preview:** - -Your choices will be displayed here. - -Remote Tab -=========== - -.. image:: pics/configureremotes.png - -OpenLP gives you the ability to control your Service Manager from a remote -computer through a web browser. This was written actually for a nursery or day -care where a "come and get YYYY" message could be triggered remotely. It has -now become an interface to control the whole service remotely. - -An example of one use for this would be if you have a missionary with a -PowerPoint presentation, it may be easier for that missionary to remotely -connect to your projection computer and change the slides when he wants to. - -To use this feature you will need to be on a network, wired or wireless, know -the IP address of the projection computer and enter that IP address and port -number in the remote computer's web browser. - -To find your projection computer's IP address for Windows, open Command Prompt -and type in “ipconfig” (without quotations), press Enter key and your IP -address will show. In Linux, open Terminal and type “ifconfig” (without -quotations), and use the IP address after “inet addr:” The IP address will -always have a format of xxx.xxx.xxx.xxx where x is one to three digits long. - -Server Settings -^^^^^^^^^^^^^^^ - -Serve on IP address: Put your projection computer's IP address here. - -Port Number -^^^^^^^^^^^ - -You can use the default port number or change it to another number. - -With these two settings written down, open a web browser in the remote computer -and enter the IP address followed by a colon and then the port number, ie: -192.168.1.104:4316 then press enter. You should now have access to the OpenLP -Controller. If it does not come up, you either entered the wrong IP address, -port number or one or both computer's are not connected to the network. - - - diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst deleted file mode 100644 index 3e1a8d210..000000000 --- a/documentation/manual/source/dualmonitors.rst +++ /dev/null @@ -1,221 +0,0 @@ -================== -Dual Monitor Setup -================== - -The first step in getting OpenLP working on your system is to setup your -computer properly for dual monitors. This is not very difficult, but the steps -will vary depending on operating system. - -Most modern computers have the ability for dual monitors. To be certain, -check your computer's documentation. A typical desktop computer capable of dual -monitors will have two of, or a combination of the two, connectors below. - -**VGA** - -.. image:: pics/vga.png - -**DVI** - -.. image:: pics/dvi.png - -A laptop computer setup only varies slightly. Generally you will need only one -of the outputs pictured above since your laptop screen serves as one of the -monitors. Sometimes with older laptops a key stroke generally involving the -:kbd:`Fn` key and another key is required to enable the second monitor on -laptops. - -Some computers also incorporate the use of :abbr:`S-Video (Separate Video)` or -:abbr:`HDMI (High-Definition Multimedia Interface)` connections. - -A typical OpenLP setup consist of your normal single monitor, with your -projector hooked up to your computer as the second monitor. With the option of -extending your desktop across the second monitor, or your operating system's -equivalent. - -Microsoft Windows ------------------ - -Dual monitor setup is similar among all the currently supported Windows -releases (XP, Vista, Windows 7), but does vary slightly from one release to the -next. - -Windows 7 -^^^^^^^^^ - -Windows 7 has using a projector in mind. Simply connect your projector and -press :kbd:`Windows+P`. - -The more traditional way is also fairly straight forward. Go to -:guilabel:`Control Panel` and click on :guilabel:`Display`. This will open up -the :guilabel:`Display` dialog. You may also bypass this step by a right click -on a blank area on your desktop and selecting :guilabel:`Resolution`. - -.. image:: pics/winsevendisplay.png - -Then click on the :guilabel:`Adjust resolution` link in the left pane. Enable -your projector and make sure that the selected value for :guilabel:`Multiple -displays` is :guilabel:`Extend these displays`. - -.. image:: pics/winsevenresolution.png - -Windows Vista -^^^^^^^^^^^^^ - -From :guilabel:`Control Panel` click on :guilabel:`Personalize`, or right click -a blank place on the desktop and click :guilabel:`Personalization`. - -.. image:: pics/vistapersonalize.png - -From the :guilabel:`Personalization` window click on :guilabel:`Display -Settings`. Click on the monitor that represents your projector and make sure -you have checked :guilabel:`Extend the desktop onto this monitor`. - -.. image:: pics/vistadisplaysettings.png - -Windows XP -^^^^^^^^^^ - -From :guilabel:`Control Panel` select :guilabel:`Display`, or right click on a -blank area of the desktop and select :guilabel:`Properties`. From the -:guilabel:`Display Properties` window click on the :guilabel:`Settings` tab. -Click on the monitor that represents your projector and make sure you have -checked :guilabel:`Extend my Windows desktop onto this monitor`. - -.. image:: pics/xpdisplaysettings.png - -Linux ------ - -Due to the vast varieties of hardware, distributions, desktops, and drivers -this is not an exhaustive guide to dual monitor setup on Linux. This guide -assumes you have properly set up any proprietary drivers if needed. You -should seek out your distributions documentation if this general guide does not -work. - -GNOME -^^^^^ - -This guide is for users of the GNOME desktop who do not use proprietary drivers. -From most distros go to :menuselection:`System --> Preferences --> Display -Settings (Monitors)`. Set up your projector with the correct resolution and make -sure that :guilabel:`Same image on all monitors` is **unchecked**. - -.. image:: pics/gnome.png - -KDE -^^^ - -This guide is for users of the KDE desktop who do not use proprietary drivers. -From most distros click the Kick Off menu and navigate to -:guilabel:`System Settings` - -.. image:: pics/kdesystemsettings.png - -Click on the display and monitor icon. - -.. image:: pics/kdedisplay.png - -From here you will need to set up your projector with the appropriate -resolution, and position. OpenLP works best projecting to the monitor on the -right. - -Linux Systems Using nVidia Drivers -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This guide is for users of the proprietary nVidia driver on Linux Distributions. -It is assumed that you have properly setup your drivers according to your -distribution's documentation, and you have a working ``xorg.conf`` file in -place. - -If you wish to make the changes permanent in setting up your system for dual -monitors it will be necessary to modify your ``xorg.conf`` file. It is always a -good idea to make a backup of any critical file before making changes:: - - user@linux:~ $ sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.old - -Or for those using systems that use the root user instead of sudo, change to -root and enter:: - - root@linux: # cp /etc/X11/xorg.conf /etc/X11/xorg.conf.old - -The exact location of the ``xorg.conf`` file can vary so check your -distribution's documentation. - -If you want to make your changes permanent run nVidia settings from the -terminal:: - - user@linux:~ $ sudo nvidia-settings - -Or, as root:: - - root@linux: # nividia-settings - -If you do not want to write the changes to your ``xorg.conf`` file simply run -the nVidia Settings program (:command:`nvidia-settings`) from your desktop's -menu, usually in an administration or system menu, or from the terminal as a -normal user run:: - - user@linux:~ $ nvidia-settings - -Once you have opened nVidia Settings, click on :guilabel:`X Server Display -Configuration`. Then select the monitor you are wanting to use as your second -monitor and click :guilabel:`Configure`. - -.. image:: pics/nvlinux1.png - -After clicking :guilabel:`Configure`, select :guilabel:`TwinView`. Then click -:guilabel:`OK`. - -.. image:: pics/twinview.png - -Click :guilabel:`Apply` and if you are happy with the way things look click -:guilabel:`Keep` to keep your new settings. Don't worry if all goes wrong the -settings will return back to the previous settings in 15 seconds without any -action. nVidia Settings should take care of selecting your optimum resolution -etc, but that can be changed as needed. When you are happy with everything click -on :guilabel:`Save to X Configuration File`. - -.. image:: pics/xorgwrite.png - -Click :guilabel:`Save` and you should be set. You may want to restart X or -your machine just to make sure all the settings carry over the next time you log -in. - -Linux Systems With Intel Video -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Generally systems with Intel video cards work very well. They are well supported -by open source drivers. There are, however, a couple of issues that may require -some work arounds. - -**Resolution Issue** - -There is a limitation with certain cards which limits the total resolution to -2048x2048, so both monitors can not have a total resolution totaling more than -that. To work around this it may be necessary to position your monitor as a top -or bottom monitor as opposed to the typical side by side setup. This can easily -be accomplished through your desktop's control of monitors. Please see the -sections on dual monitors with KDE and GNOME above. - -**Primary Monitor Issues** - -With certain cards your system may get confused on what is the primary display. -For example many users will be using a laptop. You will want your laptop screen -to be the primary screen, and your projector to be the secondary monitor. -Certain Intel cards reverse this. To work around this you will need to know the -name of your monitor. If you are a KDE user this info is given to you in the -display settings. If you are not using KDE enter the following in a terminal -without your projector connected to your computer:: - - user@linux:~ $ xrandr -q - -This will give you a long string of output. Screen names will be something along -the lines of LVDM, VGA-0 or some convention similar to that. Without your -projector connected to your computer only one monitor will show as being -connected. That will be the monitor you will need to use as the primary. Now -connect your projector and enter:: - - user@linux:~ $ xrandr --output LVDM --primary - -**Note** it has been reported that when this issue is occurring you will not -want to connect your projector until your desktop is running. diff --git a/documentation/manual/source/glossary.rst b/documentation/manual/source/glossary.rst deleted file mode 100644 index fd00f4842..000000000 --- a/documentation/manual/source/glossary.rst +++ /dev/null @@ -1,76 +0,0 @@ -======== -Glossary -======== - -The developers of OpenLP have strived to make it a straightforward and easy to -use application. However, it is good to be familiar with a few terms that will -be used throughout this documentation, and when seeking support. - -Main Window ------------ - -The Main Window is what you will see when you first open OpenLP - -.. image:: pics/mainwindow.png - -The Main Window contains all the tools and plugins that make OpenLP function - -Media Manager -------------- - -The Media Manager contains a number of tabs the plugins supply to OpenLP. -Each tab in the Media Manager is called a **Media Item** - -.. image:: pics/mediamanager.png - -From the Media Manager you can send Media Items to the Preview or Live screens. - -Platform --------- - -When the word platform is used, it is usually referring to your operating system, -Windows, Linux or MAC OS. - -Preview -------- - -The preview pane is a section to preview your media items before you go live -with them. - -.. image:: pics/preview.png - -Service File ------------- - -A service file is the file that is created when you save your service in OpenLP. -The service file consist of **Service Items** - -Service Item ------------- - -Service items are the **media items** that are in the **service manager** - -Service Manger --------------- - -The service manager contains the media items in your service file. This is the -area where your media items go live. You can also save, open, and edit -services files from here. - -.. image:: pics/servicemanager.png - -Slide Controller ----------------- - -The Slide Controller controls which slide from a **Service Item** is currently -being displayed, and moving between the various slides. - -.. image:: pics/slidecontroller.png - -Theme Manager -------------- - -The theme manager is where themes are created and edited. Themes are the text -styles and backgrounds that you use to personalize your services. - -.. image:: pics/thememanager.png diff --git a/documentation/manual/source/index.rst b/documentation/manual/source/index.rst deleted file mode 100644 index 6e8753f9f..000000000 --- a/documentation/manual/source/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. OpenLP documentation master file, created by - sphinx-quickstart on Thu Sep 30 21:24:54 2010. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to the OpenLP 2.0 User Manual -===================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - - introduction - glossary - dualmonitors - configure - bibles - themes - mediamanager - songs \ No newline at end of file diff --git a/documentation/manual/source/introduction.rst b/documentation/manual/source/introduction.rst deleted file mode 100644 index 02ecf7dbd..000000000 --- a/documentation/manual/source/introduction.rst +++ /dev/null @@ -1,46 +0,0 @@ -============= -Introduction -============= - -About ------ - -OpenLP is an open source lyrics projection application developed specifically -for churches. It is licensed under the GNU Generic Public License, which means -that it is free to use and distribute, and it stays free. - -Lyrics Projection ------------------ - -OpenLP's purpose is to project the lyrics of songs and Bible verses using a -computer and a data projector. OpenLP also has the ability to project videos, -images, and also play audio. OpenLP also is highly customizable providing users -with the ability to set up a wide variety of themes, including themes with -video backgrounds. - -Open Source ------------ - -OpenLP is open source software. This means that the source code (the -programming instructions the developers write) is open to anyone who wants to -look at it. This gives you, the end user, a few freedoms. - -From a developer's perspective, it gives you the freedom to inspect the code -and make sure that it is not malicious. Also, it gives you the freedom to -change the code and the freedom to "fork" the project and make it your own. - -For end users open source software gives you the freedom to use software as -you wish. You are not required to pay for the software and you are free to -make copies and distribute it to anyone you want. - -GNU General Public License --------------------------- - -The GNU General Public License was specifically chosen because it ensures the -above mentioned freedoms. It specifically states that you are not allowed -to charge for the software, and that you have to distribute the source code as -well. - -You can find a copy of the GNU General Public License from the Help menu -selecting about OpenLP or on-line -at: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt diff --git a/documentation/manual/source/mediamanager.rst b/documentation/manual/source/mediamanager.rst deleted file mode 100644 index 778ae8ccd..000000000 --- a/documentation/manual/source/mediamanager.rst +++ /dev/null @@ -1,250 +0,0 @@ -============= -Media Manager -============= - -Once you get your system set up for OpenLP you will be ready to add content to -your Service Manager. This will all happen through the **Media Manager**. The -`Media Manager` contains all the Bibles, Songs, Presentations, Media, and -everything else that you will project through OpenLP. - -Enabling the Plugins --------------------- - -You may need to enable the plugins that came with OpenLP. As you can see below -this is what the `Media Manager` looks like with all the plugins enabled. - -.. image:: pics/mediamanager.png - -To enable the plugins navigate to :menuselection:`Settings --> Plugins` or -press `F7`. You will want to click on the plugin to the left that you want to -enable and select **active** from the drop down box to the right. - -.. image:: pics/plugins.png - - -You are now ready to add content for your service. - -Adding Media Content --------------------- - -This section will describe how to add the different types of media OpenLP is -capable of displaying. - -Songs -^^^^^ -Clicking on Songs in the Media Manager will display all of the songs you have -added by Title and Author/Authors. - -Using the buttons you can: - -`Add a song:` Brings up the dialog box to add a new song - -`Edit the selected song:` Brings up the dialog box to make changes to the song - -`Delete the selected song:` Removes the song from your song list - -`Preview the selected song:` Lets you see what your song will look like -displayed live - -`Send the selected song live:` This option will immediately display your song -live. - -`Add the selected Song to the service:` This will enter your song in the Service -Manager. You may also drag your song over to the Service Manager. - -`Maintain the list of authors, topics and books:` Brings up a dialog box to edit -Authors, Topics or Song Books. -Note: Right clicking on a song file will bring up some of the same options. - -Bibles -^^^^^^ -Clicking on Bibles in the Media Manager will display your options for searching -and adding chapters and verses to the Service Manager. - -Using the buttons you can: - -`Import a Bible:` This is discussed in detail on the Bible Importer page in the -manual. - -`Preview the selected Bible:` Sends your selected verses to the Preview window - -`Send the selected Bible live:` This option will immediately display your -selected verses live. - -`Add the selected Bible to the service:` This will enter your verses into the -Service Manager. You may also click and drag your verses over to the Service -Manager. - -**Quick tab** - -`Version:` Once you have imported a Bible, it will be displayed in the Version -drop down box. Select the version of the Bible you want to use here. - -**Second** - -If you have “Display second Bible verses” selected in Configure OpenLP, Bibles -tab, this choice will be visible. This option is for displaying another version -of the Bible for comparison. Both versions will be displayed. If there is not -enough space on one slide, the Second version will be displayed on the next -slide. - -Use the `Search` button to display your results in the box below. - -**Find** - -You will type your search query in this box for the following two searches. - -`Search type:` You may search for a specific verse using this format below. - -Book Chapter -Book Chapter-Chapter -Book Chapter:Verse-Verse -Book Chapter:Verse-Verse, Verse-Verse -Book Chapter:Verse-Verse,Chapter:Verse-Verse -Book Chapter: Verse-Chapter:Verse - -`Text Search:` - -You may also search by a keyword or words. The more words you use for the -search, the more you will narrow down your results. - -**Results** `Clear and Keep.` - -Each search you make will display your verses below. If you would like to -display verses that are out of sequence you may select `Keep` in the drop down -box and continue your search for the next verse or verses. All searches will be -shown and kept below. -If you select `Clear` from the drop down box, each new search clears the -previous search from the list below. - -**Advanced tab** - -This tab is convenient for selecting book, chapter and verse by name and number. -Version and Second are the same as in Quick tab above. Click on each box and -select the version you wish to display and Second version if you wish to display -an alternative version. - -Use the `Search` button to display your results in the box below. - -`Book:` Click on the drop down box and select the book you want to display. -`Chapter: Verse:` Select your chapter From and To and Verse From and To - -Results will work the same as the Quick tab above. - -Presentations -^^^^^^^^^^^^^ -Using the buttons you can: - -`Load a new presentation:` This brings up a dialog box to find your presentation -and list it in OpenLP. - -`Delete the selected Presentation:` This removes your Presentation from the list. -Please note: this will not delete the presentation from your computer, only from -the OpenLP list. - -`Preview the selected Presentation:` Sends your selected Presentation to the -Preview window - -`Send the selected Presentation live:` This option will immediately display your -selected Presentation live. - -`Add the selected Presentation to the service:` This will enter your -Presentation into the Service Manager. You may also click and drag your -Presentation over to the Service Manager. - -Right clicking on a Presentation file will bring up some of the same options. - -Images -^^^^^^ -Using the buttons you can: - -`Load a new Image:` This brings up a dialog box to find your Image and list it -in OpenLP. - -`Delete the selected Image:` This removes your Image from the list. Please note: -this will not delete the Image from your computer, just the OpenLP list. - -`Preview the selected Image:` Sends your selected Image to the Preview window - -`Send the selected Image live:` This option will immediately display your -selected Image live. - -`Add the selected Image to the service:` This will enter your Image into the -Service Manager. You may also click and drag your Image over to the Service -Manager. - -`Replace Live Background:` With an Image selected, clicking this button will -immediately replace the live background being displayed with your selection. -The Image will replace the theme background until the theme changes or the -"Remove Background" button is pressed. - - -Right clicking on an Image file will bring up some of the same options. - -Media -^^^^^ - -Media is an audio or video file. Generally if you can play or view your media -on your computer without OpenLP, you can also play it in OpenLP. - -Using the buttons you can: -`Load a new Media:` This brings up a dialog box to find your Media and list it -in OpenLP. - -`Delete the selected Media:` This removes your Media from the list. Please note: -this will not delete the Media from your computer, just the OpenLP list. - -`Preview the selected Media:` Sends your selected Media to the Preview window - -`Send the selected Media live:` This option will immediately display your -selected Media live. - -`Add the selected Media to the service:` This will enter your Media into the -Service Manager. You may also click and drag your Media over to the Service -Manager. - -`Replace Live Background:` With a Media file selected, clicking this button will -immediately replace the live background being displayed with your selection. - -Right clicking on a Media file will bring up some of the same options. - -Custom -^^^^^^ - -Custom gives you the option of creating your own slide. This could be useful for -displaying readings, liturgy or any text that may not be found in Songs or -Bibles. - -`Add a new Custom:` Brings up the dialog box to add a new Custom display. -`Edit the selected Custom:` Brings up the dialog box to make changes to the -Custom display. - -`Delete the selected Custom:` Remove the Custom from your list - -`Preview the selected Custom:` Lets you see what your Custom will look like -displayed live - -`Send the selected Custom live:` This option will immediately display your -Custom live - -`Add the selected Custom to the service:` This will enter your Custom in the -Service Manager. You may also drag your Custom over to the Service Manager. - -Right clicking on a Custom file will bring up some of the same options. - -When you Add a new Custom slide a dialog box will appear. - -`Title:` Name of your Custom slide. - -`Add:` After clicking on Add you will enter your text you want to display in -this box. To create multiple slides, click the Split Slide button. When you have -finished adding your text, click on the Save button. - -`Theme:` Select the theme you want to use for your Custom slide from this drop -down box. -`Credits:` Anything typed in this box will be displayed in the footer -information on the display. When you are finished, click the Save button. - -To Edit your slide, click on the Edit button to edit part of it or the Edit All -if you need to make multiple changes. Use the Up and Down arrows to change the -arrangement of your Custom slide. diff --git a/documentation/manual/source/pics/addsong.png b/documentation/manual/source/pics/addsong.png deleted file mode 100644 index 3bcdfc088..000000000 Binary files a/documentation/manual/source/pics/addsong.png and /dev/null differ diff --git a/documentation/manual/source/pics/addsongservice1.png b/documentation/manual/source/pics/addsongservice1.png deleted file mode 100644 index 1a01edadb..000000000 Binary files a/documentation/manual/source/pics/addsongservice1.png and /dev/null differ diff --git a/documentation/manual/source/pics/addsongservice2.png b/documentation/manual/source/pics/addsongservice2.png deleted file mode 100644 index 4be2728d0..000000000 Binary files a/documentation/manual/source/pics/addsongservice2.png and /dev/null differ diff --git a/documentation/manual/source/pics/authorstopicsbooks.png b/documentation/manual/source/pics/authorstopicsbooks.png deleted file mode 100644 index dd7aa4862..000000000 Binary files a/documentation/manual/source/pics/authorstopicsbooks.png and /dev/null differ diff --git a/documentation/manual/source/pics/bibleimport01.png b/documentation/manual/source/pics/bibleimport01.png deleted file mode 100644 index be8bdfbf3..000000000 Binary files a/documentation/manual/source/pics/bibleimport01.png and /dev/null differ diff --git a/documentation/manual/source/pics/bibleimport02.png b/documentation/manual/source/pics/bibleimport02.png deleted file mode 100644 index 23c4b7b2a..000000000 Binary files a/documentation/manual/source/pics/bibleimport02.png and /dev/null differ diff --git a/documentation/manual/source/pics/bibleimportdetails1.png b/documentation/manual/source/pics/bibleimportdetails1.png deleted file mode 100644 index 519c36922..000000000 Binary files a/documentation/manual/source/pics/bibleimportdetails1.png and /dev/null differ diff --git a/documentation/manual/source/pics/bibleimportfinished1.png b/documentation/manual/source/pics/bibleimportfinished1.png deleted file mode 100644 index 15fbd7bae..000000000 Binary files a/documentation/manual/source/pics/bibleimportfinished1.png and /dev/null differ diff --git a/documentation/manual/source/pics/biblewebcomplete.png b/documentation/manual/source/pics/biblewebcomplete.png deleted file mode 100644 index a928f8021..000000000 Binary files a/documentation/manual/source/pics/biblewebcomplete.png and /dev/null differ diff --git a/documentation/manual/source/pics/configureadvanced.png b/documentation/manual/source/pics/configureadvanced.png deleted file mode 100644 index f31812f93..000000000 Binary files a/documentation/manual/source/pics/configureadvanced.png and /dev/null differ diff --git a/documentation/manual/source/pics/configurealerts.png b/documentation/manual/source/pics/configurealerts.png deleted file mode 100644 index ac46801dc..000000000 Binary files a/documentation/manual/source/pics/configurealerts.png and /dev/null differ diff --git a/documentation/manual/source/pics/configurebibles.png b/documentation/manual/source/pics/configurebibles.png deleted file mode 100644 index cd44ee4af..000000000 Binary files a/documentation/manual/source/pics/configurebibles.png and /dev/null differ diff --git a/documentation/manual/source/pics/configurecustom.png b/documentation/manual/source/pics/configurecustom.png deleted file mode 100644 index 3db5c4989..000000000 Binary files a/documentation/manual/source/pics/configurecustom.png and /dev/null differ diff --git a/documentation/manual/source/pics/configuregeneral.png b/documentation/manual/source/pics/configuregeneral.png deleted file mode 100644 index b1bae76e0..000000000 Binary files a/documentation/manual/source/pics/configuregeneral.png and /dev/null differ diff --git a/documentation/manual/source/pics/configuremedia.png b/documentation/manual/source/pics/configuremedia.png deleted file mode 100644 index cc9e11a38..000000000 Binary files a/documentation/manual/source/pics/configuremedia.png and /dev/null differ diff --git a/documentation/manual/source/pics/configurepresentations.png b/documentation/manual/source/pics/configurepresentations.png deleted file mode 100644 index 4960aa8e5..000000000 Binary files a/documentation/manual/source/pics/configurepresentations.png and /dev/null differ diff --git a/documentation/manual/source/pics/configureremotes.png b/documentation/manual/source/pics/configureremotes.png deleted file mode 100644 index 9eb22131c..000000000 Binary files a/documentation/manual/source/pics/configureremotes.png and /dev/null differ diff --git a/documentation/manual/source/pics/configuresongs.png b/documentation/manual/source/pics/configuresongs.png deleted file mode 100644 index 19796f3b5..000000000 Binary files a/documentation/manual/source/pics/configuresongs.png and /dev/null differ diff --git a/documentation/manual/source/pics/configurethemes.png b/documentation/manual/source/pics/configurethemes.png deleted file mode 100644 index c8241ddaf..000000000 Binary files a/documentation/manual/source/pics/configurethemes.png and /dev/null differ diff --git a/documentation/manual/source/pics/createthemeicon.png b/documentation/manual/source/pics/createthemeicon.png deleted file mode 100644 index d1fefc0d2..000000000 Binary files a/documentation/manual/source/pics/createthemeicon.png and /dev/null differ diff --git a/documentation/manual/source/pics/csvimport1.png b/documentation/manual/source/pics/csvimport1.png deleted file mode 100644 index 9a4214aec..000000000 Binary files a/documentation/manual/source/pics/csvimport1.png and /dev/null differ diff --git a/documentation/manual/source/pics/csvimport2.png b/documentation/manual/source/pics/csvimport2.png deleted file mode 100644 index d0c8e569b..000000000 Binary files a/documentation/manual/source/pics/csvimport2.png and /dev/null differ diff --git a/documentation/manual/source/pics/dvi.png b/documentation/manual/source/pics/dvi.png deleted file mode 100644 index bc9e345b3..000000000 Binary files a/documentation/manual/source/pics/dvi.png and /dev/null differ diff --git a/documentation/manual/source/pics/finishedimport.png b/documentation/manual/source/pics/finishedimport.png deleted file mode 100644 index d49876ec9..000000000 Binary files a/documentation/manual/source/pics/finishedimport.png and /dev/null differ diff --git a/documentation/manual/source/pics/gnome.png b/documentation/manual/source/pics/gnome.png deleted file mode 100644 index 1ea060b7a..000000000 Binary files a/documentation/manual/source/pics/gnome.png and /dev/null differ diff --git a/documentation/manual/source/pics/kdedisplay.png b/documentation/manual/source/pics/kdedisplay.png deleted file mode 100644 index ddbbae028..000000000 Binary files a/documentation/manual/source/pics/kdedisplay.png and /dev/null differ diff --git a/documentation/manual/source/pics/kdesystemsettings.png b/documentation/manual/source/pics/kdesystemsettings.png deleted file mode 100644 index 7d7ac1f76..000000000 Binary files a/documentation/manual/source/pics/kdesystemsettings.png and /dev/null differ diff --git a/documentation/manual/source/pics/logo.png b/documentation/manual/source/pics/logo.png deleted file mode 100644 index a232b59a9..000000000 Binary files a/documentation/manual/source/pics/logo.png and /dev/null differ diff --git a/documentation/manual/source/pics/mainwindow.png b/documentation/manual/source/pics/mainwindow.png deleted file mode 100644 index 217751062..000000000 Binary files a/documentation/manual/source/pics/mainwindow.png and /dev/null differ diff --git a/documentation/manual/source/pics/mediamanager.png b/documentation/manual/source/pics/mediamanager.png deleted file mode 100644 index 245f2469b..000000000 Binary files a/documentation/manual/source/pics/mediamanager.png and /dev/null differ diff --git a/documentation/manual/source/pics/nvlinux1.png b/documentation/manual/source/pics/nvlinux1.png deleted file mode 100644 index 6c585bae4..000000000 Binary files a/documentation/manual/source/pics/nvlinux1.png and /dev/null differ diff --git a/documentation/manual/source/pics/openlp.ico b/documentation/manual/source/pics/openlp.ico deleted file mode 100644 index e53fce8d7..000000000 Binary files a/documentation/manual/source/pics/openlp.ico and /dev/null differ diff --git a/documentation/manual/source/pics/plugins.png b/documentation/manual/source/pics/plugins.png deleted file mode 100644 index b6810242b..000000000 Binary files a/documentation/manual/source/pics/plugins.png and /dev/null differ diff --git a/documentation/manual/source/pics/preview.png b/documentation/manual/source/pics/preview.png deleted file mode 100644 index f3041726b..000000000 Binary files a/documentation/manual/source/pics/preview.png and /dev/null differ diff --git a/documentation/manual/source/pics/previewsong1.png b/documentation/manual/source/pics/previewsong1.png deleted file mode 100644 index 23a6b2a07..000000000 Binary files a/documentation/manual/source/pics/previewsong1.png and /dev/null differ diff --git a/documentation/manual/source/pics/previewsong2.png b/documentation/manual/source/pics/previewsong2.png deleted file mode 100644 index 6202e0d14..000000000 Binary files a/documentation/manual/source/pics/previewsong2.png and /dev/null differ diff --git a/documentation/manual/source/pics/selectsongs.png b/documentation/manual/source/pics/selectsongs.png deleted file mode 100644 index 20df3ba2a..000000000 Binary files a/documentation/manual/source/pics/selectsongs.png and /dev/null differ diff --git a/documentation/manual/source/pics/sendsonglive1.png b/documentation/manual/source/pics/sendsonglive1.png deleted file mode 100644 index abef56775..000000000 Binary files a/documentation/manual/source/pics/sendsonglive1.png and /dev/null differ diff --git a/documentation/manual/source/pics/sendsonglive2.png b/documentation/manual/source/pics/sendsonglive2.png deleted file mode 100644 index 5700495f3..000000000 Binary files a/documentation/manual/source/pics/sendsonglive2.png and /dev/null differ diff --git a/documentation/manual/source/pics/servicemanager.png b/documentation/manual/source/pics/servicemanager.png deleted file mode 100644 index 8e2842eb5..000000000 Binary files a/documentation/manual/source/pics/servicemanager.png and /dev/null differ diff --git a/documentation/manual/source/pics/slidecontroller.png b/documentation/manual/source/pics/slidecontroller.png deleted file mode 100644 index 01e5c86d0..000000000 Binary files a/documentation/manual/source/pics/slidecontroller.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor1.png b/documentation/manual/source/pics/songeditor1.png deleted file mode 100644 index d34e10165..000000000 Binary files a/documentation/manual/source/pics/songeditor1.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor11.png b/documentation/manual/source/pics/songeditor11.png deleted file mode 100644 index 0d25eb097..000000000 Binary files a/documentation/manual/source/pics/songeditor11.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor2.png b/documentation/manual/source/pics/songeditor2.png deleted file mode 100644 index e9f02fd16..000000000 Binary files a/documentation/manual/source/pics/songeditor2.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor3.png b/documentation/manual/source/pics/songeditor3.png deleted file mode 100644 index 4c567ab29..000000000 Binary files a/documentation/manual/source/pics/songeditor3.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor4.png b/documentation/manual/source/pics/songeditor4.png deleted file mode 100644 index b8fe6be9c..000000000 Binary files a/documentation/manual/source/pics/songeditor4.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor5.png b/documentation/manual/source/pics/songeditor5.png deleted file mode 100644 index bfc9aba75..000000000 Binary files a/documentation/manual/source/pics/songeditor5.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor6.png b/documentation/manual/source/pics/songeditor6.png deleted file mode 100644 index e727b3828..000000000 Binary files a/documentation/manual/source/pics/songeditor6.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor7.png b/documentation/manual/source/pics/songeditor7.png deleted file mode 100644 index eeb6f0ff1..000000000 Binary files a/documentation/manual/source/pics/songeditor7.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor8.png b/documentation/manual/source/pics/songeditor8.png deleted file mode 100644 index fd57d79b4..000000000 Binary files a/documentation/manual/source/pics/songeditor8.png and /dev/null differ diff --git a/documentation/manual/source/pics/songeditor9.png b/documentation/manual/source/pics/songeditor9.png deleted file mode 100644 index cf067a7dc..000000000 Binary files a/documentation/manual/source/pics/songeditor9.png and /dev/null differ diff --git a/documentation/manual/source/pics/songimporter.png b/documentation/manual/source/pics/songimporter.png deleted file mode 100644 index 96c39ea38..000000000 Binary files a/documentation/manual/source/pics/songimporter.png and /dev/null differ diff --git a/documentation/manual/source/pics/songimporterchoices.png b/documentation/manual/source/pics/songimporterchoices.png deleted file mode 100644 index 5c458838e..000000000 Binary files a/documentation/manual/source/pics/songimporterchoices.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs12.png b/documentation/manual/source/pics/songs12.png deleted file mode 100644 index d9637a4d0..000000000 Binary files a/documentation/manual/source/pics/songs12.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs13.png b/documentation/manual/source/pics/songs13.png deleted file mode 100644 index 2d084954c..000000000 Binary files a/documentation/manual/source/pics/songs13.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs14.png b/documentation/manual/source/pics/songs14.png deleted file mode 100644 index 917bb6bf6..000000000 Binary files a/documentation/manual/source/pics/songs14.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs15.png b/documentation/manual/source/pics/songs15.png deleted file mode 100644 index 74deea0ec..000000000 Binary files a/documentation/manual/source/pics/songs15.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs16.png b/documentation/manual/source/pics/songs16.png deleted file mode 100644 index e72026839..000000000 Binary files a/documentation/manual/source/pics/songs16.png and /dev/null differ diff --git a/documentation/manual/source/pics/songs17.png b/documentation/manual/source/pics/songs17.png deleted file mode 100644 index c5b56d1eb..000000000 Binary files a/documentation/manual/source/pics/songs17.png and /dev/null differ diff --git a/documentation/manual/source/pics/songselectlyrics.png b/documentation/manual/source/pics/songselectlyrics.png deleted file mode 100644 index 2e3d92f0d..000000000 Binary files a/documentation/manual/source/pics/songselectlyrics.png and /dev/null differ diff --git a/documentation/manual/source/pics/songselectsongsearch.png b/documentation/manual/source/pics/songselectsongsearch.png deleted file mode 100644 index de0ea12ca..000000000 Binary files a/documentation/manual/source/pics/songselectsongsearch.png and /dev/null differ diff --git a/documentation/manual/source/pics/songusage.png b/documentation/manual/source/pics/songusage.png deleted file mode 100644 index 10f29f2a9..000000000 Binary files a/documentation/manual/source/pics/songusage.png and /dev/null differ diff --git a/documentation/manual/source/pics/songusagedelete.png b/documentation/manual/source/pics/songusagedelete.png deleted file mode 100644 index fec1b5e5d..000000000 Binary files a/documentation/manual/source/pics/songusagedelete.png and /dev/null differ diff --git a/documentation/manual/source/pics/songusagereport.png b/documentation/manual/source/pics/songusagereport.png deleted file mode 100644 index c0d9df3dd..000000000 Binary files a/documentation/manual/source/pics/songusagereport.png and /dev/null differ diff --git a/documentation/manual/source/pics/themeeditbutton.png b/documentation/manual/source/pics/themeeditbutton.png deleted file mode 100644 index b3e6a768b..000000000 Binary files a/documentation/manual/source/pics/themeeditbutton.png and /dev/null differ diff --git a/documentation/manual/source/pics/themeimportexport.png b/documentation/manual/source/pics/themeimportexport.png deleted file mode 100644 index 189a2a435..000000000 Binary files a/documentation/manual/source/pics/themeimportexport.png and /dev/null differ diff --git a/documentation/manual/source/pics/thememanager.png b/documentation/manual/source/pics/thememanager.png deleted file mode 100644 index be35cadc1..000000000 Binary files a/documentation/manual/source/pics/thememanager.png and /dev/null differ diff --git a/documentation/manual/source/pics/thememanager1.png b/documentation/manual/source/pics/thememanager1.png deleted file mode 100644 index 24dd6bec0..000000000 Binary files a/documentation/manual/source/pics/thememanager1.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard1.png b/documentation/manual/source/pics/themewizard1.png deleted file mode 100644 index 1e37687fb..000000000 Binary files a/documentation/manual/source/pics/themewizard1.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard2.png b/documentation/manual/source/pics/themewizard2.png deleted file mode 100644 index ba1654daf..000000000 Binary files a/documentation/manual/source/pics/themewizard2.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard3.png b/documentation/manual/source/pics/themewizard3.png deleted file mode 100644 index 508e80c1c..000000000 Binary files a/documentation/manual/source/pics/themewizard3.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard4.png b/documentation/manual/source/pics/themewizard4.png deleted file mode 100644 index 9cd50ed67..000000000 Binary files a/documentation/manual/source/pics/themewizard4.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard5.png b/documentation/manual/source/pics/themewizard5.png deleted file mode 100644 index cb5c0813c..000000000 Binary files a/documentation/manual/source/pics/themewizard5.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard6.png b/documentation/manual/source/pics/themewizard6.png deleted file mode 100644 index 9958d43f0..000000000 Binary files a/documentation/manual/source/pics/themewizard6.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard7.png b/documentation/manual/source/pics/themewizard7.png deleted file mode 100644 index 92d9e47ac..000000000 Binary files a/documentation/manual/source/pics/themewizard7.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard8.png b/documentation/manual/source/pics/themewizard8.png deleted file mode 100644 index a25cf0d8c..000000000 Binary files a/documentation/manual/source/pics/themewizard8.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizard9.png b/documentation/manual/source/pics/themewizard9.png deleted file mode 100644 index 2bde33ac7..000000000 Binary files a/documentation/manual/source/pics/themewizard9.png and /dev/null differ diff --git a/documentation/manual/source/pics/themewizardwelcome.png b/documentation/manual/source/pics/themewizardwelcome.png deleted file mode 100644 index f58e7c8f3..000000000 Binary files a/documentation/manual/source/pics/themewizardwelcome.png and /dev/null differ diff --git a/documentation/manual/source/pics/twinview.png b/documentation/manual/source/pics/twinview.png deleted file mode 100644 index d8a659f53..000000000 Binary files a/documentation/manual/source/pics/twinview.png and /dev/null differ diff --git a/documentation/manual/source/pics/vga.png b/documentation/manual/source/pics/vga.png deleted file mode 100644 index 3e02726a8..000000000 Binary files a/documentation/manual/source/pics/vga.png and /dev/null differ diff --git a/documentation/manual/source/pics/vistadisplaysettings.png b/documentation/manual/source/pics/vistadisplaysettings.png deleted file mode 100644 index 1fd2c8b16..000000000 Binary files a/documentation/manual/source/pics/vistadisplaysettings.png and /dev/null differ diff --git a/documentation/manual/source/pics/vistapersonalize.png b/documentation/manual/source/pics/vistapersonalize.png deleted file mode 100644 index c24cc15dd..000000000 Binary files a/documentation/manual/source/pics/vistapersonalize.png and /dev/null differ diff --git a/documentation/manual/source/pics/webbible1.png b/documentation/manual/source/pics/webbible1.png deleted file mode 100644 index 6ff1b6560..000000000 Binary files a/documentation/manual/source/pics/webbible1.png and /dev/null differ diff --git a/documentation/manual/source/pics/webbibleproxy1.png b/documentation/manual/source/pics/webbibleproxy1.png deleted file mode 100644 index 23ba9ad24..000000000 Binary files a/documentation/manual/source/pics/webbibleproxy1.png and /dev/null differ diff --git a/documentation/manual/source/pics/winsevendisplay.png b/documentation/manual/source/pics/winsevendisplay.png deleted file mode 100644 index deea325b5..000000000 Binary files a/documentation/manual/source/pics/winsevendisplay.png and /dev/null differ diff --git a/documentation/manual/source/pics/winsevenresolution.png b/documentation/manual/source/pics/winsevenresolution.png deleted file mode 100644 index c60bf4c0c..000000000 Binary files a/documentation/manual/source/pics/winsevenresolution.png and /dev/null differ diff --git a/documentation/manual/source/pics/xorgwrite.png b/documentation/manual/source/pics/xorgwrite.png deleted file mode 100644 index 812b9e0ae..000000000 Binary files a/documentation/manual/source/pics/xorgwrite.png and /dev/null differ diff --git a/documentation/manual/source/pics/xpdisplaysettings.png b/documentation/manual/source/pics/xpdisplaysettings.png deleted file mode 100644 index e1ec66c6f..000000000 Binary files a/documentation/manual/source/pics/xpdisplaysettings.png and /dev/null differ diff --git a/documentation/manual/source/quickstart.rst b/documentation/manual/source/quickstart.rst deleted file mode 100644 index 81e262125..000000000 --- a/documentation/manual/source/quickstart.rst +++ /dev/null @@ -1,11 +0,0 @@ -======================== -OpenLP Quick Start Guide -======================== - -Thank you for choosing OpenLP. The developers of OpenLP have attempted to make -OpenLP intuitive and easy to use. This Quick Start Guide will help you to get -going quickly. - -Bible Importer -============== - diff --git a/documentation/manual/source/songs.rst b/documentation/manual/source/songs.rst deleted file mode 100644 index 91e5539c2..000000000 --- a/documentation/manual/source/songs.rst +++ /dev/null @@ -1,102 +0,0 @@ -===== -Songs -===== - -Managing your songs in OpenLP is a relatively simple process. There are also -converters provided to get data from other formats into OpenLP. - -Song Importer -============= - -If you are using an earlier version of OpenLP or, come from another software -package, you may be able to convert your existing database to work in OpenLP -2.0. To access the Song Importer click :menuselection:`File --> Import --> Song`. -You will see the Song Importer window, then click :guilabel:`Next`. - -.. image:: pics/songimporter.png - -After choosing :guilabel:`Next` you can select from the various types of -software that OpenLP will convert songs from. - -.. image:: pics/songimporterchoices.png - -Click on the file folder icon to choose the file of the song database you -want to import. See the following sections for information on the different -formats that OpenLP will import. - -Importing from OpenLP Version 1 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Converting from OpenLP Version 1 is a simple process. First you will -need to locate your version 1 database file. - -Windows XP:: - - C:\Documents and Settings\All Users\Application Data\openlp.org\Data\songs.olp - -Windows Vista / Windows 7:: - - C:\ProgramData\openlp.org\Data\songs.olp - -After clicking :guilabel:`Next` your conversion will be complete. - -.. image:: pics/finishedimport.png - -Press :guilabel:`Finish` and you will now be ready to use your OpenLP -version 1 songs. - -Importing from OpenSong -^^^^^^^^^^^^^^^^^^^^^^^ - -Converting from OpenSong, you will need to locate your songs database. In the -later versions of OpenSong you are asked to define the location of this. The -songs will be located in a folder named :guilabel:`Songs`. This folder will -contain files with all your songs in them, without a file extension. (file.xxx). -When you have located this folder you will need to select the songs from -the folder. - -.. image:: pics/selectsongs.png - -On most operating systems, to select all the songs, first select the first song -in the list, press the shift key, and select the last song in the list. After -this press :guilabel:`Next` and you will see that your import has been -successful. - -.. image:: pics/finishedimport.png - -Press :guilabel:`Finish` and OpenLP will be ready to use your songs that you -imported from OpenSong. - -Importing from CCLI Song Select -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To import from CCLI Song Select you must be a CCLI Subscriber and also a -subscriber of the Song Select service. For info on that go to: -http://www.ccli.com - -The first step for importing from CCLI Song Select is to log into your account. -Then search for your desired song. For this example we will be adding the song -"Amazing Grace". - -.. image:: pics/songselectsongsearch.png - -For the song you are searching for, select `lyrics` This will take you to a -page displaying the lyrics and copyright information for your song. - -.. image:: pics/songselectlyrics.png - -Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. -Choose either the .txt or .usr file. You will be asked to chose a download -location if your browser does not automatically select that for you. Select -this file from the OpenLP import window and then click :guilabel:`Next` You can -also select multiple songs for import at once on most operating systems by -selecting the first item in the list then holding the shift key and select the -last item in the list. When finished, you will see that your import has -completed. - -.. image:: pics/finishedimport.png - -Press :guilabel:`Finish` and OpenLP will be ready to use your songs imported -from CCLI SongSelect. - - diff --git a/documentation/manual/source/themes.rst b/documentation/manual/source/themes.rst deleted file mode 100644 index b689cb1a8..000000000 --- a/documentation/manual/source/themes.rst +++ /dev/null @@ -1,196 +0,0 @@ -====== -Themes -====== - - -The `Theme Manager` is where you can set backgrounds, fonts, and colors to the -style you desire. From the theme manager you can create a new theme, Edit a -theme, Delete a theme, Import a theme, and Export a theme. - -.. image:: /pics/thememanager1.png - -Creating New Themes -=================== -Click the :guilabel:`Create Theme Icon` to Create a new theme - -.. image:: /pics/createthemeicon.png - -This will bring up the `Theme Wizard` - -.. image:: /pics/themewizardwelcome.png - -Click :guilabel:`Next`. You have 3 choices in the drop down menu for Background -type: Solid Color, Gradient, or Image. - -.. image:: /pics/themewizard1.png - -Solid color: select solid color and click on the black button next to Color. -You will have the option of choosing among the colors you see or entering your -own. - -.. image:: /pics/themewizard2.png - -Gradient: choose the two colors, First and Second, you want to fade together -and the Gradient drop down will let you determine the directions of the fade. - -.. image:: /pics/themewizard3.png - -Image: Click on the folder to find and select your image. OpenLP accepts a -variety of image types. - -.. image:: /pics/themewizard4.png - -**Note:** If possible, try to use the same size image as your projector is -displaying. - -When finished with your selection for background, click the :guilabel:`Next` -button. - -This is the area where you will select and define your font characteristics for -the Display text. - -.. image:: /pics/themewizard5.png - -**Font:** Choose the font you would like to use from the drop down. - -**Color:** Choose the color of your font. - -**Size:** The size of your font determines how many lines are shown per slide. -As you change the font size, the lines per slide will change. - -**Line Spacing:** This setting determines how much space you want between -lines. This setting will also change the lines per slide. - -**Outline:** If you desire an outline around your font, select the Outline box, -choose your color and size of the outline. - -**Shadow:** If you desire a shadow around your font, select the Shadow box and -choose your color and size of the shadow. - -**Bold Display:** select the box for Bold font - -**Italic Display:** select the box for Italic font - -When you are finished selecting your font details click the :guilabel:`Next` -button. - -**Footer Area Font Details** - -This page determines the Font, Font Color, and size of the font for the footer. -The footer is where the Title of the song, Author or Authors, Copyright and -CCLI License are displayed. - -.. image:: /pics/themewizard6.png - -When you are finished setting your footer font details, click :guilabel:`Next`. - -**Text Formatting Details** - -This page determines the alignment of the text on your slide and the transition -from one slide to the next. - -.. image:: /pics/themewizard7.png - -**Horizontal Align** the text to the Left, Right or Center of the screen. - -**Vertical Align** the text to the Top, Middle or bottom of the screen. - -**Transitions** - -When this box is selected, switching slides will fade out from one and fade in -to the next. When the box is not selected, slide changing will be instant. - -When you are finished setting your Text Formatting Details, click :guilabel:`Next`. - -**Output Area Locations** - -This page gives you the ability to position your Main area or Footer area to a -specific area of the screen using the x and y positions. ie: if you do not want -your footer on the bottom left, you can make the adjustment here. -You can resize the Width and the Height of the Main Area and the Footer Area. -ie: If you have a temporary or permanent obstacle in one part of the viewing -area, you can resize the Main or Footer area and use x and y positions to -display in a different position on the screen. - -.. image:: /pics/themewizard8.png - -You can also change the Width and the Height of the Main Area of the Footer Area. - -When you are finished setting your Output Area Locations, click :guilabel:`Next`. - -Save and Preview - -.. image:: /pics/themewizard9.png - -**Theme Name:** Enter your theme name here. - -**Preview** -The Preview shows the choices you made when setting up the previous pages plus, -shows all the edit effects possible so you can see what the impact is on all -possible font colors and characteristics. - -If you are satisfied with your selections, click :guilabel:`Finish`. If you -want to make a change, use the :guilabel:`Back` button. - -Editing Themes -============== -Now that you created your theme, and you show it on the projector and there is -something you don't like, you can easily Edit your theme either by clicking the -Theme Edit Button: - -.. image:: /pics/themeeditbutton.png - -Or by right-clicking your theme and selecting the appropriate action. - -Deleting Themes -=============== - -The Delete Button: - -.. image:: /pics/songs17.png - -will delete a selected theme or by right-clicking your theme and selecting -the appropriate action. - -**Note:** deleting the currently selected global theme or the -default theme is not possible. - -Exporting Themes -================ -If you would like to transfer a theme from one computer to another, click on -the theme you want to Export, click the last button in the Theme Manager: - -.. image:: /pics/themeimportexport.png - -choose the folder you want to save your theme and click the OK button. - -Importing Themes -================ - -The fourth button in the Theme Manager: - -.. image:: /pics/themeimportexport.png - -will allow you to Import an Exported theme. Click the Import button, select the -folder and the theme file, and click OK. Your imported theme will be in the -Theme Manager. Import Theme will also handle version 1 Exports. You will need to -check your imported theme since many of the values will have been defaulted. - -Rename Theme -============ - -If you created a theme and want to change the name of it, right-click your -theme and click Rename theme and enter the new name. - -Copy Theme -========== - -Now that you created a theme with all the attributes you like, you can -right-click the theme, click on Copy theme, choose your new name and click OK. -You now have a duplicate of your first theme that you can edit the way you want. - -Set as Global default -===================== - -If you right-click your theme, you have the option to set the theme as Global -default. This option is covered in greater detail under “Configure OpenLP. diff --git a/documentation/manual/themes/openlp_qthelp/layout.html b/documentation/manual/themes/openlp_qthelp/layout.html deleted file mode 100644 index d16116773..000000000 --- a/documentation/manual/themes/openlp_qthelp/layout.html +++ /dev/null @@ -1,68 +0,0 @@ -{# - openlp_qthelp/layout.html - ~~~~~~~~~~~~~~~~~ - - Sphinx layout template for the openlp_qthelp theme. - - :copyright: Copyright 2004-2010 Raoul Snyman. - :license: GPL -#} -{% extends "basic/layout.html" %} -{% set script_files = script_files + ['_static/theme_extras.js'] %} -{% set css_files = css_files + ['_static/print.css'] %} - -{# do not display relbars #} -{% block relbar1 %}{% endblock %} -{% block relbar2 %}{% endblock %} - -{% macro nav() %} -

- {%- block openlp_qthelprel1 %} - {%- endblock %} - {%- if prev %} - «  {{ prev.title }} -   ::   - {%- endif %} - {{ _('Contents') }} - {%- if next %} -   ::   - {{ next.title }}  » - {%- endif %} - {%- block openlp_qthelprel2 %} - {%- endblock %} -

-{% endmacro %} - -{% block content %} - -
- {{ nav() }} -
-
- {#{%- if display_toc %} -
-

Table Of Contents

- {{ toc }} -
- {%- endif %}#} - {% block body %}{% endblock %} -
-
- {{ nav() }} -
-{% endblock %} diff --git a/documentation/manual/themes/openlp_qthelp/static/alert_info_32.png b/documentation/manual/themes/openlp_qthelp/static/alert_info_32.png deleted file mode 100644 index 05b4fe898..000000000 Binary files a/documentation/manual/themes/openlp_qthelp/static/alert_info_32.png and /dev/null differ diff --git a/documentation/manual/themes/openlp_qthelp/static/alert_warning_32.png b/documentation/manual/themes/openlp_qthelp/static/alert_warning_32.png deleted file mode 100644 index f13611cde..000000000 Binary files a/documentation/manual/themes/openlp_qthelp/static/alert_warning_32.png and /dev/null differ diff --git a/documentation/manual/themes/openlp_qthelp/static/bg-page.png b/documentation/manual/themes/openlp_qthelp/static/bg-page.png deleted file mode 100644 index c6f3bc477..000000000 Binary files a/documentation/manual/themes/openlp_qthelp/static/bg-page.png and /dev/null differ diff --git a/documentation/manual/themes/openlp_qthelp/static/bullet_orange.png b/documentation/manual/themes/openlp_qthelp/static/bullet_orange.png deleted file mode 100644 index ad5d02f34..000000000 Binary files a/documentation/manual/themes/openlp_qthelp/static/bullet_orange.png and /dev/null differ diff --git a/documentation/manual/themes/openlp_qthelp/static/openlp_qthelp.css_t b/documentation/manual/themes/openlp_qthelp/static/openlp_qthelp.css_t deleted file mode 100644 index 918ed661b..000000000 --- a/documentation/manual/themes/openlp_qthelp/static/openlp_qthelp.css_t +++ /dev/null @@ -1,372 +0,0 @@ -/* - * openlp_qthelp.css_t - * ~~~~~~~~~~~ - * - * Sphinx stylesheet -- openlp_qthelp theme. - * - * Adapted from http://openlp_qthelp-os.org/docs/Haiku-doc.css. - * Original copyright message: - * - * Copyright 2008-2009, Haiku. All rights reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Francois Revol - * Stephan Assmus - * Braden Ewing - * Humdinger - * - * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -html { - margin: 0px; - padding: 0px; - background-color: #fff; - background-image: none; -} - -body { - line-height: 1.5; - margin: auto; - padding: 0px; - font-family: "DejaVu Sans", Arial, Helvetica, sans-serif; - min-width: 59em; - max-width: 70em; - color: {{ theme_textcolor }}; -} - -div.footer { - padding: 8px; - font-size: 11px; - text-align: center; - letter-spacing: 0.5px; -} - -/* link colors and text decoration */ - -a:link { - font-weight: bold; - text-decoration: none; - color: {{ theme_linkcolor }}; -} - -a:visited { - font-weight: bold; - text-decoration: none; - color: {{ theme_visitedlinkcolor }}; -} - -a:hover, a:active { - text-decoration: underline; - color: {{ theme_hoverlinkcolor }}; -} - -/* Some headers act as anchors, don't give them a hover effect */ - -h1 a:hover, a:active { - text-decoration: none; - color: {{ theme_headingcolor }}; -} - -h2 a:hover, a:active { - text-decoration: none; - color: {{ theme_headingcolor }}; -} - -h3 a:hover, a:active { - text-decoration: none; - color: {{ theme_headingcolor }}; -} - -h4 a:hover, a:active { - text-decoration: none; - color: {{ theme_headingcolor }}; -} - -a.headerlink { - color: #a7ce38; - padding-left: 5px; -} - -a.headerlink:hover { - color: #a7ce38; -} - -/* basic text elements */ - -div.content { - margin-top: 20px; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 50px; - font-size: 0.9em; -} - -/* heading and navigation */ - -div.header { - position: relative; - left: 0px; - top: 0px; - height: 85px; - /* background: #eeeeee; */ - padding: 0 40px; -} -div.header h1 { - font-size: 1.6em; - font-weight: normal; - letter-spacing: 1px; - color: {{ theme_headingcolor }}; - border: 0; - margin: 0; - padding-top: 15px; -} -div.header h1 a { - font-weight: normal; - color: {{ theme_headingcolor }}; -} -div.header h2 { - font-size: 1.3em; - font-weight: normal; - letter-spacing: 1px; - text-transform: uppercase; - color: #aaa; - border: 0; - margin-top: -3px; - padding: 0; -} - -div.header img.rightlogo { - float: right; -} - - -div.title { - font-size: 1.3em; - font-weight: bold; - color: {{ theme_headingcolor }}; - border-bottom: dotted thin #e0e0e0; - margin-bottom: 25px; -} -div.topnav { - /* background: #e0e0e0; */ -} -div.topnav p { - margin-top: 0; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 0px; - text-align: right; - font-size: 0.8em; -} -div.bottomnav { - background: #eeeeee; -} -div.bottomnav p { - margin-right: 40px; - text-align: right; - font-size: 0.8em; -} - -a.uplink { - font-weight: normal; -} - - -/* contents box */ - -table.index { - margin: 0px 0px 30px 30px; - padding: 1px; - border-width: 1px; - border-style: dotted; - border-color: #e0e0e0; -} -table.index tr.heading { - background-color: #e0e0e0; - text-align: center; - font-weight: bold; - font-size: 1.1em; -} -table.index tr.index { - background-color: #eeeeee; -} -table.index td { - padding: 5px 20px; -} - -table.index a:link, table.index a:visited { - font-weight: normal; - text-decoration: none; - color: {{ theme_linkcolor }}; -} -table.index a:hover, table.index a:active { - text-decoration: underline; - color: {{ theme_hoverlinkcolor }}; -} - - -/* Haiku User Guide styles and layout */ - -/* Rounded corner boxes */ -/* Common declarations */ -div.admonition { - -webkit-border-radius: 10px; - -khtml-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - border-style: dotted; - border-width: thin; - border-color: #dcdcdc; - padding: 10px 15px 10px 15px; - margin-bottom: 15px; - margin-top: 15px; -} -div.note { - padding: 10px 15px 10px 80px; - background: #e4ffde url(alert_info_32.png) 15px 15px no-repeat; - min-height: 42px; -} -div.warning { - padding: 10px 15px 10px 80px; - background: #fffbc6 url(alert_warning_32.png) 15px 15px no-repeat; - min-height: 42px; -} -div.seealso { - background: #e4ffde; -} - -/* More layout and styles */ -h1 { - font-size: 1.3em; - font-weight: bold; - color: {{ theme_headingcolor }}; - border-bottom: dotted thin #e0e0e0; - margin-top: 30px; -} - -h2 { - font-size: 1.2em; - font-weight: normal; - color: {{ theme_headingcolor }}; - border-bottom: dotted thin #e0e0e0; - margin-top: 30px; -} - -h3 { - font-size: 1.1em; - font-weight: normal; - color: {{ theme_headingcolor }}; - margin-top: 30px; -} - -h4 { - font-size: 1.0em; - font-weight: normal; - color: {{ theme_headingcolor }}; - margin-top: 30px; -} - -p { - text-align: justify; -} - -p.last { - margin-bottom: 0; -} - -ol { - padding-left: 20px; -} - -ul { - padding-left: 5px; - margin-top: 3px; -} - -li { - line-height: 1.3; -} - -div.content ul > li { - -moz-background-clip:border; - -moz-background-inline-policy:continuous; - -moz-background-origin:padding; - background: transparent url(bullet_orange.png) no-repeat scroll left 0.45em; - list-style-image: none; - list-style-type: none; - padding: 0 0 0 1.666em; - margin-bottom: 3px; -} - -td { - vertical-align: top; -} - -tt { - background-color: #e2e2e2; - font-size: 1.0em; - font-family: monospace; -} - -pre { - border-color: #0c3762; - border-style: dotted; - border-width: thin; - margin: 0 0 12px 0; - padding: 0.8em; - background-color: #f0f0f0; -} - -hr { - border-top: 1px solid #ccc; - border-bottom: 0; - border-right: 0; - border-left: 0; - margin-bottom: 10px; - margin-top: 20px; -} - -/* printer only pretty stuff */ -@media print { - .noprint { - display: none; - } - /* for acronyms we want their definitions inlined at print time */ - acronym[title]:after { - font-size: small; - content: " (" attr(title) ")"; - font-style: italic; - } - /* and not have mozilla dotted underline */ - acronym { - border: none; - } - div.topnav, div.bottomnav, div.header, table.index { - display: none; - } - div.content { - margin: 0px; - padding: 0px; - } - html { - background: #FFF; - } -} - -.viewcode-back { - font-family: "DejaVu Sans", Arial, Helvetica, sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; - margin: -1px -12px; - padding: 0 12px; -} diff --git a/documentation/manual/themes/openlp_qthelp/theme.conf b/documentation/manual/themes/openlp_qthelp/theme.conf deleted file mode 100644 index 0d44b0faa..000000000 --- a/documentation/manual/themes/openlp_qthelp/theme.conf +++ /dev/null @@ -1,12 +0,0 @@ -[theme] -inherit = basic -stylesheet = openlp_qthelp.css -pygments_style = autumn - -[options] -full_logo = false -textcolor = #333333 -headingcolor = #203b6f -linkcolor = #26437c -visitedlinkcolor = #26437c -hoverlinkcolor = #26437c diff --git a/documentation/plugin.txt b/documentation/plugin.txt deleted file mode 100644 index dff6de06a..000000000 --- a/documentation/plugin.txt +++ /dev/null @@ -1,97 +0,0 @@ -A plugin architecture for openlp 2.0 ------------------------------------- - -Why? ----- -To allow easy development of new "things to display". Examples: -* Bible passages -* Video -* Powerpoint/Openoffice Impress -* Lyrics :) (with chords, rich text, etc...) -* Musical score -* Midi files (hmmm, that's not a thing to display, but feels like it should be - there...) -* Audio files, CDs (hmmm again) -* Collections of pictures -* Alerts to members of the congregation -... etc. - -The scope of these plugins is "things for display purposes", so each needs to -be able to: -* Render their display (on the projection screen and in a "shrunken form" - for preview purposes) - -These plugins need to be part of a service. This means they need to -* Be able to tell the service manager code what to put in the service for their - "bit" -* Have a "tab" in the media manager, which they can render on request - to allow bits to be added to the service (or indeed shown live) - -In addition, some plugins need to be able to show -* How their multiple screens of data are split (eg verses) -* be told which screen to display - -Some plugins will also have things to configure, so will need -* to tell the core app that they need a preferences page -* and be able to render it and handle those prefs - -Some plugins may need to define -* Hot keys for their display actions. The core will have to pass these on... - -Other basic things all plugins will need: -* A name -* A version number -* Helpfile? - -Funnily enough, the core lyrics engine fits those requirements, so could -actually form a plugin... - -Each service entry may be made up of multiple plugins (to do text on video), so -each plugin that contributes to a service item will need a "layering" -priority. - -Plugin management ------------------ - -Plugins will be packages within the plugins/ directory. The plugin manager -will scan this directory when openlp loads for any class which is based on the -base Plugin class (or should we call it the DisplayPlugin class to allow for -other sorts??) - -These plugins are then queried for their capabilities/requirements and -spaces made in the prefs UI as required, and in the media manager. - -The service manager can find out what plugins it has available (we need to -report missing plugins when a service is loaded). - -The display manager will get a ref to a/some plugin(s) from the service -manager when each service item is made live, and can then call on each to -render their display. - -Each plugin will have basic attributes for -* name -* version number -* capabilities/requirements - (eg: - needs a prefs page, - needs key presses forwarding - has multiple screensful? - ) - -and a set of API functions for -* media manager rendering and handling -* creating service data -* being told service data -* set paint context -* render -* selecting a screen to display -* handling preferences -* shortcut key handling... - - -Other things to add: -Multiple monitors -Openoffice like plugins - external rendering. -update hook for rendering? -Event hook from app -Event hook to app (MIDI events....) diff --git a/openlp.pyw b/openlp.pyw index 3f2199038..962109592 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -6,9 +6,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -46,7 +47,7 @@ from openlp.core.ui.firsttimeform import FirstTimeForm from openlp.core.ui.exceptionform import ExceptionForm from openlp.core.ui import SplashScreen, ScreenList from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \ - get_application_version + get_application_version, DelayStartThread log = logging.getLogger() @@ -78,6 +79,8 @@ class OpenLP(QtGui.QApplication): class in order to provide the core of the application. """ + args = [] + def exec_(self): """ Override exec method to allow the shared memory to be released on exit @@ -85,10 +88,13 @@ class OpenLP(QtGui.QApplication): QtGui.QApplication.exec_() self.sharedMemory.detach() - def run(self): + def run(self, args): """ Run the OpenLP application. """ + # On Windows, the args passed into the constructor are + # ignored. Not very handy, so set the ones we want to use. + self.args.extend(args) # provide a listener for widgets to reqest a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) @@ -115,12 +121,14 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # start the main app window - self.mainWindow = MainWindow(screens, self.clipboard(), - self.arguments()) + self.mainWindow = MainWindow(self.clipboard(), self.args) self.mainWindow.show() if show_splash: # now kill the splashscreen self.splash.finish(self.mainWindow) + log.debug(u'Splashscreen closed') + # make sure Qt really display the splash screen + self.processEvents() self.mainWindow.repaint() self.processEvents() if not has_run_wizard: @@ -129,6 +137,9 @@ class OpenLP(QtGui.QApplication): u'general/update check', QtCore.QVariant(True)).toBool() if update_check: VersionThread(self.mainWindow).start() + Receiver.send_message(u'maindisplay_blank_check') + self.mainWindow.appStartup() + DelayStartThread(self.mainWindow).start() return self.exec_() def isAlreadyRunning(self): @@ -139,7 +150,7 @@ class OpenLP(QtGui.QApplication): self.sharedMemory = QtCore.QSharedMemory('OpenLP') if self.sharedMemory.attach(): status = QtGui.QMessageBox.critical(None, - UiStrings.Error, UiStrings.OpenLPStart, + UiStrings().Error, UiStrings().OpenLPStart, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) if status == QtGui.QMessageBox.No: @@ -173,6 +184,18 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() + def event(self, event): + """ + Enables direct file opening on OS X + """ + if event.type() == QtCore.QEvent.FileOpen: + file_name = event.file() + log.debug(u'Got open file event for %s!', file_name) + self.args.insert(0, unicode(file_name)) + return True + else: + return QtGui.QApplication.event(self, event) + def main(): """ The main function which parses command line options and then runs @@ -239,11 +262,17 @@ def main(): + "/qt4_plugins") # i18n Set Language language = LanguageManager.get_language() - appTranslator = LanguageManager.get_translator(language) - app.installTranslator(appTranslator) + app_translator, default_translator = \ + LanguageManager.get_translator(language) + if not app_translator.isEmpty(): + app.installTranslator(app_translator) + if not default_translator.isEmpty(): + app.installTranslator(default_translator) + else: + log.debug(u'Could not find default_translator.') if not options.no_error_form: sys.excepthook = app.hookException - sys.exit(app.run()) + sys.exit(app.run(qt_args)) if __name__ == u'__main__': """ diff --git a/openlp/__init__.py b/openlp/__init__.py index ac3dac24c..9038b48cc 100644 --- a/openlp/__init__.py +++ b/openlp/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index 1cef928bc..e19b9a257 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index ddb1ae9b1..f83e92de7 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -35,56 +36,9 @@ from PyQt4 import QtCore, QtGui log = logging.getLogger(__name__) -base_html_expands = [] - -base_html_expands.append({u'desc': u'Red', u'start tag': u'{r}', - u'start html': u'', - u'end tag': u'{/r}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Black', u'start tag': u'{b}', - u'start html': u'', - u'end tag': u'{/b}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Blue', u'start tag': u'{bl}', - u'start html': u'', - u'end tag': u'{/bl}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Yellow', u'start tag': u'{y}', - u'start html': u'', - u'end tag': u'{/y}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Green', u'start tag': u'{g}', - u'start html': u'', - u'end tag': u'{/g}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Pink', u'start tag': u'{pk}', - u'start html': u'', - u'end tag': u'{/pk}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Orange', u'start tag': u'{o}', - u'start html': u'', - u'end tag': u'{/o}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Purple', u'start tag': u'{pp}', - u'start html': u'', - u'end tag': u'{/pp}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'White', u'start tag': u'{w}', - u'start html': u'', - u'end tag': u'{/w}', u'end html': u'', u'protected': True}) -base_html_expands.append({u'desc': u'Superscript', u'start tag': u'{su}', - u'start html': u'', u'end tag': u'{/su}', u'end html': u'', - u'protected': True}) -base_html_expands.append({u'desc': u'Subscript', u'start tag': u'{sb}', - u'start html': u'', u'end tag': u'{/sb}', u'end html': u'', - u'protected': True}) -base_html_expands.append({u'desc': u'Paragraph', u'start tag': u'{p}', - u'start html': u'

', u'end tag': u'{/p}', u'end html': u'

', - u'protected': True}) -base_html_expands.append({u'desc': u'Bold', u'start tag': u'{st}', - u'start html': u'', u'end tag': u'{/st}', u'end html': u'', - u'protected': True}) -base_html_expands.append({u'desc': u'Italics', u'start tag': u'{it}', - u'start html': u'', u'end tag': u'{/it}', u'end html': u'', - u'protected': True}) -base_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, - encoding=QtCore.QCoreApplication.CodecForTr, n=-1): + encoding=QtCore.QCoreApplication.CodecForTr, n=-1, + translate=QtCore.QCoreApplication.translate): """ 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,8 +55,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, encoding, n) + return translate(context, text, comment, encoding, n) def get_text_file_string(text_file): """ @@ -166,56 +119,6 @@ def build_icon(icon): QtGui.QIcon.Normal, QtGui.QIcon.Off) return button_icon -def context_menu_action(base, icon, text, slot): - """ - Utility method to help build context menus for plugins - - ``base`` - The parent menu to add this menu item to - - ``icon`` - An icon for this action - - ``text`` - The text to display for this action - - ``slot`` - The code to run when this action is triggered - """ - action = QtGui.QAction(text, base) - if icon: - action.setIcon(build_icon(icon)) - QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) - return action - -def context_menu(base, icon, text): - """ - Utility method to help build context menus for plugins - - ``base`` - The parent object to add this menu to - - ``icon`` - An icon for this menu - - ``text`` - The text to display for this menu - """ - action = QtGui.QMenu(text, base) - action.setIcon(build_icon(icon)) - return action - -def context_menu_separator(base): - """ - Add a separator to a context menu - - ``base`` - The menu object to add the separator to - """ - action = QtGui.QAction(u'', base) - action.setSeparator(True) - return action - def image_to_byte(image): """ Resize an image to fit on the current screen for the web and returns @@ -234,13 +137,12 @@ def image_to_byte(image): # convert to base64 encoding so does not get missed! return byte_array.toBase64() -def resize_image(image, width, height, background=QtCore.Qt.black): +def resize_image(image_path, width, height, background=QtCore.Qt.black): """ Resize an image to fit on the current screen. - ``image`` - The image to resize. It has to be either a ``QImage`` instance or the - path to the image. + ``image_path`` + The path to the image to resize. ``width`` The new image width. @@ -252,16 +154,24 @@ def resize_image(image, width, height, background=QtCore.Qt.black): The background colour defaults to black. """ log.debug(u'resize_image - start') - if isinstance(image, QtGui.QImage): - preview = image + reader = QtGui.QImageReader(image_path) + # The image's ratio. + image_ratio = float(reader.size().width()) / float(reader.size().height()) + resize_ratio = float(width) / float(height) + # Figure out the size we want to resize the image to (keep aspect ratio). + if image_ratio == resize_ratio: + size = QtCore.QSize(width, height) + elif image_ratio < resize_ratio: + # Use the image's height as reference for the new size. + size = QtCore.QSize(image_ratio * height, height) else: - preview = QtGui.QImage(image) - if not preview.isNull(): - # Only resize if different size - if preview.width() == width and preview.height == height: - return preview - preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio, - QtCore.Qt.SmoothTransformation) + # Use the image's width as reference for the new size. + size = QtCore.QSize(width, 1 / (image_ratio / width)) + reader.setScaledSize(size) + preview = reader.read() + if image_ratio == resize_ratio: + # We neither need to centre the image nor add "bars" to the image. + return preview realw = preview.width() realh = preview.height() # and move it to the centre of the preview space @@ -293,8 +203,9 @@ def clean_tags(text): Remove Tags from text for display """ text = text.replace(u'
', u'\n') + text = text.replace(u'{br}', u'\n') text = text.replace(u' ', u' ') - for tag in DisplayTags.get_html_tags(): + for tag in FormattingTags.get_html_tags(): text = text.replace(tag[u'start tag'], u'') text = text.replace(tag[u'end tag'], u'') return text @@ -303,7 +214,7 @@ def expand_tags(text): """ Expand tags HTML for display """ - for tag in DisplayTags.get_html_tags(): + for tag in FormattingTags.get_html_tags(): text = text.replace(tag[u'start tag'], tag[u'start html']) text = text.replace(tag[u'end tag'], tag[u'end html']) return text @@ -322,11 +233,10 @@ def check_directory_exists(dir): except IOError: pass -from listwidgetwithdnd import ListWidgetWithDnD -from displaytags import DisplayTags -from spelltextedit import SpellTextEdit from eventreceiver import Receiver -from imagemanager import ImageManager +from listwidgetwithdnd import ListWidgetWithDnD +from formattingtags import FormattingTags +from spelltextedit import SpellTextEdit from settingsmanager import SettingsManager from plugin import PluginStatus, StringContent, Plugin from pluginmanager import PluginManager @@ -338,6 +248,7 @@ from htmlbuilder import build_html, build_lyrics_format_css, \ build_lyrics_outline_css from toolbar import OpenLPToolbar from dockwidget import OpenLPDockWidget +from imagemanager import ImageManager from renderer import Renderer -from rendermanager import RenderManager from mediamanageritem import MediaManagerItem +from openlp.core.utils.actions import ActionList diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index 42dab1e42..5b4d97feb 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -31,8 +32,9 @@ import os from PyQt4 import QtCore from sqlalchemy import create_engine, MetaData -from sqlalchemy.exceptions import InvalidRequestError +from sqlalchemy.exc import InvalidRequestError from sqlalchemy.orm import scoped_session, sessionmaker +from sqlalchemy.pool import NullPool from openlp.core.utils import AppLocation, delete_file @@ -51,7 +53,7 @@ def init_db(url, auto_flush=True, auto_commit=False): ``auto_commit`` Sets the commit behaviour of the session """ - engine = create_engine(url) + engine = create_engine(url, poolclass=NullPool) metadata = MetaData(bind=engine) session = scoped_session(sessionmaker(autoflush=auto_flush, autocommit=auto_commit, bind=engine)) @@ -87,8 +89,8 @@ class BaseModel(object): Creates an instance of a class and populates it, returning the instance """ instance = cls() - for key in kwargs: - instance.__setattr__(key, kwargs[key]) + for key, value in kwargs.iteritems(): + instance.__setattr__(key, value) return instance diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index 9b4661fee..8c942171c 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,6 +33,7 @@ import logging from PyQt4 import QtGui from openlp.core.lib import build_icon +from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -45,8 +47,15 @@ class OpenLPDockWidget(QtGui.QDockWidget): """ 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(build_icon(icon)) + # Sort out the minimum width. + screens = ScreenList.get_instance() + screen_width = screens.current[u'size'].width() + mainwindow_docbars = screen_width / 5 + if mainwindow_docbars > 300: + self.setMinimumWidth(300) + else: + self.setMinimumWidth(mainwindow_docbars) diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index bee195b0f..7c0115f89 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -111,10 +112,6 @@ class EventReceiver(QtCore.QObject): ``servicemanager_set_item`` Go live on a specific item, by index - ``servicemanager_list_request`` - Request the service list. Responds with servicemanager_list_response - containing a array of dictionaries - ``maindisplay_blank`` Blank the maindisplay window diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py new file mode 100644 index 000000000..ae9d5c1cf --- /dev/null +++ b/openlp/core/lib/formattingtags.py @@ -0,0 +1,134 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### +""" +Provide HTML Tag management and Formatting Tag access class +""" + +from openlp.core.lib import translate + +class FormattingTags(object): + """ + Static Class to HTML Tags to be access around the code the list is managed + by the Options Tab. + """ + html_expands = [] + + @staticmethod + def get_html_tags(): + """ + Provide access to the html_expands list. + """ + return FormattingTags.html_expands + + @staticmethod + def reset_html_tags(): + """ + Resets the html_expands list. + """ + FormattingTags.html_expands = [] + base_tags = [] + # Append the base tags. + # Hex Color tags from http://www.w3schools.com/html/html_colornames.asp + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Red'), + u'start tag': u'{r}', + u'start html': u'', + u'end tag': u'{/r}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Black'), + u'start tag': u'{b}', + u'start html': u'', + u'end tag': u'{/b}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Blue'), + u'start tag': u'{bl}', + u'start html': u'', + u'end tag': u'{/bl}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Yellow'), + u'start tag': u'{y}', + u'start html': u'', + u'end tag': u'{/y}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Green'), + u'start tag': u'{g}', + u'start html': u'', + u'end tag': u'{/g}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Pink'), + u'start tag': u'{pk}', + u'start html': u'', + u'end tag': u'{/pk}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Orange'), + u'start tag': u'{o}', + u'start html': u'', + u'end tag': u'{/o}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Purple'), + u'start tag': u'{pp}', + u'start html': u'', + u'end tag': u'{/pp}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'White'), + u'start tag': u'{w}', + u'start html': u'', + u'end tag': u'{/w}', u'end html': u'', u'protected': True}) + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Superscript'), + u'start tag': u'{su}', u'start html': u'', + u'end tag': u'{/su}', u'end html': u'', u'protected': True}) + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Subscript'), + u'start tag': u'{sb}', u'start html': u'', + u'end tag': u'{/sb}', u'end html': u'', u'protected': True}) + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Paragraph'), + u'start tag': u'{p}', u'start html': u'

', u'end tag': u'{/p}', + u'end html': u'

', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Bold'), + u'start tag': u'{st}', u'start html': u'', + u'end tag': u'{/st}', u'end html': u'', + u'protected': True}) + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Italics'), + u'start tag': u'{it}', u'start html': u'', u'end tag': u'{/it}', + u'end html': u'', u'protected': True}) + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Underline'), + u'start tag': u'{u}', + u'start html': u'', + u'end tag': u'{/u}', u'end html': u'', u'protected': True}) + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Break'), + u'start tag': u'{br}', u'start html': u'
', u'end tag': u'', + u'end html': u'', u'protected': True}) + FormattingTags.add_html_tags(base_tags) + + @staticmethod + def add_html_tags(tags): + """ + Add a list of tags to the list + """ + FormattingTags.html_expands.extend(tags) + + @staticmethod + def remove_html_tag(tag_id): + """ + Removes an individual html_expands tag. + """ + FormattingTags.html_expands.pop(tag_id) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index c4361a421..6f56cf8b2 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,6 +34,7 @@ from openlp.core.lib.theme import BackgroundType, BackgroundGradientType, \ log = logging.getLogger(__name__) +# FIXME: Add html5 doctype. However, do not break theme gradients. HTMLSRC = u""" @@ -55,44 +57,44 @@ body { height: %spx; } #black { - z-index:8; + z-index: 8; background-color: black; display: none; } #bgimage { - z-index:1; + z-index: 1; } #image { - z-index:2; + z-index: 2; } #video1 { - z-index:3; + z-index: 3; } #video2 { - z-index:3; + z-index: 3; } #alert { position: absolute; left: 0px; top: 0px; - z-index:10; + z-index: 10; %s } #footer { position: absolute; - z-index:6; + z-index: 6; %s } /* lyric css */ %s sup { - font-size:0.6em; - vertical-align:top; - position:relative; - top:-0.3em; + font-size: 0.6em; + vertical-align: top; + position: relative; + top: -0.3em; } - +
""" % \ + (build_lyrics_format_css(self.theme_data, self.page_width, + self.page_height), build_lyrics_outline_css(self.theme_data)) + self.web.setHtml(html) - def format_slide(self, words, line_break, force_page=False): + def _paginate_slide(self, lines, line_end): """ Figure out how much text can appear on a slide, using the current theme settings. + **Note:** The smallest possible "unit" of text for a slide is one line. + If the line is too long it will be cut off when displayed. - ``words`` - The words to be fitted on the slide. - - ``line_break`` - Add line endings after each line of text used for bibles. - - ``force_page`` - Flag to tell message lines in page. + ``lines`` + The text to be fitted on the slide split into lines. + ``line_end`` + The text added after each line. Either ``u' '`` or ``u'
``. """ - log.debug(u'format_slide - Start') - line_end = u'' - if line_break: - line_end = u'
' - words = words.replace(u'\r\n', u'\n') - verses_text = words.split(u'\n') - text = [] - for verse in verses_text: - lines = verse.split(u'\n') - for line in lines: - text.append(line) + log.debug(u'_paginate_slide - Start') formatted = [] - html_text = u'' - styled_text = u'' - line_count = 0 - for line in text: - if line_count != -1: - line_count += 1 - styled_line = expand_tags(line) + line_end - styled_text += styled_line - html = self.page_shell + styled_text + u'' - self.web.setHtml(html) - # Text too long so go to next page - if self.web_frame.contentsSize().height() > self.page_height: - if force_page and line_count > 0: - Receiver.send_message(u'theme_line_count', line_count) - line_count = -1 - if html_text.endswith(u'
'): - html_text = html_text[:len(html_text)-4] - formatted.append(html_text) - html_text = u'' - styled_text = styled_line - html_text += line + line_end - if html_text.endswith(u'
'): - html_text = html_text[:len(html_text)-4] - formatted.append(html_text) - log.debug(u'format_slide - End') + previous_html = u'' + previous_raw = u'' + separator = u'
' + html_lines = map(expand_tags, lines) + # Text too long so go to next page. + if self._text_fits_on_slide(separator.join(html_lines)): + html_text, previous_raw = self._binary_chop(formatted, + previous_html, previous_raw, html_lines, lines, separator, u'') + else: + previous_raw = separator.join(lines) + if previous_raw: + formatted.append(previous_raw) + log.debug(u'_paginate_slide - End') return formatted + + def _paginate_slide_words(self, lines, line_end): + """ + Figure out how much text can appear on a slide, using the current + theme settings. + **Note:** The smallest possible "unit" of text for a slide is one word. + If one line is too long it will be processed word by word. This is + sometimes need for **bible** verses. + + ``lines`` + The text to be fitted on the slide split into lines. + + ``line_end`` + The text added after each line. Either ``u' '`` or ``u'
``. + This is needed for **bibles**. + """ + log.debug(u'_paginate_slide_words - Start') + formatted = [] + previous_html = u'' + previous_raw = u'' + for line in lines: + line = line.strip() + html_line = expand_tags(line) + # Text too long so go to next page. + if self._text_fits_on_slide(previous_html + html_line): + # Check if there was a verse before the current one and append + # it, when it fits on the page. + if previous_html: + if not self._text_fits_on_slide(previous_html): + formatted.append(previous_raw) + previous_html = u'' + previous_raw = u'' + # Now check if the current verse will fit, if it does + # not we have to start to process the verse word by + # word. + if not self._text_fits_on_slide(html_line): + previous_html = html_line + line_end + previous_raw = line + line_end + continue + # Figure out how many words of the line will fit on screen as + # the line will not fit as a whole. + raw_words = self._words_split(line) + html_words = map(expand_tags, raw_words) + previous_html, previous_raw = self._binary_chop( + formatted, previous_html, previous_raw, html_words, + raw_words, u' ', line_end) + else: + previous_html += html_line + line_end + previous_raw += line + line_end + formatted.append(previous_raw) + log.debug(u'_paginate_slide_words - End') + return formatted + + def _binary_chop(self, formatted, previous_html, previous_raw, html_list, + raw_list, separator, line_end): + """ + This implements the binary chop algorithm for faster rendering. This + algorithm works line based (line by line) and word based (word by word). + It is assumed that this method is **only** called, when the lines/words + to be rendered do **not** fit as a whole. + + ``formatted`` + The list to append any slides. + + ``previous_html`` + The html text which is know to fit on a slide, but is not yet added + to the list of slides. (unicode string) + + ``previous_raw`` + The raw text (with formatting tags) which is know to fit on a slide, + but is not yet added to the list of slides. (unicode string) + + ``html_list`` + The elements which do not fit on a slide and needs to be processed + using the binary chop. The text contains html. + + ``raw_list`` + The elements which do not fit on a slide and needs to be processed + using the binary chop. The elements can contain formatting tags. + + ``separator`` + The separator for the elements. For lines this is ``u'
'`` and + for words this is ``u' '``. + + ``line_end`` + The text added after each "element line". Either ``u' '`` or + ``u'
``. This is needed for bibles. + """ + smallest_index = 0 + highest_index = len(html_list) - 1 + index = int(highest_index / 2) + while True: + if self._text_fits_on_slide( + previous_html + separator.join(html_list[:index + 1]).strip()): + # We know that it does not fit, so change/calculate the + # new index and highest_index accordingly. + highest_index = index + index = int(index - (index - smallest_index) / 2) + else: + smallest_index = index + index = int(index + (highest_index - index) / 2) + # We found the number of words which will fit. + if smallest_index == index or highest_index == index: + index = smallest_index + formatted.append(previous_raw.rstrip(u'
') + + separator.join(raw_list[:index + 1])) + previous_html = u'' + previous_raw = u'' + # Stop here as the theme line count was requested. + if self.force_page: + Receiver.send_message(u'theme_line_count', index + 1) + break + else: + continue + # Check if the remaining elements fit on the slide. + if not self._text_fits_on_slide( + separator.join(html_list[index + 1:]).strip()): + previous_html = separator.join( + html_list[index + 1:]).strip() + line_end + previous_raw = separator.join( + raw_list[index + 1:]).strip() + line_end + break + else: + # The remaining elements do not fit, thus reset the indexes, + # create a new list and continue. + raw_list = raw_list[index + 1:] + html_list = html_list[index + 1:] + smallest_index = 0 + highest_index = len(html_list) - 1 + index = int(highest_index / 2) + return previous_html, previous_raw + + def _text_fits_on_slide(self, text): + """ + Checks if the given ``text`` fits on a slide. If it does ``True`` is + returned, otherwise ``False``. + + ``text`` + The text to check. It can contain HTML tags. + """ + self.web_frame.evaluateJavaScript(u'show_text("%s")' % + text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) + return self.web_frame.contentsSize().height() > self.page_height + + def _words_split(self, line): + """ + Split the slide up by word so can wrap better + """ + # this parse we are to be wordy + line = line.replace(u'\n', u' ') + return line.split(u' ') + + def _lines_split(self, text): + """ + Split the slide up by physical line + """ + # this parse we do not want to use this so remove it + text = text.replace(u'\n[---]', u'') + text = text.replace(u'[---]', u'') + return text.split(u'\n') diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py deleted file mode 100644 index 65f2b355c..000000000 --- a/openlp/core/lib/rendermanager.py +++ /dev/null @@ -1,261 +0,0 @@ -# -*- 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, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 - -from openlp.core.lib import Renderer, ServiceItem, ImageManager -from openlp.core.lib.theme import ThemeLevel -from openlp.core.ui import MainDisplay - -log = logging.getLogger(__name__) - -VERSE = u'The Lord said to {r}Noah{/r}: \n' \ - 'There\'s gonna be a {su}floody{/su}, {sb}floody{/sb}\n' \ - 'The Lord said to {g}Noah{/g}:\n' \ - 'There\'s gonna be a {st}floody{/st}, {it}floody{/it}\n' \ - 'Get those children out of the muddy, muddy \n' \ - '{r}C{/r}{b}h{/b}{bl}i{/bl}{y}l{/y}{g}d{/g}{pk}' \ - 'r{/pk}{o}e{/o}{pp}n{/pp} of the Lord\n' -FOOTER = [u'Arky Arky (Unknown)', u'Public Domain', u'CCLI 123456'] - -class RenderManager(object): - """ - Class to pull all Renderer interactions into one place. The plugins will - call helper methods to do the rendering but this class will provide - display defense code. - - ``theme_manager`` - The ThemeManager instance, used to get the current theme details. - - ``screens`` - Contains information about the Screens. - - ``screen_number`` - Defaults to *0*. The index of the output/display screen. - """ - log.info(u'RenderManager Loaded') - - def __init__(self, theme_manager, screens): - """ - Initialise the render manager. - """ - log.debug(u'Initilisation started') - self.screens = screens - self.image_manager = ImageManager() - self.display = MainDisplay(self, screens, False) - self.display.imageManager = self.image_manager - self.theme_manager = theme_manager - self.renderer = Renderer() - self.calculate_default(self.screens.current[u'size']) - self.theme = u'' - self.service_theme = u'' - self.theme_level = u'' - self.override_background = None - self.theme_data = None - self.force_page = False - - def update_display(self): - """ - Updates the render manager's information about the current screen. - """ - log.debug(u'Update Display') - self.calculate_default(self.screens.current[u'size']) - self.display = MainDisplay(self, self.screens, False) - self.display.imageManager = self.image_manager - self.display.setup() - self.renderer.bg_frame = None - self.theme_data = None - self.image_manager.update_display(self.width, self.height) - - def set_global_theme(self, global_theme, theme_level=ThemeLevel.Global): - """ - Set the global-level theme and the theme level. - - ``global_theme`` - The global-level theme to be set. - - ``theme_level`` - Defaults to *``ThemeLevel.Global``*. The theme level, can be - ``ThemeLevel.Global``, ``ThemeLevel.Service`` or - ``ThemeLevel.Song``. - """ - self.global_theme = global_theme - self.theme_level = theme_level - self.global_theme_data = \ - self.theme_manager.getThemeData(self.global_theme) - self.theme_data = None - - def set_service_theme(self, service_theme): - """ - Set the service-level theme. - - ``service_theme`` - The service-level theme to be set. - """ - self.service_theme = service_theme - self.theme_data = None - - def set_override_theme(self, theme, overrideLevels=False): - """ - Set the appropriate theme depending on the theme level. - Called by the service item when building a display frame - - ``theme`` - The name of the song-level theme. None means the service - item wants to use the given value. - - ``overrideLevels`` - Used to force the theme data passed in to be used. - - """ - log.debug(u'set override theme to %s', theme) - theme_level = self.theme_level - if overrideLevels: - theme_level = ThemeLevel.Song - if theme_level == ThemeLevel.Global: - self.theme = self.global_theme - elif theme_level == ThemeLevel.Service: - if self.service_theme == u'': - self.theme = self.global_theme - else: - self.theme = self.service_theme - else: - # Images have a theme of -1 - if theme and theme != -1: - self.theme = theme - elif theme_level == ThemeLevel.Song or \ - theme_level == ThemeLevel.Service: - if self.service_theme == u'': - self.theme = self.global_theme - else: - self.theme = self.service_theme - else: - self.theme = self.global_theme - if self.theme != self.renderer.theme_name or self.theme_data is None \ - or overrideLevels: - log.debug(u'theme is now %s', self.theme) - # Force the theme to be the one passed in. - if overrideLevels: - self.theme_data = theme - else: - self.theme_data = self.theme_manager.getThemeData(self.theme) - self.calculate_default(self.screens.current[u'size']) - self.renderer.set_theme(self.theme_data) - self.build_text_rectangle(self.theme_data) - self.image_manager.add_image(self.theme_data.theme_name, - self.theme_data.background_filename) - return self.renderer._rect, self.renderer._rect_footer - - def build_text_rectangle(self, theme): - """ - Builds a text block using the settings in ``theme`` - and the size of the display screen.height. - - ``theme`` - The theme to build a text block for. - """ - log.debug(u'build_text_rectangle') - main_rect = None - footer_rect = None - if not theme.font_main_override: - main_rect = QtCore.QRect(10, 0, self.width - 20, self.footer_start) - else: - main_rect = QtCore.QRect(theme.font_main_x, theme.font_main_y, - theme.font_main_width - 1, theme.font_main_height - 1) - if not theme.font_footer_override: - footer_rect = QtCore.QRect(10, self.footer_start, self.width - 20, - self.height - self.footer_start) - else: - footer_rect = QtCore.QRect(theme.font_footer_x, - theme.font_footer_y, theme.font_footer_width - 1, - theme.font_footer_height - 1) - self.renderer.set_text_rectangle(main_rect, footer_rect) - - def generate_preview(self, theme_data, force_page=False): - """ - Generate a preview of a theme. - - ``theme_data`` - The theme to generated a preview for. - - ``force_page`` - Flag to tell message lines per page need to be generated. - """ - log.debug(u'generate preview') - # save value for use in format_slide - self.force_page = force_page - # set the default image size for previews - self.calculate_default(self.screens.preview[u'size']) - # build a service item to generate preview - serviceItem = ServiceItem() - serviceItem.theme = theme_data - if self.force_page: - # make big page for theme edit dialog to get line count - serviceItem.add_from_text(u'', VERSE + VERSE + VERSE, FOOTER) - else: - self.image_manager.del_image(theme_data.theme_name) - serviceItem.add_from_text(u'', VERSE, FOOTER) - serviceItem.render_manager = self - serviceItem.raw_footer = FOOTER - serviceItem.render(True) - if not self.force_page: - self.display.buildHtml(serviceItem) - raw_html = serviceItem.get_rendered_frame(0) - preview = self.display.text(raw_html) - # Reset the real screen size for subsequent render requests - self.calculate_default(self.screens.current[u'size']) - return preview - - def format_slide(self, words, line_break): - """ - Calculate how much text can fit on a slide. - - ``words`` - The words to go on the slides. - - ``line_break`` - Add line endings after each line of text used for bibles. - """ - log.debug(u'format slide') - return self.renderer.format_slide(words, line_break, self.force_page) - - def calculate_default(self, screen): - """ - Calculate the default dimentions of the screen. - - ``screen`` - The QSize of the screen. - """ - log.debug(u'calculate default %s', screen) - self.width = screen.width() - self.height = screen.height() - self.screen_ratio = float(self.height) / float(self.width) - 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) diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index 4841d76dc..c172ba21d 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,6 +30,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon +from openlp.core.lib.ui import icon_action log = logging.getLogger(__name__) @@ -61,6 +63,7 @@ class SearchEdit(QtGui.QLineEdit): self._onSearchEditTextChanged ) self._updateStyleSheet() + self.setAcceptDrops(False) def _updateStyleSheet(self): """ @@ -73,10 +76,10 @@ class SearchEdit(QtGui.QLineEdit): if hasattr(self, u'menuButton'): leftPadding = self.menuButton.width() self.setStyleSheet( - u'QLineEdit { padding-left: %spx; padding-right: %spx; } ' % \ + u'QLineEdit { padding-left: %spx; padding-right: %spx; } ' % (leftPadding, rightPadding)) else: - self.setStyleSheet(u'QLineEdit { padding-right: %spx; } ' % \ + self.setStyleSheet(u'QLineEdit { padding-right: %spx; } ' % rightPadding) msz = self.minimumSizeHint() self.setMinimumSize( @@ -109,6 +112,21 @@ class SearchEdit(QtGui.QLineEdit): """ return self._currentSearchType + def setCurrentSearchType(self, identifier): + """ + Set a new current search type. + + ``identifier`` + The search type identifier (int). + """ + menu = self.menuButton.menu() + for action in menu.actions(): + if identifier == action.data().toInt()[0]: + self.menuButton.setDefaultAction(action) + self._currentSearchType = identifier + self.emit(QtCore.SIGNAL(u'searchTypeChanged(int)'), identifier) + return True + def setSearchTypes(self, items): """ A list of tuples to be used in the search type menu. The first item in @@ -132,7 +150,8 @@ class SearchEdit(QtGui.QLineEdit): menu = QtGui.QMenu(self) first = None for identifier, icon, title in items: - action = QtGui.QAction(build_icon(icon), title, menu) + action = icon_action(menu, u'', icon) + action.setText(title) action.setData(QtCore.QVariant(identifier)) menu.addAction(action) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 48a277633..15c16c551 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,13 +29,13 @@ The :mod:`serviceitem` provides the service item functionality including the type and capability of an item. """ +import cgi import datetime import logging import os import uuid -from openlp.core.lib import build_icon, clean_tags, expand_tags -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import build_icon, clean_tags, expand_tags, translate log = logging.getLogger(__name__) @@ -63,6 +64,8 @@ class ItemCapabilities(object): ProvidesOwnDisplay = 10 AllowsDetailedTitleDisplay = 11 AllowsVariableStartTime = 12 + AllowsVirtualSplit = 13 + AllowsWordSplit = 14 class ServiceItem(object): @@ -81,7 +84,7 @@ class ServiceItem(object): The plugin that this service item belongs to. """ if plugin: - self.render_manager = plugin.renderManager + self.renderer = plugin.renderer self.name = plugin.name self.title = u'' self.shortname = u'' @@ -151,7 +154,7 @@ class ServiceItem(object): self.icon = icon self.iconic_representation = build_icon(icon) - def render(self, useOverride=False): + def render(self, use_override=False): """ The render method is what generates the frames for the screen and obtains the display information from the renderemanager. @@ -161,29 +164,28 @@ class ServiceItem(object): log.debug(u'Render called') self._display_frames = [] self.bg_image_bytes = None - line_break = True - if self.is_capable(ItemCapabilities.NoLineBreaks): - line_break = False theme = self.theme if self.theme else None self.main, self.footer = \ - self.render_manager.set_override_theme(theme, useOverride) - self.themedata = self.render_manager.renderer._theme + self.renderer.set_override_theme(theme, use_override) + self.themedata = self.renderer.theme_data if self.service_item_type == ServiceItemType.Text: log.debug(u'Formatting slides') for slide in self._raw_frames: - formatted = self.render_manager \ - .format_slide(slide[u'raw_slide'], line_break) - for page in formatted: - self._display_frames.append( - {u'title': clean_tags(page), + pages = self.renderer.format_slide(slide[u'raw_slide'], self) + for page in pages: + page = page.replace(u'
', u'{br}') + html = expand_tags(cgi.escape(page.rstrip())) + self._display_frames.append({ + u'title': clean_tags(page), u'text': clean_tags(page.rstrip()), - u'html': expand_tags(page.rstrip()), - u'verseTag': slide[u'verseTag'] }) + u'html': html.replace(u'&nbsp;', u' '), + u'verseTag': slide[u'verseTag'] + }) elif self.service_item_type == ServiceItemType.Image or \ self.service_item_type == ServiceItemType.Command: pass else: - log.error(u'Invalid value renderer :%s' % self.service_item_type) + log.error(u'Invalid value renderer: %s' % self.service_item_type) self.title = clean_tags(self.title) # The footer should never be None, but to be compatible with a few # nightly builds between 1.9.4 and 1.9.5, we have to correct this to @@ -205,7 +207,7 @@ class ServiceItem(object): """ self.service_item_type = ServiceItemType.Image self._raw_frames.append({u'title': title, u'path': path}) - self.render_manager.image_manager.add_image(title, path) + self.renderer.imageManager.add_image(title, path) self._new_item() def add_from_text(self, title, raw_slide, verse_tag=None): @@ -218,6 +220,8 @@ class ServiceItem(object): ``raw_slide`` The raw text of the slide. """ + if verse_tag: + verse_tag = verse_tag.upper() self.service_item_type = ServiceItemType.Text title = title.split(u'\n')[0] self._raw_frames.append( @@ -268,11 +272,9 @@ class ServiceItem(object): } service_data = [] if self.service_item_type == ServiceItemType.Text: - for slide in self._raw_frames: - service_data.append(slide) + service_data = [slide for slide in self._raw_frames] elif self.service_item_type == ServiceItemType.Image: - for slide in self._raw_frames: - service_data.append(slide[u'title']) + service_data = [slide[u'title'] for slide in self._raw_frames] elif self.service_item_type == ServiceItemType.Command: for slide in self._raw_frames: service_data.append( @@ -347,8 +349,12 @@ class ServiceItem(object): Updates the _uuid with the value from the original one The _uuid is unique for a given service item but this allows one to replace an original version. + + ``other`` + The service item to be merged with """ self._uuid = other._uuid + self.notes = other.notes def __eq__(self, other): """ @@ -441,10 +447,12 @@ class ServiceItem(object): start = None end = None if self.start_time != 0: - start = UiStrings.StartTimeCode % \ + start = unicode(translate('OpenLP.ServiceItem', + 'Start: %s')) % \ unicode(datetime.timedelta(seconds=self.start_time)) if self.media_length != 0: - end = UiStrings.LengthTime % \ + end = unicode(translate('OpenLP.ServiceItem', + 'Length: %s')) % \ unicode(datetime.timedelta(seconds=self.media_length)) if not start and not end: return None @@ -453,4 +461,16 @@ class ServiceItem(object): elif not start and end: return end else: - return u'%s : %s' % (start, end) + return u'%s
%s' % (start, end) + + def update_theme(self, theme): + """ + updates the theme in the service item + + ``theme`` + The new theme to be replaced in the service item + """ + self.theme = theme + self._new_item() + self.render() + diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index bb83371e6..9bcbf2f07 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -37,26 +38,9 @@ from openlp.core.utils import AppLocation class SettingsManager(object): """ - Class to control the initial settings for the UI and provide helper - functions for the loading and saving of application settings. + Class to provide helper functions for the loading and saving of application + settings. """ - def __init__(self, screen): - self.screen = screen.current - self.width = self.screen[u'size'].width() - self.height = self.screen[u'size'].height() - self.mainwindow_height = self.height * 0.8 - mainwindow_docbars = self.width / 5 - self.mainwindow_left = 0 - self.mainwindow_right = 0 - if mainwindow_docbars > 300: - self.mainwindow_left = 300 - self.mainwindow_right = 300 - else: - self.mainwindow_left = mainwindow_docbars - self.mainwindow_right = mainwindow_docbars - self.slidecontroller = (self.width - ( - self.mainwindow_left + self.mainwindow_right) - 100) / 2 - self.slidecontroller_image = self.slidecontroller - 50 @staticmethod def get_last_dir(section, num=None): diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index 1c2ad5fe4..46263efca 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -31,7 +32,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, parent, title, visible_title=None, icon_path=None): """ Constructor to create the Settings tab item. @@ -41,14 +42,15 @@ class SettingsTab(QtGui.QWidget): ``visible_title`` The title of the tab, which is usually displayed on the tab. """ - QtGui.QWidget.__init__(self) + QtGui.QWidget.__init__(self, parent) self.tabTitle = title self.tabTitleVisible = visible_title self.settingsSection = self.tabTitle.lower() + if icon_path: + self.icon_path = icon_path self.setupUi() self.retranslateUi() self.initialise() - self.preLoad() self.load() def setupUi(self): @@ -84,12 +86,6 @@ class SettingsTab(QtGui.QWidget): left_width = max(left_width, self.leftColumn.minimumSizeHint().width()) self.leftColumn.setFixedWidth(left_width) - def preLoad(self): - """ - Setup the tab's interface. - """ - pass - def retranslateUi(self): """ Setup the interface translation strings. @@ -116,9 +112,9 @@ class SettingsTab(QtGui.QWidget): def cancel(self): """ - Reset any settings + Reset any settings if cancel pressed """ - pass + self.load() def postSetUp(self, postUpdate=False): """ diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 4016dcb09..b0bb61e92 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -23,11 +24,12 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +import logging import re try: import enchant from enchant import DictNotFoundError + from enchant.errors import Error ENCHANT_AVAILABLE = True except ImportError: ENCHANT_AVAILABLE = False @@ -36,22 +38,28 @@ except ImportError: # http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, DisplayTags + +from openlp.core.lib import translate, FormattingTags +from openlp.core.lib.ui import checkable_action + +log = logging.getLogger(__name__) class SpellTextEdit(QtGui.QPlainTextEdit): """ Spell checking widget based on QPlanTextEdit. """ def __init__(self, *args): + global ENCHANT_AVAILABLE QtGui.QPlainTextEdit.__init__(self, *args) # Default dictionary based on the current locale. if ENCHANT_AVAILABLE: try: self.dictionary = enchant.Dict() - except DictNotFoundError: - self.dictionary = enchant.Dict(u'en_US') - self.highlighter = Highlighter(self.document()) - self.highlighter.spellingDictionary = self.dictionary + self.highlighter = Highlighter(self.document()) + self.highlighter.spellingDictionary = self.dictionary + except (Error, DictNotFoundError): + ENCHANT_AVAILABLE = False + log.debug(u'Could not load default dictionary') def mousePressEvent(self, event): """ @@ -76,6 +84,19 @@ class SpellTextEdit(QtGui.QPlainTextEdit): if not cursor.hasSelection(): cursor.select(QtGui.QTextCursor.WordUnderCursor) self.setTextCursor(cursor) + # Add menu with available languages. + if ENCHANT_AVAILABLE: + lang_menu = QtGui.QMenu( + translate('OpenLP.SpellTextEdit', 'Language:')) + for lang in enchant.list_languages(): + action = checkable_action( + lang_menu, lang, lang == self.dictionary.tag) + action.setText(lang) + lang_menu.addAction(action) + popupMenu.insertSeparator(popupMenu.actions()[0]) + popupMenu.insertMenu(popupMenu.actions()[0], lang_menu) + QtCore.QObject.connect(lang_menu, + QtCore.SIGNAL(u'triggered(QAction*)'), self.setLanguage) # Check if the selected word is misspelled and offer spelling # suggestions if it is. if ENCHANT_AVAILABLE and self.textCursor().hasSelection(): @@ -89,19 +110,30 @@ class SpellTextEdit(QtGui.QPlainTextEdit): spell_menu.addAction(action) # Only add the spelling suggests to the menu if there are # suggestions. - if len(spell_menu.actions()) != 0: - popupMenu.insertSeparator(popupMenu.actions()[0]) + if len(spell_menu.actions()): popupMenu.insertMenu(popupMenu.actions()[0], spell_menu) tagMenu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags')) - for html in DisplayTags.get_html_tags(): - action = SpellAction( html[u'desc'], tagMenu) + for html in FormattingTags.get_html_tags(): + action = SpellAction(html[u'desc'], tagMenu) action.correct.connect(self.htmlTag) tagMenu.addAction(action) popupMenu.insertSeparator(popupMenu.actions()[0]) popupMenu.insertMenu(popupMenu.actions()[0], tagMenu) popupMenu.exec_(event.globalPos()) + def setLanguage(self, action): + """ + Changes the language for this spelltextedit. + + ``action`` + The action. + """ + self.dictionary = enchant.Dict(action.text()) + self.highlighter.spellingDictionary = self.dictionary + self.highlighter.highlightBlock(self.toPlainText()) + self.highlighter.rehighlight() + def correctWord(self, word): """ Replaces the selected text with word. @@ -116,7 +148,7 @@ class SpellTextEdit(QtGui.QPlainTextEdit): """ Replaces the selected text with word. """ - for html in DisplayTags.get_html_tags(): + for html in FormattingTags.get_html_tags(): if tag == html[u'desc']: cursor = self.textCursor() if self.textCursor().hasSelection(): diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index 134df7652..c87f9aa2e 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,8 +34,7 @@ import logging from xml.dom.minidom import Document from lxml import etree, objectify -from openlp.core.lib import str_to_bool, translate -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import str_to_bool log = logging.getLogger(__name__) @@ -177,10 +177,6 @@ class HorizontalType(object): Center = 2 Names = [u'left', u'right', u'center'] - TranslatedNames = [ - translate('OpenLP.ThemeWizard', 'Left'), - translate('OpenLP.ThemeWizard', 'Right'), - translate('OpenLP.ThemeWizard', 'Center')] class VerticalType(object): @@ -192,7 +188,6 @@ class VerticalType(object): Bottom = 2 Names = [u'top', u'middle', u'bottom'] - TranslatedNames = [UiStrings.Top, UiStrings.Middle, UiStrings.Bottom] BOOLEAN_LIST = [u'bold', u'italics', u'override', u'outline', u'shadow', @@ -207,6 +202,8 @@ class ThemeXML(object): """ A class to encapsulate the Theme XML. """ + FIRST_CAMEL_REGEX = re.compile(u'(.)([A-Z][a-z]+)') + SECOND_CAMEL_REGEX = re.compile(u'([a-z0-9])([A-Z])') def __init__(self): """ Initialise the theme object. @@ -581,8 +578,8 @@ class ThemeXML(object): """ Change Camel Case string to python string """ - sub_name = re.sub(u'(.)([A-Z][a-z]+)', r'\1_\2', name) - return re.sub(u'([a-z0-9])([A-Z])', r'\1_\2', sub_name).lower() + sub_name = ThemeXML.FIRST_CAMEL_REGEX.sub(r'\1_\2', name) + return ThemeXML.SECOND_CAMEL_REGEX.sub(r'\1_\2', sub_name).lower() def _build_xml_from_attrs(self): """ diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index d5d2fa4f8..cf550d875 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -51,8 +52,7 @@ class OpenLPToolbar(QtGui.QToolBar): log.debug(u'Init done for %s' % parent.__class__.__name__) def addToolbarButton(self, title, icon, tooltip=None, slot=None, - checkable=False, shortcut=0, alternate=0, - context=QtCore.Qt.WidgetShortcut): + checkable=False, shortcuts=None, context=QtCore.Qt.WidgetShortcut): """ A method to help developers easily add a button to the toolbar. @@ -74,16 +74,12 @@ class OpenLPToolbar(QtGui.QToolBar): If *True* the button has two, *off* and *on*, states. Default is *False*, which means the buttons has only one state. - ``shortcut`` - The primary shortcut for this action - - ``alternate`` - The alternate shortcut for this action + ``shortcuts`` + The list of shortcuts for this action ``context`` Specify the context in which this shortcut is valid """ - newAction = None if icon: actionIcon = build_icon(icon) if slot and not checkable: @@ -92,7 +88,7 @@ class OpenLPToolbar(QtGui.QToolBar): newAction = self.addAction(actionIcon, title) self.icons[title] = actionIcon else: - newAction = QtGui.QAction(title, newAction) + newAction = QtGui.QAction(title, self) self.addAction(newAction) QtCore.QObject.connect(newAction, QtCore.SIGNAL(u'triggered()'), slot) @@ -103,8 +99,9 @@ class OpenLPToolbar(QtGui.QToolBar): QtCore.QObject.connect(newAction, QtCore.SIGNAL(u'toggled(bool)'), slot) self.actions[title] = newAction - newAction.setShortcuts([shortcut, alternate]) - newAction.setShortcutContext(context) + if shortcuts is not None: + newAction.setShortcuts(shortcuts) + newAction.setShortcutContext(context) return newAction def addToolbarSeparator(self, handle): diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c1a9f8b35..756df36c3 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -31,6 +32,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, Receiver, translate +from openlp.core.utils.actions import ActionList log = logging.getLogger(__name__) @@ -38,66 +40,105 @@ class UiStrings(object): """ Provide standard strings for objects to use. """ - # These strings should need a good reason to be retranslated elsewhere. - # Should some/more/less of these have an & attached? - About = translate('OpenLP.Ui', 'About') - Add = translate('OpenLP.Ui', '&Add') - Advanced = translate('OpenLP.Ui', 'Advanced') - AllFiles = translate('OpenLP.Ui', 'All Files') - Bottom = translate('OpenLP.Ui', 'Bottom') - Browse = translate('OpenLP.Ui', 'Browse...') - Cancel = translate('OpenLP.Ui', 'Cancel') - CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') - CreateService = translate('OpenLP.Ui', 'Create a new service.') - Default = unicode(translate('OpenLP.Ui', 'Default')) - Delete = translate('OpenLP.Ui', '&Delete') - Edit = translate('OpenLP.Ui', '&Edit') - EmptyField = translate('OpenLP.Ui', 'Empty Field') - Error = translate('OpenLP.Ui', 'Error') - Export = translate('OpenLP.Ui', 'Export') - FontSizePtUnit = translate('OpenLP.Ui', 'pt', - 'Abbreviated font pointsize unit') - Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') - Image = translate('OpenLP.Ui', 'Image') - Import = translate('OpenLP.Ui', 'Import') - LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) - Live = translate('OpenLP.Ui', 'Live') - LiveBGError = translate('OpenLP.Ui', 'Live Background Error') - LivePanel = translate('OpenLP.Ui', 'Live Panel') - Load = translate('OpenLP.Ui', 'Load') - Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes') - Middle = translate('OpenLP.Ui', 'Middle') - New = translate('OpenLP.Ui', 'New') - NewService = translate('OpenLP.Ui', 'New Service') - NewTheme = translate('OpenLP.Ui', 'New Theme') - NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') - NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') - NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') - NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') - OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') - OLPV2 = translate('OpenLP.Ui', 'OpenLP 2.0') - OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you ' - 'wish to continue?') - OpenService = translate('OpenLP.Ui', 'Open Service') - Preview = translate('OpenLP.Ui', 'Preview') - PreviewPanel = translate('OpenLP.Ui', 'Preview Panel') - PrintServiceOrder = translate('OpenLP.Ui', 'Print Service Order') - ReplaceBG = translate('OpenLP.Ui', 'Replace Background') - ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background') - ResetBG = translate('OpenLP.Ui', 'Reset Background') - ResetLiveBG = translate('OpenLP.Ui', 'Reset Live Background') - Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') - SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') - Search = translate('OpenLP.Ui', 'Search') - SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.') - SelectEdit = translate('OpenLP.Ui', 'You must select an item to edit.') - SaveService = translate('OpenLP.Ui', 'Save Service') - Service = translate('OpenLP.Ui', 'Service') - StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s')) - Theme = translate('OpenLP.Ui', 'Theme', 'Singular') - Themes = translate('OpenLP.Ui', 'Themes', 'Plural') - Top = translate('OpenLP.Ui', 'Top') - Version = translate('OpenLP.Ui', 'Version') + __instance__ = None + + def __new__(cls): + """ + Override the default object creation method to return a single instance. + """ + if not cls.__instance__: + cls.__instance__ = object.__new__(cls) + return cls.__instance__ + + def __init__(self): + """ + These strings should need a good reason to be retranslated elsewhere. + Should some/more/less of these have an & attached? + """ + self.About = translate('OpenLP.Ui', 'About') + self.Add = translate('OpenLP.Ui', '&Add') + self.Advanced = translate('OpenLP.Ui', 'Advanced') + self.AllFiles = translate('OpenLP.Ui', 'All Files') + self.Bottom = translate('OpenLP.Ui', 'Bottom') + self.Browse = translate('OpenLP.Ui', 'Browse...') + self.Cancel = translate('OpenLP.Ui', 'Cancel') + self.CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') + self.CreateService = translate('OpenLP.Ui', 'Create a new service.') + self.ConfirmDelete = translate('OpenLP.Ui', 'Confirm Delete') + self.Continuous = translate('OpenLP.Ui', 'Continuous') + self.Default = unicode(translate('OpenLP.Ui', 'Default')) + self.Delete = translate('OpenLP.Ui', '&Delete') + self.DisplayStyle = translate('OpenLP.Ui', 'Display style:') + self.Duplicate = translate('OpenLP.Ui', 'Duplicate Error') + self.Edit = translate('OpenLP.Ui', '&Edit') + self.EmptyField = translate('OpenLP.Ui', 'Empty Field') + self.Error = translate('OpenLP.Ui', 'Error') + self.Export = translate('OpenLP.Ui', 'Export') + self.File = translate('OpenLP.Ui', 'File') + self.FontSizePtUnit = translate('OpenLP.Ui', 'pt', + 'Abbreviated font pointsize unit') + self.Help = translate('OpenLP.Ui', 'Help') + self.Hours = translate('OpenLP.Ui', 'h', + 'The abbreviated unit for hours') + self.Image = translate('OpenLP.Ui', 'Image') + self.Import = translate('OpenLP.Ui', 'Import') + self.LayoutStyle = translate('OpenLP.Ui', 'Layout style:') + self.Live = translate('OpenLP.Ui', 'Live') + self.LiveBGError = translate('OpenLP.Ui', 'Live Background Error') + self.LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') + self.Load = translate('OpenLP.Ui', 'Load') + self.Minutes = translate('OpenLP.Ui', 'm', + 'The abbreviated unit for minutes') + self.Middle = translate('OpenLP.Ui', 'Middle') + self.New = translate('OpenLP.Ui', 'New') + self.NewService = translate('OpenLP.Ui', 'New Service') + self.NewTheme = translate('OpenLP.Ui', 'New Theme') + self.NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') + self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') + self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') + self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') + self.OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') + self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2.0') + self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. ' + 'Do you wish to continue?') + self.OpenService = translate('OpenLP.Ui', 'Open service.') + self.PlaySlidesInLoop = translate('OpenLP.Ui','Play Slides in Loop') + self.PlaySlidesToEnd = translate('OpenLP.Ui','Play Slides to End') + self.Preview = translate('OpenLP.Ui', 'Preview') + self.PrintService = translate('OpenLP.Ui', 'Print Service') + self.ReplaceBG = translate('OpenLP.Ui', 'Replace Background') + self.ReplaceLiveBG = translate('OpenLP.Ui', 'Replace live background.') + self.ResetBG = translate('OpenLP.Ui', 'Reset Background') + self.ResetLiveBG = translate('OpenLP.Ui', 'Reset live background.') + self.Seconds = translate('OpenLP.Ui', 's', + 'The abbreviated unit for seconds') + self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') + self.Search = translate('OpenLP.Ui', 'Search') + self.SelectDelete = translate('OpenLP.Ui', 'You must select an item ' + 'to delete.') + self.SelectEdit = translate('OpenLP.Ui', 'You must select an item to ' + 'edit.') + self.Settings = translate('OpenLP.Ui', 'Settings') + self.SaveService = translate('OpenLP.Ui', 'Save Service') + self.Service = translate('OpenLP.Ui', 'Service') + self.Split = translate('OpenLP.Ui', '&Split') + self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two ' + 'only if it does not fit on the screen as one slide.') + self.StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s')) + self.StopPlaySlidesInLoop = translate('OpenLP.Ui', + 'Stop Play Slides in Loop') + self.StopPlaySlidesToEnd = translate('OpenLP.Ui', + 'Stop Play Slides to End') + self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular') + self.Themes = translate('OpenLP.Ui', 'Themes', 'Plural') + self.Tools = translate('OpenLP.Ui', 'Tools') + self.Top = translate('OpenLP.Ui', 'Top') + self.UnsupportedFile = translate('OpenLP.Ui', 'Unsupported File') + self.VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') + self.VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') + self.Version = translate('OpenLP.Ui', 'Version') + self.View = translate('OpenLP.Ui', 'View') + self.ViewMode = translate('OpenLP.Ui', 'View Mode') def add_welcome_page(parent, image): """ @@ -144,7 +185,8 @@ def create_accept_reject_button_box(parent, okay=False): accept_button = QtGui.QDialogButtonBox.Save if okay: accept_button = QtGui.QDialogButtonBox.Ok - button_box.setStandardButtons(accept_button | QtGui.QDialogButtonBox.Cancel) + button_box.setStandardButtons( + accept_button | QtGui.QDialogButtonBox.Cancel) button_box.setObjectName(u'%sButtonBox' % parent) QtCore.QObject.connect(button_box, QtCore.SIGNAL(u'accepted()'), parent.accept) @@ -171,11 +213,11 @@ def critical_error_message_box(title=None, message=None, parent=None, Should this message box question the user. """ if question: - return QtGui.QMessageBox.critical(parent, UiStrings.Error, message, + return QtGui.QMessageBox.critical(parent, UiStrings().Error, message, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) data = {u'message': message} - data[u'title'] = title if title else UiStrings.Error + data[u'title'] = title if title else UiStrings().Error return Receiver.send_message(u'openlp_error_message', data) def media_item_combo_box(parent, name): @@ -205,7 +247,7 @@ def create_delete_push_button(parent, icon=None): delete_button.setObjectName(u'deleteButton') delete_icon = icon if icon else u':/general/general_delete.png' delete_button.setIcon(build_icon(delete_icon)) - delete_button.setText(UiStrings.Delete) + delete_button.setText(UiStrings().Delete) delete_button.setToolTip( translate('OpenLP.Ui', 'Delete the selected item.')) QtCore.QObject.connect(delete_button, @@ -238,43 +280,129 @@ def create_up_down_push_button_set(parent): QtCore.SIGNAL(u'clicked()'), parent.onDownButtonClicked) return up_button, down_button -def base_action(parent, name): +def base_action(parent, name, category=None): """ Return the most basic action with the object name set. + + ``category`` + The category the action should be listed in the shortcut dialog. If you + not wish, that this action is added to the shortcut dialog, then do not + state any. """ action = QtGui.QAction(parent) action.setObjectName(name) + if category is not None: + action_list = ActionList.get_instance() + action_list.add_action(action, category) return action -def checkable_action(parent, name, checked=None): +def checkable_action(parent, name, checked=None, category=None): """ Return a standard action with the checkable attribute set. """ - action = base_action(parent, name) + action = base_action(parent, name, category) action.setCheckable(True) if checked is not None: action.setChecked(checked) return action -def icon_action(parent, name, icon, checked=None): +def icon_action(parent, name, icon, checked=None, category=None): """ Return a standard action with an icon. """ if checked is not None: - action = checkable_action(parent, name, checked) + action = checkable_action(parent, name, checked, category) else: - action = base_action(parent, name) + action = base_action(parent, name, category) action.setIcon(build_icon(icon)) return action -def shortcut_action(parent, text, shortcuts, function): +def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, + category=None, context=QtCore.Qt.WindowShortcut): """ Return a shortcut enabled action. """ - action = QtGui.QAction(text, parent) - action.setShortcuts(shortcuts) - action.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) - QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) + action = QtGui.QAction(parent) + action.setObjectName(name) + if icon is not None: + action.setIcon(build_icon(icon)) + if checked is not None: + action.setCheckable(True) + action.setChecked(checked) + if shortcuts: + action.setShortcuts(shortcuts) + action.setShortcutContext(context) + action_list = ActionList.get_instance() + action_list.add_action(action, category) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), function) + return action + +def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, + context=QtCore.Qt.WidgetShortcut): + """ + Utility method to help build context menus. + + ``base`` + The parent menu to add this menu item to + + ``icon`` + An icon for this action + + ``text`` + The text to display for this action + + ``slot`` + The code to run when this action is triggered + + ``shortcuts`` + The action's shortcuts. + + ``category`` + The category the shortcut should be listed in the shortcut dialog. If + left to ``None``, then the action will be hidden in the shortcut dialog. + + ``context`` + The context the shortcut is valid. + """ + action = QtGui.QAction(text, base) + if icon: + action.setIcon(build_icon(icon)) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), slot) + if shortcuts is not None: + action.setShortcuts(shortcuts) + action.setShortcutContext(context) + action_list = ActionList.get_instance() + action_list.add_action(action) + base.addAction(action) + return action + +def context_menu(base, icon, text): + """ + Utility method to help build context menus. + + ``base`` + The parent object to add this menu to + + ``icon`` + An icon for this menu + + ``text`` + The text to display for this menu + """ + action = QtGui.QMenu(text, base) + action.setIcon(build_icon(icon)) + return action + +def context_menu_separator(base): + """ + Add a separator to a context menu + + ``base`` + The menu object to add the separator to + """ + action = QtGui.QAction(u'', base) + action.setSeparator(True) + base.addAction(action) return action def add_widget_completer(cache, widget): @@ -310,8 +438,25 @@ def create_valign_combo(form, parent, layout): verticalLabel.setText(translate('OpenLP.Ui', '&Vertical Align:')) form.verticalComboBox = QtGui.QComboBox(parent) form.verticalComboBox.setObjectName(u'VerticalComboBox') - form.verticalComboBox.addItem(UiStrings.Top) - form.verticalComboBox.addItem(UiStrings.Middle) - form.verticalComboBox.addItem(UiStrings.Bottom) + form.verticalComboBox.addItem(UiStrings().Top) + form.verticalComboBox.addItem(UiStrings().Middle) + form.verticalComboBox.addItem(UiStrings().Bottom) verticalLabel.setBuddy(form.verticalComboBox) layout.addRow(verticalLabel, form.verticalComboBox) + +def find_and_set_in_combo_box(combo_box, value_to_find): + """ + Find a string in a combo box and set it as the selected item if present + + ``combo_box`` + The combo box to check for selected items + + ``value_to_find`` + The value to find + """ + index = combo_box.findText(value_to_find, + QtCore.Qt.MatchExactly) + if index == -1: + # Not Found. + index = 0 + combo_box.setCurrentIndex(index) diff --git a/openlp/core/theme/__init__.py b/openlp/core/theme/__init__.py index bd5ba899d..44a937608 100644 --- a/openlp/core/theme/__init__.py +++ b/openlp/core/theme/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index 78e9cb7e7..48e364dbd 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index a2985c0b8..e754480e0 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -56,10 +57,10 @@ from firsttimelanguageform import FirstTimeLanguageForm from themeform import ThemeForm from filerenameform import FileRenameForm from starttimeform import StartTimeForm +from screen import ScreenList from maindisplay import MainDisplay from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm -from screen import ScreenList from slidecontroller import SlideController from splashscreen import SplashScreen from generaltab import GeneralTab @@ -68,7 +69,7 @@ from advancedtab import AdvancedTab from aboutform import AboutForm from pluginform import PluginForm from settingsform import SettingsForm -from displaytagform import DisplayTagForm +from formattingtagform import FormattingTagForm from shortcutlistform import ShortcutListForm from mediadockmanager import MediaDockManager from servicemanager import ServiceManager diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 33fc53827..3e941c051 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -87,7 +88,7 @@ class Ui_AboutDialog(object): QtCore.QMetaObject.connectSlotsByName(aboutDialog) def retranslateUi(self, aboutDialog): - aboutDialog.setWindowTitle(u'%s OpenLP' % UiStrings.About) + aboutDialog.setWindowTitle(u'%s OpenLP' % UiStrings().About) self.aboutTextEdit.setPlainText(translate('OpenLP.AboutForm', 'OpenLP - Open Source Lyrics ' 'Projection\n' @@ -95,7 +96,7 @@ class Ui_AboutDialog(object): 'OpenLP is free church presentation software, or lyrics ' 'projection software, used to display slides of songs, Bible ' 'verses, videos, images, and even presentations (if ' - 'OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) ' + 'Impress, PowerPoint or PowerPoint Viewer is installed) ' 'for church worship using a computer and a data projector.\n' '\n' 'Find out more about OpenLP: http://openlp.org/\n' @@ -105,18 +106,20 @@ class Ui_AboutDialog(object): 'consider contributing by using the button below.' )) self.aboutNotebook.setTabText( - self.aboutNotebook.indexOf(self.aboutTab), UiStrings.About) + self.aboutNotebook.indexOf(self.aboutTab), UiStrings().About) lead = u'Raoul "superfly" Snyman' developers = [u'Tim "TRB143" Bentley', u'Jonathan "gushie" Corwin', u'Michael "cocooncrash" Gorven', u'Andreas "googol" Preikschat', u'Raoul "superfly" Snyman', u'Martin "mijiti" Thompson', u'Jon "Meths" Tibble'] - contributors = [u'Scott "sguerrieri" Guerrieri', + contributors = [u'Gerald "jerryb" Britton', + u'Scott "sguerrieri" Guerrieri', u'Matthias "matthub" Hub', u'Meinert "m2j" Jordan', - u'Armin "orangeshirt" K\xf6hler', u'Mattias "mahfiaz" P\xf5ldaru', + u'Armin "orangeshirt" K\xf6hler', u'Joshua "milleja46" Miller', + u'Stevan "StevanP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', u'Christian "crichter" Richter', u'Philip "Phill" Ridout', - u'Jeffrey "whydoubt" Smith', u'Maikel Stuivenberg', - u'Frode "frodus" Woldsund'] + u'Simon "samscudder" Scudder', u'Jeffrey "whydoubt" Smith', + u'Maikel Stuivenberg', u'Frode "frodus" Woldsund'] testers = [u'Philip "Phill" Ridout', u'Wesley "wrst" Stout', u'John "jseagull1" Cegalis (lead)'] packagers = ['Thomas "tabthorpe" Abthorpe (FreeBSD)', @@ -133,11 +136,12 @@ class Ui_AboutDialog(object): u'en_ZA': [u'Raoul "superfly" Snyman'], u'et': [u'Mattias "mahfiaz" P\xf5ldaru'], u'fr': [u'Stephan\xe9 "stbrunner" Brunner'], - u'hu': [u'Gyuris Gell\xe9t'], + u'hu': [u'Gyuris Gell\xe9rt'], u'ja': [u'Kunio "Kunio" Nakamaru'], u'nb': [u'Atle "pendlaren" Weibell', u'Frode "frodus" Woldsund'], u'nl': [u'Arjen "typovar" van Voorst'], - u'pt_BR': [u'Rafael "rafaellerm" Lerm', u'Gustavo Bim'], + u'pt_BR': [u'Rafael "rafaellerm" Lerm', u'Gustavo Bim', + u'Simon "samscudder" Scudder'], u'ru': [u'Sergey "ratz" Ratz'] } documentors = [u'Wesley "wrst" Stout', @@ -221,13 +225,15 @@ class Ui_AboutDialog(object): self.aboutNotebook.setTabText( self.aboutNotebook.indexOf(self.creditsTab), translate('OpenLP.AboutForm', 'Credits')) - copyright = translate('OpenLP.AboutForm', - 'Copyright \xa9 2004-2011 Raoul Snyman\n' - 'Portions copyright \xa9 2004-2011 ' - 'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri,\n' - 'Meinert Jordan, Andreas Preikschat, Christian Richter, Philip\n' - 'Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten\n' - 'Tinggaard, Frode Woldsund') + copyright = unicode(translate('OpenLP.AboutForm', + 'Copyright \xa9 2004-2011 %s\n' + 'Portions copyright \xa9 2004-2011 %s')) % (u'Raoul Snyman', + u'Tim Bentley, Jonathan Corwin, Michael Gorven, Gerald Britton, ' + u'Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin K\xf6hler, ' + u'Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias ' + u'P\xf5ldaru, Christian Richter, Philip Ridout, Simon Scudder, ' + u'Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, ' + u'Frode Woldsund') licence = translate('OpenLP.AboutForm', 'This program is free software; you can redistribute it and/or ' 'modify it under the terms of the GNU General Public License as ' diff --git a/openlp/core/ui/aboutform.py b/openlp/core/ui/aboutform.py index 4112cfd8f..4e031656c 100644 --- a/openlp/core/ui/aboutform.py +++ b/openlp/core/ui/aboutform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -60,6 +61,5 @@ class AboutForm(QtGui.QDialog, Ui_AboutDialog): Launch a web browser and go to the contribute page on the site. """ import webbrowser - url = u'http://www.openlp.org/en/documentation/introduction/' \ - + u'contributing.html' + url = u'http://openlp.org/en/documentation/introduction/contributing' webbrowser.open_new(url) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index e9ab159ea..43e2a9915 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -37,13 +38,15 @@ class AdvancedTab(SettingsTab): The :class:`AdvancedTab` manages the advanced settings tab including the UI and the loading and saving of the displayed settings. """ - def __init__(self): + def __init__(self, parent): """ Initialise the settings tab """ - SettingsTab.__init__(self, u'Advanced') + advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' + self.icon_path = u':/system/system_settings.png' + SettingsTab.__init__(self, parent, u'Advanced', advancedTranslated) def setupUi(self): """ @@ -67,6 +70,10 @@ class AdvancedTab(SettingsTab): self.doubleClickLiveCheckBox = QtGui.QCheckBox(self.uiGroupBox) self.doubleClickLiveCheckBox.setObjectName(u'doubleClickLiveCheckBox') self.uiLayout.addRow(self.doubleClickLiveCheckBox) + self.singleClickPreviewCheckBox = QtGui.QCheckBox(self.uiGroupBox) + self.singleClickPreviewCheckBox.setObjectName( + u'singleClickPreviewCheckBox') + self.uiLayout.addRow(self.singleClickPreviewCheckBox) self.expandServiceItemCheckBox = QtGui.QCheckBox(self.uiGroupBox) self.expandServiceItemCheckBox.setObjectName( u'expandServiceItemCheckBox') @@ -76,14 +83,6 @@ class AdvancedTab(SettingsTab): u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) - self.hideMouseGroupBox = QtGui.QGroupBox(self.leftColumn) - self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox') - self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox) - self.hideMouseLayout.setObjectName(u'hideMouseLayout') - self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox) - self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') - self.hideMouseLayout.addWidget(self.hideMouseCheckBox) - self.leftLayout.addWidget(self.hideMouseGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') @@ -103,26 +102,42 @@ class AdvancedTab(SettingsTab): self.defaultBrowseButton.setObjectName(u'defaultBrowseButton') self.defaultBrowseButton.setIcon( build_icon(u':/general/general_open.png')) + self.defaultRevertButton = QtGui.QToolButton(self.defaultImageGroupBox) + self.defaultRevertButton.setObjectName(u'defaultRevertButton') + self.defaultRevertButton.setIcon( + build_icon(u':/general/general_revert.png')) self.defaultFileLayout = QtGui.QHBoxLayout() self.defaultFileLayout.setObjectName(u'defaultFileLayout') self.defaultFileLayout.addWidget(self.defaultFileEdit) self.defaultFileLayout.addWidget(self.defaultBrowseButton) + self.defaultFileLayout.addWidget(self.defaultRevertButton) self.defaultImageLayout.addRow(self.defaultFileLabel, self.defaultFileLayout) self.rightLayout.addWidget(self.defaultImageGroupBox) + self.hideMouseGroupBox = QtGui.QGroupBox(self.leftColumn) + self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox') + self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox) + self.hideMouseLayout.setObjectName(u'hideMouseLayout') + self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox) + self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') + self.hideMouseLayout.addWidget(self.hideMouseCheckBox) + self.rightLayout.addWidget(self.hideMouseGroupBox) self.rightLayout.addStretch() QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultBrowseButtonPressed) + QtCore.QObject.connect(self.defaultRevertButton, + QtCore.SIGNAL(u'pressed()'), self.onDefaultRevertButtonPressed) def retranslateUi(self): """ Setup the interface translation strings. """ - self.tabTitleVisible = UiStrings.Advanced - self.uiGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'UI Settings')) + self.tabTitleVisible = UiStrings().Advanced + self.uiGroupBox.setTitle( + translate('OpenLP.AdvancedTab', 'UI Settings')) self.recentLabel.setText( translate('OpenLP.AdvancedTab', 'Number of recent files to display:')) @@ -130,6 +145,8 @@ class AdvancedTab(SettingsTab): 'Remember active media manager tab on startup')) self.doubleClickLiveCheckBox.setText(translate('OpenLP.AdvancedTab', 'Double-click to send items straight to live')) + self.singleClickPreviewCheckBox.setText(translate('OpenLP.AdvancedTab', + 'Preview items when clicked in Media Manager')) self.expandServiceItemCheckBox.setText(translate('OpenLP.AdvancedTab', 'Expand new service items on creation')) self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', @@ -142,8 +159,14 @@ class AdvancedTab(SettingsTab): 'Default Image')) self.defaultColorLabel.setText(translate('OpenLP.AdvancedTab', 'Background color:')) + self.defaultColorButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Click to select a color.')) self.defaultFileLabel.setText(translate('OpenLP.AdvancedTab', 'Image file:')) + self.defaultBrowseButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Browse for an image file to display.')) + self.defaultRevertButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Revert to the default OpenLP logo.')) def load(self): """ @@ -164,6 +187,9 @@ class AdvancedTab(SettingsTab): self.doubleClickLiveCheckBox.setChecked( settings.value(u'double click live', QtCore.QVariant(False)).toBool()) + self.singleClickPreviewCheckBox.setChecked( + settings.value(u'single click preview', + QtCore.QVariant(False)).toBool()) self.expandServiceItemCheckBox.setChecked( settings.value(u'expand service item', QtCore.QVariant(False)).toBool()) @@ -193,6 +219,8 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(self.mediaPluginCheckBox.isChecked())) settings.setValue(u'double click live', QtCore.QVariant(self.doubleClickLiveCheckBox.isChecked())) + settings.setValue(u'single click preview', + QtCore.QVariant(self.singleClickPreviewCheckBox.isChecked())) settings.setValue(u'expand service item', QtCore.QVariant(self.expandServiceItemCheckBox.isChecked())) settings.setValue(u'enable exit confirmation', @@ -213,10 +241,14 @@ class AdvancedTab(SettingsTab): def onDefaultBrowseButtonPressed(self): file_filters = u'%s;;%s (*.*) (*)' % (get_images_filter(), - UiStrings.AllFiles) + UiStrings().AllFiles) filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.AdvancedTab', 'Open File'), '', file_filters) if filename: self.defaultFileEdit.setText(filename) self.defaultFileEdit.setFocus() + + def onDefaultRevertButtonPressed(self): + self.defaultFileEdit.setText(u':/graphics/openlp-splash-screen.png') + self.defaultFileEdit.setFocus() diff --git a/openlp/core/ui/exceptiondialog.py b/openlp/core/ui/exceptiondialog.py index 4aa01f776..cbb3fb50c 100644 --- a/openlp/core/ui/exceptiondialog.py +++ b/openlp/core/ui/exceptiondialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 0ae9497c9..7a42d99cc 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -105,7 +106,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): """ Saving exception log and system informations to a file. """ - report = unicode(translate('OpenLP.ExceptionForm', + report_text = unicode(translate('OpenLP.ExceptionForm', '**OpenLP Bug Report**\n' 'Version: %s\n\n' '--- Details of the Exception. ---\n\n%s\n\n ' @@ -121,18 +122,21 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): filename = unicode(QtCore.QDir.toNativeSeparators(filename)) SettingsManager.set_last_dir(self.settingsSection, os.path.dirname( filename)) - report = report % self._createReport() + report_text = report_text % self._createReport() try: - file = open(filename, u'w') + report_file = open(filename, u'w') try: - file.write(report) + report_file.write(report_text) except UnicodeError: - file.close() - file = open(filename, u'wb') - file.write(report.encode(u'utf-8')) - file.close() + report_file.close() + report_file = open(filename, u'wb') + report_file.write(report_text.encode(u'utf-8')) + finally: + report_file.close() except IOError: log.exception(u'Failed to write crash report') + finally: + report_file.close() def onSendReportButtonPressed(self): """ @@ -178,7 +182,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): self,translate('ImagePlugin.ExceptionDialog', 'Select Attachment'), SettingsManager.get_last_dir(u'exceptions'), - u'%s (*.*) (*)' % UiStrings.AllFiles) + u'%s (*.*) (*)' % UiStrings().AllFiles) log.info(u'New files(s) %s', unicode(files)) if files: self.fileAttachment = unicode(files) @@ -186,3 +190,4 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): def __buttonState(self, state): self.saveReportButton.setEnabled(state) self.sendReportButton.setEnabled(state) + diff --git a/openlp/core/ui/filerenamedialog.py b/openlp/core/ui/filerenamedialog.py index ec0f0e2dd..6611a9df7 100644 --- a/openlp/core/ui/filerenamedialog.py +++ b/openlp/core/ui/filerenamedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/filerenameform.py b/openlp/core/ui/filerenameform.py index 049b68336..0bdbdf892 100644 --- a/openlp/core/ui/filerenameform.py +++ b/openlp/core/ui/filerenameform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index dc1932015..4beebfde6 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -128,6 +129,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): os.path.join(gettempdir(), u'openlp', screenshot))) item.setCheckState(QtCore.Qt.Unchecked) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) + Receiver.send_message(u'cursor_normal') def nextId(self): """ @@ -140,6 +142,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): return FirstTimePage.Songs elif self.currentId() == FirstTimePage.Progress: return -1 + elif self.currentId() == FirstTimePage.NoInternet: + return FirstTimePage.Progress else: return self.currentId() + 1 @@ -147,20 +151,33 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Detects Page changes and updates as approprate. """ - if pageId == FirstTimePage.NoInternet: - self.finishButton.setVisible(True) - self.finishButton.setEnabled(True) - self.nextButton.setVisible(False) - elif pageId == FirstTimePage.Defaults: + if pageId == FirstTimePage.Defaults: self.themeComboBox.clear() for iter in xrange(self.themesListWidget.count()): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) + # Check if this is a re-run of the wizard. + self.has_run_wizard = QtCore.QSettings().value( + u'general/has run wizard', QtCore.QVariant(False)).toBool() + if self.has_run_wizard: + # Add any existing themes to list. + for theme in self.parent().themeManagerContents.getThemes(): + index = self.themeComboBox.findText(theme) + if index == -1: + self.themeComboBox.addItem(theme) + default_theme = unicode(QtCore.QSettings().value( + u'themes/global theme', + QtCore.QVariant(u'')).toString()) + # Pre-select the current default theme. + index = self.themeComboBox.findText(default_theme) + self.themeComboBox.setCurrentIndex(index) elif pageId == FirstTimePage.Progress: + Receiver.send_message(u'cursor_busy') self._preWizard() self._performWizard() self._postWizard() + Receiver.send_message(u'cursor_normal') def updateScreenListCombo(self): """ @@ -201,15 +218,14 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Prepare the UI for the process. """ - # We start on 2 for plugins status setting plus a "finished" point. - max_progress = 2 + self.max_progress = 0 # Loop through the songs list and increase for each selected item for i in xrange(self.songsListWidget.count()): item = self.songsListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole).toString() size = self._getFileSize(u'%s%s' % (self.web, filename)) - max_progress += size + self.max_progress += size # Loop through the Bibles list and increase for each selected item iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) while iterator.value(): @@ -217,7 +233,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if item.parent() and item.checkState(0) == QtCore.Qt.Checked: filename = item.data(0, QtCore.Qt.UserRole).toString() size = self._getFileSize(u'%s%s' % (self.web, filename)) - max_progress += size + self.max_progress += size iterator += 1 # Loop through the themes list and increase for each selected item for i in xrange(self.themesListWidget.count()): @@ -225,23 +241,50 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole).toString() size = self._getFileSize(u'%s%s' % (self.web, filename)) - max_progress += size + self.max_progress += size self.finishButton.setVisible(False) - self.progressBar.setValue(0) - self.progressBar.setMinimum(0) - self.progressBar.setMaximum(max_progress) + if self.max_progress: + # Add on 2 for plugins status setting plus a "finished" point. + self.max_progress = self.max_progress + 2 + self.progressBar.setValue(0) + self.progressBar.setMinimum(0) + self.progressBar.setMaximum(self.max_progress) + self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Setting Up And Downloading')) + self.progressPage.setSubTitle(translate('OpenLP.FirstTimeWizard', + 'Please wait while OpenLP is set up ' + 'and your data is downloaded.')) + else: + self.progressBar.setVisible(False) + self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Setting Up')) + self.progressPage.setSubTitle(u'Setup complete.') def _postWizard(self): """ Clean up the UI after the process has finished. """ - self.progressBar.setValue(self.progressBar.maximum()) + if self.max_progress: + self.progressBar.setValue(self.progressBar.maximum()) + if self.has_run_wizard: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Download complete.' + ' Click the finish button to return to OpenLP.')) + else: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Download complete.' + ' Click the finish button to start OpenLP.')) + else: + if self.has_run_wizard: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Click the finish button to return to OpenLP.')) + else: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Click the finish button to start OpenLP.')) self.finishButton.setVisible(True) self.finishButton.setEnabled(True) self.cancelButton.setVisible(False) self.nextButton.setVisible(False) - self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Download complete. Click the finish button to start OpenLP.')) Receiver.send_message(u'openlp_process_events') def _performWizard(self): diff --git a/openlp/core/ui/firsttimelanguagedialog.py b/openlp/core/ui/firsttimelanguagedialog.py index bdc03048a..172fd3e0f 100644 --- a/openlp/core/ui/firsttimelanguagedialog.py +++ b/openlp/core/ui/firsttimelanguagedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/firsttimelanguageform.py b/openlp/core/ui/firsttimelanguageform.py index f6ffafb8f..dcde212eb 100644 --- a/openlp/core/ui/firsttimelanguageform.py +++ b/openlp/core/ui/firsttimelanguageform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 4c7ae6880..7e94b4595 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -48,7 +49,7 @@ class Ui_FirstTimeWizard(object): FirstTimeWizard.resize(550, 386) FirstTimeWizard.setModal(True) FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) - FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages| + FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) self.finishButton = self.button(QtGui.QWizard.FinishButton) @@ -80,9 +81,9 @@ class Ui_FirstTimeWizard(object): self.pluginLayout.addWidget(self.imageCheckBox) self.presentationCheckBox = QtGui.QCheckBox(self.pluginPage) if sys.platform == "darwin": - self.presentationCheckBox.setChecked(False) + self.presentationCheckBox.setChecked(False) else: - self.presentationCheckBox.setChecked(True) + self.presentationCheckBox.setChecked(True) self.presentationCheckBox.setObjectName(u'presentationCheckBox') self.pluginLayout.addWidget(self.presentationCheckBox) self.mediaCheckBox = QtGui.QCheckBox(self.pluginPage) @@ -201,15 +202,14 @@ class Ui_FirstTimeWizard(object): 'Welcome to the First Time Wizard')) self.informationLabel.setText(translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use.' - ' Click the next button below to start the process of selection ' - 'your initial options. ')) + ' Click the next button below to start.')) self.pluginPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins')) self.pluginPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. ')) self.songsCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Songs')) self.customCheckBox.setText(translate('OpenLP.FirstTimeWizard', - 'Custom Text')) + 'Custom Slides')) self.bibleCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Bible')) self.imageCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Images')) @@ -254,10 +254,6 @@ class Ui_FirstTimeWizard(object): 'Default Settings')) self.defaultsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Set up default settings to be used by OpenLP.')) - self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', - 'Setting Up And Importing')) - self.progressPage.setSubTitle(translate('OpenLP.FirstTimeWizard', - 'Please wait while OpenLP is set up and your data is imported.')) self.displayLabel.setText(translate('OpenLP.FirstTimeWizard', 'Default output display:')) self.themeLabel.setText(translate('OpenLP.FirstTimeWizard', diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/formattingtagdialog.py similarity index 69% rename from openlp/core/ui/displaytagdialog.py rename to openlp/core/ui/formattingtagdialog.py index 848818e88..186f4739b 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/formattingtagdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -27,20 +28,17 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box +from openlp.core.lib.ui import UiStrings -class Ui_DisplayTagDialog(object): +class Ui_FormattingTagDialog(object): - def setupUi(self, displayTagDialog): - displayTagDialog.setObjectName(u'displayTagDialog') - displayTagDialog.resize(725, 548) - self.widget = QtGui.QWidget(displayTagDialog) - self.widget.setGeometry(QtCore.QRect(10, 10, 701, 521)) - self.widget.setObjectName(u'widget') - self.listdataGridLayout = QtGui.QGridLayout(self.widget) - self.listdataGridLayout.setMargin(0) + def setupUi(self, formattingTagDialog): + formattingTagDialog.setObjectName(u'formattingTagDialog') + formattingTagDialog.resize(725, 548) + self.listdataGridLayout = QtGui.QGridLayout(formattingTagDialog) + self.listdataGridLayout.setMargin(8) self.listdataGridLayout.setObjectName(u'listdataGridLayout') - self.tagTableWidget = QtGui.QTableWidget(self.widget) + self.tagTableWidget = QtGui.QTableWidget(formattingTagDialog) self.tagTableWidget.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.tagTableWidget.setEditTriggers( @@ -54,6 +52,7 @@ class Ui_DisplayTagDialog(object): self.tagTableWidget.setObjectName(u'tagTableWidget') self.tagTableWidget.setColumnCount(4) self.tagTableWidget.setRowCount(0) + self.tagTableWidget.horizontalHeader().setStretchLastSection(True) item = QtGui.QTableWidgetItem() self.tagTableWidget.setHorizontalHeaderItem(0, item) item = QtGui.QTableWidgetItem() @@ -68,14 +67,11 @@ class Ui_DisplayTagDialog(object): spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) - self.defaultPushButton = QtGui.QPushButton(self.widget) - self.defaultPushButton.setObjectName(u'defaultPushButton') - self.horizontalLayout.addWidget(self.defaultPushButton) - self.deletePushButton = QtGui.QPushButton(self.widget) + self.deletePushButton = QtGui.QPushButton(formattingTagDialog) self.deletePushButton.setObjectName(u'deletePushButton') self.horizontalLayout.addWidget(self.deletePushButton) self.listdataGridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) - self.editGroupBox = QtGui.QGroupBox(self.widget) + self.editGroupBox = QtGui.QGroupBox(formattingTagDialog) self.editGroupBox.setObjectName(u'editGroupBox') self.dataGridLayout = QtGui.QGridLayout(self.editGroupBox) self.dataGridLayout.setObjectName(u'dataGridLayout') @@ -112,43 +108,42 @@ class Ui_DisplayTagDialog(object): self.endTagLineEdit = QtGui.QLineEdit(self.editGroupBox) self.endTagLineEdit.setObjectName(u'endTagLineEdit') self.dataGridLayout.addWidget(self.endTagLineEdit, 4, 1, 1, 1) - self.updatePushButton = QtGui.QPushButton(self.editGroupBox) - self.updatePushButton.setObjectName(u'updatePushButton') - self.dataGridLayout.addWidget(self.updatePushButton, 4, 2, 1, 1) + self.savePushButton = QtGui.QPushButton(self.editGroupBox) + self.savePushButton.setObjectName(u'savePushButton') + self.dataGridLayout.addWidget(self.savePushButton, 4, 2, 1, 1) self.listdataGridLayout.addWidget(self.editGroupBox, 2, 0, 1, 1) - self.buttonBox = create_accept_reject_button_box(displayTagDialog) + self.buttonBox = QtGui.QDialogButtonBox(formattingTagDialog) + self.buttonBox.setObjectName('formattingTagDialogButtonBox') + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Close) self.listdataGridLayout.addWidget(self.buttonBox, 3, 0, 1, 1) - self.retranslateUi(displayTagDialog) - QtCore.QMetaObject.connectSlotsByName(displayTagDialog) + self.retranslateUi(formattingTagDialog) + QtCore.QMetaObject.connectSlotsByName(formattingTagDialog) - def retranslateUi(self, displayTagDialog): - displayTagDialog.setWindowTitle(translate('OpenLP.displayTagDialog', - 'Configure Display Tags')) + def retranslateUi(self, formattingTagDialog): + formattingTagDialog.setWindowTitle(translate( + 'OpenLP.FormattingTagDialog', 'Configure Formatting Tags')) self.editGroupBox.setTitle( - translate('OpenLP.DisplayTagDialog', 'Edit Selection')) - self.updatePushButton.setText( - translate('OpenLP.DisplayTagDialog', 'Update')) + translate('OpenLP.FormattingTagDialog', 'Edit Selection')) + self.savePushButton.setText( + translate('OpenLP.FormattingTagDialog', 'Save')) self.descriptionLabel.setText( - translate('OpenLP.DisplayTagDialog', 'Description')) - self.tagLabel.setText(translate('OpenLP.DisplayTagDialog', 'Tag')) + translate('OpenLP.FormattingTagDialog', 'Description')) + self.tagLabel.setText(translate('OpenLP.FormattingTagDialog', 'Tag')) self.startTagLabel.setText( - translate('OpenLP.DisplayTagDialog', 'Start tag')) + translate('OpenLP.FormattingTagDialog', 'Start tag')) self.endTagLabel.setText( - translate('OpenLP.DisplayTagDialog', 'End tag')) - self.deletePushButton.setText(UiStrings.Delete) - self.defaultPushButton.setText( - translate('OpenLP.DisplayTagDialog', 'Default')) - self.newPushButton.setText(UiStrings.New) + translate('OpenLP.FormattingTagDialog', 'End tag')) + self.deletePushButton.setText(UiStrings().Delete) + self.newPushButton.setText(UiStrings().New) self.tagTableWidget.horizontalHeaderItem(0).setText( - translate('OpenLP.DisplayTagDialog', 'Description')) + translate('OpenLP.FormattingTagDialog', 'Description')) self.tagTableWidget.horizontalHeaderItem(1).setText( - translate('OpenLP.DisplayTagDialog', 'Tag Id')) + translate('OpenLP.FormattingTagDialog', 'Tag Id')) self.tagTableWidget.horizontalHeaderItem(2).setText( - translate('OpenLP.DisplayTagDialog', 'Start HTML')) + translate('OpenLP.FormattingTagDialog', 'Start HTML')) self.tagTableWidget.horizontalHeaderItem(3).setText( - translate('OpenLP.DisplayTagDialog', 'End HTML')) + translate('OpenLP.FormattingTagDialog', 'End HTML')) self.tagTableWidget.setColumnWidth(0, 120) - self.tagTableWidget.setColumnWidth(1, 40) - self.tagTableWidget.setColumnWidth(2, 240) - self.tagTableWidget.setColumnWidth(3, 240) + self.tagTableWidget.setColumnWidth(1, 80) + self.tagTableWidget.setColumnWidth(2, 330) diff --git a/openlp/core/ui/displaytagform.py b/openlp/core/ui/formattingtagform.py similarity index 71% rename from openlp/core/ui/displaytagform.py rename to openlp/core/ui/formattingtagform.py index 24cd14bd0..2a8625b1a 100644 --- a/openlp/core/ui/displaytagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -24,22 +25,22 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are -protected and included each time loaded. Custom tags can be defined and saved. -The Custom Tag arrays are saved in a pickle so QSettings works on them. Base +The :mod:`formattingtagform` provides an Tag Edit facility. The Base set are +protected and included each time loaded. Custom tags can be defined and saved. +The Custom Tag arrays are saved in a pickle so QSettings works on them. Base Tags cannot be changed. """ import cPickle from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, DisplayTags +from openlp.core.lib import translate, FormattingTags from openlp.core.lib.ui import critical_error_message_box -from openlp.core.ui.displaytagdialog import Ui_DisplayTagDialog +from openlp.core.ui.formattingtagdialog import Ui_FormattingTagDialog -class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): +class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): """ - The :class:`DisplayTagTab` manages the settings tab . + The :class:`FormattingTagForm` manages the settings tab . """ def __init__(self, parent): """ @@ -47,36 +48,37 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): """ QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self.preLoad() + self._loadFormattingTags() QtCore.QObject.connect(self.tagTableWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onRowSelected) - QtCore.QObject.connect(self.defaultPushButton, - QtCore.SIGNAL(u'pressed()'), self.onDefaultPushed) QtCore.QObject.connect(self.newPushButton, QtCore.SIGNAL(u'pressed()'), self.onNewPushed) - QtCore.QObject.connect(self.updatePushButton, - QtCore.SIGNAL(u'pressed()'), self.onUpdatePushed) + QtCore.QObject.connect(self.savePushButton, + QtCore.SIGNAL(u'pressed()'), self.onSavedPushed) QtCore.QObject.connect(self.deletePushButton, QtCore.SIGNAL(u'pressed()'), self.onDeletePushed) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), + self.close) def exec_(self): """ Load Display and set field state. """ # Create initial copy from master - self.preLoad() + self._loadFormattingTags() self._resetTable() self.selected = -1 return QtGui.QDialog.exec_(self) - def preLoad(self): + def _loadFormattingTags(self): """ Load the Tags from store so can be used in the system or used to update the display. If Cancel was selected this is needed to reset the dsiplay to the correct version. """ # Initial Load of the Tags - DisplayTags.reset_html_tags() + FormattingTags.reset_html_tags() + # Formatting Tags were also known as display tags. user_expands = QtCore.QSettings().value(u'displayTags/html_tags', QtCore.QVariant(u'')).toString() # cPickle only accepts str not unicode strings @@ -84,39 +86,14 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): if user_expands_string: user_tags = cPickle.loads(user_expands_string) # If we have some user ones added them as well - for t in user_tags: - DisplayTags.add_html_tag(t) - - def accept(self): - """ - Save Custom tags in a pickle . - """ - temp = [] - for tag in DisplayTags.get_html_tags(): - if not tag[u'protected']: - temp.append(tag) - if temp: - ctemp = cPickle.dumps(temp) - QtCore.QSettings().setValue(u'displayTags/html_tags', - QtCore.QVariant(ctemp)) - else: - QtCore.QSettings().setValue(u'displayTags/html_tags', - QtCore.QVariant(u'')) - return QtGui.QDialog.accept(self) - - def reject(self): - """ - Reset Custom tags from Settings. - """ - self._resetTable() - return QtGui.QDialog.reject(self) + FormattingTags.add_html_tags(user_tags) def onRowSelected(self): """ Table Row selected so display items and set field state. """ row = self.tagTableWidget.currentRow() - html = DisplayTags.get_html_tags()[row] + html = FormattingTags.get_html_tags()[row] self.selected = row self.descriptionLineEdit.setText(html[u'desc']) self.tagLineEdit.setText(self._strip(html[u'start tag'])) @@ -127,58 +104,58 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): self.tagLineEdit.setEnabled(False) self.startTagLineEdit.setEnabled(False) self.endTagLineEdit.setEnabled(False) - self.updatePushButton.setEnabled(False) + self.savePushButton.setEnabled(False) self.deletePushButton.setEnabled(False) else: self.descriptionLineEdit.setEnabled(True) self.tagLineEdit.setEnabled(True) self.startTagLineEdit.setEnabled(True) self.endTagLineEdit.setEnabled(True) - self.updatePushButton.setEnabled(True) + self.savePushButton.setEnabled(True) self.deletePushButton.setEnabled(True) def onNewPushed(self): """ Add a new tag to list only if it is not a duplicate. """ - for html in DisplayTags.get_html_tags(): + for html in FormattingTags.get_html_tags(): if self._strip(html[u'start tag']) == u'n': critical_error_message_box( - translate('OpenLP.DisplayTagTab', 'Update Error'), - translate('OpenLP.DisplayTagTab', + translate('OpenLP.FormattingTagForm', 'Update Error'), + translate('OpenLP.FormattingTagForm', 'Tag "n" already defined.')) return # Add new tag to list - tag = {u'desc': u'New Item', u'start tag': u'{n}', - u'start html': u'', u'end tag': u'{/n}', - u'end html': u'', u'protected': False} - DisplayTags.add_html_tag(tag) + tag = { + u'desc': translate('OpenLP.FormattingTagForm', 'New Tag'), + u'start tag': u'{n}', + u'start html': translate('OpenLP.FormattingTagForm', ''), + u'end tag': u'{/n}', + u'end html': translate('OpenLP.FormattingTagForm', ''), + u'protected': False + } + FormattingTags.add_html_tags([tag]) self._resetTable() # Highlight new row self.tagTableWidget.selectRow(self.tagTableWidget.rowCount() - 1) self.onRowSelected() - - def onDefaultPushed(self): - """ - Remove all Custom Tags and reset to base set only. - """ - DisplayTags.reset_html_tags() - self._resetTable() + self.tagTableWidget.scrollToBottom() def onDeletePushed(self): """ Delete selected custom tag. """ if self.selected != -1: - DisplayTags.remove_html_tag(self.selected) + FormattingTags.remove_html_tag(self.selected) self.selected = -1 self._resetTable() + self._saveTable() - def onUpdatePushed(self): + def onSavedPushed(self): """ - Update Custom Tag details if not duplicate. + Update Custom Tag details if not duplicate and save the data. """ - html_expands = DisplayTags.get_html_tags() + html_expands = FormattingTags.get_html_tags() if self.selected != -1: html = html_expands[self.selected] tag = unicode(self.tagLineEdit.text()) @@ -186,8 +163,8 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): if self._strip(html1[u'start tag']) == tag and \ linenumber != self.selected: critical_error_message_box( - translate('OpenLP.DisplayTagTab', 'Update Error'), - unicode(translate('OpenLP.DisplayTagTab', + translate('OpenLP.FormattingTagForm', 'Update Error'), + unicode(translate('OpenLP.FormattingTagForm', 'Tag %s already defined.')) % tag) return html[u'desc'] = unicode(self.descriptionLineEdit.text()) @@ -197,6 +174,19 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): html[u'end tag'] = u'{/%s}' % tag self.selected = -1 self._resetTable() + self._saveTable() + + def _saveTable(self): + """ + Saves all formatting tags except protected ones. + """ + tags = [] + for tag in FormattingTags.get_html_tags(): + if not tag[u'protected']: + tags.append(tag) + # Formatting Tags were also known as display tags. + QtCore.QSettings().setValue(u'displayTags/html_tags', + QtCore.QVariant(cPickle.dumps(tags) if tags else u'')) def _resetTable(self): """ @@ -205,9 +195,9 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): self.tagTableWidget.clearContents() self.tagTableWidget.setRowCount(0) self.newPushButton.setEnabled(True) - self.updatePushButton.setEnabled(False) + self.savePushButton.setEnabled(False) self.deletePushButton.setEnabled(False) - for linenumber, html in enumerate(DisplayTags.get_html_tags()): + for linenumber, html in enumerate(FormattingTags.get_html_tags()): self.tagTableWidget.setRowCount( self.tagTableWidget.rowCount() + 1) self.tagTableWidget.setItem(linenumber, 0, diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index d249dd4e0..9a241473a 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,6 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, Receiver, translate from openlp.core.lib.ui import UiStrings +from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -36,30 +38,14 @@ class GeneralTab(SettingsTab): """ GeneralTab is the general settings tab in the settings dialog. """ - def __init__(self, screens): + def __init__(self, parent): """ Initialise the general settings tab """ - self.screens = screens - self.monitorNumber = 0 - # Set to True to allow PostSetup to work on application start up - self.overrideChanged = True - SettingsTab.__init__(self, u'General') - - def preLoad(self): - """ - Set up the display screen and set correct screen values. - If not set before default to last screen. - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - self.monitorNumber = settings.value(u'monitor', - QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] - self.screens.set_current_display(self.monitorNumber) - self.screens.monitor_number = self.monitorNumber - self.screens.display = settings.value( - u'display on monitor', QtCore.QVariant(True)).toBool() - settings.endGroup() + self.screens = ScreenList.get_instance() + self.icon_path = u':/icon/openlp-logo-16x16.png' + generalTranslated = translate('OpenLP.GeneralTab', 'General') + SettingsTab.__init__(self, parent, u'General', generalTranslated) def setupUi(self): """ @@ -111,11 +97,15 @@ class GeneralTab(SettingsTab): self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') self.settingsLayout.addRow(self.autoPreviewCheckBox) + self.enableLoopCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.enableLoopCheckBox.setObjectName(u'enableLoopCheckBox') + self.settingsLayout.addRow(self.enableLoopCheckBox) # Moved here from image tab self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) self.timeoutLabel.setObjectName(u'timeoutLabel') self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') + self.timeoutSpinBox.setRange(1, 180) self.settingsLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) self.leftLayout.addWidget(self.settingsGroupBox) self.leftLayout.addStretch() @@ -156,14 +146,14 @@ class GeneralTab(SettingsTab): self.displayLayout.addWidget(self.customXLabel, 3, 0) self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) self.customXValueEdit.setObjectName(u'customXValueEdit') - self.customXValueEdit.setMaximum(9999) + self.customXValueEdit.setRange(-9999, 9999) self.displayLayout.addWidget(self.customXValueEdit, 4, 0) self.customYLabel = QtGui.QLabel(self.displayGroupBox) self.customYLabel.setObjectName(u'customYLabel') self.displayLayout.addWidget(self.customYLabel, 3, 1) self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) self.customYValueEdit.setObjectName(u'customYValueEdit') - self.customYValueEdit.setMaximum(9999) + self.customYValueEdit.setRange(-9999, 9999) self.displayLayout.addWidget(self.customYValueEdit, 4, 1) self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) self.customWidthLabel.setObjectName(u'customWidthLabel') @@ -185,13 +175,15 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.overrideCheckBox, QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) QtCore.QObject.connect(self.customHeightValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customWidthValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customYValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customXValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.monitorComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDisplayChanged) # Reload the tab, as the screen resolution/count may have changed. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.load) @@ -201,7 +193,6 @@ class GeneralTab(SettingsTab): self.passwordLabel.setVisible(False) self.passwordEdit.setVisible(False) - def retranslateUi(self): """ Translate the general settings tab to the currently selected language @@ -231,12 +222,14 @@ class GeneralTab(SettingsTab): 'Unblank display when adding new live item')) self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service')) + self.enableLoopCheckBox.setText(translate('OpenLP.GeneralTab', + 'Enable slide wrap-around')) self.timeoutLabel.setText(translate('OpenLP.GeneralTab', - 'Slide loop delay:')) + 'Timed slide interval:')) self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) self.ccliGroupBox.setTitle( translate('OpenLP.GeneralTab', 'CCLI Details')) - self.numberLabel.setText(UiStrings.CCLINumberLabel) + self.numberLabel.setText(UiStrings().CCLINumberLabel) self.usernameLabel.setText( translate('OpenLP.GeneralTab', 'SongSelect username:')) self.passwordLabel.setText( @@ -259,6 +252,9 @@ class GeneralTab(SettingsTab): settings.beginGroup(self.settingsSection) self.monitorComboBox.clear() self.monitorComboBox.addItems(self.screens.get_screen_list()) + monitorNumber = settings.value(u'monitor', + QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] + self.monitorComboBox.setCurrentIndex(monitorNumber) self.numberEdit.setText(unicode(settings.value( u'ccli number', QtCore.QVariant(u'')).toString())) self.usernameEdit.setText(unicode(settings.value( @@ -269,7 +265,6 @@ class GeneralTab(SettingsTab): QtCore.QVariant(False)).toBool()) self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', QtCore.QVariant(False)).toBool()) - self.monitorComboBox.setCurrentIndex(self.monitorNumber) self.displayOnMonitorCheck.setChecked(self.screens.display) self.warningCheckBox.setChecked(settings.value(u'blank warning', QtCore.QVariant(False)).toBool()) @@ -281,6 +276,8 @@ class GeneralTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', QtCore.QVariant(False)).toBool()) + self.enableLoopCheckBox.setChecked(settings.value(u'enable slide loop', + QtCore.QVariant(True)).toBool()) self.timeoutSpinBox.setValue(settings.value(u'loop delay', QtCore.QVariant(5)).toInt()[0]) self.overrideCheckBox.setChecked(settings.value(u'override position', @@ -298,15 +295,16 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.display_changed = False def save(self): """ Save the settings from the form """ - self.monitorNumber = self.monitorComboBox.currentIndex() settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) - settings.setValue(u'monitor', QtCore.QVariant(self.monitorNumber)) + settings.setValue(u'monitor', + QtCore.QVariant(self.monitorComboBox.currentIndex())) settings.setValue(u'display on monitor', QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) settings.setValue(u'blank warning', @@ -323,6 +321,8 @@ class GeneralTab(SettingsTab): QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) settings.setValue(u'auto preview', QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) + settings.setValue(u'enable slide loop', + QtCore.QVariant(self.enableLoopCheckBox.isChecked())) settings.setValue(u'loop delay', QtCore.QVariant(self.timeoutSpinBox.value())) settings.setValue(u'ccli number', @@ -342,15 +342,8 @@ class GeneralTab(SettingsTab): settings.setValue(u'override position', QtCore.QVariant(self.overrideCheckBox.isChecked())) settings.endGroup() - self.screens.display = self.displayOnMonitorCheck.isChecked() - # Monitor Number has changed. - postUpdate = False - if self.screens.monitor_number != self.monitorNumber: - self.screens.monitor_number = self.monitorNumber - self.screens.set_current_display(self.monitorNumber) - postUpdate = True # On save update the screens as well - self.postSetUp(postUpdate) + self.postSetUp(True) def postSetUp(self, postUpdate=False): """ @@ -359,21 +352,23 @@ class GeneralTab(SettingsTab): """ Receiver.send_message(u'slidecontroller_live_spin_delay', self.timeoutSpinBox.value()) - # Reset screens after initial definition - if self.overrideChanged: - self.screens.override[u'size'] = QtCore.QRect( - self.customXValueEdit.value(), - self.customYValueEdit.value(), - self.customWidthValueEdit.value(), - self.customHeightValueEdit.value()) + # Do not continue on start up. + if not postUpdate: + return + self.screens.set_current_display(self.monitorComboBox.currentIndex()) + self.screens.display = self.displayOnMonitorCheck.isChecked() + self.screens.override[u'size'] = QtCore.QRect( + self.customXValueEdit.value(), + self.customYValueEdit.value(), + self.customWidthValueEdit.value(), + self.customHeightValueEdit.value()) if self.overrideCheckBox.isChecked(): self.screens.set_override_display() else: self.screens.reset_current_display() - # Order is important so be careful if you change - if self.overrideChanged or postUpdate: + if self.display_changed: Receiver.send_message(u'config_screen_changed') - self.overrideChanged = False + self.display_changed = False def onOverrideCheckBoxToggled(self, checked): """ @@ -386,10 +381,10 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setEnabled(checked) self.customHeightValueEdit.setEnabled(checked) self.customWidthValueEdit.setEnabled(checked) - self.overrideChanged = True + self.display_changed = True - def onDisplayPositionChanged(self): + def onDisplayChanged(self): """ Called when the width, height, x position or y position has changed. """ - self.overrideChanged = True + self.display_changed = True diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5a864957e..9904868ce 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -34,52 +35,47 @@ from PyQt4 import QtCore, QtGui, QtWebKit from PyQt4.phonon import Phonon from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \ - build_icon, translate + translate -from openlp.core.ui import HideMode +from openlp.core.ui import HideMode, ScreenList log = logging.getLogger(__name__) #http://www.steveheffernan.com/html5-video-player/demo-video-player.html #http://html5demos.com/two-videos -class DisplayWidget(QtGui.QGraphicsView): - """ - Customised version of QTableWidget which can respond to keyboard - events. - """ - log.info(u'Display Widget loaded') - - def __init__(self, live, parent=None): - QtGui.QGraphicsView.__init__(self) - self.parent = parent - self.live = live - - -class MainDisplay(DisplayWidget): +class MainDisplay(QtGui.QGraphicsView): """ This is the display screen. """ - def __init__(self, parent, screens, live): - DisplayWidget.__init__(self, live, parent=None) - self.parent = parent - self.screens = screens + def __init__(self, parent, imageManager, live): + if live: + QtGui.QGraphicsView.__init__(self) + else: + QtGui.QGraphicsView.__init__(self, parent) self.isLive = live + self.imageManager = imageManager + self.screens = ScreenList.get_instance() self.alertTab = None self.hideMode = None self.videoHide = False self.override = {} - mainIcon = build_icon(u':/icon/openlp-logo-16x16.png') - self.setWindowIcon(mainIcon) self.retranslateUi() + self.mediaObject = None + self.firstTime = True self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;') self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | - QtCore.Qt.WindowStaysOnTopHint) + QtCore.Qt.WindowStaysOnTopHint | + QtCore.Qt.X11BypassWindowManagerHint) + self.setAttribute(QtCore.Qt.WA_DeleteOnClose) if self.isLive: QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_phonon_creation'), + self.createMediaObject) def retranslateUi(self): """ @@ -91,8 +87,7 @@ class MainDisplay(DisplayWidget): """ Set up and build the output screen """ - log.debug(u'Start setup for monitor %s (live = %s)' % - (self.screens.monitor_number, self.isLive)) + log.debug(u'Start MainDisplay setup (live = %s)' % self.isLive) self.usePhonon = QtCore.QSettings().value( u'media/use phonon', QtCore.QVariant(True)).toBool() self.phononActive = False @@ -103,21 +98,10 @@ class MainDisplay(DisplayWidget): self.videoWidget.setVisible(False) self.videoWidget.setGeometry(QtCore.QRect(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height())) - log.debug(u'Setup Phonon for monitor %s' % self.screens.monitor_number) - self.mediaObject = Phonon.MediaObject(self) - self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) - Phonon.createPath(self.mediaObject, self.videoWidget) - Phonon.createPath(self.mediaObject, self.audio) - QtCore.QObject.connect(self.mediaObject, - QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'), - self.videoState) - QtCore.QObject.connect(self.mediaObject, - QtCore.SIGNAL(u'finished()'), - self.videoFinished) - QtCore.QObject.connect(self.mediaObject, - QtCore.SIGNAL(u'tick(qint64)'), - self.videoTick) - log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number) + if self.isLive: + if not self.firstTime: + self.createMediaObject() + log.debug(u'Setup webView') self.webView = QtWebKit.QWebView(self) self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) @@ -134,8 +118,8 @@ class MainDisplay(DisplayWidget): if self.isLive: # Build the initial frame. self.black = QtGui.QImage( - self.screens.current[u'size'].width(), - self.screens.current[u'size'].height(), + self.screen[u'size'].width(), + self.screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) painter_image = QtGui.QPainter() painter_image.begin(self.black) @@ -144,24 +128,24 @@ class MainDisplay(DisplayWidget): image_file = QtCore.QSettings().value(u'advanced/default image', QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\ .toString() - background_color = QtGui.QColor(QtCore.QSettings().value( + background_color = QtGui.QColor() + background_color.setNamedColor(QtCore.QSettings().value( u'advanced/default color', QtCore.QVariant(u'#ffffff')).toString()) if not background_color.isValid(): background_color = QtCore.Qt.white splash_image = QtGui.QImage(image_file) self.initialFrame = QtGui.QImage( - self.screens.current[u'size'].width(), - self.screens.current[u'size'].height(), + self.screen[u'size'].width(), + self.screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) painter_image = QtGui.QPainter() painter_image.begin(self.initialFrame) painter_image.fillRect(self.initialFrame.rect(), background_color) painter_image.drawImage( - (self.screens.current[u'size'].width() - - splash_image.width()) / 2, - (self.screens.current[u'size'].height() - - splash_image.height()) / 2, splash_image) + (self.screen[u'size'].width() - splash_image.width()) / 2, + (self.screen[u'size'].height() - splash_image.height()) / 2, + splash_image) serviceItem = ServiceItem() serviceItem.bg_image_bytes = image_to_byte(self.initialFrame) self.webView.setHtml(build_html(serviceItem, self.screen, @@ -169,12 +153,28 @@ class MainDisplay(DisplayWidget): self.__hideMouse() # To display or not to display? if not self.screen[u'primary']: - self.show() self.primary = False else: self.primary = True - log.debug( - u'Finished setup for monitor %s' % self.screens.monitor_number) + log.debug(u'Finished MainDisplay setup') + + def createMediaObject(self): + self.firstTime = False + log.debug(u'Creating Phonon objects - Start for %s', self.isLive) + self.mediaObject = Phonon.MediaObject(self) + self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) + Phonon.createPath(self.mediaObject, self.videoWidget) + Phonon.createPath(self.mediaObject, self.audio) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'), + self.videoState) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'finished()'), + self.videoFinished) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'tick(qint64)'), + self.videoTick) + log.debug(u'Creating Phonon objects - Finished for %s', self.isLive) def text(self, slide): """ @@ -188,7 +188,7 @@ class MainDisplay(DisplayWidget): while not self.webLoaded: Receiver.send_message(u'openlp_process_events') self.setGeometry(self.screen[u'size']) - self.frame.evaluateJavaScript(u'show_text("%s")' % \ + self.frame.evaluateJavaScript(u'show_text("%s")' % slide.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) return self.preview() @@ -200,8 +200,8 @@ class MainDisplay(DisplayWidget): The slide text to be displayed """ log.debug(u'alert to display') - if self.height() != self.screen[u'size'].height() \ - or not self.isVisible() or self.videoWidget.isVisible(): + if self.height() != self.screen[u'size'].height() or not \ + self.isVisible() or self.videoWidget.isVisible(): shrink = True else: shrink = False @@ -233,10 +233,12 @@ class MainDisplay(DisplayWidget): API for replacement backgrounds so Images are added directly to cache """ self.imageManager.add_image(name, path) - self.image(name) if hasattr(self, u'serviceItem'): self.override[u'image'] = name self.override[u'theme'] = self.serviceItem.themedata.theme_name + self.image(name) + return True + return False def image(self, name): """ @@ -349,6 +351,11 @@ class MainDisplay(DisplayWidget): """ Loads and starts a video to run with the option of sound """ + # We request a background video but have no service Item + if isBackground and not hasattr(self, u'serviceItem'): + return None + if not self.mediaObject: + self.createMediaObject() log.debug(u'video') self.webLoaded = True self.setGeometry(self.screen[u'size']) @@ -437,7 +444,7 @@ class MainDisplay(DisplayWidget): self.hideDisplay(self.hideMode) else: # Single screen active - if self.screens.monitor_number == 0: + if self.screens.display_count == 1: # Only make visible if setting enabled if QtCore.QSettings().value(u'general/display on monitor', QtCore.QVariant(True)).toBool(): @@ -453,7 +460,7 @@ class MainDisplay(DisplayWidget): painter.end() return preview - def buildHtml(self, serviceItem): + def buildHtml(self, serviceItem, image=None): """ Store the serviceItem and build the new HTML from it. Add the HTML to the display @@ -480,8 +487,12 @@ class MainDisplay(DisplayWidget): if self.serviceItem.themedata.background_filename: self.serviceItem.bg_image_bytes = self.imageManager. \ get_image_bytes(self.serviceItem.themedata.theme_name) + if image: + image_bytes = self.imageManager.get_image_bytes(image) + else: + image_bytes = None html = build_html(self.serviceItem, self.screen, self.alertTab, - self.isLive, background) + self.isLive, background, image_bytes) log.debug(u'buildHtml - pre setHtml') self.webView.setHtml(html) log.debug(u'buildHtml - post setHtml') diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 38775d68e..510a94dfd 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,19 +27,23 @@ import logging import os +import sys from tempfile import gettempdir from PyQt4 import QtCore, QtGui -from openlp.core.lib import RenderManager, build_icon, OpenLPDockWidget, \ - SettingsManager, PluginManager, Receiver, translate +from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \ + PluginManager, Receiver, translate, ImageManager, PluginStatus from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ - icon_action + icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ThemeManager, SlideController, PluginForm, MediaDockManager, \ - ShortcutListForm, DisplayTagForm + ShortcutListForm, FormattingTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ - ActionList, get_application_version + get_application_version, delete_file +from openlp.core.utils.actions import ActionList, CategoryOrder +from openlp.core.ui.firsttimeform import FirstTimeForm +from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -62,98 +67,104 @@ MEDIA_MANAGER_STYLE = """ } """ +PROGRESSBAR_STYLE = """ + QProgressBar{ + height: 10px; + } +""" + class Ui_MainWindow(object): def setupUi(self, mainWindow): """ Set up the user interface """ mainWindow.setObjectName(u'MainWindow') - mainWindow.resize(self.settingsmanager.width, - self.settingsmanager.height) - mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-16x16.png')) + mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-64x64.png')) mainWindow.setDockNestingEnabled(True) # Set up the main container, which contains all the other form widgets. - self.MainContent = QtGui.QWidget(mainWindow) - self.MainContent.setObjectName(u'MainContent') - self.mainContentLayout = QtGui.QHBoxLayout(self.MainContent) + self.mainContent = QtGui.QWidget(mainWindow) + self.mainContent.setObjectName(u'mainContent') + self.mainContentLayout = QtGui.QHBoxLayout(self.mainContent) self.mainContentLayout.setSpacing(0) self.mainContentLayout.setMargin(0) self.mainContentLayout.setObjectName(u'mainContentLayout') - mainWindow.setCentralWidget(self.MainContent) - self.controlSplitter = QtGui.QSplitter(self.MainContent) + mainWindow.setCentralWidget(self.mainContent) + self.controlSplitter = QtGui.QSplitter(self.mainContent) self.controlSplitter.setOrientation(QtCore.Qt.Horizontal) self.controlSplitter.setObjectName(u'controlSplitter') self.mainContentLayout.addWidget(self.controlSplitter) # Create slide controllers - self.previewController = SlideController(self, self.settingsmanager, - self.screens) - self.liveController = SlideController(self, self.settingsmanager, - self.screens, True) + self.previewController = SlideController(self) + self.liveController = SlideController(self, True) previewVisible = QtCore.QSettings().value( u'user interface/preview panel', QtCore.QVariant(True)).toBool() self.previewController.panel.setVisible(previewVisible) liveVisible = QtCore.QSettings().value(u'user interface/live panel', QtCore.QVariant(True)).toBool() + panelLocked = QtCore.QSettings().value(u'user interface/lock panel', + QtCore.QVariant(False)).toBool() self.liveController.panel.setVisible(liveVisible) # Create menu - self.MenuBar = QtGui.QMenuBar(mainWindow) - self.MenuBar.setObjectName(u'MenuBar') - self.FileMenu = QtGui.QMenu(self.MenuBar) - self.FileMenu.setObjectName(u'FileMenu') - self.FileImportMenu = QtGui.QMenu(self.FileMenu) - self.FileImportMenu.setObjectName(u'FileImportMenu') - self.FileExportMenu = QtGui.QMenu(self.FileMenu) - self.FileExportMenu.setObjectName(u'FileExportMenu') + self.menuBar = QtGui.QMenuBar(mainWindow) + self.menuBar.setObjectName(u'menuBar') + self.fileMenu = QtGui.QMenu(self.menuBar) + self.fileMenu.setObjectName(u'fileMenu') + self.recentFilesMenu = QtGui.QMenu(self.fileMenu) + self.recentFilesMenu.setObjectName(u'recentFilesMenu') + self.fileImportMenu = QtGui.QMenu(self.fileMenu) + self.fileImportMenu.setObjectName(u'fileImportMenu') + self.fileExportMenu = QtGui.QMenu(self.fileMenu) + self.fileExportMenu.setObjectName(u'fileExportMenu') # View Menu - self.viewMenu = QtGui.QMenu(self.MenuBar) + self.viewMenu = QtGui.QMenu(self.menuBar) self.viewMenu.setObjectName(u'viewMenu') - self.ViewModeMenu = QtGui.QMenu(self.viewMenu) - self.ViewModeMenu.setObjectName(u'ViewModeMenu') + self.viewModeMenu = QtGui.QMenu(self.viewMenu) + self.viewModeMenu.setObjectName(u'viewModeMenu') # Tools Menu - self.ToolsMenu = QtGui.QMenu(self.MenuBar) - self.ToolsMenu.setObjectName(u'ToolsMenu') + self.toolsMenu = QtGui.QMenu(self.menuBar) + self.toolsMenu.setObjectName(u'toolsMenu') # Settings Menu - self.SettingsMenu = QtGui.QMenu(self.MenuBar) - self.SettingsMenu.setObjectName(u'SettingsMenu') - self.SettingsLanguageMenu = QtGui.QMenu(self.SettingsMenu) - self.SettingsLanguageMenu.setObjectName(u'SettingsLanguageMenu') + self.settingsMenu = QtGui.QMenu(self.menuBar) + self.settingsMenu.setObjectName(u'settingsMenu') + self.settingsLanguageMenu = QtGui.QMenu(self.settingsMenu) + self.settingsLanguageMenu.setObjectName(u'settingsLanguageMenu') # Help Menu - self.HelpMenu = QtGui.QMenu(self.MenuBar) - self.HelpMenu.setObjectName(u'HelpMenu') - mainWindow.setMenuBar(self.MenuBar) - self.StatusBar = QtGui.QStatusBar(mainWindow) - self.StatusBar.setObjectName(u'StatusBar') - mainWindow.setStatusBar(self.StatusBar) - self.DefaultThemeLabel = QtGui.QLabel(self.StatusBar) - self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel') - self.StatusBar.addPermanentWidget(self.DefaultThemeLabel) + self.helpMenu = QtGui.QMenu(self.menuBar) + self.helpMenu.setObjectName(u'helpMenu') + mainWindow.setMenuBar(self.menuBar) + self.statusBar = QtGui.QStatusBar(mainWindow) + self.statusBar.setObjectName(u'statusBar') + mainWindow.setStatusBar(self.statusBar) + self.loadProgressBar = QtGui.QProgressBar(self.statusBar) + self.loadProgressBar.setObjectName(u'loadProgressBar') + self.statusBar.addPermanentWidget(self.loadProgressBar) + self.loadProgressBar.hide() + self.loadProgressBar.setValue(0) + self.loadProgressBar.setStyleSheet(PROGRESSBAR_STYLE) + self.defaultThemeLabel = QtGui.QLabel(self.statusBar) + self.defaultThemeLabel.setObjectName(u'defaultThemeLabel') + self.statusBar.addPermanentWidget(self.defaultThemeLabel) # Create the MediaManager self.mediaManagerDock = OpenLPDockWidget(mainWindow, u'mediaManagerDock', u':/system/system_mediamanager.png') self.mediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE) - self.mediaManagerDock.setMinimumWidth( - self.settingsmanager.mainwindow_left) # Create the media toolbox - self.MediaToolBox = QtGui.QToolBox(self.mediaManagerDock) - self.MediaToolBox.setObjectName(u'MediaToolBox') - self.mediaManagerDock.setWidget(self.MediaToolBox) + self.mediaToolBox = QtGui.QToolBox(self.mediaManagerDock) + self.mediaToolBox.setObjectName(u'mediaToolBox') + self.mediaManagerDock.setWidget(self.mediaToolBox) mainWindow.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.mediaManagerDock) # Create the service manager self.serviceManagerDock = OpenLPDockWidget(mainWindow, u'serviceManagerDock', u':/system/system_servicemanager.png') - self.serviceManagerDock.setMinimumWidth( - self.settingsmanager.mainwindow_right) - self.ServiceManagerContents = ServiceManager(mainWindow, + self.serviceManagerContents = ServiceManager(mainWindow, self.serviceManagerDock) - self.serviceManagerDock.setWidget(self.ServiceManagerContents) + self.serviceManagerDock.setWidget(self.serviceManagerContents) mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.serviceManagerDock) # Create the theme manager self.themeManagerDock = OpenLPDockWidget(mainWindow, u'themeManagerDock', u':/system/system_thememanager.png') - self.themeManagerDock.setMinimumWidth( - self.settingsmanager.mainwindow_right) self.themeManagerContents = ThemeManager(mainWindow, self.themeManagerDock) self.themeManagerContents.setObjectName(u'themeManagerContents') @@ -161,303 +172,335 @@ class Ui_MainWindow(object): mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.themeManagerDock) # Create the menu items - self.FileNewItem = icon_action(mainWindow, u'FileNewItem', - u':/general/general_new.png') - mainWindow.actionList.add_action(self.FileNewItem, u'File') - self.FileOpenItem = icon_action(mainWindow, u'FileOpenItem', - u':/general/general_open.png') - mainWindow.actionList.add_action(self.FileOpenItem, u'File') - self.FileSaveItem = icon_action(mainWindow, u'FileSaveItem', - u':/general/general_save.png') - mainWindow.actionList.add_action(self.FileSaveItem, u'File') - self.FileSaveAsItem = base_action(mainWindow, u'FileSaveAsItem') - mainWindow.actionList.add_action(self.FileSaveAsItem, u'File') - self.printServiceOrderItem = base_action( - mainWindow, u'printServiceItem') - mainWindow.actionList.add_action( - self.printServiceOrderItem, u'Print Service Order') - self.FileExitItem = icon_action(mainWindow, u'FileExitItem', - u':/system/system_exit.png') - mainWindow.actionList.add_action(self.FileExitItem, u'File') - self.ImportThemeItem = base_action(mainWindow, u'ImportThemeItem') - mainWindow.actionList.add_action(self.ImportThemeItem, u'Import') - self.ImportLanguageItem = base_action(mainWindow, u'ImportLanguageItem') - mainWindow.actionList.add_action(self.ImportLanguageItem, u'Import') - self.ExportThemeItem = base_action(mainWindow, u'ExportThemeItem') - mainWindow.actionList.add_action(self.ExportThemeItem, u'Export') - self.ExportLanguageItem = base_action(mainWindow, u'ExportLanguageItem') - mainWindow.actionList.add_action(self.ExportLanguageItem, u'Export') - self.ViewMediaManagerItem = icon_action(mainWindow, - u'ViewMediaManagerItem', u':/system/system_mediamanager.png', - self.mediaManagerDock.isVisible()) - self.ViewThemeManagerItem = icon_action(mainWindow, - u'ViewThemeManagerItem', u':/system/system_thememanager.png', - self.themeManagerDock.isVisible()) - mainWindow.actionList.add_action(self.ViewMediaManagerItem, u'View') - self.ViewServiceManagerItem = icon_action(mainWindow, - u'ViewServiceManagerItem', u':/system/system_servicemanager.png', - self.serviceManagerDock.isVisible()) - mainWindow.actionList.add_action(self.ViewServiceManagerItem, u'View') - self.ViewPreviewPanel = checkable_action(mainWindow, - u'ViewPreviewPanel', previewVisible) - mainWindow.actionList.add_action(self.ViewPreviewPanel, u'View') - self.ViewLivePanel = checkable_action(mainWindow, u'ViewLivePanel', - liveVisible) - mainWindow.actionList.add_action(self.ViewLivePanel, u'View') - self.ModeDefaultItem = checkable_action(mainWindow, u'ModeDefaultItem') - mainWindow.actionList.add_action(self.ModeDefaultItem, u'View Mode') - self.ModeSetupItem = checkable_action(mainWindow, u'ModeLiveItem') - mainWindow.actionList.add_action(self.ModeSetupItem, u'View Mode') - self.ModeLiveItem = checkable_action(mainWindow, u'ModeLiveItem', True) - mainWindow.actionList.add_action(self.ModeLiveItem, u'View Mode') - self.ModeGroup = QtGui.QActionGroup(mainWindow) - self.ModeGroup.addAction(self.ModeDefaultItem) - self.ModeGroup.addAction(self.ModeSetupItem) - self.ModeGroup.addAction(self.ModeLiveItem) - self.ModeDefaultItem.setChecked(True) - self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', - u':/tools/tools_add.png') - mainWindow.actionList.add_action(self.ToolsAddToolItem, u'Tools') - self.ToolsOpenDataFolder = icon_action(mainWindow, - u'ToolsOpenDataFolder', u':/general/general_open.png') - mainWindow.actionList.add_action(self.ToolsOpenDataFolder, u'Tools') - self.settingsPluginListItem = icon_action(mainWindow, - u'settingsPluginListItem', u':/system/settings_plugin_list.png') - mainWindow.actionList.add_action(self.settingsPluginListItem, - u'Settings') + action_list = ActionList.get_instance() + action_list.add_category(UiStrings().File, CategoryOrder.standardMenu) + self.fileNewItem = shortcut_action(mainWindow, u'fileNewItem', + [QtGui.QKeySequence(u'Ctrl+N')], + self.serviceManagerContents.onNewServiceClicked, + u':/general/general_new.png', category=UiStrings().File) + self.fileOpenItem = shortcut_action(mainWindow, u'fileOpenItem', + [QtGui.QKeySequence(u'Ctrl+O')], + self.serviceManagerContents.onLoadServiceClicked, + u':/general/general_open.png', category=UiStrings().File) + self.fileSaveItem = shortcut_action(mainWindow, u'fileSaveItem', + [QtGui.QKeySequence(u'Ctrl+S')], + self.serviceManagerContents.saveFile, + u':/general/general_save.png', category=UiStrings().File) + self.fileSaveAsItem = shortcut_action(mainWindow, u'fileSaveAsItem', + [QtGui.QKeySequence(u'Ctrl+Shift+S')], + self.serviceManagerContents.saveFileAs, category=UiStrings().File) + self.printServiceOrderItem = shortcut_action(mainWindow, + u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')], + self.serviceManagerContents.printServiceOrder, + category=UiStrings().File) + self.fileExitItem = shortcut_action(mainWindow, u'fileExitItem', + [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, + u':/system/system_exit.png', category=UiStrings().File) + action_list.add_category(UiStrings().Import, CategoryOrder.standardMenu) + self.importThemeItem = base_action( + mainWindow, u'importThemeItem', UiStrings().Import) + self.importLanguageItem = base_action( + mainWindow, u'importLanguageItem')#, UiStrings().Import) + action_list.add_category(UiStrings().Export, CategoryOrder.standardMenu) + self.exportThemeItem = base_action( + mainWindow, u'exportThemeItem', UiStrings().Export) + self.exportLanguageItem = base_action( + mainWindow, u'exportLanguageItem')#, UiStrings().Export) + action_list.add_category(UiStrings().View, CategoryOrder.standardMenu) + self.viewMediaManagerItem = shortcut_action(mainWindow, + u'viewMediaManagerItem', [QtGui.QKeySequence(u'F8')], + self.toggleMediaManager, u':/system/system_mediamanager.png', + self.mediaManagerDock.isVisible(), UiStrings().View) + self.viewThemeManagerItem = shortcut_action(mainWindow, + u'viewThemeManagerItem', [QtGui.QKeySequence(u'F10')], + self.toggleThemeManager, u':/system/system_thememanager.png', + self.themeManagerDock.isVisible(), UiStrings().View) + self.viewServiceManagerItem = shortcut_action(mainWindow, + u'viewServiceManagerItem', [QtGui.QKeySequence(u'F9')], + self.toggleServiceManager, u':/system/system_servicemanager.png', + self.serviceManagerDock.isVisible(), UiStrings().View) + self.viewPreviewPanel = shortcut_action(mainWindow, + u'viewPreviewPanel', [QtGui.QKeySequence(u'F11')], + self.setPreviewPanelVisibility, checked=previewVisible, + category=UiStrings().View) + self.viewLivePanel = shortcut_action(mainWindow, u'viewLivePanel', + [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, + checked=liveVisible, category=UiStrings().View) + self.lockPanel = shortcut_action(mainWindow, u'lockPanel', + None, self.setLockPanel, + checked=panelLocked, category=None) + action_list.add_category(UiStrings().ViewMode, + CategoryOrder.standardMenu) + self.modeDefaultItem = checkable_action( + mainWindow, u'modeDefaultItem', category=UiStrings().ViewMode) + self.modeSetupItem = checkable_action( + mainWindow, u'modeSetupItem', category=UiStrings().ViewMode) + self.modeLiveItem = checkable_action( + mainWindow, u'modeLiveItem', True, UiStrings().ViewMode) + self.modeGroup = QtGui.QActionGroup(mainWindow) + self.modeGroup.addAction(self.modeDefaultItem) + self.modeGroup.addAction(self.modeSetupItem) + self.modeGroup.addAction(self.modeLiveItem) + self.modeDefaultItem.setChecked(True) + action_list.add_category(UiStrings().Tools, CategoryOrder.standardMenu) + self.toolsAddToolItem = icon_action(mainWindow, u'toolsAddToolItem', + u':/tools/tools_add.png', category=UiStrings().Tools) + self.toolsOpenDataFolder = icon_action(mainWindow, + u'toolsOpenDataFolder', u':/general/general_open.png', + category=UiStrings().Tools) + self.toolsFirstTimeWizard = icon_action(mainWindow, + u'toolsFirstTimeWizard', u':/general/general_revert.png', + category=UiStrings().Tools) + self.updateThemeImages = base_action(mainWindow, + u'updateThemeImages', category=UiStrings().Tools) + action_list.add_category(UiStrings().Settings, + CategoryOrder.standardMenu) + self.settingsPluginListItem = shortcut_action(mainWindow, + u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], + self.onPluginItemClicked, u':/system/settings_plugin_list.png', + category=UiStrings().Settings) # i18n Language Items - self.AutoLanguageItem = checkable_action(mainWindow, - u'AutoLanguageItem', LanguageManager.auto_language) - mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') - self.LanguageGroup = QtGui.QActionGroup(mainWindow) - self.LanguageGroup.setExclusive(True) - self.LanguageGroup.setObjectName(u'LanguageGroup') - add_actions(self.LanguageGroup, [self.AutoLanguageItem]) + self.autoLanguageItem = checkable_action(mainWindow, + u'autoLanguageItem', LanguageManager.auto_language) + self.languageGroup = QtGui.QActionGroup(mainWindow) + self.languageGroup.setExclusive(True) + self.languageGroup.setObjectName(u'languageGroup') + add_actions(self.languageGroup, [self.autoLanguageItem]) qmList = LanguageManager.get_qm_list() savedLanguage = LanguageManager.get_language() for key in sorted(qmList.keys()): languageItem = checkable_action( mainWindow, key, qmList[key] == savedLanguage) - add_actions(self.LanguageGroup, [languageItem]) - self.SettingsShortcutsItem = icon_action(mainWindow, - u'SettingsShortcutsItem', - u':/system/system_configure_shortcuts.png') - self.DisplayTagItem = icon_action(mainWindow, - u'DisplayTagItem', u':/system/tag_editor.png') - self.SettingsConfigureItem = icon_action(mainWindow, - u'SettingsConfigureItem', u':/system/system_settings.png') - mainWindow.actionList.add_action(self.SettingsShortcutsItem, - u'Settings') - self.HelpDocumentationItem = icon_action(mainWindow, - u'HelpDocumentationItem', u':/system/system_help_contents.png') - self.HelpDocumentationItem.setEnabled(False) - mainWindow.actionList.add_action(self.HelpDocumentationItem, u'Help') - self.HelpAboutItem = icon_action(mainWindow, u'HelpAboutItem', - u':/system/system_about.png') - mainWindow.actionList.add_action(self.HelpAboutItem, u'Help') - self.HelpOnlineHelpItem = base_action(mainWindow, u'HelpOnlineHelpItem') - mainWindow.actionList.add_action(self.HelpOnlineHelpItem, u'Help') - self.helpWebSiteItem = base_action(mainWindow, u'helpWebSiteItem') - mainWindow.actionList.add_action(self.helpWebSiteItem, u'Help') - add_actions(self.FileImportMenu, - (self.ImportThemeItem, self.ImportLanguageItem)) - add_actions(self.FileExportMenu, - (self.ExportThemeItem, self.ExportLanguageItem)) - self.FileMenuActions = (self.FileNewItem, self.FileOpenItem, - self.FileSaveItem, self.FileSaveAsItem, None, - self.printServiceOrderItem, None, self.FileImportMenu.menuAction(), - self.FileExportMenu.menuAction(), self.FileExitItem) - add_actions(self.ViewModeMenu, (self.ModeDefaultItem, - self.ModeSetupItem, self.ModeLiveItem)) - add_actions(self.viewMenu, (self.ViewModeMenu.menuAction(), - None, self.ViewMediaManagerItem, self.ViewServiceManagerItem, - self.ViewThemeManagerItem, None, self.ViewPreviewPanel, - self.ViewLivePanel)) + add_actions(self.languageGroup, [languageItem]) + self.settingsShortcutsItem = icon_action(mainWindow, + u'settingsShortcutsItem', + u':/system/system_configure_shortcuts.png', + category=UiStrings().Settings) + # Formatting Tags were also known as display tags. + self.formattingTagItem = icon_action(mainWindow, + u'displayTagItem', u':/system/tag_editor.png', + category=UiStrings().Settings) + self.settingsConfigureItem = icon_action(mainWindow, + u'settingsConfigureItem', u':/system/system_settings.png', + category=UiStrings().Settings) + action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu) + self.aboutItem = shortcut_action(mainWindow, u'aboutItem', + [QtGui.QKeySequence(u'Ctrl+F1')], self.onAboutItemClicked, + u':/system/system_about.png', category=UiStrings().Help) + if os.name == u'nt': + self.localHelpFile = os.path.join( + AppLocation.get_directory(AppLocation.AppDir), 'OpenLP.chm') + self.offlineHelpItem = shortcut_action( + mainWindow, u'offlineHelpItem', [QtGui.QKeySequence(u'F1')], + self.onOfflineHelpClicked, + u':/system/system_help_contents.png', category=UiStrings().Help) + self.onlineHelpItem = shortcut_action( + mainWindow, u'onlineHelpItem', + [QtGui.QKeySequence(u'Alt+F1')], self.onOnlineHelpClicked, + u':/system/system_online_help.png', category=UiStrings().Help) + self.webSiteItem = base_action( + mainWindow, u'webSiteItem', category=UiStrings().Help) + add_actions(self.fileImportMenu, + (self.importThemeItem, self.importLanguageItem)) + add_actions(self.fileExportMenu, + (self.exportThemeItem, self.exportLanguageItem)) + add_actions(self.fileMenu, (self.fileNewItem, self.fileOpenItem, + self.fileSaveItem, self.fileSaveAsItem, None, + self.recentFilesMenu.menuAction(), None, self.printServiceOrderItem, + None, self.fileImportMenu.menuAction(), + self.fileExportMenu.menuAction(), self.fileExitItem)) + add_actions(self.viewModeMenu, (self.modeDefaultItem, + self.modeSetupItem, self.modeLiveItem)) + add_actions(self.viewMenu, (self.viewModeMenu.menuAction(), + None, self.viewMediaManagerItem, self.viewServiceManagerItem, + self.viewThemeManagerItem, None, self.viewPreviewPanel, + self.viewLivePanel, None, self.lockPanel)) # i18n add Language Actions - add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None)) - add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions()) - add_actions(self.SettingsMenu, (self.settingsPluginListItem, - self.SettingsLanguageMenu.menuAction(), None, - self.DisplayTagItem, self.SettingsShortcutsItem, - self.SettingsConfigureItem)) - add_actions(self.ToolsMenu, (self.ToolsAddToolItem, None)) - add_actions(self.ToolsMenu, (self.ToolsOpenDataFolder, None)) - add_actions(self.HelpMenu, (self.HelpDocumentationItem, - self.HelpOnlineHelpItem, None, self.helpWebSiteItem, - self.HelpAboutItem)) - add_actions(self.MenuBar, (self.FileMenu.menuAction(), - self.viewMenu.menuAction(), self.ToolsMenu.menuAction(), - self.SettingsMenu.menuAction(), self.HelpMenu.menuAction())) + add_actions(self.settingsLanguageMenu, (self.autoLanguageItem, None)) + add_actions(self.settingsLanguageMenu, self.languageGroup.actions()) + # Order things differently in OS X so that Preferences menu item in the + # app menu is correct (this gets picked up automatically by Qt). + if sys.platform == u'darwin': + add_actions(self.settingsMenu, (self.settingsPluginListItem, + self.settingsLanguageMenu.menuAction(), None, + self.settingsConfigureItem, self.settingsShortcutsItem, + self.formattingTagItem)) + else: + add_actions(self.settingsMenu, (self.settingsPluginListItem, + self.settingsLanguageMenu.menuAction(), None, + self.formattingTagItem, self.settingsShortcutsItem, + self.settingsConfigureItem)) + add_actions(self.toolsMenu, (self.toolsAddToolItem, None)) + add_actions(self.toolsMenu, (self.toolsOpenDataFolder, None)) + add_actions(self.toolsMenu, (self.toolsFirstTimeWizard, None)) + add_actions(self.toolsMenu, [self.updateThemeImages]) + if os.name == u'nt': + add_actions(self.helpMenu, (self.offlineHelpItem, + self.onlineHelpItem, None, self.webSiteItem, + self.aboutItem)) + else: + add_actions(self.helpMenu, (self.onlineHelpItem, None, + self.webSiteItem, self.aboutItem)) + add_actions(self.menuBar, (self.fileMenu.menuAction(), + self.viewMenu.menuAction(), self.toolsMenu.menuAction(), + self.settingsMenu.menuAction(), self.helpMenu.menuAction())) # Initialise the translation self.retranslateUi(mainWindow) - self.MediaToolBox.setCurrentIndex(0) + self.mediaToolBox.setCurrentIndex(0) # Connect up some signals and slots - QtCore.QObject.connect(self.FileMenu, - QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu) - QtCore.QObject.connect(self.FileExitItem, - QtCore.SIGNAL(u'triggered()'), mainWindow.close) + QtCore.QObject.connect(self.fileMenu, + QtCore.SIGNAL(u'aboutToShow()'), self.updateRecentFilesMenu) QtCore.QMetaObject.connectSlotsByName(mainWindow) # Hide the entry, as it does not have any functionality yet. - self.ToolsAddToolItem.setVisible(False) - self.ImportLanguageItem.setVisible(False) - self.ExportLanguageItem.setVisible(False) - self.SettingsShortcutsItem.setVisible(False) - self.HelpDocumentationItem.setVisible(False) + self.toolsAddToolItem.setVisible(False) + self.importLanguageItem.setVisible(False) + self.exportLanguageItem.setVisible(False) + self.setLockPanel(panelLocked) def retranslateUi(self, mainWindow): """ Set up the translation system """ - mainWindow.mainTitle = UiStrings.OLPV2 + mainWindow.mainTitle = UiStrings().OLPV2 mainWindow.setWindowTitle(mainWindow.mainTitle) - self.FileMenu.setTitle(translate('OpenLP.MainWindow', '&File')) - self.FileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import')) - self.FileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export')) + self.fileMenu.setTitle(translate('OpenLP.MainWindow', '&File')) + self.fileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import')) + self.fileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export')) + self.recentFilesMenu.setTitle( + translate('OpenLP.MainWindow', '&Recent Files')) self.viewMenu.setTitle(translate('OpenLP.MainWindow', '&View')) - self.ViewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode')) - self.ToolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools')) - self.SettingsMenu.setTitle(translate('OpenLP.MainWindow', '&Settings')) - self.SettingsLanguageMenu.setTitle(translate('OpenLP.MainWindow', + self.viewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode')) + self.toolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools')) + self.settingsMenu.setTitle(translate('OpenLP.MainWindow', '&Settings')) + self.settingsLanguageMenu.setTitle(translate('OpenLP.MainWindow', '&Language')) - self.HelpMenu.setTitle(translate('OpenLP.MainWindow', '&Help')) + self.helpMenu.setTitle(translate('OpenLP.MainWindow', '&Help')) self.mediaManagerDock.setWindowTitle( translate('OpenLP.MainWindow', 'Media Manager')) self.serviceManagerDock.setWindowTitle( translate('OpenLP.MainWindow', 'Service Manager')) self.themeManagerDock.setWindowTitle( translate('OpenLP.MainWindow', 'Theme Manager')) - self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New')) - self.FileNewItem.setToolTip(UiStrings.NewService) - self.FileNewItem.setStatusTip(UiStrings.CreateService) - self.FileNewItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+N')) - self.FileOpenItem.setText(translate('OpenLP.MainWindow', '&Open')) - self.FileOpenItem.setToolTip(UiStrings.OpenService) - self.FileOpenItem.setStatusTip( + self.fileNewItem.setText(translate('OpenLP.MainWindow', '&New')) + self.fileNewItem.setToolTip(UiStrings().NewService) + self.fileNewItem.setStatusTip(UiStrings().CreateService) + self.fileOpenItem.setText(translate('OpenLP.MainWindow', '&Open')) + self.fileOpenItem.setToolTip(UiStrings().OpenService) + self.fileOpenItem.setStatusTip( translate('OpenLP.MainWindow', 'Open an existing service.')) - self.FileOpenItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+O')) - self.FileSaveItem.setText(translate('OpenLP.MainWindow', '&Save')) - self.FileSaveItem.setToolTip(UiStrings.SaveService) - self.FileSaveItem.setStatusTip( + self.fileSaveItem.setText(translate('OpenLP.MainWindow', '&Save')) + self.fileSaveItem.setToolTip(UiStrings().SaveService) + self.fileSaveItem.setStatusTip( translate('OpenLP.MainWindow', 'Save the current service to disk.')) - self.FileSaveItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+S')) - self.FileSaveAsItem.setText( + self.fileSaveAsItem.setText( translate('OpenLP.MainWindow', 'Save &As...')) - self.FileSaveAsItem.setToolTip( + self.fileSaveAsItem.setToolTip( translate('OpenLP.MainWindow', 'Save Service As')) - self.FileSaveAsItem.setStatusTip(translate('OpenLP.MainWindow', + self.fileSaveAsItem.setStatusTip(translate('OpenLP.MainWindow', 'Save the current service under a new name.')) - self.FileSaveAsItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+Shift+S')) - self.printServiceOrderItem.setText(UiStrings.PrintServiceOrder) + self.printServiceOrderItem.setText(UiStrings().PrintService) self.printServiceOrderItem.setStatusTip(translate('OpenLP.MainWindow', - 'Print the current Service Order.')) - self.printServiceOrderItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+P')) - self.FileExitItem.setText( + 'Print the current service.')) + self.fileExitItem.setText( translate('OpenLP.MainWindow', 'E&xit')) - self.FileExitItem.setStatusTip( + self.fileExitItem.setStatusTip( translate('OpenLP.MainWindow', 'Quit OpenLP')) - self.FileExitItem.setShortcut( - translate('OpenLP.MainWindow', 'Alt+F4')) - self.ImportThemeItem.setText( + self.importThemeItem.setText( translate('OpenLP.MainWindow', '&Theme')) - self.ImportLanguageItem.setText( + self.importLanguageItem.setText( translate('OpenLP.MainWindow', '&Language')) - self.ExportThemeItem.setText( + self.exportThemeItem.setText( translate('OpenLP.MainWindow', '&Theme')) - self.ExportLanguageItem.setText( + self.exportLanguageItem.setText( translate('OpenLP.MainWindow', '&Language')) - self.SettingsShortcutsItem.setText( + self.settingsShortcutsItem.setText( translate('OpenLP.MainWindow', 'Configure &Shortcuts...')) - self.DisplayTagItem.setText( - translate('OpenLP.MainWindow', '&Configure Display Tags')) - self.SettingsConfigureItem.setText( + self.formattingTagItem.setText( + translate('OpenLP.MainWindow', '&Configure Formatting Tags...')) + self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) - self.ViewMediaManagerItem.setText( + self.viewMediaManagerItem.setText( translate('OpenLP.MainWindow', '&Media Manager')) - self.ViewMediaManagerItem.setToolTip( + self.viewMediaManagerItem.setToolTip( translate('OpenLP.MainWindow', 'Toggle Media Manager')) - self.ViewMediaManagerItem.setStatusTip(translate('OpenLP.MainWindow', + self.viewMediaManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the media manager.')) - self.ViewMediaManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F8')) - self.ViewThemeManagerItem.setText( + self.viewThemeManagerItem.setText( translate('OpenLP.MainWindow', '&Theme Manager')) - self.ViewThemeManagerItem.setToolTip( + self.viewThemeManagerItem.setToolTip( translate('OpenLP.MainWindow', 'Toggle Theme Manager')) - self.ViewThemeManagerItem.setStatusTip(translate('OpenLP.MainWindow', + self.viewThemeManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the theme manager.')) - self.ViewThemeManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F10')) - self.ViewServiceManagerItem.setText( + self.viewServiceManagerItem.setText( translate('OpenLP.MainWindow', '&Service Manager')) - self.ViewServiceManagerItem.setToolTip( + self.viewServiceManagerItem.setToolTip( translate('OpenLP.MainWindow', 'Toggle Service Manager')) - self.ViewServiceManagerItem.setStatusTip(translate('OpenLP.MainWindow', + self.viewServiceManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the service manager.')) - self.ViewServiceManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F9')) - self.ViewPreviewPanel.setText( + self.viewPreviewPanel.setText( translate('OpenLP.MainWindow', '&Preview Panel')) - self.ViewPreviewPanel.setToolTip( + self.viewPreviewPanel.setToolTip( translate('OpenLP.MainWindow', 'Toggle Preview Panel')) - self.ViewPreviewPanel.setStatusTip(translate('OpenLP.MainWindow', + self.viewPreviewPanel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the preview panel.')) - self.ViewPreviewPanel.setShortcut( - translate('OpenLP.MainWindow', 'F11')) - self.ViewLivePanel.setText( + self.viewLivePanel.setText( translate('OpenLP.MainWindow', '&Live Panel')) - self.ViewLivePanel.setToolTip( + self.viewLivePanel.setToolTip( translate('OpenLP.MainWindow', 'Toggle Live Panel')) - self.ViewLivePanel.setStatusTip(translate('OpenLP.MainWindow', + self.lockPanel.setText( + translate('OpenLP.MainWindow', 'L&ock Panels')) + self.lockPanel.setStatusTip( + translate('OpenLP.MainWindow', 'Prevent the panels being moved.')) + self.viewLivePanel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the live panel.')) - self.ViewLivePanel.setShortcut( - translate('OpenLP.MainWindow', 'F12')) self.settingsPluginListItem.setText(translate('OpenLP.MainWindow', '&Plugin List')) self.settingsPluginListItem.setStatusTip( translate('OpenLP.MainWindow', 'List the Plugins')) - self.settingsPluginListItem.setShortcut( - translate('OpenLP.MainWindow', 'Alt+F7')) - self.HelpDocumentationItem.setText( - translate('OpenLP.MainWindow', '&User Guide')) - self.HelpAboutItem.setText(translate('OpenLP.MainWindow', '&About')) - self.HelpAboutItem.setStatusTip( + self.aboutItem.setText(translate('OpenLP.MainWindow', '&About')) + self.aboutItem.setStatusTip( translate('OpenLP.MainWindow', 'More information about OpenLP')) - self.HelpAboutItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+F1')) - self.HelpOnlineHelpItem.setText( + if os.name == u'nt': + self.offlineHelpItem.setText( + translate('OpenLP.MainWindow', '&User Guide')) + self.onlineHelpItem.setText( translate('OpenLP.MainWindow', '&Online Help')) - # Uncomment after 1.9.5 beta string freeze - #self.HelpOnlineHelpItem.setShortcut( - # translate('OpenLP.MainWindow', 'F1')) - self.helpWebSiteItem.setText( + self.webSiteItem.setText( translate('OpenLP.MainWindow', '&Web Site')) - for item in self.LanguageGroup.actions(): + for item in self.languageGroup.actions(): item.setText(item.objectName()) item.setStatusTip(unicode(translate('OpenLP.MainWindow', 'Set the interface language to %s')) % item.objectName()) - self.AutoLanguageItem.setText( + self.autoLanguageItem.setText( translate('OpenLP.MainWindow', '&Autodetect')) - self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow', + self.autoLanguageItem.setStatusTip(translate('OpenLP.MainWindow', 'Use the system language, if available.')) - self.ToolsAddToolItem.setText( + self.toolsAddToolItem.setText( translate('OpenLP.MainWindow', 'Add &Tool...')) - self.ToolsAddToolItem.setStatusTip(translate('OpenLP.MainWindow', + self.toolsAddToolItem.setStatusTip(translate('OpenLP.MainWindow', 'Add an application to the list of tools.')) - self.ToolsOpenDataFolder.setText( + self.toolsOpenDataFolder.setText( translate('OpenLP.MainWindow', 'Open &Data Folder...')) - self.ToolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow', + self.toolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow', 'Open the folder where songs, bibles and other data resides.')) - self.ModeDefaultItem.setText( + self.toolsFirstTimeWizard.setText( + translate('OpenLP.MainWindow', 'Re-run First Time Wizard')) + self.toolsFirstTimeWizard.setStatusTip(translate('OpenLP.MainWindow', + 'Re-run the First Time Wizard, importing songs, Bibles and themes.')) + self.updateThemeImages.setText( + translate('OpenLP.MainWindow', 'Update Theme Images')) + self.updateThemeImages.setStatusTip( + translate('OpenLP.MainWindow', 'Update the preview images for all ' + 'themes.')) + self.modeDefaultItem.setText( translate('OpenLP.MainWindow', '&Default')) - self.ModeDefaultItem.setStatusTip(translate('OpenLP.MainWindow', + self.modeDefaultItem.setStatusTip(translate('OpenLP.MainWindow', 'Set the view mode back to the default.')) - self.ModeSetupItem.setText(translate('OpenLP.MainWindow', '&Setup')) - self.ModeSetupItem.setStatusTip( + self.modeSetupItem.setText(translate('OpenLP.MainWindow', '&Setup')) + self.modeSetupItem.setStatusTip( translate('OpenLP.MainWindow', 'Set the view mode to Setup.')) - self.ModeLiveItem.setText(translate('OpenLP.MainWindow', '&Live')) - self.ModeLiveItem.setStatusTip( + self.modeLiveItem.setText(translate('OpenLP.MainWindow', '&Live')) + self.modeLiveItem.setStatusTip( translate('OpenLP.MainWindow', 'Set the view mode to Live.')) @@ -467,15 +510,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.info(u'MainWindow loaded') - actionList = ActionList() - - def __init__(self, screens, clipboard, arguments): + def __init__(self, clipboard, arguments): """ This constructor sets up the interface, the various managers, and the plugins. """ QtGui.QMainWindow.__init__(self) - self.screens = screens self.clipboard = clipboard self.arguments = arguments # Set up settings sections for the main application @@ -485,87 +525,60 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' self.serviceNotSaved = False - self.actionList = ActionList() - self.settingsmanager = SettingsManager(screens) self.aboutForm = AboutForm(self) - self.settingsForm = SettingsForm(self.screens, self, self) - self.displayTagForm = DisplayTagForm(self) + self.settingsForm = SettingsForm(self, self) + self.formattingTagForm = FormattingTagForm(self) self.shortcutForm = ShortcutListForm(self) self.recentFiles = QtCore.QStringList() # Set up the path with plugins pluginpath = AppLocation.get_directory(AppLocation.PluginsDir) self.pluginManager = PluginManager(pluginpath) self.pluginHelpers = {} + self.imageManager = ImageManager() # Set up the interface self.setupUi(self) # Load settings after setupUi so default UI sizes are overwritten self.loadSettings() - # Once settings are loaded update FileMenu with recentFiles - self.updateFileMenu() + # Once settings are loaded update the menu with the recent files. + self.updateRecentFilesMenu() self.pluginForm = PluginForm(self) # Set up signals and slots - QtCore.QObject.connect(self.ImportThemeItem, + QtCore.QObject.connect(self.importThemeItem, QtCore.SIGNAL(u'triggered()'), self.themeManagerContents.onImportTheme) - QtCore.QObject.connect(self.ExportThemeItem, + QtCore.QObject.connect(self.exportThemeItem, QtCore.SIGNAL(u'triggered()'), self.themeManagerContents.onExportTheme) - QtCore.QObject.connect(self.ViewMediaManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleMediaManager) - QtCore.QObject.connect(self.ViewServiceManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleServiceManager) - QtCore.QObject.connect(self.ViewThemeManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleThemeManager) - QtCore.QObject.connect(self.ViewPreviewPanel, - QtCore.SIGNAL(u'toggled(bool)'), self.setPreviewPanelVisibility) - QtCore.QObject.connect(self.ViewLivePanel, - QtCore.SIGNAL(u'toggled(bool)'), self.setLivePanelVisibility) QtCore.QObject.connect(self.mediaManagerDock, QtCore.SIGNAL(u'visibilityChanged(bool)'), - self.ViewMediaManagerItem.setChecked) + self.viewMediaManagerItem.setChecked) QtCore.QObject.connect(self.serviceManagerDock, QtCore.SIGNAL(u'visibilityChanged(bool)'), - self.ViewServiceManagerItem.setChecked) + self.viewServiceManagerItem.setChecked) QtCore.QObject.connect(self.themeManagerDock, QtCore.SIGNAL(u'visibilityChanged(bool)'), - self.ViewThemeManagerItem.setChecked) - QtCore.QObject.connect(self.helpWebSiteItem, + self.viewThemeManagerItem.setChecked) + QtCore.QObject.connect(self.webSiteItem, QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked) - QtCore.QObject.connect(self.HelpOnlineHelpItem, - QtCore.SIGNAL(u'triggered()'), self.onHelpOnLineHelpClicked) - QtCore.QObject.connect(self.HelpAboutItem, - QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked) - QtCore.QObject.connect(self.ToolsOpenDataFolder, + QtCore.QObject.connect(self.toolsOpenDataFolder, QtCore.SIGNAL(u'triggered()'), self.onToolsOpenDataFolderClicked) - QtCore.QObject.connect(self.settingsPluginListItem, - QtCore.SIGNAL(u'triggered()'), self.onPluginItemClicked) - QtCore.QObject.connect(self.DisplayTagItem, - QtCore.SIGNAL(u'triggered()'), self.onDisplayTagItemClicked) - QtCore.QObject.connect(self.SettingsConfigureItem, + QtCore.QObject.connect(self.toolsFirstTimeWizard, + QtCore.SIGNAL(u'triggered()'), self.onFirstTimeWizardClicked) + QtCore.QObject.connect(self.updateThemeImages, + QtCore.SIGNAL(u'triggered()'), self.onUpdateThemeImages) + QtCore.QObject.connect(self.formattingTagItem, + QtCore.SIGNAL(u'triggered()'), self.onFormattingTagItemClicked) + QtCore.QObject.connect(self.settingsConfigureItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) - QtCore.QObject.connect(self.SettingsShortcutsItem, + QtCore.QObject.connect(self.settingsShortcutsItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked) - QtCore.QObject.connect(self.FileNewItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onNewServiceClicked) - QtCore.QObject.connect(self.FileOpenItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onLoadServiceClicked) - QtCore.QObject.connect(self.FileSaveItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.saveFile) - QtCore.QObject.connect(self.FileSaveAsItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.saveFileAs) - QtCore.QObject.connect(self.printServiceOrderItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.printServiceOrder) # i18n set signals for languages - self.LanguageGroup.triggered.connect(LanguageManager.set_language) - QtCore.QObject.connect(self.ModeDefaultItem, + self.languageGroup.triggered.connect(LanguageManager.set_language) + QtCore.QObject.connect(self.modeDefaultItem, QtCore.SIGNAL(u'triggered()'), self.onModeDefaultItemClicked) - QtCore.QObject.connect(self.ModeSetupItem, + QtCore.QObject.connect(self.modeSetupItem, QtCore.SIGNAL(u'triggered()'), self.onModeSetupItemClicked) - QtCore.QObject.connect(self.ModeLiveItem, + QtCore.QObject.connect(self.modeLiveItem, QtCore.SIGNAL(u'triggered()'), self.onModeLiveItemClicked) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.defaultThemeChanged) @@ -577,6 +590,9 @@ 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) + # Media Manager + QtCore.QObject.connect(self.mediaToolBox, + QtCore.SIGNAL(u'currentChanged(int)'), self.onMediaToolBoxChanged) Receiver.send_message(u'cursor_busy') # Simple message boxes QtCore.QObject.connect(Receiver.get_receiver(), @@ -587,18 +603,17 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'openlp_information_message'), self.onInformationMessage) # warning cyclic dependency - # RenderManager needs to call ThemeManager and - # ThemeManager needs to call RenderManager - self.renderManager = RenderManager( - self.themeManagerContents, self.screens) + # renderer needs to call ThemeManager and + # ThemeManager needs to call Renderer + self.renderer = Renderer(self.imageManager, self.themeManagerContents) # Define the media Dock Manager - self.mediaDockManager = MediaDockManager(self.MediaToolBox) + self.mediaDockManager = MediaDockManager(self.mediaToolBox) log.info(u'Load Plugins') # make the controllers available to the plugins self.pluginHelpers[u'preview'] = self.previewController self.pluginHelpers[u'live'] = self.liveController - self.pluginHelpers[u'render'] = self.renderManager - self.pluginHelpers[u'service'] = self.ServiceManagerContents + self.pluginHelpers[u'renderer'] = self.renderer + self.pluginHelpers[u'service'] = self.serviceManagerContents self.pluginHelpers[u'settings form'] = self.settingsForm self.pluginHelpers[u'toolbox'] = self.mediaDockManager self.pluginHelpers[u'pluginmanager'] = self.pluginManager @@ -614,31 +629,42 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.pluginManager.hook_media_manager(self.mediaDockManager) # Call the hook method to pull in import menus. log.info(u'hook menus') - self.pluginManager.hook_import_menu(self.FileImportMenu) + self.pluginManager.hook_import_menu(self.fileImportMenu) # Call the hook method to pull in export menus. - self.pluginManager.hook_export_menu(self.FileExportMenu) + self.pluginManager.hook_export_menu(self.fileExportMenu) # Call the hook method to pull in tools menus. - self.pluginManager.hook_tools_menu(self.ToolsMenu) + self.pluginManager.hook_tools_menu(self.toolsMenu) # Call the initialise method to setup plugins. log.info(u'initialise plugins') self.pluginManager.initialise_plugins() + # Create the displays as all necessary components are loaded. + self.previewController.screenSizeChanged() + self.liveController.screenSizeChanged() log.info(u'Load data from Settings') if QtCore.QSettings().value(u'advanced/save current plugin', QtCore.QVariant(False)).toBool(): savedPlugin = QtCore.QSettings().value( u'advanced/current media plugin', QtCore.QVariant()).toInt()[0] if savedPlugin != -1: - self.MediaToolBox.setCurrentIndex(savedPlugin) + self.mediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() # Once all components are initialised load the Themes log.info(u'Load Themes') self.themeManagerContents.loadThemes(True) + # Hide/show the theme combobox on the service manager + self.serviceManagerContents.themeChange() + # Reset the cursor Receiver.send_message(u'cursor_normal') def setAutoLanguage(self, value): - self.LanguageGroup.setDisabled(value) + self.languageGroup.setDisabled(value) LanguageManager.auto_language = value - LanguageManager.set_language(self.LanguageGroup.checkedAction()) + LanguageManager.set_language(self.languageGroup.checkedAction()) + + def onMediaToolBoxChanged(self, index): + widget = self.mediaToolBox.widget(index) + if widget: + widget.onFocus() def versionNotice(self, version): """ @@ -661,29 +687,35 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.liveController.display.isVisible(): self.liveController.display.setFocus() self.activateWindow() - # On Windows, arguments contains the entire commandline - # So args[0]=='python' args[1]=='openlp.pyw' - # Therefore this approach is not going to work - # Bypass for now. - if len(self.arguments) and os.name != u'nt': + if len(self.arguments): args = [] for a in self.arguments: args.extend([a]) - self.ServiceManagerContents.loadFile(unicode(args[0])) + self.serviceManagerContents.loadFile(unicode(args[0])) elif QtCore.QSettings().value( self.generalSettingsSection + u'/auto open', QtCore.QVariant(False)).toBool(): - self.ServiceManagerContents.loadLastFile() + self.serviceManagerContents.loadLastFile() view_mode = QtCore.QSettings().value(u'%s/view mode' % \ - self.generalSettingsSection, u'default') + self.generalSettingsSection, u'default').toString() if view_mode == u'default': - self.ModeDefaultItem.setChecked(True) + self.modeDefaultItem.setChecked(True) elif view_mode == u'setup': self.setViewMode(True, True, False, True, False) - self.ModeSetupItem.setChecked(True) + self.modeSetupItem.setChecked(True) elif view_mode == u'live': self.setViewMode(False, True, False, False, True) - self.ModeLiveItem.setChecked(True) + self.modeLiveItem.setChecked(True) + + def appStartup(self): + """ + Give all the plugins a chance to perform some tasks at startup + """ + Receiver.send_message(u'openlp_process_events') + for plugin in self.pluginManager.plugins: + if plugin.isActive(): + plugin.appStartup() + Receiver.send_message(u'openlp_process_events') def firstTime(self): # Import themes if first time @@ -694,20 +726,60 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): plugin.firstTime() Receiver.send_message(u'openlp_process_events') temp_dir = os.path.join(unicode(gettempdir()), u'openlp') + if not os.path.exists(temp_dir): + return for filename in os.listdir(temp_dir): - os.remove(os.path.join(temp_dir, filename)) + delete_file(os.path.join(temp_dir, filename)) os.removedirs(temp_dir) + def onFirstTimeWizardClicked(self): + """ + Re-run the first time wizard. Prompts the user for run confirmation + If wizard is run, songs, bibles and themes are imported. The default + theme is changed (if necessary). The plugins in pluginmanager are + set active/in-active to match the selection in the wizard. + """ + answer = QtGui.QMessageBox.warning(self, + translate('OpenLP.MainWindow', 'Re-run First Time Wizard?'), + translate('OpenLP.MainWindow', + 'Are you sure you want to re-run the First Time Wizard?\n\n' + 'Re-running this wizard may make changes to your current ' + 'OpenLP configuration and possibly add songs to your ' + 'existing songs list and change your default theme.'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.No: + return + Receiver.send_message(u'cursor_busy') + screens = ScreenList.get_instance() + if FirstTimeForm(screens, self).exec_() == QtGui.QDialog.Accepted: + self.firstTime() + for plugin in self.pluginManager.plugins: + self.activePlugin = plugin + oldStatus = self.activePlugin.status + self.activePlugin.setStatus() + if oldStatus != self.activePlugin.status: + if self.activePlugin.status == PluginStatus.Active: + self.activePlugin.toggleStatus(PluginStatus.Active) + self.activePlugin.appStartup() + else: + self.activePlugin.toggleStatus(PluginStatus.Inactive) + self.themeManagerContents.configUpdated() + self.themeManagerContents.loadThemes(True) + Receiver.send_message(u'theme_update_global', + self.themeManagerContents.global_theme) + def blankCheck(self): """ Check and display message if screen blank on setup. - Triggered by delay thread. """ settings = QtCore.QSettings() + self.liveController.mainDisplaySetBackground() if settings.value(u'%s/screen blank' % self.generalSettingsSection, QtCore.QVariant(False)).toBool(): - self.liveController.mainDisplaySetBackground() - if settings.value(u'blank warning', + if settings.value(u'%s/blank warning' % self.generalSettingsSection, QtCore.QVariant(False)).toBool(): QtGui.QMessageBox.question(self, translate('OpenLP.MainWindow', @@ -716,12 +788,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 'The Main Display has been blanked out')) def onErrorMessage(self, data): + Receiver.send_message(u'close_splash') QtGui.QMessageBox.critical(self, data[u'title'], data[u'message']) def onWarningMessage(self, data): + Receiver.send_message(u'close_splash') QtGui.QMessageBox.warning(self, data[u'title'], data[u'message']) def onInformationMessage(self, data): + Receiver.send_message(u'close_splash') QtGui.QMessageBox.information(self, data[u'title'], data[u'message']) def onHelpWebSiteClicked(self): @@ -731,14 +806,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): import webbrowser webbrowser.open_new(u'http://openlp.org/') - def onHelpOnLineHelpClicked(self): + def onOfflineHelpClicked(self): + """ + Load the local OpenLP help file + """ + os.startfile(self.localHelpFile) + + def onOnlineHelpClicked(self): """ Load the online OpenLP manual """ import webbrowser webbrowser.open_new(u'http://manual.openlp.org/') - def onHelpAboutItemClicked(self): + def onAboutItemClicked(self): """ Show the About form """ @@ -758,11 +839,17 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): path = AppLocation.get_data_path() QtGui.QDesktopServices.openUrl(QtCore.QUrl("file:///" + path)) - def onDisplayTagItemClicked(self): + def onUpdateThemeImages(self): + """ + Updates the new theme preview images. + """ + self.themeManagerContents.updatePreviewImages() + + def onFormattingTagItemClicked(self): """ Show the Settings dialog """ - self.displayTagForm.exec_() + self.formattingTagForm.exec_() def onSettingsConfigureItemClicked(self): """ @@ -781,7 +868,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Show the shortcuts dialog """ - self.shortcutForm.exec_(self.actionList) + if self.shortcutForm.exec_(): + self.shortcutForm.save() def onModeDefaultItemClicked(self): """ @@ -818,22 +906,27 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def screenChanged(self): """ - The screen has changed to so tell the displays to update_display - their locations + The screen has changed so we have to update components such as the + renderer. """ log.debug(u'screenChanged') - self.renderManager.update_display() + Receiver.send_message(u'cursor_busy') + self.imageManager.update_display() + self.renderer.update_display() + self.previewController.screenSizeChanged() + self.liveController.screenSizeChanged() self.setFocus() self.activateWindow() + Receiver.send_message(u'cursor_normal') def closeEvent(self, event): """ Hook to close the main window and display windows on exit """ - if self.ServiceManagerContents.isModified(): - ret = self.ServiceManagerContents.saveModifiedService() + if self.serviceManagerContents.isModified(): + ret = self.serviceManagerContents.saveModifiedService() if ret == QtGui.QMessageBox.Save: - if self.ServiceManagerContents.saveFile(): + if self.serviceManagerContents.saveFile(): self.cleanUp() event.accept() else: @@ -868,11 +961,11 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Runs all the cleanup code before OpenLP shuts down """ # Clean temporary files used by services - self.ServiceManagerContents.cleanUp() + self.serviceManagerContents.cleanUp() if QtCore.QSettings().value(u'advanced/save current plugin', QtCore.QVariant(False)).toBool(): QtCore.QSettings().setValue(u'advanced/current media plugin', - QtCore.QVariant(self.MediaToolBox.currentIndex())) + QtCore.QVariant(self.mediaToolBox.currentIndex())) # Call the cleanup method to shutdown plugins. log.info(u'cleanup plugins') self.pluginManager.finalise_plugins() @@ -921,24 +1014,22 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.setWindowTitle(title) def showStatusMessage(self, message): - self.StatusBar.showMessage(message) + self.statusBar.showMessage(message) def defaultThemeChanged(self, theme): - self.DefaultThemeLabel.setText( + self.defaultThemeLabel.setText( unicode(translate('OpenLP.MainWindow', 'Default Theme: %s')) % theme) - def toggleMediaManager(self, visible): - if self.mediaManagerDock.isVisible() != visible: - self.mediaManagerDock.setVisible(visible) + def toggleMediaManager(self): + self.mediaManagerDock.setVisible(not self.mediaManagerDock.isVisible()) - def toggleServiceManager(self, visible): - if self.serviceManagerDock.isVisible() != visible: - self.serviceManagerDock.setVisible(visible) + def toggleServiceManager(self): + self.serviceManagerDock.setVisible( + not self.serviceManagerDock.isVisible()) - def toggleThemeManager(self, visible): - if self.themeManagerDock.isVisible() != visible: - self.themeManagerDock.setVisible(visible) + def toggleThemeManager(self): + self.themeManagerDock.setVisible(not self.themeManagerDock.isVisible()) def setPreviewPanelVisibility(self, visible): """ @@ -953,7 +1044,38 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.previewController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/preview panel', QtCore.QVariant(visible)) - self.ViewPreviewPanel.setChecked(visible) + self.viewPreviewPanel.setChecked(visible) + + def setLockPanel(self, lock): + """ + Sets the ability to stop the toolbars being changed. + """ + if lock: + self.themeManagerDock.setFeatures( + QtGui.QDockWidget.NoDockWidgetFeatures) + self.serviceManagerDock.setFeatures( + QtGui.QDockWidget.NoDockWidgetFeatures) + self.mediaManagerDock.setFeatures( + QtGui.QDockWidget.NoDockWidgetFeatures) + self.viewMediaManagerItem.setEnabled(False) + self.viewServiceManagerItem.setEnabled(False) + self.viewThemeManagerItem.setEnabled(False) + self.viewPreviewPanel.setEnabled(False) + self.viewLivePanel.setEnabled(False) + else: + self.themeManagerDock.setFeatures( + QtGui.QDockWidget.AllDockWidgetFeatures) + self.serviceManagerDock.setFeatures( + QtGui.QDockWidget.AllDockWidgetFeatures) + self.mediaManagerDock.setFeatures( + QtGui.QDockWidget.AllDockWidgetFeatures) + self.viewMediaManagerItem.setEnabled(True) + self.viewServiceManagerItem.setEnabled(True) + self.viewThemeManagerItem.setEnabled(True) + self.viewPreviewPanel.setEnabled(True) + self.viewLivePanel.setEnabled(True) + QtCore.QSettings().setValue(u'user interface/lock panel', + QtCore.QVariant(lock)) def setLivePanelVisibility(self, visible): """ @@ -968,7 +1090,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.liveController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/live panel', QtCore.QVariant(visible)) - self.ViewLivePanel.setChecked(visible) + self.viewLivePanel.setChecked(visible) def loadSettings(self): """ @@ -985,6 +1107,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.restoreGeometry( settings.value(u'main window geometry').toByteArray()) self.restoreState(settings.value(u'main window state').toByteArray()) + self.liveController.splitter.restoreState( + settings.value(u'live splitter geometry').toByteArray()) + self.previewController.splitter.restoreState( + settings.value(u'preview splitter geometry').toByteArray()) + self.controlSplitter.restoreState( + settings.value(u'mainwindow splitter geometry').toByteArray()) + settings.endGroup() def saveSettings(self): @@ -1005,31 +1134,44 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QVariant(self.saveState())) settings.setValue(u'main window geometry', QtCore.QVariant(self.saveGeometry())) + settings.setValue(u'live splitter geometry', + QtCore.QVariant(self.liveController.splitter.saveState())) + settings.setValue(u'preview splitter geometry', + QtCore.QVariant(self.previewController.splitter.saveState())) + settings.setValue(u'mainwindow splitter geometry', + QtCore.QVariant(self.controlSplitter.saveState())) settings.endGroup() - def updateFileMenu(self): + def updateRecentFilesMenu(self): """ - Updates the file menu with the latest list of service files accessed. + Updates the recent file menu with the latest list of service files + accessed. """ recentFileCount = QtCore.QSettings().value( u'advanced/recent file count', QtCore.QVariant(4)).toInt()[0] - self.FileMenu.clear() - add_actions(self.FileMenu, self.FileMenuActions[:-1]) existingRecentFiles = [recentFile for recentFile in self.recentFiles if QtCore.QFile.exists(recentFile)] recentFilesToDisplay = existingRecentFiles[0:recentFileCount] - if recentFilesToDisplay: - self.FileMenu.addSeparator() - for fileId, filename in enumerate(recentFilesToDisplay): - 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.onRecentServiceClicked) - self.FileMenu.addAction(action) - self.FileMenu.addSeparator() - self.FileMenu.addAction(self.FileMenuActions[-1]) + self.recentFilesMenu.clear() + for fileId, filename in enumerate(recentFilesToDisplay): + log.debug('Recent file name: %s', filename) + action = base_action(self, u'') + action.setText(u'&%d %s' % + (fileId + 1, QtCore.QFileInfo(filename).fileName())) + action.setData(QtCore.QVariant(filename)) + self.connect(action, QtCore.SIGNAL(u'triggered()'), + self.serviceManagerContents.onRecentServiceClicked) + self.recentFilesMenu.addAction(action) + clearRecentFilesAction = base_action(self, u'') + clearRecentFilesAction.setText( + translate('OpenLP.MainWindow', 'Clear List', + 'Clear List of recent files')) + clearRecentFilesAction.setStatusTip( + translate('OpenLP.MainWindow', 'Clear the list of recent files.')) + add_actions(self.recentFilesMenu, (None, clearRecentFilesAction)) + self.connect(clearRecentFilesAction, QtCore.SIGNAL(u'triggered()'), + self.recentFiles.clear) + clearRecentFilesAction.setEnabled(not self.recentFiles.isEmpty()) def addRecentFile(self, filename): """ @@ -1051,3 +1193,34 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): while self.recentFiles.count() > maxRecentFiles: # Don't care what API says takeLast works, removeLast doesn't! self.recentFiles.takeLast() + + def displayProgressBar(self, size): + """ + Make Progress bar visible and set size + """ + self.loadProgressBar.show() + self.loadProgressBar.setMaximum(size) + self.loadProgressBar.setValue(0) + Receiver.send_message(u'openlp_process_events') + + def incrementProgressBar(self): + """ + Increase the Progress Bar value by 1 + """ + self.loadProgressBar.setValue(self.loadProgressBar.value() + 1) + Receiver.send_message(u'openlp_process_events') + + def finishedProgressBar(self): + """ + Trigger it's removal after 2.5 second + """ + self.timer_id = self.startTimer(2500) + + def timerEvent(self, event): + """ + Remove the Progress bar from view. + """ + if event.timerId() == self.timer_id: + self.timer_id = 0 + self.loadProgressBar.hide() + Receiver.send_message(u'openlp_process_events') diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index ef4bc62e0..cc6cc92bc 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -65,7 +66,7 @@ class MediaDockManager(object): match = False for dock_index in range(0, self.media_dock.count()): if self.media_dock.widget(dock_index).settingsSection == \ - media_item.plugin.name.lower(): + media_item.plugin.name: match = True break if not match: @@ -83,6 +84,6 @@ class MediaDockManager(object): for dock_index in range(0, self.media_dock.count()): if self.media_dock.widget(dock_index): if self.media_dock.widget(dock_index).settingsSection == \ - media_item.plugin.name.lower(): - self.media_dock.widget(dock_index).hide() + media_item.plugin.name: + self.media_dock.widget(dock_index).setVisible(False) self.media_dock.removeItem(dock_index) diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index 0ead739a5..3fc4bf34b 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -78,8 +79,8 @@ class Ui_PluginViewDialog(object): translate('OpenLP.PluginForm', 'Plugin List')) self.pluginInfoGroupBox.setTitle( translate('OpenLP.PluginForm', 'Plugin Details')) - self.versionLabel.setText(u'%s:' % UiStrings.Version) - self.aboutLabel.setText(u'%s:' % UiStrings.About) + self.versionLabel.setText(u'%s:' % UiStrings().Version) + self.aboutLabel.setText(u'%s:' % UiStrings().About) self.statusLabel.setText( translate('OpenLP.PluginForm', 'Status:')) self.statusComboBox.setItemText(0, diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index bfac5f3e0..c529248a9 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -39,7 +40,6 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): """ def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) - self.parent = parent self.activePlugin = None self.programaticChange = False self.setupUi(self) @@ -64,7 +64,7 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): self._clearDetails() self.programaticChange = True pluginListWidth = 0 - for plugin in self.parent.pluginManager.plugins: + for plugin in self.parent().pluginManager.plugins: item = QtGui.QListWidgetItem(self.pluginListWidget) # We do this just to make 100% sure the status is an integer as # sometimes when it's loaded from the config, it isn't cast to int. @@ -114,9 +114,9 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): self._clearDetails() return plugin_name_singular = \ - self.pluginListWidget.currentItem().text().split(u' ')[0] + self.pluginListWidget.currentItem().text().split(u'(')[0][:-1] self.activePlugin = None - for plugin in self.parent.pluginManager.plugins: + for plugin in self.parent().pluginManager.plugins: if plugin.nameStrings[u'singular'] == plugin_name_singular: self.activePlugin = plugin break @@ -132,6 +132,7 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): Receiver.send_message(u'cursor_busy') self.activePlugin.toggleStatus(PluginStatus.Active) Receiver.send_message(u'cursor_normal') + self.activePlugin.appStartup() else: self.activePlugin.toggleStatus(PluginStatus.Inactive) status_text = unicode( diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index 97f4b4060..b0065df99 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -40,11 +41,6 @@ class ZoomSize(object): Fifty = 4 TwentyFive = 5 - Sizes = [ - translate('OpenLP.PrintServiceDialog', 'Fit Page'), - translate('OpenLP.PrintServiceDialog', 'Fit Width'), - u'100%', u'75%', u'50%', u'25%'] - class Ui_PrintServiceDialog(object): def setupUi(self, printServiceDialog): @@ -58,18 +54,14 @@ class Ui_PrintServiceDialog(object): self.toolbar.setIconSize(QtCore.QSize(22, 22)) self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.printButton = self.toolbar.addAction( - build_icon(u':/general/general_print.png'), 'Print') + build_icon(u':/general/general_print.png'), + translate('OpenLP.PrintServiceForm', 'Print')) self.optionsButton = QtGui.QToolButton(self.toolbar) - self.optionsButton.setText(translate('OpenLP.PrintServiceForm', - 'Options')) self.optionsButton.setToolButtonStyle( QtCore.Qt.ToolButtonTextBesideIcon) self.optionsButton.setIcon(build_icon(u':/system/system_configure.png')) self.optionsButton.setCheckable(True) self.toolbar.addWidget(self.optionsButton) - self.closeButton = self.toolbar.addAction( - build_icon(u':/system/system_close.png'), - translate('OpenLP.PrintServiceForm', 'Close')) self.toolbar.addSeparator() self.plainCopy = self.toolbar.addAction( build_icon(u':/system/system_edit_copy.png'), @@ -80,24 +72,18 @@ class Ui_PrintServiceDialog(object): self.toolbar.addSeparator() self.zoomInButton = QtGui.QToolButton(self.toolbar) self.zoomInButton.setIcon(build_icon(u':/general/general_zoom_in.png')) - self.zoomInButton.setToolTip(translate('OpenLP.PrintServiceForm', - 'Zoom In')) self.zoomInButton.setObjectName(u'zoomInButton') self.zoomInButton.setIconSize(QtCore.QSize(22, 22)) self.toolbar.addWidget(self.zoomInButton) self.zoomOutButton = QtGui.QToolButton(self.toolbar) self.zoomOutButton.setIcon( build_icon(u':/general/general_zoom_out.png')) - self.zoomOutButton.setToolTip(translate('OpenLP.PrintServiceForm', - 'Zoom Out')) self.zoomOutButton.setObjectName(u'zoomOutButton') self.zoomOutButton.setIconSize(QtCore.QSize(22, 22)) self.toolbar.addWidget(self.zoomOutButton) self.zoomOriginalButton = QtGui.QToolButton(self.toolbar) self.zoomOriginalButton.setIcon( build_icon(u':/general/general_zoom_original.png')) - self.zoomOriginalButton.setToolTip(translate('OpenLP.PrintServiceForm', - 'Zoom Original')) self.zoomOriginalButton.setObjectName(u'zoomOriginalButton') self.zoomOriginalButton.setIconSize(QtCore.QSize(22, 22)) self.toolbar.addWidget(self.zoomOriginalButton) @@ -115,23 +101,22 @@ class Ui_PrintServiceDialog(object): self.optionsLayout.setContentsMargins(8, 8, 8, 8) self.titleLabel = QtGui.QLabel(self.optionsWidget) self.titleLabel.setObjectName(u'titleLabel') - self.titleLabel.setText(u'Title:') self.optionsLayout.addWidget(self.titleLabel) self.titleLineEdit = QtGui.QLineEdit(self.optionsWidget) self.titleLineEdit.setObjectName(u'titleLineEdit') self.optionsLayout.addWidget(self.titleLineEdit) self.footerLabel = QtGui.QLabel(self.optionsWidget) self.footerLabel.setObjectName(u'footerLabel') - self.footerLabel.setText(u'Custom Footer Text:') self.optionsLayout.addWidget(self.footerLabel) self.footerTextEdit = SpellTextEdit(self.optionsWidget) self.footerTextEdit.setObjectName(u'footerTextEdit') self.optionsLayout.addWidget(self.footerTextEdit) - self.optionsGroupBox = QtGui.QGroupBox( - translate('OpenLP.PrintServiceForm','Other Options')) + self.optionsGroupBox = QtGui.QGroupBox() self.groupLayout = QtGui.QVBoxLayout() self.slideTextCheckBox = QtGui.QCheckBox() self.groupLayout.addWidget(self.slideTextCheckBox) + self.pageBreakAfterText = QtGui.QCheckBox() + self.groupLayout.addWidget(self.pageBreakAfterText) self.notesCheckBox = QtGui.QCheckBox() self.groupLayout.addWidget(self.notesCheckBox) self.metaDataCheckBox = QtGui.QCheckBox() @@ -146,18 +131,37 @@ class Ui_PrintServiceDialog(object): QtCore.SIGNAL(u'toggled(bool)'), self.toggleOptions) def retranslateUi(self, printServiceDialog): - printServiceDialog.setWindowTitle(UiStrings.PrintServiceOrder) + printServiceDialog.setWindowTitle(UiStrings().PrintService) + self.zoomOutButton.setToolTip(translate('OpenLP.PrintServiceForm', + 'Zoom Out')) + self.zoomOriginalButton.setToolTip(translate('OpenLP.PrintServiceForm', + 'Zoom Original')) + self.zoomInButton.setToolTip(translate('OpenLP.PrintServiceForm', + 'Zoom In')) + self.optionsButton.setText(translate('OpenLP.PrintServiceForm', + 'Options')) + self.titleLabel.setText(translate('OpenLP.PrintServiceForm', 'Title:')) + self.footerLabel.setText(translate('OpenLP.PrintServiceForm', + 'Custom Footer Text:')) + self.optionsGroupBox.setTitle( + translate('OpenLP.PrintServiceForm','Other Options')) self.slideTextCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include slide text if available')) + self.pageBreakAfterText.setText(translate('OpenLP.PrintServiceForm', + 'Add page break before each text item')) self.notesCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include service item notes')) self.metaDataCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include play length of media items')) self.titleLineEdit.setText(translate('OpenLP.PrintServiceForm', - 'Service Order Sheet')) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.Page]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.Width]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.OneHundred]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.SeventyFive]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.Fifty]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.TwentyFive]) + 'Service Sheet')) + # Do not change the order. + self.zoomComboBox.addItems([ + translate('OpenLP.PrintServiceDialog', 'Fit Page'), + translate('OpenLP.PrintServiceDialog', 'Fit Width'), + u'100%', + u'75%', + u'50%', + u'25%'] + ) + diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 4e0f018a4..f50237619 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -24,12 +25,84 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### import datetime +import os from PyQt4 import QtCore, QtGui +from lxml import html -from openlp.core.lib import translate +from openlp.core.lib import translate, get_text_file_string from openlp.core.lib.ui import UiStrings from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize +from openlp.core.utils import AppLocation + +DEFAULT_CSS = """/* +Edit this file to customize the service order print. Note, that not all CSS +properties are supported. See: +http://doc.trolltech.com/4.7/richtext-html-subset.html#css-properties +*/ + +.serviceTitle { + font-weight: 600; + font-size: x-large; + color: black; +} + +.item { + color: black; +} + +.itemTitle { + font-weight: 600; + font-size: large; +} + +.itemText { + margin-top: 10px; +} + +.itemFooter { + font-size: 8px; +} + +.itemNotes {} + +.itemNotesTitle { + font-weight: bold; + font-size: 12px; +} + +.itemNotesText { + font-size: 11px; +} + +.media {} + +.mediaTitle { + font-weight: bold; + font-size: 11px; +} + +.mediaText {} + +.imageList {} + +.customNotes { + margin-top: 10px; +} + +.customNotesTitle { + font-weight: bold; + font-size: 11px; +} + +.customNotesText { + font-size: 11px; +} + +.newPage { + page-break-before: always; +} +""" class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): @@ -50,6 +123,10 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.beginGroup(u'advanced') self.slideTextCheckBox.setChecked(settings.value( u'print slide text', QtCore.QVariant(False)).toBool()) + self.pageBreakAfterText.setChecked(settings.value( + u'add page break', QtCore.QVariant(False)).toBool()) + if not self.slideTextCheckBox.isChecked(): + self.pageBreakAfterText.setDisabled(True) self.metaDataCheckBox.setChecked(settings.value( u'print file meta data', QtCore.QVariant(False)).toBool()) self.notesCheckBox.setChecked(settings.value( @@ -60,8 +137,6 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): # Signals QtCore.QObject.connect(self.printButton, QtCore.SIGNAL(u'triggered()'), self.printServiceOrder) - QtCore.QObject.connect(self.closeButton, - QtCore.SIGNAL(u'triggered()'), self.accept) QtCore.QObject.connect(self.zoomOutButton, QtCore.SIGNAL(u'clicked()'), self.zoomOut) QtCore.QObject.connect(self.zoomInButton, @@ -76,6 +151,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): QtCore.SIGNAL(u'triggered()'), self.copyText) QtCore.QObject.connect(self.htmlCopy, QtCore.SIGNAL(u'triggered()'), self.copyHtmlText) + QtCore.QObject.connect(self.slideTextCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onSlideTextCheckBoxChanged) self.updatePreviewText() def toggleOptions(self, checked): @@ -93,59 +171,121 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Creates the html text and updates the html of *self.document*. """ - text = u'' - if self.titleLineEdit.text(): - text += u'

%s

' % unicode(self.titleLineEdit.text()) - for item in self.serviceManager.serviceItems: - item = item[u'service_item'] - # Add the title of the service item. - text += u'

%s

' % (item.icon, - item.get_display_title()) - # Add slide text of the service item. - if self.slideTextCheckBox.isChecked(): - if item.is_text(): - # Add the text of the service item. - verse = None - for slide in item.get_frames(): - if not verse: - text += u'

' + slide[u'html'] - verse = slide[u'verseTag'] - elif verse != slide[u'verseTag']: - text += u'<\p>

' + slide[u'html'] - verse = slide[u'verseTag'] - else: - text += u'
' + slide[u'html'] - text += u'

' - elif item.is_image(): - # Add the image names of the service item. - text += u'
    ' - for slide in range(len(item.get_frames())): - text += u'
  1. %s

  2. ' % \ - item.get_frame_title(slide) - text += u'
' - if item.foot_text: - # add footer - text += u'

%s

' % item.foot_text - # Add service items' notes. - if self.notesCheckBox.isChecked(): - if item.notes: - text += u'

%s

%s' % (translate( - 'OpenLP.ServiceManager', 'Notes:'), - item.notes.replace(u'\n', u'
')) - # Add play length of media files. - if item.is_media() and self.metaDataCheckBox.isChecked(): - tme = item.media_length - if item.end_time > 0: - tme = item.end_time - item.start_time - text += u'

%s %s

' % (translate( - 'OpenLP.ServiceManager', u'Playing time:'), - unicode(datetime.timedelta(seconds=tme))) + html_data = self._addElement(u'html') + self._addElement(u'head', parent=html_data) + self._addElement(u'title', unicode(self.titleLineEdit.text()), + html_data.head) + css_path = os.path.join( + AppLocation.get_data_path(), u'service_print.css') + custom_css = get_text_file_string(css_path) + if not custom_css: + custom_css = DEFAULT_CSS + self._addElement(u'style', custom_css, html_data.head, + attribute=(u'type', u'text/css')) + self._addElement(u'body', parent=html_data) + self._addElement(u'h1', unicode(self.titleLineEdit.text()), + html_data.body, classId=u'serviceTitle') + for index, item in enumerate(self.serviceManager.serviceItems): + self._addPreviewItem(html_data.body, item[u'service_item'], index) + # Add the custom service notes: if self.footerTextEdit.toPlainText(): - text += u'

%s

%s' % (translate('OpenLP.ServiceManager', - u'Custom Service Notes:'), self.footerTextEdit.toPlainText()) - self.document.setHtml(text) + div = self._addElement(u'div', parent=html_data.body, + classId=u'customNotes') + self._addElement(u'span', translate('OpenLP.ServiceManager', + 'Custom Service Notes: '), div, classId=u'customNotesTitle') + self._addElement(u'span', self.footerTextEdit.toPlainText(), div, + classId=u'customNotesText') + self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() + def _addPreviewItem(self, body, item, index): + div = self._addElement(u'div', classId=u'item', parent=body) + # Add the title of the service item. + item_title = self._addElement(u'h2', parent=div, classId=u'itemTitle') + self._addElement(u'img', parent=item_title, + attribute=(u'src', item.icon)) + self._addElement(u'span', u' ' + item.get_display_title(), + item_title) + if self.slideTextCheckBox.isChecked(): + # Add the text of the service item. + if item.is_text(): + verse_def = None + for slide in item.get_frames(): + if not verse_def or verse_def != slide[u'verseTag']: + text_div = self._addElement(u'div', parent=div, + classId=u'itemText') + else: + self._addElement(u'br', parent=text_div) + self._addElement(u'span', slide[u'html'], text_div) + verse_def = slide[u'verseTag'] + # Break the page before the div element. + if index != 0 and self.pageBreakAfterText.isChecked(): + div.set(u'class', u'item newPage') + # Add the image names of the service item. + elif item.is_image(): + ol = self._addElement(u'ol', parent=div, classId=u'imageList') + for slide in range(len(item.get_frames())): + self._addElement(u'li', item.get_frame_title(slide), ol) + # add footer + foot_text = item.foot_text + foot_text = foot_text.partition(u'
')[2] + if foot_text: + foot = self._addElement(u'div', foot_text, parent=div, + classId=u'itemFooter') + # Add service items' notes. + if self.notesCheckBox.isChecked(): + if item.notes: + p = self._addElement(u'div', classId=u'itemNotes', parent=div) + self._addElement(u'span', + translate('OpenLP.ServiceManager', 'Notes: '), p, + classId=u'itemNotesTitle') + notes = self._addElement(u'span', + item.notes.replace(u'\n', u'
'), p, + classId=u'itemNotesText') + # Add play length of media files. + if item.is_media() and self.metaDataCheckBox.isChecked(): + tme = item.media_length + if item.end_time > 0: + tme = item.end_time - item.start_time + title = self._addElement(u'div', classId=u'media', parent=div) + self._addElement(u'span', translate('OpenLP.ServiceManager', + 'Playing time: '), title, classId=u'mediaTitle') + self._addElement(u'span', unicode(datetime.timedelta(seconds=tme)), + title, classId=u'mediaText') + + def _addElement(self, tag, text=None, parent=None, classId=None, + attribute=None): + """ + Creates a html element. If ``text`` is given, the element's text will + set and if a ``parent`` is given, the element is appended. + + ``tag`` + The html tag, e. g. ``u'span'``. Defaults to ``None``. + + ``text`` + The text for the tag. Defaults to ``None``. + + ``parent`` + The parent element. Defaults to ``None``. + + ``classId`` + Value for the class attribute + + ``attribute`` + Tuple name/value pair to add as an optional attribute + """ + if text is not None: + element = html.fragment_fromstring(unicode(text), create_parent=tag) + else: + element = html.Element(tag) + if parent is not None: + parent.append(element) + if classId is not None: + element.set(u'class', classId) + if attribute is not None: + element.set(attribute[0], attribute[1]) + return element + def paintRequested(self, printer): """ Paint the preview of the *self.document*. @@ -184,8 +324,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Copies the display text to the clipboard as plain text """ - self.mainWindow.clipboard.setText( - self.document.toPlainText()) + self.mainWindow.clipboard.setText(self.document.toPlainText()) def copyHtmlText(self): """ @@ -228,9 +367,16 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): Called when html copy check box is selected. """ if value == QtCore.Qt.Checked: - self.copyTextButton.setText(UiStrings.CopyToHtml) + self.copyTextButton.setText(UiStrings().CopyToHtml) else: - self.copyTextButton.setText(UiStrings.CopyToText) + self.copyTextButton.setText(UiStrings().CopyToText) + + def onSlideTextCheckBoxChanged(self, state): + """ + Disable or enable the ``pageBreakAfterText`` checkbox as it should only + be enabled, when the ``slideTextCheckBox`` is enabled. + """ + self.pageBreakAfterText.setDisabled(state == QtCore.Qt.Unchecked) def saveOptions(self): """ @@ -241,6 +387,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.beginGroup(u'advanced') settings.setValue(u'print slide text', QtCore.QVariant(self.slideTextCheckBox.isChecked())) + settings.setValue(u'add page break', + QtCore.QVariant(self.pageBreakAfterText.isChecked())) settings.setValue(u'print file meta data', QtCore.QVariant(self.metaDataCheckBox.isChecked())) settings.setValue(u'print notes', diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 15dbd9883..5b81c8be8 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -38,9 +39,16 @@ log = logging.getLogger(__name__) class ScreenList(object): """ - Wrapper to handle the parameters of the display screen + Wrapper to handle the parameters of the display screen. + + To get access to the screen list call ``ScreenList.get_instance()``. """ log.info(u'Screen loaded') + instance = None + + @staticmethod + def get_instance(): + return ScreenList.instance def __init__(self, desktop): """ @@ -49,17 +57,15 @@ class ScreenList(object): ``desktop`` A ``QDesktopWidget`` object. """ + ScreenList.instance = self self.desktop = desktop self.preview = None self.current = None self.override = None self.screen_list = [] self.display_count = 0 - # actual display number - self.current_display = 0 - # save config display number - self.monitor_number = 0 self.screen_count_changed() + self._load_screen_settings() QtCore.QObject.connect(desktop, QtCore.SIGNAL(u'resized(int)'), self.screen_resolution_changed) QtCore.QObject.connect(desktop, @@ -73,7 +79,7 @@ class ScreenList(object): ``number`` The number of the screen, which size has changed. """ - log.info(u'screenResolutionChanged %d' % number) + log.info(u'screen_resolution_changed %d' % number) for screen in self.screen_list: if number == screen[u'number']: newScreen = { @@ -98,6 +104,9 @@ class ScreenList(object): ``changed_screen`` The screen's number which has been (un)plugged. """ + # Do not log at start up. + if changed_screen != -1: + log.info(u'screen_count_changed %d' % self.desktop.numScreens()) # Remove unplugged screens. for screen in copy.deepcopy(self.screen_list): if screen[u'number'] == self.desktop.numScreens(): @@ -110,8 +119,7 @@ class ScreenList(object): u'size': self.desktop.screenGeometry(number), u'primary': (self.desktop.primaryScreen() == number) }) - # We do not want to send this message, when the method is called the - # first time. + # We do not want to send this message at start up. if changed_screen != -1: # Reload setting tabs to apply possible changes. Receiver.send_message(u'config_screen_changed') @@ -150,6 +158,7 @@ class ScreenList(object): screen[u'number'], screen[u'size']) if screen[u'primary']: self.current = screen + self.override = copy.deepcopy(self.current) self.screen_list.append(screen) self.display_count += 1 @@ -189,13 +198,10 @@ class ScreenList(object): log.debug(u'set_current_display %s', number) if number + 1 > self.display_count: self.current = self.screen_list[0] - self.override = copy.deepcopy(self.current) - self.current_display = 0 else: self.current = self.screen_list[number] - self.override = copy.deepcopy(self.current) self.preview = copy.deepcopy(self.current) - self.current_display = number + self.override = copy.deepcopy(self.current) if self.display_count == 1: self.preview = self.screen_list[0] @@ -214,4 +220,32 @@ class ScreenList(object): use the correct screen attributes. """ log.debug(u'reset_current_display') - self.set_current_display(self.current_display) + self.set_current_display(self.current[u'number']) + + def _load_screen_settings(self): + """ + Loads the screen size and the monitor number from the settings. + """ + settings = QtCore.QSettings() + settings.beginGroup(u'general') + self.set_current_display(settings.value(u'monitor', + QtCore.QVariant(self.display_count - 1)).toInt()[0]) + self.display = settings.value( + u'display on monitor', QtCore.QVariant(True)).toBool() + override_display = settings.value( + u'override position', QtCore.QVariant(False)).toBool() + x = settings.value(u'x position', + QtCore.QVariant(self.current[u'size'].x())).toInt()[0] + y = settings.value(u'y position', + QtCore.QVariant(self.current[u'size'].y())).toInt()[0] + width = settings.value(u'width', + QtCore.QVariant(self.current[u'size'].width())).toInt()[0] + height = settings.value(u'height', + QtCore.QVariant(self.current[u'size'].height())).toInt()[0] + self.override[u'size'] = QtCore.QRect(x, y, width, height) + self.override[u'primary'] = False + settings.endGroup() + if override_display: + self.set_override_display() + else: + self.reset_current_display() diff --git a/openlp/core/ui/serviceitemeditdialog.py b/openlp/core/ui/serviceitemeditdialog.py index 4e966a38b..d821430b2 100644 --- a/openlp/core/ui/serviceitemeditdialog.py +++ b/openlp/core/ui/serviceitemeditdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -34,6 +35,8 @@ class Ui_ServiceItemEditDialog(object): def setupUi(self, serviceItemEditDialog): serviceItemEditDialog.setObjectName(u'serviceItemEditDialog') self.dialogLayout = QtGui.QGridLayout(serviceItemEditDialog) + self.dialogLayout.setContentsMargins(8, 8, 8, 8) + self.dialogLayout.setSpacing(8) self.dialogLayout.setObjectName(u'dialogLayout') self.listWidget = QtGui.QListWidget(serviceItemEditDialog) self.listWidget.setAlternatingRowColors(True) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 400566099..974133c3d 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -78,7 +79,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): if not item: return row = self.listWidget.row(item) - self.itemList.remove(self.itemList[row]) + self.itemList.pop(row) self.loadData() if row == self.listWidget.count(): self.listWidget.setCurrentRow(row - 1) @@ -108,7 +109,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): return row = self.listWidget.row(item) temp = self.itemList[row] - self.itemList.remove(self.itemList[row]) + self.itemList.pop(row) if direction == u'up': row -= 1 else: diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 168ad8a8c..0ef45af12 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,31 +33,33 @@ log = logging.getLogger(__name__) from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ - Receiver, build_icon, ItemCapabilities, SettingsManager, translate +from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, \ + ItemCapabilities, SettingsManager, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ + context_menu_action, context_menu_separator, find_and_set_in_combo_box from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ split_filename +from openlp.core.utils.actions import ActionList, CategoryOrder class ServiceManagerList(QtGui.QTreeWidget): """ Set up key bindings and mouse behaviour for the service list """ - def __init__(self, mainwindow, parent=None, name=None): + def __init__(self, serviceManager, parent=None, name=None): QtGui.QTreeWidget.__init__(self, parent) - self.mainwindow = mainwindow + self.serviceManager = serviceManager def keyPressEvent(self, event): if isinstance(event, QtGui.QKeyEvent): # here accept the event and do something if event.key() == QtCore.Qt.Key_Up: - self.mainwindow.onMoveSelectionUp() + self.serviceManager.onMoveSelectionUp() event.accept() elif event.key() == QtCore.Qt.Key_Down: - self.mainwindow.onMoveSelectionDown() + self.serviceManager.onMoveSelectionDown() event.accept() event.ignore() else: @@ -71,6 +74,9 @@ class ServiceManagerList(QtGui.QTreeWidget): if event.buttons() != QtCore.Qt.LeftButton: event.ignore() return + if not self.selectedItems(): + event.ignore() + return drag = QtGui.QDrag(self) mimeData = QtCore.QMimeData() drag.setMimeData(mimeData) @@ -109,24 +115,24 @@ class ServiceManager(QtGui.QWidget): # Create the top toolbar self.toolbar = OpenLPToolbar(self) self.toolbar.addToolbarButton( - UiStrings.NewService, u':/general/general_new.png', - UiStrings.CreateService, self.onNewServiceClicked) + UiStrings().NewService, u':/general/general_new.png', + UiStrings().CreateService, self.onNewServiceClicked) self.toolbar.addToolbarButton( - UiStrings.OpenService, u':/general/general_open.png', - translate('OpenLP.ServiceManager', 'Load an existing service'), + UiStrings().OpenService, u':/general/general_open.png', + translate('OpenLP.ServiceManager', 'Load an existing service.'), self.onLoadServiceClicked) self.toolbar.addToolbarButton( - UiStrings.SaveService, u':/general/general_save.png', - translate('OpenLP.ServiceManager', 'Save this service'), + UiStrings().SaveService, u':/general/general_save.png', + translate('OpenLP.ServiceManager', 'Save this service.'), self.saveFile) self.toolbar.addSeparator() - self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings.Theme, self) + self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) self.themeLabel.setMargin(3) self.themeLabel.setObjectName(u'themeLabel') self.toolbar.addToolbarWidget(u'ThemeLabel', self.themeLabel) self.themeComboBox = QtGui.QComboBox(self.toolbar) self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager', - 'Select a theme for the service')) + 'Select a theme for the service.')) self.themeComboBox.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToMinimumContentsLength) self.themeComboBox.setSizePolicy( @@ -164,38 +170,57 @@ class ServiceManager(QtGui.QWidget): u':/services/service_top.png', translate('OpenLP.ServiceManager', 'Move item to the top of the service.'), - self.onServiceTop, shortcut=QtCore.Qt.Key_Home) + self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) + self.serviceManagerList.moveTop.setObjectName(u'moveTop') + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings().Service, CategoryOrder.standardToolbar) + action_list.add_action( + self.serviceManagerList.moveTop, UiStrings().Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &up'), u':/services/service_up.png', translate('OpenLP.ServiceManager', 'Move item up one position in the service.'), - self.onServiceUp, shortcut=QtCore.Qt.Key_PageUp) + self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) + self.serviceManagerList.moveUp.setObjectName(u'moveUp') + action_list.add_action( + self.serviceManagerList.moveUp, UiStrings().Service) self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', translate('OpenLP.ServiceManager', 'Move item down one position in the service.'), - self.onServiceDown, shortcut=QtCore.Qt.Key_PageDown) + self.onServiceDown, shortcuts=[QtCore.Qt.Key_PageDown]) + self.serviceManagerList.moveDown.setObjectName(u'moveDown') + action_list.add_action( + self.serviceManagerList.moveDown, UiStrings().Service) self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move to &bottom'), u':/services/service_bottom.png', translate('OpenLP.ServiceManager', 'Move item to the end of the service.'), - self.onServiceEnd, shortcut=QtCore.Qt.Key_End) + self.onServiceEnd, shortcuts=[QtCore.Qt.Key_End]) + self.serviceManagerList.moveBottom.setObjectName(u'moveBottom') + action_list.add_action( + self.serviceManagerList.moveBottom, UiStrings().Service) self.serviceManagerList.down = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), None, translate('OpenLP.ServiceManager', 'Moves the selection down the window.'), - self.onMoveSelectionDown, shortcut=QtCore.Qt.Key_Down) + self.onMoveSelectionDown, shortcuts=[QtCore.Qt.Key_Down]) + self.serviceManagerList.down.setObjectName(u'down') + action_list.add_action(self.serviceManagerList.down) self.serviceManagerList.down.setVisible(False) self.serviceManagerList.up = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move up'), None, translate('OpenLP.ServiceManager', 'Moves the selection up the window.'), - self.onMoveSelectionUp, shortcut=QtCore.Qt.Key_Up) + self.onMoveSelectionUp, shortcuts=[QtCore.Qt.Key_Up]) + self.serviceManagerList.up.setObjectName(u'up') + action_list.add_action(self.serviceManagerList.up) self.serviceManagerList.up.setVisible(False) self.orderToolbar.addSeparator() self.serviceManagerList.delete = self.orderToolbar.addToolbarButton( @@ -210,22 +235,29 @@ class ServiceManager(QtGui.QWidget): u':/services/service_expand_all.png', translate('OpenLP.ServiceManager', 'Expand all the service items.'), - self.onExpandAll, shortcut=QtCore.Qt.Key_Plus) + self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) + self.serviceManagerList.expand.setObjectName(u'expand') + action_list.add_action( + self.serviceManagerList.expand, UiStrings().Service) self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', translate('OpenLP.ServiceManager', 'Collapse all the service items.'), - self.onCollapseAll, shortcut=QtCore.Qt.Key_Minus) + self.onCollapseAll, shortcuts=[QtCore.Qt.Key_Minus]) + self.serviceManagerList.collapse.setObjectName(u'collapse') + action_list.add_action( + self.serviceManagerList.collapse, UiStrings().Service) self.orderToolbar.addSeparator() self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Go Live'), u':/general/general_live.png', translate('OpenLP.ServiceManager', - 'Send the selected item to Live.'), - self.makeLive, shortcut=QtCore.Qt.Key_Enter, - alternate=QtCore.Qt.Key_Return) - self.orderToolbar.setObjectName(u'orderToolbar') + 'Send the selected item to Live.'), self.makeLive, + shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]) + self.serviceManagerList.makeLive.setObjectName(u'orderToolbar') + action_list.add_action( + self.serviceManagerList.makeLive, UiStrings().Service) self.layout.addWidget(self.orderToolbar) # Connect up our signals and slots QtCore.QObject.connect(self.themeComboBox, @@ -246,8 +278,6 @@ class ServiceManager(QtGui.QWidget): QtCore.SIGNAL(u'servicemanager_previous_item'), self.previousItem) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_set_item'), self.onSetItem) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'servicemanager_list_request'), self.listRequest) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.configUpdated) QtCore.QObject.connect(Receiver.get_receiver(), @@ -272,35 +302,37 @@ class ServiceManager(QtGui.QWidget): self.addToAction.setIcon(build_icon(u':/general/general_edit.png')) # build the context menu self.menu = QtGui.QMenu() - self.editAction = self.menu.addAction( - translate('OpenLP.ServiceManager', '&Edit Item')) - self.editAction.setIcon(build_icon(u':/general/general_edit.png')) - self.maintainAction = self.menu.addAction( - translate('OpenLP.ServiceManager', '&Reorder Item')) - self.maintainAction.setIcon(build_icon(u':/general/general_edit.png')) - self.notesAction = self.menu.addAction( - translate('OpenLP.ServiceManager', '&Notes')) - self.notesAction.setIcon(build_icon(u':/services/service_notes.png')) - self.timeAction = self.menu.addAction( - translate('OpenLP.ServiceManager', '&Start Time')) - self.timeAction.setIcon(build_icon(u':/media/media_time.png')) - self.deleteAction = self.menu.addAction( - translate('OpenLP.ServiceManager', '&Delete From Service')) - self.deleteAction.setIcon(build_icon(u':/general/general_delete.png')) - self.sep1 = self.menu.addAction(u'') - self.sep1.setSeparator(True) - self.previewAction = self.menu.addAction( - translate('OpenLP.ServiceManager', 'Show &Preview')) - self.previewAction.setIcon(build_icon(u':/general/general_preview.png')) - self.liveAction = self.menu.addAction( - translate('OpenLP.ServiceManager', 'Show &Live')) - self.liveAction.setIcon(build_icon(u':/general/general_live.png')) - self.sep2 = self.menu.addAction(u'') - self.sep2.setSeparator(True) + self.editAction = context_menu_action( + self.menu, u':/general/general_edit.png', + translate('OpenLP.ServiceManager', '&Edit Item'), self.remoteEdit) + self.maintainAction = context_menu_action( + self.menu, u':/general/general_edit.png', + translate('OpenLP.ServiceManager', '&Reorder Item'), + self.onServiceItemEditForm) + self.notesAction = context_menu_action( + self.menu, u':/services/service_notes.png', + translate('OpenLP.ServiceManager', '&Notes'), + self.onServiceItemNoteForm) + self.timeAction = context_menu_action( + self.menu, u':/media/media_time.png', + translate('OpenLP.ServiceManager', '&Start Time'), + self.onStartTimeForm) + self.deleteAction = context_menu_action( + self.menu, u':/general/general_delete.png', + translate('OpenLP.ServiceManager', '&Delete From Service'), + self.onDeleteFromService) + context_menu_separator(self.menu) + self.previewAction = context_menu_action( + self.menu, u':/general/general_preview.png', + translate('OpenLP.ServiceManager', 'Show &Preview'), + self.makePreview) + self.liveAction = context_menu_action( + self.menu, u':/general/general_live.png', + translate('OpenLP.ServiceManager', 'Show &Live'), self.makeLive) + context_menu_separator(self.menu) self.themeMenu = QtGui.QMenu( translate('OpenLP.ServiceManager', '&Change Item Theme')) self.menu.addMenu(self.themeMenu) - self.setServiceHotkeys() self.serviceManagerList.addActions( [self.serviceManagerList.moveDown, self.serviceManagerList.moveUp, @@ -314,26 +346,14 @@ class ServiceManager(QtGui.QWidget): ]) self.configUpdated() - def setServiceHotkeys(self): - actionList = self.mainwindow.actionList - actionList.add_action(self.serviceManagerList.moveDown, u'Service') - actionList.add_action(self.serviceManagerList.moveUp, u'Service') - actionList.add_action(self.serviceManagerList.moveTop, u'Service') - actionList.add_action(self.serviceManagerList.moveBottom, u'Service') - actionList.add_action(self.serviceManagerList.makeLive, u'Service') - actionList.add_action(self.serviceManagerList.up, u'Service') - actionList.add_action(self.serviceManagerList.down, u'Service') - actionList.add_action(self.serviceManagerList.expand, u'Service') - actionList.add_action(self.serviceManagerList.collapse, u'Service') - - 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' + serviceFile = self.shortFileName() or translate( + 'OpenLP.ServiceManager', 'Untitled Service') self.mainwindow.setServiceModified(modified, serviceFile) def isModified(self): @@ -388,20 +408,33 @@ class ServiceManager(QtGui.QWidget): return False self.newFile() - def onLoadServiceClicked(self): + def onLoadServiceClicked(self, loadFile=None): + """ + Loads the service file and saves the existing one it there is one + unchanged + + ``loadFile`` + The service file to the loaded. Will be None is from menu so + selection will be required. + """ if self.isModified(): result = self.saveModifiedService() if result == QtGui.QMessageBox.Cancel: return False elif result == QtGui.QMessageBox.Save: self.saveFile() - fileName = unicode(QtGui.QFileDialog.getOpenFileName(self.mainwindow, - translate('OpenLP.ServiceManager', 'Open File'), - SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), - translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) - if not fileName: - return False + if not loadFile: + fileName = unicode(QtGui.QFileDialog.getOpenFileName( + self.mainwindow, + translate('OpenLP.ServiceManager', 'Open File'), + SettingsManager.get_last_dir( + self.mainwindow.serviceSettingsSection), + translate('OpenLP.ServiceManager', + 'OpenLP Service Files (*.osz)'))) + if not fileName: + return False + else: + fileName = loadFile SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, split_filename(fileName)[0]) self.loadFile(fileName) @@ -445,11 +478,16 @@ class ServiceManager(QtGui.QWidget): service = [] write_list = [] total_size = 0 + Receiver.send_message(u'cursor_busy') + # Number of items + 1 to zip it + self.mainwindow.displayProgressBar(len(self.serviceItems) + 1) for item in self.serviceItems: + self.mainwindow.incrementProgressBar() service.append({u'serviceitem': item[u'service_item'].get_service_repr()}) if not item[u'service_item'].uses_file(): continue + skipMissing = False for frame in item[u'service_item'].get_frames(): if item[u'service_item'].is_image(): path_from = frame[u'path'] @@ -458,25 +496,29 @@ class ServiceManager(QtGui.QWidget): # Only write a file once if path_from in write_list: continue - file_size = os.path.getsize(path_from) - size_limit = 52428800 # 50MiB - #if file_size > size_limit: - # # File exeeds size_limit bytes, ask user - # message = unicode(translate('OpenLP.ServiceManager', - # 'Do you want to include \n%.1f MB file "%s"\n' - # 'into the service file?\nThis may take some time.\n\n' - # 'Please note that you need to\ntake care of that file' - # ' yourself,\nif you leave it out.')) % \ - # (file_size/1048576, os.path.split(path_from)[1]) - # ans = QtGui.QMessageBox.question(self.mainwindow, - # translate('OpenLP.ServiceManager', 'Including Large ' - # 'File'), message, QtGui.QMessageBox.StandardButtons( - # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), - # QtGui.QMessageBox.Ok) - # if ans == QtGui.QMessageBox.Cancel: - # continue - write_list.append(path_from) - total_size += file_size + if not os.path.exists(path_from): + if not skipMissing: + Receiver.send_message(u'cursor_normal') + title = unicode(translate('OpenLP.ServiceManager', + 'Service File Missing')) + message = unicode(translate('OpenLP.ServiceManager', + 'File missing from service\n\n %s \n\n' + 'Continue saving?' % path_from )) + answer = QtGui.QMessageBox.critical(self, title, + message, + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | + QtGui.QMessageBox.YesToAll)) + if answer == QtGui.QMessageBox.No: + self.mainwindow.finishedProgressBar() + return False + if answer == QtGui.QMessageBox.YesToAll: + skipMissing = True + Receiver.send_message(u'cursor_busy') + else: + file_size = os.path.getsize(path_from) + write_list.append(path_from) + total_size += file_size log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % total_size) service_content = cPickle.dumps(service) @@ -486,6 +528,7 @@ class ServiceManager(QtGui.QWidget): log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) zip = None success = True + self.mainwindow.incrementProgressBar() try: zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) @@ -501,6 +544,8 @@ class ServiceManager(QtGui.QWidget): finally: if zip: zip.close() + self.mainwindow.finishedProgressBar() + Receiver.send_message(u'cursor_normal') if success: self.mainwindow.addRecentFile(path_file_name) self.setModified(False) @@ -514,7 +559,7 @@ class ServiceManager(QtGui.QWidget): save the file. """ fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, - UiStrings.SaveService, + UiStrings().SaveService, SettingsManager.get_last_dir( self.mainwindow.serviceSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) @@ -561,13 +606,15 @@ class ServiceManager(QtGui.QWidget): items = cPickle.load(fileTo) fileTo.close() self.newFile() + self.mainwindow.displayProgressBar(len(items)) for item in items: + self.mainwindow.incrementProgressBar() serviceItem = ServiceItem() serviceItem.from_service = True - serviceItem.render_manager = self.mainwindow.renderManager + serviceItem.renderer = self.mainwindow.renderer serviceItem.set_from_service(item, self.servicePath) self.validateItem(serviceItem) - self.addServiceItem(serviceItem) + self.addServiceItem(serviceItem, repaint=False) if serviceItem.is_capable(ItemCapabilities.OnLoadUpdate): Receiver.send_message(u'%s_service_load' % serviceItem.name.lower(), serviceItem) @@ -577,7 +624,6 @@ class ServiceManager(QtGui.QWidget): self.setModified(False) QtCore.QSettings().setValue( 'service/last file', QtCore.QVariant(fileName)) - Receiver.send_message(u'cursor_normal') else: critical_error_message_box( message=translate('OpenLP.ServiceManager', @@ -588,11 +634,29 @@ class ServiceManager(QtGui.QWidget): message=translate('OpenLP.ServiceManager', 'File could not be opened because it is corrupt.')) log.exception(u'Problem loading service file %s' % fileName) + except zipfile.BadZipfile: + if os.path.getsize(fileName) == 0: + log.exception(u'Service file is zero sized: %s' % fileName) + QtGui.QMessageBox.information(self, + translate('OpenLP.ServiceManager', 'Empty File'), + translate('OpenLP.ServiceManager', 'This service file ' + 'does not contain any data.')) + else: + log.exception(u'Service file is cannot be extracted as zip: ' + u'%s' % fileName) + QtGui.QMessageBox.information(self, + translate('OpenLP.ServiceManager', 'Corrupt File'), + translate('OpenLP.ServiceManager', 'This file is either ' + 'corrupt or it is not an OpenLP 2.0 service file.')) + return finally: if fileTo: fileTo.close() if zip: zip.close() + self.mainwindow.finishedProgressBar() + Receiver.send_message(u'cursor_normal') + self.repaintServiceList(-1, -1) def loadLastFile(self): """ @@ -630,23 +694,19 @@ class ServiceManager(QtGui.QWidget): .is_capable(ItemCapabilities.AllowsVariableStartTime): self.timeAction.setVisible(True) self.themeMenu.menuAction().setVisible(False) - if serviceItem[u'service_item'].is_text(): + # Set up the theme menu. + if serviceItem[u'service_item'].is_text() and \ + self.mainwindow.renderer.theme_level == ThemeLevel.Song: self.themeMenu.menuAction().setVisible(True) - action = self.menu.exec_(self.serviceManagerList.mapToGlobal(point)) - if action == self.editAction: - self.remoteEdit() - if action == self.maintainAction: - self.onServiceItemEditForm() - if action == self.deleteAction: - self.onDeleteFromService() - if action == self.notesAction: - self.onServiceItemNoteForm() - if action == self.timeAction: - self.onStartTimeForm() - if action == self.previewAction: - self.makePreview() - if action == self.liveAction: - self.makeLive() + # The service item does not have a theme, check the "Default". + if serviceItem[u'service_item'].theme is None: + themeAction = self.themeMenu.defaultAction() + else: + themeAction = self.themeMenu.findChild( + QtGui.QAction, serviceItem[u'service_item'].theme) + if themeAction is not None: + themeAction.setChecked(True) + self.menu.exec_(self.serviceManagerList.mapToGlobal(point)) def onServiceItemNoteForm(self): item = self.findServiceItem()[0] @@ -656,6 +716,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems[item][u'service_item'].notes = \ self.serviceNoteForm.textEdit.toPlainText() self.repaintServiceList(item, -1) + self.setModified() def onStartTimeForm(self): item = self.findServiceItem()[0] @@ -676,9 +737,9 @@ class ServiceManager(QtGui.QWidget): Called by the SlideController to request a preview item be made live and allows the next preview to be updated if relevent. """ - id, row = message.split(u':') + uuid, row = message.split(u':') for sitem in self.serviceItems: - if sitem[u'service_item']._uuid == id: + if sitem[u'service_item']._uuid == uuid: item = self.serviceManagerList.topLevelItem(sitem[u'order'] - 1) self.serviceManagerList.setCurrentItem(item) self.makeLive(int(row)) @@ -725,7 +786,7 @@ class ServiceManager(QtGui.QWidget): """ Called by a signal to select a specific item. """ - self.setItem(int(message[0])) + self.setItem(int(message)) def setItem(self, index): """ @@ -738,50 +799,25 @@ class ServiceManager(QtGui.QWidget): def onMoveSelectionUp(self): """ - Moves the selection up the window. Called by the up arrow. + Moves the cursor selection up the window. + Called by the up arrow. """ - serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList) - tempItem = None - setLastItem = False - while serviceIterator.value(): - if serviceIterator.value().isSelected() and tempItem is None: - setLastItem = True - serviceIterator.value().setSelected(False) - if serviceIterator.value().isSelected(): - # We are on the first record - if tempItem: - tempItem.setSelected(True) - serviceIterator.value().setSelected(False) - else: - tempItem = serviceIterator.value() - lastItem = serviceIterator.value() - serviceIterator += 1 - # Top Item was selected so set the last one - if setLastItem: - lastItem.setSelected(True) - self.setModified(True) + item = self.serviceManagerList.currentItem() + itemBefore = self.serviceManagerList.itemAbove(item) + if itemBefore is None: + return + self.serviceManagerList.setCurrentItem(itemBefore) def onMoveSelectionDown(self): """ - Moves the selection down the window. Called by the down arrow. + Moves the cursor selection down the window. + Called by the down arrow. """ - serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList) - firstItem = None - setSelected = False - while serviceIterator.value(): - if not firstItem: - firstItem = serviceIterator.value() - if setSelected: - setSelected = False - serviceIterator.value().setSelected(True) - elif serviceIterator.value() and \ - serviceIterator.value().isSelected(): - serviceIterator.value().setSelected(False) - setSelected = True - serviceIterator += 1 - if setSelected: - firstItem.setSelected(True) - self.setModified(True) + item = self.serviceManagerList.currentItem() + itemAfter = self.serviceManagerList.itemBelow(item) + if itemAfter is None: + return + self.serviceManagerList.setCurrentItem(itemAfter) def onCollapseAll(self): """ @@ -789,7 +825,7 @@ class ServiceManager(QtGui.QWidget): """ for item in self.serviceItems: item[u'expanded'] = False - self.regenerateServiceItems() + self.serviceManagerList.collapseAll() def collapsed(self, item): """ @@ -797,7 +833,7 @@ class ServiceManager(QtGui.QWidget): correct state. """ pos = item.data(0, QtCore.Qt.UserRole).toInt()[0] - self.serviceItems[pos -1 ][u'expanded'] = False + self.serviceItems[pos - 1][u'expanded'] = False def onExpandAll(self): """ @@ -805,7 +841,7 @@ class ServiceManager(QtGui.QWidget): """ for item in self.serviceItems: item[u'expanded'] = True - self.regenerateServiceItems() + self.serviceManagerList.expandAll() def expanded(self, item): """ @@ -813,19 +849,19 @@ class ServiceManager(QtGui.QWidget): correct state. """ pos = item.data(0, QtCore.Qt.UserRole).toInt()[0] - self.serviceItems[pos -1 ][u'expanded'] = True + self.serviceItems[pos - 1][u'expanded'] = True def onServiceTop(self): """ Move the current ServiceItem to the top of the list. """ item, child = self.findServiceItem() - if item < len(self.serviceItems) and item is not -1: + if item < len(self.serviceItems) and item != -1: temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(0, temp) self.repaintServiceList(0, child) - self.setModified(True) + self.setModified() def onServiceUp(self): """ @@ -837,31 +873,31 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item - 1, temp) self.repaintServiceList(item - 1, child) - self.setModified(True) + self.setModified() def onServiceDown(self): """ Move the current ServiceItem one position down in the list. """ item, child = self.findServiceItem() - if item < len(self.serviceItems) and item is not -1: + if item < len(self.serviceItems) and item != -1: temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item + 1, temp) self.repaintServiceList(item + 1, child) - self.setModified(True) + self.setModified() def onServiceEnd(self): """ Move the current ServiceItem to the bottom of the list. """ item, child = self.findServiceItem() - if item < len(self.serviceItems) and item is not -1: + if item < len(self.serviceItems) and item != -1: temp = self.serviceItems[item] self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(len(self.serviceItems), temp) self.repaintServiceList(len(self.serviceItems) - 1, child) - self.setModified(True) + self.setModified() def onDeleteFromService(self): """ @@ -871,7 +907,7 @@ class ServiceManager(QtGui.QWidget): if item != -1: self.serviceItems.remove(self.serviceItems[item]) self.repaintServiceList(item - 1, -1) - self.setModified(True) + self.setModified() def repaintServiceList(self, serviceItem, serviceItemChild): """ @@ -913,20 +949,28 @@ class ServiceManager(QtGui.QWidget): treewidgetitem.setIcon(0, build_icon(u':/general/general_delete.png')) treewidgetitem.setText(0, serviceitem.get_display_title()) - treewidgetitem.setToolTip(0, serviceitem.notes) + tips = [] + if serviceitem.theme and serviceitem.theme != -1: + tips.append(u'%s: %s' % + (unicode(translate('OpenLP.ServiceManager', 'Slide theme')), + serviceitem.theme)) + if serviceitem.notes: + tips.append(u'%s: %s' % + (unicode(translate('OpenLP.ServiceManager', 'Notes')), + unicode(serviceitem.notes))) + if item[u'service_item'] \ + .is_capable(ItemCapabilities.AllowsVariableStartTime): + tips.append(item[u'service_item'].get_media_time()) + treewidgetitem.setToolTip(0, u'
'.join(tips)) treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) + treewidgetitem.setSelected(item[u'selected']) # Add the children to their parent treewidgetitem. for count, frame in enumerate(serviceitem.get_frames()): child = QtGui.QTreeWidgetItem(treewidgetitem) text = frame[u'title'].replace(u'\n', u' ') child.setText(0, text[:40]) child.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(count)) - if item[u'service_item'] \ - .is_capable(ItemCapabilities.AllowsVariableStartTime): - tip = item[u'service_item'].get_media_time() - if tip: - child.setToolTip(0, tip) if serviceItem == itemcount: if item[u'expanded'] and serviceItemChild == count: self.serviceManagerList.setCurrentItem(child) @@ -958,7 +1002,7 @@ class ServiceManager(QtGui.QWidget): """ log.debug(u'onThemeComboBoxSelected') self.service_theme = unicode(self.themeComboBox.currentText()) - self.mainwindow.renderManager.set_service_theme(self.service_theme) + self.mainwindow.renderer.set_service_theme(self.service_theme) QtCore.QSettings().setValue( self.mainwindow.serviceSettingsSection + u'/service theme', QtCore.QVariant(self.service_theme)) @@ -970,7 +1014,7 @@ class ServiceManager(QtGui.QWidget): sure the theme combo box is in the correct state. """ log.debug(u'themeChange') - if self.mainwindow.renderManager.theme_level == ThemeLevel.Global: + if self.mainwindow.renderer.theme_level == ThemeLevel.Global: self.toolbar.actions[u'ThemeLabel'].setVisible(False) self.toolbar.actions[u'ThemeWidget'].setVisible(False) else: @@ -985,18 +1029,37 @@ class ServiceManager(QtGui.QWidget): Receiver.send_message(u'cursor_busy') log.debug(u'regenerateServiceItems') # force reset of renderer as theme data has changed - self.mainwindow.renderManager.themedata = None + self.mainwindow.renderer.themedata = None if self.serviceItems: + for item in self.serviceItems: + item[u'selected'] = False + serviceIterator = QtGui.QTreeWidgetItemIterator( + self.serviceManagerList) + selectedItem = None + while serviceIterator.value(): + if serviceIterator.value().isSelected(): + selectedItem = serviceIterator.value() + serviceIterator += 1 + if selectedItem is not None: + if selectedItem.parent() is None: + pos = selectedItem.data(0, QtCore.Qt.UserRole).toInt()[0] + else: + pos = selectedItem.parent().data(0, QtCore.Qt.UserRole). \ + toInt()[0] + self.serviceItems[pos - 1][u'selected'] = True tempServiceItems = self.serviceItems self.serviceManagerList.clear() self.serviceItems = [] self.isNew = True for item in tempServiceItems: self.addServiceItem( - item[u'service_item'], False, expand=item[u'expanded']) + item[u'service_item'], False, expand=item[u'expanded'], + repaint=False, selected=item[u'selected']) # Set to False as items may have changed rendering # does not impact the saved song so True may also be valid - self.setModified(True) + self.setModified() + # Repaint it once only at the end + self.repaintServiceList(-1, -1) Receiver.send_message(u'cursor_normal') def serviceItemUpdate(self, message): @@ -1006,26 +1069,27 @@ class ServiceManager(QtGui.QWidget): editId, uuid = message.split(u':') for item in self.serviceItems: if item[u'service_item']._uuid == uuid: - item[u'service_item'].edit_id = editId - self.setModified(True) + item[u'service_item'].edit_id = int(editId) + self.setModified() def replaceServiceItem(self, newItem): """ Using the service item passed replace the one with the same edit id if found. """ - newItem.render() for itemcount, item in enumerate(self.serviceItems): if item[u'service_item'].edit_id == newItem.edit_id and \ item[u'service_item'].name == newItem.name: + newItem.render() newItem.merge(item[u'service_item']) item[u'service_item'] = newItem self.repaintServiceList(itemcount + 1, 0) self.mainwindow.liveController.replaceServiceManagerItem( newItem) - self.setModified(True) + self.setModified() - def addServiceItem(self, item, rebuild=False, expand=None, replace=False): + def addServiceItem(self, item, rebuild=False, expand=None, replace=False, + repaint=True, selected=False): """ Add a Service item to the list @@ -1053,27 +1117,29 @@ class ServiceManager(QtGui.QWidget): for inditem in item: self.serviceItems.append({u'service_item': inditem, u'order': len(self.serviceItems) + 1, - u'expanded': expand}) + u'expanded': expand, u'selected': selected}) else: self.serviceItems.append({u'service_item': item, u'order': len(self.serviceItems) + 1, - u'expanded': expand}) - self.repaintServiceList(len(self.serviceItems) - 1, -1) + u'expanded': expand, u'selected': selected}) + if repaint: + self.repaintServiceList(len(self.serviceItems) - 1, -1) else: self.serviceItems.insert(self.dropPosition, {u'service_item': item, u'order': self.dropPosition, - u'expanded': expand}) + u'expanded': expand, u'selected': selected}) self.repaintServiceList(self.dropPosition, -1) # if rebuilding list make sure live is fixed. if rebuild: self.mainwindow.liveController.replaceServiceManagerItem(item) self.dropPosition = 0 - self.setModified(True) + self.setModified() def makePreview(self): """ Send the current item to the Preview slide controller """ + Receiver.send_message(u'cursor_busy') item, child = self.findServiceItem() if self.serviceItems[item][u'service_item'].is_valid: self.mainwindow.previewController.addServiceManagerItem( @@ -1083,6 +1149,7 @@ class ServiceManager(QtGui.QWidget): translate('OpenLP.ServiceManager', 'Missing Display Handler'), translate('OpenLP.ServiceManager', 'Your item cannot be ' 'displayed as there is no handler to display it')) + Receiver.send_message(u'cursor_normal') def getServiceItem(self): """ @@ -1110,8 +1177,12 @@ class ServiceManager(QtGui.QWidget): -1 is passed if the value is not set """ item, child = self.findServiceItem() + # No items in service + if item == -1: + return if row != -1: child = row + Receiver.send_message(u'cursor_busy') if self.serviceItems[item][u'service_item'].is_valid: self.mainwindow.liveController.addServiceManagerItem( self.serviceItems[item][u'service_item'], child) @@ -1131,6 +1202,7 @@ class ServiceManager(QtGui.QWidget): translate('OpenLP.ServiceManager', 'Your item cannot be ' 'displayed as the plugin required to display it is missing ' 'or inactive')) + Receiver.send_message(u'cursor_normal') def remoteEdit(self): """ @@ -1185,7 +1257,14 @@ class ServiceManager(QtGui.QWidget): Handle of the event pint passed """ link = event.mimeData() - if link.hasText(): + if event.mimeData().hasUrls(): + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + for url in event.mimeData().urls(): + filename = unicode(url.toLocalFile()) + if filename.endswith(u'.osz'): + self.onLoadServiceClicked(filename) + elif event.mimeData().hasText(): plugin = unicode(event.mimeData().text()) item = self.serviceManagerList.itemAt(event.pos()) # ServiceManager started the drag and drop @@ -1202,7 +1281,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(serviceItem) self.serviceItems.insert(endpos, serviceItem) self.repaintServiceList(endpos, child) - self.setModified(True) + self.setModified() else: # we are not over anything so drop replace = False @@ -1238,25 +1317,35 @@ class ServiceManager(QtGui.QWidget): self.themeComboBox.clear() self.themeMenu.clear() self.themeComboBox.addItem(u'') + themeGroup = QtGui.QActionGroup(self.themeMenu) + themeGroup.setExclusive(True) + themeGroup.setObjectName(u'themeGroup') + # Create a "Default" theme, which allows the user to reset the item's + # theme to the service theme or global theme. + defaultTheme = context_menu_action(self.themeMenu, None, + UiStrings().Default, self.onThemeChangeAction) + defaultTheme.setCheckable(True) + self.themeMenu.setDefaultAction(defaultTheme) + themeGroup.addAction(defaultTheme) + context_menu_separator(self.themeMenu) for theme in theme_list: self.themeComboBox.addItem(theme) - action = context_menu_action(self.serviceManagerList, None, theme, + themeAction = context_menu_action(self.themeMenu, None, theme, self.onThemeChangeAction) - self.themeMenu.addAction(action) - index = self.themeComboBox.findText(self.service_theme, - QtCore.Qt.MatchExactly) - # Not Found - if index == -1: - index = 0 - self.service_theme = u'' - self.themeComboBox.setCurrentIndex(index) - self.mainwindow.renderManager.set_service_theme(self.service_theme) + themeAction.setObjectName(theme) + themeAction.setCheckable(True) + themeGroup.addAction(themeAction) + find_and_set_in_combo_box(self.themeComboBox, self.service_theme) + self.mainwindow.renderer.set_service_theme(self.service_theme) self.regenerateServiceItems() def onThemeChangeAction(self): - theme = unicode(self.sender().text()) + theme = unicode(self.sender().objectName()) + # No object name means that the "Default" theme is supposed to be used. + if not theme: + theme = None item = self.findServiceItem()[0] - self.serviceItems[item][u'service_item'].theme = theme + self.serviceItems[item][u'service_item'].update_theme(theme) self.regenerateServiceItems() def _getParentItemData(self, item): @@ -1266,23 +1355,6 @@ class ServiceManager(QtGui.QWidget): else: return parentitem.data(0, QtCore.Qt.UserRole).toInt()[0] - def listRequest(self, message=None): - data = [] - item = self.findServiceItem()[0] - if item >= 0 and item < len(self.serviceItems): - curitem = self.serviceItems[item] - else: - curitem = None - for item in self.serviceItems: - service_item = item[u'service_item'] - data_item = {} - data_item[u'title'] = unicode(service_item.get_display_title()) - data_item[u'plugin'] = unicode(service_item.name) - data_item[u'notes'] = unicode(service_item.notes) - data_item[u'selected'] = (item == curitem) - data.append(data_item) - Receiver.send_message(u'servicemanager_list_response', data) - def printServiceOrder(self): """ Print a Service Order Sheet. diff --git a/openlp/core/ui/servicenoteform.py b/openlp/core/ui/servicenoteform.py index ef1c627d4..3bc55e242 100644 --- a/openlp/core/ui/servicenoteform.py +++ b/openlp/core/ui/servicenoteform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -41,9 +42,15 @@ class ServiceNoteForm(QtGui.QDialog): self.setupUi() self.retranslateUi() + def exec_(self): + self.textEdit.setFocus() + return QtGui.QDialog.exec_(self) + def setupUi(self): self.setObjectName(u'serviceNoteEdit') self.dialogLayout = QtGui.QVBoxLayout(self) + self.dialogLayout.setContentsMargins(8, 8, 8, 8) + self.dialogLayout.setSpacing(8) self.dialogLayout.setObjectName(u'verticalLayout') self.textEdit = QtGui.QTextEdit(self) self.textEdit.setObjectName(u'textEdit') diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 70f83f4fa..296337f0f 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,18 +33,29 @@ from openlp.core.lib.ui import create_accept_reject_button_box class Ui_SettingsDialog(object): def setupUi(self, settingsDialog): settingsDialog.setObjectName(u'settingsDialog') - settingsDialog.resize(700, 500) + settingsDialog.resize(800, 500) settingsDialog.setWindowIcon( build_icon(u':/system/system_settings.png')) - self.settingsLayout = QtGui.QVBoxLayout(settingsDialog) - self.settingsLayout.setObjectName(u'settingsLayout') - self.settingsTabWidget = QtGui.QTabWidget(settingsDialog) - self.settingsTabWidget.setObjectName(u'settingsTabWidget') - self.settingsLayout.addWidget(self.settingsTabWidget) + self.dialogLayout = QtGui.QGridLayout(settingsDialog) + self.dialogLayout.setObjectName(u'dialogLayout') + self.dialogLayout.setMargin(8) + self.settingListWidget = QtGui.QListWidget(settingsDialog) + self.settingListWidget.setUniformItemSizes(True) + self.settingListWidget.setMinimumSize(QtCore.QSize(150, 0)) + self.settingListWidget.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) + self.settingListWidget.setObjectName(u'settingListWidget') + self.dialogLayout.addWidget(self.settingListWidget, 0, 0, 1, 1) + self.stackedLayout = QtGui.QStackedLayout() + self.stackedLayout.setObjectName(u'stackedLayout') + self.dialogLayout.addLayout(self.stackedLayout, 0, 1, 1, 1) self.buttonBox = create_accept_reject_button_box(settingsDialog, True) - self.settingsLayout.addWidget(self.buttonBox) + self.dialogLayout.addWidget(self.buttonBox, 1, 1, 1, 1) self.retranslateUi(settingsDialog) QtCore.QMetaObject.connectSlotsByName(settingsDialog) + QtCore.QObject.connect(self.settingListWidget, + QtCore.SIGNAL(u'currentRowChanged(int)'), + self.stackedLayout.setCurrentIndex) def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(translate('OpenLP.SettingsForm', diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index cf66ad090..49d27a466 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,7 +31,7 @@ import logging from PyQt4 import QtGui -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, build_icon, PluginStatus from openlp.core.ui import AdvancedTab, GeneralTab, ThemesTab from settingsdialog import Ui_SettingsDialog @@ -40,55 +41,59 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Provide the form to manipulate the settings for OpenLP """ - def __init__(self, screens, mainWindow, parent=None): + def __init__(self, mainWindow, parent=None): """ Initialise the settings form """ QtGui.QDialog.__init__(self, parent) self.setupUi(self) # General tab - generalTab = GeneralTab(screens) - self.addTab(u'General', generalTab) + self.generalTab = GeneralTab(self) # Themes tab - themesTab = ThemesTab(mainWindow) - self.addTab(u'Themes', themesTab) + self.themesTab = ThemesTab(self, mainWindow) # Advanced tab - advancedTab = AdvancedTab() - self.addTab(u'Advanced', advancedTab) + self.advancedTab = AdvancedTab(self) - def addTab(self, name, tab): - """ - Add a tab to the form - """ - log.info(u'Adding %s tab' % tab.tabTitle) - self.settingsTabWidget.addTab(tab, tab.tabTitleVisible) + def exec_(self): + # load all the settings + self.settingListWidget.clear() + for tabIndex in range(0, self.stackedLayout.count() + 1): + # take at 0 and the rest shuffell up. + self.stackedLayout.takeAt(0) + self.insertTab(self.generalTab, 0, PluginStatus.Active) + self.insertTab(self.themesTab, 1, PluginStatus.Active) + self.insertTab(self.advancedTab, 2, PluginStatus.Active) + count = 3 + for plugin in self.plugins: + if plugin.settings_tab: + self.insertTab(plugin.settings_tab, count, plugin.status) + count += 1 + self.settingListWidget.setCurrentRow(0) + return QtGui.QDialog.exec_(self) - def insertTab(self, tab, location): + def insertTab(self, tab, location, is_active): """ Add a tab to the form at a specific location """ log.debug(u'Inserting %s tab' % tab.tabTitle) - # 14 : There are 3 tables currently and locations starts at -10 - self.settingsTabWidget.insertTab( - location + 14, tab, tab.tabTitleVisible) - - def removeTab(self, tab): - """ - Remove a tab from the form - """ - log.debug(u'remove %s tab' % tab.tabTitleVisible) - for tabIndex in range(0, self.settingsTabWidget.count()): - if self.settingsTabWidget.widget(tabIndex): - if self.settingsTabWidget.widget(tabIndex).tabTitleVisible == \ - tab.tabTitleVisible: - self.settingsTabWidget.removeTab(tabIndex) + # add the tab to get it to display in the correct part of the screen + pos = self.stackedLayout.addWidget(tab) + if is_active: + item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) + icon = build_icon(tab.icon_path) + item_name.setIcon(icon) + self.settingListWidget.insertItem(location, item_name) + else: + # then remove tab to stop the UI displaying it even if + # it is not required. + self.stackedLayout.takeAt(pos) def accept(self): """ Process the form saving the settings """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).save() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).save() # Must go after all settings are save Receiver.send_message(u'config_updated') return QtGui.QDialog.accept(self) @@ -97,13 +102,17 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Process the form saving the settings """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).cancel() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).cancel() return QtGui.QDialog.reject(self) def postSetUp(self): """ 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.generalTab.postSetUp() + self.themesTab.postSetUp() + self.advancedTab.postSetUp() + for plugin in self.plugins: + if plugin.settings_tab: + plugin.settings_tab.postSetUp() diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 4e5b9e270..a9b9b22cf 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,44 +29,91 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import translate, build_icon +class CaptureShortcutButton(QtGui.QPushButton): + """ + A class to encapsulate a ``QPushButton``. + """ + def __init__(self, *args): + QtGui.QPushButton.__init__(self, *args) + self.setCheckable(True) + + def keyPressEvent(self, event): + """ + Block the ``Key_Space`` key, so that the button will not change the + checked state. + """ + if event.key() == QtCore.Qt.Key_Space and self.isChecked(): + # Ignore the event, so that the parent can take care of this. + event.ignore() + + class Ui_ShortcutListDialog(object): def setupUi(self, shortcutListDialog): shortcutListDialog.setObjectName(u'shortcutListDialog') - self.dialogLayout = QtGui.QVBoxLayout(shortcutListDialog) - self.dialogLayout.setObjectName(u'dialogLayout') + shortcutListDialog.resize(500, 438) + self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog) + self.shortcutListLayout.setObjectName(u'shortcutListLayout') + self.descriptionLabel = QtGui.QLabel(shortcutListDialog) + self.descriptionLabel.setObjectName(u'descriptionLabel') + self.descriptionLabel.setWordWrap(True) + self.shortcutListLayout.addWidget(self.descriptionLabel) self.treeWidget = QtGui.QTreeWidget(shortcutListDialog) - self.treeWidget.setAlternatingRowColors(True) self.treeWidget.setObjectName(u'treeWidget') + self.treeWidget.setAlternatingRowColors(True) self.treeWidget.setColumnCount(3) - self.dialogLayout.addWidget(self.treeWidget) - self.defaultButton = QtGui.QRadioButton(shortcutListDialog) - self.defaultButton.setChecked(True) - self.defaultButton.setObjectName(u'defaultButton') - self.dialogLayout.addWidget(self.defaultButton) - self.customLayout = QtGui.QHBoxLayout() - self.customLayout.setObjectName(u'customLayout') - self.customButton = QtGui.QRadioButton(shortcutListDialog) - self.customButton.setObjectName(u'customButton') - self.customLayout.addWidget(self.customButton) - self.shortcutButton = QtGui.QPushButton(shortcutListDialog) - self.shortcutButton.setIcon( + self.treeWidget.setColumnWidth(0, 250) + self.shortcutListLayout.addWidget(self.treeWidget) + self.detailsLayout = QtGui.QGridLayout() + self.detailsLayout.setObjectName(u'detailsLayout') + self.detailsLayout.setContentsMargins(-1, 0, -1, -1) + self.defaultRadioButton = QtGui.QRadioButton(shortcutListDialog) + self.defaultRadioButton.setObjectName(u'defaultRadioButton') + self.defaultRadioButton.setChecked(True) + self.detailsLayout.addWidget(self.defaultRadioButton, 0, 0, 1, 1) + self.customRadioButton = QtGui.QRadioButton(shortcutListDialog) + self.customRadioButton.setObjectName(u'customRadioButton') + self.detailsLayout.addWidget(self.customRadioButton, 1, 0, 1, 1) + self.primaryLayout = QtGui.QHBoxLayout() + self.primaryLayout.setObjectName(u'primaryLayout') + self.primaryPushButton = CaptureShortcutButton(shortcutListDialog) + self.primaryPushButton.setObjectName(u'primaryPushButton') + self.primaryPushButton.setMinimumSize(QtCore.QSize(84, 0)) + self.primaryPushButton.setIcon( build_icon(u':/system/system_configure_shortcuts.png')) - self.shortcutButton.setCheckable(True) - self.shortcutButton.setObjectName(u'shortcutButton') - self.customLayout.addWidget(self.shortcutButton) - self.clearShortcutButton = QtGui.QToolButton(shortcutListDialog) - self.clearShortcutButton.setIcon( + self.primaryLayout.addWidget(self.primaryPushButton) + self.clearPrimaryButton = QtGui.QToolButton(shortcutListDialog) + self.clearPrimaryButton.setObjectName(u'clearPrimaryButton') + self.clearPrimaryButton.setMinimumSize(QtCore.QSize(0, 16)) + self.clearPrimaryButton.setIcon( build_icon(u':/system/clear_shortcut.png')) - self.clearShortcutButton.setAutoRaise(True) - self.clearShortcutButton.setObjectName(u'clearShortcutButton') - self.customLayout.addWidget(self.clearShortcutButton) - self.customLayout.addStretch() - self.dialogLayout.addLayout(self.customLayout) + self.primaryLayout.addWidget(self.clearPrimaryButton) + self.detailsLayout.addLayout(self.primaryLayout, 1, 1, 1, 1) + self.alternateLayout = QtGui.QHBoxLayout() + self.alternateLayout.setObjectName(u'alternateLayout') + self.alternatePushButton = CaptureShortcutButton(shortcutListDialog) + self.alternatePushButton.setObjectName(u'alternatePushButton') + self.alternatePushButton.setIcon( + build_icon(u':/system/system_configure_shortcuts.png')) + self.alternateLayout.addWidget(self.alternatePushButton) + self.clearAlternateButton = QtGui.QToolButton(shortcutListDialog) + self.clearAlternateButton.setObjectName(u'clearAlternateButton') + self.clearAlternateButton.setIcon( + build_icon(u':/system/clear_shortcut.png')) + self.alternateLayout.addWidget(self.clearAlternateButton) + self.detailsLayout.addLayout(self.alternateLayout, 1, 2, 1, 1) + self.primaryLabel = QtGui.QLabel(shortcutListDialog) + self.primaryLabel.setObjectName(u'primaryLabel') + self.detailsLayout.addWidget(self.primaryLabel, 0, 1, 1, 1) + self.alternateLabel = QtGui.QLabel(shortcutListDialog) + self.alternateLabel.setObjectName(u'alternateLabel') + self.detailsLayout.addWidget(self.alternateLabel, 0, 2, 1, 1) + self.shortcutListLayout.addLayout(self.detailsLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Reset) self.buttonBox.setObjectName(u'buttonBox') - self.dialogLayout.addWidget(self.buttonBox) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | + QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) + self.shortcutListLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), shortcutListDialog.accept) @@ -75,14 +123,25 @@ class Ui_ShortcutListDialog(object): def retranslateUi(self, shortcutListDialog): shortcutListDialog.setWindowTitle( - translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) + translate('OpenLP.ShortcutListDialog', 'Configure Shortcuts')) + self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', + 'Select an action and click one of the buttons below to start ' + 'capturing a new primary or alternate shortcut, respectively.')) self.treeWidget.setHeaderLabels([ translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), translate('OpenLP.ShortcutListDialog', 'Alternate')]) - self.defaultButton.setText( - translate('OpenLP.ShortcutListDialog', 'Default: %s')) - self.customButton.setText( - translate('OpenLP.ShortcutListDialog', 'Custom:')) - self.shortcutButton.setText( - translate('OpenLP.ShortcutListDialog', 'None')) + self.defaultRadioButton.setText( + translate('OpenLP.ShortcutListDialog', 'Default')) + self.customRadioButton.setText( + translate('OpenLP.ShortcutListDialog', 'Custom')) + self.primaryPushButton.setToolTip( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) + self.alternatePushButton.setToolTip( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) + self.clearPrimaryButton.setToolTip( + translate('OpenLP.ShortcutListDialog', + 'Restore the default shortcut of this action.')) + self.clearAlternateButton.setToolTip( + translate('OpenLP.ShortcutListDialog', + 'Restore the default shortcut of this action.')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index e87ba3ada..1eccddc95 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,7 +30,9 @@ import re from PyQt4 import QtCore, QtGui +from openlp.core.lib import Receiver from openlp.core.utils import translate +from openlp.core.utils.actions import ActionList from shortcutlistdialog import Ui_ShortcutListDialog REMOVE_AMPERSAND = re.compile(r'&{1}') @@ -41,72 +44,437 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): The shortcut list dialog """ - def __init__(self, parent): - """ - Do some initialisation stuff - """ + def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self.actionList = None - self.captureShortcut = False - QtCore.QObject.connect(self.shortcutButton, - QtCore.SIGNAL(u'toggled(bool)'), self.onShortcutButtonClicked) + self.changedActions = {} + self.action_list = ActionList.get_instance() + QtCore.QObject.connect(self.primaryPushButton, + QtCore.SIGNAL(u'toggled(bool)'), self.onPrimaryPushButtonClicked) + QtCore.QObject.connect(self.alternatePushButton, + QtCore.SIGNAL(u'toggled(bool)'), self.onAlternatePushButtonClicked) + QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL( + u'currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)'), + self.onCurrentItemChanged) + QtCore.QObject.connect(self.treeWidget, + QtCore.SIGNAL(u'itemDoubleClicked(QTreeWidgetItem*, int)'), + self.onItemDoubleClicked) + QtCore.QObject.connect(self.clearPrimaryButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onClearPrimaryButtonClicked) + QtCore.QObject.connect(self.clearAlternateButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onClearAlternateButtonClicked) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'clicked(QAbstractButton*)'), + self.onRestoreDefaultsClicked) + QtCore.QObject.connect(self.defaultRadioButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onDefaultRadioButtonClicked) + QtCore.QObject.connect(self.customRadioButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onCustomRadioButtonClicked) + + def keyPressEvent(self, event): + if event.key() == QtCore.Qt.Key_Space: + self.keyReleaseEvent(event) + elif self.primaryPushButton.isChecked() or \ + self.alternatePushButton.isChecked(): + event.ignore() + elif event.key() == QtCore.Qt.Key_Escape: + event.accept() + self.close() def keyReleaseEvent(self, event): - Qt = QtCore.Qt - if not self.captureShortcut: + if not self.primaryPushButton.isChecked() and \ + not self.alternatePushButton.isChecked(): return key = event.key() - if key == Qt.Key_Shift or key == Qt.Key_Control or \ - key == Qt.Key_Meta or key == Qt.Key_Alt: + if key == QtCore.Qt.Key_Shift or key == QtCore.Qt.Key_Control or \ + key == QtCore.Qt.Key_Meta or key == QtCore.Qt.Key_Alt: return key_string = QtGui.QKeySequence(key).toString() - if event.modifiers() & Qt.ControlModifier == Qt.ControlModifier: + if event.modifiers() & QtCore.Qt.ControlModifier == \ + QtCore.Qt.ControlModifier: key_string = u'Ctrl+' + key_string - if event.modifiers() & Qt.AltModifier == Qt.AltModifier: + if event.modifiers() & QtCore.Qt.AltModifier == QtCore.Qt.AltModifier: key_string = u'Alt+' + key_string - if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: + if event.modifiers() & QtCore.Qt.ShiftModifier == \ + QtCore.Qt.ShiftModifier: key_string = u'Shift+' + key_string + if event.modifiers() & QtCore.Qt.MetaModifier == \ + QtCore.Qt.MetaModifier: + key_string = u'Meta+' + key_string key_sequence = QtGui.QKeySequence(key_string) - existing_key = QtGui.QKeySequence(u'Ctrl+Shift+F8') - if key_sequence == existing_key: - QtGui.QMessageBox.warning( - self, - translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'), - unicode(translate('OpenLP.ShortcutListDialog', 'The shortcut ' - '"%s" is already assigned to another action, please ' - 'use a different shortcut.')) % key_sequence.toString(), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), - QtGui.QMessageBox.Ok - ) - else: - self.shortcutButton.setText(key_sequence.toString()) - self.shortcutButton.setChecked(False) - self.captureShortcut = False + if self._validiate_shortcut(self._currentItemAction(), key_sequence): + if self.primaryPushButton.isChecked(): + self._adjustButton(self.primaryPushButton, + False, text=key_sequence.toString()) + elif self.alternatePushButton.isChecked(): + self._adjustButton(self.alternatePushButton, + False, text=key_sequence.toString()) - def exec_(self, actionList): - self.actionList = actionList - self.refreshActions() + def exec_(self): + self.changedActions = {} + self.reloadShortcutList() + self._adjustButton(self.primaryPushButton, False, False, u'') + self._adjustButton(self.alternatePushButton, False, False, u'') return QtGui.QDialog.exec_(self) - def refreshActions(self): + def reloadShortcutList(self): + """ + Reload the ``treeWidget`` list to add new and remove old actions. + """ self.treeWidget.clear() - for category in self.actionList.categories: + for category in self.action_list.categories: + # Check if the category is for internal use only. + if category.name is None: + continue item = QtGui.QTreeWidgetItem([category.name]) for action in category.actions: actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) - if (len(action.shortcuts()) == 2): - shortcutText = action.shortcuts()[0].toString() - alternateText = action.shortcuts()[1].toString() - else: - shortcutText = action.shortcut().toString() - alternateText = u'' - actionItem = QtGui.QTreeWidgetItem( - [actionText, shortcutText, alternateText]) + actionItem = QtGui.QTreeWidgetItem([actionText]) actionItem.setIcon(0, action.icon()) + actionItem.setData(0, + QtCore.Qt.UserRole, QtCore.QVariant(action)) item.addChild(actionItem) - item.setExpanded(True) self.treeWidget.addTopLevelItem(item) + item.setExpanded(True) + self.refreshShortcutList() - def onShortcutButtonClicked(self, toggled): - self.captureShortcut = toggled + def refreshShortcutList(self): + """ + This refreshes the item's shortcuts shown in the list. Note, this + neither adds new actions nor removes old actions. + """ + iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget) + while iterator.value(): + item = iterator.value() + iterator += 1 + action = self._currentItemAction(item) + if action is None: + continue + shortcuts = self._actionShortcuts(action) + if len(shortcuts) == 0: + item.setText(1, u'') + item.setText(2, u'') + elif len(shortcuts) == 1: + item.setText(1, shortcuts[0].toString()) + item.setText(2, u'') + else: + item.setText(1, shortcuts[0].toString()) + item.setText(2, shortcuts[1].toString()) + self.onCurrentItemChanged() + + def onPrimaryPushButtonClicked(self, toggled): + """ + Save the new primary shortcut. + """ + self.customRadioButton.setChecked(True) + if toggled: + self.alternatePushButton.setChecked(False) + self.primaryPushButton.setText(u'') + return + action = self._currentItemAction() + if action is None: + return + shortcuts = self._actionShortcuts(action) + new_shortcuts = [QtGui.QKeySequence(self.primaryPushButton.text())] + if len(shortcuts) == 2: + new_shortcuts.append(shortcuts[1]) + self.changedActions[action] = new_shortcuts + self.refreshShortcutList() + + def onAlternatePushButtonClicked(self, toggled): + """ + Save the new alternate shortcut. + """ + self.customRadioButton.setChecked(True) + if toggled: + self.primaryPushButton.setChecked(False) + self.alternatePushButton.setText(u'') + return + action = self._currentItemAction() + if action is None: + return + shortcuts = self._actionShortcuts(action) + new_shortcuts = [] + if len(shortcuts) != 0: + new_shortcuts.append(shortcuts[0]) + new_shortcuts.append( + QtGui.QKeySequence(self.alternatePushButton.text())) + self.changedActions[action] = new_shortcuts + if not self.primaryPushButton.text(): + # When we do not have a primary shortcut, the just entered alternate + # shortcut will automatically become the primary shortcut. That is + # why we have to adjust the primary button's text. + self.primaryPushButton.setText(self.alternatePushButton.text()) + self.alternatePushButton.setText(u'') + self.refreshShortcutList() + + def onItemDoubleClicked(self, item, column): + """ + A item has been double clicked. The ``primaryPushButton`` will be + checked and the item's shortcut will be displayed. + """ + action = self._currentItemAction(item) + if action is None: + return + self.primaryPushButton.setChecked(column in [0, 1]) + self.alternatePushButton.setChecked(column not in [0, 1]) + if column in [0, 1]: + self.primaryPushButton.setText(u'') + self.primaryPushButton.setFocus(QtCore.Qt.OtherFocusReason) + else: + self.alternatePushButton.setText(u'') + self.alternatePushButton.setFocus(QtCore.Qt.OtherFocusReason) + + def onCurrentItemChanged(self, item=None, previousItem=None): + """ + A item has been pressed. We adjust the button's text to the action's + shortcut which is encapsulate in the item. + """ + action = self._currentItemAction(item) + self.primaryPushButton.setEnabled(action is not None) + self.alternatePushButton.setEnabled(action is not None) + primary_text = u'' + alternate_text = u'' + primary_label_text = u'' + alternate_label_text = u'' + if action is None: + self.primaryPushButton.setChecked(False) + self.alternatePushButton.setChecked(False) + else: + if len(action.defaultShortcuts) != 0: + primary_label_text = action.defaultShortcuts[0].toString() + if len(action.defaultShortcuts) == 2: + alternate_label_text = action.defaultShortcuts[1].toString() + shortcuts = self._actionShortcuts(action) + # We do not want to loose pending changes, that is why we have to + # keep the text when, this function has not been triggered by a + # signal. + if item is None: + primary_text = self.primaryPushButton.text() + alternate_text = self.alternatePushButton.text() + elif len(shortcuts) == 1: + primary_text = shortcuts[0].toString() + elif len(shortcuts) == 2: + primary_text = shortcuts[0].toString() + alternate_text = shortcuts[1].toString() + # When we are capturing a new shortcut, we do not want, the buttons to + # display the current shortcut. + if self.primaryPushButton.isChecked(): + primary_text = u'' + if self.alternatePushButton.isChecked(): + alternate_text = u'' + self.primaryPushButton.setText(primary_text) + self.alternatePushButton.setText(alternate_text) + self.primaryLabel.setText(primary_label_text) + self.alternateLabel.setText(alternate_label_text) + # We do not want to toggle and radio button, as the function has not + # been triggered by a signal. + if item is None: + return + if primary_label_text == primary_text and \ + alternate_label_text == alternate_text: + self.defaultRadioButton.toggle() + else: + self.customRadioButton.toggle() + + def onRestoreDefaultsClicked(self, button): + """ + Restores all default shortcuts. + """ + if self.buttonBox.buttonRole(button) != \ + QtGui.QDialogButtonBox.ResetRole: + return + if QtGui.QMessageBox.question(self, + translate('OpenLP.ShortcutListDialog', 'Restore Default Shortcuts'), + translate('OpenLP.ShortcutListDialog', 'Do you want to restore all ' + 'shortcuts to their defaults?'), QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No)) == QtGui.QMessageBox.No: + return + self._adjustButton(self.primaryPushButton, False, text=u'') + self._adjustButton(self.alternatePushButton, False, text=u'') + for category in self.action_list.categories: + for action in category.actions: + self.changedActions[action] = action.defaultShortcuts + self.refreshShortcutList() + + def onDefaultRadioButtonClicked(self, toggled): + """ + The default radio button has been clicked, which means we have to make + sure, that we use the default shortcuts for the action. + """ + if not toggled: + return + action = self._currentItemAction() + if action is None: + return + temp_shortcuts = self._actionShortcuts(action) + self.changedActions[action] = action.defaultShortcuts + self.refreshShortcutList() + primary_button_text = u'' + alternate_button_text = u'' + if len(temp_shortcuts) != 0: + primary_button_text = temp_shortcuts[0].toString() + if len(temp_shortcuts) == 2: + alternate_button_text = temp_shortcuts[1].toString() + self.primaryPushButton.setText(primary_button_text) + self.alternatePushButton.setText(alternate_button_text) + + def onCustomRadioButtonClicked(self, toggled): + """ + The custom shortcut radio button was clicked, thus we have to restore + the custom shortcuts by calling those functions triggered by button + clicks. + """ + if not toggled: + return + self.onPrimaryPushButtonClicked(False) + self.onAlternatePushButtonClicked(False) + self.refreshShortcutList() + + def save(self): + """ + Save the shortcuts. **Note**, that we do not have to load the shortcuts, + as they are loaded in :class:`~openlp.core.utils.ActionList`. + """ + settings = QtCore.QSettings() + settings.beginGroup(u'shortcuts') + for category in self.action_list.categories: + # Check if the category is for internal use only. + if category.name is None: + continue + for action in category.actions: + if self.changedActions .has_key(action): + action.setShortcuts(self.changedActions[action]) + settings.setValue( + action.objectName(), QtCore.QVariant(action.shortcuts())) + settings.endGroup() + + def onClearPrimaryButtonClicked(self, toggled): + """ + Restore the defaults of this action. + """ + self.primaryPushButton.setChecked(False) + action = self._currentItemAction() + if action is None: + return + shortcuts = self._actionShortcuts(action) + new_shortcuts = [] + if len(action.defaultShortcuts) != 0: + new_shortcuts.append(action.defaultShortcuts[0]) + # We have to check if the primary default shortcut is available. But + # we only have to check, if the action has a default primary + # shortcut (an "empty" shortcut is always valid and if the action + # does not have a default primary shortcut, then the alternative + # shortcut (not the default one) will become primary shortcut, thus + # the check will assume that an action were going to have the same + # shortcut twice. + if not self._validiate_shortcut(action, new_shortcuts[0]) and \ + new_shortcuts[0] != shortcuts[0]: + return + if len(shortcuts) == 2: + new_shortcuts.append(shortcuts[1]) + self.changedActions[action] = new_shortcuts + self.refreshShortcutList() + self.onCurrentItemChanged(self.treeWidget.currentItem()) + + def onClearAlternateButtonClicked(self, toggled): + """ + Restore the defaults of this action. + """ + self.alternatePushButton.setChecked(False) + action = self._currentItemAction() + if action is None: + return + shortcuts = self._actionShortcuts(action) + new_shortcuts = [] + if len(shortcuts) != 0: + new_shortcuts.append(shortcuts[0]) + if len(action.defaultShortcuts) == 2: + new_shortcuts.append(action.defaultShortcuts[1]) + if len(new_shortcuts) == 2: + if not self._validiate_shortcut(action, new_shortcuts[1]): + return + self.changedActions[action] = new_shortcuts + self.refreshShortcutList() + self.onCurrentItemChanged(self.treeWidget.currentItem()) + + def _validiate_shortcut(self, changing_action, key_sequence): + """ + Checks if the given ``changing_action `` can use the given + ``key_sequence``. Returns ``True`` if the ``key_sequence`` can be used + by the action, otherwise displays a dialog and returns ``False``. + + ``changing_action`` + The action which wants to use the ``key_sequence``. + + ``key_sequence`` + The key sequence which the action want so use. + """ + is_valid = True + for category in self.action_list.categories: + for action in category.actions: + shortcuts = self._actionShortcuts(action) + if key_sequence not in shortcuts: + continue + if action is changing_action: + if self.primaryPushButton.isChecked() and \ + shortcuts.index(key_sequence) == 0: + continue + if self.alternatePushButton.isChecked() and \ + shortcuts.index(key_sequence) == 1: + continue + # Have the same parent, thus they cannot have the same shortcut. + if action.parent() is changing_action.parent(): + is_valid = False + # The new shortcut is already assigned, but if both shortcuts + # are only valid in a different widget the new shortcut is + # vaild, because they will not interfere. + if action.shortcutContext() in [QtCore.Qt.WindowShortcut, + QtCore.Qt.ApplicationShortcut]: + is_valid = False + if changing_action.shortcutContext() in \ + [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: + is_valid = False + if not is_valid: + Receiver.send_message(u'openlp_warning_message', { + u'title': translate('OpenLP.ShortcutListDialog', + 'Duplicate Shortcut'), + u'message': unicode(translate('OpenLP.ShortcutListDialog', + 'The shortcut "%s" is already assigned to another action, ' + 'please use a different shortcut.')) % key_sequence.toString() + }) + return is_valid + + def _actionShortcuts(self, action): + """ + This returns the shortcuts for the given ``action``, which also includes + those shortcuts which are not saved yet but already assigned (as changes + are applied when closing the dialog). + """ + if self.changedActions.has_key(action): + return self.changedActions[action] + return action.shortcuts() + + def _currentItemAction(self, item=None): + """ + Returns the action of the given ``item``. If no item is given, we return + the action of the current item of the ``treeWidget``. + """ + if item is None: + item = self.treeWidget.currentItem() + if item is None: + return + return item.data(0, QtCore.Qt.UserRole).toPyObject() + + def _adjustButton(self, button, checked=None, enabled=None, text=None): + """ + Can be called to adjust more properties of the given ``button`` at once. + """ + # Set the text before checking the button, because this emits a signal. + if text is not None: + button.setText(text) + if checked is not None: + button.setChecked(checked) + if enabled is not None: + button.setEnabled(enabled) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 232653326..0f83cbc30 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,14 +27,17 @@ import logging import os +import time +import copy from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon -from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ - ItemCapabilities, translate -from openlp.core.lib.ui import icon_action, UiStrings, shortcut_action -from openlp.core.ui import HideMode, MainDisplay +from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, \ + translate, build_icon +from openlp.core.lib.ui import UiStrings, shortcut_action +from openlp.core.ui import HideMode, MainDisplay, ScreenList +from openlp.core.utils.actions import ActionList, CategoryOrder log = logging.getLogger(__name__) @@ -44,7 +48,6 @@ class SlideList(QtGui.QTableWidget): """ def __init__(self, parent=None, name=None): QtGui.QTableWidget.__init__(self, parent.controller) - self.parent = parent class SlideController(QtGui.QWidget): @@ -52,20 +55,19 @@ class SlideController(QtGui.QWidget): SlideController is the slide controller widget. This widget is what the user uses to control the displaying of verses/slides/etc on the screen. """ - def __init__(self, parent, settingsmanager, screens, isLive=False): + def __init__(self, parent, isLive=False): """ Set up the Slide Controller. """ QtGui.QWidget.__init__(self, parent) - self.settingsmanager = settingsmanager self.isLive = isLive - self.parent = parent - self.screens = screens + self.display = None + self.screens = ScreenList.get_instance() self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) - self.display = MainDisplay(self, screens, isLive) + self.imageManager = self.parent().imageManager self.loopList = [ - u'Start Loop', + u'Play Slides Menu', u'Loop Separator', u'Image SpinBox' ] @@ -87,11 +89,11 @@ class SlideController(QtGui.QWidget): # Type label for the top of the slide controller self.typeLabel = QtGui.QLabel(self.panel) if self.isLive: - self.typeLabel.setText(UiStrings.Live) + self.typeLabel.setText(UiStrings().Live) self.split = 1 self.typePrefix = u'live' else: - self.typeLabel.setText(UiStrings.Preview) + self.typeLabel.setText(UiStrings().Preview) self.split = 0 self.typePrefix = u'preview' self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') @@ -139,31 +141,40 @@ class SlideController(QtGui.QWidget): self.previousItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Previous Slide'), u':/slides/slide_previous.png', - translate('OpenLP.SlideController', 'Move to previous'), - self.onSlideSelectedPrevious) + translate('OpenLP.SlideController', 'Move to previous.'), + self.onSlideSelectedPrevious, + shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], + context=QtCore.Qt.WidgetWithChildrenShortcut) self.nextItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Next Slide'), u':/slides/slide_next.png', - translate('OpenLP.SlideController', 'Move to next'), - self.onSlideSelectedNext) + translate('OpenLP.SlideController', 'Move to next.'), + self.onSlideSelectedNext, + shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], + context=QtCore.Qt.WidgetWithChildrenShortcut) self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: + # Hide Menu self.hideMenu = QtGui.QToolButton(self.toolbar) self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) self.hideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.toolbar)) - self.blankScreen = icon_action(self.hideMenu, u'Blank Screen', - u':/slides/slide_blank.png', False) + self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', + [QtCore.Qt.Key_Period], self.onBlankDisplay, + u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) self.blankScreen.setText( translate('OpenLP.SlideController', 'Blank Screen')) - self.themeScreen = icon_action(self.hideMenu, u'Blank Theme', - u':/slides/slide_theme.png', False) + self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', + [QtGui.QKeySequence(u'T')], self.onThemeDisplay, + u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) - self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen', - u':/slides/slide_desktop.png', False) + self.desktopScreen = shortcut_action(self.hideMenu, + u'desktopScreen', [QtGui.QKeySequence(u'D')], + self.onHideDisplay, u':/slides/slide_desktop.png', False, + UiStrings().LiveToolbar) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) @@ -171,50 +182,70 @@ class SlideController(QtGui.QWidget): self.hideMenu.menu().addAction(self.themeScreen) self.hideMenu.menu().addAction(self.desktopScreen) self.toolbar.addToolbarSeparator(u'Loop Separator') - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Start Loop', u':/media/media_time.png', - translate('OpenLP.SlideController', 'Start continuous loop'), - self.onStartLoop) - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Stop Loop', u':/media/media_stop.png', - translate('OpenLP.SlideController', 'Stop continuous loop'), - self.onStopLoop) + # Play Slides Menu + self.playSlidesMenu = QtGui.QToolButton(self.toolbar) + self.playSlidesMenu.setText(translate('OpenLP.SlideController', + 'Play Slides')) + self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) + self.toolbar.addToolbarWidget(u'Play Slides Menu', + self.playSlidesMenu) + self.playSlidesMenu.setMenu(QtGui.QMenu( + translate('OpenLP.SlideController', 'Play Slides'), + self.toolbar)) + self.playSlidesLoop = shortcut_action(self.playSlidesMenu, + u'playSlidesLoop', [], self.onPlaySlidesLoop, + u':/media/media_time.png', False, UiStrings().LiveToolbar) + self.playSlidesLoop.setText(UiStrings().PlaySlidesInLoop) + self.playSlidesOnce = shortcut_action(self.playSlidesMenu, + u'playSlidesOnce', [], self.onPlaySlidesOnce, + u':/media/media_time.png', False, UiStrings().LiveToolbar) + self.playSlidesOnce.setText(UiStrings().PlaySlidesToEnd) + if QtCore.QSettings().value(self.parent().generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool(): + self.playSlidesMenu.setDefaultAction(self.playSlidesLoop) + else: + self.playSlidesMenu.setDefaultAction(self.playSlidesOnce) + self.playSlidesMenu.menu().addAction(self.playSlidesLoop) + self.playSlidesMenu.menu().addAction(self.playSlidesOnce) + # Loop Delay Spinbox self.delaySpinBox = QtGui.QSpinBox() - self.delaySpinBox.setMinimum(1) - self.delaySpinBox.setMaximum(180) + self.delaySpinBox.setRange(1, 180) self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) - self.delaySpinBox.setSuffix(UiStrings.Seconds) + self.delaySpinBox.setSuffix(UiStrings().Seconds) self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', - 'Delay between slides in seconds')) + 'Delay between slides in seconds.')) else: self.toolbar.addToolbarButton( # Does not need translating - control string. u'Go Live', u':/general/general_live.png', - translate('OpenLP.SlideController', 'Move to live'), + translate('OpenLP.SlideController', 'Move to live.'), self.onGoLive) + self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Add to Service', u':/general/general_add.png', + translate('OpenLP.SlideController', 'Add to Service.'), + self.onPreviewAddToService) self.toolbar.addToolbarSeparator(u'Close Separator') self.toolbar.addToolbarButton( # Does not need translating - control string. u'Edit Song', u':/general/general_edit.png', translate('OpenLP.SlideController', - 'Edit and reload song preview'), + 'Edit and reload song preview.'), self.onEditSong) self.controllerLayout.addWidget(self.toolbar) # Build a Media ToolBar self.mediabar = OpenLPToolbar(self) self.mediabar.addToolbarButton( u'Media Start', u':/slides/media_playback_start.png', - translate('OpenLP.SlideController', 'Start playing media'), + translate('OpenLP.SlideController', 'Start playing media.'), self.onMediaPlay) self.mediabar.addToolbarButton( u'Media Pause', u':/slides/media_playback_pause.png', - translate('OpenLP.SlideController', 'Start playing media'), + translate('OpenLP.SlideController', 'Start playing media.'), self.onMediaPause) self.mediabar.addToolbarButton( u'Media Stop', u':/slides/media_playback_stop.png', - translate('OpenLP.SlideController', 'Start playing media'), + translate('OpenLP.SlideController', 'Start playing media.'), self.onMediaStop) if self.isLive: # Build the Song Toolbar @@ -259,15 +290,16 @@ class SlideController(QtGui.QWidget): self.slideLayout.setSpacing(0) self.slideLayout.setMargin(0) self.slideLayout.setObjectName(u'SlideLayout') - self.mediaObject = Phonon.MediaObject(self) - self.video = Phonon.VideoWidget() - self.video.setVisible(False) - self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) - Phonon.createPath(self.mediaObject, self.video) - Phonon.createPath(self.mediaObject, self.audio) if not self.isLive: + self.mediaObject = Phonon.MediaObject(self) + self.video = Phonon.VideoWidget() + self.video.setVisible(False) + self.audio = Phonon.AudioOutput(Phonon.VideoCategory, + self.mediaObject) + Phonon.createPath(self.mediaObject, self.video) + Phonon.createPath(self.mediaObject, self.audio) self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) - self.slideLayout.insertWidget(0, self.video) + self.slideLayout.insertWidget(0, self.video) # Actual preview screen self.slidePreview = QtGui.QLabel(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, @@ -277,9 +309,6 @@ class SlideController(QtGui.QWidget): sizePolicy.setHeightForWidth( self.slidePreview.sizePolicy().hasHeightForWidth()) self.slidePreview.setSizePolicy(sizePolicy) - self.slidePreview.setFixedSize( - QtCore.QSize(self.settingsmanager.slidecontroller_image, - self.settingsmanager.slidecontroller_image / self.ratio)) self.slidePreview.setFrameShape(QtGui.QFrame.Box) self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) self.slidePreview.setLineWidth(1) @@ -291,12 +320,6 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(self.previewListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) 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.desktopScreen, - QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) QtCore.QObject.connect(self.volumeSlider, QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) QtCore.QObject.connect(Receiver.get_receiver(), @@ -305,7 +328,6 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), self.receiveSpinDelay) self.toolbar.makeWidgetsInvisible(self.loopList) - self.toolbar.actions[u'Stop Loop'].setVisible(False) else: QtCore.QObject.connect(self.previewListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), @@ -315,7 +337,6 @@ class SlideController(QtGui.QWidget): if self.isLive: self.setLiveHotkeys(self) self.__addActionsToWidget(self.previewListWidget) - self.__addActionsToWidget(self.display) else: self.setPreviewHotkeys() self.previewListWidget.addActions( @@ -333,13 +354,6 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), self.onSlideSelectedPrevious) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next_noloop' % self.typePrefix), - self.onSlideSelectedNextNoloop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_previous_noloop' % - self.typePrefix), - self.onSlideSelectedPreviousNoloop) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), self.onSlideSelectedLast) @@ -358,46 +372,51 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), self.onTextRequest) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - actionList = self.parent.actionList - self.previousItem.setShortcuts([QtCore.Qt.Key_Up, 0]) - actionList.add_action(self.previousItem, u'Preview') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down, 0]) - actionList.add_action(self.nextItem, u'Preview') + self.previousItem.setObjectName(u'previousItemPreview') + self.nextItem.setObjectName(u'nextItemPreview') + action_list = ActionList.get_instance() + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) def setLiveHotkeys(self, parent=None): - actionList = self.parent.actionList - self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) - self.previousItem.setShortcutContext( - QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.previousItem, u'Live') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) - self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.nextItem, u'Live') - self.previousService = shortcut_action(parent, - translate('OpenLP.SlideController', 'Previous Service'), - [QtCore.Qt.Key_Left, 0], self.servicePrevious) - actionList.add_action(self.previousService, u'Live') - self.nextService = shortcut_action(parent, - translate('OpenLP.SlideController', 'Next Service'), - [QtCore.Qt.Key_Right, 0], self.serviceNext) - actionList.add_action(self.nextService, u'Live') - self.escapeItem = shortcut_action(parent, - translate('OpenLP.SlideController', 'Escape Item'), - [QtCore.Qt.Key_Escape, 0], self.liveEscape) - actionList.add_action(self.escapeItem, u'Live') + self.previousItem.setObjectName(u'previousItemLive') + self.nextItem.setObjectName(u'nextItemLive') + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings().LiveToolbar, CategoryOrder.standardToolbar) + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) + self.previousService = shortcut_action(parent, u'previousService', + [QtCore.Qt.Key_Left], self.servicePrevious, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.previousService.setText( + translate('OpenLP.SlideController', 'Previous Service')) + self.nextService = shortcut_action(parent, 'nextService', + [QtCore.Qt.Key_Right], self.serviceNext, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.nextService.setText( + translate('OpenLP.SlideController', 'Next Service')) + self.escapeItem = shortcut_action(parent, 'escapeItem', + [QtCore.Qt.Key_Escape], self.liveEscape, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.escapeItem.setText( + translate('OpenLP.SlideController', 'Escape Item')) def liveEscape(self): self.display.setVisible(False) self.display.videoStop() def servicePrevious(self): + time.sleep(0.1) Receiver.send_message('servicemanager_previous_item') def serviceNext(self): + time.sleep(0.1) Receiver.send_message('servicemanager_next_item') def screenSizeChanged(self): @@ -406,8 +425,9 @@ class SlideController(QtGui.QWidget): screen previews. """ # rebuild display as screen size changed - self.display = MainDisplay(self, self.screens, self.isLive) - self.display.imageManager = self.parent.renderManager.image_manager + if self.display: + self.display.close() + self.display = MainDisplay(self, self.imageManager, self.isLive) self.display.alertTab = self.alertTab self.display.setup() if self.isLive: @@ -451,7 +471,7 @@ class SlideController(QtGui.QWidget): self.previewListWidget.resizeRowsToContents() else: # Sort out image heights. - width = self.parent.controlSplitter.sizes()[self.split] + width = self.parent().controlSplitter.sizes()[self.split] for framenumber in range(len(self.serviceItem.get_frames())): self.previewListWidget.setRowHeight( framenumber, width / self.ratio) @@ -460,7 +480,7 @@ class SlideController(QtGui.QWidget): request = unicode(self.sender().text()) slideno = self.slideList[request] self.__updatePreviewSelection(slideno) - self.onSlideSelected() + self.slideSelected() def receiveSpinDelay(self, value): """ @@ -482,14 +502,20 @@ class SlideController(QtGui.QWidget): """ Allows the live toolbar to be customised """ - self.toolbar.setVisible(True) + # Work-around for OS X, hide and then show the toolbar + # See bug #791050 + self.toolbar.hide() self.mediabar.setVisible(False) self.toolbar.makeWidgetsInvisible([u'Song Menu']) self.toolbar.makeWidgetsInvisible(self.loopList) - self.toolbar.actions[u'Stop Loop'].setVisible(False) + # Reset the button + self.playSlidesOnce.setChecked(False) + self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesLoop.setChecked(False) + self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) if item.is_text(): if QtCore.QSettings().value( - self.parent.songsSettingsSection + u'/display songbar', + self.parent().songsSettingsSection + u'/display songbar', QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: self.toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ @@ -498,12 +524,18 @@ class SlideController(QtGui.QWidget): if item.is_media(): self.toolbar.setVisible(False) self.mediabar.setVisible(True) + else: + # Work-around for OS X, hide and then show the toolbar + # See bug #791050 + self.toolbar.show() def enablePreviewToolBar(self, item): """ Allows the Preview toolbar to be customised """ - self.toolbar.setVisible(True) + # Work-around for OS X, hide and then show the toolbar + # See bug #791050 + self.toolbar.hide() self.mediabar.setVisible(False) self.toolbar.makeWidgetsInvisible(self.songEditList) if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: @@ -512,6 +544,10 @@ class SlideController(QtGui.QWidget): self.toolbar.setVisible(False) self.mediabar.setVisible(True) self.volumeSlider.setAudioOutput(self.audio) + if not item.is_media(): + # Work-around for OS X, hide and then show the toolbar + # See bug #791050 + self.toolbar.show() def refreshServiceItem(self): """ @@ -556,7 +592,7 @@ class SlideController(QtGui.QWidget): # If service item is the same as the current on only change slide if item.__eq__(self.serviceItem): self.__checkUpdateSelectedSlide(slideno) - self.onSlideSelected() + self.slideSelected() return self._processItem(item, slideno) @@ -567,24 +603,16 @@ class SlideController(QtGui.QWidget): """ log.debug(u'processManagerItem live = %s' % self.isLive) self.onStopLoop() - # If old item was a command tell it to stop - if self.serviceItem: - if self.serviceItem.is_command(): - Receiver.send_message(u'%s_stop' % - self.serviceItem.name.lower(), [serviceItem, self.isLive]) - 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 + old_item = self.serviceItem + # take a copy not a link to the servicemeanager copy. + self.serviceItem = copy.copy(serviceItem) + if old_item and self.isLive and old_item.is_capable( + ItemCapabilities.ProvidesOwnDisplay): + self._resetBlank() Receiver.send_message(u'%s_start' % serviceItem.name.lower(), - [serviceItem, self.isLive, blanked, slideno]) + [serviceItem, self.isLive, self.hideMode(), slideno]) self.slideList = {} - width = self.parent.controlSplitter.sizes()[self.split] - self.serviceItem = serviceItem + width = self.parent().controlSplitter.sizes()[self.split] self.previewListWidget.clear() self.previewListWidget.setRowCount(0) self.previewListWidget.setColumnWidth(0, width) @@ -601,7 +629,7 @@ class SlideController(QtGui.QWidget): if frame[u'verseTag']: # These tags are already translated. verse_def = frame[u'verseTag'] - verse_def = u'%s%s' % (verse_def[0].upper(), verse_def[1:]) + verse_def = u'%s%s' % (verse_def[0], verse_def[1:]) two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:]) row = two_line_def if self.isLive: @@ -617,20 +645,16 @@ class SlideController(QtGui.QWidget): label.setMargin(4) label.setScaledContents(True) if self.serviceItem.is_command(): - image = resize_image(frame[u'image'], - self.parent.renderManager.width, - self.parent.renderManager.height) + image = QtGui.QImage(frame[u'image']) else: # If current slide set background to image if framenumber == slideno: self.serviceItem.bg_image_bytes = \ - self.parent.renderManager.image_manager. \ - get_image_bytes(frame[u'title']) - image = self.parent.renderManager.image_manager. \ - get_image(frame[u'title']) + self.imageManager.get_image_bytes(frame[u'title']) + image = self.imageManager.get_image(frame[u'title']) label.setPixmap(QtGui.QPixmap.fromImage(image)) self.previewListWidget.setCellWidget(framenumber, 0, label) - slideHeight = width * self.parent.renderManager.screen_ratio + slideHeight = width * self.parent().renderer.screen_ratio row += 1 text.append(unicode(row)) self.previewListWidget.setItem(framenumber, 0, item) @@ -643,12 +667,25 @@ class SlideController(QtGui.QWidget): self.previewListWidget.viewport().size().width()) self.__updatePreviewSelection(slideno) self.enableToolBar(serviceItem) - # Pass to display for viewing - self.display.buildHtml(self.serviceItem) + # Pass to display for viewing. + # Postpone image build, we need to do this later to avoid the theme + # flashing on the screen + if not self.serviceItem.is_image(): + self.display.buildHtml(self.serviceItem) if serviceItem.is_media(): self.onMediaStart(serviceItem) - self.onSlideSelected() + self.slideSelected(True) self.previewListWidget.setFocus() + if old_item: + # Close the old item after the new one is opened + # This avoids the service theme/desktop flashing on screen + # However opening a new item of the same type will automatically + # close the previous, so make sure we don't close the new one. + if old_item.is_command() and not serviceItem.is_command(): + Receiver.send_message(u'%s_stop' % + old_item.name.lower(), [old_item, self.isLive]) + if old_item.is_media() and not serviceItem.is_media(): + self.onMediaClose() Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, [serviceItem]) @@ -695,7 +732,7 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: self.previewListWidget.selectRow(0) - self.onSlideSelected() + self.slideSelected() def onSlideSelectedIndex(self, message): """ @@ -710,7 +747,7 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: self.__checkUpdateSelectedSlide(index) - self.onSlideSelected() + self.slideSelected() def mainDisplaySetBackground(self): """ @@ -718,7 +755,7 @@ class SlideController(QtGui.QWidget): """ log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) display_type = QtCore.QSettings().value( - self.parent.generalSettingsSection + u'/screen blank', + self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'')).toString() if not self.display.primary: # Order done to handle initial conversion @@ -726,8 +763,10 @@ class SlideController(QtGui.QWidget): self.onThemeDisplay(True) elif display_type == u'hidden': self.onHideDisplay(True) - else: + elif display_type == u'blanked': self.onBlankDisplay(True) + else: + Receiver.send_message(u'maindisplay_show') def onSlideBlank(self): """ @@ -741,83 +780,93 @@ class SlideController(QtGui.QWidget): """ self.onBlankDisplay(False) - def onBlankDisplay(self, checked): + def onBlankDisplay(self, checked=None): """ Handle the blank screen button actions """ + if checked is None: + checked = self.blankScreen.isChecked() log.debug(u'onBlankDisplay %s' % checked) self.hideMenu.setDefaultAction(self.blankScreen) self.blankScreen.setChecked(checked) self.themeScreen.setChecked(False) self.desktopScreen.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Blank) QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', + self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'blanked')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin(checked) + self.parent().generalSettingsSection + u'/screen blank') + self.blankPlugin() self.updatePreview() - def onThemeDisplay(self, checked): + def onThemeDisplay(self, checked=None): """ Handle the Theme screen button """ + if checked is None: + checked = self.themeScreen.isChecked() log.debug(u'onThemeDisplay %s' % checked) self.hideMenu.setDefaultAction(self.themeScreen) self.blankScreen.setChecked(False) self.themeScreen.setChecked(checked) self.desktopScreen.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Theme) QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', + self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'themed')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin(checked) + self.parent().generalSettingsSection + u'/screen blank') + self.blankPlugin() self.updatePreview() - def onHideDisplay(self, checked): + def onHideDisplay(self, checked=None): """ Handle the Hide screen button """ + if checked is None: + checked = self.desktopScreen.isChecked() log.debug(u'onHideDisplay %s' % checked) self.hideMenu.setDefaultAction(self.desktopScreen) self.blankScreen.setChecked(False) self.themeScreen.setChecked(False) self.desktopScreen.setChecked(checked) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', + self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'hidden')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') + self.parent().generalSettingsSection + u'/screen blank') self.hidePlugin(checked) self.updatePreview() - def blankPlugin(self, blank): + def blankPlugin(self): """ - Blank the display screen within a plugin if required. + Blank/Hide the display screen within a plugin if required. """ - log.debug(u'blankPlugin %s ', blank) + hide_mode = self.hideMode() + log.debug(u'blankPlugin %s ', hide_mode) if self.serviceItem is not None: - if blank: + if hide_mode: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_hide', hide_mode) Receiver.send_message(u'%s_blank' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) + [self.serviceItem, self.isLive, hide_mode]) else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) + else: + if hide_mode: + Receiver.send_message(u'maindisplay_hide', hide_mode) + else: + Receiver.send_message(u'maindisplay_show') def hidePlugin(self, hide): """ @@ -826,15 +875,29 @@ class SlideController(QtGui.QWidget): log.debug(u'hidePlugin %s ', hide) if self.serviceItem is not None: if hide: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) Receiver.send_message(u'%s_hide' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) + else: + if hide: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + else: + Receiver.send_message(u'maindisplay_show') - def onSlideSelected(self): + def onSlideSelected(self, start=False): + """ + Slide selected in controller + """ + self.slideSelected() + + def slideSelected(self, start=False): """ Generate the preview when you click on a slide. if this is the Live Controller also display on the screen @@ -843,7 +906,7 @@ class SlideController(QtGui.QWidget): self.selectedRow = 0 if row > -1 and row < self.previewListWidget.rowCount(): if self.serviceItem.is_command(): - if self.isLive: + if self.isLive and not start: Receiver.send_message( u'%s_slide' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive, row]) @@ -853,7 +916,11 @@ class SlideController(QtGui.QWidget): if self.serviceItem.is_text(): frame = self.display.text(toDisplay) else: - frame = self.display.image(toDisplay) + if start: + self.display.buildHtml(self.serviceItem, toDisplay) + frame = self.display.preview() + else: + frame = self.display.image(toDisplay) # reset the store used to display first image self.serviceItem.bg_image_bytes = None self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) @@ -897,10 +964,7 @@ class SlideController(QtGui.QWidget): rect.y(), rect.width(), rect.height()) self.slidePreview.setPixmap(winimg) - def onSlideSelectedNextNoloop(self): - self.onSlideSelectedNext(False) - - def onSlideSelectedNext(self, loop=True): + def onSlideSelectedNext(self, wrap=None): """ Go to the next slide. """ @@ -913,18 +977,18 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() + 1 if row == self.previewListWidget.rowCount(): - if loop: + if wrap is None: + wrap = QtCore.QSettings().value( + self.parent().generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool() + if wrap: row = 0 else: - Receiver.send_message('servicemanager_next_item') - return + row = self.previewListWidget.rowCount() - 1 self.__checkUpdateSelectedSlide(row) - self.onSlideSelected() + self.slideSelected() - def onSlideSelectedPreviousNoloop(self): - self.onSlideSelectedPrevious(False) - - def onSlideSelectedPrevious(self, loop=True): + def onSlideSelectedPrevious(self): """ Go to the previous slide. """ @@ -937,12 +1001,13 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() - 1 if row == -1: - if loop: + if QtCore.QSettings().value(self.parent().generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool(): row = self.previewListWidget.rowCount() - 1 else: row = 0 self.__checkUpdateSelectedSlide(row) - self.onSlideSelected() + self.slideSelected() def __checkUpdateSelectedSlide(self, row): if row + 1 < self.previewListWidget.rowCount(): @@ -963,7 +1028,16 @@ class SlideController(QtGui.QWidget): else: self.previewListWidget.selectRow( self.previewListWidget.rowCount() - 1) - self.onSlideSelected() + self.slideSelected() + + def onToggleLoop(self): + """ + Toggles the loop state. + """ + if self.playSlidesLoop.isChecked() or self.playSlidesOnce.isChecked(): + self.onStartLoop() + else: + self.onStopLoop() def onStartLoop(self): """ @@ -972,8 +1046,6 @@ class SlideController(QtGui.QWidget): if self.previewListWidget.rowCount() > 1: self.timer_id = self.startTimer( int(self.delaySpinBox.value()) * 1000) - self.toolbar.actions[u'Stop Loop'].setVisible(True) - self.toolbar.actions[u'Start Loop'].setVisible(False) def onStopLoop(self): """ @@ -982,15 +1054,55 @@ class SlideController(QtGui.QWidget): if self.timer_id != 0: self.killTimer(self.timer_id) self.timer_id = 0 - self.toolbar.actions[u'Start Loop'].setVisible(True) - self.toolbar.actions[u'Stop Loop'].setVisible(False) + + def onPlaySlidesLoop(self, checked=None): + """ + Start or stop 'Play Slides in Loop' + """ + if checked is None: + checked = self.playSlidesLoop.isChecked() + else: + self.playSlidesLoop.setChecked(checked) + log.debug(u'onPlaySlidesLoop %s' % checked) + if checked: + self.playSlidesLoop.setIcon(build_icon(u':/media/media_stop.png')) + self.playSlidesLoop.setText(UiStrings().StopPlaySlidesInLoop) + self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesOnce.setText(UiStrings().PlaySlidesToEnd) + else: + self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesLoop.setText(UiStrings().PlaySlidesInLoop) + self.playSlidesMenu.setDefaultAction(self.playSlidesLoop) + self.playSlidesOnce.setChecked(False) + self.onToggleLoop() + + def onPlaySlidesOnce(self, checked=None): + """ + Start or stop 'Play Slides to End' + """ + if checked is None: + checked = self.playSlidesOnce.isChecked() + else: + self.playSlidesOnce.setChecked(checked) + log.debug(u'onPlaySlidesOnce %s' % checked) + if checked: + self.playSlidesOnce.setIcon(build_icon(u':/media/media_stop.png')) + self.playSlidesOnce.setText(UiStrings().StopPlaySlidesToEnd) + self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesLoop.setText(UiStrings().PlaySlidesInLoop) + else: + self.playSlidesOnce.setIcon(build_icon(u':/media/media_time')) + self.playSlidesOnce.setText(UiStrings().PlaySlidesToEnd) + self.playSlidesMenu.setDefaultAction(self.playSlidesOnce) + self.playSlidesLoop.setChecked(False) + self.onToggleLoop() def timerEvent(self, event): """ If the timer event is for this window select next slide """ if event.timerId() == self.timer_id: - self.onSlideSelectedNext() + self.onSlideSelectedNext(self.playSlidesLoop.isChecked()) def onEditSong(self): """ @@ -1000,12 +1112,28 @@ class SlideController(QtGui.QWidget): Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), u'P:%s' % self.serviceItem.edit_id) + def onPreviewAddToService(self): + """ + From the preview display request the Item to be added to service + """ + if self.serviceItem: + self.parent().serviceManagerContents.addServiceItem( + self.serviceItem) + def onGoLiveClick(self): """ triggered by clicking the Preview slide items """ if QtCore.QSettings().value(u'advanced/double click live', QtCore.QVariant(False)).toBool(): + # Live and Preview have issues if we have video or presentations + # playing in both at the same time. + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_stop' % + self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_media(): + self.onMediaClose() self.onGoLive() def onGoLive(self): @@ -1018,7 +1146,7 @@ class SlideController(QtGui.QWidget): Receiver.send_message('servicemanager_preview_live', u'%s:%s' % (self.serviceItem._uuid, row)) else: - self.parent.liveController.addServiceManagerItem( + self.parent().liveController.addServiceManagerItem( self.serviceItem, row) def onMediaStart(self, item): @@ -1095,20 +1223,32 @@ class SlideController(QtGui.QWidget): self.slidePreview.clear() self.slidePreview.show() - def _forceUnblank(self): + def _resetBlank(self): """ Used by command items which provide their own displays to reset the screen hide attributes """ - blank = None - if self.blankScreen.isChecked: - blank = self.blankScreen - if self.themeScreen.isChecked: - blank = self.themeScreen - if self.desktopScreen.isChecked: - blank = self.desktopScreen - if blank: - blank.setChecked(False) - self.hideMenu.setDefaultAction(blank) - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') + hide_mode = self.hideMode() + if hide_mode == HideMode.Blank: + self.onBlankDisplay(True) + elif hide_mode == HideMode.Theme: + self.onThemeDisplay(True) + elif hide_mode == HideMode.Screen: + self.onHideDisplay(True) + else: + self.hidePlugin(False) + + def hideMode(self): + """ + Determine what the hide mode should be according to the blank button + """ + if not self.isLive: + return None + elif self.blankScreen.isChecked(): + return HideMode.Blank + elif self.themeScreen.isChecked(): + return HideMode.Theme + elif self.desktopScreen.isChecked(): + return HideMode.Screen + else: + return None diff --git a/openlp/core/ui/splashscreen.py b/openlp/core/ui/splashscreen.py index 84aa1d7df..8b2ba5d95 100644 --- a/openlp/core/ui/splashscreen.py +++ b/openlp/core/ui/splashscreen.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -23,6 +24,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from openlp.core.lib import Receiver from PyQt4 import QtCore, QtGui @@ -30,6 +32,8 @@ class SplashScreen(QtGui.QSplashScreen): def __init__(self): QtGui.QSplashScreen.__init__(self) self.setupUi() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'close_splash'), self.close) def setupUi(self): self.setObjectName(u'splash_screen') diff --git a/openlp/core/ui/starttimedialog.py b/openlp/core/ui/starttimedialog.py index be34b765e..61e4eb662 100644 --- a/openlp/core/ui/starttimedialog.py +++ b/openlp/core/ui/starttimedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -107,12 +108,12 @@ class Ui_StartTimeDialog(object): def retranslateUi(self, StartTimeDialog): self.setWindowTitle(translate('OpenLP.StartTimeForm', 'Item Start and Finish Time')) - self.hourSpinBox.setSuffix(UiStrings.Hours) - self.minuteSpinBox.setSuffix(UiStrings.Minutes) - self.secondSpinBox.setSuffix(UiStrings.Seconds) - self.hourFinishSpinBox.setSuffix(UiStrings.Hours) - self.minuteFinishSpinBox.setSuffix(UiStrings.Minutes) - self.secondFinishSpinBox.setSuffix(UiStrings.Seconds) + self.hourSpinBox.setSuffix(UiStrings().Hours) + self.minuteSpinBox.setSuffix(UiStrings().Minutes) + self.secondSpinBox.setSuffix(UiStrings().Seconds) + self.hourFinishSpinBox.setSuffix(UiStrings().Hours) + self.minuteFinishSpinBox.setSuffix(UiStrings().Minutes) + self.secondFinishSpinBox.setSuffix(UiStrings().Seconds) self.hourLabel.setText(translate('OpenLP.StartTimeForm', 'Hours:')) self.minuteLabel.setText(translate('OpenLP.StartTimeForm', 'Minutes:')) self.secondLabel.setText(translate('OpenLP.StartTimeForm', 'Seconds:')) diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index a30dd3b8e..45c0b70b7 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -53,11 +54,12 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): self.hourFinishSpinBox.setValue(hours) self.minuteFinishSpinBox.setValue(minutes) self.secondFinishSpinBox.setValue(seconds) - self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), UiStrings.Hours)) + self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), + UiStrings().Hours)) self.minuteFinishLabel.setText(u'%s%s' % - (unicode(minutes), UiStrings.Minutes)) + (unicode(minutes), UiStrings().Minutes)) self.secondFinishLabel.setText(u'%s%s' % - (unicode(seconds), UiStrings.Seconds)) + (unicode(seconds), UiStrings().Seconds)) return QtGui.QDialog.exec_(self) def accept(self): @@ -72,14 +74,14 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): title=translate('OpenLP.StartTimeForm', 'Time Validation Error'), message=translate('OpenLP.StartTimeForm', - 'End time is set after the end of the media item')) + 'Finish time is set after the end of the media item')) return elif start > end: critical_error_message_box( title=translate('OpenLP.StartTimeForm', 'Time Validation Error'), message=translate('OpenLP.StartTimeForm', - 'Start time is after the End Time of the media item')) + 'Start time is after the finish time of the media item')) return self.item[u'service_item'].start_time = start self.item[u'service_item'].end_time = end diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 6653e7e1d..d5d955926 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -56,6 +57,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.setupUi(self) self.registerFields() self.updateThemeAllowed = True + self.temp_background_filename = u'' QtCore.QObject.connect(self.backgroundComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onBackgroundComboBoxCurrentIndexChanged) @@ -63,26 +65,19 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onGradientComboBoxCurrentIndexChanged) QtCore.QObject.connect(self.colorButton, - QtCore.SIGNAL(u'clicked()'), - self.onColorButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onColorButtonClicked) QtCore.QObject.connect(self.gradientStartButton, - QtCore.SIGNAL(u'clicked()'), - self.onGradientStartButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onGradientStartButtonClicked) QtCore.QObject.connect(self.gradientEndButton, - QtCore.SIGNAL(u'clicked()'), - self.onGradientEndButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onGradientEndButtonClicked) QtCore.QObject.connect(self.imageBrowseButton, - QtCore.SIGNAL(u'clicked()'), - self.onImageBrowseButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onImageBrowseButtonClicked) QtCore.QObject.connect(self.mainColorButton, - QtCore.SIGNAL(u'clicked()'), - self.onMainColorButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onMainColorButtonClicked) QtCore.QObject.connect(self.outlineColorButton, - QtCore.SIGNAL(u'clicked()'), - self.onOutlineColorButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onOutlineColorButtonClicked) QtCore.QObject.connect(self.shadowColorButton, - QtCore.SIGNAL(u'clicked()'), - self.onShadowColorButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onShadowColorButtonClicked) QtCore.QObject.connect(self.outlineCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onOutlineCheckCheckBoxStateChanged) @@ -90,8 +85,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtCore.SIGNAL(u'stateChanged(int)'), self.onShadowCheckCheckBoxStateChanged) QtCore.QObject.connect(self.footerColorButton, - QtCore.SIGNAL(u'clicked()'), - self.onFooterColorButtonClicked) + QtCore.SIGNAL(u'clicked()'), self.onFooterColorButtonClicked) QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onMainPositionCheckBoxStateChanged) @@ -99,26 +93,23 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtCore.SIGNAL(u'stateChanged(int)'), self.onFooterPositionCheckBoxStateChanged) QtCore.QObject.connect(self, - QtCore.SIGNAL(u'currentIdChanged(int)'), - self.onCurrentIdChanged) + QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'theme_line_count'), - self.updateLinesText) + QtCore.SIGNAL(u'theme_line_count'), self.updateLinesText) QtCore.QObject.connect(self.mainSizeSpinBox, - QtCore.SIGNAL(u'valueChanged(int)'), - self.calculateLines) + QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) QtCore.QObject.connect(self.lineSpacingSpinBox, - QtCore.SIGNAL(u'valueChanged(int)'), - self.calculateLines) + QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) QtCore.QObject.connect(self.outlineSizeSpinBox, - QtCore.SIGNAL(u'valueChanged(int)'), - self.calculateLines) + QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) QtCore.QObject.connect(self.shadowSizeSpinBox, - QtCore.SIGNAL(u'valueChanged(int)'), - self.calculateLines) + QtCore.SIGNAL(u'valueChanged(int)'), self.calculateLines) QtCore.QObject.connect(self.mainFontComboBox, - QtCore.SIGNAL(u'activated(int)'), - self.calculateLines) + QtCore.SIGNAL(u'activated(int)'), self.calculateLines) + QtCore.QObject.connect(self.footerFontComboBox, + QtCore.SIGNAL(u'activated(int)'), self.updateTheme) + QtCore.QObject.connect(self.footerSizeSpinBox, + QtCore.SIGNAL(u'valueChanged(int)'), self.updateTheme) def setDefaults(self): """ @@ -211,7 +202,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Updates the lines on a page on the wizard """ self.mainLineCountLabel.setText(unicode(translate('OpenLP.ThemeForm', - '(%d lines per slide)')) % int(lines)) + '(approximately %d lines per slide)')) % int(lines)) def resizeEvent(self, event=None): """ @@ -290,6 +281,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Run the wizard. """ log.debug(u'Editing theme %s' % self.theme.theme_name) + self.temp_background_filename = u'' self.updateThemeAllowed = False self.setDefaults() self.updateThemeAllowed = True @@ -301,7 +293,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): 'Edit Theme - %s')) % self.theme.theme_name) self.next() else: - self.setWindowTitle(UiStrings.NewTheme) + self.setWindowTitle(UiStrings().NewTheme) return QtGui.QWizard.exec_(self) def initializePage(self, id): @@ -389,7 +381,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Handle the display and state of the Footer Area page. """ self.footerFontComboBox.setCurrentFont( - QtGui.QFont(self.theme.font_main_name)) + QtGui.QFont(self.theme.font_footer_name)) self.footerColorButton.setStyleSheet(u'background-color: %s' % self.theme.font_footer_color) self.setField(u'footerSizeSpinBox', @@ -443,6 +435,16 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): # do not allow updates when screen is building for the first time. if self.updateThemeAllowed: self.theme.background_type = BackgroundType.to_string(index) + if self.theme.background_type != \ + BackgroundType.to_string(BackgroundType.Image) and \ + self.temp_background_filename == u'': + self.temp_background_filename = self.theme.background_filename + self.theme.background_filename = u'' + if self.theme.background_type == \ + BackgroundType.to_string(BackgroundType.Image) and \ + self.temp_background_filename != u'': + self.theme.background_filename = self.temp_background_filename + self.temp_background_filename = u'' self.setBackgroundPageValues() def onGradientComboBoxCurrentIndexChanged(self, index): @@ -484,7 +486,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ images_filter = get_images_filter() images_filter = u'%s;;%s (*.*) (*)' % ( - images_filter, UiStrings.AllFiles) + images_filter, UiStrings().AllFiles) filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.ThemeForm', 'Select Image'), u'', images_filter) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index d033daeb3..69c229532 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,6 +29,7 @@ import os import zipfile import shutil import logging +import locale from xml.etree.ElementTree import ElementTree, XML from PyQt4 import QtCore, QtGui @@ -37,7 +39,8 @@ from openlp.core.lib import OpenLPToolbar, get_text_file_string, build_icon, \ check_directory_exists from openlp.core.lib.theme import ThemeXML, BackgroundType, VerticalType, \ BackgroundGradientType -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ + context_menu_action, context_menu_separator from openlp.core.theme import Theme from openlp.core.ui import FileRenameForm, ThemeForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ @@ -55,15 +58,13 @@ class ThemeManager(QtGui.QWidget): self.settingsSection = u'themes' self.themeForm = ThemeForm(self) self.fileRenameForm = FileRenameForm(self) - self.serviceComboBox = \ - self.mainwindow.ServiceManagerContents.themeComboBox # start with the layout self.layout = QtGui.QVBoxLayout(self) self.layout.setSpacing(0) self.layout.setMargin(0) self.layout.setObjectName(u'layout') self.toolbar = OpenLPToolbar(self) - self.toolbar.addToolbarButton(UiStrings.NewTheme, + self.toolbar.addToolbarButton(UiStrings().NewTheme, u':/themes/theme_new.png', translate('OpenLP.ThemeManager', 'Create a new theme.'), self.onAddTheme) @@ -104,31 +105,35 @@ class ThemeManager(QtGui.QWidget): self.contextMenu) # build the context menu self.menu = QtGui.QMenu() - self.editAction = self.menu.addAction( - translate('OpenLP.ThemeManager', '&Edit Theme')) - self.editAction.setIcon(build_icon(u':/themes/theme_edit.png')) - self.copyAction = self.menu.addAction( - translate('OpenLP.ThemeManager', '&Copy Theme')) - self.copyAction.setIcon(build_icon(u':/themes/theme_edit.png')) - self.renameAction = self.menu.addAction( - translate('OpenLP.ThemeManager', '&Rename Theme')) - self.renameAction.setIcon(build_icon(u':/themes/theme_edit.png')) - self.deleteAction = self.menu.addAction( - translate('OpenLP.ThemeManager', '&Delete Theme')) - self.deleteAction.setIcon(build_icon(u':/general/general_delete.png')) - self.separator = self.menu.addSeparator() - self.globalAction = self.menu.addAction( - translate('OpenLP.ThemeManager', 'Set As &Global Default')) - self.globalAction.setIcon(build_icon(u':/general/general_export.png')) - self.exportAction = self.menu.addAction( - translate('OpenLP.ThemeManager', '&Export Theme')) - self.exportAction.setIcon(build_icon(u':/general/general_export.png')) + self.editAction = context_menu_action( + self.menu, u':/themes/theme_edit.png', + translate('OpenLP.ThemeManager', '&Edit Theme'), self.onEditTheme) + self.copyAction = context_menu_action( + self.menu, u':/themes/theme_edit.png', + translate('OpenLP.ThemeManager', '&Copy Theme'), self.onCopyTheme) + self.renameAction = context_menu_action( + self.menu, u':/themes/theme_edit.png', + translate('OpenLP.ThemeManager', '&Rename Theme'), + self.onRenameTheme) + self.deleteAction = context_menu_action( + self.menu, u':/general/general_delete.png', + translate('OpenLP.ThemeManager', '&Delete Theme'), + self.onDeleteTheme) + context_menu_separator(self.menu) + self.globalAction = context_menu_action( + self.menu, u':/general/general_export.png', + translate('OpenLP.ThemeManager', 'Set As &Global Default'), + self.changeGlobalFromScreen) + self.exportAction = context_menu_action( + self.menu, u':/general/general_export.png', + translate('OpenLP.ThemeManager', '&Export Theme'), + self.onExportTheme) # Signals QtCore.QObject.connect(self.themeListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.changeGlobalFromScreen) - QtCore.QObject.connect(self.themeListWidget, - QtCore.SIGNAL(u'itemClicked(QListWidgetItem *)'), + QtCore.QObject.connect(self.themeListWidget, QtCore.SIGNAL( + u'currentItemChanged(QListWidgetItem *, QListWidgetItem *)'), self.checkListState) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.changeGlobalFromTab) @@ -170,6 +175,8 @@ class ThemeManager(QtGui.QWidget): """ If Default theme selected remove delete button. """ + if item is None: + return realThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) themeName = unicode(item.text()) # If default theme restrict actions @@ -196,19 +203,7 @@ class ThemeManager(QtGui.QWidget): self.deleteAction.setVisible(True) self.renameAction.setVisible(True) self.globalAction.setVisible(True) - action = self.menu.exec_(self.themeListWidget.mapToGlobal(point)) - if action == self.editAction: - self.onEditTheme() - if action == self.copyAction: - self.onCopyTheme() - if action == self.renameAction: - self.onRenameTheme() - if action == self.deleteAction: - self.onDeleteTheme() - if action == self.globalAction: - self.changeGlobalFromScreen() - if action == self.exportAction: - self.onExportTheme() + self.menu.exec_(self.themeListWidget.mapToGlobal(point)) def changeGlobalFromTab(self, themeName): """ @@ -280,6 +275,8 @@ class ThemeManager(QtGui.QWidget): self.fileRenameForm.fileNameEdit.setText(oldThemeName) if self.fileRenameForm.exec_(): newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) + if oldThemeName == newThemeName: + return if self.checkIfThemeExists(newThemeName): oldThemeData = self.getThemeData(oldThemeName) self.cloneThemeData(oldThemeData, newThemeName) @@ -295,7 +292,9 @@ class ThemeManager(QtGui.QWidget): """ item = self.themeListWidget.currentItem() oldThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) - self.fileRenameForm.fileNameEdit.setText(oldThemeName) + self.fileRenameForm.fileNameEdit.setText( + unicode(translate('OpenLP.ThemeManager', + 'Copy of %s','Copy of ')) % oldThemeName) if self.fileRenameForm.exec_(True): newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) if self.checkIfThemeExists(newThemeName): @@ -333,6 +332,7 @@ class ThemeManager(QtGui.QWidget): self.oldBackgroundImage = theme.background_filename self.themeForm.theme = theme self.themeForm.exec_(True) + self.oldBackgroundImage = None def onDeleteTheme(self): """ @@ -445,17 +445,21 @@ class ThemeManager(QtGui.QWidget): files = SettingsManager.get_files(self.settingsSection, u'.png') if firstTime: self.firstTime() + files = SettingsManager.get_files(self.settingsSection, u'.png') # No themes have been found so create one if len(files) == 0: theme = ThemeXML() - theme.theme_name = UiStrings.Default + theme.theme_name = UiStrings().Default self._writeTheme(theme, None, None) QtCore.QSettings().setValue( self.settingsSection + u'/global theme', QtCore.QVariant(theme.theme_name)) self.configUpdated() files = SettingsManager.get_files(self.settingsSection, u'.png') - files.sort() + # Sort the themes by its name considering language specific characters. + # lower() is needed for windows! + files.sort(key=lambda filename: unicode(filename).lower(), + cmp=locale.strcoll) # now process the file list of png files for name in files: # check to see file is in theme root directory @@ -654,9 +658,21 @@ class ThemeManager(QtGui.QWidget): pixmap.save(thumb, u'png') log.debug(u'Theme image written to %s', samplepathname) + def updatePreviewImages(self): + """ + Called to update the themes' preview images. + """ + self.mainwindow.displayProgressBar(len(self.themelist)) + for theme in self.themelist: + self.mainwindow.incrementProgressBar() + self.generateAndSaveImage( + self.path, theme, self.getThemeData(theme)) + self.mainwindow.finishedProgressBar() + self.loadThemes() + def generateImage(self, themeData, forcePage=False): """ - Call the RenderManager to build a Sample Image + Call the renderer to build a Sample Image ``themeData`` The theme to generated a preview for. @@ -665,7 +681,7 @@ class ThemeManager(QtGui.QWidget): Flag to tell message lines per page need to be generated. """ log.debug(u'generateImage \n%s ', themeData) - return self.mainwindow.renderManager.generate_preview( + return self.mainwindow.renderer.generate_preview( themeData, forcePage) def getPreviewImage(self, theme): @@ -744,7 +760,8 @@ class ThemeManager(QtGui.QWidget): 'Theme %s is used in the %s plugin.')) % \ (theme, plugin.name)) return False - return True + return True + return False def _migrateVersion122(self, xml_data): """ @@ -803,3 +820,4 @@ class ThemeManager(QtGui.QWidget): newtheme.display_horizontal_align = theme.HorizontalAlign newtheme.display_vertical_align = vAlignCorrection return newtheme.extract_xml() + diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 1b76d2198..572efdf4b 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,15 +29,17 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, Receiver, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box class ThemesTab(SettingsTab): """ ThemesTab is the theme settings tab in the settings dialog. """ - def __init__(self, parent): - self.parent = parent - SettingsTab.__init__(self, u'Themes') + def __init__(self, parent, mainwindow): + self.mainwindow = mainwindow + generalTranslated = translate('OpenLP.ThemesTab', 'Themes') + SettingsTab.__init__(self, parent, u'Themes', generalTranslated) + self.icon_path = u':/themes/theme_new.png' def setupUi(self): self.setObjectName(u'ThemesTab') @@ -100,7 +103,7 @@ class ThemesTab(SettingsTab): QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) def retranslateUi(self): - self.tabTitleVisible = UiStrings.Themes + self.tabTitleVisible = UiStrings().Themes self.GlobalGroupBox.setTitle( translate('OpenLP.ThemesTab', 'Global Theme')) self.LevelGroupBox.setTitle( @@ -142,12 +145,10 @@ class ThemesTab(SettingsTab): def save(self): settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) - settings.setValue(u'theme level', - QtCore.QVariant(self.theme_level)) - settings.setValue(u'global theme', - QtCore.QVariant(self.global_theme)) + settings.setValue(u'theme level', QtCore.QVariant(self.theme_level)) + settings.setValue(u'global theme', QtCore.QVariant(self.global_theme)) settings.endGroup() - self.parent.renderManager.set_global_theme( + self.mainwindow.renderer.set_global_theme( self.global_theme, self.theme_level) Receiver.send_message(u'theme_update_global', self.global_theme) @@ -165,7 +166,7 @@ class ThemesTab(SettingsTab): def onDefaultComboBoxChanged(self, value): self.global_theme = unicode(self.DefaultComboBox.currentText()) - self.parent.renderManager.set_global_theme( + self.mainwindow.renderer.set_global_theme( self.global_theme, self.theme_level) self.__previewGlobalTheme() @@ -183,15 +184,9 @@ class ThemesTab(SettingsTab): self.settingsSection + u'/global theme', QtCore.QVariant(u'')).toString()) self.DefaultComboBox.clear() - for theme in theme_list: - self.DefaultComboBox.addItem(theme) - id = self.DefaultComboBox.findText( - self.global_theme, QtCore.Qt.MatchExactly) - if id == -1: - id = 0 # Not Found - self.global_theme = u'' - self.DefaultComboBox.setCurrentIndex(id) - self.parent.renderManager.set_global_theme( + self.DefaultComboBox.addItems(theme_list) + find_and_set_in_combo_box(self.DefaultComboBox, self.global_theme) + self.mainwindow.renderer.set_global_theme( self.global_theme, self.theme_level) if self.global_theme is not u'': self.__previewGlobalTheme() @@ -200,7 +195,7 @@ class ThemesTab(SettingsTab): """ Utility method to update the global theme preview image. """ - image = self.parent.themeManagerContents.getPreviewImage( + image = self.mainwindow.themeManagerContents.getPreviewImage( self.global_theme) preview = QtGui.QPixmap(unicode(image)) if not preview.isNull(): diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 9e464aa7a..27ac3a182 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -424,7 +425,7 @@ class Ui_ThemeWizard(object): self.backgroundComboBox.setItemText(BackgroundType.Gradient, translate('OpenLP.ThemeWizard', 'Gradient')) self.backgroundComboBox.setItemText( - BackgroundType.Image, UiStrings.Image) + BackgroundType.Image, UiStrings().Image) self.colorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.gradientStartLabel.setText( translate(u'OpenLP.ThemeWizard', 'Starting color:')) @@ -442,7 +443,7 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) - self.imageLabel.setText(u'%s:' % UiStrings.Image) + self.imageLabel.setText(u'%s:' % UiStrings().Image) self.mainAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Main Area Font Details')) self.mainAreaPage.setSubTitle( @@ -451,17 +452,17 @@ class Ui_ThemeWizard(object): self.mainFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.mainColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.mainSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.mainSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.mainSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.lineSpacingLabel.setText( translate('OpenLP.ThemeWizard', 'Line Spacing:')) - self.lineSpacingSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.lineSpacingSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.outlineCheckBox.setText( translate('OpenLP.ThemeWizard', '&Outline:')) self.outlineSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.outlineSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.outlineSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.shadowCheckBox.setText(translate('OpenLP.ThemeWizard', '&Shadow:')) self.shadowSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.shadowSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.shadowSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.mainBoldCheckBox.setText(translate('OpenLP.ThemeWizard', 'Bold')) self.mainItalicsCheckBox.setText( translate('OpenLP.ThemeWizard', 'Italic')) @@ -473,7 +474,7 @@ class Ui_ThemeWizard(object): self.footerFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.footerColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.footerSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.footerSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.footerSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.alignmentPage.setTitle( translate('OpenLP.ThemeWizard', 'Text Formatting Details')) self.alignmentPage.setSubTitle( diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index cb3a75294..9d8a106ed 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -95,6 +96,10 @@ class OpenLPWizard(QtGui.QWizard): self.customSignals() QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) + QtCore.QObject.connect(self.errorCopyToButton, + QtCore.SIGNAL(u'clicked()'), self.onErrorCopyToButtonClicked) + QtCore.QObject.connect(self.errorSaveToButton, + QtCore.SIGNAL(u'clicked()'), self.onErrorSaveToButtonClicked) def setupUi(self, image): """ @@ -129,10 +134,36 @@ class OpenLPWizard(QtGui.QWizard): self.progressLayout.setObjectName(u'progressLayout') self.progressLabel = QtGui.QLabel(self.progressPage) self.progressLabel.setObjectName(u'progressLabel') + self.progressLabel.setWordWrap(True) self.progressLayout.addWidget(self.progressLabel) self.progressBar = QtGui.QProgressBar(self.progressPage) self.progressBar.setObjectName(u'progressBar') self.progressLayout.addWidget(self.progressBar) + # Add a QTextEdit and a copy to file and copy to clipboard button to be + # able to provide feedback to the user. Hidden by default. + self.errorReportTextEdit = QtGui.QTextEdit(self.progressPage) + self.errorReportTextEdit.setObjectName(u'progresserrorReportTextEdit') + self.errorReportTextEdit.setHidden(True) + self.errorReportTextEdit.setReadOnly(True) + self.progressLayout.addWidget(self.errorReportTextEdit) + self.errorButtonLayout = QtGui.QHBoxLayout() + self.errorButtonLayout.setObjectName(u'errorButtonLayout') + spacer = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.errorButtonLayout.addItem(spacer) + self.errorCopyToButton = QtGui.QPushButton(self.progressPage) + self.errorCopyToButton.setObjectName(u'errorCopyToButton') + self.errorCopyToButton.setHidden(True) + self.errorCopyToButton.setIcon( + build_icon(u':/system/system_edit_copy.png')) + self.errorButtonLayout.addWidget(self.errorCopyToButton) + self.errorSaveToButton = QtGui.QPushButton(self.progressPage) + self.errorSaveToButton.setObjectName(u'errorSaveToButton') + self.errorSaveToButton.setHidden(True) + self.errorSaveToButton.setIcon( + build_icon(u':/general/general_save.png')) + self.errorButtonLayout.addWidget(self.errorSaveToButton) + self.progressLayout.addLayout(self.errorButtonLayout) self.addPage(self.progressPage) def exec_(self): @@ -159,6 +190,26 @@ class OpenLPWizard(QtGui.QWizard): self.preWizard() self.performWizard() self.postWizard() + else: + self.customPageChanged(pageId) + + def customPageChanged(self, pageId): + """ + Called when changing to a page other than the progress page + """ + pass + + def onErrorCopyToButtonClicked(self): + """ + Called when the ``onErrorCopyToButtonClicked`` has been clicked. + """ + pass + + def onErrorSaveToButtonClicked(self): + """ + Called when the ``onErrorSaveToButtonClicked`` has been clicked. + """ + pass def incrementProgressBar(self, status_text, increment=1): """ @@ -212,7 +263,7 @@ class OpenLPWizard(QtGui.QWizard): """ if filters: filters += u';;' - filters += u'%s (*)' % UiStrings.AllFiles + filters += u'%s (*)' % UiStrings().AllFiles filename = QtGui.QFileDialog.getOpenFileName(self, title, os.path.dirname(SettingsManager.get_last_dir( self.plugin.settingsSection, 1)), filters) @@ -220,3 +271,4 @@ class OpenLPWizard(QtGui.QWizard): editbox.setText(filename) SettingsManager.set_last_dir(self.plugin.settingsSection, filename, 1) + diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 3c639297e..b0a28962c 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -52,6 +53,7 @@ APPLICATION_VERSION = {} IMAGES_FILTER = None UNO_CONNECTION_TYPE = u'pipe' #UNO_CONNECTION_TYPE = u'socket' +VERSION_SPLITTER = re.compile(r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))?') class VersionThread(QtCore.QThread): """ @@ -60,20 +62,17 @@ class VersionThread(QtCore.QThread): """ def __init__(self, parent): QtCore.QThread.__init__(self, parent) - self.version_splitter = re.compile( - r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))?') def run(self): """ Run the thread. """ time.sleep(1) - Receiver.send_message(u'maindisplay_blank_check') app_version = get_application_version() version = check_latest_version(app_version) remote_version = {} local_version = {} - match = self.version_splitter.match(version) + match = VERSION_SPLITTER.match(version) if match: remote_version[u'major'] = int(match.group(1)) remote_version[u'minor'] = int(match.group(2)) @@ -82,7 +81,7 @@ class VersionThread(QtCore.QThread): remote_version[u'revision'] = int(match.group(4)) else: return - match = self.version_splitter.match(app_version[u'full']) + match = VERSION_SPLITTER.match(app_version[u'full']) if match: local_version[u'major'] = int(match.group(1)) local_version[u'minor'] = int(match.group(2)) @@ -101,6 +100,20 @@ class VersionThread(QtCore.QThread): Receiver.send_message(u'openlp_version_check', u'%s' % version) +class DelayStartThread(QtCore.QThread): + """ + A special Qt thread class to build things after OpenLP has started + """ + def __init__(self, parent): + QtCore.QThread.__init__(self, parent) + + def run(self): + """ + Run the thread. + """ + Receiver.send_message(u'openlp_phonon_creation') + + class AppLocation(object): """ The :class:`AppLocation` class is a static class which retrieves a @@ -328,7 +341,7 @@ def add_actions(target, actions): The menu or toolbar to add actions to. ``actions`` - The actions to be added. An action consisting of the keyword 'None' + The actions to be added. An action consisting of the keyword ``None`` will result in a separator being inserted into the target. """ for action in actions: @@ -446,25 +459,6 @@ def file_is_unicode(filename): return None return ucsfile -def string_is_unicode(test_string): - """ - Makes sure a string is unicode. - - ``test_string`` - The string to confirm is unicode. - """ - return_string = u'' - if not test_string: - return return_string - if isinstance(test_string, unicode): - return_string = test_string - if not isinstance(test_string, unicode): - try: - return_string = unicode(test_string, u'utf-8') - except UnicodeError: - log.exception("Error encoding string to unicode") - return return_string - def get_uno_command(): """ Returns the UNO command to launch an openoffice.org instance. @@ -495,7 +489,7 @@ def get_uno_instance(resolver): from languagemanager import LanguageManager from actions import ActionList -__all__ = [u'AppLocation', u'check_latest_version', u'add_actions', - u'get_filesystem_encoding', u'LanguageManager', u'ActionList', - u'get_web_page', u'file_is_unicode', u'string_is_unicode', - u'get_uno_command', u'get_uno_instance', u'delete_file'] +__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', + u'add_actions', u'get_filesystem_encoding', u'LanguageManager', + u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command', + u'get_uno_instance', u'delete_file'] diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 41ae41f4b..86ee69a48 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -27,6 +28,8 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ +from PyQt4 import QtCore, QtGui + class ActionCategory(object): """ The :class:`~openlp.core.utils.ActionCategory` class encapsulates a @@ -67,6 +70,7 @@ class CategoryActionList(object): Python 3 "next" method. """ if self.index >= len(self.actions): + self.index = 0 raise StopIteration else: self.index += 1 @@ -94,6 +98,12 @@ class CategoryActionList(object): self.actions.append((weight, action)) self.actions.sort(key=lambda act: act[0]) + def remove(self, remove_action): + for action in self.actions: + if action[1] == remove_action: + self.actions.remove(action) + return + class CategoryList(object): """ @@ -126,6 +136,7 @@ class CategoryList(object): Python 3 "next" method for iterator. """ if self.index >= len(self.categories): + self.index = 0 raise StopIteration else: self.index += 1 @@ -163,6 +174,11 @@ class CategoryList(object): self.categories.append(category) self.categories.sort(key=lambda cat: cat.weight) + def remove(self, name): + for category in self.categories: + if category.name == name: + self.categories.remove(category) + class ActionList(object): """ @@ -171,13 +187,102 @@ class ActionList(object): has a weight by which it is sorted when iterating through the list of actions or categories. """ + instance = None + def __init__(self): self.categories = CategoryList() - def add_action(self, action, category=u'Default', weight=None): + @staticmethod + def get_instance(): + if ActionList.instance is None: + ActionList.instance = ActionList() + return ActionList.instance + + def add_action(self, action, category=None, weight=None): + """ + Add an action to the list of actions. + + ``action`` + The action to add (QAction). **Note**, the action must not have an + empty ``objectName``. + + ``category`` + The category this action belongs to. The category can be a QString + or python unicode string. **Note**, if the category is ``None``, the + category and its actions are being hidden in the shortcut dialog. + However, if they are added, it is possible to avoid assigning + shortcuts twice, which is important. + + ``weight`` + The weight specifies how important a category is. However, this only + has an impact on the order the categories are displayed. + """ + if category is not None: + category = unicode(category) if category not in self.categories: self.categories.append(category) + action.defaultShortcuts = action.shortcuts() if weight is None: self.categories[category].actions.append(action) else: self.categories[category].actions.add(action, weight) + if category is None: + # Stop here, as this action is not configurable. + return + # Load the shortcut from the config. + settings = QtCore.QSettings() + settings.beginGroup(u'shortcuts') + shortcuts = settings.value(action.objectName(), + QtCore.QVariant(action.shortcuts())).toStringList() + action.setShortcuts( + [QtGui.QKeySequence(shortcut) for shortcut in shortcuts]) + settings.endGroup() + + def remove_action(self, action, category=None): + """ + This removes an action from its category. Empty categories are + automatically removed. + + ``action`` + The QAction object to be removed. + + ``category`` + The name (unicode string) of the category, which contains the + action. Defaults to None. + """ + if category is not None: + category = unicode(category) + if category not in self.categories: + return + self.categories[category].actions.remove(action) + # Remove empty categories. + if len(self.categories[category].actions) == 0: + self.categories.remove(category) + + def add_category(self, name, weight): + """ + Add an empty category to the list of categories. This is ony convenient + for categories with a given weight. + + ``name`` + The category's name. + + ``weight`` + The category's weight (int). + """ + if name in self.categories: + # Only change the weight and resort the categories again. + for category in self.categories: + if category.name == name: + category.weight = weight + self.categories.categories.sort(key=lambda cat: cat.weight) + return + self.categories.add(name, weight) + + +class CategoryOrder(object): + """ + An enumeration class for category weights. + """ + standardMenu = -20 + standardToolbar = -10 diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 9dbf9a779..7b57ee2bc 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,6 +29,7 @@ The :mod:`languagemanager` module provides all the translation settings and language file loading for OpenLP. """ import logging +import sys from PyQt4 import QtCore, QtGui @@ -55,8 +57,14 @@ class LanguageManager(object): language = QtCore.QLocale.system().name() lang_path = AppLocation.get_directory(AppLocation.LanguageDir) app_translator = QtCore.QTranslator() - if app_translator.load(language, lang_path): - return app_translator + app_translator.load(language, lang_path) + # A translator for buttons and other default strings provided by Qt. + if sys.platform != u'win32' and sys.platform != u'darwin': + lang_path = QtCore.QLibraryInfo.location( + QtCore.QLibraryInfo.TranslationsPath) + default_translator = QtCore.QTranslator() + default_translator.load(u'qt_%s' % language, lang_path) + return app_translator, default_translator @staticmethod def find_qm_files(): @@ -69,6 +77,8 @@ class LanguageManager(object): AppLocation.LanguageDir)) file_names = trans_dir.entryList(QtCore.QStringList(u'*.qm'), QtCore.QDir.Files, QtCore.QDir.Name) + # Remove qm files from the list which start with "qt_". + file_names = file_names.filter(QtCore.QRegExp("^(?!qt_)")) for name in file_names: file_names.replaceInStrings(name, trans_dir.filePath(name)) return file_names @@ -115,7 +125,7 @@ class LanguageManager(object): language = u'en' if action: action_name = unicode(action.objectName()) - if action_name == u'AutoLanguageItem': + if action_name == u'autoLanguageItem': LanguageManager.auto_language = True else: LanguageManager.auto_language = False diff --git a/openlp/plugins/__init__.py b/openlp/plugins/__init__.py index 7a160a316..48fe8cb77 100644 --- a/openlp/plugins/__init__.py +++ b/openlp/plugins/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/alerts/__init__.py b/openlp/plugins/alerts/__init__.py index 3a0892d49..006db9361 100644 --- a/openlp/plugins/alerts/__init__.py +++ b/openlp/plugins/alerts/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index db0ba3b7e..21db1972a 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,10 +27,12 @@ import logging -from PyQt4 import QtCore, QtGui +from PyQt4 import QtCore from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager +from openlp.core.lib.ui import icon_action, UiStrings +from openlp.core.utils.actions import ActionList from openlp.plugins.alerts.lib import AlertsManager, AlertsTab from openlp.plugins.alerts.lib.db import init_schema from openlp.plugins.alerts.forms import AlertForm @@ -40,10 +43,11 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Alerts', plugin_helpers, - settingsTabClass=AlertsTab) + Plugin.__init__(self, u'alerts', plugin_helpers, + settings_tab_class=AlertsTab) self.weight = -3 - self.icon = build_icon(u':/plugins/plugin_alerts.png') + self.icon_path = u':/plugins/plugin_alerts.png' + self.icon = build_icon(self.icon_path) self.alertsmanager = AlertsManager(self) self.manager = Manager(u'alerts', init_schema) self.alertForm = AlertForm(self) @@ -58,14 +62,13 @@ class AlertsPlugin(Plugin): use it as their parent. """ log.info(u'add tools menu') - self.toolsAlertItem = QtGui.QAction(tools_menu) - self.toolsAlertItem.setIcon(build_icon(u':/plugins/plugin_alerts.png')) - self.toolsAlertItem.setObjectName(u'toolsAlertItem') + self.toolsAlertItem = icon_action(tools_menu, u'toolsAlertItem', + u':/plugins/plugin_alerts.png') self.toolsAlertItem.setText(translate('AlertsPlugin', '&Alert')) self.toolsAlertItem.setStatusTip( translate('AlertsPlugin', 'Show an alert message.')) self.toolsAlertItem.setShortcut(u'F7') - self.serviceManager.mainwindow.ToolsMenu.addAction(self.toolsAlertItem) + self.serviceManager.mainwindow.toolsMenu.addAction(self.toolsAlertItem) QtCore.QObject.connect(self.toolsAlertItem, QtCore.SIGNAL(u'triggered()'), self.onAlertsTrigger) self.toolsAlertItem.setVisible(False) @@ -74,6 +77,8 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Initialising') Plugin.initialise(self) self.toolsAlertItem.setVisible(True) + action_list = ActionList.get_instance() + action_list.add_action(self.toolsAlertItem, UiStrings().Tools) self.liveController.alertTab = self.settings_tab def finalise(self): @@ -84,6 +89,8 @@ class AlertsPlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.toolsAlertItem.setVisible(False) + action_list = ActionList.get_instance() + action_list.remove_action(self.toolsAlertItem, u'Tools') def toggleAlertsState(self): self.alertsActive = not self.alertsActive @@ -97,7 +104,7 @@ class AlertsPlugin(Plugin): def about(self): about_text = translate('AlertsPlugin', 'Alerts Plugin' '
The alert plugin controls the displaying of nursery alerts ' - 'on the display screen') + 'on the display screen.') return about_text def setPluginTextStrings(self): @@ -113,3 +120,4 @@ class AlertsPlugin(Plugin): self.textStrings[StringContent.VisibleName] = { u'title': translate('AlertsPlugin', 'Alerts', 'container title') } + diff --git a/openlp/plugins/alerts/forms/__init__.py b/openlp/plugins/alerts/forms/__init__.py index bb4a9940f..3b11d7c92 100644 --- a/openlp/plugins/alerts/forms/__init__.py +++ b/openlp/plugins/alerts/forms/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/alerts/forms/alertdialog.py b/openlp/plugins/alerts/forms/alertdialog.py index da788f2bd..e42680165 100644 --- a/openlp/plugins/alerts/forms/alertdialog.py +++ b/openlp/plugins/alerts/forms/alertdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index b87ff3c5d..45d283f28 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -40,7 +41,7 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): Initialise the alert form """ self.manager = plugin.manager - self.parent = plugin + self.plugin = plugin self.item_id = None QtGui.QDialog.__init__(self, plugin.formparent) self.setupUi(self) @@ -61,6 +62,12 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): QtCore.QObject.connect(self.alertListWidget, QtCore.SIGNAL(u'currentRowChanged(int)'), self.onCurrentRowChanged) + def exec_(self): + self.displayButton.setEnabled(False) + self.displayCloseButton.setEnabled(False) + self.alertTextEdit.setText(u'') + return QtGui.QDialog.exec_(self) + def loadList(self): """ Loads the list with alerts. @@ -125,6 +132,12 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): # Only enable the button, if we are editing an item. if self.item_id: self.saveButton.setEnabled(True) + if self.alertTextEdit.text(): + self.displayButton.setEnabled(True) + self.displayCloseButton.setEnabled(True) + else: + self.displayButton.setEnabled(False) + self.displayCloseButton.setEnabled(False) def onDoubleClick(self): """ @@ -163,8 +176,8 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): # We found '<>' in the alert text, but the ParameterEdit field is empty. if text.find(u'<>') != -1 and not self.parameterEdit.text() and \ QtGui.QMessageBox.question(self, - translate('AlertPlugin.AlertForm', 'No Parameter Found'), - translate('AlertPlugin.AlertForm', 'You have not entered a ' + translate('AlertsPlugin.AlertForm', 'No Parameter Found'), + translate('AlertsPlugin.AlertForm', 'You have not entered a ' 'parameter to be replaced.\nDo you want to continue anyway?'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.No: @@ -174,15 +187,15 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): # in the alert text. elif text.find(u'<>') == -1 and self.parameterEdit.text() and \ QtGui.QMessageBox.question(self, - translate('AlertPlugin.AlertForm', 'No Placeholder Found'), - translate('AlertPlugin.AlertForm', 'The alert text does not' + translate('AlertsPlugin.AlertForm', 'No Placeholder Found'), + translate('AlertsPlugin.AlertForm', 'The alert text does not' ' contain \'<>\'.\nDo you want to continue anyway?'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.No: self.parameterEdit.setFocus() return False text = text.replace(u'<>', unicode(self.parameterEdit.text())) - self.parent.alertsmanager.displayAlert(text) + self.plugin.alertsmanager.displayAlert(text) return True def onCurrentRowChanged(self, row): diff --git a/openlp/plugins/alerts/lib/__init__.py b/openlp/plugins/alerts/lib/__init__.py index 39cbbfe59..780f295a8 100644 --- a/openlp/plugins/alerts/lib/__init__.py +++ b/openlp/plugins/alerts/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index d12fb41ec..f2cb1eb4b 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -39,8 +40,7 @@ class AlertsManager(QtCore.QObject): log.info(u'Alert Manager loaded') def __init__(self, parent): - QtCore.QObject.__init__(self) - self.parent = parent + QtCore.QObject.__init__(self, parent) self.screen = None self.timer_id = 0 self.alertList = [] @@ -84,8 +84,8 @@ class AlertsManager(QtCore.QObject): if len(self.alertList) == 0: return text = self.alertList.pop(0) - alertTab = self.parent.settings_tab - self.parent.liveController.display.alert(text) + alertTab = self.parent().settings_tab + self.parent().liveController.display.alert(text) # Check to see if we have a timer running. if self.timer_id == 0: self.timer_id = self.startTimer(int(alertTab.timeout) * 1000) @@ -100,7 +100,7 @@ class AlertsManager(QtCore.QObject): """ log.debug(u'timer event') if event.timerId() == self.timer_id: - self.parent.liveController.display.alert(u'') + self.parent().liveController.display.alert(u'') self.killTimer(self.timer_id) self.timer_id = 0 self.generateAlert() diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 64a9801ca..0a1eb3e75 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,8 +34,8 @@ class AlertsTab(SettingsTab): """ AlertsTab is the alerts settings tab in the settings dialog. """ - def __init__(self, name, visible_title): - SettingsTab.__init__(self, name, visible_title) + def __init__(self, parent, name, visible_title, icon_path): + SettingsTab.__init__(self, parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName(u'AlertsTab') @@ -109,12 +110,12 @@ class AlertsTab(SettingsTab): translate('AlertsPlugin.AlertsTab', 'Background color:')) self.FontSizeLabel.setText( translate('AlertsPlugin.AlertsTab', 'Font size:')) - self.FontSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.FontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.TimeoutLabel.setText( translate('AlertsPlugin.AlertsTab', 'Alert timeout:')) - self.TimeoutSpinBox.setSuffix(UiStrings.Seconds) - self.PreviewGroupBox.setTitle(UiStrings.Preview) - self.FontPreview.setText(UiStrings.OLPV2) + self.TimeoutSpinBox.setSuffix(UiStrings().Seconds) + self.PreviewGroupBox.setTitle(UiStrings().Preview) + self.FontPreview.setText(UiStrings().OLPV2) def onBackgroundColorButtonClicked(self): new_color = QtGui.QColorDialog.getColor( @@ -192,3 +193,4 @@ class AlertsTab(SettingsTab): self.FontPreview.setFont(font) self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % (self.bg_color, self.font_color)) + diff --git a/openlp/plugins/alerts/lib/db.py b/openlp/plugins/alerts/lib/db.py index 72c671620..b5c4f8d60 100644 --- a/openlp/plugins/alerts/lib/db.py +++ b/openlp/plugins/alerts/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/bibles/__init__.py b/openlp/plugins/bibles/__init__.py index 5a2035e13..d468ae0dc 100644 --- a/openlp/plugins/bibles/__init__.py +++ b/openlp/plugins/bibles/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 4f677f211..619581b17 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,7 +30,10 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate +from openlp.core.lib.ui import base_action, UiStrings +from openlp.core.utils.actions import ActionList from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem +from openlp.plugins.bibles.forms import BibleUpgradeForm log = logging.getLogger(__name__) @@ -37,7 +41,7 @@ class BiblePlugin(Plugin): log.info(u'Bible Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Bibles', plugin_helpers, + Plugin.__init__(self, u'bibles', plugin_helpers, BibleMediaItem, BiblesTab) self.weight = -9 self.icon_path = u':/plugins/plugin_bibles.png' @@ -50,8 +54,14 @@ class BiblePlugin(Plugin): self.manager = BibleManager(self) Plugin.initialise(self) self.importBibleItem.setVisible(True) + action_list = ActionList.get_instance() + action_list.add_action(self.importBibleItem, UiStrings().Import) + # Do not add the action to the list yet. + #action_list.add_action(self.exportBibleItem, UiStrings().Export) # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) + if len(self.manager.old_bible_databases): + self.toolsUpgradeItem.setVisible(True) def finalise(self): """ @@ -60,34 +70,80 @@ class BiblePlugin(Plugin): log.info(u'Plugin Finalise') self.manager.finalise() Plugin.finalise(self) + action_list = ActionList.get_instance() + action_list.remove_action(self.importBibleItem, UiStrings().Import) self.importBibleItem.setVisible(False) + #action_list.remove_action(self.exportBibleItem, UiStrings().Export) self.exportBibleItem.setVisible(False) + def appStartup(self): + """ + Perform tasks on application starup + """ + if len(self.manager.old_bible_databases): + if QtGui.QMessageBox.information(self.formparent, + translate('OpenLP', 'Information'), translate('OpenLP', + 'Bible format has changed.\nYou have to upgrade your ' + 'existing Bibles.\nShould OpenLP upgrade now?'), + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No)) == QtGui.QMessageBox.Yes: + self.onToolsUpgradeItemTriggered() + def addImportMenuItem(self, import_menu): - self.importBibleItem = QtGui.QAction(import_menu) - self.importBibleItem.setObjectName(u'importBibleItem') + self.importBibleItem = base_action(import_menu, u'importBibleItem') + self.importBibleItem.setText(translate('BiblesPlugin', '&Bible')) import_menu.addAction(self.importBibleItem) - self.importBibleItem.setText( - translate('BiblesPlugin', '&Bible')) # signals and slots QtCore.QObject.connect(self.importBibleItem, QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick) self.importBibleItem.setVisible(False) def addExportMenuItem(self, export_menu): - self.exportBibleItem = QtGui.QAction(export_menu) - self.exportBibleItem.setObjectName(u'exportBibleItem') - export_menu.addAction(self.exportBibleItem) + self.exportBibleItem = base_action(export_menu, u'exportBibleItem') self.exportBibleItem.setText(translate('BiblesPlugin', '&Bible')) + export_menu.addAction(self.exportBibleItem) self.exportBibleItem.setVisible(False) + def addToolsMenuItem(self, tools_menu): + """ + Give the bible plugin the opportunity to add items to the + **Tools** menu. + + ``tools_menu`` + The actual **Tools** menu item, so that your actions can + use it as their parent. + """ + log.debug(u'add tools menu') + self.toolsUpgradeItem = QtGui.QAction(tools_menu) + self.toolsUpgradeItem.setObjectName(u'toolsUpgradeItem') + self.toolsUpgradeItem.setText( + translate('BiblesPlugin', '&Upgrade older Bibles')) + self.toolsUpgradeItem.setStatusTip( + translate('BiblesPlugin', 'Upgrade the Bible databases to the ' + 'latest format.')) + tools_menu.addAction(self.toolsUpgradeItem) + QtCore.QObject.connect(self.toolsUpgradeItem, + QtCore.SIGNAL(u'triggered()'), self.onToolsUpgradeItemTriggered) + self.toolsUpgradeItem.setVisible(False) + + def onToolsUpgradeItemTriggered(self): + """ + Upgrade older bible databases. + """ + if not hasattr(self, u'upgrade_wizard'): + self.upgrade_wizard = BibleUpgradeForm(self.formparent, + self.manager, self) + # If the import was not cancelled then reload. + if self.upgrade_wizard.exec_(): + self.mediaItem.reloadBibles() + def onBibleImportClick(self): if self.mediaItem: self.mediaItem.onImportClick() def about(self): about_text = translate('BiblesPlugin', 'Bible Plugin' - '
The Bible plugin provides the ability to display bible ' + '
The Bible plugin provides the ability to display Bible ' 'verses from different sources during the service.') return about_text @@ -131,13 +187,14 @@ class BiblePlugin(Plugin): # Middle Header Bar tooltips = { u'load': u'', - u'import': translate('BiblesPlugin', 'Import a Bible'), - u'new': translate('BiblesPlugin', 'Add a new Bible'), - u'edit': translate('BiblesPlugin', 'Edit the selected Bible'), - u'delete': translate('BiblesPlugin', 'Delete the selected Bible'), - u'preview': translate('BiblesPlugin', 'Preview the selected Bible'), - u'live': translate('BiblesPlugin', 'Send the selected Bible live'), + u'import': translate('BiblesPlugin', 'Import a Bible.'), + u'new': translate('BiblesPlugin', 'Add a new Bible.'), + u'edit': translate('BiblesPlugin', 'Edit the selected Bible.'), + u'delete': translate('BiblesPlugin', 'Delete the selected Bible.'), + u'preview': translate('BiblesPlugin', + 'Preview the selected Bible.'), + u'live': translate('BiblesPlugin', 'Send the selected Bible live.'), u'service': translate('BiblesPlugin', - 'Add the selected Bible to the service') + 'Add the selected Bible to the service.') } self.setPluginUiTextStrings(tooltips) diff --git a/openlp/plugins/bibles/forms/__init__.py b/openlp/plugins/bibles/forms/__init__.py index e6897e53f..5b19d9f24 100644 --- a/openlp/plugins/bibles/forms/__init__.py +++ b/openlp/plugins/bibles/forms/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -50,7 +51,10 @@ This allows OpenLP to use ``self.object`` for all the GUI elements while keeping them separate from the functionality, so that it is easier to recreate the GUI from the .ui files later if necessary. """ - +from booknameform import BookNameForm +from languageform import LanguageForm from bibleimportform import BibleImportForm +from bibleupgradeform import BibleUpgradeForm -__all__ = ['BibleImportForm'] +__all__ = [u'BookNameForm', u'LanguageForm', u'BibleImportForm', + u'BibleUpgradeForm'] diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 117ffaf4c..b5478e514 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,10 +27,10 @@ """ The bible import functions for OpenLP """ -import csv import logging import os import os.path +import locale from PyQt4 import QtCore, QtGui @@ -37,8 +38,9 @@ from openlp.core.lib import Receiver, translate from openlp.core.lib.db import delete_database from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import AppLocation, string_is_unicode +from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.manager import BibleFormat +from openlp.plugins.bibles.lib.db import BiblesResourcesDB, clean_filename log = logging.getLogger(__name__) @@ -85,8 +87,18 @@ class BibleImportForm(OpenLPWizard): """ OpenLPWizard.setupUi(self, image) QtCore.QObject.connect(self.formatComboBox, - QtCore.SIGNAL(u'currentIndexChanged(int)'), self.selectStack, - QtCore.SLOT(u'setCurrentIndex(int)')) + QtCore.SIGNAL(u'currentIndexChanged(int)'), + self.onCurrentIndexChanged) + + def onCurrentIndexChanged(self, index): + """ + Called when the format combo box's index changed. We have to check if + the import is available and accordingly to disable or enable the next + button. + """ + self.selectStack.setCurrentIndex(index) + next_button = self.button(QtGui.QWizard.NextButton) + next_button.setEnabled(BibleFormat.get_availability(index)) def customInit(self): """ @@ -113,9 +125,6 @@ class BibleImportForm(OpenLPWizard): QtCore.QObject.connect(self.osisBrowseButton, QtCore.SIGNAL(u'clicked()'), self.onOsisBrowseButtonClicked) - QtCore.QObject.connect(self.csvTestamentsButton, - QtCore.SIGNAL(u'clicked()'), - self.onCsvTestamentsBrowseButtonClicked) QtCore.QObject.connect(self.csvBooksButton, QtCore.SIGNAL(u'clicked()'), self.onCsvBooksBrowseButtonClicked) @@ -176,18 +185,6 @@ class BibleImportForm(OpenLPWizard): self.csvLayout = QtGui.QFormLayout(self.csvWidget) self.csvLayout.setMargin(0) self.csvLayout.setObjectName(u'CsvLayout') - self.csvTestamentsLabel = QtGui.QLabel(self.csvWidget) - self.csvTestamentsLabel.setObjectName(u'CsvTestamentsLabel') - self.csvTestamentsLayout = QtGui.QHBoxLayout() - self.csvTestamentsLayout.setObjectName(u'CsvTestamentsLayout') - self.csvTestamentsEdit = QtGui.QLineEdit(self.csvWidget) - self.csvTestamentsEdit.setObjectName(u'CsvTestamentsEdit') - self.csvTestamentsLayout.addWidget(self.csvTestamentsEdit) - self.csvTestamentsButton = QtGui.QToolButton(self.csvWidget) - self.csvTestamentsButton.setIcon(self.openIcon) - self.csvTestamentsButton.setObjectName(u'CsvTestamentsButton') - self.csvTestamentsLayout.addWidget(self.csvTestamentsButton) - self.csvLayout.addRow(self.csvTestamentsLabel, self.csvTestamentsLayout) self.csvBooksLabel = QtGui.QLabel(self.csvWidget) self.csvBooksLabel.setObjectName(u'CsvBooksLabel') self.csvBooksLayout = QtGui.QHBoxLayout() @@ -367,13 +364,11 @@ class BibleImportForm(OpenLPWizard): self.formatComboBox.setItemText(BibleFormat.OpenSong, WizardStrings.OS) self.formatComboBox.setItemText(BibleFormat.WebDownload, translate('BiblesPlugin.ImportWizardForm', 'Web Download')) - self.formatComboBox.setItemText(BibleFormat.OpenLP1, UiStrings.OLPV1) + self.formatComboBox.setItemText(BibleFormat.OpenLP1, UiStrings().OLPV1) self.openlp1FileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Bible file:')) self.osisFileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Bible file:')) - self.csvTestamentsLabel.setText( - translate('BiblesPlugin.ImportWizardForm', 'Testaments file:')) self.csvBooksLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Books file:')) self.csvVersesLabel.setText( @@ -424,7 +419,6 @@ class BibleImportForm(OpenLPWizard): # Align all QFormLayouts towards each other. labelWidth = max(self.formatLabel.minimumSizeHint().width(), self.osisFileLabel.minimumSizeHint().width(), - self.csvTestamentsLabel.minimumSizeHint().width(), self.csvBooksLabel.minimumSizeHint().width(), self.csvVersesLabel.minimumSizeHint().width(), self.openSongFileLabel.minimumSizeHint().width(), @@ -441,28 +435,20 @@ class BibleImportForm(OpenLPWizard): elif self.currentPage() == self.selectPage: if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS: if not self.field(u'osis_location').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.OSIS) self.osisFileEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV: - if not self.field(u'csv_testamentsfile').toString(): - answer = critical_error_message_box(UiStrings.NFSs, - translate('BiblesPlugin.ImportWizardForm', - 'You have not specified a testaments file. Do you ' - 'want to proceed with the import?'), question=True) - if answer == QtGui.QMessageBox.No: - self.csvTestamentsEdit.setFocus() - return False if not self.field(u'csv_booksfile').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file with books of ' 'the Bible to use in the import.')) self.csvBooksEdit.setFocus() return False elif not self.field(u'csv_versefile').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file of Bible ' 'verses to import.')) @@ -471,14 +457,14 @@ class BibleImportForm(OpenLPWizard): elif self.field(u'source_format').toInt()[0] == \ BibleFormat.OpenSong: if not self.field(u'opensong_file').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.OS) self.openSongFileEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenLP1: if not self.field(u'openlp1_location').toString(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV1) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV1) self.openlp1FileEdit.setFocus() return False return True @@ -486,14 +472,15 @@ class BibleImportForm(OpenLPWizard): license_version = unicode(self.field(u'license_version').toString()) license_copyright = \ unicode(self.field(u'license_copyright').toString()) + path = AppLocation.get_section_data_path(u'bibles') if not license_version: - critical_error_message_box(UiStrings.EmptyField, + critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a version name for your Bible.')) self.versionNameEdit.setFocus() return False elif not license_copyright: - critical_error_message_box(UiStrings.EmptyField, + critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.ImportWizardForm', 'You need to set a copyright for your Bible. ' 'Bibles in the Public Domain need to be marked as such.')) @@ -507,6 +494,15 @@ class BibleImportForm(OpenLPWizard): 'a different Bible or first delete the existing one.')) self.versionNameEdit.setFocus() return False + elif os.path.exists(os.path.join(path, clean_filename( + license_version))): + critical_error_message_box( + translate('BiblesPlugin.ImportWizardForm', 'Bible Exists'), + translate('BiblesPlugin.ImportWizardForm', + 'This Bible already exists. Please import ' + 'a different Bible or first delete the existing one.')) + self.versionNameEdit.setFocus() + return False return True if self.currentPage() == self.progressPage: return True @@ -521,7 +517,7 @@ class BibleImportForm(OpenLPWizard): """ self.webTranslationComboBox.clear() bibles = self.web_bible_list[index].keys() - bibles.sort() + bibles.sort(cmp=locale.strcoll) self.webTranslationComboBox.addItems(bibles) def onOsisBrowseButtonClicked(self): @@ -531,14 +527,6 @@ class BibleImportForm(OpenLPWizard): self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.OSIS, self.osisFileEdit) - def onCsvTestamentsBrowseButtonClicked(self): - """ - Show the file open dialog for the testaments CSV file. - """ - self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.CSV, - self.csvTestamentsEdit, u'%s (*.csv)' - % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) - def onCsvBooksBrowseButtonClicked(self): """ Show the file open dialog for the books CSV file. @@ -566,7 +554,7 @@ class BibleImportForm(OpenLPWizard): """ Show the file open dialog for the openlp.org 1.x file. """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV1, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openlp1FileEdit, u'%s (*.bible)' % translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x Bible Files')) @@ -577,8 +565,6 @@ class BibleImportForm(OpenLPWizard): """ self.selectPage.registerField(u'source_format', self.formatComboBox) self.selectPage.registerField(u'osis_location', self.osisFileEdit) - self.selectPage.registerField( - u'csv_testamentsfile', self.csvTestamentsEdit) self.selectPage.registerField(u'csv_booksfile', self.csvBooksEdit) self.selectPage.registerField(u'csv_versefile', self.csvVersesEdit) self.selectPage.registerField(u'opensong_file', self.openSongFileEdit) @@ -607,7 +593,6 @@ class BibleImportForm(OpenLPWizard): self.cancelButton.setVisible(True) self.setField(u'source_format', QtCore.QVariant(0)) self.setField(u'osis_location', QtCore.QVariant('')) - self.setField(u'csv_testamentsfile', QtCore.QVariant('')) self.setField(u'csv_booksfile', QtCore.QVariant('')) self.setField(u'csv_versefile', QtCore.QVariant('')) self.setField(u'opensong_file', QtCore.QVariant('')) @@ -634,46 +619,27 @@ class BibleImportForm(OpenLPWizard): """ Load the lists of Crosswalk, BibleGateway and Bibleserver bibles. """ - filepath = AppLocation.get_directory(AppLocation.PluginsDir) - filepath = os.path.join(filepath, u'bibles', u'resources') # Load Crosswalk Bibles. - self.loadBibleResourceFile( - os.path.join(filepath, u'crosswalkbooks.csv'), - WebDownload.Crosswalk) + self.loadBibleResource(WebDownload.Crosswalk) # Load BibleGateway Bibles. - self.loadBibleResourceFile(os.path.join(filepath, u'biblegateway.csv'), - WebDownload.BibleGateway) + self.loadBibleResource(WebDownload.BibleGateway) # Load and Bibleserver Bibles. - self.loadBibleResourceFile(os.path.join(filepath, u'bibleserver.csv'), - WebDownload.Bibleserver) + self.loadBibleResource(WebDownload.Bibleserver) - def loadBibleResourceFile(self, file_path_name, download_type): + def loadBibleResource(self, download_type): """ - Loads a web bible resource file. - - ``file_path_name`` - The file to load including the file's path. + Loads a web bible from bible_resources.sqlite. ``download_type`` - The WebDownload type this file is for. + The WebDownload type e.g. bibleserver. """ self.web_bible_list[download_type] = {} - books_file = None - try: - books_file = open(file_path_name, 'rb') - dialect = csv.Sniffer().sniff(books_file.read(1024)) - books_file.seek(0) - books_reader = csv.reader(books_file, dialect) - for line in books_reader: - ver = string_is_unicode(line[0]) - name = string_is_unicode(line[1]) - self.web_bible_list[download_type][ver] = name.strip() - except IOError: - log.exception(u'%s resources missing' % - WebDownload.Names[download_type]) - finally: - if books_file: - books_file.close() + bibles = BiblesResourcesDB.get_webbibles( + WebDownload.Names[download_type]) + for bible in bibles: + version = bible[u'name'] + name = bible[u'abbreviation'] + self.web_bible_list[download_type][version] = name.strip() def preWizard(self): """ @@ -684,7 +650,7 @@ class BibleImportForm(OpenLPWizard): if bible_type == BibleFormat.WebDownload: self.progressLabel.setText(translate( 'BiblesPlugin.ImportWizardForm', - 'Starting Registering bible...')) + 'Registering Bible...')) else: self.progressLabel.setText(WizardStrings.StartingImport) Receiver.send_message(u'openlp_process_events') @@ -708,8 +674,7 @@ class BibleImportForm(OpenLPWizard): elif bible_type == BibleFormat.CSV: # Import a CSV bible. importer = self.manager.import_bible(BibleFormat.CSV, - name=license_version, testamentsfile=unicode( - self.field(u'csv_testamentsfile').toString()), + name=license_version, booksfile=unicode(self.field(u'csv_booksfile').toString()), versefile=unicode(self.field(u'csv_versefile').toString()) ) @@ -740,14 +705,14 @@ class BibleImportForm(OpenLPWizard): name=license_version, filename=unicode(self.field(u'openlp1_location').toString()) ) - if importer.do_import(): + if importer.do_import(license_version): self.manager.save_meta_data(license_version, license_version, license_copyright, license_permissions) self.manager.reload_bibles() if bible_type == BibleFormat.WebDownload: self.progressLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Registered ' - 'bible. Please note, that verses will be downloaded on\n' + 'Bible. Please note, that verses will be downloaded on\n' 'demand and thus an internet connection is required.')) else: self.progressLabel.setText(WizardStrings.FinishedImport) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py new file mode 100644 index 000000000..615d4231e --- /dev/null +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -0,0 +1,782 @@ +# -*- 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, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### +""" +The bible import functions for OpenLP +""" +import logging +import os +import shutil + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import Receiver, SettingsManager, translate, \ + check_directory_exists +from openlp.core.lib.db import delete_database +from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.ui.wizard import OpenLPWizard, WizardStrings +from openlp.core.utils import AppLocation, delete_file +from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \ + BiblesResourcesDB, clean_filename +from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract + +log = logging.getLogger(__name__) + + +class BibleUpgradeForm(OpenLPWizard): + """ + This is the Bible Upgrade Wizard, which allows easy importing of Bibles + into OpenLP from older OpenLP2 database versions. + """ + log.info(u'BibleUpgradeForm loaded') + + def __init__(self, parent, manager, bibleplugin): + """ + Instantiate the wizard, and run any extra setup we need to. + + ``parent`` + The QWidget-derived parent of the wizard. + + ``manager`` + The Bible manager. + + ``bibleplugin`` + The Bible plugin. + """ + self.manager = manager + self.mediaItem = bibleplugin.mediaItem + self.suffix = u'.sqlite' + self.settingsSection = u'bibles' + self.path = AppLocation.get_section_data_path(self.settingsSection) + self.files = self.manager.old_bible_databases + self.success = {} + self.newbibles = {} + OpenLPWizard.__init__(self, parent, bibleplugin, u'bibleUpgradeWizard', + u':/wizards/wizard_importbible.bmp') + + def setupUi(self, image): + """ + Set up the UI for the bible wizard. + """ + OpenLPWizard.setupUi(self, image) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) + + def stop_import(self): + """ + Stops the import of the Bible. + """ + log.debug(u'Stopping import') + self.stop_import_flag = True + + def onCheckBoxIndexChanged(self, index): + """ + Show/Hide warnings if CheckBox state has changed + """ + for number, filename in enumerate(self.files): + if not self.checkBox[number].checkState() == QtCore.Qt.Checked: + self.verticalWidget[number].hide() + self.formWidget[number].hide() + else: + version_name = unicode(self.versionNameEdit[number].text()) + if self.manager.exists(version_name): + self.verticalWidget[number].show() + self.formWidget[number].show() + + def reject(self): + """ + Stop the wizard on cancel button, close button or ESC key. + """ + log.debug(u'Wizard cancelled by user') + self.stop_import_flag = True + if not self.currentPage() == self.progressPage: + self.done(QtGui.QDialog.Rejected) + else: + self.postWizard() + + def onCurrentIdChanged(self, pageId): + """ + Perform necessary functions depending on which wizard page is active. + """ + if self.page(pageId) == self.progressPage: + self.preWizard() + self.performWizard() + self.postWizard() + elif self.page(pageId) == self.selectPage and self.maxBibles == 0: + self.next() + + def onBackupBrowseButtonClicked(self): + """ + Show the file open dialog for the OSIS file. + """ + filename = QtGui.QFileDialog.getExistingDirectory(self, translate( + 'BiblesPlugin.UpgradeWizardForm', 'Select a Backup Directory'), + os.path.dirname(SettingsManager.get_last_dir( + self.plugin.settingsSection, 1))) + if filename: + self.backupDirectoryEdit.setText(filename) + SettingsManager.set_last_dir(self.plugin.settingsSection, + filename, 1) + + def onNoBackupCheckBoxToggled(self, checked): + """ + Enable or disable the backup directory widgets. + """ + self.backupDirectoryEdit.setEnabled(not checked) + self.backupBrowseButton.setEnabled(not checked) + + def backupOldBibles(self, backup_directory): + """ + Backup old bible databases in a given folder. + """ + check_directory_exists(backup_directory) + success = True + for filename in self.files: + try: + shutil.copy(os.path.join(self.path, filename[0]), + backup_directory) + except: + success = False + return success + + def customInit(self): + """ + Perform any custom initialisation for bible upgrading. + """ + self.manager.set_process_dialog(self) + self.restart() + + def customSignals(self): + """ + Set up the signals used in the bible importer. + """ + QtCore.QObject.connect(self.backupBrowseButton, + QtCore.SIGNAL(u'clicked()'), self.onBackupBrowseButtonClicked) + QtCore.QObject.connect(self.noBackupCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.onNoBackupCheckBoxToggled) + + def addCustomPages(self): + """ + Add the bible import specific wizard pages. + """ + # Backup Page + self.backupPage = QtGui.QWizardPage() + self.backupPage.setObjectName(u'BackupPage') + self.backupLayout = QtGui.QVBoxLayout(self.backupPage) + self.backupLayout.setObjectName(u'BackupLayout') + self.backupInfoLabel = QtGui.QLabel(self.backupPage) + self.backupInfoLabel.setOpenExternalLinks(True) + self.backupInfoLabel.setTextFormat(QtCore.Qt.RichText) + self.backupInfoLabel.setWordWrap(True) + self.backupInfoLabel.setObjectName(u'backupInfoLabel') + self.backupLayout.addWidget(self.backupInfoLabel) + self.selectLabel = QtGui.QLabel(self.backupPage) + self.selectLabel.setObjectName(u'selectLabel') + self.backupLayout.addWidget(self.selectLabel) + self.formLayout = QtGui.QFormLayout() + self.formLayout.setMargin(0) + self.formLayout.setObjectName(u'FormLayout') + self.backupDirectoryLabel = QtGui.QLabel(self.backupPage) + self.backupDirectoryLabel.setObjectName(u'backupDirectoryLabel') + self.backupDirectoryLayout = QtGui.QHBoxLayout() + self.backupDirectoryLayout.setObjectName(u'BackupDirectoryLayout') + self.backupDirectoryEdit = QtGui.QLineEdit(self.backupPage) + self.backupDirectoryEdit.setObjectName(u'BackupFolderEdit') + self.backupDirectoryLayout.addWidget(self.backupDirectoryEdit) + self.backupBrowseButton = QtGui.QToolButton(self.backupPage) + self.backupBrowseButton.setIcon(self.openIcon) + self.backupBrowseButton.setObjectName(u'BackupBrowseButton') + self.backupDirectoryLayout.addWidget(self.backupBrowseButton) + self.formLayout.addRow(self.backupDirectoryLabel, + self.backupDirectoryLayout) + self.backupLayout.addLayout(self.formLayout) + self.noBackupCheckBox = QtGui.QCheckBox(self.backupPage) + self.noBackupCheckBox.setObjectName('NoBackupCheckBox') + self.backupLayout.addWidget(self.noBackupCheckBox) + self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Minimum) + self.backupLayout.addItem(self.spacer) + self.addPage(self.backupPage) + # Select Page + self.selectPage = QtGui.QWizardPage() + self.selectPage.setObjectName(u'SelectPage') + self.pageLayout = QtGui.QVBoxLayout(self.selectPage) + self.pageLayout.setObjectName(u'pageLayout') + self.scrollArea = QtGui.QScrollArea(self.selectPage) + self.scrollArea.setWidgetResizable(True) + self.scrollArea.setObjectName(u'scrollArea') + self.scrollArea.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) + self.scrollAreaContents = QtGui.QWidget(self.scrollArea) + self.scrollAreaContents.setObjectName(u'scrollAreaContents') + self.formLayout = QtGui.QVBoxLayout(self.scrollAreaContents) + self.formLayout.setSpacing(2) + self.formLayout.setObjectName(u'formLayout') + self.addScrollArea() + self.pageLayout.addWidget(self.scrollArea) + self.addPage(self.selectPage) + + def addScrollArea(self): + """ + Add the content to the scrollArea. + """ + self.checkBox = {} + self.versionNameEdit = {} + self.versionNameLabel = {} + self.versionInfoLabel = {} + self.versionInfoPixmap = {} + self.verticalWidget = {} + self.horizontalLayout = {} + self.formWidget = {} + self.formLayoutAttention = {} + for number, filename in enumerate(self.files): + bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0]) + self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents) + checkBoxName = u'checkBox[%d]' % number + self.checkBox[number].setObjectName(checkBoxName) + self.checkBox[number].setText(bible.get_name()) + self.checkBox[number].setCheckState(QtCore.Qt.Checked) + self.formLayout.addWidget(self.checkBox[number]) + self.verticalWidget[number] = QtGui.QWidget(self.scrollAreaContents) + verticalWidgetName = u'verticalWidget[%d]' % number + self.verticalWidget[number].setObjectName(verticalWidgetName) + self.horizontalLayout[number] = QtGui.QHBoxLayout( + self.verticalWidget[number]) + self.horizontalLayout[number].setContentsMargins(25, 0, 0, 0) + horizontalLayoutName = u'horizontalLayout[%d]' % number + self.horizontalLayout[number].setObjectName(horizontalLayoutName) + self.versionInfoPixmap[number] = QtGui.QLabel( + self.verticalWidget[number]) + versionInfoPixmapName = u'versionInfoPixmap[%d]' % number + self.versionInfoPixmap[number].setObjectName(versionInfoPixmapName) + self.versionInfoPixmap[number].setPixmap(QtGui.QPixmap( + u':/bibles/bibles_upgrade_alert.png')) + self.versionInfoPixmap[number].setAlignment(QtCore.Qt.AlignRight) + self.horizontalLayout[number].addWidget( + self.versionInfoPixmap[number]) + self.versionInfoLabel[number] = QtGui.QLabel( + self.verticalWidget[number]) + versionInfoLabelName = u'versionInfoLabel[%d]' % number + self.versionInfoLabel[number].setObjectName(versionInfoLabelName) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, + QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.versionInfoLabel[number].sizePolicy().hasHeightForWidth()) + self.versionInfoLabel[number].setSizePolicy(sizePolicy) + self.horizontalLayout[number].addWidget( + self.versionInfoLabel[number]) + self.formLayout.addWidget(self.verticalWidget[number]) + self.formWidget[number] = QtGui.QWidget(self.scrollAreaContents) + formWidgetName = u'formWidget[%d]' % number + self.formWidget[number].setObjectName(formWidgetName) + self.formLayoutAttention[number] = QtGui.QFormLayout( + self.formWidget[number]) + self.formLayoutAttention[number].setContentsMargins(25, 0, 0, 5) + formLayoutAttentionName = u'formLayoutAttention[%d]' % number + self.formLayoutAttention[number].setObjectName( + formLayoutAttentionName) + self.versionNameLabel[number] = QtGui.QLabel( + self.formWidget[number]) + self.versionNameLabel[number].setObjectName(u'VersionNameLabel') + self.formLayoutAttention[number].setWidget(0, + QtGui.QFormLayout.LabelRole, self.versionNameLabel[number]) + self.versionNameEdit[number] = QtGui.QLineEdit( + self.formWidget[number]) + self.versionNameEdit[number].setObjectName(u'VersionNameEdit') + self.formLayoutAttention[number].setWidget(0, + QtGui.QFormLayout.FieldRole, self.versionNameEdit[number]) + self.versionNameEdit[number].setText(bible.get_name()) + self.formLayout.addWidget(self.formWidget[number]) + # Set up the Signal for the checkbox. + QtCore.QObject.connect(self.checkBox[number], + QtCore.SIGNAL(u'stateChanged(int)'), + self.onCheckBoxIndexChanged) + self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, + QtGui.QSizePolicy.Expanding) + self.formLayout.addItem(self.spacerItem) + self.scrollArea.setWidget(self.scrollAreaContents) + + def clearScrollArea(self): + """ + Remove the content from the scrollArea. + """ + for number, filename in enumerate(self.files): + self.formLayout.removeWidget(self.checkBox[number]) + self.checkBox[number].setParent(None) + self.horizontalLayout[number].removeWidget( + self.versionInfoPixmap[number]) + self.versionInfoPixmap[number].setParent(None) + self.horizontalLayout[number].removeWidget( + self.versionInfoLabel[number]) + self.versionInfoLabel[number].setParent(None) + self.formLayout.removeWidget(self.verticalWidget[number]) + self.verticalWidget[number].setParent(None) + self.formLayoutAttention[number].removeWidget( + self.versionNameLabel[number]) + self.versionNameLabel[number].setParent(None) + self.formLayoutAttention[number].removeWidget( + self.versionNameEdit[number]) + self.formLayoutAttention[number].deleteLater() + self.versionNameEdit[number].setParent(None) + self.formLayout.removeWidget(self.formWidget[number]) + self.formWidget[number].setParent(None) + self.formLayout.removeItem(self.spacerItem) + + def retranslateUi(self): + """ + Allow for localisation of the bible import wizard. + """ + self.setWindowTitle(translate('BiblesPlugin.UpgradeWizardForm', + 'Bible Upgrade Wizard')) + self.titleLabel.setText(WizardStrings.HeaderStyle % + translate('OpenLP.Ui', 'Welcome to the Bible Upgrade Wizard')) + self.informationLabel.setText( + translate('BiblesPlugin.UpgradeWizardForm', + 'This wizard will help you to upgrade your existing Bibles from a ' + 'prior version of OpenLP 2. Click the next button below to start ' + 'the upgrade process.')) + self.backupPage.setTitle( + translate('BiblesPlugin.UpgradeWizardForm', + 'Select Backup Directory')) + self.backupPage.setSubTitle( + translate('BiblesPlugin.UpgradeWizardForm', + 'Please select a backup directory for your Bibles')) + self.backupInfoLabel.setText(translate('BiblesPlugin.UpgradeWizardForm', + 'Previous releases of OpenLP 2.0 are unable to use upgraded Bibles.' + ' This will create a backup of your current Bibles so that you can ' + 'simply copy the files back to your OpenLP data directory if you ' + 'need to revert to a previous release of OpenLP. Instructions on ' + 'how to restore the files can be found in our Frequently Asked Questions.')) + self.selectLabel.setText(translate('BiblesPlugin.UpgradeWizardForm', + 'Please select a backup location for your Bibles.')) + self.backupDirectoryLabel.setText( + translate('BiblesPlugin.UpgradeWizardForm', 'Backup Directory:')) + self.noBackupCheckBox.setText( + translate('BiblesPlugin.UpgradeWizardForm', + 'There is no need to backup my Bibles')) + self.selectPage.setTitle( + translate('BiblesPlugin.UpgradeWizardForm', + 'Select Bibles')) + self.selectPage.setSubTitle( + translate('BiblesPlugin.UpgradeWizardForm', + 'Please select the Bibles to upgrade')) + for number, bible in enumerate(self.files): + self.versionNameLabel[number].setText( + translate('BiblesPlugin.UpgradeWizardForm', 'Version name:')) + self.versionInfoLabel[number].setText( + translate('BiblesPlugin.UpgradeWizardForm', 'This ' + 'Bible still exists. Please change the name or uncheck it.')) + self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm', + 'Upgrading')) + self.progressPage.setSubTitle( + translate('BiblesPlugin.UpgradeWizardForm', + 'Please wait while your Bibles are upgraded.')) + self.progressLabel.setText(WizardStrings.Ready) + self.progressBar.setFormat(u'%p%') + + def validateCurrentPage(self): + """ + Validate the current page before moving on to the next page. + """ + if self.currentPage() == self.welcomePage: + return True + elif self.currentPage() == self.backupPage: + if not self.noBackupCheckBox.checkState() == QtCore.Qt.Checked: + backup_path = unicode(self.backupDirectoryEdit.text()) + if not backup_path: + critical_error_message_box(UiStrings().EmptyField, + translate('BiblesPlugin.UpgradeWizardForm', + 'You need to specify a backup directory for your ' + 'Bibles.')) + self.backupDirectoryEdit.setFocus() + return False + else: + if not self.backupOldBibles(backup_path): + critical_error_message_box(UiStrings().Error, + translate('BiblesPlugin.UpgradeWizardForm', + 'The backup was not successful.\nTo backup your ' + 'Bibles you need permission to write to the given ' + 'directory.')) + return False + return True + elif self.currentPage() == self.selectPage: + for number, filename in enumerate(self.files): + if not self.checkBox[number].checkState() == QtCore.Qt.Checked: + continue + version_name = unicode(self.versionNameEdit[number].text()) + if not version_name: + critical_error_message_box(UiStrings().EmptyField, + translate('BiblesPlugin.UpgradeWizardForm', + 'You need to specify a version name for your Bible.')) + self.versionNameEdit[number].setFocus() + return False + elif self.manager.exists(version_name): + critical_error_message_box( + translate('BiblesPlugin.UpgradeWizardForm', + 'Bible Exists'), + translate('BiblesPlugin.UpgradeWizardForm', + 'This Bible already exists. Please upgrade ' + 'a different Bible, delete the existing one or ' + 'uncheck.')) + self.versionNameEdit[number].setFocus() + return False + elif os.path.exists(os.path.join(self.path, clean_filename( + version_name))) and version_name == filename[1]: + newfilename = u'old_database_%s' % filename[0] + if not os.path.exists(os.path.join(self.path, + newfilename)): + os.rename(os.path.join(self.path, filename[0]), + os.path.join(self.path, newfilename)) + self.files[number] = [newfilename, filename[1]] + continue + else: + critical_error_message_box( + translate('BiblesPlugin.UpgradeWizardForm', + 'Bible Exists'), + translate('BiblesPlugin.UpgradeWizardForm', + 'This Bible already exists. Please upgrade ' + 'a different Bible, delete the existing one or ' + 'uncheck.')) + self.verticalWidget[number].show() + self.formWidget[number].show() + self.versionNameEdit[number].setFocus() + return False + elif os.path.exists(os.path.join(self.path, + clean_filename(version_name))): + critical_error_message_box( + translate('BiblesPlugin.UpgradeWizardForm', + 'Bible Exists'), + translate('BiblesPlugin.UpgradeWizardForm', + 'This Bible already exists. Please upgrade ' + 'a different Bible, delete the existing one or ' + 'uncheck.')) + self.versionNameEdit[number].setFocus() + return False + return True + if self.currentPage() == self.progressPage: + return True + + def setDefaults(self): + """ + Set default values for the wizard pages. + """ + log.debug(u'BibleUpgrade setDefaults') + settings = QtCore.QSettings() + settings.beginGroup(self.plugin.settingsSection) + self.stop_import_flag = False + self.success.clear() + self.newbibles.clear() + self.clearScrollArea() + self.files = self.manager.old_bible_databases + self.addScrollArea() + self.retranslateUi() + self.maxBibles = len(self.files) + for number, filename in enumerate(self.files): + self.checkBox[number].setCheckState(QtCore.Qt.Checked) + oldname = filename[1] + if self.manager.exists(oldname): + self.verticalWidget[number].show() + self.formWidget[number].show() + else: + self.verticalWidget[number].hide() + self.formWidget[number].hide() + self.progressBar.show() + self.restart() + self.finishButton.setVisible(False) + self.cancelButton.setVisible(True) + settings.endGroup() + + def preWizard(self): + """ + Prepare the UI for the upgrade. + """ + OpenLPWizard.preWizard(self) + self.progressLabel.setText(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Starting upgrade...')) + Receiver.send_message(u'openlp_process_events') + + def performWizard(self): + """ + Perform the actual upgrade. + """ + self.include_webbible = False + proxy_server = None + if self.maxBibles == 0: + self.progressLabel.setText( + translate('BiblesPlugin.UpgradeWizardForm', 'There are no ' + 'Bibles that need to be upgraded.')) + self.progressBar.hide() + return + self.maxBibles = 0 + for number, file in enumerate(self.files): + if self.checkBox[number].checkState() == QtCore.Qt.Checked: + self.maxBibles += 1 + number = 0 + for biblenumber, filename in enumerate(self.files): + if self.stop_import_flag: + bible_failed = True + break + bible_failed = False + self.success[biblenumber] = False + if not self.checkBox[biblenumber].checkState() == QtCore.Qt.Checked: + continue + self.progressBar.reset() + oldbible = OldBibleDB(self.mediaItem, path=self.path, + file=filename[0]) + name = filename[1] + if name is None: + delete_file(os.path.join(self.path, filename[0])) + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, self.maxBibles, name), + self.progressBar.maximum() - self.progressBar.value()) + number += 1 + continue + self.progressLabel.setText(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) % + (number + 1, self.maxBibles, name)) + if os.path.exists(os.path.join(self.path, filename[0])): + name = unicode(self.versionNameEdit[biblenumber].text()) + self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, + name=name) + self.newbibles[number].register(self.plugin.upgrade_wizard) + metadata = oldbible.get_metadata() + webbible = False + meta_data = {} + for meta in metadata: + meta_data[meta[u'key']] = meta[u'value'] + if not meta[u'key'] == u'Version' and not meta[u'key'] == \ + u'dbversion': + self.newbibles[number].create_meta(meta[u'key'], + meta[u'value']) + if meta[u'key'] == u'download source': + webbible = True + self.include_webbible = True + if meta.has_key(u'proxy server'): + proxy_server = meta[u'proxy server'] + if webbible: + if meta_data[u'download source'].lower() == u'crosswalk': + handler = CWExtract(proxy_server) + elif meta_data[u'download source'].lower() == u'biblegateway': + handler = BGExtract(proxy_server) + elif meta_data[u'download source'].lower() == u'bibleserver': + handler = BSExtract(proxy_server) + books = handler.get_books_from_http(meta_data[u'download name']) + if not books: + log.error(u'Upgrading books from %s - download '\ + u'name: "%s" failed' % ( + meta_data[u'download source'], + meta_data[u'download name'])) + delete_database(self.path, clean_filename(name)) + del self.newbibles[number] + critical_error_message_box( + translate('BiblesPlugin.UpgradeWizardForm', + 'Download Error'), + translate('BiblesPlugin.UpgradeWizardForm', + 'To upgrade your Web Bibles an Internet connection is ' + 'required.')) + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, self.maxBibles, name), + self.progressBar.maximum() - self.progressBar.value()) + number += 1 + continue + bible = BiblesResourcesDB.get_webbible( + meta_data[u'download name'], + meta_data[u'download source'].lower()) + if bible and bible[u'language_id']: + language_id = bible[u'language_id'] + self.newbibles[number].create_meta(u'language_id', + language_id) + else: + language_id = self.newbibles[number].get_language(name) + if not language_id: + log.warn(u'Upgrading from "%s" failed' % filename[0]) + delete_database(self.path, clean_filename(name)) + del self.newbibles[number] + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, self.maxBibles, name), + self.progressBar.maximum() - self.progressBar.value()) + number += 1 + continue + self.progressBar.setMaximum(len(books)) + for book in books: + if self.stop_import_flag: + bible_failed = True + break + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\n' + 'Upgrading %s ...')) % + (number + 1, self.maxBibles, name, book)) + book_ref_id = self.newbibles[number].\ + get_book_ref_id_by_name(book, len(books), language_id) + if not book_ref_id: + log.warn(u'Upgrading books from %s - download '\ + u'name: "%s" aborted by user' % ( + meta_data[u'download source'], + meta_data[u'download name'])) + delete_database(self.path, clean_filename(name)) + del self.newbibles[number] + bible_failed = True + break + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) + db_book = self.newbibles[number].create_book(book, + book_ref_id, book_details[u'testament_id']) + # Try to import still downloaded verses + oldbook = oldbible.get_book(book) + if oldbook: + verses = oldbible.get_verses(oldbook[u'id']) + if not verses: + log.warn(u'No verses found to import for book ' + u'"%s"', book) + continue + for verse in verses: + if self.stop_import_flag: + bible_failed = True + break + self.newbibles[number].create_verse(db_book.id, + int(verse[u'chapter']), + int(verse[u'verse']), unicode(verse[u'text'])) + Receiver.send_message(u'openlp_process_events') + self.newbibles[number].session.commit() + else: + language_id = self.newbibles[number].get_object(BibleMeta, + u'language_id') + if not language_id: + language_id = self.newbibles[number].get_language(name) + if not language_id: + log.warn(u'Upgrading books from "%s" failed' % name) + delete_database(self.path, clean_filename(name)) + del self.newbibles[number] + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, self.maxBibles, name), + self.progressBar.maximum() - self.progressBar.value()) + number += 1 + continue + books = oldbible.get_books() + self.progressBar.setMaximum(len(books)) + for book in books: + if self.stop_import_flag: + bible_failed = True + break + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\n' + 'Upgrading %s ...')) % + (number + 1, self.maxBibles, name, book[u'name'])) + book_ref_id = self.newbibles[number].\ + get_book_ref_id_by_name(book[u'name'], len(books), + language_id) + if not book_ref_id: + log.warn(u'Upgrading books from %s " '\ + 'failed - aborted by user' % name) + delete_database(self.path, clean_filename(name)) + del self.newbibles[number] + bible_failed = True + break + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) + db_book = self.newbibles[number].create_book(book[u'name'], + book_ref_id, book_details[u'testament_id']) + verses = oldbible.get_verses(book[u'id']) + if not verses: + log.warn(u'No verses found to import for book ' + u'"%s"', book[u'name']) + self.newbibles[number].delete_book(db_book) + continue + for verse in verses: + if self.stop_import_flag: + bible_failed = True + break + self.newbibles[number].create_verse(db_book.id, + int(verse[u'chapter']), + int(verse[u'verse']), unicode(verse[u'text'])) + Receiver.send_message(u'openlp_process_events') + self.newbibles[number].session.commit() + if not bible_failed: + self.newbibles[number].create_meta(u'Version', name) + oldbible.close_connection() + delete_file(os.path.join(self.path, filename[0])) + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\n' + 'Complete')) % + (number + 1, self.maxBibles, name)) + self.success[biblenumber] = True + else: + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, self.maxBibles, name), + self.progressBar.maximum() - self.progressBar.value()) + delete_database(self.path, clean_filename(name)) + number += 1 + + def postWizard(self): + """ + Clean up the UI after the import has finished. + """ + successful_import = 0 + failed_import = 0 + for number, filename in enumerate(self.files): + if number in self.success and self.success[number] == True: + successful_import += 1 + elif self.checkBox[number].checkState() == QtCore.Qt.Checked: + failed_import += 1 + if failed_import > 0: + failed_import_text = unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + ', %s failed')) % failed_import + else: + failed_import_text = u'' + if successful_import > 0: + if self.include_webbible: + self.progressLabel.setText(unicode( + translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading ' + 'Bible(s): %s successful%s\nPlease note that verses from ' + 'Web Bibles will be downloaded on demand and so an ' + 'Internet connection is required.')) % + (successful_import, failed_import_text)) + else: + self.progressLabel.setText(unicode( + translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading ' + 'Bible(s): %s successful%s')) % (successful_import, + failed_import_text)) + else: + self.progressLabel.setText( + translate('BiblesPlugin.UpgradeWizardForm', 'Upgrade ' + 'failed.')) + OpenLPWizard.postWizard(self) diff --git a/openlp/plugins/bibles/forms/booknamedialog.py b/openlp/plugins/bibles/forms/booknamedialog.py new file mode 100644 index 000000000..e9211b3d5 --- /dev/null +++ b/openlp/plugins/bibles/forms/booknamedialog.py @@ -0,0 +1,114 @@ +# -*- 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, Armin Köhler, Andreas Preikschat, # +# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # +# Tibble, Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate + +class Ui_BookNameDialog(object): + def setupUi(self, bookNameDialog): + bookNameDialog.setObjectName(u'bookNameDialog') + bookNameDialog.resize(400, 271) + self.bookNameLayout = QtGui.QVBoxLayout(bookNameDialog) + self.bookNameLayout.setSpacing(8) + self.bookNameLayout.setMargin(8) + self.bookNameLayout.setObjectName(u'bookNameLayout') + self.infoLabel = QtGui.QLabel(bookNameDialog) + self.infoLabel.setWordWrap(True) + self.infoLabel.setObjectName(u'infoLabel') + self.bookNameLayout.addWidget(self.infoLabel) + self.correspondingLayout = QtGui.QGridLayout() + self.correspondingLayout.setColumnStretch(1, 1) + self.correspondingLayout.setSpacing(8) + self.correspondingLayout.setObjectName(u'correspondingLayout') + self.currentLabel = QtGui.QLabel(bookNameDialog) + self.currentLabel.setObjectName(u'currentLabel') + self.correspondingLayout.addWidget(self.currentLabel, 0, 0, 1, 1) + self.currentBookLabel = QtGui.QLabel(bookNameDialog) + self.currentBookLabel.setObjectName(u'currentBookLabel') + self.correspondingLayout.addWidget(self.currentBookLabel, 0, 1, 1, 1) + self.correspondingLabel = QtGui.QLabel(bookNameDialog) + self.correspondingLabel.setObjectName(u'correspondingLabel') + self.correspondingLayout.addWidget( + self.correspondingLabel, 1, 0, 1, 1) + self.correspondingComboBox = QtGui.QComboBox(bookNameDialog) + self.correspondingComboBox.setObjectName(u'correspondingComboBox') + self.correspondingLayout.addWidget( + self.correspondingComboBox, 1, 1, 1, 1) + self.bookNameLayout.addLayout(self.correspondingLayout) + self.optionsGroupBox = QtGui.QGroupBox(bookNameDialog) + self.optionsGroupBox.setObjectName(u'optionsGroupBox') + self.optionsLayout = QtGui.QVBoxLayout(self.optionsGroupBox) + self.optionsLayout.setSpacing(8) + self.optionsLayout.setMargin(8) + self.optionsLayout.setObjectName(u'optionsLayout') + self.oldTestamentCheckBox = QtGui.QCheckBox(self.optionsGroupBox) + self.oldTestamentCheckBox.setObjectName(u'oldTestamentCheckBox') + self.oldTestamentCheckBox.setCheckState(QtCore.Qt.Checked) + self.optionsLayout.addWidget(self.oldTestamentCheckBox) + self.newTestamentCheckBox = QtGui.QCheckBox(self.optionsGroupBox) + self.newTestamentCheckBox.setObjectName(u'newTestamentCheckBox') + self.newTestamentCheckBox.setCheckState(QtCore.Qt.Checked) + self.optionsLayout.addWidget(self.newTestamentCheckBox) + self.apocryphaCheckBox = QtGui.QCheckBox(self.optionsGroupBox) + self.apocryphaCheckBox.setObjectName(u'apocryphaCheckBox') + self.apocryphaCheckBox.setCheckState(QtCore.Qt.Checked) + self.optionsLayout.addWidget(self.apocryphaCheckBox) + self.bookNameLayout.addWidget(self.optionsGroupBox) + self.buttonBox = QtGui.QDialogButtonBox(bookNameDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons( + QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName(u'buttonBox') + self.bookNameLayout.addWidget(self.buttonBox) + + self.retranslateUi(bookNameDialog) + QtCore.QObject.connect( + self.buttonBox, QtCore.SIGNAL(u'accepted()'), + bookNameDialog.accept) + QtCore.QObject.connect( + self.buttonBox, QtCore.SIGNAL(u'rejected()'), + bookNameDialog.reject) + QtCore.QMetaObject.connectSlotsByName(bookNameDialog) + + def retranslateUi(self, bookNameDialog): + bookNameDialog.setWindowTitle(translate('BiblesPlugin.BookNameDialog', + 'Select Book Name')) + self.infoLabel.setText(translate('BiblesPlugin.BookNameDialog', + 'The following book name cannot be matched up internally. Please ' + 'select the corresponding English name from the list.')) + self.currentLabel.setText(translate('BiblesPlugin.BookNameDialog', + 'Current name:')) + self.correspondingLabel.setText(translate( + 'BiblesPlugin.BookNameDialog', 'Corresponding name:')) + self.optionsGroupBox.setTitle(translate('BiblesPlugin.BookNameDialog', + 'Show Books From')) + self.oldTestamentCheckBox.setText(translate( + 'BiblesPlugin.BookNameDialog', 'Old Testament')) + self.newTestamentCheckBox.setText(translate( + 'BiblesPlugin.BookNameDialog', 'New Testament')) + self.apocryphaCheckBox.setText(translate('BiblesPlugin.BookNameDialog', + 'Apocrypha')) diff --git a/openlp/plugins/bibles/forms/booknameform.py b/openlp/plugins/bibles/forms/booknameform.py new file mode 100644 index 000000000..b07f28bf1 --- /dev/null +++ b/openlp/plugins/bibles/forms/booknameform.py @@ -0,0 +1,123 @@ +# -*- 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, Armin Köhler, 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 # +############################################################################### + +""" +Module implementing BookNameForm. +""" +import logging + +from PyQt4.QtGui import QDialog +from PyQt4 import QtCore + +from openlp.core.lib import translate +from openlp.core.lib.ui import critical_error_message_box +from openlp.plugins.bibles.forms.booknamedialog import \ + Ui_BookNameDialog +from openlp.plugins.bibles.lib.db import BiblesResourcesDB + +log = logging.getLogger(__name__) + +class BookNameForm(QDialog, Ui_BookNameDialog): + """ + Class to manage a dialog which help the user to refer a book name a + to a english book name + """ + log.info(u'BookNameForm loaded') + + def __init__(self, parent = None): + """ + Constructor + """ + QDialog.__init__(self, parent) + self.setupUi(self) + self.customSignals() + + def customSignals(self): + """ + Set up the signals used in the booknameform. + """ + QtCore.QObject.connect(self.oldTestamentCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onCheckBoxIndexChanged) + QtCore.QObject.connect(self.newTestamentCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onCheckBoxIndexChanged) + QtCore.QObject.connect(self.apocryphaCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onCheckBoxIndexChanged) + + def onCheckBoxIndexChanged(self, index): + """ + Reload Combobox if CheckBox state has changed + """ + self.reloadComboBox() + + def reloadComboBox(self): + """ + Reload the Combobox items + """ + self.correspondingComboBox.clear() + items = BiblesResourcesDB.get_books() + for item in items: + addBook = True + for book in self.books: + if book.book_reference_id == item[u'id']: + addBook = False + break + if self.oldTestamentCheckBox.checkState() == QtCore.Qt.Unchecked \ + and item[u'testament_id'] == 1: + addBook = False + elif self.newTestamentCheckBox.checkState() == QtCore.Qt.Unchecked \ + and item[u'testament_id'] == 2: + addBook = False + elif self.apocryphaCheckBox.checkState() == QtCore.Qt.Unchecked \ + and item[u'testament_id'] == 3: + addBook = False + if addBook: + self.correspondingComboBox.addItem(item[u'name']) + + def exec_(self, name, books, maxbooks): + self.books = books + log.debug(maxbooks) + if maxbooks <= 27: + self.oldTestamentCheckBox.setCheckState(QtCore.Qt.Unchecked) + self.apocryphaCheckBox.setCheckState(QtCore.Qt.Unchecked) + elif maxbooks <= 66: + self.apocryphaCheckBox.setCheckState(QtCore.Qt.Unchecked) + self.reloadComboBox() + self.currentBookLabel.setText(unicode(name)) + self.correspondingComboBox.setFocus() + return QDialog.exec_(self) + + def accept(self): + if self.correspondingComboBox.currentText() == u'': + critical_error_message_box( + message=translate('BiblesPlugin.BookNameForm', + 'You need to select a book.')) + self.correspondingComboBox.setFocus() + return False + else: + return QDialog.accept(self) diff --git a/openlp/plugins/bibles/forms/languagedialog.py b/openlp/plugins/bibles/forms/languagedialog.py new file mode 100644 index 000000000..5c1325a54 --- /dev/null +++ b/openlp/plugins/bibles/forms/languagedialog.py @@ -0,0 +1,84 @@ +# -*- 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, Armin Köhler, Andreas Preikschat, # +# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # +# Tibble, Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate + +class Ui_LanguageDialog(object): + def setupUi(self, languageDialog): + languageDialog.setObjectName(u'languageDialog') + languageDialog.resize(400, 165) + self.languageLayout = QtGui.QVBoxLayout(languageDialog) + self.languageLayout.setSpacing(8) + self.languageLayout.setMargin(8) + self.languageLayout.setObjectName(u'languageLayout') + self.bibleLabel = QtGui.QLabel(languageDialog) + self.bibleLabel.setObjectName(u'bibleLabel') + self.languageLayout.addWidget(self.bibleLabel) + self.infoLabel = QtGui.QLabel(languageDialog) + self.infoLabel.setWordWrap(True) + self.infoLabel.setObjectName(u'infoLabel') + self.languageLayout.addWidget(self.infoLabel) + self.languageHBoxLayout = QtGui.QHBoxLayout() + self.languageHBoxLayout.setSpacing(8) + self.languageHBoxLayout.setObjectName(u'languageHBoxLayout') + self.languageLabel = QtGui.QLabel(languageDialog) + self.languageLabel.setObjectName(u'languageLabel') + self.languageHBoxLayout.addWidget(self.languageLabel) + self.languageComboBox = QtGui.QComboBox(languageDialog) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, + QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.languageComboBox.sizePolicy().hasHeightForWidth()) + self.languageComboBox.setSizePolicy(sizePolicy) + self.languageComboBox.setObjectName(u'languageComboBox') + self.languageHBoxLayout.addWidget(self.languageComboBox) + self.languageLayout.addLayout(self.languageHBoxLayout) + self.buttonBox = QtGui.QDialogButtonBox(languageDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel| + QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName(u'buttonBox') + self.languageLayout.addWidget(self.buttonBox) + + self.retranslateUi(languageDialog) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), + languageDialog.accept) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), + languageDialog.reject) + + def retranslateUi(self, languageDialog): + languageDialog.setWindowTitle( + translate('BiblesPlugin.LanguageDialog', 'Select Language')) + self.bibleLabel.setText(translate('BiblesPlugin.LanguageDialog', '')) + self.infoLabel.setText(translate('BiblesPlugin.LanguageDialog', + 'OpenLP is unable to determine the language of this translation ' + 'of the Bible. Please select the language from the list below.')) + self.languageLabel.setText(translate('BiblesPlugin.LanguageDialog', + 'Language:')) diff --git a/openlp/plugins/bibles/forms/languageform.py b/openlp/plugins/bibles/forms/languageform.py new file mode 100644 index 000000000..477c7ee1e --- /dev/null +++ b/openlp/plugins/bibles/forms/languageform.py @@ -0,0 +1,72 @@ +# -*- 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, Armin Köhler, 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 # +############################################################################### + +""" +Module implementing LanguageForm. +""" +import logging + +from PyQt4.QtGui import QDialog + +from openlp.core.lib import translate +from openlp.core.lib.ui import critical_error_message_box +from openlp.plugins.bibles.forms.languagedialog import \ + Ui_LanguageDialog +from openlp.plugins.bibles.lib.db import BiblesResourcesDB + +log = logging.getLogger(__name__) + +class LanguageForm(QDialog, Ui_LanguageDialog): + """ + Class to manage a dialog which ask the user for a language. + """ + log.info(u'LanguageForm loaded') + + def __init__(self, parent = None): + """ + Constructor + """ + QDialog.__init__(self, parent) + self.setupUi(self) + + def exec_(self, bible_name): + self.languageComboBox.addItem(u'') + if bible_name: + self.bibleLabel.setText(unicode(bible_name)) + items = BiblesResourcesDB.get_languages() + for item in items: + self.languageComboBox.addItem(item[u'name']) + return QDialog.exec_(self) + + def accept(self): + if self.languageComboBox.currentText() == u'': + critical_error_message_box( + message=translate('BiblesPlugin.LanguageForm', + 'You need to choose a language.')) + self.languageComboBox.setFocus() + return False + else: + return QDialog.accept(self) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index e219fbc00..7e40b6230 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 7a631ad09..4a24c146d 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,6 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsTab, translate from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle +from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box log = logging.getLogger(__name__) @@ -39,117 +41,115 @@ class BiblesTab(SettingsTab): """ log.info(u'Bible Tab loaded') - def __init__(self, title, visible_title): + def __init__(self, parent, title, visible_title, icon_path): self.paragraph_style = True self.show_new_chapters = False self.display_style = 0 - SettingsTab.__init__(self, title, visible_title) + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'BiblesTab') SettingsTab.setupUi(self) - self.VerseDisplayGroupBox = QtGui.QGroupBox(self.leftColumn) - self.VerseDisplayGroupBox.setObjectName(u'VerseDisplayGroupBox') - self.VerseDisplayLayout = QtGui.QFormLayout(self.VerseDisplayGroupBox) - self.VerseDisplayLayout.setObjectName(u'VerseDisplayLayout') - self.NewChaptersCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) - self.NewChaptersCheckBox.setObjectName(u'NewChaptersCheckBox') - self.VerseDisplayLayout.addRow(self.NewChaptersCheckBox) - self.DisplayStyleLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.DisplayStyleLabel.setObjectName(u'DisplayStyleLabel') - self.DisplayStyleComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.DisplayStyleComboBox.addItems([u'', u'', u'', u'']) - self.DisplayStyleComboBox.setObjectName(u'DisplayStyleComboBox') - self.VerseDisplayLayout.addRow(self.DisplayStyleLabel, - self.DisplayStyleComboBox) - self.LayoutStyleLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.LayoutStyleLabel.setObjectName(u'LayoutStyleLabel') - self.LayoutStyleComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.LayoutStyleComboBox.setObjectName(u'LayoutStyleComboBox') - self.LayoutStyleComboBox.addItems([u'', u'', u'']) - self.VerseDisplayLayout.addRow(self.LayoutStyleLabel, - self.LayoutStyleComboBox) - self.BibleSecondCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) - self.BibleSecondCheckBox.setObjectName(u'BibleSecondCheckBox') - self.VerseDisplayLayout.addRow(self.BibleSecondCheckBox) - self.BibleThemeLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.BibleThemeLabel.setObjectName(u'BibleThemeLabel') - self.BibleThemeComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.BibleThemeComboBox.setSizeAdjustPolicy( + self.verseDisplayGroupBox = QtGui.QGroupBox(self.leftColumn) + self.verseDisplayGroupBox.setObjectName(u'verseDisplayGroupBox') + self.verseDisplayLayout = QtGui.QFormLayout(self.verseDisplayGroupBox) + self.verseDisplayLayout.setObjectName(u'verseDisplayLayout') + self.newChaptersCheckBox = QtGui.QCheckBox(self.verseDisplayGroupBox) + self.newChaptersCheckBox.setObjectName(u'newChaptersCheckBox') + self.verseDisplayLayout.addRow(self.newChaptersCheckBox) + self.displayStyleLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.displayStyleLabel.setObjectName(u'displayStyleLabel') + self.displayStyleComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.displayStyleComboBox.addItems([u'', u'', u'', u'']) + self.displayStyleComboBox.setObjectName(u'displayStyleComboBox') + self.verseDisplayLayout.addRow(self.displayStyleLabel, + self.displayStyleComboBox) + self.layoutStyleLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.layoutStyleLabel.setObjectName(u'layoutStyleLabel') + self.layoutStyleComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.layoutStyleComboBox.setObjectName(u'layoutStyleComboBox') + self.layoutStyleComboBox.addItems([u'', u'', u'']) + self.verseDisplayLayout.addRow(self.layoutStyleLabel, + self.layoutStyleComboBox) + self.bibleSecondCheckBox = QtGui.QCheckBox(self.verseDisplayGroupBox) + self.bibleSecondCheckBox.setObjectName(u'bibleSecondCheckBox') + self.verseDisplayLayout.addRow(self.bibleSecondCheckBox) + self.bibleThemeLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.bibleThemeLabel.setObjectName(u'BibleThemeLabel') + self.bibleThemeComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.bibleThemeComboBox.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToMinimumContentsLength) - self.BibleThemeComboBox.setSizePolicy( + self.bibleThemeComboBox.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) - self.BibleThemeComboBox.addItem(u'') - self.BibleThemeComboBox.setObjectName(u'BibleThemeComboBox') - self.VerseDisplayLayout.addRow(self.BibleThemeLabel, - self.BibleThemeComboBox) - self.ChangeNoteLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.ChangeNoteLabel.setWordWrap(True) - self.ChangeNoteLabel.setObjectName(u'ChangeNoteLabel') - self.VerseDisplayLayout.addRow(self.ChangeNoteLabel) - self.leftLayout.addWidget(self.VerseDisplayGroupBox) + self.bibleThemeComboBox.addItem(u'') + self.bibleThemeComboBox.setObjectName(u'BibleThemeComboBox') + self.verseDisplayLayout.addRow(self.bibleThemeLabel, + self.bibleThemeComboBox) + self.changeNoteLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.changeNoteLabel.setWordWrap(True) + self.changeNoteLabel.setObjectName(u'changeNoteLabel') + self.verseDisplayLayout.addRow(self.changeNoteLabel) + self.leftLayout.addWidget(self.verseDisplayGroupBox) self.leftLayout.addStretch() self.rightColumn.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.rightLayout.addStretch() # Signals and slots QtCore.QObject.connect( - self.NewChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), + self.newChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onNewChaptersCheckBoxChanged) QtCore.QObject.connect( - self.DisplayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.displayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), self.onDisplayStyleComboBoxChanged) QtCore.QObject.connect( - self.BibleThemeComboBox, QtCore.SIGNAL(u'activated(int)'), + self.bibleThemeComboBox, QtCore.SIGNAL(u'activated(int)'), self.onBibleThemeComboBoxChanged) QtCore.QObject.connect( - self.LayoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.layoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), self.onLayoutStyleComboBoxChanged) QtCore.QObject.connect( - self.BibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), + self.bibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onBibleSecondCheckBox) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) def retranslateUi(self): - self.VerseDisplayGroupBox.setTitle( + self.verseDisplayGroupBox.setTitle( translate('BiblesPlugin.BiblesTab', 'Verse Display')) - self.NewChaptersCheckBox.setText( + self.newChaptersCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Only show new chapter numbers')) - self.LayoutStyleLabel.setText( - translate('BiblesPlugin.BiblesTab', 'Layout style:')) - self.DisplayStyleLabel.setText( - translate('BiblesPlugin.BiblesTab', 'Display style:')) - self.BibleThemeLabel.setText( + self.layoutStyleLabel.setText(UiStrings().LayoutStyle) + self.displayStyleLabel.setText(UiStrings().DisplayStyle) + self.bibleThemeLabel.setText( translate('BiblesPlugin.BiblesTab', 'Bible theme:')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.VersePerSlide, - translate('BiblesPlugin.BiblesTab', 'Verse Per Slide')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.VersePerLine, - translate('BiblesPlugin.BiblesTab', 'Verse Per Line')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.Continuous, - translate('BiblesPlugin.BiblesTab', 'Continuous')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.NoBrackets, + self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerSlide, + UiStrings().VersePerSlide) + self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerLine, + UiStrings().VersePerLine) + self.layoutStyleComboBox.setItemText(LayoutStyle.Continuous, + UiStrings().Continuous) + self.displayStyleComboBox.setItemText(DisplayStyle.NoBrackets, translate('BiblesPlugin.BiblesTab', 'No Brackets')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Round, + self.displayStyleComboBox.setItemText(DisplayStyle.Round, translate('BiblesPlugin.BiblesTab', '( And )')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Curly, + self.displayStyleComboBox.setItemText(DisplayStyle.Curly, translate('BiblesPlugin.BiblesTab', '{ And }')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Square, + self.displayStyleComboBox.setItemText(DisplayStyle.Square, translate('BiblesPlugin.BiblesTab', '[ And ]')) - self.ChangeNoteLabel.setText(translate('BiblesPlugin.BiblesTab', + self.changeNoteLabel.setText(translate('BiblesPlugin.BiblesTab', 'Note:\nChanges do not affect verses already in the service.')) - self.BibleSecondCheckBox.setText( + self.bibleSecondCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Display second Bible verses')) def onBibleThemeComboBoxChanged(self): - self.bible_theme = self.BibleThemeComboBox.currentText() + self.bible_theme = self.bibleThemeComboBox.currentText() def onDisplayStyleComboBoxChanged(self): - self.display_style = self.DisplayStyleComboBox.currentIndex() + self.display_style = self.displayStyleComboBox.currentIndex() def onLayoutStyleComboBoxChanged(self): - self.layout_style = self.LayoutStyleComboBox.currentIndex() + self.layout_style = self.layoutStyleComboBox.currentIndex() def onNewChaptersCheckBoxChanged(self, check_state): self.show_new_chapters = False @@ -176,10 +176,10 @@ class BiblesTab(SettingsTab): settings.value(u'bible theme', QtCore.QVariant(u'')).toString()) self.second_bibles = settings.value( u'second bibles', QtCore.QVariant(True)).toBool() - self.NewChaptersCheckBox.setChecked(self.show_new_chapters) - self.DisplayStyleComboBox.setCurrentIndex(self.display_style) - self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) - self.BibleSecondCheckBox.setChecked(self.second_bibles) + self.newChaptersCheckBox.setChecked(self.show_new_chapters) + self.displayStyleComboBox.setCurrentIndex(self.display_style) + self.layoutStyleComboBox.setCurrentIndex(self.layout_style) + self.bibleSecondCheckBox.setChecked(self.second_bibles) settings.endGroup() def save(self): @@ -204,14 +204,8 @@ class BiblesTab(SettingsTab): [u'Bible Theme', u'Song Theme'] """ - self.BibleThemeComboBox.clear() - self.BibleThemeComboBox.addItem(u'') + self.bibleThemeComboBox.clear() + self.bibleThemeComboBox.addItem(u'') for theme in theme_list: - self.BibleThemeComboBox.addItem(theme) - index = self.BibleThemeComboBox.findText( - unicode(self.bible_theme), QtCore.Qt.MatchExactly) - if index == -1: - # Not Found. - index = 0 - self.bible_theme = u'' - self.BibleThemeComboBox.setCurrentIndex(index) + self.bibleThemeComboBox.addItem(theme) + find_and_set_in_combo_box(self.bibleThemeComboBox, self.bible_theme) diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index 9ff7394d1..6735a7344 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -70,7 +71,7 @@ import chardet import csv from openlp.core.lib import Receiver, translate -from openlp.plugins.bibles.lib.db import BibleDB, Testament +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB log = logging.getLogger(__name__) @@ -78,6 +79,8 @@ class CSVBible(BibleDB): """ This class provides a specialisation for importing of CSV Bibles. """ + log.info(u'CSVBible loaded') + def __init__(self, parent, **kwargs): """ Loads a Bible from a set of CVS files. @@ -86,48 +89,10 @@ class CSVBible(BibleDB): """ log.info(self.__class__.__name__) BibleDB.__init__(self, parent, **kwargs) - try: - self.testamentsfile = kwargs[u'testamentsfile'] - except KeyError: - self.testamentsfile = None self.booksfile = kwargs[u'booksfile'] self.versesfile = kwargs[u'versefile'] - def setup_testaments(self): - """ - Overrides parent method so we can handle importing a testament file. - """ - if self.testamentsfile: - self.wizard.progressBar.setMinimum(0) - self.wizard.progressBar.setMaximum(2) - self.wizard.progressBar.setValue(0) - testaments_file = None - try: - details = get_file_encoding(self.testamentsfile) - testaments_file = open(self.testamentsfile, 'rb') - testaments_reader = csv.reader(testaments_file, delimiter=',', - quotechar='"') - for line in testaments_reader: - if self.stop_import_flag: - break - self.wizard.incrementProgressBar(unicode( - translate('BibleDB.Wizard', - 'Importing testaments... %s')) % - unicode(line[1], details['encoding']), 0) - self.save_object(Testament.populate( - name=unicode(line[1], details['encoding']))) - Receiver.send_message(u'openlp_process_events') - except (IOError, IndexError): - log.exception(u'Loading testaments from file failed') - finally: - if testaments_file: - testaments_file.close() - self.wizard.incrementProgressBar(unicode(translate( - 'BibleDB.Wizard', 'Importing testaments... done.')), 2) - else: - BibleDB.setup_testaments(self) - - def do_import(self): + def do_import(self, bible_name=None): """ Import the bible books and verses. """ @@ -135,6 +100,10 @@ class CSVBible(BibleDB): self.wizard.progressBar.setMinimum(0) self.wizard.progressBar.setMaximum(66) success = True + language_id = self.get_language(bible_name) + if not language_id: + log.exception(u'Importing books from "%s" failed' % self.filename) + return False books_file = None book_list = {} # Populate the Tables @@ -146,10 +115,18 @@ class CSVBible(BibleDB): if self.stop_import_flag: break self.wizard.incrementProgressBar(unicode( - translate('BibleDB.Wizard', 'Importing books... %s')) % + translate('BiblesPlugin.CSVBible', + 'Importing books... %s')) % unicode(line[2], details['encoding'])) + book_ref_id = self.get_book_ref_id_by_name( + unicode(line[2], details['encoding']), 67, language_id) + if not book_ref_id: + log.exception(u'Importing books from "%s" '\ + 'failed' % self.booksfile) + return False + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) self.create_book(unicode(line[2], details['encoding']), - unicode(line[3], details['encoding']), int(line[1])) + book_ref_id, book_details[u'testament_id']) book_list[int(line[0])] = unicode(line[2], details['encoding']) Receiver.send_message(u'openlp_process_events') except (IOError, IndexError): @@ -179,7 +156,7 @@ class CSVBible(BibleDB): book = self.get_book(line_book) book_ptr = book.name self.wizard.incrementProgressBar(unicode(translate( - 'BibleDB.Wizard', 'Importing verses from %s...', + 'BiblesPlugin.CSVBible', 'Importing verses from %s...', 'Importing verses from ...')) % book.name) self.session.commit() try: @@ -187,7 +164,7 @@ class CSVBible(BibleDB): except UnicodeError: verse_text = unicode(line[3], u'cp1252') self.create_verse(book.id, line[1], line[2], verse_text) - self.wizard.incrementProgressBar(translate('BibleDB.Wizard', + self.wizard.incrementProgressBar(translate('BiblesPlugin.CSVBible', 'Importing verses... done.')) Receiver.send_message(u'openlp_process_events') self.session.commit() diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 85ab98de1..5273f670c 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,7 +27,9 @@ import logging import chardet +import os import re +import sqlite3 from PyQt4 import QtCore from sqlalchemy import Column, ForeignKey, or_, Table, types @@ -36,6 +39,7 @@ from sqlalchemy.orm.exc import UnmappedClassError from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box +from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -46,13 +50,6 @@ class BibleMeta(BaseModel): pass -class Testament(BaseModel): - """ - Bible Testaments - """ - pass - - class Book(BaseModel): """ Song model @@ -66,6 +63,18 @@ class Verse(BaseModel): """ pass +def clean_filename(filename): + """ + Clean up the version name of the Bible and convert it into a valid + file name. + + ``filename`` + The "dirty" file name or version name. + """ + if not isinstance(filename, unicode): + filename = unicode(filename, u'utf-8') + filename = re.sub(r'[^\w]+', u'_', filename).strip(u'_') + return filename + u'.sqlite' def init_schema(url): """ @@ -80,19 +89,17 @@ def init_schema(url): Column(u'key', types.Unicode(255), primary_key=True, index=True), Column(u'value', types.Unicode(255)), ) - testament_table = Table(u'testament', metadata, - Column(u'id', types.Integer, primary_key=True), - Column(u'name', types.Unicode(50)), - ) + book_table = Table(u'book', metadata, Column(u'id', types.Integer, primary_key=True), - Column(u'testament_id', types.Integer, ForeignKey(u'testament.id')), + Column(u'book_reference_id', types.Integer, index=True), + Column(u'testament_reference_id', types.Integer), Column(u'name', types.Unicode(50), index=True), - Column(u'abbreviation', types.Unicode(5), index=True), ) verse_table = Table(u'verse', metadata, Column(u'id', types.Integer, primary_key=True, index=True), - Column(u'book_id', types.Integer, ForeignKey(u'book.id'), index=True), + Column(u'book_id', types.Integer, ForeignKey( + u'book.id'), index=True), Column(u'chapter', types.Integer, index=True), Column(u'verse', types.Integer, index=True), Column(u'text', types.UnicodeText, index=True), @@ -102,11 +109,6 @@ def init_schema(url): class_mapper(BibleMeta) except UnmappedClassError: mapper(BibleMeta, meta_table) - try: - class_mapper(Testament) - except UnmappedClassError: - mapper(Testament, testament_table, - properties={'books': relation(Book, backref='testament')}) try: class_mapper(Book) except UnmappedClassError: @@ -128,6 +130,7 @@ class BibleDB(QtCore.QObject, Manager): methods, but benefit from the database methods in here via inheritance, rather than depending on yet another object. """ + log.info(u'BibleDB loaded') def __init__(self, parent, **kwargs): """ @@ -155,12 +158,14 @@ class BibleDB(QtCore.QObject, Manager): self.name = kwargs[u'name'] if not isinstance(self.name, unicode): self.name = unicode(self.name, u'utf-8') - self.file = self.clean_filename(self.name) + self.file = clean_filename(self.name) if u'file' in kwargs: self.file = kwargs[u'file'] Manager.__init__(self, u'bibles', init_schema, self.file) if u'file' in kwargs: self.get_name() + if u'path' in kwargs: + self.path = kwargs[u'path'] self.wizard = None QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) @@ -177,25 +182,9 @@ class BibleDB(QtCore.QObject, Manager): Returns the version name of the Bible. """ version_name = self.get_object(BibleMeta, u'Version') - if version_name: - self.name = version_name.value - else: - self.name = None + self.name = version_name.value if version_name else None return self.name - def clean_filename(self, old_filename): - """ - Clean up the version name of the Bible and convert it into a valid - file name. - - ``old_filename`` - The "dirty" file name or version name. - """ - if not isinstance(old_filename, unicode): - old_filename = unicode(old_filename, u'utf-8') - old_filename = re.sub(r'[^\w]+', u'_', old_filename).strip(u'_') - return old_filename + u'.sqlite' - def register(self, wizard): """ This method basically just initialialises the database. It is called @@ -208,36 +197,40 @@ class BibleDB(QtCore.QObject, Manager): """ self.wizard = wizard self.create_meta(u'dbversion', u'2') - self.setup_testaments() return self.name - def setup_testaments(self): - """ - Initialise the testaments section of a bible with suitable defaults. - """ - self.save_object(Testament.populate(name=u'Old Testament')) - self.save_object(Testament.populate(name=u'New Testament')) - self.save_object(Testament.populate(name=u'Apocrypha')) - - def create_book(self, name, abbrev, testament=1): + def create_book(self, name, bk_ref_id, testament=1): """ Add a book to the database. ``name`` The name of the book. - ``abbrev`` - The abbreviation of the book. + ``bk_ref_id`` + The book_reference_id from bibles_resources.sqlite of the book. ``testament`` - *Defaults to 1.* The id of the testament this book belongs to. + *Defaults to 1.* The testament_reference_id from + bibles_resources.sqlite of the testament this book belongs to. """ - log.debug(u'create_book %s,%s', name, abbrev) - book = Book.populate(name=name, abbreviation=abbrev, - testament_id=testament) + log.debug(u'BibleDB.create_book("%s", "%s")', name, bk_ref_id) + book = Book.populate(name=name, book_reference_id=bk_ref_id, + testament_reference_id=testament) self.save_object(book) return book + def delete_book(self, db_book): + """ + Delete a book from the database. + + ``db_book`` + The book object. + """ + log.debug(u'BibleDB.delete_book("%s")', db_book.name) + if self.delete_object(Book, db_book.id): + return True + return False + def create_chapter(self, book_id, chapter, textlist): """ Add a chapter and its verses to a book. @@ -252,14 +245,14 @@ class BibleDB(QtCore.QObject, Manager): A dict of the verses to be inserted. The key is the verse number, and the value is the verse text. """ - log.debug(u'create_chapter %s,%s', book_id, chapter) + log.debug(u'BibleDBcreate_chapter("%s", "%s")', book_id, chapter) # Text list has book and chapter as first two elements of the array. for verse_number, verse_text in textlist.iteritems(): verse = Verse.populate( - book_id = book_id, - chapter = chapter, - verse = verse_number, - text = verse_text + book_id=book_id, + chapter=chapter, + verse=verse_number, + text=verse_text ) self.session.add(verse) self.session.commit() @@ -302,7 +295,9 @@ class BibleDB(QtCore.QObject, Manager): ``value`` The value for this instance. """ - log.debug(u'save_meta %s/%s', key, value) + if not isinstance(value, unicode): + value = unicode(value) + log.debug(u'BibleDB.save_meta("%s/%s")', key, value) self.save_object(BibleMeta.populate(key=key, value=value)) def get_book(self, book): @@ -312,21 +307,61 @@ class BibleDB(QtCore.QObject, Manager): ``book`` The name of the book to return. """ - log.debug(u'BibleDb.get_book("%s")', book) - db_book = self.get_object_filtered(Book, Book.name.like(book + u'%')) - if db_book is None: - db_book = self.get_object_filtered(Book, - Book.abbreviation.like(book + u'%')) - return db_book + log.debug(u'BibleDB.get_book("%s")', book) + return self.get_object_filtered(Book, Book.name.like(book + u'%')) def get_books(self): """ A wrapper so both local and web bibles have a get_books() method that manager can call. Used in the media manager advanced search tab. """ + log.debug(u'BibleDB.get_books()') return self.get_all_objects(Book, order_by_ref=Book.id) - def get_verses(self, reference_list): + def get_book_by_book_ref_id(self, id): + """ + Return a book object from the database. + + ``id`` + The reference id of the book to return. + """ + log.debug(u'BibleDB.get_book_by_book_ref_id("%s")', id) + return self.get_object_filtered(Book, Book.book_reference_id.like(id)) + + def get_book_ref_id_by_name(self, book, maxbooks, language_id=None): + log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book, + language_id) + if BiblesResourcesDB.get_book(book, True): + book_temp = BiblesResourcesDB.get_book(book, True) + book_id = book_temp[u'id'] + elif BiblesResourcesDB.get_alternative_book_name(book): + book_id = BiblesResourcesDB.get_alternative_book_name(book) + elif AlternativeBookNamesDB.get_book_reference_id(book): + book_id = AlternativeBookNamesDB.get_book_reference_id(book) + else: + from openlp.plugins.bibles.forms import BookNameForm + book_ref = None + book_name = BookNameForm(self.wizard) + if book_name.exec_(book, self.get_books(), maxbooks): + book_ref = unicode( + book_name.correspondingComboBox.currentText()) + if not book_ref: + return None + else: + book_temp = BiblesResourcesDB.get_book(book_ref) + if book_temp: + book_id = book_temp[u'id'] + else: + return None + if book_id: + AlternativeBookNamesDB.create_alternative_book_name( + book, book_id, language_id) + if book_id: + return book_id + else: + return None + + def get_verses(self, reference_list, show_error=True): """ This is probably the most used function. It retrieves the list of verses based on the user's query. @@ -335,24 +370,25 @@ class BibleDB(QtCore.QObject, Manager): This is the list of references the media manager item wants. It is a list of tuples, with the following format:: - (book, chapter, start_verse, end_verse) + (book_reference_id, chapter, start_verse, end_verse) Therefore, when you are looking for multiple items, simply break them up into references like this, bundle them into a list. This function then runs through the list, and returns an amalgamated list of ``Verse`` objects. For example:: - [(u'Genesis', 1, 1, 1), (u'Genesis', 2, 2, 3)] + [(u'35', 1, 1, 1), (u'35', 2, 2, 3)] """ - log.debug(u'BibleDB.get_verses: %s', reference_list) + log.debug(u'BibleDB.get_verses("%s")', reference_list) verse_list = [] - for book, chapter, start_verse, end_verse in reference_list: - db_book = self.get_book(book) + book_error = False + for book_id, chapter, start_verse, end_verse in reference_list: + db_book = self.get_book_by_book_ref_id(book_id) if db_book: - book = db_book.name - log.debug(u'Book name corrected to "%s"', book) + book_id = db_book.book_reference_id + log.debug(u'Book name corrected to "%s"', db_book.name) if end_verse == -1: - end_verse = self.get_verse_count(book, chapter) + end_verse = self.get_verse_count(book_id, chapter) verses = self.session.query(Verse)\ .filter_by(book_id=db_book.id)\ .filter_by(chapter=chapter)\ @@ -362,12 +398,14 @@ class BibleDB(QtCore.QObject, Manager): .all() verse_list.extend(verses) else: - log.debug(u'OpenLP failed to find book %s', book) - critical_error_message_box( - translate('BiblesPlugin', 'No Book Found'), - translate('BiblesPlugin', 'No matching book ' - 'could be found in this Bible. Check that you have ' - 'spelled the name of the book correctly.')) + log.debug(u'OpenLP failed to find book with id "%s"', book_id) + book_error = True + if book_error and show_error: + critical_error_message_box( + translate('BiblesPlugin', 'No Book Found'), + 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): @@ -383,15 +421,13 @@ class BibleDB(QtCore.QObject, Manager): log.debug(u'BibleDB.verse_search("%s")', text) verses = self.session.query(Verse) if text.find(u',') > -1: - or_clause = [] - keywords = [u'%%%s%%' % keyword.strip() - for keyword in text.split(u',')] - for keyword in keywords: - or_clause.append(Verse.text.like(keyword)) + keywords = \ + [u'%%%s%%' % keyword.strip() for keyword in text.split(u',')] + or_clause = [Verse.text.like(keyword) for keyword in keywords] verses = verses.filter(or_(*or_clause)) else: - keywords = [u'%%%s%%' % keyword.strip() - for keyword in text.split(u' ')] + keywords = \ + [u'%%%s%%' % keyword.strip() for keyword in text.split(u' ')] for keyword in keywords: verses = verses.filter(Verse.text.like(keyword)) verses = verses.all() @@ -402,18 +438,18 @@ class BibleDB(QtCore.QObject, Manager): Return the number of chapters in a book. ``book`` - The book to get the chapter count for. + The book object to get the chapter count for. """ - log.debug(u'BibleDB.get_chapter_count("%s")', book) + log.debug(u'BibleDB.get_chapter_count("%s")', book.name) count = self.session.query(Verse.chapter).join(Book)\ - .filter(Book.name==book)\ + .filter(Book.book_reference_id==book.book_reference_id)\ .distinct().count() if not count: return 0 else: return count - def get_verse_count(self, book, chapter): + def get_verse_count(self, book_id, chapter): """ Return the number of verses in a chapter. @@ -423,9 +459,9 @@ class BibleDB(QtCore.QObject, Manager): ``chapter`` The chapter to get the verse count for. """ - log.debug(u'BibleDB.get_verse_count("%s", %s)', book, chapter) + log.debug(u'BibleDB.get_verse_count("%s", "%s")', book_id, chapter) count = self.session.query(Verse).join(Book)\ - .filter(Book.name==book)\ + .filter(Book.book_reference_id==book_id)\ .filter(Verse.chapter==chapter)\ .count() if not count: @@ -433,6 +469,39 @@ class BibleDB(QtCore.QObject, Manager): else: return count + def get_language(self, bible_name=None): + """ + If no language is given it calls a dialog window where the user could + select the bible language. + Return the language id of a bible. + + ``book`` + The language the bible is. + """ + log.debug(u'BibleDB.get_language()') + from openlp.plugins.bibles.forms import LanguageForm + language = None + language_form = LanguageForm(self.wizard) + if language_form.exec_(bible_name): + language = unicode(language_form.languageComboBox.currentText()) + if not language: + return False + language = BiblesResourcesDB.get_language(language) + language_id = language[u'id'] + self.create_meta(u'language_id', language_id) + return language_id + + def is_old_database(self): + """ + Returns ``True`` if it is a bible database, which has been created + prior to 1.9.6. + """ + try: + columns = self.session.query(Book).all() + except: + return True + return False + def dump_bible(self): """ Utility debugging method to dump the contents of a bible. @@ -444,3 +513,595 @@ class BibleDB(QtCore.QObject, Manager): log.debug(u'...............................Verses ') verses = self.session.query(Verse).all() log.debug(verses) + + +class BiblesResourcesDB(QtCore.QObject, Manager): + """ + This class represents the database-bound Bible Resources. It provide + some resources which are used in the Bibles plugin. + A wrapper class around a small SQLite database which contains the download + resources, a biblelist from the different download resources, the books, + chapter counts and verse counts for the web download Bibles, a language + reference, the testament reference and some alternative book names. This + class contains a singleton "cursor" so that only one connection to the + SQLite database is ever used. + """ + cursor = None + + @staticmethod + def get_cursor(): + """ + Return the cursor object. Instantiate one if it doesn't exist yet. + """ + if BiblesResourcesDB.cursor is None: + filepath = os.path.join( + AppLocation.get_directory(AppLocation.PluginsDir), u'bibles', + u'resources', u'bibles_resources.sqlite') + conn = sqlite3.connect(filepath) + BiblesResourcesDB.cursor = conn.cursor() + return BiblesResourcesDB.cursor + + @staticmethod + def run_sql(query, parameters=()): + """ + Run an SQL query on the database, returning the results. + + ``query`` + The actual SQL query to run. + + ``parameters`` + Any variable parameters to add to the query. + """ + cursor = BiblesResourcesDB.get_cursor() + cursor.execute(query, parameters) + return cursor.fetchall() + + @staticmethod + def get_books(): + """ + Return a list of all the books of the Bible. + """ + log.debug(u'BiblesResourcesDB.get_books()') + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference ORDER BY id') + return [ + { + u'id': book[0], + u'testament_id': book[1], + u'name': unicode(book[2]), + u'abbreviation': unicode(book[3]), + u'chapters': book[4] + } + for book in books + ] + + @staticmethod + def get_book(name, lower=False): + """ + Return a book by name or abbreviation. + + ``name`` + The name or abbreviation of the book. + + ``lower`` + True if the comparsion should be only lowercase + """ + log.debug(u'BiblesResourcesDB.get_book("%s")', name) + if not isinstance(name, unicode): + name = unicode(name) + if lower: + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference WHERE ' + u'LOWER(name) = ? OR LOWER(abbreviation) = ?', + (name.lower(), name.lower())) + else: + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference WHERE name = ?' + u' OR abbreviation = ?', (name, name)) + if books: + return { + u'id': books[0][0], + u'testament_id': books[0][1], + u'name': unicode(books[0][2]), + u'abbreviation': unicode(books[0][3]), + u'chapters': books[0][4] + } + else: + return None + + @staticmethod + def get_book_by_id(id): + """ + Return a book by id. + + ``id`` + The id of the book. + """ + log.debug(u'BiblesResourcesDB.get_book_by_id("%s")', id) + if not isinstance(id, int): + id = int(id) + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference WHERE id = ?', + (id, )) + if books: + return { + u'id': books[0][0], + u'testament_id': books[0][1], + u'name': unicode(books[0][2]), + u'abbreviation': unicode(books[0][3]), + u'chapters': books[0][4] + } + else: + return None + + @staticmethod + def get_chapter(book_id, chapter): + """ + Return the chapter details for a specific chapter of a book. + + ``book_id`` + The id of a book. + + ``chapter`` + The chapter number. + """ + log.debug(u'BiblesResourcesDB.get_chapter("%s", "%s")', book_id, + chapter) + if not isinstance(chapter, int): + chapter = int(chapter) + chapters = BiblesResourcesDB.run_sql(u'SELECT id, book_reference_id, ' + u'chapter, verse_count FROM chapters WHERE book_reference_id = ?', + (book_id,)) + if chapters: + return { + u'id': chapters[chapter-1][0], + u'book_reference_id': chapters[chapter-1][1], + u'chapter': chapters[chapter-1][2], + u'verse_count': chapters[chapter-1][3] + } + else: + return None + + @staticmethod + def get_chapter_count(book_id): + """ + Return the number of chapters in a book. + + ``book_id`` + The id of the book. + """ + log.debug(u'BiblesResourcesDB.get_chapter_count("%s")', book_id) + details = BiblesResourcesDB.get_book_by_id(book_id) + if details: + return details[u'chapters'] + return 0 + + @staticmethod + def get_verse_count(book_id, chapter): + """ + Return the number of verses in a chapter. + + ``book`` + The id of the book. + + ``chapter`` + The number of the chapter. + """ + log.debug(u'BiblesResourcesDB.get_verse_count("%s", "%s")', book_id, + chapter) + details = BiblesResourcesDB.get_chapter(book_id, chapter) + if details: + return details[u'verse_count'] + return 0 + + @staticmethod + def get_download_source(source): + """ + Return a download_source_id by source. + + ``name`` + The name or abbreviation of the book. + """ + log.debug(u'BiblesResourcesDB.get_download_source("%s")', source) + if not isinstance(source, unicode): + source = unicode(source) + source = source.title() + dl_source = BiblesResourcesDB.run_sql(u'SELECT id, source FROM ' + u'download_source WHERE source = ?', (source.lower(),)) + if dl_source: + return { + u'id': dl_source[0][0], + u'source': dl_source[0][1] + } + else: + return None + + @staticmethod + def get_webbibles(source): + """ + Return the bibles a webbible provide for download. + + ``source`` + The source of the webbible. + """ + log.debug(u'BiblesResourcesDB.get_webbibles("%s")', source) + if not isinstance(source, unicode): + source = unicode(source) + source = BiblesResourcesDB.get_download_source(source) + bibles = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' + u'language_id, download_source_id FROM webbibles WHERE ' + u'download_source_id = ?', (source[u'id'],)) + if bibles: + return [ + { + u'id': bible[0], + u'name': bible[1], + u'abbreviation': bible[2], + u'language_id': bible[3], + u'download_source_id': bible[4] + } + for bible in bibles + ] + else: + return None + + @staticmethod + def get_webbible(abbreviation, source): + """ + Return the bibles a webbible provide for download. + + ``abbreviation`` + The abbreviation of the webbible. + + ``source`` + The source of the webbible. + """ + log.debug(u'BiblesResourcesDB.get_webbibles("%s", "%s")', abbreviation, + source) + if not isinstance(abbreviation, unicode): + abbreviation = unicode(abbreviation) + if not isinstance(source, unicode): + source = unicode(source) + source = BiblesResourcesDB.get_download_source(source) + bible = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' + u'language_id, download_source_id FROM webbibles WHERE ' + u'download_source_id = ? AND abbreviation = ?', (source[u'id'], + abbreviation)) + if bible: + return { + u'id': bible[0][0], + u'name': bible[0][1], + u'abbreviation': bible[0][2], + u'language_id': bible[0][3], + u'download_source_id': bible[0][4] + } + else: + return None + + @staticmethod + def get_alternative_book_name(name, language_id=None): + """ + Return a book_reference_id if the name matches. + + ``name`` + The name to search the id. + + ``language_id`` + The language_id for which language should be searched + """ + log.debug(u'BiblesResourcesDB.get_alternative_book_name("%s", "%s")', + name, language_id) + if language_id: + books = BiblesResourcesDB.run_sql(u'SELECT book_reference_id, name ' + u'FROM alternative_book_names WHERE language_id = ? ORDER BY ' + u'id', (language_id, )) + else: + books = BiblesResourcesDB.run_sql(u'SELECT book_reference_id, name ' + u'FROM alternative_book_names ORDER BY id') + for book in books: + if book[1].lower() == name.lower(): + return book[0] + return None + + @staticmethod + def get_language(name): + """ + Return a dict containing the language id, name and code by name or + abbreviation. + + ``name`` + The name or abbreviation of the language. + """ + log.debug(u'BiblesResourcesDB.get_language("%s")', name) + if not isinstance(name, unicode): + name = unicode(name) + language = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM ' + u'language WHERE name = ? OR code = ?', (name, name.lower())) + if language: + return { + u'id': language[0][0], + u'name': unicode(language[0][1]), + u'code': unicode(language[0][2]) + } + else: + return None + + @staticmethod + def get_languages(): + """ + Return a dict containing all languages with id, name and code. + """ + log.debug(u'BiblesResourcesDB.get_languages()') + languages = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM ' + u'language ORDER by name') + if languages: + return [ + { + u'id': language[0], + u'name': unicode(language[1]), + u'code': unicode(language[2]) + } + for language in languages + ] + else: + return None + + @staticmethod + def get_testament_reference(): + """ + Return a list of all testaments and their id of the Bible. + """ + log.debug(u'BiblesResourcesDB.get_testament_reference()') + testaments = BiblesResourcesDB.run_sql(u'SELECT id, name FROM ' + u'testament_reference ORDER BY id') + return [ + { + u'id': testament[0], + u'name': unicode(testament[1]) + } + for testament in testaments + ] + + +class AlternativeBookNamesDB(QtCore.QObject, Manager): + """ + This class represents a database-bound alternative book names system. + """ + cursor = None + conn = None + + @staticmethod + def get_cursor(): + """ + Return the cursor object. Instantiate one if it doesn't exist yet. + If necessary loads up the database and creates the tables if the + database doesn't exist. + """ + if AlternativeBookNamesDB.cursor is None: + filepath = os.path.join( + AppLocation.get_directory(AppLocation.DataDir), u'bibles', + u'alternative_book_names.sqlite') + if not os.path.exists(filepath): + #create new DB, create table alternative_book_names + AlternativeBookNamesDB.conn = sqlite3.connect(filepath) + AlternativeBookNamesDB.conn.execute(u'CREATE TABLE ' + u'alternative_book_names(id INTEGER NOT NULL, ' + u'book_reference_id INTEGER, language_id INTEGER, name ' + u'VARCHAR(50), PRIMARY KEY (id))') + else: + #use existing DB + AlternativeBookNamesDB.conn = sqlite3.connect(filepath) + AlternativeBookNamesDB.cursor = AlternativeBookNamesDB.conn.cursor() + return AlternativeBookNamesDB.cursor + + @staticmethod + def run_sql(query, parameters=(), commit=None): + """ + Run an SQL query on the database, returning the results. + + ``query`` + The actual SQL query to run. + + ``parameters`` + Any variable parameters to add to the query + + ``commit`` + If a commit statement is necessary this should be True. + """ + cursor = AlternativeBookNamesDB.get_cursor() + cursor.execute(query, parameters) + if commit: + AlternativeBookNamesDB.conn.commit() + return cursor.fetchall() + + @staticmethod + def get_book_reference_id(name, language_id=None): + """ + Return a book_reference_id if the name matches. + + ``name`` + The name to search the id. + + ``language_id`` + The language_id for which language should be searched + """ + log.debug(u'AlternativeBookNamesDB.get_book_reference_id("%s", "%s")', + name, language_id) + if language_id: + books = AlternativeBookNamesDB.run_sql(u'SELECT book_reference_id, ' + u'name FROM alternative_book_names WHERE language_id = ?', + (language_id, )) + else: + books = AlternativeBookNamesDB.run_sql(u'SELECT book_reference_id, ' + u'name FROM alternative_book_names') + for book in books: + if book[1].lower() == name.lower(): + return book[0] + return None + + @staticmethod + def create_alternative_book_name(name, book_reference_id, language_id): + """ + Add an alternative book name to the database. + + ``name`` + The name of the alternative book name. + + ``book_reference_id`` + The book_reference_id of the book. + + ``language_id`` + The language to which the alternative book name belong. + """ + log.debug(u'AlternativeBookNamesDB.create_alternative_book_name("%s", ' + '"%s", "%s"', name, book_reference_id, language_id) + return AlternativeBookNamesDB.run_sql(u'INSERT INTO ' + u'alternative_book_names(book_reference_id, language_id, name) ' + u'VALUES (?, ?, ?)', (book_reference_id, language_id, name), True) + + +class OldBibleDB(QtCore.QObject, Manager): + """ + This class conects to the old bible databases to reimport them to the new + database scheme. + """ + cursor = None + + def __init__(self, parent, **kwargs): + """ + The constructor loads up the database and creates and initialises the + tables if the database doesn't exist. + + **Required keyword arguments:** + + ``path`` + The path to the bible database file. + + ``name`` + The name of the database. This is also used as the file name for + SQLite databases. + """ + log.info(u'OldBibleDB loaded') + QtCore.QObject.__init__(self) + if u'path' not in kwargs: + raise KeyError(u'Missing keyword argument "path".') + if u'file' not in kwargs: + raise KeyError(u'Missing keyword argument "file".') + if u'path' in kwargs: + self.path = kwargs[u'path'] + if u'file' in kwargs: + self.file = kwargs[u'file'] + + def get_cursor(self): + """ + Return the cursor object. Instantiate one if it doesn't exist yet. + """ + if self.cursor is None: + filepath = os.path.join(self.path, self.file) + self.connection = sqlite3.connect(filepath) + self.cursor = self.connection.cursor() + return self.cursor + + def run_sql(self, query, parameters=()): + """ + Run an SQL query on the database, returning the results. + + ``query`` + The actual SQL query to run. + + ``parameters`` + Any variable parameters to add to the query. + """ + cursor = self.get_cursor() + cursor.execute(query, parameters) + return cursor.fetchall() + + def get_name(self): + """ + Returns the version name of the Bible. + """ + version_name = self.run_sql(u'SELECT value FROM ' + u'metadata WHERE key = "Version"') + if version_name: + self.name = version_name[0][0] + else: + self.name = None + return self.name + + def get_metadata(self): + """ + Returns the metadata of the Bible. + """ + metadata = self.run_sql(u'SELECT key, value FROM metadata ' + u'ORDER BY rowid') + if metadata: + return [ + { + u'key': unicode(meta[0]), + u'value': unicode(meta[1]) + } + for meta in metadata + ] + else: + return None + + def get_book(self, name): + """ + Return a book by name or abbreviation. + + ``name`` + The name or abbreviation of the book. + """ + if not isinstance(name, unicode): + name = unicode(name) + books = self.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation FROM book WHERE LOWER(name) = ? OR ' + u'LOWER(abbreviation) = ?', (name.lower(), name.lower())) + if books: + return { + u'id': books[0][0], + u'testament_id': books[0][1], + u'name': unicode(books[0][2]), + u'abbreviation': unicode(books[0][3]) + } + else: + return None + + def get_books(self): + """ + Returns the books of the Bible. + """ + books = self.run_sql(u'SELECT name, id FROM book ORDER BY id') + if books: + return [ + { + u'name': unicode(book[0]), + u'id':int(book[1]) + } + for book in books + ] + else: + return None + + def get_verses(self, book_id): + """ + Returns the verses of the Bible. + """ + verses = self.run_sql(u'SELECT book_id, chapter, verse, text FROM ' + u'verse WHERE book_id = ? ORDER BY id', (book_id, )) + if verses: + return [ + { + u'book_id': int(verse[0]), + u'chapter': int(verse[1]), + u'verse': int(verse[2]), + u'text': unicode(verse[3]) + } + for verse in verses + ] + else: + return None + + def close_connection(self): + self.cursor.close() + self.connection.close() diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 6a6ef131a..290da104c 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,9 +29,7 @@ The :mod:`http` module enables OpenLP to retrieve scripture from bible websites. """ import logging -import os import re -import sqlite3 import socket import urllib from HTMLParser import HTMLParseError @@ -39,163 +38,28 @@ from BeautifulSoup import BeautifulSoup, NavigableString, Tag from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import critical_error_message_box -from openlp.core.utils import AppLocation, get_web_page +from openlp.core.utils import get_web_page from openlp.plugins.bibles.lib import SearchResults -from openlp.plugins.bibles.lib.db import BibleDB, Book +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB, \ + Book log = logging.getLogger(__name__) -class HTTPBooks(object): - """ - A wrapper class around a small SQLite database which contains the books, - chapter counts and verse counts for the web download Bibles. This class - contains a singleton "cursor" so that only one connection to the SQLite - database is ever used. - """ - cursor = None - - @staticmethod - def get_cursor(): - """ - Return the cursor object. Instantiate one if it doesn't exist yet. - """ - if HTTPBooks.cursor is None: - filepath = os.path.join( - AppLocation.get_directory(AppLocation.PluginsDir), u'bibles', - u'resources', u'httpbooks.sqlite') - conn = sqlite3.connect(filepath) - HTTPBooks.cursor = conn.cursor() - return HTTPBooks.cursor - - @staticmethod - def run_sql(query, parameters=()): - """ - Run an SQL query on the database, returning the results. - - ``query`` - The actual SQL query to run. - - ``parameters`` - Any variable parameters to add to the query. - """ - cursor = HTTPBooks.get_cursor() - cursor.execute(query, parameters) - return cursor.fetchall() - - @staticmethod - def get_books(): - """ - Return a list of all the books of the Bible. - """ - books = HTTPBooks.run_sql(u'SELECT id, testament_id, name, ' - u'abbreviation, chapters FROM books ORDER BY id') - book_list = [] - for book in books: - book_list.append({ - u'id': book[0], - u'testament_id': book[1], - u'name': unicode(book[2]), - u'abbreviation': unicode(book[3]), - u'chapters': book[4] - }) - return book_list - - @staticmethod - def get_book(name): - """ - Return a book by name or abbreviation. - - ``name`` - The name or abbreviation of the book. - """ - if not isinstance(name, unicode): - name = unicode(name) - name = name.title() - books = HTTPBooks.run_sql(u'SELECT id, testament_id, name, ' - u'abbreviation, chapters FROM books WHERE name = ? OR ' - u'abbreviation = ?', (name, name)) - if books: - return { - u'id': books[0][0], - u'testament_id': books[0][1], - u'name': unicode(books[0][2]), - u'abbreviation': unicode(books[0][3]), - u'chapters': books[0][4] - } - else: - return None - - @staticmethod - def get_chapter(name, chapter): - """ - Return the chapter details for a specific chapter of a book. - - ``name`` - The name or abbreviation of a book. - - ``chapter`` - The chapter number. - """ - if not isinstance(name, int): - chapter = int(chapter) - book = HTTPBooks.get_book(name) - chapters = HTTPBooks.run_sql(u'SELECT id, book_id, chapter, ' - u'verses FROM chapters WHERE book_id = ?', (book[u'id'],)) - if chapters: - return { - u'id': chapters[chapter-1][0], - u'book_id': chapters[chapter-1][1], - u'chapter': chapters[chapter-1][2], - u'verses': chapters[chapter-1][3] - } - else: - return None - - @staticmethod - def get_chapter_count(book): - """ - Return the number of chapters in a book. - - ``book`` - The name or abbreviation of the book. - """ - details = HTTPBooks.get_book(book) - if details: - return details[u'chapters'] - return 0 - - @staticmethod - def get_verse_count(book, chapter): - """ - Return the number of verses in a chapter. - - ``book`` - The name or abbreviation of the book. - - ``chapter`` - The number of the chapter. - """ - details = HTTPBooks.get_chapter(book, chapter) - if details: - return details[u'verses'] - return 0 - - class BGExtract(object): """ Extract verses from BibleGateway """ def __init__(self, proxyurl=None): - log.debug(u'init %s', proxyurl) + log.debug(u'BGExtract.init("%s")', proxyurl) self.proxyurl = proxyurl socket.setdefaulttimeout(30) def get_bible_chapter(self, version, bookname, chapter): """ - Access and decode bibles via the BibleGateway website. + Access and decode Bibles via the BibleGateway website. ``version`` - The version of the bible like 31 for New International version. + The version of the Bible like 31 for New International version. ``bookname`` Name of the Book. @@ -203,10 +67,11 @@ class BGExtract(object): ``chapter`` Chapter number. """ - log.debug(u'get_bible_chapter %s, %s, %s', version, bookname, chapter) - url_params = urllib.urlencode( - {u'search': u'%s %s' % (bookname, chapter), - u'version': u'%s' % version}) + log.debug(u'BGExtract.get_bible_chapter("%s", "%s", "%s")', version, + bookname, chapter) + urlbookname = urllib.quote(bookname.encode("utf-8")) + url_params = u'search=%s+%s&version=%s' % (urlbookname, chapter, + version) cleaner = [(re.compile(' |
|\'\+\''), lambda match: '')] soup = get_soup_for_bible_ref( u'http://www.biblegateway.com/passage/?%s' % url_params, @@ -229,10 +94,10 @@ class BGExtract(object): verse_list = {} # Cater for inconsistent mark up in the first verse of a chapter. first_verse = verses.find(u'versenum') - if first_verse: + if first_verse and len(first_verse.contents): verse_list[1] = unicode(first_verse.contents[0]) for verse in verses(u'sup', u'versenum'): - raw_verse_num = verse.next + raw_verse_num = verse.next clean_verse_num = 0 # Not all verses exist in all translations and may or may not be # represented by a verse number. If they are not fine, if they are @@ -242,7 +107,7 @@ class BGExtract(object): try: clean_verse_num = int(str(raw_verse_num)) except ValueError: - log.exception(u'Illegal verse number in %s %s %s:%s', + log.warn(u'Illegal verse number in %s %s %s:%s', version, bookname, chapter, unicode(raw_verse_num)) if clean_verse_num: verse_text = raw_verse_num.next @@ -263,13 +128,63 @@ class BGExtract(object): return None return SearchResults(bookname, chapter, verse_list) + def get_books_from_http(self, version): + """ + Load a list of all books a Bible contaions from BibleGateway website. + + ``version`` + The version of the Bible like NIV for New International Version + """ + log.debug(u'BGExtract.get_books_from_http("%s")', version) + url_params = urllib.urlencode( + {u'action': 'getVersionInfo', u'vid': u'%s' % version}) + reference_url = u'http://www.biblegateway.com/versions/?%s#books' % \ + url_params + page = get_web_page(reference_url) + if not page: + send_error_message(u'download') + return None + page_source = page.read() + try: + page_source = unicode(page_source, u'utf8') + except UnicodeDecodeError: + page_source = unicode(page_source, u'cp1251') + page_source_temp = re.search(u'.*?'\ + u'
', page_source, re.DOTALL) + if page_source_temp: + soup = page_source_temp.group(0) + else: + soup = None + try: + soup = BeautifulSoup(soup) + except HTMLParseError: + log.error(u'BeautifulSoup could not parse the Bible page.') + send_error_message(u'parse') + return None + if not soup: + send_error_message(u'parse') + return None + Receiver.send_message(u'openlp_process_events') + content = soup.find(u'table', {u'class': u'infotable'}) + content = content.findAll(u'tr') + if not content: + log.error(u'No books found in the Biblegateway response.') + send_error_message(u'parse') + return None + books = [] + for book in content: + book = book.find(u'td') + if book: + books.append(book.contents[0]) + return books + class BSExtract(object): """ Extract verses from Bibleserver.com """ def __init__(self, proxyurl=None): - log.debug(u'init %s', proxyurl) + log.debug(u'BSExtract.init("%s")', proxyurl) self.proxyurl = proxyurl socket.setdefaulttimeout(30) @@ -286,9 +201,12 @@ class BSExtract(object): ``chapter`` Chapter number """ - 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'BSExtract.get_bible_chapter("%s", "%s", "%s")', version, + bookname, chapter) + urlversion = urllib.quote(version.encode("utf-8")) + urlbookname = urllib.quote(bookname.encode("utf-8")) + chapter_url = u'http://m.bibleserver.com/text/%s/%s%d' % \ + (urlversion, urlbookname, chapter) header = (u'Accept-Language', u'en') soup = get_soup_for_bible_ref(chapter_url, header) if not soup: @@ -296,7 +214,7 @@ class BSExtract(object): Receiver.send_message(u'openlp_process_events') content = soup.find(u'div', u'content') if not content: - log.exception(u'No verses found in the Bibleserver response.') + log.error(u'No verses found in the Bibleserver response.') send_error_message(u'parse') return None content = content.find(u'div').findAll(u'div') @@ -308,13 +226,38 @@ class BSExtract(object): verses[versenumber] = verse.contents[1].rstrip(u'\n') return SearchResults(bookname, chapter, verses) + def get_books_from_http(self, version): + """ + Load a list of all books a Bible contains from Bibleserver mobile + website. + + ``version`` + The version of the Bible like NIV for New International Version + """ + log.debug(u'BSExtract.get_books_from_http("%s")', version) + urlversion = urllib.quote(version.encode("utf-8")) + chapter_url = u'http://m.bibleserver.com/overlay/selectBook?'\ + 'translation=%s' % (urlversion) + soup = get_soup_for_bible_ref(chapter_url) + if not soup: + return None + content = soup.find(u'ul') + if not content: + log.error(u'No books found in the Bibleserver response.') + send_error_message(u'parse') + return None + content = content.findAll(u'li') + return [ + book.contents[0].contents[0] for book in content + ] + class CWExtract(object): """ Extract verses from CrossWalk/BibleStudyTools """ def __init__(self, proxyurl=None): - log.debug(u'init %s', proxyurl) + log.debug(u'CWExtract.init("%s")', proxyurl) self.proxyurl = proxyurl socket.setdefaulttimeout(30) @@ -323,7 +266,7 @@ class CWExtract(object): Access and decode bibles via the Crosswalk website ``version`` - The version of the bible like niv for New International Version + The version of the Bible like niv for New International Version ``bookname`` Text name of in english e.g. 'gen' for Genesis @@ -331,17 +274,20 @@ class CWExtract(object): ``chapter`` Chapter number """ - log.debug(u'get_bible_chapter %s,%s,%s', version, bookname, chapter) + log.debug(u'CWExtract.get_bible_chapter("%s", "%s", "%s")', version, + bookname, chapter) urlbookname = bookname.replace(u' ', u'-') + urlbookname = urlbookname.lower() + urlbookname = urllib.quote(urlbookname.encode("utf-8")) chapter_url = u'http://www.biblestudytools.com/%s/%s/%s.html' % \ - (version, urlbookname.lower(), chapter) + (version, urlbookname, chapter) soup = get_soup_for_bible_ref(chapter_url) if not soup: return None Receiver.send_message(u'openlp_process_events') htmlverses = soup.findAll(u'span', u'versetext') if not htmlverses: - log.debug(u'No verses found in the CrossWalk response.') + log.error(u'No verses found in the CrossWalk response.') send_error_message(u'parse') return None verses = {} @@ -377,6 +323,32 @@ class CWExtract(object): verses[versenumber] = versetext return SearchResults(bookname, chapter, verses) + def get_books_from_http(self, version): + """ + Load a list of all books a Bible contain from the Crosswalk website. + + ``version`` + The version of the bible like NIV for New International Version + """ + log.debug(u'CWExtract.get_books_from_http("%s")', version) + chapter_url = u'http://www.biblestudytools.com/%s/'\ + % (version) + soup = get_soup_for_bible_ref(chapter_url) + if not soup: + return None + content = soup.find(u'div', {u'class': u'Body'}) + content = content.find(u'ul', {u'class': u'parent'}) + if not content: + log.error(u'No books found in the Crosswalk response.') + send_error_message(u'parse') + return None + content = content.findAll(u'li') + books = [] + for book in content: + book = book.find(u'a') + books.append(book.contents[0]) + return books + class HTTPBible(BibleDB): log.info(u'%s HTTPBible loaded' , __name__) @@ -399,6 +371,8 @@ class HTTPBible(BibleDB): self.proxy_server = None self.proxy_username = None self.proxy_password = None + if u'path' in kwargs: + self.path = kwargs[u'path'] if u'proxy_server' in kwargs: self.proxy_server = kwargs[u'proxy_server'] if u'proxy_username' in kwargs: @@ -406,13 +380,15 @@ class HTTPBible(BibleDB): if u'proxy_password' in kwargs: self.proxy_password = kwargs[u'proxy_password'] - def do_import(self): + def do_import(self, bible_name=None): """ Run the import. This method overrides the parent class method. Returns ``True`` on success, ``False`` on failure. """ - self.wizard.progressBar.setMaximum(2) - self.wizard.incrementProgressBar('Registering bible...') + self.wizard.progressBar.setMaximum(68) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.HTTPBible', + 'Registering Bible and loading books...'))) self.create_meta(u'download source', self.download_source) self.create_meta(u'download name', self.download_name) if self.proxy_server: @@ -423,9 +399,53 @@ class HTTPBible(BibleDB): if self.proxy_password: # Store the proxy password. self.create_meta(u'proxy password', self.proxy_password) - return True + if self.download_source.lower() == u'crosswalk': + handler = CWExtract(self.proxy_server) + elif self.download_source.lower() == u'biblegateway': + handler = BGExtract(self.proxy_server) + elif self.download_source.lower() == u'bibleserver': + handler = BSExtract(self.proxy_server) + books = handler.get_books_from_http(self.download_name) + if not books: + log.exception(u'Importing books from %s - download name: "%s" '\ + 'failed' % (self.download_source, self.download_name)) + return False + self.wizard.progressBar.setMaximum(len(books)+2) + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.HTTPBible', 'Registering Language...'))) + bible = BiblesResourcesDB.get_webbible(self.download_name, + self.download_source.lower()) + if bible[u'language_id']: + language_id = bible[u'language_id'] + self.create_meta(u'language_id', language_id) + else: + language_id = self.get_language(bible_name) + if not language_id: + log.exception(u'Importing books from %s " '\ + 'failed' % self.filename) + return False + for book in books: + if self.stop_import_flag: + break + self.wizard.incrementProgressBar(unicode(translate( + 'BiblesPlugin.HTTPBible', 'Importing %s...', + 'Importing ...')) % book) + book_ref_id = self.get_book_ref_id_by_name(book, len(books), + language_id) + if not book_ref_id: + log.exception(u'Importing books from %s - download name: "%s" '\ + 'failed' % (self.download_source, self.download_name)) + return False + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) + log.debug(u'Book details: Name:%s; id:%s; testament_id:%s', + book, book_ref_id, book_details[u'testament_id']) + self.create_book(book, book_ref_id, book_details[u'testament_id']) + if self.stop_import_flag: + return False + else: + return True - def get_verses(self, reference_list): + def get_verses(self, reference_list, show_error=True): """ A reimplementation of the ``BibleDB.get_verses`` method, this one is specifically for web Bibles. It first checks to see if the particular @@ -437,33 +457,29 @@ class HTTPBible(BibleDB): This is the list of references the media manager item wants. It is a list of tuples, with the following format:: - (book, chapter, start_verse, end_verse) + (book_reference_id, chapter, start_verse, end_verse) Therefore, when you are looking for multiple items, simply break them up into references like this, bundle them into a list. This function then runs through the list, and returns an amalgamated list of ``Verse`` objects. For example:: - [(u'Genesis', 1, 1, 1), (u'Genesis', 2, 2, 3)] + [(u'35', 1, 1, 1), (u'35', 2, 2, 3)] """ + log.debug(u'HTTPBible.get_verses("%s")', reference_list) for reference in reference_list: - log.debug(u'Reference: %s', reference) - book = reference[0] - db_book = self.get_book(book) + book_id = reference[0] + db_book = self.get_book_by_book_ref_id(book_id) if not db_book: - book_details = HTTPBooks.get_book(book) - if not book_details: + if show_error: critical_error_message_box( translate('BiblesPlugin', 'No Book Found'), 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'], - book_details[u'testament_id']) + return [] book = db_book.name - if BibleDB.get_verse_count(self, book, reference[1]) == 0: + if BibleDB.get_verse_count(self, book_id, reference[1]) == 0: Receiver.send_message(u'cursor_busy') search_results = self.get_chapter(book, reference[1]) if search_results and search_results.has_verselist(): @@ -480,13 +496,13 @@ class HTTPBible(BibleDB): Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'cursor_normal') Receiver.send_message(u'openlp_process_events') - return BibleDB.get_verses(self, reference_list) + return BibleDB.get_verses(self, reference_list, show_error) def get_chapter(self, book, chapter): """ Receive the request and call the relevant handler methods. """ - log.debug(u'get_chapter %s, %s', book, chapter) + log.debug(u'HTTPBible.get_chapter("%s", "%s")', book, chapter) log.debug(u'source = %s', self.download_source) if self.download_source.lower() == u'crosswalk': handler = CWExtract(self.proxy_server) @@ -500,16 +516,20 @@ class HTTPBible(BibleDB): """ Return the list of books. """ - return [Book.populate(name=book['name']) - for book in HTTPBooks.get_books()] + log.debug(u'HTTPBible.get_books("%s")', Book.name) + return self.get_all_objects(Book, order_by_ref=Book.id) def get_chapter_count(self, book): """ Return the number of chapters in a particular book. - """ - return HTTPBooks.get_chapter_count(book) - def get_verse_count(self, book, chapter): + ``book`` + The book object to get the chapter count for. + """ + log.debug(u'HTTPBible.get_chapter_count("%s")', book.name) + return BiblesResourcesDB.get_chapter_count(book.book_reference_id) + + def get_verse_count(self, book_id, chapter): """ Return the number of verses for the specified chapter and book. @@ -519,7 +539,8 @@ class HTTPBible(BibleDB): ``chapter`` The chapter whose verses are being counted. """ - return HTTPBooks.get_verse_count(book, chapter) + log.debug(u'HTTPBible.get_verse_count("%s", %s)', book_id, chapter) + return BiblesResourcesDB.get_verse_count(book_id, chapter) def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre_parse_substitute=None, cleaner=None): @@ -574,14 +595,14 @@ def send_error_message(error_type): """ if error_type == u'download': critical_error_message_box( - translate('BiblePlugin.HTTPBible', 'Download Error'), - translate('BiblePlugin.HTTPBible', 'There was a ' + translate('BiblesPlugin.HTTPBible', 'Download Error'), + translate('BiblesPlugin.HTTPBible', 'There was a ' 'problem downloading your verse selection. Please check your ' 'Internet connection, and if this error continues to occur ' 'please consider reporting a bug.')) elif error_type == u'parse': critical_error_message_box( - translate('BiblePlugin.HTTPBible', 'Parse Error'), - translate('BiblePlugin.HTTPBible', 'There was a ' + translate('BiblesPlugin.HTTPBible', 'Parse Error'), + translate('BiblesPlugin.HTTPBible', 'There was a ' 'problem extracting your verse selection. If this error continues ' 'to occur please consider reporting a bug.')) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 67469e063..354332083 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,6 +31,7 @@ import os from PyQt4 import QtCore from openlp.core.lib import Receiver, SettingsManager, translate +from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, delete_file from openlp.plugins.bibles.lib import parse_reference from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta @@ -139,8 +141,11 @@ class BibleManager(object): """ log.debug(u'Reload bibles') files = SettingsManager.get_files(self.settingsSection, self.suffix) + if u'alternative_book_names.sqlite' in files: + files.remove(u'alternative_book_names.sqlite') log.debug(u'Bible Files %s', files) self.db_cache = {} + self.old_bible_databases = [] for filename in files: bible = BibleDB(self.parent, path=self.path, file=filename) name = bible.get_name() @@ -148,6 +153,11 @@ class BibleManager(object): if name is None: delete_file(os.path.join(self.path, filename)) continue + # Find old database versions + if bible.is_old_database(): + self.old_bible_databases.append([filename, name]) + bible.session.close() + continue log.debug(u'Bible Name: "%s"', name) self.db_cache[name] = bible # Look to see if lazy load bible exists and get create getter. @@ -210,7 +220,8 @@ class BibleManager(object): return [ { u'name': book.name, - u'chapters': self.db_cache[bible].get_chapter_count(book.name) + u'book_reference_id': book.book_reference_id, + u'chapters': self.db_cache[bible].get_chapter_count(book) } for book in self.db_cache[bible].get_books() ] @@ -218,8 +229,15 @@ class BibleManager(object): def get_chapter_count(self, bible, book): """ Returns the number of Chapters for a given book. + + ``bible`` + Unicode. The Bible to get the list of books from. + + ``book`` + The book object to get the chapter count for. """ - log.debug(u'get_book_chapter_count %s', book) + log.debug(u'BibleManager.get_book_chapter_count ("%s", "%s")', bible, + book.name) return self.db_cache[bible].get_chapter_count(book) def get_verse_count(self, bible, book, chapter): @@ -229,9 +247,11 @@ class BibleManager(object): """ log.debug(u'BibleManager.get_verse_count("%s", "%s", %s)', bible, book, chapter) - return self.db_cache[bible].get_verse_count(book, chapter) + db_book = self.db_cache[bible].get_book(book) + book_ref_id = db_book.book_reference_id + return self.db_cache[bible].get_verse_count(book_ref_id, chapter) - def get_verses(self, bible, versetext): + def get_verses(self, bible, versetext, firstbible=False, show_error=True): """ Parses a scripture reference, fetches the verses from the Bible specified, and returns a list of ``Verse`` objects. @@ -252,32 +272,56 @@ class BibleManager(object): """ log.debug(u'BibleManager.get_verses("%s", "%s")', bible, versetext) if not bible: - Receiver.send_message(u'openlp_information_message', { - u'title': translate('BiblesPlugin.BibleManager', - 'No Bibles Available'), - u'message': translate('BiblesPlugin.BibleManager', - 'There are no Bibles currently installed. Please use the ' - 'Import Wizard to install one or more Bibles.') - }) + if show_error: + Receiver.send_message(u'openlp_information_message', { + u'title': translate('BiblesPlugin.BibleManager', + 'No Bibles Available'), + u'message': translate('BiblesPlugin.BibleManager', + 'There are no Bibles currently installed. Please use the ' + 'Import Wizard to install one or more Bibles.') + }) return None reflist = parse_reference(versetext) if reflist: - return self.db_cache[bible].get_verses(reflist) + new_reflist = [] + for item in reflist: + if item: + if firstbible: + db_book = self.db_cache[firstbible].get_book(item[0]) + db_book = self.db_cache[bible].get_book_by_book_ref_id( + db_book.book_reference_id) + else: + db_book = self.db_cache[bible].get_book(item[0]) + if db_book: + book_id = db_book.book_reference_id + log.debug(u'Book name corrected to "%s"', db_book.name) + new_reflist.append((book_id, item[1], item[2], + item[3])) + else: + log.debug(u'OpenLP failed to find book %s', item[0]) + critical_error_message_box( + translate('BiblesPlugin', 'No Book Found'), + translate('BiblesPlugin', 'No matching book ' + 'could be found in this Bible. Check that you have ' + 'spelled the name of the book correctly.')) + reflist = new_reflist + return self.db_cache[bible].get_verses(reflist, show_error) else: - Receiver.send_message(u'openlp_information_message', { - u'title': translate('BiblesPlugin.BibleManager', - 'Scripture Reference Error'), - u'message': translate('BiblesPlugin.BibleManager', - 'Your scripture reference is either not supported by OpenLP ' - 'or is invalid. Please make sure your reference conforms to ' - 'one of the following patterns:\n\n' - 'Book Chapter\n' - 'Book Chapter-Chapter\n' - 'Book Chapter:Verse-Verse\n' - 'Book Chapter:Verse-Verse,Verse-Verse\n' - 'Book Chapter:Verse-Verse,Chapter:Verse-Verse\n' - 'Book Chapter:Verse-Chapter:Verse') - }) + if show_error: + Receiver.send_message(u'openlp_information_message', { + u'title': translate('BiblesPlugin.BibleManager', + 'Scripture Reference Error'), + u'message': translate('BiblesPlugin.BibleManager', + 'Your scripture reference is either not supported by ' + 'OpenLP or is invalid. Please make sure your reference ' + 'conforms to one of the following patterns:\n\n' + 'Book Chapter\n' + 'Book Chapter-Chapter\n' + 'Book Chapter:Verse-Verse\n' + 'Book Chapter:Verse-Verse,Verse-Verse\n' + 'Book Chapter:Verse-Verse,Chapter:Verse-Verse\n' + 'Book Chapter:Verse-Chapter:Verse') + }) return None def verse_search(self, bible, second_bible, text): @@ -285,7 +329,7 @@ class BibleManager(object): Does a verse search for the given bible and text. ``bible`` - The bible to seach in (unicode). + The bible to search in (unicode). ``second_bible`` The second bible (unicode). We do not search in this bible. @@ -294,6 +338,15 @@ class BibleManager(object): The text to search for (unicode). """ log.debug(u'BibleManager.verse_search("%s", "%s")', bible, text) + if not bible: + Receiver.send_message(u'openlp_information_message', { + u'title': translate('BiblesPlugin.BibleManager', + 'No Bibles Available'), + u'message': translate('BiblesPlugin.BibleManager', + 'There are no Bibles currently installed. Please use the ' + 'Import Wizard to install one or more Bibles.') + }) + return None # Check if the bible or second_bible is a web bible. webbible = self.db_cache[bible].get_object(BibleMeta, u'download source') diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index a9694fd0c..82ee4430c 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -25,6 +26,7 @@ ############################################################################### import logging +import locale from PyQt4 import QtCore, QtGui @@ -32,7 +34,8 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - media_item_combo_box, critical_error_message_box + media_item_combo_box, critical_error_message_box, \ + find_and_set_in_combo_box, build_icon from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ VerseReferenceList, get_reference_match @@ -55,14 +58,52 @@ class BibleMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'songs/song' + self.lockIcon = build_icon(u':/bibles/bibles_search_lock.png') + self.unlockIcon = build_icon(u':/bibles/bibles_search_unlock.png') MediaManagerItem.__init__(self, parent, plugin, icon) # Place to store the search results for both bibles. - self.settings = self.parent.settings_tab + self.settings = self.plugin.settings_tab + self.quickPreviewAllowed = True + self.hasSearch = True self.search_results = {} self.second_search_results = {} + self.check_search_result() QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'bibles_load_list'), self.reloadBibles) + def __checkSecondBible(self, bible, second_bible): + """ + Check if the first item is a second bible item or not. + """ + bitem = self.listView.item(0) + if not bitem.flags() & QtCore.Qt.ItemIsSelectable: + # The item is the "No Search Results" item. + self.listView.clear() + self.displayResults(bible, second_bible) + return + else: + item_second_bible = self._decodeQtObject(bitem, 'second_bible') + if item_second_bible and second_bible or not item_second_bible and \ + not second_bible: + self.displayResults(bible, second_bible) + elif critical_error_message_box( + message=translate('BiblesPlugin.MediaItem', + 'You cannot combine single and dual Bible verse search results. ' + 'Do you want to delete your search results and start a new ' + 'search?'), + parent=self, question=True) == QtGui.QMessageBox.Yes: + self.listView.clear() + self.displayResults(bible, second_bible) + + def _decodeQtObject(self, bitem, key): + reference = bitem.data(QtCore.Qt.UserRole) + if isinstance(reference, QtCore.QVariant): + reference = reference.toPyObject() + obj = reference[QtCore.QString(key)] + if isinstance(obj, QtCore.QVariant): + obj = obj.toPyObject() + return unicode(obj).strip() + def requiredIcons(self): MediaManagerItem.requiredIcons(self) self.hasImportIcon = True @@ -71,133 +112,142 @@ class BibleMediaItem(MediaManagerItem): self.hasDeleteIcon = False self.addToServiceItem = False + def addSearchTab(self, prefix, name): + self.searchTabBar.addTab(name) + tab = QtGui.QWidget() + tab.setObjectName(prefix + u'Tab') + tab.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + layout = QtGui.QGridLayout(tab) + layout.setObjectName(prefix + u'Layout') + setattr(self, prefix + u'Tab', tab) + setattr(self, prefix + u'Layout', layout) + + def addSearchFields(self, prefix, name): + """ + Creates and adds generic search tab. + + ``prefix`` + The prefix of the tab, this is either ``quick`` or ``advanced``. + + ``name`` + The translated string to display. + """ + if prefix == u'quick': + idx = 2 + else: + idx = 5 + tab = getattr(self, prefix + u'Tab') + layout = getattr(self, prefix + u'Layout') + versionLabel = QtGui.QLabel(tab) + versionLabel.setObjectName(prefix + u'VersionLabel') + layout.addWidget(versionLabel, idx, 0, QtCore.Qt.AlignRight) + versionComboBox = media_item_combo_box(tab, + prefix + u'VersionComboBox') + versionLabel.setBuddy(versionComboBox) + layout.addWidget(versionComboBox, idx, 1, 1, 2) + secondLabel = QtGui.QLabel(tab) + secondLabel.setObjectName(prefix + u'SecondLabel') + layout.addWidget(secondLabel, idx + 1, 0, QtCore.Qt.AlignRight) + secondComboBox = media_item_combo_box(tab, prefix + u'SecondComboBox') + versionLabel.setBuddy(secondComboBox) + layout.addWidget(secondComboBox, idx + 1, 1, 1, 2) + styleLabel = QtGui.QLabel(tab) + styleLabel.setObjectName(prefix + u'StyleLabel') + layout.addWidget(styleLabel, idx + 2, 0, QtCore.Qt.AlignRight) + styleComboBox = media_item_combo_box(tab, prefix + u'StyleComboBox') + styleComboBox.addItems([u'', u'', u'']) + layout.addWidget(styleComboBox, idx + 2, 1, 1, 2) + searchButtonLayout = QtGui.QHBoxLayout() + searchButtonLayout.setObjectName(prefix + u'SearchButtonLayout') + searchButtonLayout.addStretch() + lockButton = QtGui.QToolButton(tab) + lockButton.setIcon(self.unlockIcon) + lockButton.setCheckable(True) + lockButton.setObjectName(prefix + u'LockButton') + searchButtonLayout.addWidget(lockButton) + searchButton = QtGui.QPushButton(tab) + searchButton.setObjectName(prefix + u'SearchButton') + searchButtonLayout.addWidget(searchButton) + layout.addLayout(searchButtonLayout, idx + 3, 1, 1, 2) + self.pageLayout.addWidget(tab) + tab.setVisible(False) + QtCore.QObject.connect(lockButton, QtCore.SIGNAL(u'toggled(bool)'), + self.onLockButtonToggled) + setattr(self, prefix + u'VersionLabel', versionLabel) + setattr(self, prefix + u'VersionComboBox', versionComboBox) + setattr(self, prefix + u'SecondLabel', secondLabel) + setattr(self, prefix + u'SecondComboBox', secondComboBox) + setattr(self, prefix + u'StyleLabel', styleLabel) + setattr(self, prefix + u'StyleComboBox', styleComboBox) + setattr(self, prefix + u'LockButton', lockButton) + setattr(self, prefix + u'SearchButtonLayout', searchButtonLayout) + setattr(self, prefix + u'SearchButton', searchButton) + def addEndHeaderBar(self): - self.searchTabWidget = QtGui.QTabWidget(self) - self.searchTabWidget.setSizePolicy( - QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) - self.searchTabWidget.setObjectName(u'SearchTabWidget') + self.searchTabBar = QtGui.QTabBar(self) + self.searchTabBar.setExpanding(False) + self.searchTabBar.setObjectName(u'searchTabBar') + self.pageLayout.addWidget(self.searchTabBar) # Add the Quick Search tab. - self.quickTab = QtGui.QWidget() - self.quickTab.setObjectName(u'quickTab') - self.quickLayout = QtGui.QFormLayout(self.quickTab) - self.quickLayout.setObjectName(u'quickLayout') - self.quickVersionLabel = QtGui.QLabel(self.quickTab) - self.quickVersionLabel.setObjectName(u'quickVersionLabel') - self.quickVersionComboBox = media_item_combo_box(self.quickTab, - u'quickVersionComboBox') - self.quickVersionLabel.setBuddy(self.quickVersionComboBox) - self.quickLayout.addRow(self.quickVersionLabel, - self.quickVersionComboBox) - self.quickSecondLabel = QtGui.QLabel(self.quickTab) - self.quickSecondLabel.setObjectName(u'quickSecondLabel') - self.quickSecondComboBox = media_item_combo_box(self.quickTab, - u'quickSecondComboBox') - self.quickSecondLabel.setBuddy(self.quickSecondComboBox) - self.quickLayout.addRow(self.quickSecondLabel, self.quickSecondComboBox) + self.addSearchTab( + u'quick', translate('BiblesPlugin.MediaItem', 'Quick')) self.quickSearchLabel = QtGui.QLabel(self.quickTab) self.quickSearchLabel.setObjectName(u'quickSearchLabel') + self.quickLayout.addWidget( + self.quickSearchLabel, 0, 0, QtCore.Qt.AlignRight) self.quickSearchEdit = SearchEdit(self.quickTab) self.quickSearchEdit.setObjectName(u'quickSearchEdit') self.quickSearchLabel.setBuddy(self.quickSearchEdit) - self.quickSearchEdit.setSearchTypes([ - (BibleSearch.Reference, u':/bibles/bibles_search_reference.png', - translate('BiblesPlugin.MediaItem', 'Scripture Reference')), - (BibleSearch.Text, u':/bibles/bibles_search_text.png', - translate('BiblesPlugin.MediaItem', 'Text Search')) - ]) - self.quickLayout.addRow(self.quickSearchLabel, self.quickSearchEdit) - self.quickClearLabel = QtGui.QLabel(self.quickTab) - self.quickClearLabel.setObjectName(u'quickClearLabel') - self.quickClearComboBox = media_item_combo_box(self.quickTab, - u'quickClearComboBox') - self.quickLayout.addRow(self.quickClearLabel, self.quickClearComboBox) - self.quickSearchButtonLayout = QtGui.QHBoxLayout() - self.quickSearchButtonLayout.setObjectName(u'quickSearchButtonLayout') - self.quickSearchButtonLayout.addStretch() - self.quickSearchButton = QtGui.QPushButton(self.quickTab) - self.quickSearchButton.setObjectName(u'quickSearchButton') - self.quickSearchButtonLayout.addWidget(self.quickSearchButton) - self.quickLayout.addRow(self.quickSearchButtonLayout) - self.searchTabWidget.addTab(self.quickTab, - translate('BiblesPlugin.MediaItem', 'Quick')) + self.quickLayout.addWidget(self.quickSearchEdit, 0, 1, 1, 2) + self.addSearchFields( + u'quick', translate('BiblesPlugin.MediaItem', 'Quick')) + self.quickTab.setVisible(True) # Add the Advanced Search tab. - self.advancedTab = QtGui.QWidget() - self.advancedTab.setObjectName(u'advancedTab') - self.advancedLayout = QtGui.QGridLayout(self.advancedTab) - self.advancedLayout.setObjectName(u'advancedLayout') - self.advancedVersionLabel = QtGui.QLabel(self.advancedTab) - self.advancedVersionLabel.setObjectName(u'advancedVersionLabel') - self.advancedLayout.addWidget(self.advancedVersionLabel, 0, 0, - QtCore.Qt.AlignRight) - self.advancedVersionComboBox = media_item_combo_box(self.advancedTab, - u'advancedVersionComboBox') - self.advancedVersionLabel.setBuddy(self.advancedVersionComboBox) - self.advancedLayout.addWidget(self.advancedVersionComboBox, 0, 1, 1, 2) - self.advancedSecondLabel = QtGui.QLabel(self.advancedTab) - self.advancedSecondLabel.setObjectName(u'advancedSecondLabel') - self.advancedLayout.addWidget(self.advancedSecondLabel, 1, 0, - QtCore.Qt.AlignRight) - self.advancedSecondComboBox = media_item_combo_box(self.advancedTab, - u'advancedSecondComboBox') - self.advancedSecondLabel.setBuddy(self.advancedSecondComboBox) - self.advancedLayout.addWidget(self.advancedSecondComboBox, 1, 1, 1, 2) + self.addSearchTab(u'advanced', UiStrings().Advanced) self.advancedBookLabel = QtGui.QLabel(self.advancedTab) self.advancedBookLabel.setObjectName(u'advancedBookLabel') - self.advancedLayout.addWidget(self.advancedBookLabel, 2, 0, + self.advancedLayout.addWidget(self.advancedBookLabel, 0, 0, QtCore.Qt.AlignRight) self.advancedBookComboBox = media_item_combo_box(self.advancedTab, u'advancedBookComboBox') self.advancedBookLabel.setBuddy(self.advancedBookComboBox) - self.advancedLayout.addWidget(self.advancedBookComboBox, 2, 1, 1, 2) + self.advancedLayout.addWidget(self.advancedBookComboBox, 0, 1, 1, 2) self.advancedChapterLabel = QtGui.QLabel(self.advancedTab) self.advancedChapterLabel.setObjectName(u'advancedChapterLabel') - self.advancedLayout.addWidget(self.advancedChapterLabel, 3, 1) + self.advancedLayout.addWidget(self.advancedChapterLabel, 1, 1, 1, 2) self.advancedVerseLabel = QtGui.QLabel(self.advancedTab) self.advancedVerseLabel.setObjectName(u'advancedVerseLabel') - self.advancedLayout.addWidget(self.advancedVerseLabel, 3, 2) + self.advancedLayout.addWidget(self.advancedVerseLabel, 1, 2) self.advancedFromLabel = QtGui.QLabel(self.advancedTab) self.advancedFromLabel.setObjectName(u'advancedFromLabel') - self.advancedLayout.addWidget(self.advancedFromLabel, 4, 0, + self.advancedLayout.addWidget(self.advancedFromLabel, 3, 0, QtCore.Qt.AlignRight) self.advancedFromChapter = QtGui.QComboBox(self.advancedTab) self.advancedFromChapter.setObjectName(u'advancedFromChapter') - self.advancedLayout.addWidget(self.advancedFromChapter, 4, 1) + self.advancedLayout.addWidget(self.advancedFromChapter, 3, 1) self.advancedFromVerse = QtGui.QComboBox(self.advancedTab) self.advancedFromVerse.setObjectName(u'advancedFromVerse') - self.advancedLayout.addWidget(self.advancedFromVerse, 4, 2) + self.advancedLayout.addWidget(self.advancedFromVerse, 3, 2) self.advancedToLabel = QtGui.QLabel(self.advancedTab) self.advancedToLabel.setObjectName(u'advancedToLabel') - self.advancedLayout.addWidget(self.advancedToLabel, 5, 0, + self.advancedLayout.addWidget(self.advancedToLabel, 4, 0, QtCore.Qt.AlignRight) self.advancedToChapter = QtGui.QComboBox(self.advancedTab) self.advancedToChapter.setObjectName(u'advancedToChapter') - self.advancedLayout.addWidget(self.advancedToChapter, 5, 1) + self.advancedLayout.addWidget(self.advancedToChapter, 4, 1) self.advancedToVerse = QtGui.QComboBox(self.advancedTab) self.advancedToVerse.setObjectName(u'advancedToVerse') - self.advancedLayout.addWidget(self.advancedToVerse, 5, 2) - self.advancedClearLabel = QtGui.QLabel(self.quickTab) - self.advancedClearLabel.setObjectName(u'advancedClearLabel') - self.advancedLayout.addWidget(self.advancedClearLabel, 6, 0, - QtCore.Qt.AlignRight) - self.advancedClearComboBox = media_item_combo_box(self.quickTab, - u'advancedClearComboBox') - self.advancedClearLabel.setBuddy(self.advancedClearComboBox) - self.advancedLayout.addWidget(self.advancedClearComboBox, 6, 1, 1, 2) - self.advancedSearchButtonLayout = QtGui.QHBoxLayout() - self.advancedSearchButtonLayout.setObjectName( - u'advancedSearchButtonLayout') - self.advancedSearchButtonLayout.addStretch() - self.advancedSearchButton = QtGui.QPushButton(self.advancedTab) - self.advancedSearchButton.setObjectName(u'advancedSearchButton') - self.advancedSearchButtonLayout.addWidget(self.advancedSearchButton) - self.advancedLayout.addLayout( - self.advancedSearchButtonLayout, 7, 0, 1, 3) - self.searchTabWidget.addTab(self.advancedTab, UiStrings.Advanced) - # Add the search tab widget to the page layout. - self.pageLayout.addWidget(self.searchTabWidget) + self.advancedLayout.addWidget(self.advancedToVerse, 4, 2) + self.addSearchFields(u'advanced', UiStrings().Advanced) # Combo Boxes + QtCore.QObject.connect(self.quickVersionComboBox, + QtCore.SIGNAL(u'activated(int)'), self.onQuickVersionComboBox) + QtCore.QObject.connect(self.quickSecondComboBox, + QtCore.SIGNAL(u'activated(int)'), self.onQuickSecondComboBox) QtCore.QObject.connect(self.advancedVersionComboBox, QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox) + QtCore.QObject.connect(self.advancedSecondComboBox, + QtCore.SIGNAL(u'activated(int)'), self.onAdvancedSecondComboBox) QtCore.QObject.connect(self.advancedBookComboBox, QtCore.SIGNAL(u'activated(int)'), self.onAdvancedBookComboBox) QtCore.QObject.connect(self.advancedFromChapter, @@ -210,6 +260,12 @@ class BibleMediaItem(MediaManagerItem): QtCore.SIGNAL(u'searchTypeChanged(int)'), self.updateAutoCompleter) QtCore.QObject.connect(self.quickVersionComboBox, QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter) + QtCore.QObject.connect( + self.quickStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.onQuickStyleComboBoxChanged) + QtCore.QObject.connect( + self.advancedStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.onAdvancedStyleComboBoxChanged) # Buttons QtCore.QObject.connect(self.advancedSearchButton, QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) @@ -220,6 +276,15 @@ class BibleMediaItem(MediaManagerItem): # Other stuff QtCore.QObject.connect(self.quickSearchEdit, QtCore.SIGNAL(u'returnPressed()'), self.onQuickSearchButton) + QtCore.QObject.connect(self.searchTabBar, + QtCore.SIGNAL(u'currentChanged(int)'), + self.onSearchTabBarCurrentChanged) + + def onFocus(self): + if self.quickTab.isVisible(): + self.quickSearchEdit.setFocus() + else: + self.advancedBookComboBox.setFocus() def configUpdated(self): log.debug(u'configUpdated') @@ -234,20 +299,26 @@ class BibleMediaItem(MediaManagerItem): self.advancedSecondComboBox.setVisible(False) self.quickSecondLabel.setVisible(False) self.quickSecondComboBox.setVisible(False) + self.quickStyleComboBox.setCurrentIndex(self.settings.layout_style) + self.advancedStyleComboBox.setCurrentIndex(self.settings.layout_style) def retranslateUi(self): log.debug(u'retranslateUi') - self.quickVersionLabel.setText(u'%s:' % UiStrings.Version) - self.quickSecondLabel.setText( - translate('BiblesPlugin.MediaItem', 'Second:')) self.quickSearchLabel.setText( translate('BiblesPlugin.MediaItem', 'Find:')) - self.quickSearchButton.setText(UiStrings.Search) - self.quickClearLabel.setText( - translate('BiblesPlugin.MediaItem', 'Results:')) - self.advancedVersionLabel.setText(u'%s:' % UiStrings.Version) - self.advancedSecondLabel.setText( + self.quickVersionLabel.setText(u'%s:' % UiStrings().Version) + self.quickSecondLabel.setText( translate('BiblesPlugin.MediaItem', 'Second:')) + self.quickStyleLabel.setText(UiStrings().LayoutStyle) + self.quickStyleComboBox.setItemText(LayoutStyle.VersePerSlide, + UiStrings().VersePerSlide) + self.quickStyleComboBox.setItemText(LayoutStyle.VersePerLine, + UiStrings().VersePerLine) + self.quickStyleComboBox.setItemText(LayoutStyle.Continuous, + UiStrings().Continuous) + self.quickLockButton.setToolTip(translate('BiblesPlugin.MediaItem', + 'Toggle to keep or clear the previous results.')) + self.quickSearchButton.setText(UiStrings().Search) self.advancedBookLabel.setText( translate('BiblesPlugin.MediaItem', 'Book:')) self.advancedChapterLabel.setText( @@ -258,34 +329,40 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'From:')) self.advancedToLabel.setText( translate('BiblesPlugin.MediaItem', 'To:')) - self.advancedClearLabel.setText( - translate('BiblesPlugin.MediaItem', 'Results:')) - self.advancedSearchButton.setText(UiStrings.Search) - self.quickClearComboBox.addItem( - translate('BiblesPlugin.MediaItem', 'Clear')) - self.quickClearComboBox.addItem( - translate('BiblesPlugin.MediaItem', 'Keep')) - self.advancedClearComboBox.addItem( - translate('BiblesPlugin.MediaItem', 'Clear')) - self.advancedClearComboBox.addItem( - translate('BiblesPlugin.MediaItem', 'Keep')) + self.advancedVersionLabel.setText(u'%s:' % UiStrings().Version) + self.advancedSecondLabel.setText( + translate('BiblesPlugin.MediaItem', 'Second:')) + self.advancedStyleLabel.setText(UiStrings().LayoutStyle) + self.advancedStyleComboBox.setItemText(LayoutStyle.VersePerSlide, + UiStrings().VersePerSlide) + self.advancedStyleComboBox.setItemText(LayoutStyle.VersePerLine, + UiStrings().VersePerLine) + self.advancedStyleComboBox.setItemText(LayoutStyle.Continuous, + UiStrings().Continuous) + self.advancedLockButton.setToolTip(translate('BiblesPlugin.MediaItem', + 'Toggle to keep or clear the previous results.')) + self.advancedSearchButton.setText(UiStrings().Search) def initialise(self): log.debug(u'bible manager initialise') - self.parent.manager.media = self + self.plugin.manager.media = self self.loadBibles() - self.updateAutoCompleter() + bible = QtCore.QSettings().value( + self.settingsSection + u'/quick bible', QtCore.QVariant( + self.quickVersionComboBox.currentText())).toString() + find_and_set_in_combo_box(self.quickVersionComboBox, bible) + self.quickSearchEdit.setSearchTypes([ + (BibleSearch.Reference, u':/bibles/bibles_search_reference.png', + translate('BiblesPlugin.MediaItem', 'Scripture Reference')), + (BibleSearch.Text, u':/bibles/bibles_search_text.png', + translate('BiblesPlugin.MediaItem', 'Text Search')) + ]) + self.quickSearchEdit.setCurrentSearchType(QtCore.QSettings().value( + u'%s/last search type' % self.settingsSection, + QtCore.QVariant(BibleSearch.Reference)).toInt()[0]) self.configUpdated() log.debug(u'bible manager initialise complete') - def onImportClick(self): - if not hasattr(self, u'import_wizard'): - self.import_wizard = BibleImportForm(self, self.parent.manager, - self.parent) - # If the import was not cancelled then reload. - if self.import_wizard.exec_(): - self.reloadBibles() - def loadBibles(self): log.debug(u'Loading Bibles') self.quickVersionComboBox.clear() @@ -295,26 +372,31 @@ class BibleMediaItem(MediaManagerItem): self.quickSecondComboBox.addItem(u'') self.advancedSecondComboBox.addItem(u'') # Get all bibles and sort the list. - bibles = self.parent.manager.get_bibles().keys() - bibles.sort() + bibles = self.plugin.manager.get_bibles().keys() + bibles.sort(cmp=locale.strcoll) # Load the bibles into the combo boxes. - first = True for bible in bibles: if bible: self.quickVersionComboBox.addItem(bible) self.quickSecondComboBox.addItem(bible) self.advancedVersionComboBox.addItem(bible) self.advancedSecondComboBox.addItem(bible) - if first: - first = False - self.initialiseBible(bible) + # set the default value + bible = QtCore.QSettings().value( + self.settingsSection + u'/advanced bible', + QtCore.QVariant(u'')).toString() + if bible in bibles: + find_and_set_in_combo_box(self.advancedVersionComboBox, bible) + self.initialiseAdvancedBible(unicode(bible)) + elif len(bibles): + self.initialiseAdvancedBible(bibles[0]) def reloadBibles(self): log.debug(u'Reloading Bibles') - self.parent.manager.reload_bibles() + self.plugin.manager.reload_bibles() self.loadBibles() - def initialiseBible(self, bible): + def initialiseAdvancedBible(self, bible): """ This initialises the given bible, which means that its book names and their chapter numbers is added to the combo boxes on the @@ -324,8 +406,18 @@ class BibleMediaItem(MediaManagerItem): ``bible`` The bible to initialise (unicode). """ - log.debug(u'initialiseBible %s', bible) - book_data = self.parent.manager.get_books(bible) + log.debug(u'initialiseAdvancedBible %s', bible) + book_data = self.plugin.manager.get_books(bible) + secondbible = unicode(self.advancedSecondComboBox.currentText()) + if secondbible != u'': + secondbook_data = self.plugin.manager.get_books(secondbible) + book_data_temp = [] + for book in book_data: + for secondbook in secondbook_data: + if book['book_reference_id'] == \ + secondbook['book_reference_id']: + book_data_temp.append(book) + book_data = book_data_temp self.advancedBookComboBox.clear() first = True for book in book_data: @@ -341,11 +433,11 @@ class BibleMediaItem(MediaManagerItem): def initialiseChapterVerse(self, bible, book, chapter_count): log.debug(u'initialiseChapterVerse %s, %s', bible, book) self.chapter_count = chapter_count - verse_count = self.parent.manager.get_verse_count(bible, book, 1) + verse_count = self.plugin.manager.get_verse_count(bible, book, 1) if verse_count == 0: self.advancedSearchButton.setEnabled(False) critical_error_message_box( - message=translate('BiblePlugin.MediaItem', + message=translate('BiblesPlugin.MediaItem', 'Bible not fully loaded.')) else: self.advancedSearchButton.setEnabled(True) @@ -360,19 +452,90 @@ class BibleMediaItem(MediaManagerItem): completion depends on the bible. It is only updated when we are doing a reference search, otherwise the auto completion list is removed. """ + # Save the current search type to the configuration. + QtCore.QSettings().setValue(u'%s/last search type' % + self.settingsSection, + QtCore.QVariant(self.quickSearchEdit.currentSearchType())) + # Save the current bible to the configuration. + QtCore.QSettings().setValue(self.settingsSection + u'/quick bible', + QtCore.QVariant(self.quickVersionComboBox.currentText())) books = [] # We have to do a 'Reference Search'. if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference: - bibles = self.parent.manager.get_bibles() + bibles = self.plugin.manager.get_bibles() bible = unicode(self.quickVersionComboBox.currentText()) if bible: book_data = bibles[bible].get_books() - books = [book.name for book in book_data] - books.sort() + secondbible = unicode(self.quickSecondComboBox.currentText()) + if secondbible != u'': + secondbook_data = bibles[secondbible].get_books() + book_data_temp = [] + for book in book_data: + for secondbook in secondbook_data: + if book.book_reference_id == \ + secondbook.book_reference_id: + book_data_temp.append(book) + book_data = book_data_temp + books = [book.name + u' ' for book in book_data] + books.sort(cmp=locale.strcoll) add_widget_completer(books, self.quickSearchEdit) + def onQuickVersionComboBox(self): + self.updateAutoCompleter() + + def onQuickSecondComboBox(self): + self.updateAutoCompleter() + + def onImportClick(self): + if not hasattr(self, u'import_wizard'): + self.import_wizard = BibleImportForm(self, self.plugin.manager, + self.plugin) + # If the import was not cancelled then reload. + if self.import_wizard.exec_(): + self.reloadBibles() + + def onSearchTabBarCurrentChanged(self, index): + if index == 0: + self.advancedTab.setVisible(False) + self.quickTab.setVisible(True) + self.quickSearchEdit.setFocus() + else: + self.quickTab.setVisible(False) + self.advancedTab.setVisible(True) + self.advancedBookComboBox.setFocus() + + def onLockButtonToggled(self, checked): + if checked: + self.sender().setIcon(self.lockIcon) + else: + self.sender().setIcon(self.unlockIcon) + + def onQuickStyleComboBoxChanged(self): + self.settings.layout_style = self.quickStyleComboBox.currentIndex() + self.advancedStyleComboBox.setCurrentIndex(self.settings.layout_style) + self.settings.layoutStyleComboBox.setCurrentIndex( + self.settings.layout_style) + QtCore.QSettings().setValue( + self.settingsSection + u'/verse layout style', + QtCore.QVariant(self.settings.layout_style)) + + def onAdvancedStyleComboBoxChanged(self): + self.settings.layout_style = self.advancedStyleComboBox.currentIndex() + self.quickStyleComboBox.setCurrentIndex(self.settings.layout_style) + self.settings.layoutStyleComboBox.setCurrentIndex( + self.settings.layout_style) + QtCore.QSettings().setValue( + self.settingsSection + u'/verse layout style', + QtCore.QVariant(self.settings.layout_style)) + def onAdvancedVersionComboBox(self): - self.initialiseBible( + QtCore.QSettings().setValue(self.settingsSection + u'/advanced bible', + QtCore.QVariant(self.advancedVersionComboBox.currentText())) + self.initialiseAdvancedBible( + unicode(self.advancedVersionComboBox.currentText())) + + def onAdvancedSecondComboBox(self): + self.initialiseAdvancedBible( unicode(self.advancedVersionComboBox.currentText())) def onAdvancedBookComboBox(self): @@ -389,7 +552,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.advancedVersionComboBox.currentText()) book = unicode(self.advancedBookComboBox.currentText()) verse_from = int(self.advancedFromVerse.currentText()) - verse_count = self.parent.manager.get_verse_count(bible, book, + verse_count = self.plugin.manager.get_verse_count(bible, book, chapter_to) self.adjustComboBox(verse_from, verse_count, self.advancedToVerse, True) @@ -401,7 +564,7 @@ class BibleMediaItem(MediaManagerItem): chapter_to = int(self.advancedToChapter.currentText()) verse_from = int(self.advancedFromVerse.currentText()) verse_to = int(self.advancedToVerse.currentText()) - verse_count = self.parent.manager.get_verse_count(bible, book, + verse_count = self.plugin.manager.get_verse_count(bible, book, chapter_to) if chapter_from == chapter_to and verse_from > verse_to: self.adjustComboBox(verse_from, verse_count, self.advancedToVerse) @@ -413,7 +576,7 @@ class BibleMediaItem(MediaManagerItem): book = unicode(self.advancedBookComboBox.currentText()) chapter_from = int(self.advancedFromChapter.currentText()) chapter_to = int(self.advancedToChapter.currentText()) - verse_count = self.parent.manager.get_verse_count(bible, book, + verse_count = self.plugin.manager.get_verse_count(bible, book, chapter_from) self.adjustComboBox(1, verse_count, self.advancedFromVerse) if chapter_from > chapter_to: @@ -473,18 +636,19 @@ class BibleMediaItem(MediaManagerItem): range_separator + chapter_to + verse_separator + verse_to versetext = u'%s %s' % (book, verse_range) Receiver.send_message(u'cursor_busy') - self.search_results = self.parent.manager.get_verses(bible, versetext) + self.search_results = self.plugin.manager.get_verses(bible, versetext) if second_bible: - self.second_search_results = self.parent.manager.get_verses( - second_bible, versetext) - if self.advancedClearComboBox.currentIndex() == 0: + self.second_search_results = self.plugin.manager.get_verses( + second_bible, versetext, bible) + if not self.advancedLockButton.isChecked(): self.listView.clear() if self.listView.count() != 0: self.__checkSecondBible(bible, second_bible) elif self.search_results: self.displayResults(bible, second_bible) - Receiver.send_message(u'cursor_normal') self.advancedSearchButton.setEnabled(True) + self.check_search_result() + Receiver.send_message(u'cursor_normal') Receiver.send_message(u'openlp_process_events') def onQuickSearchButton(self): @@ -500,72 +664,92 @@ class BibleMediaItem(MediaManagerItem): text = unicode(self.quickSearchEdit.text()) if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference: # We are doing a 'Reference Search'. - self.search_results = self.parent.manager.get_verses(bible, text) + self.search_results = self.plugin.manager.get_verses(bible, text) if second_bible and self.search_results: - self.second_search_results = self.parent.manager.get_verses( - second_bible, text) + self.second_search_results = self.plugin.manager.get_verses( + second_bible, text, bible) else: # We are doing a 'Text Search'. Receiver.send_message(u'cursor_busy') - bibles = self.parent.manager.get_bibles() - self.search_results = self.parent.manager.verse_search(bible, + bibles = self.plugin.manager.get_bibles() + self.search_results = self.plugin.manager.verse_search(bible, second_bible, text) if second_bible and self.search_results: text = [] + new_search_results = [] + count = 0 + passage_not_found = False for verse in self.search_results: - text.append((verse.book.name, verse.chapter, verse.verse, - verse.verse)) + db_book = bibles[second_bible].get_book_by_book_ref_id( + verse.book.book_reference_id) + if not db_book: + log.debug(u'Passage "%s %d:%d" not found in Second ' + u'Bible' % (verse.book.name, verse.chapter, + verse.verse)) + passage_not_found = True + count += 1 + continue + new_search_results.append(verse) + text.append((verse.book.book_reference_id, verse.chapter, + verse.verse, verse.verse)) + if passage_not_found: + QtGui.QMessageBox.information(self, + translate('BiblesPlugin.MediaItem', 'Information'), + unicode(translate('BiblesPlugin.MediaItem', + 'The second Bible does not contain all the verses ' + 'that are in the main Bible. Only verses found in both ' + 'Bibles will be shown. %d verses have not been ' + 'included in the results.')) % count, + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.search_results = new_search_results self.second_search_results = \ bibles[second_bible].get_verses(text) - if self.quickClearComboBox.currentIndex() == 0: + if not self.quickLockButton.isChecked(): self.listView.clear() if self.listView.count() != 0 and self.search_results: self.__checkSecondBible(bible, second_bible) elif self.search_results: self.displayResults(bible, second_bible) self.quickSearchButton.setEnabled(True) + self.check_search_result() Receiver.send_message(u'cursor_normal') Receiver.send_message(u'openlp_process_events') - def __checkSecondBible(self, bible, second_bible): - """ - Check if the first item is a second bible item or not. - """ - bitem = self.listView.item(0) - item_second_bible = self._decodeQtObject(bitem, 'second_bible') - if item_second_bible and second_bible or not item_second_bible and \ - not second_bible: - self.displayResults(bible, second_bible) - elif critical_error_message_box( - message=translate('BiblePlugin.MediaItem', - 'You cannot combine single and dual Bible verse search results. ' - 'Do you want to delete your search results and start a new ' - 'search?'), - parent=self, question=True) == QtGui.QMessageBox.Yes: - self.listView.clear() - self.displayResults(bible, second_bible) - def displayResults(self, bible, second_bible=u''): + """ + Displays the search results in the media manager. All data needed for + further action is saved for/in each row. + """ + items = self.buildDisplayResults(bible, second_bible, + self.search_results) + for bible_verse in items: + self.listView.addItem(bible_verse) + self.listView.selectAll() + self.search_results = {} + self.second_search_results = {} + + def buildDisplayResults(self, bible, second_bible, search_results): """ Displays the search results in the media manager. All data needed for further action is saved for/in each row. """ verse_separator = get_reference_match(u'sep_v_display') - version = self.parent.manager.get_meta_data(bible, u'Version').value - copyright = self.parent.manager.get_meta_data(bible, u'Copyright').value + version = self.plugin.manager.get_meta_data(bible, u'Version').value + copyright = self.plugin.manager.get_meta_data(bible, u'Copyright').value permissions = \ - self.parent.manager.get_meta_data(bible, u'Permissions').value + self.plugin.manager.get_meta_data(bible, u'Permissions').value second_version = u'' second_copyright = u'' second_permissions = u'' if second_bible: - second_version = self.parent.manager.get_meta_data( + second_version = self.plugin.manager.get_meta_data( second_bible, u'Version').value - second_copyright = self.parent.manager.get_meta_data( + second_copyright = self.plugin.manager.get_meta_data( second_bible, u'Copyright').value - second_permissions = self.parent.manager.get_meta_data( + second_permissions = self.plugin.manager.get_meta_data( second_bible, u'Permissions').value - for count, verse in enumerate(self.search_results): + items = [] + for count, verse in enumerate(search_results): data = { 'book': QtCore.QVariant(verse.book.name), 'chapter': QtCore.QVariant(verse.chapter), @@ -589,7 +773,7 @@ class BibleMediaItem(MediaManagerItem): log.exception(u'The second_search_results does not have as ' 'many verses as the search_results.') break - bible_text = u' %s %d%s%d (%s, %s)' % (verse.book.name, + bible_text = u'%s %d%s%d (%s, %s)' % (verse.book.name, verse.chapter, verse_separator, verse.verse, version, second_version) else: @@ -597,19 +781,8 @@ class BibleMediaItem(MediaManagerItem): verse.chapter, verse_separator, verse.verse, version) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) - self.listView.addItem(bible_verse) - self.listView.selectAll() - self.search_results = {} - self.second_search_results = {} - - def _decodeQtObject(self, bitem, key): - reference = bitem.data(QtCore.Qt.UserRole) - if isinstance(reference, QtCore.QVariant): - reference = reference.toPyObject() - obj = reference[QtCore.QString(key)] - if isinstance(obj, QtCore.QVariant): - obj = obj.toPyObject() - return unicode(obj).strip() + items.append(bible_verse) + return items def generateSlideData(self, service_item, item=None, xmlVersion=False): """ @@ -617,7 +790,10 @@ class BibleMediaItem(MediaManagerItem): service item's title. """ log.debug(u'generating slide data') - items = self.listView.selectedIndexes() + if item: + items = item + else: + items = self.listView.selectedItems() if len(items) == 0: return False bible_text = u'' @@ -626,8 +802,7 @@ class BibleMediaItem(MediaManagerItem): raw_slides = [] raw_title = [] verses = VerseReferenceList() - for item in items: - bitem = self.listView.item(item.row()) + for bitem in items: book = self._decodeQtObject(bitem, 'book') chapter = int(self._decodeQtObject(bitem, 'chapter')) verse = int(self._decodeQtObject(bitem, 'verse')) @@ -656,16 +831,17 @@ class BibleMediaItem(MediaManagerItem): bible_text = u'' # If we are 'Verse Per Line' then force a new line. elif self.settings.layout_style == LayoutStyle.VersePerLine: - bible_text = u'%s %s %s\n' % (bible_text, verse_text, text) + bible_text = u'%s%s %s\n' % (bible_text, verse_text, text) # We have to be 'Continuous'. else: bible_text = u'%s %s %s\n' % (bible_text, verse_text, text) + bible_text = bible_text.strip(u' ') if not old_item: - start_item = item - elif self.checkTitle(item, old_item): + start_item = bitem + elif self.checkTitle(bitem, old_item): raw_title.append(self.formatTitle(start_item, old_item)) - start_item = item - old_item = item + start_item = bitem + old_item = bitem old_chapter = chapter # Add footer service_item.raw_footer.append(verses.format_verses()) @@ -673,7 +849,7 @@ class BibleMediaItem(MediaManagerItem): verses.add_version(second_version, second_copyright, second_permissions) service_item.raw_footer.append(verses.format_versions()) - raw_title.append(self.formatTitle(start_item, item)) + raw_title.append(self.formatTitle(start_item, bitem)) # If there are no more items we check whether we have to add bible_text. if bible_text: raw_slides.append(bible_text.lstrip()) @@ -685,6 +861,7 @@ class BibleMediaItem(MediaManagerItem): service_item.add_capability(ItemCapabilities.NoLineBreaks) service_item.add_capability(ItemCapabilities.AllowsPreview) service_item.add_capability(ItemCapabilities.AllowsLoop) + service_item.add_capability(ItemCapabilities.AllowsWordSplit) # Service Item: Title service_item.title = u', '.join(raw_title) # Service Item: Theme @@ -692,12 +869,13 @@ class BibleMediaItem(MediaManagerItem): service_item.theme = None else: service_item.theme = self.settings.bible_theme - [service_item.add_from_text(slide[:30], slide) for slide in raw_slides] + for slide in raw_slides: + service_item.add_from_text(slide[:30], slide) return True - def formatTitle(self, start_item, old_item): + def formatTitle(self, start_bitem, old_bitem): """ - This methode is called, when we have to change the title, because + This method is called, when we have to change the title, because we are at the end of a verse range. E. g. if we want to add Genesis 1:1-6 as well as Daniel 2:14. @@ -709,10 +887,8 @@ class BibleMediaItem(MediaManagerItem): """ verse_separator = get_reference_match(u'sep_v_display') range_separator = get_reference_match(u'sep_r_display') - old_bitem = self.listView.item(old_item.row()) old_chapter = self._decodeQtObject(old_bitem, 'chapter') old_verse = self._decodeQtObject(old_bitem, 'verse') - start_bitem = self.listView.item(start_item.row()) start_book = self._decodeQtObject(start_bitem, 'book') start_chapter = self._decodeQtObject(start_bitem, 'chapter') start_verse = self._decodeQtObject(start_bitem, 'verse') @@ -733,9 +909,9 @@ class BibleMediaItem(MediaManagerItem): range_separator + old_chapter + verse_separator + old_verse return u'%s %s (%s)' % (start_book, verse_range, bibles) - def checkTitle(self, item, old_item): + def checkTitle(self, bitem, old_bitem): """ - This methode checks if we are at the end of an verse range. If that is + This method checks if we are at the end of an verse range. If that is the case, we return True, otherwise False. E. g. if we added Genesis 1:1-6, but the next verse is Daniel 2:14, we return True. @@ -746,13 +922,11 @@ class BibleMediaItem(MediaManagerItem): The item we were previously dealing with. """ # Get all the necessary meta data. - bitem = self.listView.item(item.row()) book = self._decodeQtObject(bitem, 'book') chapter = int(self._decodeQtObject(bitem, 'chapter')) verse = int(self._decodeQtObject(bitem, 'verse')) bible = self._decodeQtObject(bitem, 'bible') second_bible = self._decodeQtObject(bitem, 'second_bible') - old_bitem = self.listView.item(old_item.row()) old_book = self._decodeQtObject(old_bitem, 'book') old_chapter = int(self._decodeQtObject(old_bitem, 'chapter')) old_verse = int(self._decodeQtObject(old_bitem, 'verse')) @@ -766,7 +940,7 @@ class BibleMediaItem(MediaManagerItem): # We are still in the same chapter, but a verse has been skipped. return True elif old_chapter + 1 == chapter and (verse != 1 or - old_verse != self.parent.manager.get_verse_count( + old_verse != self.plugin.manager.get_verse_count( old_bible, old_book, old_chapter)): # We are in the following chapter, but the last verse was not the # last verse of the chapter or the current verse is not the @@ -804,3 +978,22 @@ class BibleMediaItem(MediaManagerItem): if self.settings.display_style == DisplayStyle.Square: return u'{su}[%s]{/su}' % verse_text return u'{su}%s{/su}' % verse_text + + def search(self, string): + """ + Search for some Bible verses (by reference). + """ + bible = unicode(self.quickVersionComboBox.currentText()) + search_results = self.plugin.manager.get_verses(bible, string, False, + False) + if search_results: + versetext = u' '.join([verse.text for verse in search_results]) + return [[string, versetext]] + return [] + + def createItemFromId(self, item_id): + item = QtGui.QListWidgetItem() + bible = unicode(self.quickVersionComboBox.currentText()) + search_results = self.plugin.manager.get_verses(bible, item_id, False) + items = self.buildDisplayResults(bible, u'', search_results) + return items diff --git a/openlp/plugins/bibles/lib/openlp1.py b/openlp/plugins/bibles/lib/openlp1.py index e43417c02..b822b9b9d 100644 --- a/openlp/plugins/bibles/lib/openlp1.py +++ b/openlp/plugins/bibles/lib/openlp1.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,7 +30,7 @@ import sqlite from openlp.core.lib import Receiver from openlp.core.ui.wizard import WizardStrings -from openlp.plugins.bibles.lib.db import BibleDB +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB log = logging.getLogger(__name__) @@ -45,7 +46,7 @@ class OpenLP1Bible(BibleDB): BibleDB.__init__(self, parent, **kwargs) self.filename = kwargs[u'filename'] - def do_import(self): + def do_import(self, bible_name=None): """ Imports an openlp.org v1 bible. """ @@ -56,6 +57,11 @@ class OpenLP1Bible(BibleDB): cursor = connection.cursor() except: return False + #Create the bible language + language_id = self.get_language(bible_name) + if not language_id: + log.exception(u'Importing books from "%s" failed' % self.filename) + return False # Create all books. cursor.execute(u'SELECT id, testament_id, name, abbreviation FROM book') books = cursor.fetchall() @@ -68,7 +74,15 @@ class OpenLP1Bible(BibleDB): testament_id = int(book[1]) name = unicode(book[2], u'cp1252') abbreviation = unicode(book[3], u'cp1252') - self.create_book(name, abbreviation, testament_id) + book_ref_id = self.get_book_ref_id_by_name(name, len(books), + language_id) + if not book_ref_id: + log.exception(u'Importing books from "%s" '\ + 'failed' % self.filename) + return False + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) + db_book = self.create_book(name, book_ref_id, + book_details[u'testament_id']) # Update the progess bar. self.wizard.incrementProgressBar(WizardStrings.ImportingType % name) # Import the verses for this book. @@ -82,7 +96,7 @@ class OpenLP1Bible(BibleDB): chapter = int(verse[0]) verse_number = int(verse[1]) text = unicode(verse[2], u'cp1252') - self.create_verse(book_id, chapter, verse_number, text) + self.create_verse(db_book.id, chapter, verse_number, text) Receiver.send_message(u'openlp_process_events') self.session.commit() connection.close() diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 585ecf9c7..16820229c 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,7 +29,7 @@ import logging from lxml import objectify from openlp.core.lib import Receiver, translate -from openlp.plugins.bibles.lib.db import BibleDB +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB log = logging.getLogger(__name__) @@ -45,7 +46,7 @@ class OpenSongBible(BibleDB): BibleDB.__init__(self, parent, **kwargs) self.filename = kwargs['filename'] - def do_import(self): + def do_import(self, bible_name=None): """ Loads a Bible from file. """ @@ -61,11 +62,23 @@ class OpenSongBible(BibleDB): file = open(self.filename, u'r') opensong = objectify.parse(file) bible = opensong.getroot() + language_id = self.get_language(bible_name) + if not language_id: + log.exception(u'Importing books from "%s" '\ + 'failed' % self.filename) + return False for book in bible.b: if self.stop_import_flag: break - db_book = self.create_book(unicode(book.attrib[u'n']), - unicode(book.attrib[u'n'][:4])) + book_ref_id = self.get_book_ref_id_by_name( + unicode(book.attrib[u'n']), len(bible.b), language_id) + if not book_ref_id: + log.exception(u'Importing books from "%s" '\ + 'failed' % self.filename) + return False + book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) + db_book = self.create_book(unicode(book.attrib[u'n']), + book_ref_id, book_details[u'testament_id']) for chapter in book.c: if self.stop_import_flag: break diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index e2eb25b4f..b802cda85 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,10 +34,13 @@ import re from openlp.core.lib import Receiver, translate from openlp.core.utils import AppLocation -from openlp.plugins.bibles.lib.db import BibleDB +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB log = logging.getLogger(__name__) +def replacement(match): + return match.group(2).upper() + class OSISBible(BibleDB): """ `OSIS `_ Bible format importer class. @@ -60,6 +64,7 @@ class OSISBible(BibleDB): self.lg_regex = re.compile(r'') self.l_regex = re.compile(r'') self.w_regex = re.compile(r'') + self.q_regex = re.compile(r'') self.q1_regex = re.compile(r'') self.q2_regex = re.compile(r'') self.trans_regex = re.compile(r'(.*?)') @@ -81,7 +86,7 @@ class OSISBible(BibleDB): if fbibles: fbibles.close() - def do_import(self): + def do_import(self, bible_name=None): """ Loads a Bible from file. """ @@ -91,7 +96,6 @@ class OSISBible(BibleDB): osis = None success = True last_chapter = 0 - testament = 1 match_count = 0 self.wizard.incrementProgressBar(translate('BiblesPlugin.OsisImport', 'Detecting encoding (this may take a few minutes)...')) @@ -104,8 +108,14 @@ class OSISBible(BibleDB): finally: if detect_file: detect_file.close() + # Set meta language_id + language_id = self.get_language(bible_name) + if not language_id: + log.exception(u'Importing books from "%s" failed' % self.filename) + return False try: osis = codecs.open(self.filename, u'r', details['encoding']) + repl = replacement for file_record in osis: if self.stop_import_flag: break @@ -117,13 +127,19 @@ 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(u'New book: "%s"', self.books[book][0]) - if book == u'Matt' or book == u'Jdt': - testament += 1 + log.debug(u'New book: "%s"' % self.books[book][0]) + book_ref_id = self.get_book_ref_id_by_name(unicode( + self.books[book][0]), 67, language_id) + if not book_ref_id: + log.exception(u'Importing books from "%s" '\ + 'failed' % self.filename) + return False + book_details = BiblesResourcesDB.get_book_by_id( + book_ref_id) db_book = self.create_book( unicode(self.books[book][0]), - unicode(self.books[book][1]), - testament) + book_ref_id, + book_details[u'testament_id']) if last_chapter == 0: if book == u'Gen': self.wizard.progressBar.setMaximum(1188) @@ -148,12 +164,13 @@ class OSISBible(BibleDB): verse_text = self.rf_regex.sub(u'', verse_text) verse_text = self.lb_regex.sub(u' ', verse_text) verse_text = self.lg_regex.sub(u'', verse_text) - verse_text = self.l_regex.sub(u'', verse_text) + verse_text = self.l_regex.sub(u' ', verse_text) verse_text = self.w_regex.sub(u'', verse_text) verse_text = self.q1_regex.sub(u'"', verse_text) verse_text = self.q2_regex.sub(u'\'', verse_text) + verse_text = self.q_regex.sub(u'', verse_text) + verse_text = self.divine_name_regex.sub(repl, verse_text) verse_text = self.trans_regex.sub(u'', verse_text) - verse_text = self.divine_name_regex.sub(u'', verse_text) verse_text = verse_text.replace(u'', u'')\ .replace(u'', u'').replace(u'', u'')\ .replace(u'', u'').replace(u'', u'')\ diff --git a/openlp/plugins/bibles/lib/versereferencelist.py b/openlp/plugins/bibles/lib/versereferencelist.py index bc28f2570..471fc6a66 100644 --- a/openlp/plugins/bibles/lib/versereferencelist.py +++ b/openlp/plugins/bibles/lib/versereferencelist.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -96,4 +97,7 @@ class VerseReferenceList(object): version[u'copyright']) if version[u'permission'].strip(): result = result + u', ' + version[u'permission'] + result = result.rstrip() + if result.endswith(u','): + return result[:len(result)-1] return result diff --git a/openlp/plugins/bibles/resources/biblegateway.csv b/openlp/plugins/bibles/resources/biblegateway.csv deleted file mode 100644 index ad8052704..000000000 --- a/openlp/plugins/bibles/resources/biblegateway.csv +++ /dev/null @@ -1,81 +0,0 @@ -João Ferreira de Almeida Atualizada,AA -التفسير التطبيقى للكتاب المقدس,ALAB -Shqip,ALB -Amplified Bible,AMP -Amuzgo de Guerrero,AMU -American Standard Version,ASV -La Bible du Semeur,BDS -Български 1940,BG1940 -Български,BULG -Chinanteco de Comaltepec,CCO -Contemporary English Version,CEV -Cakchiquel Occidental,CKW -Hrvatski,CRO -Castilian,CST -聖經和合本 (简体中文),CUVS -聖經和合本 (繁体中文),CUV -Darby Translation,DARBY -Dette er Biblen på dansk,DN1933 -Det Norsk Bibelselskap 1930,DNB1930 -English Standard Version,ESV -GOD’S WORD Translation,GW -Holman Christian Standard Bible,HCSB -Kreyòl ayisyen bib,HCV -Hiligaynon Bible,HLGN -Hoffnung für Alle,HOF -Het Boek,HTB -Icelandic Bible,ICELAND -Jacalteco – Oriental,JAC -Károlyi-biblia,KAR -Kekchi,KEK -21st Century King James Version,KJ21 -King James Version,KJV -La Biblia de las Américas,LBLA -Levande Bibeln,LB -La Parola è Vita,LM -La Nuova Diodati,LND -Louis Segond,LSG -Luther Bibel 1545,LUTH1545 -Māori Bible,MAORI -Македонски Новиот Завет,MNT -The Message,MSG -Mam de Comitancillo Central,MVC -Mam de Todos Santos Cuchumatán,MVJ -New American Standard Bible,NASB -New Century Version,NCV -Náhuatl de Guerrero,NGU -New International Reader's Version,NIRV -New International Version 1984,NIV1984 -New International Version 2010,NIV -New International Version - UK,NIVUK -New King James Version,NKJV -New Living Translation,NLT -Nádej pre kazdého,NPK -Nueva Versión Internacional,NVI -O Livro,OL -Quiché – Centro Occidental,QUT -Reimer 2001,REIMER -Română Cornilescu,RMNN -Новый перевод на русский язык,RUSV -Reina-Valera Antigua,RVA -Reina-Valera 1960,RVR1960 -Reina-Valera 1995,RVR1995 -Slovo na cestu,SNC -Ang Salita ng Diyos,SND -Swahili New Testament,SNT -Svenska 1917,SV1917 -Levande Bibeln,SVL -Создать страницу,SZ -Traducción en lenguaje actual,TLA -New Romanian Translation,TLCR -Today’s New International Version 2005,TNIV -Textus Receptus Stephanus 1550,TR1550 -Textus Receptus Scrivener 1894,TR1894 -Українська Біблія. Переклад Івана Огієнка,UKR -Uspanteco,USP -Kinh Thánh tiếng Việt 1934,VIET -Worldwide English (New Testament),WE -Codex Vaticanus Westcott-Hort 1881,WHNU -Westminster Leningrad Codex,WLC -Wycliffe New Testament,WYC -Young's Literal Translation,YLT diff --git a/openlp/plugins/bibles/resources/bibles_resources.sqlite b/openlp/plugins/bibles/resources/bibles_resources.sqlite new file mode 100644 index 000000000..3235c9562 Binary files /dev/null and b/openlp/plugins/bibles/resources/bibles_resources.sqlite differ diff --git a/openlp/plugins/bibles/resources/bibleserver.csv b/openlp/plugins/bibles/resources/bibleserver.csv deleted file mode 100644 index 942d43116..000000000 --- a/openlp/plugins/bibles/resources/bibleserver.csv +++ /dev/null @@ -1,39 +0,0 @@ -عربي, ARA -Bible – překlad 21. století, B21 -Bible du Semeur, BDS -Българската Библия, BLG -Český ekumenický překlad, CEP -Hrvatski, CRO -Священное Писание, CRS -Version La Biblia al Dia, CST -中文和合本(简体), CUVS -Bibelen på hverdagsdansk, DK -Revidierte Elberfelder, ELB -Einheitsübersetzung, EU -Gute Nachricht Bibel, GNB -Hoffnung für alle, HFA -Hungarian, HUN -Het Boek, HTB -La Parola è Vita, ITA -IBS-fordítás (Új Károli), KAR -King James Version, KJV -Luther 1984, LUT -Septuaginta, LXX -Neue Genfer Übersetzung, NGU -New International Readers Version, NIRV -New International Version, NIV -Neues Leben, NL -En Levende Bok (NOR), NOR -Nádej pre kazdého, NPK -Noua traducere în limba românã, NTR -Nueva Versión Internacional, NVI -הברית הישנה, OT -Słowo Życia, POL -O Livro, PRT -Новый перевод на русский язык, RUS -Slovo na cestu, SNC -Schlachter 2000, SLT -En Levande Bok (SWE), SVL -Today's New International Version, TNIV -Türkçe, TR -Biblia Vulgata, VUL diff --git a/openlp/plugins/bibles/resources/crosswalkbooks.csv b/openlp/plugins/bibles/resources/crosswalkbooks.csv deleted file mode 100644 index 7957bfdc8..000000000 --- a/openlp/plugins/bibles/resources/crosswalkbooks.csv +++ /dev/null @@ -1,27 +0,0 @@ -New American Standard,nas -American Standard Version,asv -English Standard Version,esv -New King James Version,nkj -King James Version,kjv -Holman Christian Standard Bible,csb -Third Millennium Bible,tmb -New International Version,niv -New Living Translation,nlt -New Revised Standard,nrs -Revised Standard Version,rsv -Good News Translation,gnt -Douay-Rheims Bible,rhe -The Message,msg -The Complete Jewish Bible,cjb -New Century Version,ncv -GOD'S WORD Translation,gwd -Hebrew Names Version,hnv -World English Bible,web -The Bible in Basic English,bbe -Young's Literal Translation,ylt -Today's New International Version,tnv -New International Reader's Version,nrv -The Darby Translation,dby -The Webster Bible,wbt -The Latin Vulgate,vul -Weymouth New Testament,wnt diff --git a/openlp/plugins/bibles/resources/httpbooks.sqlite b/openlp/plugins/bibles/resources/httpbooks.sqlite deleted file mode 100644 index 406914b63..000000000 Binary files a/openlp/plugins/bibles/resources/httpbooks.sqlite and /dev/null differ diff --git a/openlp/plugins/custom/__init__.py b/openlp/plugins/custom/__init__.py index 5171155d2..3446f597e 100644 --- a/openlp/plugins/custom/__init__.py +++ b/openlp/plugins/custom/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index 0e88202ca..e9260f926 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,8 +27,6 @@ import logging -from forms import EditCustomForm - from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager from openlp.plugins.custom.lib import CustomMediaItem, CustomTab @@ -47,20 +46,19 @@ class CustomPlugin(Plugin): log.info(u'Custom Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Custom', plugin_helpers, + Plugin.__init__(self, u'custom', plugin_helpers, CustomMediaItem, CustomTab) self.weight = -5 self.manager = Manager(u'custom', init_schema) - self.edit_custom_form = EditCustomForm(self) self.icon_path = u':/plugins/plugin_custom.png' self.icon = build_icon(self.icon_path) def about(self): - about_text = translate('CustomPlugin', 'Custom Plugin' - '
The custom plugin provides the ability to set up custom ' - 'text slides that can be displayed on the screen the same way ' - 'songs are. This plugin provides greater freedom over the songs ' - 'plugin.') + about_text = translate('CustomPlugin', 'Custom Slide Plugin' + '
The custom slide plugin provides the ability to ' + 'set up custom text slides that can be displayed on the screen ' + 'the same way songs are. This plugin provides greater freedom ' + 'over the songs plugin.') return about_text def usesTheme(self, theme): @@ -97,26 +95,31 @@ class CustomPlugin(Plugin): """ ## Name PluginList ## self.textStrings[StringContent.Name] = { - u'singular': translate('CustomsPlugin', 'Custom', 'name singular'), - u'plural': translate('CustomsPlugin', 'Customs', 'name plural') + u'singular': translate('CustomPlugin', 'Custom Slide', + 'name singular'), + u'plural': translate('CustomPlugin', 'Custom Slides', + 'name plural') } ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { - u'title': translate('CustomsPlugin', 'Custom', 'container title') + u'title': translate('CustomPlugin', 'Custom Slides', + 'container title') } # Middle Header Bar tooltips = { - u'load': translate('CustomsPlugin', 'Load a new Custom'), - u'import': translate('CustomsPlugin', 'Import a Custom'), - u'new': translate('CustomsPlugin', 'Add a new Custom'), - u'edit': translate('CustomsPlugin', 'Edit the selected Custom'), - u'delete': translate('CustomsPlugin', 'Delete the selected Custom'), - u'preview': translate('CustomsPlugin', - 'Preview the selected Custom'), - u'live': translate('CustomsPlugin', - 'Send the selected Custom live'), - u'service': translate('CustomsPlugin', - 'Add the selected Custom to the service') + u'load': translate('CustomPlugin', 'Load a new custom slide.'), + u'import': translate('CustomPlugin', 'Import a custom slide.'), + u'new': translate('CustomPlugin', 'Add a new custom slide.'), + u'edit': translate('CustomPlugin', + 'Edit the selected custom slide.'), + u'delete': translate('CustomPlugin', + 'Delete the selected custom slide.'), + u'preview': translate('CustomPlugin', + 'Preview the selected custom slide.'), + u'live': translate('CustomPlugin', + 'Send the selected custom slide live.'), + u'service': translate('CustomPlugin', + 'Add the selected custom slide to the service.') } self.setPluginUiTextStrings(tooltips) diff --git a/openlp/plugins/custom/forms/__init__.py b/openlp/plugins/custom/forms/__init__.py index fb3cf975b..e901095c2 100644 --- a/openlp/plugins/custom/forms/__init__.py +++ b/openlp/plugins/custom/forms/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 1ea0413ff..3eee1cfd4 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -107,11 +108,11 @@ class Ui_CustomEditDialog(object): translate('CustomPlugin.EditCustomForm', 'Edit Custom Slides')) self.titleLabel.setText( translate('CustomPlugin.EditCustomForm', '&Title:')) - self.addButton.setText(UiStrings.Add) + self.addButton.setText(UiStrings().Add) self.addButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Add a new slide at ' 'bottom.')) - self.editButton.setText(UiStrings.Edit) + self.editButton.setText(UiStrings().Edit) self.editButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Edit the selected ' 'slide.')) @@ -124,4 +125,4 @@ class Ui_CustomEditDialog(object): translate('CustomPlugin.EditCustomForm', 'The&me:')) self.creditLabel.setText( translate('CustomPlugin.EditCustomForm', '&Credits:')) - self.previewButton.setText(UiStrings.SaveAndPreview) + self.previewButton.setText(UiStrings().SaveAndPreview) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index f81bd4c7d..a3a80caf9 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,7 +30,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate -from openlp.core.lib.ui import critical_error_message_box +from openlp.core.lib.ui import critical_error_message_box, find_and_set_in_combo_box from openlp.plugins.custom.lib import CustomXMLBuilder, CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide from editcustomdialog import Ui_CustomEditDialog @@ -42,13 +43,13 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): Class documentation goes here. """ log.info(u'Custom Editor loaded') - def __init__(self, parent): + def __init__(self, mediaitem, parent, manager): """ Constructor """ - QtGui.QDialog.__init__(self) - self.parent = parent - self.manager = self.parent.manager + QtGui.QDialog.__init__(self, parent) + self.manager = manager + self.mediaitem = mediaitem self.setupUi(self) # Create other objects and forms. self.editSlideForm = EditCustomSlideForm(self) @@ -65,6 +66,9 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) QtCore.QObject.connect(self.slideListView, QtCore.SIGNAL(u'currentRowChanged(int)'), self.onCurrentRowChanged) + QtCore.QObject.connect(self.slideListView, + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), + self.onEditButtonPressed) def loadThemes(self, themelist): self.themeComboBox.clear() @@ -98,15 +102,10 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): for slide in slideList: self.slideListView.addItem(slide[1]) theme = self.customSlide.theme_name - id = self.themeComboBox.findText(theme, QtCore.Qt.MatchExactly) - # No theme match - if id == -1: - id = 0 - self.themeComboBox.setCurrentIndex(id) + find_and_set_in_combo_box(self.themeComboBox, theme) + self.titleEdit.setFocus(QtCore.Qt.OtherFocusReason) # If not preview hide the preview button. - self.previewButton.setVisible(False) - if preview: - self.previewButton.setVisible(True) + self.previewButton.setVisible(preview) def reject(self): Receiver.send_message(u'custom_edit_clear') @@ -115,7 +114,6 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): def accept(self): log.debug(u'accept') if self.saveCustom(): - Receiver.send_message(u'custom_load_list') QtGui.QDialog.accept(self) def saveCustom(self): @@ -136,7 +134,9 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.customSlide.text = unicode(sxml.extract_xml(), u'utf-8') self.customSlide.credits = unicode(self.creditEdit.text()) self.customSlide.theme_name = unicode(self.themeComboBox.currentText()) - return self.manager.save_object(self.customSlide) + success = self.manager.save_object(self.customSlide) + self.mediaitem.auto_select_id = self.customSlide.id + return success def onUpButtonClicked(self): selectedRow = self.slideListView.currentRow() @@ -173,7 +173,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): item = self.slideListView.item(row) slide_list += item.text() if row != self.slideListView.count() - 1: - slide_list += u'\n[---]\n' + slide_list += u'\n[===]\n' self.editSlideForm.setText(slide_list) if self.editSlideForm.exec_(): self.updateSlideList(self.editSlideForm.getText(), True) diff --git a/openlp/plugins/custom/forms/editcustomslidedialog.py b/openlp/plugins/custom/forms/editcustomslidedialog.py index d6ebf23ec..759f6b19d 100644 --- a/openlp/plugins/custom/forms/editcustomslidedialog.py +++ b/openlp/plugins/custom/forms/editcustomslidedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,8 +27,8 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, SpellTextEdit -from openlp.core.lib.ui import create_accept_reject_button_box +from openlp.core.lib import translate, SpellTextEdit, build_icon +from openlp.core.lib.ui import create_accept_reject_button_box, UiStrings class Ui_CustomSlideEditDialog(object): def setupUi(self, customSlideEditDialog): @@ -39,16 +40,24 @@ class Ui_CustomSlideEditDialog(object): self.dialogLayout.addWidget(self.slideTextEdit) self.buttonBox = create_accept_reject_button_box(customSlideEditDialog) self.splitButton = QtGui.QPushButton(customSlideEditDialog) + self.splitButton.setIcon(build_icon(u':/general/general_add.png')) self.splitButton.setObjectName(u'splitButton') self.buttonBox.addButton(self.splitButton, QtGui.QDialogButtonBox.ActionRole) + self.insertButton = QtGui.QPushButton(customSlideEditDialog) + self.insertButton.setIcon(build_icon(u':/general/general_add.png')) + self.insertButton.setObjectName(u'insertButton') + self.buttonBox.addButton(self.insertButton, + QtGui.QDialogButtonBox.ActionRole) self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(customSlideEditDialog) QtCore.QMetaObject.connectSlotsByName(customSlideEditDialog) def retranslateUi(self, customSlideEditDialog): - self.splitButton.setText( - translate('CustomPlugin.EditCustomForm', 'Split Slide')) - self.splitButton.setToolTip( + self.splitButton.setText(UiStrings().Split) + self.splitButton.setToolTip(UiStrings().SplitToolTip) + self.insertButton.setText( + translate('CustomPlugin.EditCustomForm', 'Insert Slide')) + self.insertButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Split a slide into two ' 'by inserting a slide splitter.')) diff --git a/openlp/plugins/custom/forms/editcustomslideform.py b/openlp/plugins/custom/forms/editcustomslideform.py index 7d4e32968..71696ebc1 100644 --- a/openlp/plugins/custom/forms/editcustomslideform.py +++ b/openlp/plugins/custom/forms/editcustomslideform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -44,6 +45,8 @@ class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) # Connecting signals and slots + QtCore.QObject.connect(self.insertButton, + QtCore.SIGNAL(u'clicked()'), self.onInsertButtonPressed) QtCore.QObject.connect(self.splitButton, QtCore.SIGNAL(u'clicked()'), self.onSplitButtonPressed) @@ -63,13 +66,22 @@ class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog): """ Returns a list with all slides. """ - return self.slideTextEdit.toPlainText().split(u'\n[---]\n') + return self.slideTextEdit.toPlainText().split(u'\n[===]\n') - def onSplitButtonPressed(self): + def onInsertButtonPressed(self): """ Adds a slide split at the cursor. """ if self.slideTextEdit.textCursor().columnNumber() != 0: self.slideTextEdit.insertPlainText(u'\n') - self.slideTextEdit.insertPlainText(u'[---]\n') + self.slideTextEdit.insertPlainText(u'[===]\n') + self.slideTextEdit.setFocus() + + def onSplitButtonPressed(self): + """ + Adds a virtual split at cursor. + """ + if self.slideTextEdit.textCursor().columnNumber() != 0: + self.slideTextEdit.insertPlainText(u'\n') + self.slideTextEdit.insertPlainText(u'[---]') self.slideTextEdit.setFocus() diff --git a/openlp/plugins/custom/lib/__init__.py b/openlp/plugins/custom/lib/__init__.py index 25abdd38b..0e343b6cc 100644 --- a/openlp/plugins/custom/lib/__init__.py +++ b/openlp/plugins/custom/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index 8ab7ade51..8a7762f37 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,8 +33,8 @@ class CustomTab(SettingsTab): """ CustomTab is the Custom settings tab in the settings dialog. """ - def __init__(self, title, visible_title): - SettingsTab.__init__(self, title, visible_title) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'CustomTab') diff --git a/openlp/plugins/custom/lib/customxmlhandler.py b/openlp/plugins/custom/lib/customxmlhandler.py index 2babe3d12..ff9fab7a7 100644 --- a/openlp/plugins/custom/lib/customxmlhandler.py +++ b/openlp/plugins/custom/lib/customxmlhandler.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/custom/lib/db.py b/openlp/plugins/custom/lib/db.py index 35c24413a..0cefaf012 100644 --- a/openlp/plugins/custom/lib/db.py +++ b/openlp/plugins/custom/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 69265ed75..667434a8b 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -25,17 +26,29 @@ ############################################################################### import logging +import locale from PyQt4 import QtCore, QtGui +from sqlalchemy.sql import or_, func from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ - check_item_selected + check_item_selected, translate +from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings +from openlp.plugins.custom.forms import EditCustomForm from openlp.plugins.custom.lib import CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide log = logging.getLogger(__name__) +class CustomSearch(object): + """ + An enumeration for custom search methods. + """ + Titles = 1 + Themes = 2 + + class CustomMediaItem(MediaManagerItem): """ This is the custom media manager item for Custom Slides. @@ -44,26 +57,96 @@ class CustomMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'custom/custom' - MediaManagerItem.__init__(self, parent, self, icon) + MediaManagerItem.__init__(self, parent, plugin, icon) + self.edit_custom_form = EditCustomForm(self, self.plugin.formparent, + self.plugin.manager) self.singleServiceItem = False + self.quickPreviewAllowed = True + self.hasSearch = True # Holds information about whether the edit is remotly triggered and # which Custom is required. self.remoteCustom = -1 - self.manager = parent.manager + self.manager = plugin.manager def addEndHeaderBar(self): + self.addToolbarSeparator() + self.searchWidget = QtGui.QWidget(self) + self.searchWidget.setObjectName(u'searchWidget') + self.searchLayout = QtGui.QVBoxLayout(self.searchWidget) + self.searchLayout.setObjectName(u'searchLayout') + self.searchTextLayout = QtGui.QFormLayout() + self.searchTextLayout.setObjectName(u'searchTextLayout') + self.searchTextLabel = QtGui.QLabel(self.searchWidget) + self.searchTextLabel.setObjectName(u'searchTextLabel') + self.searchTextEdit = SearchEdit(self.searchWidget) + self.searchTextEdit.setObjectName(u'searchTextEdit') + self.searchTextLabel.setBuddy(self.searchTextEdit) + self.searchTextLayout.addRow(self.searchTextLabel, self.searchTextEdit) + self.searchLayout.addLayout(self.searchTextLayout) + self.searchButtonLayout = QtGui.QHBoxLayout() + self.searchButtonLayout.setObjectName(u'searchButtonLayout') + self.searchButtonLayout.addStretch() + self.searchTextButton = QtGui.QPushButton(self.searchWidget) + self.searchTextButton.setObjectName(u'searchTextButton') + self.searchButtonLayout.addWidget(self.searchTextButton) + self.searchLayout.addLayout(self.searchButtonLayout) + self.pageLayout.addWidget(self.searchWidget) + # Signals and slots + QtCore.QObject.connect(self.searchTextEdit, + QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick) + QtCore.QObject.connect(self.searchTextButton, + QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) + QtCore.QObject.connect(self.searchTextEdit, + QtCore.SIGNAL(u'textChanged(const QString&)'), + self.onSearchTextEditChanged) + QtCore.QObject.connect(self.searchTextEdit, + QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick) + QtCore.QObject.connect(self.searchTextEdit, + QtCore.SIGNAL(u'searchTypeChanged(int)'), + self.onSearchTextButtonClick) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'custom_edit'), self.onRemoteEdit) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'custom_edit_clear'), self.onRemoteEditClear) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'custom_load_list'), self.initialise) + QtCore.SIGNAL(u'custom_load_list'), self.loadList) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'custom_preview'), self.onPreviewClick) + def retranslateUi(self): + self.searchTextLabel.setText(u'%s:' % UiStrings().Search) + self.searchTextButton.setText(UiStrings().Search) + def initialise(self): + self.searchTextEdit.setSearchTypes([ + (CustomSearch.Titles, u':/songs/song_search_title.png', + translate('SongsPlugin.MediaItem', 'Titles')), + (CustomSearch.Themes, u':/slides/slide_theme.png', + UiStrings().Themes) + ]) self.loadList(self.manager.get_all_objects( CustomSlide, order_by_ref=CustomSlide.title)) + self.searchTextEdit.setCurrentSearchType(QtCore.QSettings().value( + u'%s/last search type' % self.settingsSection, + QtCore.QVariant(CustomSearch.Titles)).toInt()[0]) + + def loadList(self, custom_slides): + # Sort out what custom we want to select after loading the list. + self.save_auto_select_id() + self.listView.clear() + # Sort the customs by its title considering language specific + # characters. lower() is needed for windows! + custom_slides.sort( + cmp=locale.strcoll, key=lambda custom: custom.title.lower()) + for custom_slide in custom_slides: + custom_name = QtGui.QListWidgetItem(custom_slide.title) + custom_name.setData( + QtCore.Qt.UserRole, QtCore.QVariant(custom_slide.id)) + self.listView.addItem(custom_name) + # Auto-select the custom. + if custom_slide.id == self.auto_select_id: + self.listView.setCurrentItem(custom_name) + self.auto_select_id = -1 # Called to redisplay the custom list screen edith from a search # or from the exit of the Custom edit dialog. If remote editing is # active trigger it and clean up so it will not update again. @@ -73,65 +156,74 @@ class CustomMediaItem(MediaManagerItem): self.onPreviewClick() self.onRemoteEditClear() - def loadList(self, list): - self.listView.clear() - for customSlide in list: - custom_name = QtGui.QListWidgetItem(customSlide.title) - custom_name.setData( - QtCore.Qt.UserRole, QtCore.QVariant(customSlide.id)) - self.listView.addItem(custom_name) - def onNewClick(self): - self.parent.edit_custom_form.loadCustom(0) - self.parent.edit_custom_form.exec_() - self.initialise() + self.edit_custom_form.loadCustom(0) + self.edit_custom_form.exec_() + self.onClearTextButtonClick() + self.onSelectionChange() def onRemoteEditClear(self): self.remoteTriggered = None self.remoteCustom = -1 - def onRemoteEdit(self, customid): + def onRemoteEdit(self, message): """ Called by ServiceManager or SlideController by event passing - the Song Id in the payload along with an indicator to say which + the custom Id in the payload along with an indicator to say which type of display is required. """ - fields = customid.split(u':') - valid = self.manager.get_object(CustomSlide, fields[1]) + remote_type, custom_id = message.split(u':') + custom_id = int(custom_id) + valid = self.manager.get_object(CustomSlide, custom_id) if valid: - self.remoteCustom = fields[1] - self.remoteTriggered = fields[0] - self.parent.edit_custom_form.loadCustom(fields[1], - (fields[0] == u'P')) - self.parent.edit_custom_form.exec_() + self.remoteCustom = custom_id + self.remoteTriggered = remote_type + self.edit_custom_form.loadCustom(custom_id, (remote_type == u'P')) + self.edit_custom_form.exec_() + self.auto_select_id = -1 + self.onSearchTextButtonClick() def onEditClick(self): """ Edit a custom item """ - if check_item_selected(self.listView, UiStrings.SelectEdit): + if check_item_selected(self.listView, UiStrings().SelectEdit): item = self.listView.currentItem() item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.parent.edit_custom_form.loadCustom(item_id, False) - self.parent.edit_custom_form.exec_() - self.initialise() + self.edit_custom_form.loadCustom(item_id, False) + self.edit_custom_form.exec_() + self.auto_select_id = -1 + self.onSearchTextButtonClick() def onDeleteClick(self): """ Remove a custom item from the list and database """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): + items = self.listView.selectedIndexes() + if QtGui.QMessageBox.question(self, + UiStrings().ConfirmDelete, + translate('CustomPlugin.MediaItem', + 'Are you sure you want to delete the %n selected custom' + ' slides(s)?', '', + QtCore.QCoreApplication.CodecForTr, len(items)), + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: + return row_list = [item.row() for item in self.listView.selectedIndexes()] row_list.sort(reverse=True) id_list = [(item.data(QtCore.Qt.UserRole)).toInt()[0] for item in self.listView.selectedIndexes()] for id in id_list: - self.parent.manager.delete_object(CustomSlide, id) + self.plugin.manager.delete_object(CustomSlide, id) for row in row_list: self.listView.takeItem(row) + def onFocus(self): + self.searchTextEdit.setFocus() + def generateSlideData(self, service_item, item=None, xmlVersion=False): - raw_slides = [] raw_footer = [] slide = None theme = None @@ -139,7 +231,8 @@ class CustomMediaItem(MediaManagerItem): service_item.add_capability(ItemCapabilities.AllowsEdit) service_item.add_capability(ItemCapabilities.AllowsPreview) service_item.add_capability(ItemCapabilities.AllowsLoop) - customSlide = self.parent.manager.get_object(CustomSlide, item_id) + service_item.add_capability(ItemCapabilities.AllowsVirtualSplit) + customSlide = self.plugin.manager.get_object(CustomSlide, item_id) title = customSlide.title credit = customSlide.credits service_item.edit_id = item_id @@ -148,8 +241,7 @@ class CustomMediaItem(MediaManagerItem): service_item.theme = theme customXML = CustomXMLParser(customSlide.text) verseList = customXML.get_verses() - for verse in verseList: - raw_slides.append(verse[1]) + raw_slides = [verse[1] for verse in verseList] service_item.title = title for slide in raw_slides: service_item.add_from_text(slide[:30], slide) @@ -160,3 +252,55 @@ class CustomMediaItem(MediaManagerItem): raw_footer.append(u'') service_item.raw_footer = raw_footer return True + + def onSearchTextButtonClick(self): + # Save the current search type to the configuration. + QtCore.QSettings().setValue(u'%s/last search type' % + self.settingsSection, + QtCore.QVariant(self.searchTextEdit.currentSearchType())) + # Reload the list considering the new search type. + search_keywords = unicode(self.searchTextEdit.displayText()) + search_results = [] + search_type = self.searchTextEdit.currentSearchType() + if search_type == CustomSearch.Titles: + log.debug(u'Titles Search') + search_results = self.plugin.manager.get_all_objects(CustomSlide, + CustomSlide.title.like(u'%' + self.whitespace.sub(u' ', + search_keywords) + u'%'), order_by_ref=CustomSlide.title) + self.loadList(search_results) + elif search_type == CustomSearch.Themes: + log.debug(u'Theme Search') + search_results = self.plugin.manager.get_all_objects(CustomSlide, + CustomSlide.theme_name.like(u'%' + self.whitespace.sub(u' ', + search_keywords) + u'%'), order_by_ref=CustomSlide.title) + self.loadList(search_results) + self.check_search_result() + + def onSearchTextEditChanged(self, text): + """ + If search as type enabled invoke the search on each key press. + If the Title is being searched do not start until 2 characters + have been entered. + """ + search_length = 2 + if len(text) > search_length: + self.onSearchTextButtonClick() + elif len(text) == 0: + self.onClearTextButtonClick() + + def onClearTextButtonClick(self): + """ + Clear the search text. + """ + self.searchTextEdit.clear() + self.onSearchTextButtonClick() + + def search(self, string): + search_results = self.manager.get_all_objects(CustomSlide, + or_(func.lower(CustomSlide.title).like(u'%' + + string.lower() + u'%'), + func.lower(CustomSlide.text).like(u'%' + + string.lower() + u'%')), + order_by_ref=CustomSlide.title) + return [[custom.id, custom.title] for custom in search_results] + diff --git a/openlp/plugins/images/__init__.py b/openlp/plugins/images/__init__.py index a375f863f..b95ac000d 100644 --- a/openlp/plugins/images/__init__.py +++ b/openlp/plugins/images/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 5d009ad65..1ddbe8357 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -35,7 +36,7 @@ class ImagePlugin(Plugin): log.info(u'Image Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Images', plugin_helpers, ImageMediaItem) + Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem) self.weight = -7 self.icon_path = u':/plugins/plugin_images.png' self.icon = build_icon(self.icon_path) @@ -69,14 +70,14 @@ class ImagePlugin(Plugin): } # Middle Header Bar tooltips = { - u'load': translate('ImagePlugin', 'Load a new Image'), + u'load': translate('ImagePlugin', 'Load a new image.'), u'import': u'', - u'new': translate('ImagePlugin', 'Add a new Image'), - u'edit': translate('ImagePlugin', 'Edit the selected Image'), - u'delete': translate('ImagePlugin', 'Delete the selected Image'), - u'preview': translate('ImagePlugin', 'Preview the selected Image'), - u'live': translate('ImagePlugin', 'Send the selected Image live'), + u'new': translate('ImagePlugin', 'Add a new image.'), + u'edit': translate('ImagePlugin', 'Edit the selected image.'), + u'delete': translate('ImagePlugin', 'Delete the selected image.'), + u'preview': translate('ImagePlugin', 'Preview the selected image.'), + u'live': translate('ImagePlugin', 'Send the selected image live.'), u'service': translate('ImagePlugin', - 'Add the selected Image to the service') + 'Add the selected image to the service.') } self.setPluginUiTextStrings(tooltips) diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index 6a9e364f9..b26d00184 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index d9b139d68..acd420880 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,6 +27,7 @@ import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -45,20 +47,24 @@ class ImageMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'images/image' - MediaManagerItem.__init__(self, parent, self, icon) + MediaManagerItem.__init__(self, parent, plugin, icon) + self.quickPreviewAllowed = True + self.hasSearch = True QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'live_theme_changed'), self.liveThemeChanged) + # Allow DnD from the desktop + self.listView.activateDnD() def retranslateUi(self): self.onNewPrompt = translate('ImagePlugin.MediaItem', 'Select Image(s)') file_formats = get_images_filter() self.onNewFileMasks = u'%s;;%s (*.*) (*)' % (file_formats, - UiStrings.AllFiles) - self.replaceAction.setText(UiStrings.ReplaceBG) - self.replaceAction.setToolTip(UiStrings.ReplaceLiveBG) - self.resetAction.setText(UiStrings.ResetBG) - self.resetAction.setToolTip(UiStrings.ResetLiveBG) + UiStrings().AllFiles) + self.replaceAction.setText(UiStrings().ReplaceBG) + self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG) + self.resetAction.setText(UiStrings().ResetBG) + self.resetAction.setToolTip(UiStrings().ResetLiveBG) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -76,7 +82,7 @@ class ImageMediaItem(MediaManagerItem): u'thumbnails') check_directory_exists(self.servicePath) self.loadList(SettingsManager.load_list( - self.settingsSection, self.settingsSection)) + self.settingsSection, u'images'), True) def addListViewToToolBar(self): MediaManagerItem.addListViewToToolBar(self) @@ -104,10 +110,18 @@ class ImageMediaItem(MediaManagerItem): unicode(text.text()))) self.listView.takeItem(row) SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + u'images', self.getFileList()) - def loadList(self, list): - for imageFile in list: + def loadList(self, images, initialLoad=False): + if not initialLoad: + self.plugin.formparent.displayProgressBar(len(images)) + # Sort the themes by its filename considering language specific + # characters. lower() is needed for windows! + images.sort(cmp=locale.strcoll, + key=lambda filename: os.path.split(unicode(filename))[1].lower()) + for imageFile in images: + if not initialLoad: + self.plugin.formparent.incrementProgressBar() filename = os.path.split(unicode(imageFile))[1] thumb = os.path.join(self.servicePath, filename) if os.path.exists(thumb): @@ -119,62 +133,65 @@ class ImageMediaItem(MediaManagerItem): icon = self.iconFromFile(imageFile, thumb) item_name = QtGui.QListWidgetItem(filename) item_name.setIcon(icon) + item_name.setToolTip(imageFile) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile)) self.listView.addItem(item_name) + if not initialLoad: + self.plugin.formparent.finishedProgressBar() def generateSlideData(self, service_item, item=None, xmlVersion=False): - items = self.listView.selectedIndexes() - if items: - service_item.title = unicode(self.plugin.nameStrings[u'plural']) - service_item.add_capability(ItemCapabilities.AllowsMaintain) - service_item.add_capability(ItemCapabilities.AllowsPreview) - service_item.add_capability(ItemCapabilities.AllowsLoop) - 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: - critical_error_message_box( - 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()) - (path, name) = os.path.split(filename) - service_item.add_from_image(filename, name) - return True + if item: + items = [item] else: + items = self.listView.selectedItems() + if not items: + return False + service_item.title = unicode(self.plugin.nameStrings[u'plural']) + service_item.add_capability(ItemCapabilities.AllowsMaintain) + service_item.add_capability(ItemCapabilities.AllowsPreview) + service_item.add_capability(ItemCapabilities.AllowsLoop) + service_item.add_capability(ItemCapabilities.AllowsAdditions) + # force a nonexistent theme + service_item.theme = -1 + missing_items = [] + missing_items_filenames = [] + for bitem in items: + filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + if not os.path.exists(filename): + missing_items.append(bitem) + 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: + critical_error_message_box( + 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 bitem in items: + filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + (path, name) = os.path.split(filename) + service_item.add_from_image(filename, name) + return True def onResetClick(self): """ Called to reset the Live backgound with the image selected, """ self.resetAction.setVisible(False) - self.parent.liveController.display.resetImage() + self.plugin.liveController.display.resetImage() def liveThemeChanged(self): """ @@ -194,10 +211,25 @@ class ImageMediaItem(MediaManagerItem): 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) - self.resetAction.setVisible(True) + if self.plugin.liveController.display.directImage(name, + filename): + self.resetAction.setVisible(True) + else: + critical_error_message_box(UiStrings().LiveBGError, + translate('ImagePlugin.MediaItem', + 'There was no display item to amend.')) else: - critical_error_message_box(UiStrings.LiveBGError, + critical_error_message_box(UiStrings().LiveBGError, unicode(translate('ImagePlugin.MediaItem', 'There was a problem replacing your background, ' 'the image file "%s" no longer exists.')) % filename) + + def search(self, string): + files = SettingsManager.load_list(self.settingsSection, u'images') + results = [] + string = string.lower() + for file in files: + filename = os.path.split(unicode(file))[1] + if filename.lower().find(string) > -1: + results.append([file, filename]) + return results diff --git a/openlp/plugins/media/__init__.py b/openlp/plugins/media/__init__.py index 9271a0936..32cff0c44 100644 --- a/openlp/plugins/media/__init__.py +++ b/openlp/plugins/media/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/media/lib/__init__.py b/openlp/plugins/media/lib/__init__.py index 7f63c8108..25b8d531a 100644 --- a/openlp/plugins/media/lib/__init__.py +++ b/openlp/plugins/media/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 7612ab7c9..e3c36bd77 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -27,6 +28,7 @@ from datetime import datetime import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -37,6 +39,8 @@ from PyQt4.phonon import Phonon log = logging.getLogger(__name__) +CLAPPERBOARD = QtGui.QPixmap(u':/media/media_video.png').toImage() + class MediaMediaItem(MediaManagerItem): """ This is the custom media manager item for Media Slides. @@ -46,25 +50,30 @@ class MediaMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'images/image' self.background = False - self.PreviewFunction = QtGui.QPixmap( - u':/media/media_video.png').toImage() - MediaManagerItem.__init__(self, parent, self, icon) + self.PreviewFunction = CLAPPERBOARD + MediaManagerItem.__init__(self, parent, plugin, icon) self.singleServiceItem = False - self.mediaObject = Phonon.MediaObject(self) + self.hasSearch = True + self.mediaObject = None QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'video_background_replaced'), self.videobackgroundReplaced) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_phonon_creation'), + self.createPhonon) + # Allow DnD from the desktop + self.listView.activateDnD() def retranslateUi(self): self.onNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media') self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem', 'Videos (%s);;Audio (%s);;%s (*)')) % ( - u' '.join(self.parent.video_extensions_list), - u' '.join(self.parent.audio_extensions_list), UiStrings.AllFiles) - self.replaceAction.setText(UiStrings.ReplaceBG) - self.replaceAction.setToolTip(UiStrings.ReplaceLiveBG) - self.resetAction.setText(UiStrings.ResetBG) - self.resetAction.setToolTip(UiStrings.ResetLiveBG) + u' '.join(self.plugin.video_extensions_list), + u' '.join(self.plugin.audio_extensions_list), UiStrings().AllFiles) + self.replaceAction.setText(UiStrings().ReplaceBG) + self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG) + self.resetAction.setText(UiStrings().ResetBG) + self.resetAction.setToolTip(UiStrings().ResetLiveBG) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -89,7 +98,7 @@ class MediaMediaItem(MediaManagerItem): Called to reset the Live backgound with the media selected, """ self.resetAction.setVisible(False) - self.parent.liveController.display.resetVideo() + self.plugin.liveController.display.resetVideo() def videobackgroundReplaced(self): """ @@ -108,10 +117,14 @@ class MediaMediaItem(MediaManagerItem): filename = unicode(item.data(QtCore.Qt.UserRole).toString()) if os.path.exists(filename): (path, name) = os.path.split(filename) - self.parent.liveController.display.video(filename, 0, True) - self.resetAction.setVisible(True) + if self.plugin.liveController.display.video(filename, 0, True): + self.resetAction.setVisible(True) + else: + critical_error_message_box(UiStrings().LiveBGError, + translate('MediaPlugin.MediaItem', + 'There was no display item to amend.')) else: - critical_error_message_box(UiStrings.LiveBGError, + critical_error_message_box(UiStrings().LiveBGError, unicode(translate('MediaPlugin.MediaItem', 'There was a problem replacing your background, ' 'the media file "%s" no longer exists.')) % filename) @@ -133,12 +146,8 @@ class MediaMediaItem(MediaManagerItem): self.mediaObject.clearQueue() self.mediaObject.setCurrentSource(Phonon.MediaSource(filename)) if not self.mediaStateWait(Phonon.StoppedState): - # Due to string freeze, borrow a message from presentations - # This will be corrected in 1.9.6 - critical_error_message_box( - translate('PresentationPlugin.MediaItem', 'Unsupported File'), - unicode(translate('PresentationPlugin.MediaItem', - 'Unsupported File'))) + critical_error_message_box(UiStrings().UnsupportedFile, + UiStrings().UnsupportedFile) return False # File too big for processing if os.path.getsize(filename) <= 52428800: # 50MiB @@ -146,18 +155,12 @@ class MediaMediaItem(MediaManagerItem): if not self.mediaStateWait(Phonon.PlayingState) \ or self.mediaObject.currentSource().type() \ == Phonon.MediaSource.Invalid: - # Due to string freeze, borrow a message from presentations - # This will be corrected in 1.9.6 self.mediaObject.stop() - critical_error_message_box( - translate('PresentationPlugin.MediaItem', - 'Unsupported File'), - unicode(translate('PresentationPlugin.MediaItem', - 'Unsupported File'))) + critical_error_message_box(UiStrings().UnsupportedFile, + UiStrings().UnsupportedFile) return False - self.mediaLength = self.mediaObject.totalTime() / 1000 self.mediaObject.stop() - service_item.media_length = self.mediaLength + service_item.media_length = self.mediaObject.totalTime() / 1000 service_item.add_capability( ItemCapabilities.AllowsVariableStartTime) service_item.title = unicode(self.plugin.nameStrings[u'singular']) @@ -186,8 +189,7 @@ class MediaMediaItem(MediaManagerItem): def initialise(self): self.listView.clear() self.listView.setIconSize(QtCore.QSize(88, 50)) - self.loadList(SettingsManager.load_list(self.settingsSection, - self.settingsSection)) + self.loadList(SettingsManager.load_list(self.settingsSection, u'media')) def onDeleteClick(self): """ @@ -200,13 +202,32 @@ class MediaMediaItem(MediaManagerItem): for row in row_list: self.listView.takeItem(row) SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + u'media', self.getFileList()) - def loadList(self, list): - for file in list: - filename = os.path.split(unicode(file))[1] + def loadList(self, media): + # Sort the themes by its filename considering language specific + # characters. lower() is needed for windows! + media.sort(cmp=locale.strcoll, + key=lambda filename: os.path.split(unicode(filename))[1].lower()) + for track in media: + filename = os.path.split(unicode(track))[1] item_name = QtGui.QListWidgetItem(filename) - img = QtGui.QPixmap(u':/media/media_video.png').toImage() - item_name.setIcon(build_icon(img)) - item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) + item_name.setIcon(build_icon(CLAPPERBOARD)) + item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(track)) + item_name.setToolTip(track) self.listView.addItem(item_name) + + def createPhonon(self): + log.debug(u'CreatePhonon') + if not self.mediaObject: + self.mediaObject = Phonon.MediaObject(self) + + def search(self, string): + files = SettingsManager.load_list(self.settingsSection, u'media') + results = [] + string = string.lower() + for file in files: + filename = os.path.split(unicode(file))[1] + if filename.lower().find(string) > -1: + results.append([file, filename]) + return results diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 2679ad64f..058ea3149 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,8 +33,8 @@ class MediaTab(SettingsTab): """ MediaTab is the Media settings tab in the settings dialog. """ - def __init__(self, title, visible_title): - SettingsTab.__init__(self, title, visible_title) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'MediaTab') diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index e01e6846d..c215b1be0 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -38,7 +39,7 @@ class MediaPlugin(Plugin): log.info(u'%s MediaPlugin loaded', __name__) def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Media', plugin_helpers, + Plugin.__init__(self, u'media', plugin_helpers, MediaMediaItem, MediaTab) self.weight = -6 self.icon_path = u':/plugins/plugin_media.png' @@ -111,14 +112,14 @@ class MediaPlugin(Plugin): } # Middle Header Bar tooltips = { - u'load': translate('MediaPlugin', 'Load a new Media'), + u'load': translate('MediaPlugin', 'Load new media.'), u'import': u'', - u'new': translate('MediaPlugin', 'Add a new Media'), - u'edit': translate('MediaPlugin', 'Edit the selected Media'), - u'delete': translate('MediaPlugin', 'Delete the selected Media'), - u'preview': translate('MediaPlugin', 'Preview the selected Media'), - u'live': translate('MediaPlugin', 'Send the selected Media live'), + u'new': translate('MediaPlugin', 'Add new media.'), + u'edit': translate('MediaPlugin', 'Edit the selected media.'), + u'delete': translate('MediaPlugin', 'Delete the selected media.'), + u'preview': translate('MediaPlugin', 'Preview the selected media.'), + u'live': translate('MediaPlugin', 'Send the selected media live.'), u'service': translate('MediaPlugin', - 'Add the selected Media to the service') + 'Add the selected media to the service.') } self.setPluginUiTextStrings(tooltips) diff --git a/openlp/plugins/presentations/__init__.py b/openlp/plugins/presentations/__init__.py index bf077953a..d7cb7afe5 100644 --- a/openlp/plugins/presentations/__init__.py +++ b/openlp/plugins/presentations/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/presentations/lib/__init__.py b/openlp/plugins/presentations/lib/__init__.py index b41c2f2f6..3c4e0499d 100644 --- a/openlp/plugins/presentations/lib/__init__.py +++ b/openlp/plugins/presentations/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 8166a2258..36f684ad4 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -45,6 +46,7 @@ else: try: import uno from com.sun.star.beans import PropertyValue + from com.sun.star.task import ErrorCodeIOException uno_available = True except ImportError: uno_available = False @@ -123,7 +125,7 @@ class ImpressController(PresentationController): try: uno_instance = get_uno_instance(resolver) except: - log.exception(u'Unable to find running instance ') + log.warn(u'Unable to find running instance ') self.start_process() loop += 1 try: @@ -134,7 +136,7 @@ class ImpressController(PresentationController): "com.sun.star.frame.Desktop", uno_instance) return desktop except: - log.exception(u'Failed to get UNO desktop') + log.warn(u'Failed to get UNO desktop') return None def get_com_desktop(self): @@ -149,7 +151,7 @@ class ImpressController(PresentationController): try: desktop = self.manager.createInstance(u'com.sun.star.frame.Desktop') except AttributeError: - log.exception(u'Failure to find desktop - Impress may have closed') + log.warn(u'Failure to find desktop - Impress may have closed') return desktop if desktop else None def get_com_servicemanager(self): @@ -160,7 +162,7 @@ class ImpressController(PresentationController): try: return Dispatch(u'com.sun.star.ServiceManager') except pywintypes.com_error: - log.exception(u'Failed to get COM service manager. ' + log.warn(u'Failed to get COM service manager. ' u'Impress Controller has been disabled') return None @@ -178,7 +180,7 @@ class ImpressController(PresentationController): else: desktop = self.get_com_desktop() except: - log.exception(u'Failed to find an OpenOffice desktop to terminate') + log.warn(u'Failed to find an OpenOffice desktop to terminate') if not desktop: return docs = desktop.getComponents() @@ -189,7 +191,7 @@ class ImpressController(PresentationController): desktop.terminate() log.debug(u'OpenOffice killed') except: - log.exception(u'Failed to terminate OpenOffice') + log.warn(u'Failed to terminate OpenOffice') class ImpressDocument(PresentationDocument): @@ -219,7 +221,6 @@ class ImpressDocument(PresentationDocument): The file name of the presentatios to the run. """ log.debug(u'Load Presentation OpenOffice') - #print "s.dsk1 ", self.desktop if os.name == u'nt': desktop = self.controller.get_com_desktop() if desktop is None: @@ -234,17 +235,26 @@ class ImpressDocument(PresentationDocument): return False self.desktop = desktop properties = [] - properties.append(self.create_property(u'Minimized', True)) + if os.name != u'nt': + # Recent versions of Impress on Windows won't start the presentation + # if it starts as minimized. It seems OK on Linux though. + properties.append(self.create_property(u'Minimized', True)) properties = tuple(properties) try: self.document = desktop.loadComponentFromURL(url, u'_blank', 0, properties) except: - log.exception(u'Failed to load presentation %s' % url) + log.warn(u'Failed to load presentation %s' % url) return False + if os.name == u'nt': + # As we can't start minimized the Impress window gets in the way. + # Either window.setPosSize(0, 0, 200, 400, 12) or .setVisible(False) + window = self.document.getCurrentController().getFrame() \ + .getContainerWindow() + window.setVisible(False) self.presentation = self.document.getPresentation() self.presentation.Display = \ - self.controller.plugin.renderManager.screens.current_display + 1 + self.controller.plugin.renderer.screens.current[u'number'] + 1 self.control = None self.create_thumbnails() return True @@ -278,6 +288,9 @@ class ImpressDocument(PresentationDocument): doc.storeToURL(urlpath, props) self.convert_thumbnail(path, idx + 1) delete_file(path) + except ErrorCodeIOException, exception: + log.exception(u'ERROR! ErrorCodeIOException %d' % + exception.ErrCode) except: log.exception(u'%s - Unable to store openoffice preview' % path) @@ -310,7 +323,7 @@ class ImpressDocument(PresentationDocument): self.presentation = None self.document.dispose() except: - log.exception("Closing presentation failed") + log.warn("Closing presentation failed") self.document = None self.controller.remove_doc(self) @@ -328,7 +341,7 @@ class ImpressDocument(PresentationDocument): log.debug("getPresentation failed to find a presentation") return False except: - log.exception("getPresentation failed to find a presentation") + log.warn("getPresentation failed to find a presentation") return False return True @@ -387,14 +400,14 @@ class ImpressDocument(PresentationDocument): log.debug(u'start presentation OpenOffice') if self.control is None or not self.control.isRunning(): self.presentation.start() - # start() returns before the getCurrentComponent is ready. - # Try for 5 seconds + self.control = self.presentation.getController() + # start() returns before the Component is ready. + # Try for 15 seconds i = 1 - while self.desktop.getCurrentComponent() is None and i < 50: + while not self.control and i < 150: time.sleep(0.1) i = i + 1 - self.control = \ - self.desktop.getCurrentComponent().Presentation.getController() + self.control = self.presentation.getController() else: self.control.activate() self.goto_slide(1) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 6009ff906..85721c65d 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,6 +27,7 @@ import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -44,17 +46,20 @@ class PresentationMediaItem(MediaManagerItem): """ log.info(u'Presentations Media Item loaded') - def __init__(self, parent, icon, title, controllers): + def __init__(self, parent, plugin, icon, controllers): """ Constructor. Setup defaults """ self.controllers = controllers self.IconPath = u'presentations/presentation' self.Automatic = u'' - MediaManagerItem.__init__(self, parent, self, icon) + MediaManagerItem.__init__(self, parent, plugin, icon) self.message_listener = MessageListener(self) + self.hasSearch = True QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mediaitem_presentation_rebuild'), self.rebuild) + # Allow DnD from the desktop + self.listView.activateDnD() def retranslateUi(self): """ @@ -79,7 +84,7 @@ class PresentationMediaItem(MediaManagerItem): for type in types: if fileType.find(type) == -1: fileType += u'*.%s ' % type - self.parent.serviceManager.supportedSuffixes(type) + self.plugin.serviceManager.supportedSuffixes(type) self.onNewFileMasks = unicode(translate('PresentationPlugin.MediaItem', 'Presentations (%s)')) % fileType @@ -116,9 +121,9 @@ class PresentationMediaItem(MediaManagerItem): Populate the media manager tab """ self.listView.setIconSize(QtCore.QSize(88, 50)) - list = SettingsManager.load_list( + files = SettingsManager.load_list( self.settingsSection, u'presentations') - self.loadList(list, True) + self.loadList(files, True) self.populateDisplayTypes() def rebuild(self): @@ -148,17 +153,24 @@ class PresentationMediaItem(MediaManagerItem): else: self.presentationWidget.hide() - def loadList(self, list, initialLoad=False): + def loadList(self, files, initialLoad=False): """ Add presentations into the media manager This is called both on initial load of the plugin to populate with existing files, and when the user adds new files via the media manager """ currlist = self.getFileList() - titles = [] - for file in currlist: - titles.append(os.path.split(file)[1]) - for file in list: + titles = [os.path.split(file)[1] for file in currlist] + Receiver.send_message(u'cursor_busy') + if not initialLoad: + self.plugin.formparent.displayProgressBar(len(files)) + # Sort the themes by its filename considering language specific + # characters. lower() is needed for windows! + files.sort(cmp=locale.strcoll, + key=lambda filename: os.path.split(unicode(filename))[1].lower()) + for file in files: + if not initialLoad: + self.plugin.formparent.incrementProgressBar() if currlist.count(file) > 0: continue filename = os.path.split(unicode(file))[1] @@ -188,22 +200,24 @@ class PresentationMediaItem(MediaManagerItem): if initialLoad: icon = build_icon(u':/general/general_delete.png') else: - critical_error_message_box( - translate('PresentationPlugin.MediaItem', - 'Unsupported File'), + critical_error_message_box(UiStrings().UnsupportedFile, translate('PresentationPlugin.MediaItem', 'This type of presentation is not supported.')) continue item_name = QtGui.QListWidgetItem(filename) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) item_name.setIcon(icon) + item_name.setToolTip(file) self.listView.addItem(item_name) + Receiver.send_message(u'cursor_normal') + if not initialLoad: + self.plugin.formparent.finishedProgressBar() def onDeleteClick(self): """ Remove a presentation item from the list """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): items = self.listView.selectedIndexes() row_list = [item.row() for item in items] row_list.sort(reverse=True) @@ -217,7 +231,7 @@ class PresentationMediaItem(MediaManagerItem): for row in row_list: self.listView.takeItem(row) SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + u'presentations', self.getFileList()) def generateSlideData(self, service_item, item=None, xmlVersion=False): """ @@ -225,17 +239,19 @@ class PresentationMediaItem(MediaManagerItem): in the slidecontroller. In the case of powerpoints, an image for each slide """ - items = self.listView.selectedIndexes() - if len(items) > 1: - return False + if item: + items = [item] + else: + items = self.listView.selectedItems() + if len(items) > 1: + return False service_item.title = unicode(self.displayTypeComboBox.currentText()) service_item.shortname = unicode(self.displayTypeComboBox.currentText()) service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay) service_item.add_capability(ItemCapabilities.AllowsDetailedTitleDisplay) shortname = service_item.shortname if shortname: - for item in items: - bitem = self.listView.item(item.row()) + for bitem in items: filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) if os.path.exists(filename): if shortname == self.Automatic: @@ -285,7 +301,7 @@ class PresentationMediaItem(MediaManagerItem): "supports" the extension. If none found, then look for a controller which "also supports" it instead. """ - filetype = filename.split(u'.')[1] + filetype = os.path.splitext(filename)[1][1:] if not filetype: return None for controller in self.controllers: @@ -297,3 +313,14 @@ class PresentationMediaItem(MediaManagerItem): if filetype in self.controllers[controller].alsosupports: return controller return None + + def search(self, string): + files = SettingsManager.load_list( + self.settingsSection, u'presentations') + results = [] + string = string.lower() + for file in files: + filename = os.path.split(unicode(file))[1] + if filename.lower().find(string) > -1: + results.append([file, filename]) + return results diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index b86219f42..d9cc9bdf0 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -49,7 +50,7 @@ class Controller(object): self.doc = None log.info(u'%s controller loaded' % live) - def add_handler(self, controller, file, is_blank): + def add_handler(self, controller, file, hide_mode, slide_no): """ Add a handler, which is an instance of a presentation and slidecontroller combination. If the slidecontroller has a display @@ -64,12 +65,21 @@ class Controller(object): # Display error message to user # Inform slidecontroller that the action failed? return + self.doc.slidenumber = slide_no if self.is_live: - self.doc.start_presentation() - if is_blank: - self.blank() - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) - self.doc.slidenumber = 0 + if hide_mode == HideMode.Screen: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + self.stop() + elif hide_mode == HideMode.Theme: + self.blank(hide_mode) + elif hide_mode == HideMode.Blank: + self.blank(hide_mode) + else: + self.doc.start_presentation() + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + self.doc.slidenumber = 0 + if slide_no > 1: + self.slide(slide_no) def activate(self): """ @@ -85,6 +95,8 @@ class Controller(object): if self.is_live: self.doc.start_presentation() if self.doc.slidenumber > 1: + if self.doc.slidenumber > self.doc.get_slide_count(): + self.doc.slidenumber = self.doc.get_slide_count() self.doc.goto_slide(self.doc.slidenumber) def slide(self, slide): @@ -140,6 +152,11 @@ class Controller(object): if self.doc.slidenumber < self.doc.get_slide_count(): self.doc.slidenumber = self.doc.slidenumber + 1 return + # The "End of slideshow" screen is after the last slide + # Note, we can't just stop on the last slide, since it may + # contain animations that need to be stepped through. + if self.doc.slidenumber > self.doc.get_slide_count(): + return self.activate() self.doc.next_step() self.doc.poll_slidenumber(self.is_live) @@ -164,14 +181,10 @@ class Controller(object): Based on the handler passed at startup triggers slide show to shut down """ log.debug(u'Live = %s, shutdown' % self.is_live) - if self.is_live: - Receiver.send_message(u'maindisplay_show') self.doc.close_presentation() self.doc = None - #self.doc.slidenumber = 0 - #self.timer.stop() - def blank(self): + def blank(self, hide_mode): """ Instruct the controller to blank the presentation """ @@ -182,6 +195,8 @@ class Controller(object): return if not self.doc.is_active(): return + if hide_mode == HideMode.Theme: + Receiver.send_message(u'maindisplay_hide', HideMode.Theme) self.doc.blank_screen() def stop(self): @@ -261,7 +276,7 @@ class MessageListener(object): is_live = message[1] item = message[0] log.debug(u'Startup called with message %s' % message) - is_blank = message[2] + hide_mode = message[2] file = os.path.join(item.get_frame_path(), item.get_frame_title()) self.handler = item.title @@ -273,7 +288,8 @@ class MessageListener(object): controller = self.live_handler else: controller = self.preview_handler - controller.add_handler(self.controllers[self.handler], file, is_blank) + controller.add_handler(self.controllers[self.handler], file, hide_mode, + message[3]) def slide(self, message): """ @@ -333,7 +349,6 @@ class MessageListener(object): """ is_live = message[1] if is_live: - Receiver.send_message(u'maindisplay_show') self.live_handler.shutdown() else: self.preview_handler.shutdown() @@ -351,8 +366,9 @@ class MessageListener(object): React to the message to blank the display """ is_live = message[1] + hide_mode = message[2] if is_live: - self.live_handler.blank() + self.live_handler.blank(hide_mode) def unblank(self, message): """ diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 793b0b75d..8f551e411 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -251,14 +252,14 @@ class PowerpointDocument(PresentationDocument): win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(88) except win32ui.error: dpi = 96 - self.presentation.SlideShowSettings.Run() - self.presentation.SlideShowWindow.View.GotoSlide(1) - rendermanager = self.controller.plugin.renderManager - rect = rendermanager.screens.current[u'size'] - self.presentation.SlideShowWindow.Top = rect.y() * 72 / dpi - self.presentation.SlideShowWindow.Height = rect.height() * 72 / dpi - self.presentation.SlideShowWindow.Left = rect.x() * 72 / dpi - self.presentation.SlideShowWindow.Width = rect.width() * 72 / dpi + renderer = self.controller.plugin.renderer + rect = renderer.screens.current[u'size'] + ppt_window = self.presentation.SlideShowSettings.Run() + ppt_window.Top = rect.y() * 72 / dpi + ppt_window.Height = rect.height() * 72 / dpi + ppt_window.Left = rect.x() * 72 / dpi + ppt_window.Width = rect.width() * 72 / dpi + def get_slide_number(self): """ diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 94fd05f31..cd940da5c 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -121,8 +122,8 @@ class PptviewDocument(PresentationDocument): The file name of the presentations to run. """ log.debug(u'LoadPresentation') - rendermanager = self.controller.plugin.renderManager - rect = rendermanager.screens.current[u'size'] + renderer = self.controller.plugin.renderer + rect = renderer.screens.current[u'size'] rect = RECT(rect.x(), rect.y(), rect.right(), rect.bottom()) filepath = str(self.filepath.replace(u'/', u'\\')) if not os.path.isdir(self.get_temp_folder()): diff --git a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py index 337bdb09f..50cf515dc 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py +++ b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index 93e7b17d9..a679df582 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include #include #include @@ -88,7 +90,12 @@ DllExport BOOL CheckInstalled() char cmdLine[MAX_PATH * 2]; DEBUG("CheckInstalled\n"); - return GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + if(found) + { + DEBUG("Exe: %s\n", cmdLine); + } + return found; } // Open the PointPoint, count the slides and take a snapshot of each slide @@ -160,7 +167,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, pptView[id].rect.bottom = rect.bottom; pptView[id].rect.right = rect.right; } - strcat_s(cmdLine, MAX_PATH * 2, "/F /S \""); + strcat_s(cmdLine, MAX_PATH * 2, " /F /S \""); strcat_s(cmdLine, MAX_PATH * 2, filename); strcat_s(cmdLine, MAX_PATH * 2, "\""); memset(&si, 0, sizeof(si)); @@ -189,7 +196,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, Sleep(10); if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { - DEBUG("OpenPPT: CreateProcess failed\n"); + DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); ClosePPT(id); return -1; } @@ -344,16 +351,71 @@ BOOL SavePPTInfo(int id) // Get the path of the PowerPoint viewer from the registry BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) +{ + char cwd[MAX_PATH]; + + DEBUG("GetPPTViewerPath: start\n"); + if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) + { + if(_access(pptViewerPath, 0) != -1) + { + DEBUG("GetPPTViewerPath: exit registry\n"); + return TRUE; + } + } + // This is where it gets ugly. PPT2007 it seems no longer stores its + // location in the registry. So we have to use the defaults which will + // upset those who like to put things somewhere else + + // Viewer 2007 in 64bit Windows: + if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + 0) != -1) + { + strcpy_s( + "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); + return TRUE; + } + // Viewer 2007 in 32bit Windows: + if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) + != -1) + { + strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); + return TRUE; + } + // Give them the opportunity to place it in the same folder as the app + _getcwd(cwd, MAX_PATH); + strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); + if(_access(cwd, 0) != -1) + { + strcpy_s(pptViewerPath, stringSize, cwd); + DEBUG("GetPPTViewerPath: exit local\n"); + return TRUE; + } + DEBUG("GetPPTViewerPath: exit fail\n"); + return FALSE; +} +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) { HKEY hKey; DWORD dwType, dwSize; LRESULT lResult; - DEBUG("GetPPTViewerPath: start\n"); + // The following registry settings are for, respectively, (I think) + // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 + // PPT Viewer 2003 (recent versions) + // PPT Viewer 2003 (older versions) + // PPT Viewer 97 if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "PowerPointViewer.Show.11\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) && (RegOpenKeyEx(HKEY_CLASSES_ROOT, @@ -373,7 +435,6 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) } // remove "%1" from end of key value pptViewerPath[strlen(pptViewerPath) - 4] = '\0'; - DEBUG("GetPPTViewerPath: exit ok\n"); return TRUE; } diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll deleted file mode 100644 index 36581e00b..000000000 Binary files a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll and /dev/null differ diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h index 4c98f8bb3..98b0a21ab 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h @@ -49,6 +49,7 @@ LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam); BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize); +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize); HBITMAP CaptureWindow(HWND hWnd); VOID SaveBitmap(CHAR* filename, HBITMAP hBmp) ; VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename); diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 3c7bdcc33..738974add 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -105,7 +106,7 @@ class PresentationDocument(object): Loads the presentation and starts it ``presentation`` - The file name of the presentations to the run. + The file name of the presentations to the run. Returns False if the file could not be opened """ diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index 25ad04f82..b0c3de7a8 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,12 +34,12 @@ class PresentationTab(SettingsTab): """ PresentationsTab is the Presentations settings tab in the settings dialog. """ - def __init__(self, title, visible_title, controllers): + def __init__(self, parent, title, visible_title, controllers, icon_path): """ Constructor """ self.controllers = controllers - SettingsTab.__init__(self, title, visible_title) + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): """ @@ -86,7 +87,7 @@ class PresentationTab(SettingsTab): checkbox.setText( unicode(translate('PresentationPlugin.PresentationTab', '%s (unavailable)')) % controller.name) - self.AdvancedGroupBox.setTitle(UiStrings.Advanced) + self.AdvancedGroupBox.setTitle(UiStrings().Advanced) self.OverrideAppCheckBox.setText( translate('PresentationPlugin.PresentationTab', 'Allow presentation application to be overriden')) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 3575bbacd..a97f82159 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -51,18 +52,18 @@ class PresentationPlugin(Plugin): """ log.debug(u'Initialised') self.controllers = {} - Plugin.__init__(self, u'Presentations', plugin_helpers) + Plugin.__init__(self, u'presentations', plugin_helpers) self.weight = -8 self.icon_path = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.icon_path) - def getSettingsTab(self): + def getSettingsTab(self, parent): """ Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - return PresentationTab(self.name, visible_name[u'title'], - self.controllers) + return PresentationTab(parent, self.name, visible_name[u'title'], + self.controllers, self.icon_path) def initialise(self): """ @@ -71,13 +72,12 @@ class PresentationPlugin(Plugin): """ log.info(u'Presentations Initialising') Plugin.initialise(self) - self.insertToolboxItem() for controller in self.controllers: if self.controllers[controller].enabled(): try: self.controllers[controller].start_process() except: - log.exception(u'Failed to start controller process') + log.warn(u'Failed to start controller process') self.controllers[controller].available = False self.mediaItem.buildFileMaskString() @@ -99,7 +99,7 @@ class PresentationPlugin(Plugin): Create the Media Manager List """ return PresentationMediaItem( - self, self.icon, self.name, self.controllers) + self.mediadock.media_dock, self, self.icon, self.controllers) def registerControllers(self, controller): """ @@ -128,7 +128,7 @@ class PresentationPlugin(Plugin): try: __import__(modulename, globals(), locals(), []) except ImportError: - log.exception(u'Failed to import %s on path %s', + log.warn(u'Failed to import %s on path %s', modulename, path) controller_classes = PresentationController.__subclasses__() for controller_class in controller_classes: @@ -168,17 +168,18 @@ class PresentationPlugin(Plugin): } # Middle Header Bar tooltips = { - u'load': translate('PresentationPlugin', 'Load a new Presentation'), + u'load': translate('PresentationPlugin', + 'Load a new presentation.'), u'import': u'', u'new': u'', u'edit': u'', u'delete': translate('PresentationPlugin', - 'Delete the selected Presentation'), + 'Delete the selected presentation.'), u'preview': translate('PresentationPlugin', - 'Preview the selected Presentation'), + 'Preview the selected presentation.'), u'live': translate('PresentationPlugin', - 'Send the selected Presentation live'), + 'Send the selected presentation live.'), u'service': translate('PresentationPlugin', - 'Add the selected Presentation to the service') + 'Add the selected presentation to the service.') } self.setPluginUiTextStrings(tooltips) diff --git a/openlp/plugins/remotes/__init__.py b/openlp/plugins/remotes/__init__.py index 6dc3d5cce..ab1d8adbc 100644 --- a/openlp/plugins/remotes/__init__.py +++ b/openlp/plugins/remotes/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/remotes/html/index.html b/openlp/plugins/remotes/html/index.html index 3708db654..4d3076e3a 100644 --- a/openlp/plugins/remotes/html/index.html +++ b/openlp/plugins/remotes/html/index.html @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # @@ -26,71 +27,108 @@ --> - OpenLP 2.0 Remote + ${app_title} +
- Back -

Service Manager

+ ${back} +

${service_manager}

+ ${refresh}
- Back -

Slide Controller

+ ${back} +

${slide_controller}

+ ${refresh}
- Back -

Alerts

+ ${back} +

${alerts}

- +
- Show Alert + ${show_alert} +
+
+ +
+
+

${options}

+
+
diff --git a/openlp/plugins/remotes/html/json2.js b/openlp/plugins/remotes/html/json2.js old mode 100755 new mode 100644 diff --git a/openlp/plugins/remotes/html/openlp.css b/openlp/plugins/remotes/html/openlp.css index 225079510..af52d69c3 100644 --- a/openlp/plugins/remotes/html/openlp.css +++ b/openlp/plugins/remotes/html/openlp.css @@ -5,7 +5,8 @@ * Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael * * Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, * * Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, * - * Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund * + * Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 * diff --git a/openlp/plugins/remotes/html/openlp.js b/openlp/plugins/remotes/html/openlp.js index cff36b42c..038763fe5 100644 --- a/openlp/plugins/remotes/html/openlp.js +++ b/openlp/plugins/remotes/html/openlp.js @@ -5,7 +5,8 @@ * Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael * * Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, * * Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, * - * Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund * + * Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 * @@ -39,6 +40,19 @@ window.OpenLP = { } return $(targ); }, + getSearchablePlugins: function (event) { + $.getJSON( + "/api/plugin/search", + function (data, status) { + var select = $("#search-plugin"); + select.html(""); + $.each(data.results.items, function (idx, value) { + select.append(""); + }); + select.selectmenu("refresh"); + } + ); + }, loadService: function (event) { $.getJSON( "/api/service/list", @@ -48,6 +62,7 @@ window.OpenLP = { $.each(data.results.items, function (idx, value) { var li = $("
  • ").append( $("").attr("value", parseInt(idx, 10)).text(value["title"])); + li.attr("uuid", value["id"]) li.children("a").click(OpenLP.setItem); ul.append(li); }); @@ -62,8 +77,12 @@ window.OpenLP = { var ul = $("#slide-controller > div[data-role=content] > ul[data-role=listview]"); ul.html(""); for (idx in data.results.slides) { + var text = data.results.slides[idx]["tag"]; + if (text != "") text = text + ": "; + text = text + data.results.slides[idx]["text"]; + text = text.replace(/\n/g, '
    '); var li = $("
  • ").append( - $("").attr("value", parseInt(idx, 10)).html(data.results.slides[idx]["text"])); + $("").attr("value", parseInt(idx, 10)).html(text)); if (data.results.slides[idx]["selected"]) { li.attr("data-theme", "e"); } @@ -112,16 +131,17 @@ window.OpenLP = { $.getJSON( "/api/poll", function (data, status) { + var prevItem = OpenLP.currentItem; OpenLP.currentSlide = data.results.slide; OpenLP.currentItem = data.results.item; if ($("#service-manager").is(":visible")) { $("#service-manager div[data-role=content] ul[data-role=listview] li").attr("data-theme", "c").removeClass("ui-btn-up-e").addClass("ui-btn-up-c"); $("#service-manager div[data-role=content] ul[data-role=listview] li a").each(function () { var item = $(this); - if (item.text() == OpenLP.currentItem) { - while (item[0].tagName != "LI") { - item = item.parent(); - } + while (item[0].tagName != "LI") { + item = item.parent(); + } + if (item.attr("uuid") == OpenLP.currentItem) { item.attr("data-theme", "e").removeClass("ui-btn-up-c").addClass("ui-btn-up-e"); return false; } @@ -129,6 +149,10 @@ window.OpenLP = { $("#service-manager div[data-role=content] ul[data-role=listview]").listview("refresh"); } if ($("#slide-controller").is(":visible")) { + if (prevItem != OpenLP.currentItem) { + OpenLP.loadController(); + return; + } var idx = 0; $("#slide-controller div[data-role=content] ul[data-role=listview] li").attr("data-theme", "c").removeClass("ui-btn-up-e").addClass("ui-btn-up-c"); $("#slide-controller div[data-role=content] ul[data-role=listview] li a").each(function () { @@ -181,6 +205,59 @@ window.OpenLP = { } ); return false; + }, + search: function (event) { + var text = JSON.stringify({"request": {"text": $("#search-text").val()}}); + $.getJSON( + "/api/" + $("#search-plugin").val() + "/search", + {"data": text}, + function (data, status) { + var ul = $("#search > div[data-role=content] > ul[data-role=listview]"); + ul.html(""); + if (data.results.items.length == 0) { + var li = $("
  • ").text(translationStrings["no_results"]); + ul.append(li); + } + else { + $.each(data.results.items, function (idx, value) { + ul.append($("
  • ").append($("").attr("href", "#options") + .attr("data-rel", "dialog").attr("data-transition", "pop") + .attr("value", value[0]).click(OpenLP.showOptions) + .text(value[1]))); + }); + } + ul.listview("refresh"); + } + ); + return false; + }, + showOptions: function (event) { + var element = OpenLP.getElement(event); + console.log(element); + $("#selected-item").val(element.attr("value")); + }, + goLive: function (event) { + var id = $("#selected-item").val(); + var text = JSON.stringify({"request": {"id": id}}); + $.getJSON( + "/api/" + $("#search-plugin").val() + "/live", + {"data": text} + ); + $.mobile.changePage("#slide-controller"); + return false; + }, + addToService: function (event) { + var id = $("#selected-item").val(); + var text = JSON.stringify({"request": {"id": id}}); + $.getJSON( + "/api/" + $("#search-plugin").val() + "/add", + {"data": text}, + function () { + history.back(); + } + ); + $("#options").dialog("close"); + return false; } } // Service Manager @@ -199,6 +276,12 @@ $("#controller-blank").live("click", OpenLP.blankDisplay); $("#controller-unblank").live("click", OpenLP.unblankDisplay); // Alerts $("#alert-submit").live("click", OpenLP.showAlert); +// Search +$("#search-submit").live("click", OpenLP.search); +$("#go-live").live("click", OpenLP.goLive); +$("#add-to-service").live("click", OpenLP.addToService); // Poll the server twice a second to get any updates. +OpenLP.getSearchablePlugins(); +$.ajaxSetup({ cache: false }); setInterval("OpenLP.pollServer();", 500); OpenLP.pollServer(); diff --git a/openlp/plugins/remotes/html/stage.css b/openlp/plugins/remotes/html/stage.css new file mode 100644 index 000000000..f5a8453f4 --- /dev/null +++ b/openlp/plugins/remotes/html/stage.css @@ -0,0 +1,69 @@ +/***************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * ------------------------------------------------------------------------- * + * Copyright (c) 2008-2010 Raoul Snyman * + * Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael * + * Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Khler, * + * Andreas Preikschat, Mattias Pldaru, Christian Richter, Philip Ridout, * + * Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 * + *****************************************************************************/ + +body { + background-color: black; + font-family: sans-serif; + overflow: hidden; +} + +#currentslide { + font-size: 40pt; + color: white; + padding-bottom: 0px; +} + +#nextslide { + font-size: 40pt; + color: grey; + padding-top: 0px; + padding-bottom: 0px; +} + +#right { + float: right; +} + +#clock { + font-size: 40pt; + color: yellow; + text-align: right; +} + +#notes { + font-size: 36pt; + color: salmon; + text-align: right; +} + +#verseorder { + font-size: 30pt; + color: green; + text-align: left; +} + +.currenttag { + color: lightgreen; + font-weight: bold; +} diff --git a/openlp/core/lib/displaytags.py b/openlp/plugins/remotes/html/stage.html similarity index 58% rename from openlp/core/lib/displaytags.py rename to openlp/plugins/remotes/html/stage.html index b584af023..c5d0872d0 100644 --- a/openlp/core/lib/displaytags.py +++ b/openlp/plugins/remotes/html/stage.html @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - + + + + + + ${stage_title} + + + + + + + +
    +
    +
    + + diff --git a/openlp/plugins/remotes/html/stage.js b/openlp/plugins/remotes/html/stage.js new file mode 100644 index 000000000..09c82c49b --- /dev/null +++ b/openlp/plugins/remotes/html/stage.js @@ -0,0 +1,154 @@ +/***************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * ------------------------------------------------------------------------- * + * Copyright (c) 2008-2010 Raoul Snyman * + * Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael * + * Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Khler, * + * Andreas Preikschat, Mattias Pldaru, Christian Richter, Philip Ridout, * + * Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 * + *****************************************************************************/ +window.OpenLP = { + loadService: function (event) { + $.getJSON( + "/api/service/list", + function (data, status) { + OpenLP.nextSong = ""; + $("#notes").html(""); + for (idx in data.results.items) { + idx = parseInt(idx, 10); + if ((data.results.items[idx]["selected"]) && + (data.results.items.length > idx + 1)) { + $("#notes").html(data.results.items[idx]["notes"]); + OpenLP.nextSong = data.results.items[idx + 1]["title"]; + break; + } + } + OpenLP.updateSlide(); + } + ); + }, + loadSlides: function (event) { + $.getJSON( + "/api/controller/live/text", + function (data, status) { + OpenLP.currentSlides = data.results.slides; + OpenLP.currentSlide = 0; + OpenLP.currentTags = Array(); + var div = $("#verseorder"); + div.html(""); + var tag = ""; + var tags = 0; + var lastChange = 0; + $.each(data.results.slides, function(idx, slide) { + var prevtag = tag; + tag = slide["tag"]; + if (tag != prevtag) { + // If the tag has changed, add new one to the list + lastChange = idx; + tags = tags + 1; + div.append(" "); + $("#verseorder span").last().attr("id", "tag" + tags).text(tag); + } + else { + if ((slide["text"] == data.results.slides[lastChange]["text"]) && + (data.results.slides.length > idx + (idx - lastChange))) { + // If the tag hasn't changed, check to see if the same verse + // has been repeated consecutively. Note the verse may have been + // split over several slides, so search through. If so, repeat the tag. + var match = true; + for (var idx2 = 0; idx2 < idx - lastChange; idx2++) { + if(data.results.slides[lastChange + idx2]["text"] != data.results.slides[idx + idx2]["text"]) { + match = false; + break; + } + } + if (match) { + lastChange = idx; + tags = tags + 1; + div.append(" "); + $("#verseorder span").last().attr("id", "tag" + tags).text(tag); + } + } + } + OpenLP.currentTags[idx] = tags; + if (slide["selected"]) + OpenLP.currentSlide = idx; + }) + OpenLP.loadService(); + } + ); + }, + updateSlide: function() { + // Show the current slide on top. Any trailing slides for the same verse + // are shown too underneath in grey. + // Then leave a blank line between following verses + $("#verseorder span").removeClass("currenttag"); + $("#tag" + OpenLP.currentTags[OpenLP.currentSlide]).addClass("currenttag"); + var slide = OpenLP.currentSlides[OpenLP.currentSlide]; + var text = slide["text"]; + text = text.replace(/\n/g, "
    "); + $("#currentslide").html(text); + text = ""; + if (OpenLP.currentSlide < OpenLP.currentSlides.length - 1) { + for (var idx = OpenLP.currentSlide + 1; idx < OpenLP.currentSlides.length; idx++) { + if (OpenLP.currentTags[idx] != OpenLP.currentTags[idx - 1]) + text = text + "

    "; + text = text + OpenLP.currentSlides[idx]["text"]; + if (OpenLP.currentTags[idx] != OpenLP.currentTags[idx - 1]) + text = text + "

    "; + else + text = text + "
    "; + } + text = text.replace(/\n/g, "
    "); + $("#nextslide").html(text); + } + else { + text = "

    " + $("#next-text").val() + ": " + OpenLP.nextSong + "

    "; + $("#nextslide").html(text); + } + }, + updateClock: function() { + var div = $("#clock"); + var t = new Date(); + var h = t.getHours(); + if (h > 12) + h = h - 12; + var m = t.getMinutes(); + if (m < 10) + m = '0' + m + ''; + div.html(h + ":" + m); + }, + pollServer: function () { + $.getJSON( + "/api/poll", + function (data, status) { + OpenLP.updateClock(); + if (OpenLP.currentItem != data.results.item) { + OpenLP.currentItem = data.results.item; + OpenLP.loadSlides(); + } + else if (OpenLP.currentSlide != data.results.slide) { + OpenLP.currentSlide = parseInt(data.results.slide, 10); + OpenLP.updateSlide(); + } + } + ); + } +} +$.ajaxSetup({ cache: false }); +setInterval("OpenLP.pollServer();", 500); +OpenLP.pollServer(); diff --git a/openlp/plugins/remotes/lib/__init__.py b/openlp/plugins/remotes/lib/__init__.py index c1a170c1b..e1291f2a0 100644 --- a/openlp/plugins/remotes/lib/__init__.py +++ b/openlp/plugins/remotes/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index caf4ba396..1545986f0 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -34,6 +35,9 @@ the remotes. ``/`` Go to the web interface. +``/stage`` + Show the stage view. + ``/files/{filename}`` Serve a static file. @@ -111,7 +115,6 @@ import logging import os import urlparse import re -from pprint import pformat try: import json @@ -119,10 +122,11 @@ except ImportError: import simplejson as json from PyQt4 import QtCore, QtNetwork +from mako.template import Template -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, PluginStatus, StringContent from openlp.core.ui import HideMode -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, translate log = logging.getLogger(__name__) @@ -146,16 +150,14 @@ class HttpResponse(object): class HttpServer(object): """ - Ability to control OpenLP via a webbrowser - e.g. http://localhost:4316/send/slidecontroller_live_next - http://localhost:4316/send/alerts_text?q=your%20alert%20text + Ability to control OpenLP via a web browser. """ - def __init__(self, parent): + def __init__(self, plugin): """ - Initialise the httpserver, and start the server + Initialise the httpserver, and start the server. """ log.debug(u'Initialise httpserver') - self.parent = parent + self.plugin = plugin self.html_dir = os.path.join( AppLocation.get_directory(AppLocation.PluginsDir), u'remotes', u'html') @@ -166,16 +168,16 @@ class HttpServer(object): def start_tcp(self): """ - Start the http server, use the port in the settings default to 4316 + Start the http server, use the port in the settings default to 4316. Listen out for slide and song changes so they can be broadcast to - clients. Listen out for socket connections + clients. Listen out for socket connections. """ log.debug(u'Start TCP server') port = QtCore.QSettings().value( - self.parent.settingsSection + u'/port', + self.plugin.settingsSection + u'/port', QtCore.QVariant(4316)).toInt()[0] address = QtCore.QSettings().value( - self.parent.settingsSection + u'/ip address', + self.plugin.settingsSection + u'/ip address', QtCore.QVariant(u'0.0.0.0')).toString() self.server = QtNetwork.QTcpServer() self.server.listen(QtNetwork.QHostAddress(address), port) @@ -191,20 +193,20 @@ class HttpServer(object): def slide_change(self, row): """ - Slide change listener. Store the item and tell the clients + Slide change listener. Store the item and tell the clients. """ self.current_slide = row def item_change(self, items): """ - Item (song) change listener. Store the slide and tell the clients + Item (song) change listener. Store the slide and tell the clients. """ self.current_item = items[0] def new_connection(self): """ A new http connection has been made. Create a client object to handle - communication + communication. """ log.debug(u'new http connection') socket = self.server.nextPendingConnection() @@ -221,15 +223,16 @@ class HttpServer(object): def close(self): """ - Close down the http server + Close down the http server. """ log.debug(u'close http server') self.server.close() + class HttpConnection(object): """ A single connection, this handles communication between the server - and the client + and the client. """ def __init__(self, parent, socket): """ @@ -241,36 +244,71 @@ class HttpConnection(object): self.parent = parent self.routes = [ (u'^/$', self.serve_file), + (u'^/(stage)$', self.serve_file), (r'^/files/(.*)$', self.serve_file), (r'^/api/poll$', self.poll), (r'^/api/controller/(live|preview)/(.*)$', self.controller), (r'^/api/service/(.*)$', self.service), (r'^/api/display/(hide|show)$', self.display), - (r'^/api/alert$', self.alert) + (r'^/api/alert$', self.alert), + (r'^/api/plugin/(search)$', self.pluginInfo), + (r'^/api/(.*)/search$', self.search), + (r'^/api/(.*)/live$', self.go_live), + (r'^/api/(.*)/add$', self.add_to_service) ] QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'readyRead()'), self.ready_read) QtCore.QObject.connect(self.socket, QtCore.SIGNAL(u'disconnected()'), self.disconnected) + self.translate() def _get_service_items(self): service_items = [] - service_manager = self.parent.parent.serviceManager - item = service_manager.findServiceItem()[0] - if item >= 0 and item < len(service_manager.serviceItems): - curitem = service_manager.serviceItems[item] + service_manager = self.parent.plugin.serviceManager + if self.parent.current_item: + cur_uuid = self.parent.current_item._uuid else: - curitem = None + cur_uuid = None for item in service_manager.serviceItems: service_item = item[u'service_item'] service_items.append({ + u'id': unicode(service_item._uuid), u'title': unicode(service_item.get_display_title()), u'plugin': unicode(service_item.name), u'notes': unicode(service_item.notes), - u'selected': (item == curitem) + u'selected': (service_item._uuid == cur_uuid) }) return service_items + def translate(self): + """ + Translate various strings in the mobile app. + """ + self.template_vars = { + 'app_title': translate('RemotePlugin.Mobile', 'OpenLP 2.0 Remote'), + 'stage_title': translate('RemotePlugin.Mobile', + 'OpenLP 2.0 Stage View'), + 'service_manager': translate('RemotePlugin.Mobile', + 'Service Manager'), + 'slide_controller': translate('RemotePlugin.Mobile', + 'Slide Controller'), + 'alerts': translate('RemotePlugin.Mobile', 'Alerts'), + 'search': translate('RemotePlugin.Mobile', 'Search'), + 'back': translate('RemotePlugin.Mobile', 'Back'), + 'refresh': translate('RemotePlugin.Mobile', 'Refresh'), + 'blank': translate('RemotePlugin.Mobile', 'Blank'), + 'show': translate('RemotePlugin.Mobile', 'Show'), + 'prev': translate('RemotePlugin.Mobile', 'Prev'), + 'next': translate('RemotePlugin.Mobile', 'Next'), + 'text': translate('RemotePlugin.Mobile', 'Text'), + 'show_alert': translate('RemotePlugin.Mobile', 'Show Alert'), + 'go_live': translate('RemotePlugin.Mobile', 'Go Live'), + 'add_to_service': translate('RemotePlugin.Mobile', + 'Add to Service'), + 'no_results': translate('RemotePlugin.Mobile', 'No Results'), + 'options': translate('RemotePlugin.Mobile', 'Options') + } + def ready_read(self): """ Data has been sent from the client. Respond to it @@ -312,12 +350,18 @@ class HttpConnection(object): log.debug(u'serve file request %s' % filename) if not filename: filename = u'index.html' + elif filename == u'stage': + filename = u'stage.html' path = os.path.normpath(os.path.join(self.parent.html_dir, filename)) if not path.startswith(self.parent.html_dir): return HttpResponse(code=u'404 Not Found') ext = os.path.splitext(filename)[1] + html = None if ext == u'.html': mimetype = u'text/html' + variables = self.template_vars + html = Template(filename=path, input_encoding=u'utf-8', + output_encoding=u'utf-8').render(**variables) elif ext == u'.css': mimetype = u'text/css' elif ext == u'.js': @@ -332,9 +376,12 @@ class HttpConnection(object): mimetype = u'text/plain' file_handle = None try: - file_handle = open(path, u'rb') - log.debug(u'Opened %s' % path) - content = file_handle.read() + if html: + content = html + else: + file_handle = open(path, u'rb') + log.debug(u'Opened %s' % path) + content = file_handle.read() except IOError: log.exception(u'Failed to open %s' % path) return HttpResponse(code=u'404 Not Found') @@ -349,11 +396,11 @@ class HttpConnection(object): """ result = { u'slide': self.parent.current_slide or 0, - u'item': self.parent.current_item.title \ + u'item': self.parent.current_item._uuid \ if self.parent.current_item else u'' } return HttpResponse(json.dumps({u'results': result}), - {u'Content-Type': u'application/json'}) + {u'Content-Type': u'application/json'}) def display(self, action): """ @@ -395,11 +442,16 @@ class HttpConnection(object): for index, frame in enumerate(current_item.get_frames()): item = {} if current_item.is_text(): - item[u'tag'] = unicode(frame[u'verseTag']) - item[u'text'] = unicode(frame[u'html']) + if frame[u'verseTag']: + item[u'tag'] = unicode(frame[u'verseTag']) + else: + item[u'tag'] = unicode(index + 1) + item[u'text'] = unicode(frame[u'text']) + item[u'html'] = unicode(frame[u'html']) else: - item[u'tag'] = unicode(index) - item[u'text'] = u'' + item[u'tag'] = unicode(index + 1) + item[u'text'] = unicode(frame[u'title']) + item[u'html'] = unicode(frame[u'title']) item[u'selected'] = (self.parent.current_slide == index) data.append(item) json_data = {u'results': {u'slides': data}} @@ -432,6 +484,62 @@ class HttpConnection(object): return HttpResponse(json.dumps({u'results': {u'success': True}}), {u'Content-Type': u'application/json'}) + def pluginInfo(self, action): + """ + Return plugin related information, based on the action. + + ``action`` + The action to perform. If *search* return a list of plugin names + which support search. + """ + if action == u'search': + searches = [] + for plugin in self.parent.plugin.pluginManager.plugins: + if plugin.status == PluginStatus.Active and \ + plugin.mediaItem and plugin.mediaItem.hasSearch: + searches.append([plugin.name, unicode( + plugin.textStrings[StringContent.Name][u'plural'])]) + return HttpResponse( + json.dumps({u'results': {u'items': searches}}), + {u'Content-Type': u'application/json'}) + + def search(self, type): + """ + Return a list of items that match the search text. + + ``type`` + The plugin name to search in. + """ + text = json.loads(self.url_params[u'data'][0])[u'request'][u'text'] + plugin = self.parent.plugin.pluginManager.get_plugin_by_name(type) + if plugin.status == PluginStatus.Active and \ + plugin.mediaItem and plugin.mediaItem.hasSearch: + results = plugin.mediaItem.search(text) + else: + results = [] + return HttpResponse( + json.dumps({u'results': {u'items': results}}), + {u'Content-Type': u'application/json'}) + + def go_live(self, type): + """ + Go live on an item of type ``type``. + """ + id = json.loads(self.url_params[u'data'][0])[u'request'][u'id'] + plugin = self.parent.plugin.pluginManager.get_plugin_by_name(type) + if plugin.status == PluginStatus.Active and plugin.mediaItem: + plugin.mediaItem.goLive(id) + + def add_to_service(self, type): + """ + Add item of type ``type`` to the end of the service. + """ + id = json.loads(self.url_params[u'data'][0])[u'request'][u'id'] + plugin = self.parent.plugin.pluginManager.get_plugin_by_name(type) + if plugin.status == PluginStatus.Active and plugin.mediaItem: + item_id = plugin.mediaItem.createItemFromId(id) + plugin.mediaItem.addToService(item_id) + def send_response(self, response): http = u'HTTP/1.1 %s\r\n' % response.code for header, value in response.headers.iteritems(): diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 6d782b503..03781ae06 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -24,16 +25,18 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from PyQt4 import QtCore, QtGui +from PyQt4 import QtCore, QtGui, QtNetwork from openlp.core.lib import SettingsTab, translate +ZERO_URL = u'0.0.0.0' + class RemoteTab(SettingsTab): """ RemoteTab is the Remotes settings tab in the settings dialog. """ - def __init__(self, title, visible_title): - SettingsTab.__init__(self, title, visible_title) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'RemoteTab') @@ -51,13 +54,29 @@ class RemoteTab(SettingsTab): self.addressEdit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp( u'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'), self)) self.addressEdit.setObjectName(u'addressEdit') + QtCore.QObject.connect(self.addressEdit, + QtCore.SIGNAL(u'textChanged(const QString&)'), self.setUrls) self.serverSettingsLayout.addRow(self.addressLabel, self.addressEdit) self.portLabel = QtGui.QLabel(self.serverSettingsGroupBox) self.portLabel.setObjectName(u'portLabel') self.portSpinBox = QtGui.QSpinBox(self.serverSettingsGroupBox) self.portSpinBox.setMaximum(32767) self.portSpinBox.setObjectName(u'portSpinBox') + QtCore.QObject.connect(self.portSpinBox, + QtCore.SIGNAL(u'valueChanged(int)'), self.setUrls) self.serverSettingsLayout.addRow(self.portLabel, self.portSpinBox) + self.remoteUrlLabel = QtGui.QLabel(self.serverSettingsGroupBox) + self.remoteUrlLabel.setObjectName(u'remoteUrlLabel') + self.remoteUrl = QtGui.QLabel(self.serverSettingsGroupBox) + self.remoteUrl.setObjectName(u'remoteUrl') + self.remoteUrl.setOpenExternalLinks(True) + self.serverSettingsLayout.addRow(self.remoteUrlLabel, self.remoteUrl) + self.stageUrlLabel = QtGui.QLabel(self.serverSettingsGroupBox) + self.stageUrlLabel.setObjectName(u'stageUrlLabel') + self.stageUrl = QtGui.QLabel(self.serverSettingsGroupBox) + self.stageUrl.setObjectName(u'stageUrl') + self.stageUrl.setOpenExternalLinks(True) + self.serverSettingsLayout.addRow(self.stageUrlLabel, self.stageUrl) self.leftLayout.addWidget(self.serverSettingsGroupBox) self.leftLayout.addStretch() self.rightLayout.addStretch() @@ -69,6 +88,33 @@ class RemoteTab(SettingsTab): 'Serve on IP address:')) self.portLabel.setText(translate('RemotePlugin.RemoteTab', 'Port number:')) + self.remoteUrlLabel.setText(translate('RemotePlugin.RemoteTab', + 'Remote URL:')) + self.stageUrlLabel.setText(translate('RemotePlugin.RemoteTab', + 'Stage view URL:')) + + def setUrls(self): + ipAddress = u'localhost' + if self.addressEdit.text() == ZERO_URL: + ifaces = QtNetwork.QNetworkInterface.allInterfaces() + for iface in ifaces: + if not iface.isValid(): + continue + if not (iface.flags() & (QtNetwork.QNetworkInterface.IsUp | + QtNetwork.QNetworkInterface.IsRunning)): + continue + for addr in iface.addressEntries(): + ip = addr.ip() + if ip.protocol() == 0 and \ + ip != QtNetwork.QHostAddress.LocalHost: + ipAddress = ip.toString() + break + else: + ipAddress = self.addressEdit.text() + url = u'http://%s:%s/' % (ipAddress, self.portSpinBox.value()) + self.remoteUrl.setText(u'
    %s' % (url, url)) + url = url + u'stage' + self.stageUrl.setText(u'%s' % (url, url)) def load(self): self.portSpinBox.setValue( @@ -76,7 +122,8 @@ class RemoteTab(SettingsTab): QtCore.QVariant(4316)).toInt()[0]) self.addressEdit.setText( QtCore.QSettings().value(self.settingsSection + u'/ip address', - QtCore.QVariant(u'0.0.0.0')).toString()) + QtCore.QVariant(ZERO_URL)).toString()) + self.setUrls() def save(self): QtCore.QSettings().setValue(self.settingsSection + u'/port', diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 41346dbab..dfaff9675 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -38,9 +39,10 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'Remotes', plugin_helpers, - settingsTabClass=RemoteTab) - self.icon = build_icon(u':/plugins/plugin_remote.png') + Plugin.__init__(self, u'remotes', plugin_helpers, + settings_tab_class=RemoteTab) + self.icon_path = u':/plugins/plugin_remote.png' + self.icon = build_icon(self.icon_path) self.weight = -1 self.server = None @@ -50,7 +52,6 @@ class RemotesPlugin(Plugin): """ log.debug(u'initialise') Plugin.initialise(self) - self.insertToolboxItem() self.server = HttpServer(self) def finalise(self): diff --git a/openlp/plugins/songs/__init__.py b/openlp/plugins/songs/__init__.py index 131d1d337..7f8c55e77 100644 --- a/openlp/plugins/songs/__init__.py +++ b/openlp/plugins/songs/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index 599735247..0c2434275 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/authorsdialog.py b/openlp/plugins/songs/forms/authorsdialog.py index c558c1439..ba44a81ff 100644 --- a/openlp/plugins/songs/forms/authorsdialog.py +++ b/openlp/plugins/songs/forms/authorsdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index ea92077ff..d53f347b8 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index a9bd132cd..26c799c00 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -67,6 +68,8 @@ class Ui_EditSongDialog(object): QtCore.Qt.AlignTop) self.verseListWidget = QtGui.QTableWidget(self.lyricsTab) self.verseListWidget.horizontalHeader().setVisible(False) + self.verseListWidget.horizontalHeader().setStretchLastSection(True) + self.verseListWidget.horizontalHeader().setMinimumSectionSize(16) self.verseListWidget.setAlternatingRowColors(True) self.verseListWidget.setColumnCount(1) self.verseListWidget.setSelectionBehavior( @@ -260,11 +263,11 @@ class Ui_EditSongDialog(object): translate('SongsPlugin.EditSongForm', '&Lyrics:')) self.verseOrderLabel.setText( translate('SongsPlugin.EditSongForm', '&Verse order:')) - self.verseAddButton.setText(UiStrings.Add) - self.verseEditButton.setText(UiStrings.Edit) + self.verseAddButton.setText(UiStrings().Add) + self.verseEditButton.setText(UiStrings().Edit) self.verseEditAllButton.setText( translate('SongsPlugin.EditSongForm', 'Ed&it All')) - self.verseDeleteButton.setText(UiStrings.Delete) + self.verseDeleteButton.setText(UiStrings().Delete) self.songTabWidget.setTabText( self.songTabWidget.indexOf(self.lyricsTab), translate('SongsPlugin.EditSongForm', 'Title && Lyrics')) @@ -289,13 +292,13 @@ class Ui_EditSongDialog(object): self.songTabWidget.indexOf(self.authorsTab), translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book')) - self.themeGroupBox.setTitle(UiStrings.Theme) + self.themeGroupBox.setTitle(UiStrings().Theme) self.themeAddButton.setText( translate('SongsPlugin.EditSongForm', 'New &Theme')) self.rightsGroupBox.setTitle( translate('SongsPlugin.EditSongForm', 'Copyright Information')) self.copyrightInsertButton.setText(SongStrings.CopyrightSymbol) - self.CCLILabel.setText(UiStrings.CCLINumberLabel) + self.CCLILabel.setText(UiStrings().CCLINumberLabel) self.commentsGroupBox.setTitle( translate('SongsPlugin.EditSongForm', 'Comments')) self.songTabWidget.setTabText( diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 7f7b7fd90..c7dbf85cf 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -31,7 +32,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - critical_error_message_box + critical_error_message_box, find_and_set_in_combo_box from openlp.plugins.songs.forms import EditVerseForm from openlp.plugins.songs.lib import SongXML, VerseType, clean_song from openlp.plugins.songs.lib.db import Book, Song, Author, Topic @@ -46,12 +47,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): """ log.info(u'%s EditSongForm loaded', __name__) - def __init__(self, parent, manager): + def __init__(self, mediaitem, parent, manager): """ Constructor """ QtGui.QDialog.__init__(self, parent) - self.parent = parent + self.mediaitem = mediaitem self.song = None # can this be automated? self.width = 400 @@ -89,14 +90,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.onVerseListViewPressed) QtCore.QObject.connect(self.themeAddButton, QtCore.SIGNAL(u'clicked()'), - self.parent.parent.renderManager.theme_manager.onAddTheme) + self.mediaitem.plugin.renderer.themeManager.onAddTheme) QtCore.QObject.connect(self.maintenanceButton, QtCore.SIGNAL(u'clicked()'), self.onMaintenanceButtonClicked) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) self.previewButton = QtGui.QPushButton() self.previewButton.setObjectName(u'previewButton') - self.previewButton.setText(UiStrings.SaveAndPreview) + self.previewButton.setText(UiStrings().SaveAndPreview) self.buttonBox.addButton( self.previewButton, QtGui.QDialogButtonBox.ActionRole) QtCore.QObject.connect(self.buttonBox, @@ -208,20 +209,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.alternativeEdit.setText(u'') if self.song.song_book_id != 0: book_name = self.manager.get_object(Book, self.song.song_book_id) - id = self.songBookComboBox.findText( - unicode(book_name.name), QtCore.Qt.MatchExactly) - if id == -1: - # Not Found - id = 0 - self.songBookComboBox.setCurrentIndex(id) + find_and_set_in_combo_box( + self.songBookComboBox, unicode(book_name.name)) if self.song.theme_name: - id = self.themeComboBox.findText( - unicode(self.song.theme_name), QtCore.Qt.MatchExactly) - if id == -1: - # Not Found - id = 0 - self.song.theme_name = None - self.themeComboBox.setCurrentIndex(id) + find_and_set_in_combo_box( + self.themeComboBox, unicode(self.song.theme_name)) if self.song.copyright: self.copyrightEdit.setText(self.song.copyright) else: @@ -243,7 +235,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): # lazy xml migration for now self.verseListWidget.clear() self.verseListWidget.setRowCount(0) - self.verseListWidget.setColumnWidth(0, self.width) # This is just because occasionally the lyrics come back as a "buffer" if isinstance(self.song.lyrics, buffer): self.song.lyrics = unicode(self.song.lyrics) @@ -269,6 +260,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if index is None: index = VerseType.Other verse[0][u'type'] = VerseType.Tags[index] + if verse[0][u'label'] == u'': + verse[0][u'label'] = u'1' verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label']) item = QtGui.QTableWidgetItem(verse[1]) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) @@ -364,7 +357,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.__addAuthorToList(author) self.authorsComboBox.setCurrentIndex(0) else: - QtGui.QMessageBox.warning(self, UiStrings.NISs, + QtGui.QMessageBox.warning(self, UiStrings().NISs, translate('SongsPlugin.EditSongForm', 'You have not selected ' 'a valid author. Either select an author from the list, ' 'or type in a new author and click the "Add Author to ' @@ -423,7 +416,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.topicsListView.addItem(topic_item) self.topicsComboBox.setCurrentIndex(0) else: - QtGui.QMessageBox.warning(self, UiStrings.NISs, + QtGui.QMessageBox.warning(self, UiStrings().NISs, translate('SongsPlugin.EditSongForm', 'You have not selected ' 'a valid topic. Either select a topic from the list, or ' 'type in a new topic and click the "Add Topic to Song" ' @@ -585,11 +578,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if verse_index is not None: order.append(VerseType.Tags[verse_index] + u'1') else: - order.append(u'') # it matches no verses anyway + # it matches no verses anyway + order.append(u'') else: verse_index = VerseType.from_translated_tag(item[0]) if verse_index is None: - order.append(u'') # same as above + # it matches no verses anyway + order.append(u'') else: verse_tag = VerseType.Tags[verse_index] verse_num = item[1:].lower() @@ -655,7 +650,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): text = unicode(self.songBookComboBox.currentText()) if item == 0 and text: temp_song_book = text - self.parent.song_maintenance_form.exec_() + self.mediaitem.song_maintenance_form.exec_() self.loadAuthors() self.loadBooks() self.loadTopics() @@ -702,7 +697,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.clearCaches() if self._validate_song(): self.saveSong() - Receiver.send_message(u'songs_load_list') + self.song = None QtGui.QDialog.accept(self) def saveSong(self, preview=False): @@ -760,8 +755,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.song.topics.append(self.manager.get_object(Topic, topicId)) clean_song(self.manager, self.song) self.manager.save_object(self.song) - if not preview: - self.song = None + self.mediaitem.auto_select_id = self.song.id def _processLyrics(self): """ diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 09ff7b135..6b1e13b7d 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -27,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, translate, SpellTextEdit -from openlp.core.lib.ui import create_accept_reject_button_box +from openlp.core.lib.ui import create_accept_reject_button_box, UiStrings from openlp.plugins.songs.lib import VerseType class Ui_EditVerseDialog(object): @@ -42,6 +43,10 @@ class Ui_EditVerseDialog(object): self.dialogLayout.addWidget(self.verseTextEdit) self.verseTypeLayout = QtGui.QHBoxLayout() self.verseTypeLayout.setObjectName(u'verseTypeLayout') + self.splitButton = QtGui.QPushButton(editVerseDialog) + self.splitButton.setIcon(build_icon(u':/general/general_add.png')) + self.splitButton.setObjectName(u'splitButton') + self.verseTypeLayout.addWidget(self.splitButton) self.verseTypeLabel = QtGui.QLabel(editVerseDialog) self.verseTypeLabel.setObjectName(u'verseTypeLabel') self.verseTypeLayout.addWidget(self.verseTypeLabel) @@ -84,5 +89,10 @@ class Ui_EditVerseDialog(object): VerseType.TranslatedNames[VerseType.Ending]) self.verseTypeComboBox.setItemText(VerseType.Other, VerseType.TranslatedNames[VerseType.Other]) + self.splitButton.setText(UiStrings().Split) + self.splitButton.setToolTip(UiStrings().SplitToolTip) self.insertButton.setText( translate('SongsPlugin.EditVerseForm', '&Insert')) + self.insertButton.setToolTip( + translate('SongsPlugin.EditVerseForm', 'Split a slide into two ' + 'by inserting a verse splitter.')) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index c48d37c4f..1845bc0e3 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -36,6 +37,8 @@ from editversedialog import Ui_EditVerseDialog log = logging.getLogger(__name__) +VERSE_REGEX = re.compile(r'---\[(.+):\D*(\d*)\D*.*\]---') + class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): """ This is the form that is used to edit the verses of the song. @@ -51,13 +54,14 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): self.contextMenu) QtCore.QObject.connect(self.insertButton, QtCore.SIGNAL(u'clicked()'), self.onInsertButtonClicked) + QtCore.QObject.connect(self.splitButton, QtCore.SIGNAL(u'clicked()'), + self.onSplitButtonClicked) QtCore.QObject.connect(self.verseTextEdit, QtCore.SIGNAL(u'cursorPositionChanged()'), self.onCursorPositionChanged) QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onVerseTypeComboBoxChanged) - self.verse_regex = re.compile(r'---\[(.+):\D*(\d*)\D*.*\]---') def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) @@ -70,6 +74,13 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): (verse_tag, verse_num)) self.verseTextEdit.setFocus() + def onSplitButtonClicked(self): + verse_type_index = self.verseTypeComboBox.currentIndex() + if self.verseTextEdit.textCursor().columnNumber() != 0: + self.verseTextEdit.insertPlainText(u'\n') + self.verseTextEdit.insertPlainText(u'[---]') + self.verseTextEdit.setFocus() + def onInsertButtonClicked(self): verse_type_index = self.verseTypeComboBox.currentIndex() self.insertVerse(VerseType.Tags[verse_type_index], @@ -95,7 +106,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if position == -1: return text = text[:position + 4] - match = self.verse_regex.match(text) + match = VERSE_REGEX.match(text) if match: verse_tag = match.group(1) try: @@ -126,7 +137,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if position == -1: return text = text[:position + 4] - match = self.verse_regex.match(text) + match = VERSE_REGEX.match(text) if match: verse_type = match.group(1) verse_type_index = VerseType.from_loose_input(verse_type) @@ -175,7 +186,14 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if self.hasSingleVerse: value = unicode(self.getVerse()[0]) else: - value = self.getVerse()[0].split(u'\n')[1] + log.debug(unicode(self.getVerse()[0]).split(u'\n')) + value = unicode(self.getVerse()[0]).split(u'\n')[1] + if len(value) == 0: + lines = unicode(self.getVerse()[0]).split(u'\n') + index = 2 + while index < len(lines) and len(value) == 0: + value = lines[index] + index += 1 if len(value) == 0: critical_error_message_box( message=translate('SongsPlugin.EditSongForm', diff --git a/openlp/plugins/songs/forms/songbookdialog.py b/openlp/plugins/songs/forms/songbookdialog.py index 0bee88908..ecaf3b89b 100644 --- a/openlp/plugins/songs/forms/songbookdialog.py +++ b/openlp/plugins/songs/forms/songbookdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index aac3f65ca..ec6afa194 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index d71321b98..90c3b0275 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -27,6 +28,7 @@ The :mod:`songexportform` module provides the wizard for exporting songs to the OpenLyrics format. """ +import locale import logging from PyQt4 import QtCore, QtGui @@ -175,7 +177,7 @@ class SongExportForm(OpenLPWizard): self.availableSongsPage.setSubTitle( translate('SongsPlugin.ExportWizardForm', 'Check the songs you want to export.')) - self.searchLabel.setText(u'%s:' % UiStrings.Search) + self.searchLabel.setText(u'%s:' % UiStrings().Search) self.uncheckButton.setText( translate('SongsPlugin.ExportWizardForm', 'Uncheck All')) self.checkButton.setText( @@ -184,7 +186,7 @@ class SongExportForm(OpenLPWizard): translate('SongsPlugin.ExportWizardForm', 'Select Directory')) self.exportSongPage.setSubTitle( translate('SongsPlugin.ExportWizardForm', - 'Select the directory you want the songs to be saved.')) + 'Select the directory where you want the songs to be saved.')) self.directoryLabel.setText( translate('SongsPlugin.ExportWizardForm', 'Directory:')) self.progressPage.setTitle( @@ -207,7 +209,7 @@ class SongExportForm(OpenLPWizard): self.availableListWidget) if item.checkState() ] if not items: - critical_error_message_box(UiStrings.NISp, + critical_error_message_box(UiStrings().NISp, translate('SongsPlugin.ExportWizardForm', 'You need to add at least one Song to export.')) return False @@ -248,6 +250,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) + songs.sort(cmp=locale.strcoll, key=lambda song: song.title.lower()) for song in songs: authors = u', '.join([author.display_name for author in song.authors]) @@ -329,7 +332,7 @@ class SongExportForm(OpenLPWizard): self.availableListWidget, unicode(text)) ] for item in self._findListWidgetItems(self.availableListWidget): - item.setHidden(False if item in search_result else True) + item.setHidden(item not in search_result) def onUncheckButtonClicked(self): """ @@ -361,3 +364,4 @@ class SongExportForm(OpenLPWizard): options=QtGui.QFileDialog.ShowDirsOnly)) SettingsManager.set_last_dir(self.plugin.settingsSection, path, 1) self.directoryLineEdit.setText(path) + diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 6d20c8f41..52524b838 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,6 +27,7 @@ """ The song import functions for OpenLP. """ +import codecs import logging import os @@ -55,6 +57,7 @@ class SongImportForm(OpenLPWizard): ``plugin`` The songs plugin. """ + self.clipboard = plugin.formparent.clipboard OpenLPWizard.__init__(self, parent, plugin, u'songImportWizard', u':/wizards/wizard_importsong.bmp') @@ -66,7 +69,17 @@ class SongImportForm(OpenLPWizard): self.formatStack.setCurrentIndex(0) QtCore.QObject.connect(self.formatComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.formatStack.setCurrentIndex) + self.onCurrentIndexChanged) + + def onCurrentIndexChanged(self, index): + """ + Called when the format combo box's index changed. We have to check if + the import is available and accordingly to disable or enable the next + button. + """ + self.formatStack.setCurrentIndex(index) + next_button = self.button(QtGui.QWizard.NextButton) + next_button.setEnabled(SongFormat.get_availability(index)) def customInit(self): """ @@ -225,8 +238,8 @@ class SongImportForm(OpenLPWizard): self.sourcePage.setTitle(WizardStrings.ImportSelect) self.sourcePage.setSubTitle(WizardStrings.ImportSelectLong) self.formatLabel.setText(WizardStrings.FormatLabel) - self.formatComboBox.setItemText(SongFormat.OpenLP2, UiStrings.OLPV2) - self.formatComboBox.setItemText(SongFormat.OpenLP1, UiStrings.OLPV1) + self.formatComboBox.setItemText(SongFormat.OpenLP2, UiStrings().OLPV2) + self.formatComboBox.setItemText(SongFormat.OpenLP1, UiStrings().OLPV1) self.formatComboBox.setItemText( SongFormat.OpenLyrics, WizardStrings.OL) self.formatComboBox.setItemText(SongFormat.OpenSong, WizardStrings.OS) @@ -251,10 +264,10 @@ class SongImportForm(OpenLPWizard): # self.formatComboBox.setItemText(SongFormat.CSV, WizardStrings.CSV) self.openLP2FilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.openLP2BrowseButton.setText(UiStrings.Browse) + self.openLP2BrowseButton.setText(UiStrings().Browse) self.openLP1FilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.openLP1BrowseButton.setText(UiStrings.Browse) + self.openLP1BrowseButton.setText(UiStrings().Browse) self.openLP1DisabledLabel.setText(WizardStrings.NoSqlite) self.openLyricsAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) @@ -284,7 +297,7 @@ class SongImportForm(OpenLPWizard): self.songsOfFellowshipDisabledLabel.setText( translate('SongsPlugin.ImportWizardForm', 'The Songs of ' 'Fellowship importer has been disabled because OpenLP cannot ' - 'find OpenOffice.org on your computer.')) + 'access OpenOffice or LibreOffice.')) self.genericAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.genericRemoveButton.setText( @@ -292,13 +305,13 @@ class SongImportForm(OpenLPWizard): self.genericDisabledLabel.setText( translate('SongsPlugin.ImportWizardForm', 'The generic document/' 'presentation importer has been disabled because OpenLP cannot ' - 'find OpenOffice.org on your computer.')) + 'access OpenOffice or LibreOffice.')) self.easiSlidesFilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.easiSlidesBrowseButton.setText(UiStrings.Browse) + self.easiSlidesBrowseButton.setText(UiStrings().Browse) self.ewFilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.ewBrowseButton.setText(UiStrings.Browse) + self.ewBrowseButton.setText(UiStrings().Browse) self.songBeamerAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.songBeamerRemoveButton.setText( @@ -313,19 +326,30 @@ class SongImportForm(OpenLPWizard): translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) # self.csvFilenameLabel.setText( # translate('SongsPlugin.ImportWizardForm', 'Filename:')) -# self.csvBrowseButton.setText(UiStrings.Browse) +# self.csvBrowseButton.setText(UiStrings().Browse) self.progressPage.setTitle(WizardStrings.Importing) self.progressPage.setSubTitle( translate('SongsPlugin.ImportWizardForm', 'Please wait while your songs are imported.')) self.progressLabel.setText(WizardStrings.Ready) self.progressBar.setFormat(WizardStrings.PercentSymbolFormat) + self.errorCopyToButton.setText(translate('SongsPlugin.ImportWizardForm', + 'Copy')) + self.errorSaveToButton.setText(translate('SongsPlugin.ImportWizardForm', + 'Save to File')) # 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) + def customPageChanged(self, pageId): + """ + Called when changing to a page other than the progress page + """ + if self.page(pageId) == self.sourcePage: + self.onCurrentIndexChanged(self.formatStack.currentIndex()) + def validateCurrentPage(self): """ Validate the current page before moving on to the next page. @@ -336,49 +360,49 @@ class SongImportForm(OpenLPWizard): source_format = self.formatComboBox.currentIndex() if source_format == SongFormat.OpenLP2: if self.openLP2FilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV2) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV2) self.openLP2BrowseButton.setFocus() return False elif source_format == SongFormat.OpenLP1: if self.openLP1FilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV1) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV1) self.openLP1BrowseButton.setFocus() return False elif source_format == SongFormat.OpenLyrics: if self.openLyricsFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.OL) self.openLyricsAddButton.setFocus() return False elif source_format == SongFormat.OpenSong: if self.openSongFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.OS) self.openSongAddButton.setFocus() return False elif source_format == SongFormat.WordsOfWorship: if self.wordsOfWorshipFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.WoW) self.wordsOfWorshipAddButton.setFocus() return False elif source_format == SongFormat.CCLI: if self.ccliFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.CCLI) self.ccliAddButton.setFocus() return False elif source_format == SongFormat.SongsOfFellowship: if self.songsOfFellowshipFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SoF) self.songsOfFellowshipAddButton.setFocus() return False elif source_format == SongFormat.Generic: if self.genericFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, translate('SongsPlugin.ImportWizardForm', 'You need to specify at least one document or ' 'presentation file to import from.')) @@ -386,31 +410,31 @@ class SongImportForm(OpenLPWizard): return False elif source_format == SongFormat.EasiSlides: if self.easiSlidesFilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.ES) self.easiSlidesBrowseButton.setFocus() return False elif source_format == SongFormat.EasyWorship: if self.ewFilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.EW) self.ewBrowseButton.setFocus() return False elif source_format == SongFormat.SongBeamer: if self.songBeamerFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SB) self.songBeamerAddButton.setFocus() return False elif source_format == SongFormat.SongShowPlus: if self.songShowPlusFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SSP) self.wordsOfWorshipAddButton.setFocus() return False elif source_format == SongFormat.FoilPresenter: if self.foilPresenterFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.FP) self.foilPresenterAddButton.setFocus() return False @@ -436,7 +460,7 @@ class SongImportForm(OpenLPWizard): """ if filters: filters += u';;' - filters += u'%s (*)' % UiStrings.AllFiles + filters += u'%s (*)' % UiStrings().AllFiles filenames = QtGui.QFileDialog.getOpenFileNames(self, title, SettingsManager.get_last_dir(self.plugin.settingsSection, 1), filters) @@ -449,10 +473,7 @@ class SongImportForm(OpenLPWizard): """ Return a list of file from the listbox """ - files = [] - for row in range(0, listbox.count()): - files.append(unicode(listbox.item(row).text())) - return files + return [unicode(listbox.item(i).text()) for i in range(listbox.count())] def removeSelectedItems(self, listbox): """ @@ -466,7 +487,7 @@ class SongImportForm(OpenLPWizard): """ Get OpenLP v2 song database file """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV2, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV2, self.openLP2FilenameEdit, u'%s (*.sqlite)' % (translate('SongsPlugin.ImportWizardForm', 'OpenLP 2.0 Databases')) @@ -476,7 +497,7 @@ class SongImportForm(OpenLPWizard): """ Get OpenLP v1 song database file """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV1, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openLP1FilenameEdit, u'%s (*.olp)' % translate('SongsPlugin.ImportWizardForm', 'openlp.org v1.x Databases') @@ -649,6 +670,10 @@ class SongImportForm(OpenLPWizard): self.songShowPlusFileListWidget.clear() self.foilPresenterFileListWidget.clear() #self.csvFilenameEdit.setText(u'') + self.errorReportTextEdit.clear() + self.errorReportTextEdit.setHidden(True) + self.errorCopyToButton.setHidden(True) + self.errorSaveToButton.setHidden(True) def preWizard(self): """ @@ -674,7 +699,8 @@ class SongImportForm(OpenLPWizard): elif source_format == SongFormat.OpenLP1: # Import an openlp.org database importer = self.plugin.importSongs(SongFormat.OpenLP1, - filename=unicode(self.openLP1FilenameEdit.text()) + filename=unicode(self.openLP1FilenameEdit.text()), + plugin=self.plugin ) elif source_format == SongFormat.OpenLyrics: # Import OpenLyrics songs @@ -733,12 +759,30 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.FoilPresenter, filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) - if importer.do_import(): - self.progressLabel.setText(WizardStrings.FinishedImport) + importer.do_import() + if importer.error_log: + self.progressLabel.setText(translate( + 'SongsPlugin.SongImportForm', 'Your song import failed.')) else: - self.progressLabel.setText( - translate('SongsPlugin.SongImportForm', - 'Your song import failed.')) + self.progressLabel.setText(WizardStrings.FinishedImport) + + def onErrorCopyToButtonClicked(self): + """ + Copy the error report to the clipboard. + """ + self.clipboard.setText(self.errorReportTextEdit.toPlainText()) + + def onErrorSaveToButtonClicked(self): + """ + Save the error report to a file. + """ + filename = QtGui.QFileDialog.getSaveFileName(self, + SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + if not filename: + return + report_file = codecs.open(filename, u'w', u'utf-8') + report_file.write(self.errorReportTextEdit.toPlainText()) + report_file.close() def addFileSelectItem(self, prefix, obj_prefix=None, can_disable=False, single_select=False): diff --git a/openlp/plugins/songs/forms/songmaintenancedialog.py b/openlp/plugins/songs/forms/songmaintenancedialog.py index 9d4b7da91..b14374cf9 100644 --- a/openlp/plugins/songs/forms/songmaintenancedialog.py +++ b/openlp/plugins/songs/forms/songmaintenancedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -149,15 +150,15 @@ class Ui_SongMaintenanceDialog(object): self.listItemAuthors.setText(SongStrings.Authors) self.listItemTopics.setText(SongStrings.Topics) self.listItemBooks.setText(SongStrings.SongBooks) - self.authorsAddButton.setText(UiStrings.Add) - self.authorsEditButton.setText(UiStrings.Edit) - self.authorsDeleteButton.setText(UiStrings.Delete) - self.topicsAddButton.setText(UiStrings.Add) - self.topicsEditButton.setText(UiStrings.Edit) - self.topicsDeleteButton.setText(UiStrings.Delete) - self.booksAddButton.setText(UiStrings.Add) - self.booksEditButton.setText(UiStrings.Edit) - self.booksDeleteButton.setText(UiStrings.Delete) + self.authorsAddButton.setText(UiStrings().Add) + self.authorsEditButton.setText(UiStrings().Edit) + self.authorsDeleteButton.setText(UiStrings().Delete) + self.topicsAddButton.setText(UiStrings().Add) + self.topicsEditButton.setText(UiStrings().Edit) + self.topicsDeleteButton.setText(UiStrings().Delete) + self.booksAddButton.setText(UiStrings().Add) + self.booksEditButton.setText(UiStrings().Edit) + self.booksDeleteButton.setText(UiStrings().Delete) typeListWidth = max(self.fontMetrics().width(SongStrings.Authors), self.fontMetrics().width(SongStrings.Topics), self.fontMetrics().width(SongStrings.SongBooks)) diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 0a1effcf3..09457c5d4 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -115,7 +116,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: critical_error_message_box(dlg_title, err_text) else: - critical_error_message_box(dlg_title, UiStrings.NISs) + critical_error_message_box(dlg_title, UiStrings().NISs) def resetAuthors(self): """ @@ -386,7 +387,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): existing_author = self.manager.get_object_filtered(Author, and_(Author.first_name == old_author.first_name, Author.last_name == old_author.last_name, - Author.display_name == old_author.display_name)) + Author.display_name == old_author.display_name, + Author.id != old_author.id)) # Find the songs, which have the old_author as author. songs = self.manager.get_all_objects(Song, Song.authors.contains(old_author)) @@ -408,7 +410,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): """ # Find the duplicate. existing_topic = self.manager.get_object_filtered(Topic, - Topic.name == old_topic.name) + and_(Topic.name == old_topic.name, Topic.id != old_topic.id)) # Find the songs, which have the old_topic as topic. songs = self.manager.get_all_objects(Song, Song.topics.contains(old_topic)) @@ -431,7 +433,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): # Find the duplicate. existing_book = self.manager.get_object_filtered(Book, and_(Book.name == old_book.name, - Book.publisher == old_book.publisher)) + Book.publisher == old_book.publisher, + Book.id != old_book.id)) # Find the songs, which have the old_book as book. songs = self.manager.get_all_objects(Song, Song.song_book_id == old_book.id) @@ -504,3 +507,4 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: deleteButton.setEnabled(True) editButton.setEnabled(True) + diff --git a/openlp/plugins/songs/forms/topicsdialog.py b/openlp/plugins/songs/forms/topicsdialog.py index 67ae06e9a..4f6c5ada7 100644 --- a/openlp/plugins/songs/forms/topicsdialog.py +++ b/openlp/plugins/songs/forms/topicsdialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index 3263be1d6..31fa17425 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 4f95791b3..e2996ff8f 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -31,6 +32,9 @@ from openlp.core.lib import translate from db import Author from ui import SongStrings +WHITESPACE = re.compile(r'[\W_]+', re.UNICODE) +APOSTROPHE = re.compile(u'[\'`’ʻ′]', re.UNICODE) + class VerseType(object): """ VerseType provides an enumeration for the tags that may be associated @@ -245,6 +249,12 @@ def retrieve_windows_encoding(recommendation=None): return None return filter(lambda item: item[1] == choice[0], encodings)[0][0] +def clean_string(string): + """ + Strips punctuation from the passed string to assist searching + """ + return WHITESPACE.sub(u' ', APOSTROPHE.sub(u'', string)).lower() + def clean_song(manager, song): """ Cleans the search title, rebuilds the search lyrics, adds a default author @@ -257,51 +267,74 @@ def clean_song(manager, song): ``song`` The song object. """ - song.title = song.title.strip() if song.title else u'' + if isinstance(song.title, buffer): + song.title = unicode(song.title) + if isinstance(song.alternate_title, buffer): + song.alternate_title = unicode(song.alternate_title) + if isinstance(song.lyrics, buffer): + song.lyrics = unicode(song.lyrics) + song.title = song.title.rstrip() if song.title else u'' if song.alternate_title is None: song.alternate_title = u'' song.alternate_title = song.alternate_title.strip() - whitespace = re.compile(r'\W+', re.UNICODE) - song.search_title = (whitespace.sub(u' ', song.title).strip() + u'@' + - whitespace.sub(u' ', song.alternate_title).strip()).strip().lower() - # Remove the old "language" attribute from lyrics tag (prior to 1.9.5). This - # is not very important, but this keeps the database clean. This can be - # removed when everybody has cleaned his songs. - song.lyrics = song.lyrics.replace(u'', u'') - verses = SongXML().get_verses(song.lyrics) - lyrics = u' '.join([whitespace.sub(u' ', verse[1]) for verse in verses]) - song.search_lyrics = lyrics.lower() - # We need a new and clean SongXML instance. - sxml = SongXML() - # Rebuild the song's verses, to remove any wrong verse names (for example - # translated ones), which might have been added prior to 1.9.5. - # List for later comparison. - compare_order = [] - for verse in verses: - type = VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] - sxml.add_verse_to_lyrics( - type, - verse[0][u'label'], - verse[1], - verse[0][u'lang'] if verse[0].has_key(u'lang') else None - ) - compare_order.append((u'%s%s' % (type, verse[0][u'label'])).upper()) - song.lyrics = unicode(sxml.extract_xml(), u'utf-8') - # Rebuild the verse order, to convert translated verse tags, which might - # have been added prior to 1.9.5. - order = song.verse_order.strip().split() - new_order = [] - for verse_def in order: - new_order.append((u'%s%s' % ( - VerseType.Tags[VerseType.from_loose_input(verse_def[0])], - verse_def[1:])).upper() - ) - song.verse_order = u' '.join(new_order) - # Check if the verse order contains tags for verses which do not exist. - for order in new_order: - if order not in compare_order: - song.verse_order = u'' - break + song.search_title = clean_string(song.title) + u'@' + \ + clean_string(song.alternate_title) + # Only do this, if we the song is a 1.9.4 song (or older). + if song.lyrics.find(u'') != -1: + # Remove the old "language" attribute from lyrics tag (prior to 1.9.5). + # This is not very important, but this keeps the database clean. This + # can be removed when everybody has cleaned his songs. + song.lyrics = song.lyrics.replace( + u'', u'') + verses = SongXML().get_verses(song.lyrics) + song.search_lyrics = u' '.join([clean_string(verse[1]) + for verse in verses]) + # We need a new and clean SongXML instance. + sxml = SongXML() + # Rebuild the song's verses, to remove any wrong verse names (for + # example translated ones), which might have been added prior to 1.9.5. + # List for later comparison. + compare_order = [] + for verse in verses: + verse_type = VerseType.Tags[VerseType.from_loose_input( + verse[0][u'type'])] + sxml.add_verse_to_lyrics( + verse_type, + verse[0][u'label'], + verse[1], + verse[0][u'lang'] if verse[0].has_key(u'lang') else None + ) + compare_order.append((u'%s%s' % (verse_type, verse[0][u'label']) + ).upper()) + if verse[0][u'label'] == u'1': + compare_order.append(verse_type.upper()) + song.lyrics = unicode(sxml.extract_xml(), u'utf-8') + # Rebuild the verse order, to convert translated verse tags, which might + # have been added prior to 1.9.5. + if song.verse_order: + order = song.verse_order.strip().split() + else: + order = [] + new_order = [] + for verse_def in order: + verse_type = VerseType.Tags[ + VerseType.from_loose_input(verse_def[0])] + if len(verse_def) > 1: + new_order.append( + (u'%s%s' % (verse_type, verse_def[1:])).upper()) + else: + new_order.append(verse_type.upper()) + song.verse_order = u' '.join(new_order) + # Check if the verse order contains tags for verses which do not exist. + for order in new_order: + if order not in compare_order: + song.verse_order = u'' + break + else: + verses = SongXML().get_verses(song.lyrics) + song.search_lyrics = u' '.join([clean_string(verse[1]) + for verse in verses]) + # The song does not have any author, add one. if not song.authors: name = SongStrings.AuthorUnknown diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 03a86c455..0ce9488c2 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -59,16 +60,10 @@ class CCLIFileImport(SongImport): Import either a ``.usr`` or a ``.txt`` SongSelect file. """ log.debug(u'Starting CCLI File Import') - song_total = len(self.import_source) - self.import_wizard.progressBar.setMaximum(song_total) - song_count = 1 + self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: - 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) - self.set_defaults() lines = [] if os.path.isfile(filename): detect_file = open(filename, u'r') @@ -81,19 +76,23 @@ class CCLIFileImport(SongImport): detect_file.close() infile = codecs.open(filename, u'r', details['encoding']) lines = infile.readlines() + infile.close() ext = os.path.splitext(filename)[1] if ext.lower() == u'.usr': log.info(u'SongSelect .usr format file found: %s', filename) - self.do_import_usr_file(lines) + if not self.do_import_usr_file(lines): + self.log_error(filename) elif ext.lower() == u'.txt': log.info(u'SongSelect .txt format file found: %s', filename) - self.do_import_txt_file(lines) + if not self.do_import_txt_file(lines): + self.log_error(filename) else: + self.log_error(filename, + translate('SongsPlugin.CCLIFileImport', + 'The file does not have a valid extension.')) log.info(u'Extension %s is not valid', filename) - song_count += 1 if self.stop_import_flag: - return False - return True + return def do_import_usr_file(self, textList): """ @@ -218,7 +217,7 @@ class CCLIFileImport(SongImport): else: self.add_author(author) self.topics = [topic.strip() for topic in song_topics.split(u'/t')] - self.finish() + return self.finish() def do_import_txt_file(self, textList): """ @@ -334,6 +333,5 @@ class CCLIFileImport(SongImport): if len(author_list) < 2: author_list = song_author.split(u'|') # Clean spaces before and after author names. - for author_name in author_list: - self.add_author(author_name.strip()) - self.finish() + [self.add_author(author_name.strip()) for author_name in author_list] + return self.finish() diff --git a/openlp/plugins/songs/lib/db.py b/openlp/plugins/songs/lib/db.py index fd6d94d14..c5c019c3c 100644 --- a/openlp/plugins/songs/lib/db.py +++ b/openlp/plugins/songs/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -28,7 +29,7 @@ The :mod:`db` module provides the database and schema that is the backend for the Songs plugin """ -from sqlalchemy import Column, ForeignKey, Index, Table, types +from sqlalchemy import Column, ForeignKey, Table, types from sqlalchemy.orm import mapper, relation from openlp.core.lib.db import BaseModel, init_db @@ -164,7 +165,7 @@ def init_schema(url): Column(u'id', types.Integer, primary_key=True), Column(u'first_name', types.Unicode(128)), Column(u'last_name', types.Unicode(128)), - Column(u'display_name', types.Unicode(255), nullable=False) + Column(u'display_name', types.Unicode(255), index=True, nullable=False) ) # Definition of the "media_files" table @@ -185,7 +186,7 @@ def init_schema(url): songs_table = Table(u'songs', metadata, Column(u'id', types.Integer, primary_key=True), Column(u'song_book_id', types.Integer, - ForeignKey(u'song_books.id'), default=0), + ForeignKey(u'song_books.id'), default=None), Column(u'title', types.Unicode(255), nullable=False), Column(u'alternate_title', types.Unicode(255)), Column(u'lyrics', types.UnicodeText, nullable=False), @@ -196,13 +197,13 @@ def init_schema(url): Column(u'song_number', types.Unicode(64)), Column(u'theme_name', types.Unicode(128)), Column(u'search_title', types.Unicode(255), index=True, nullable=False), - Column(u'search_lyrics', types.UnicodeText, index=True, nullable=False) + Column(u'search_lyrics', types.UnicodeText, nullable=False) ) # Definition of the "topics" table topics_table = Table(u'topics', metadata, Column(u'id', types.Integer, primary_key=True), - Column(u'name', types.Unicode(128), nullable=False) + Column(u'name', types.Unicode(128), index=True, nullable=False) ) # Definition of the "authors_songs" table @@ -229,27 +230,6 @@ def init_schema(url): ForeignKey(u'topics.id'), primary_key=True) ) - # Define table indexes - Index(u'authors_id', authors_table.c.id) - Index(u'authors_display_name_id', authors_table.c.display_name, - authors_table.c.id) - Index(u'media_files_id', media_files_table.c.id) - Index(u'song_books_id', song_books_table.c.id) - Index(u'songs_id', songs_table.c.id) - Index(u'topics_id', topics_table.c.id) - Index(u'authors_songs_author', authors_songs_table.c.author_id, - authors_songs_table.c.song_id) - Index(u'authors_songs_song', authors_songs_table.c.song_id, - authors_songs_table.c.author_id) - Index(u'media_files_songs_file', media_files_songs_table.c.media_file_id, - media_files_songs_table.c.song_id) - Index(u'media_files_songs_song', media_files_songs_table.c.song_id, - media_files_songs_table.c.media_file_id) - Index(u'topics_song_topic', songs_topics_table.c.topic_id, - songs_topics_table.c.song_id) - Index(u'topics_song_song', songs_topics_table.c.song_id, - songs_topics_table.c.topic_id) - mapper(Author, authors_table) mapper(Book, song_books_table) mapper(MediaFile, media_files_table) diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index d326e83ca..b24287130 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -25,12 +26,11 @@ ############################################################################### import logging -import os -from lxml import etree, objectify import re -from openlp.core.lib import translate -from openlp.core.ui.wizard import WizardStrings +from lxml import etree, objectify + +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport log = logging.getLogger(__name__) @@ -56,41 +56,41 @@ class EasiSlidesImport(SongImport): multiple opensong files. If `self.commit` is set False, the import will not be committed to the database (useful for test scripts). """ - self.import_wizard.progressBar.setMaximum(1) log.info(u'Importing EasiSlides XML file %s', self.import_source) parser = etree.XMLParser(remove_blank_text=True) - file = etree.parse(self.import_source, parser) - xml = unicode(etree.tostring(file)) + parsed_file = etree.parse(self.import_source, parser) + xml = unicode(etree.tostring(parsed_file)) song_xml = objectify.fromstring(xml) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % os.path.split(self.import_source)[-1]) self.import_wizard.progressBar.setMaximum(len(song_xml.Item)) for song in song_xml.Item: - self.import_wizard.incrementProgressBar( - unicode(translate('SongsPlugin.ImportWizardForm', - u'Importing %s, song %s...')) % - (os.path.split(self.import_source)[-1], song.Title1)) - success = self._parse_song(song) - if not success or self.stop_import_flag: - return False - elif self.commit: - self.finish() - return True + if self.stop_import_flag: + return + self._parse_song(song) def _parse_song(self, song): self._success = True self._add_unicode_attribute(u'title', song.Title1, True) - self._add_unicode_attribute(u'alternate_title', song.Title2) - self._add_unicode_attribute(u'song_number', song.SongNumber) + if hasattr(song, u'Title2'): + self._add_unicode_attribute(u'alternate_title', song.Title2) + if hasattr(song, u'SongNumber'): + self._add_unicode_attribute(u'song_number', song.SongNumber) if self.song_number == u'0': self.song_number = u'' self._add_authors(song) - self._add_copyright(song.Copyright) - self._add_copyright(song.LicenceAdmin1) - self._add_copyright(song.LicenceAdmin2) - self._add_unicode_attribute(u'song_book_name', song.BookReference) + if hasattr(song, u'Copyright'): + self._add_copyright(song.Copyright) + if hasattr(song, u'LicenceAdmin1'): + self._add_copyright(song.LicenceAdmin1) + if hasattr(song, u'LicenceAdmin2'): + self._add_copyright(song.LicenceAdmin2) + if hasattr(song, u'BookReference'): + self._add_unicode_attribute(u'song_book_name', song.BookReference) self._parse_and_add_lyrics(song) - return self._success + if self._success: + if not self.finish(): + self.log_error(song.Title1 if song.Title1 else u'') + else: + self.set_defaults() def _add_unicode_attribute(self, self_attribute, import_attribute, mandatory=False): @@ -122,10 +122,8 @@ class EasiSlidesImport(SongImport): def _add_authors(self, song): try: authors = unicode(song.Writer).split(u',') - for author in authors: - author = author.strip() - if len(author): - self.authors.append(author) + self.authors = \ + [author.strip() for author in authors if author.strip()] except UnicodeDecodeError: log.exception(u'Unicode decode error while decoding Writer') self._success = False @@ -188,12 +186,13 @@ class EasiSlidesImport(SongImport): # if the regions are inside verses regionsInVerses = (regions and regionlines[regionlines.keys()[0]] > 1) MarkTypes = { - u'CHORUS': u'C', - u'VERSE': u'V', - u'INTRO': u'I', - u'ENDING': u'E', - u'BRIDGE': u'B', - u'PRECHORUS': u'P'} + u'CHORUS': VerseType.Tags[VerseType.Chorus], + u'VERSE': VerseType.Tags[VerseType.Verse], + u'INTRO': VerseType.Tags[VerseType.Intro], + u'ENDING': VerseType.Tags[VerseType.Ending], + u'BRIDGE': VerseType.Tags[VerseType.Bridge], + u'PRECHORUS': VerseType.Tags[VerseType.PreChorus] + } verses = {} # list as [region, versetype, versenum, instance] our_verse_order = [] diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index e68b19494..820cf595a 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,17 +31,33 @@ EasyWorship song databases into the current installation database. import os import struct +import re from openlp.core.lib import translate -from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib import retrieve_windows_encoding from songimport import SongImport +RTF_STRIPPING_REGEX = re.compile(r'\{\\tx[^}]*\}') +# regex: at least two newlines, can have spaces between them +SLIDE_BREAK_REGEX = re.compile(r'\n *?\n[\n ]*') +NUMBER_REGEX = re.compile(r'[0-9]+') +NOTE_REGEX = re.compile(r'\(.*?\)') + def strip_rtf(blob, encoding): depth = 0 control = False clear_text = [] control_word = [] + + # workaround for \tx bug: remove one pair of curly braces + # if \tx is encountered + match = RTF_STRIPPING_REGEX.search(blob) + if match: + # start and end indices of match are curly braces - filter them out + blob = ''.join([blob[i] for i in xrange(len(blob)) + if i != match.start() and i !=match.end()]) + for c in blob: if control: # for delimiters, set control to False @@ -142,12 +159,12 @@ class EasyWorshipSongImport(SongImport): # Open the DB and MB files if they exist import_source_mb = self.import_source.replace('.DB', '.MB') if not os.path.isfile(self.import_source): - return False + return if not os.path.isfile(import_source_mb): - return False + return db_size = os.path.getsize(self.import_source) if db_size < 0x800: - return False + return db_file = open(self.import_source, 'rb') self.memo_file = open(import_source_mb, 'rb') # Don't accept files that are clearly not paradox files @@ -156,7 +173,7 @@ class EasyWorshipSongImport(SongImport): if header_size != 0x800 or block_size < 1 or block_size > 4: db_file.close() self.memo_file.close() - return False + return # Take a stab at how text is encoded self.encoding = u'cp1252' db_file.seek(106) @@ -183,7 +200,7 @@ class EasyWorshipSongImport(SongImport): self.encoding = u'cp874' self.encoding = retrieve_windows_encoding(self.encoding) if not self.encoding: - return False + return # There does not appear to be a _reliable_ way of getting the number # of songs/records, so let's use file blocks for measuring progress. total_blocks = (db_size - header_size) / (block_size * 1024) @@ -203,8 +220,8 @@ class EasyWorshipSongImport(SongImport): field_size)) self.set_record_struct(field_descs) # Pick out the field description indexes we will need - success = True try: + success = True fi_title = self.find_field(u'Title') fi_author = self.find_field(u'Author') fi_copy = self.find_field(u'Copyright') @@ -223,31 +240,25 @@ class EasyWorshipSongImport(SongImport): # Loop through each record within the current block for i in range(rec_count): if self.stop_import_flag: - success = False break raw_record = db_file.read(record_size) self.fields = self.record_struct.unpack(raw_record) self.set_defaults() - # Get title and update progress bar message - title = self.get_field(fi_title) - if title: - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % title, 0) - self.title = title - # Get remaining fields + self.title = self.get_field(fi_title) + # Get remaining fields. copy = self.get_field(fi_copy) admin = self.get_field(fi_admin) ccli = self.get_field(fi_ccli) authors = self.get_field(fi_author) words = self.get_field(fi_words) - # Set the SongImport object members + # Set the SongImport object members. if copy: self.copyright = copy if admin: if copy: self.copyright += u', ' self.copyright += \ - unicode(translate('SongsPlugin.ImportWizardForm', + unicode(translate('SongsPlugin.EasyWorshipSongImport', 'Administered by %s')) % admin if ccli: self.ccli_number = ccli @@ -263,20 +274,54 @@ class EasyWorshipSongImport(SongImport): if words: # Format the lyrics words = strip_rtf(words, self.encoding) - for verse in words.split(u'\n\n'): - self.add_verse(verse.strip(), u'V') + verse_type = VerseType.Tags[VerseType.Verse] + for verse in SLIDE_BREAK_REGEX.split(words): + verse = verse.strip() + if not verse: + continue + verse_split = verse.split(u'\n', 1) + first_line_is_tag = False + # EW tags: verse, chorus, pre-chorus, bridge, tag, + # intro, ending, slide + for type in VerseType.Names+[u'tag', u'slide']: + type = type.lower() + ew_tag = verse_split[0].strip().lower() + if ew_tag.startswith(type): + verse_type = type[0] + if type == u'tag' or type == u'slide': + verse_type = VerseType.Tags[VerseType.Other] + first_line_is_tag = True + number_found = False + # check if tag is followed by number and/or note + if len(ew_tag) > len(type): + match = NUMBER_REGEX.search(ew_tag) + if match: + number = match.group() + verse_type += number + number_found = True + match = NOTE_REGEX.search(ew_tag) + if match: + self.comments += ew_tag + u'\n' + if not number_found: + verse_type += u'1' + break + self.add_verse( + verse_split[-1].strip() if first_line_is_tag else verse, + verse_type) + if len(self.comments) > 5: + self.comments += unicode( + translate('SongsPlugin.EasyWorshipSongImport', + '\n[above are Song Tags with notes imported from \ + EasyWorship]')) if self.stop_import_flag: - success = False break - self.finish() - if not self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'') + if not self.finish(): + self.log_error(self.import_source) db_file.close() self.memo_file.close() - return success def find_field(self, field_name): - return [i for i, x in enumerate(self.field_descs) \ + return [i for i, x in enumerate(self.field_descs) if x.name == field_name][0] def set_record_struct(self, field_descs): diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index 44ea56147..4d3aa0982 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -97,6 +98,7 @@ from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.songimport import SongImport from openlp.plugins.songs.lib.db import Author, Book, Song, Topic +from openlp.plugins.songs.lib.ui import SongStrings from openlp.plugins.songs.lib.xml import SongXML log = logging.getLogger(__name__) @@ -121,17 +123,16 @@ class FoilPresenterImport(SongImport): parser = etree.XMLParser(remove_blank_text=True) for file_path in self.import_source: if self.stop_import_flag: - return False + return self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: parsed_file = etree.parse(file_path, parser) xml = unicode(etree.tostring(parsed_file)) - if self.FoilPresenter.xml_to_song(xml) is None: - log.debug(u'File could not be imported: %s' % file_path) + self.FoilPresenter.xml_to_song(xml) except etree.XMLSyntaxError: + self.log_error(file_path, SongStrings.XMLSyntaxError) log.exception(u'XML syntax error in file %s' % file_path) - return True class FoilPresenter(object): @@ -211,7 +212,7 @@ class FoilPresenter(object): """ # No xml get out of here. if not xml: - return None + return if xml[:5] == u'', copyright, re.U) copyright = re.compile(u'(?<=) *:').sub(u'', copyright) - i = 0 x = 0 - while i != 1: + while True: if copyright.find(u'') != -1: temp = copyright.partition(u'') if temp[0].strip() and x > 0: @@ -316,9 +315,9 @@ class FoilPresenter(object): x += 1 elif x > 0: strings.append(copyright) - i = 1 + break else: - i = 1 + break author_temp = [] for author in strings: temp = re.split(u',(?=\D{2})|(?<=\D),|\/(?=\D{3,})|(?<=\D);', @@ -349,8 +348,8 @@ class FoilPresenter(object): if author is None: # We need to create a new author, as the author does not exist. author = Author.populate(display_name=display_name, - last_name = display_name.split(u' ')[-1], - first_name = u' '.join(display_name.split(u' ')[:-1])) + last_name=display_name.split(u' ')[-1], + first_name=u' '.join(display_name.split(u' ')[:-1])) self.manager.save_object(author) song.authors.append(author) @@ -414,10 +413,18 @@ class FoilPresenter(object): temp_verse_order_backup = [] temp_sortnr_backup = 1 temp_sortnr_liste = [] - versenumber = {u'V': 1, u'C': 1, u'B': 1, u'E': 1, u'O': 1, u'I': 1, - u'P': 1} + versenumber = { + VerseType.Tags[VerseType.Verse]: 1, + VerseType.Tags[VerseType.Chorus]: 1, + VerseType.Tags[VerseType.Bridge]: 1, + VerseType.Tags[VerseType.Ending]: 1, + VerseType.Tags[VerseType.Other]: 1, + VerseType.Tags[VerseType.Intro]: 1, + VerseType.Tags[VerseType.PreChorus]: 1 + } for strophe in foilpresenterfolie.strophen.strophe: - text = self._child(strophe.text_) + text = self._child(strophe.text_) if hasattr(strophe, u'text_') \ + else u'' verse_name = self._child(strophe.key) children = strophe.getchildren() sortnr = False @@ -426,7 +433,7 @@ class FoilPresenter(object): verse_sortnr = self._child(strophe.sortnr) sortnr = True # In older Version there is no sortnr, but we need one - if sortnr == False: + if not sortnr: verse_sortnr = unicode(temp_sortnr_backup) temp_sortnr_backup += 1 # Foilpresenter allows e. g. "Ref" or "1", but we need "C1" or "V1". @@ -434,25 +441,25 @@ class FoilPresenter(object): temp_verse_name = re.compile(u'[0-9].*').sub(u'', verse_name) temp_verse_name = temp_verse_name[:3].lower() if temp_verse_name == u'ref': - verse_type = u'C' + verse_type = VerseType.Tags[VerseType.Chorus] elif temp_verse_name == u'r': - verse_type = u'C' + verse_type = VerseType.Tags[VerseType.Chorus] elif temp_verse_name == u'': - verse_type = u'V' + verse_type = VerseType.Tags[VerseType.Verse] elif temp_verse_name == u'v': - verse_type = u'V' + verse_type = VerseType.Tags[VerseType.Verse] elif temp_verse_name == u'bri': - verse_type = u'B' + verse_type = VerseType.Tags[VerseType.Bridge] elif temp_verse_name == u'cod': - verse_type = u'E' + verse_type = VerseType.Tags[VerseType.Ending] elif temp_verse_name == u'sch': - verse_type = u'E' + verse_type = VerseType.Tags[VerseType.Ending] elif temp_verse_name == u'pre': - verse_type = u'P' + verse_type = VerseType.Tags[VerseType.PreChorus] elif temp_verse_name == u'int': - verse_type = u'I' + verse_type = VerseType.Tags[VerseType.Intro] else: - verse_type = u'O' + verse_type = VerseType.Tags[VerseType.Other] verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name) # Foilpresenter allows e. g. "C", but we need "C1". if not verse_number: @@ -462,12 +469,12 @@ class FoilPresenter(object): # test if foilpresenter have the same versenumber two times with # different parts raise the verse number for value in temp_verse_order_backup: - if value == (u''.join((verse_type, verse_number))): + if value == u''.join((verse_type, verse_number)): verse_number = unicode(int(verse_number) + 1) verse_type_index = VerseType.from_tag(verse_type[0]) verse_type = VerseType.Names[verse_type_index] - temp_verse_order[verse_sortnr] = (u''.join((verse_type[0], - verse_number))) + temp_verse_order[verse_sortnr] = u''.join((verse_type[0], + verse_number)) temp_verse_order_backup.append(u''.join((verse_type[0], verse_number))) sxml.add_verse_to_lyrics(verse_type, verse_number, text) diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index bad31c0ea..d8432f668 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -26,6 +27,8 @@ """ The :mod:`importer` modules provides the general song import functionality. """ +import logging + from opensongimport import OpenSongImport from easislidesimport import EasiSlidesImport from olpimport import OpenLPSongImport @@ -37,20 +40,24 @@ from songbeamerimport import SongBeamerImport from songshowplusimport import SongShowPlusImport from foilpresenterimport import FoilPresenterImport # Imports that might fail +log = logging.getLogger(__name__) try: from olp1import import OpenLP1SongImport HAS_OPENLP1 = True except ImportError: + log.exception('Error importing %s', 'OpenLP1SongImport') HAS_OPENLP1 = False try: from sofimport import SofImport HAS_SOF = True except ImportError: + log.exception('Error importing %s', 'SofImport') HAS_SOF = False try: from oooimport import OooImport HAS_OOO = True except ImportError: + log.exception('Error importing %s', 'OooImport') HAS_OOO = False class SongFormat(object): diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 723b6c5d5..a2814a1df 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -34,10 +35,12 @@ from sqlalchemy.sql import or_ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate, check_item_selected, PluginStatus from openlp.core.lib.searchedit import SearchEdit -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, context_menu_action, \ + context_menu_separator from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm -from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType +from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \ + clean_string from openlp.plugins.songs.lib.db import Author, Song from openlp.plugins.songs.lib.ui import SongStrings @@ -62,17 +65,19 @@ class SongMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'songs/song' - MediaManagerItem.__init__(self, parent, self, icon) - self.edit_song_form = EditSongForm(self, self.parent.manager) - self.openLyrics = OpenLyrics(self.parent.manager) + MediaManagerItem.__init__(self, parent, plugin, icon) + self.edit_song_form = EditSongForm(self, self.plugin.formparent, + self.plugin.manager) + self.openLyrics = OpenLyrics(self.plugin.manager) self.singleServiceItem = False self.song_maintenance_form = SongMaintenanceForm( - self.parent.manager, self) + self.plugin.manager, self) # Holds information about whether the edit is remotly triggered and # which Song is required. self.remoteSong = -1 self.editItem = None - self.whitespace = re.compile(r'\W+', re.UNICODE) + self.quickPreviewAllowed = True + self.hasSearch = True def addEndHeaderBar(self): self.addToolbarSeparator() @@ -124,6 +129,16 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'searchTypeChanged(int)'), self.onSearchTextButtonClick) + def addCustomContextActions(self): + context_menu_separator(self.listView) + context_menu_action( + self.listView, u':/general/general_clone.png', + translate('OpenLP.MediaManagerItem', + '&Clone'), self.onCloneClick) + + def onFocus(self): + self.searchTextEdit.setFocus() + def configUpdated(self): self.searchAsYouType = QtCore.QSettings().value( self.settingsSection + u'/search as type', @@ -136,11 +151,11 @@ class SongMediaItem(MediaManagerItem): QtCore.QVariant(u'True')).toBool() def retranslateUi(self): - self.searchTextLabel.setText(u'%s:' % UiStrings.Search) - self.searchTextButton.setText(UiStrings.Search) + self.searchTextLabel.setText(u'%s:' % UiStrings().Search) + self.searchTextButton.setText(UiStrings().Search) self.maintenanceAction.setText(SongStrings.SongMaintenance) self.maintenanceAction.setToolTip(translate('SongsPlugin.MediaItem', - 'Maintain the lists of authors, topics and books')) + 'Maintain the lists of authors, topics and books.')) def initialise(self): self.searchTextEdit.setSearchTypes([ @@ -152,44 +167,58 @@ class SongMediaItem(MediaManagerItem): translate('SongsPlugin.MediaItem', 'Lyrics')), (SongSearch.Authors, u':/songs/song_search_author.png', SongStrings.Authors), - (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings.Themes) + (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings().Themes) ]) + self.searchTextEdit.setCurrentSearchType(QtCore.QSettings().value( + u'%s/last search type' % self.settingsSection, + QtCore.QVariant(SongSearch.Entire)).toInt()[0]) self.configUpdated() def onSearchTextButtonClick(self): + # Save the current search type to the configuration. + QtCore.QSettings().setValue(u'%s/last search type' % + self.settingsSection, + QtCore.QVariant(self.searchTextEdit.currentSearchType())) + # Reload the list considering the new search type. search_keywords = unicode(self.searchTextEdit.displayText()) search_results = [] search_type = self.searchTextEdit.currentSearchType() if search_type == SongSearch.Entire: 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.comments.like(u'%' + search_keywords.lower() + u'%'))) + search_results = self.searchEntire(search_keywords) self.displayResultsSong(search_results) elif search_type == SongSearch.Titles: 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'%')) + search_results = self.plugin.manager.get_all_objects(Song, + Song.search_title.like(u'%' + clean_string(search_keywords) + + u'%')) self.displayResultsSong(search_results) elif search_type == SongSearch.Lyrics: log.debug(u'Lyrics Search') - search_results = self.parent.manager.get_all_objects(Song, - Song.search_lyrics.like(u'%' + search_keywords.lower() + u'%')) + search_results = self.plugin.manager.get_all_objects(Song, + Song.search_lyrics.like(u'%' + clean_string(search_keywords) + + u'%')) self.displayResultsSong(search_results) elif search_type == SongSearch.Authors: log.debug(u'Authors Search') - search_results = self.parent.manager.get_all_objects(Author, + search_results = self.plugin.manager.get_all_objects(Author, Author.display_name.like(u'%' + search_keywords + u'%'), Author.display_name.asc()) self.displayResultsAuthor(search_results) elif search_type == SongSearch.Themes: log.debug(u'Theme Search') - search_results = self.parent.manager.get_all_objects(Song, - Song.theme_name == search_keywords) + search_results = self.plugin.manager.get_all_objects(Song, + Song.theme_name.like(u'%' + search_keywords + u'%')) self.displayResultsSong(search_results) + self.check_search_result() + + def searchEntire(self, search_keywords): + return self.plugin.manager.get_all_objects(Song, + or_(Song.search_title.like(u'%' + clean_string(search_keywords) + + u'%'), + Song.search_lyrics.like(u'%' + clean_string(search_keywords) + + u'%'), + Song.comments.like(u'%' + search_keywords.lower() + u'%'))) def onSongListLoad(self): """ @@ -208,15 +237,19 @@ class SongMediaItem(MediaManagerItem): if self.editItem and self.updateServiceOnEdit and \ not self.remoteTriggered: item = self.buildServiceItem(self.editItem) - self.parent.serviceManager.replaceServiceItem(item) + self.plugin.serviceManager.replaceServiceItem(item) self.onRemoteEditClear() self.onSearchTextButtonClick() log.debug(u'onSongListLoad - finished') def displayResultsSong(self, searchresults): log.debug(u'display results Song') + self.save_auto_select_id() self.listView.clear() - searchresults.sort(cmp=self.collateSongTitles) + # Sort the songs by its title considering language specific characters. + # lower() is needed for windows! + searchresults.sort( + cmp=locale.strcoll, key=lambda song: song.title.lower()) for song in searchresults: author_list = [author.display_name for author in song.authors] song_title = unicode(song.title) @@ -224,6 +257,10 @@ class SongMediaItem(MediaManagerItem): song_name = QtGui.QListWidgetItem(song_detail) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) self.listView.addItem(song_name) + # Auto-select the item if name has been set + if song.id == self.auto_select_id: + self.listView.setCurrentItem(song_name) + self.auto_select_id = -1 def displayResultsAuthor(self, searchresults): log.debug(u'display results Author') @@ -261,18 +298,21 @@ class SongMediaItem(MediaManagerItem): def onImportClick(self): if not hasattr(self, u'import_wizard'): - self.import_wizard = SongImportForm(self, self.parent) + self.import_wizard = SongImportForm(self, self.plugin) if self.import_wizard.exec_() == QtGui.QDialog.Accepted: Receiver.send_message(u'songs_load_list') def onExportClick(self): - export_wizard = SongExportForm(self, self.parent) + export_wizard = SongExportForm(self, self.plugin) export_wizard.exec_() def onNewClick(self): log.debug(u'onNewClick') self.edit_song_form.newSong() self.edit_song_form.exec_() + self.onClearTextButtonClick() + self.onSelectionChange() + self.auto_select_id = -1 def onSongMaintenanceClick(self): self.song_maintenance_form.exec_() @@ -282,53 +322,76 @@ class SongMediaItem(MediaManagerItem): self.remoteTriggered = None self.remoteSong = -1 - def onRemoteEdit(self, songid): + def onRemoteEdit(self, message): """ Called by ServiceManager or SlideController by event passing the Song Id in the payload along with an indicator to say which type of display is required. """ - log.debug(u'onRemoteEdit %s' % songid) - fields = songid.split(u':') - valid = self.parent.manager.get_object(Song, fields[1]) + log.debug(u'onRemoteEdit %s' % message) + remote_type, song_id = message.split(u':') + song_id = int(song_id) + valid = self.plugin.manager.get_object(Song, song_id) if valid: - self.remoteSong = fields[1] - self.remoteTriggered = fields[0] - self.edit_song_form.loadSong(fields[1], (fields[0] == u'P')) + self.remoteSong = song_id + self.remoteTriggered = remote_type + self.edit_song_form.loadSong(song_id, (remote_type == u'P')) self.edit_song_form.exec_() + self.auto_select_id = -1 + self.onSongListLoad() def onEditClick(self): """ Edit a song """ log.debug(u'onEditClick') - if check_item_selected(self.listView, UiStrings.SelectEdit): + if check_item_selected(self.listView, UiStrings().SelectEdit): self.editItem = self.listView.currentItem() item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0] self.edit_song_form.loadSong(item_id, False) self.edit_song_form.exec_() + self.auto_select_id = -1 + self.onSongListLoad() self.editItem = None def onDeleteClick(self): """ Remove a song from the list and database """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): items = self.listView.selectedIndexes() if QtGui.QMessageBox.question(self, - translate('SongsPlugin.MediaItem', 'Delete Song(s)?'), + UiStrings().ConfirmDelete, 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) == QtGui.QMessageBox.Cancel: + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: return for item in items: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.parent.manager.delete_object(Song, item_id) + self.plugin.manager.delete_object(Song, item_id) self.onSearchTextButtonClick() + def onCloneClick(self): + """ + Clone a Song + """ + log.debug(u'onCloneClick') + if check_item_selected(self.listView, UiStrings().SelectEdit): + self.editItem = self.listView.currentItem() + item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0] + old_song = self.plugin.manager.get_object(Song, item_id) + song_xml = self.openLyrics.song_to_xml(old_song) + new_song_id = self.openLyrics.xml_to_song(song_xml) + new_song = self.plugin.manager.get_object(Song, new_song_id) + new_song.title = u'%s <%s>' % (new_song.title, + translate('SongsPlugin.MediaItem', 'copy', + 'For song cloning')) + self.plugin.manager.save_object(new_song) + self.onSongListLoad() + def generateSlideData(self, service_item, item=None, xmlVersion=False): log.debug(u'generateSlideData (%s:%s)' % (service_item, item)) item_id = self._getIdOfItemToGenerate(item, self.remoteSong) @@ -337,7 +400,8 @@ class SongMediaItem(MediaManagerItem): service_item.add_capability(ItemCapabilities.AllowsLoop) service_item.add_capability(ItemCapabilities.OnLoadUpdate) service_item.add_capability(ItemCapabilities.AddIfNewItem) - song = self.parent.manager.get_object(Song, item_id) + service_item.add_capability(ItemCapabilities.AllowsVirtualSplit) + song = self.plugin.manager.get_object(Song, item_id) service_item.theme = song.theme_name service_item.edit_id = item_id if song.lyrics.startswith(u' 0 - # Count the number of records we need to import, for the progress bar - cursor.execute(u'-- types int') - cursor.execute(u'SELECT COUNT(songid) FROM songs') - count = cursor.fetchone()[0] - success = True - self.import_wizard.progressBar.setMaximum(count) - # "cache" our list of authors + # "cache" our list of authors. cursor.execute(u'-- types int, unicode') cursor.execute(u'SELECT authorid, authorname FROM authors') authors = cursor.fetchall() if new_db: - # "cache" our list of tracks + # "cache" our list of tracks. cursor.execute(u'-- types int, unicode') cursor.execute(u'SELECT trackid, fulltrackname FROM tracks') tracks = cursor.fetchall() - # Import the songs - cursor.execute(u'-- types int, unicode, unicode, unicode') + # "cache" our list of themes. + cursor.execute(u'-- types int, unicode') + cursor.execute(u'SELECT settingsid, settingsname FROM settings') + themes = {} + for theme_id, theme_name in cursor.fetchall(): + if theme_name in self.available_themes: + themes[theme_id] = theme_name + # Import the songs. + cursor.execute(u'-- types int, unicode, unicode, unicode, int') cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' - u'copyrightinfo FROM songs') + u'copyrightinfo, settingsid FROM songs') songs = cursor.fetchall() + self.import_wizard.progressBar.setMaximum(len(songs)) for song in songs: self.set_defaults() if self.stop_import_flag: - success = False break song_id = song[0] - title = song[1] + self.title = song[1] lyrics = song[2].replace(u'\r\n', u'\n') - copyright = song[3] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % title) - self.title = title + self.add_copyright(song[3]) + if themes.has_key(song[4]): + self.theme_name = themes[song[4]] verses = lyrics.split(u'\n\n') for verse in verses: - if verse.strip() != u'': + if verse.strip(): self.add_verse(verse.strip()) - self.add_copyright(copyright) cursor.execute(u'-- types int') cursor.execute(u'SELECT authorid FROM songauthors ' u'WHERE songid = %s' % song_id) author_ids = cursor.fetchall() for author_id in author_ids: if self.stop_import_flag: - success = False break for author in authors: if author[0] == author_id[0]: self.parse_author(author[1]) break if self.stop_import_flag: - success = False break if new_db: cursor.execute(u'-- types int') @@ -131,28 +136,26 @@ class OpenLP1SongImport(SongImport): track_ids = cursor.fetchall() for track_id in track_ids: if self.stop_import_flag: - success = False break for track in tracks: if track[0] == track_id[0]: self.add_media_file(track[1]) break if self.stop_import_flag: - success = False break - self.finish() - return success + if not self.finish(): + self.log_error(self.import_source) def get_encoding(self): """ Detect character encoding of an openlp.org 1.x song database. """ - # Connect to the database + # Connect to the database. connection = sqlite.connect(self.import_source, mode=0444) cursor = connection.cursor() detector = UniversalDetector() - # detect charset by authors + # Detect charset by authors. cursor.execute(u'SELECT authorname FROM authors') authors = cursor.fetchall() for author in authors: @@ -160,7 +163,7 @@ class OpenLP1SongImport(SongImport): if detector.done: detector.close() return detector.result[u'encoding'] - # detect charset by songs + # Detect charset by songs. cursor.execute(u'SELECT songtitle, copyrightinfo, ' u'lyrics || \'\' AS lyrics FROM songs') songs = cursor.fetchall() @@ -170,7 +173,7 @@ class OpenLP1SongImport(SongImport): if detector.done: detector.close() return detector.result[u'encoding'] - # detect charset by songs + # Detect charset by songs. cursor.execute(u'SELECT name FROM sqlite_master ' u'WHERE type = \'table\' AND name = \'tracks\'') if len(cursor.fetchall()) > 0: diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index e8b9f0dd7..6bb08a19a 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -36,6 +37,7 @@ from sqlalchemy.orm.exc import UnmappedClassError from openlp.core.lib import translate from openlp.core.lib.db import BaseModel +from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile from songimport import SongImport @@ -93,13 +95,18 @@ class OpenLPSongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager, **kwargs) - self.import_source = u'sqlite:///%s' % self.import_source self.source_session = None def do_import(self): """ Run the import for an OpenLP version 2 song database. """ + if not self.import_source.endswith(u'.sqlite'): + self.log_error(self.import_source, + translate('SongsPlugin.OpenLPSongImport', + 'Not a valid OpenLP 2.0 song database.')) + return + self.import_source = u'sqlite:///%s' % self.import_source engine = create_engine(self.import_source) source_meta = MetaData() source_meta.reflect(engine) @@ -124,10 +131,10 @@ class OpenLPSongImport(SongImport): mapper(OldMediaFile, source_media_files_table) song_props = { 'authors': relation(OldAuthor, backref='songs', - secondary=source_authors_songs_table), + secondary=source_authors_songs_table), 'book': relation(OldBook, backref='songs'), 'topics': relation(OldTopic, backref='songs', - secondary=source_songs_topics_table) + secondary=source_songs_topics_table) } if has_media_files: song_props['media_files'] = relation(OldMediaFile, backref='songs', @@ -150,15 +157,9 @@ class OpenLPSongImport(SongImport): mapper(OldTopic, source_topics_table) source_songs = self.source_session.query(OldSong).all() - song_total = len(source_songs) if self.import_wizard: - self.import_wizard.progressBar.setMaximum(song_total) - song_count = 1 + self.import_wizard.progressBar.setMaximum(len(source_songs)) for song in source_songs: - if self.import_wizard: - 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'): @@ -213,8 +214,9 @@ class OpenLPSongImport(SongImport): # file_name=media_file.file_name)) clean_song(self.manager, new_song) self.manager.save_object(new_song) - song_count += 1 + if self.import_wizard: + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % new_song.title) if self.stop_import_flag: - return False + break engine.dispose() - return True diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index c9c05907e..ba442bb35 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -29,22 +30,23 @@ import os from PyQt4 import QtCore from openlp.core.utils import get_uno_command, get_uno_instance +from openlp.core.lib import translate from songimport import SongImport log = logging.getLogger(__name__) if os.name == u'nt': from win32com.client import Dispatch + NoConnectException = Exception +else: + import uno + from com.sun.star.connection import NoConnectException +try: + from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH +except ImportError: PAGE_BEFORE = 4 PAGE_AFTER = 5 PAGE_BOTH = 6 -else: - try: - import uno - from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, \ - PAGE_BOTH - except ImportError: - pass class OooImport(SongImport): """ @@ -60,23 +62,35 @@ class OooImport(SongImport): self.process_started = False def do_import(self): - self.stop_import_flag = False - self.import_wizard.progressBar.setMaximum(0) - self.start_ooo() + if not isinstance(self.import_source, list): + return + try: + self.start_ooo() + except NoConnectException as exc: + self.log_error( + self.import_source[0], + translate('SongsPlugin.SongImport', + 'Cannot access OpenOffice or LibreOffice')) + log.error(exc) + return + self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: if self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'Import cancelled', 0) - return + break filename = unicode(filename) if os.path.isfile(filename): self.open_ooo_file(filename) if self.document: self.process_ooo_document() self.close_ooo_file() + else: + self.log_error(self.filepath, + translate('SongsPlugin.SongImport', + 'Unable to open file')) + else: + self.log_error(self.filepath, + translate('SongsPlugin.SongImport', 'File not found')) self.close_ooo() - self.import_wizard.progressBar.setMaximum(1) - self.import_wizard.incrementProgressBar(u'', 1) - return True def process_ooo_document(self): """ @@ -107,13 +121,16 @@ class OooImport(SongImport): while uno_instance is None and loop < 5: try: uno_instance = get_uno_instance(resolver) - except: + except NoConnectException: log.exception("Failed to resolve uno connection") self.start_ooo_process() loop += 1 - manager = uno_instance.ServiceManager - self.desktop = manager.createInstanceWithContext( - "com.sun.star.frame.Desktop", uno_instance) + else: + manager = uno_instance.ServiceManager + self.desktop = manager.createInstanceWithContext( + "com.sun.star.frame.Desktop", uno_instance) + return + raise def start_ooo_process(self): try: @@ -153,8 +170,8 @@ class OooImport(SongImport): else: self.import_wizard.incrementProgressBar( u'Processing file ' + filepath, 0) - except: - log.exception("open_ooo_file failed") + except AttributeError: + log.exception("open_ooo_file failed: %s", url) return def close_ooo_file(self): diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index d3367bfa9..6ba1fabe7 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -69,10 +70,14 @@ class OpenLyricsExport(object): song.title) xml = openLyrics.song_to_xml(song) tree = etree.ElementTree(etree.fromstring(xml)) - filename = u'%s (%s).xml' % (song.title, + filename = u'%s (%s)' % (song.title, u', '.join([author.display_name for author in song.authors])) filename = re.sub( r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_') - tree.write(os.path.join(self.save_path, filename), + # Ensure the filename isn't too long for some filesystems + filename = u'%s.xml' % filename[0:250 - len(self.save_path)] + # Pass a file object, because lxml does not cope with some special + # characters in the path (see lp:757673 and lp:744337). + tree.write(open(os.path.join(self.save_path, filename), u'w'), encoding=u'utf-8', xml_declaration=True, pretty_print=True) return True diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index 208ef3e52..b46383772 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -35,6 +36,7 @@ from lxml import etree from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings from openlp.plugins.songs.lib import OpenLyrics log = logging.getLogger(__name__) @@ -59,14 +61,15 @@ class OpenLyricsImport(SongImport): parser = etree.XMLParser(remove_blank_text=True) for file_path in self.import_source: if self.stop_import_flag: - return False + return self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: - parsed_file = etree.parse(file_path, parser) + # Pass a file object, because lxml does not cope with some + # special characters in the path (see lp:757673 and lp:744337). + parsed_file = etree.parse(open(file_path, u'r'), parser) xml = unicode(etree.tostring(parsed_file)) - if self.openLyrics.xml_to_song(xml) is None: - log.debug(u'File could not be imported: %s' % file_path) + self.openLyrics.xml_to_song(xml) except etree.XMLSyntaxError: log.exception(u'XML syntax error in file %s' % file_path) - return True + self.log_error(file_path, SongStrings.XMLSyntaxError) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 37fc2b5ef..7fca88262 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -25,14 +26,14 @@ ############################################################################### import logging -import os -from zipfile import ZipFile -from lxml import objectify -from lxml.etree import Error, LxmlError import re -from openlp.core.ui.wizard import WizardStrings +from lxml import objectify +from lxml.etree import Error, LxmlError + +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings log = logging.getLogger(__name__) @@ -105,77 +106,27 @@ class OpenSongImport(SongImport): Initialise the class. """ SongImport.__init__(self, manager, **kwargs) - self.commit = True def do_import(self): - """ - Import either each of the files in self.import_source - each element of - which can be either a single opensong file, or a zipfile containing - multiple opensong files. If `self.commit` is set False, the - import will not be committed to the database (useful for test scripts). - """ - success = True - numfiles = 0 - for filename in self.import_source: - ext = os.path.splitext(filename)[1] - if ext.lower() == u'.zip': - z = ZipFile(filename, u'r') - numfiles += len(z.infolist()) - else: - numfiles += 1 - log.debug(u'Total number of files: %d', numfiles) - self.import_wizard.progressBar.setMaximum(numfiles) + self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: if self.stop_import_flag: - success = False - break - ext = os.path.splitext(filename)[1] - if ext.lower() == u'.zip': - log.debug(u'Zipfile found %s', filename) - z = ZipFile(filename, u'r') - for song in z.infolist(): - if self.stop_import_flag: - success = False - break - parts = os.path.split(song.filename) - if parts[-1] == u'': - #No final part => directory - continue - log.info(u'Zip importing %s', parts[-1]) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % parts[-1]) - songfile = z.open(song) - if self.do_import_file(songfile) and self.commit and \ - not self.stop_import_flag: - self.finish() - else: - success = False - break - else: - # not a zipfile - log.info(u'Direct import %s', filename) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % os.path.split(filename)[-1]) - song_file = open(filename) - if self.do_import_file(song_file) and self.commit and \ - not self.stop_import_flag: - self.finish() - else: - success = False - break - return success + return + song_file = open(filename) + self.do_import_file(song_file) + song_file.close() def do_import_file(self, file): """ - Process the OpenSong file - pass in a file-like object, - not a filename + Process the OpenSong file - pass in a file-like object, not a file path. """ self.set_defaults() try: tree = objectify.parse(file) except (Error, LxmlError): + self.log_error(file.name, SongStrings.XMLSyntaxError) log.exception(u'Error parsing XML') - return False + return root = tree.getroot() fields = dir(root) decode = { @@ -193,9 +144,6 @@ class OpenSongImport(SongImport): setattr(self, fn_or_string, ustring) else: fn_or_string(ustring) - if not len(self.title): - # to prevent creation of empty songs from wrong files - return False if u'theme' in fields and unicode(root.theme) not in self.topics: self.topics.append(unicode(root.theme)) if u'alttheme' in fields and unicode(root.alttheme) not in self.topics: @@ -205,11 +153,14 @@ class OpenSongImport(SongImport): # keep track of verses appearance order our_verse_order = [] # default verse - verse_tag = u'v' + verse_tag = VerseType.Tags[VerseType.Verse] verse_num = u'1' # for the case where song has several sections with same marker inst = 1 - lyrics = unicode(root.lyrics) + if u'lyrics' in fields: + lyrics = unicode(root.lyrics) + else: + lyrics = u'' for this_line in lyrics.split(u'\n'): # remove comments semicolon = this_line.find(u';') @@ -230,7 +181,7 @@ class OpenSongImport(SongImport): # have we got any digits? # If so, verse number is everything from the digits # to the end (even if there are some alpha chars on the end) - match = re.match(u'(.*)(\d+.*)', content) + match = re.match(u'(\D*)(\d+.*)', content) if match is not None: verse_tag = match.group(1) verse_num = match.group(2) @@ -239,12 +190,13 @@ class OpenSongImport(SongImport): # the verse tag verse_tag = content verse_num = u'1' + verse_index = VerseType.from_loose_input(verse_tag) + verse_tag = VerseType.Tags[verse_index] inst = 1 if [verse_tag, verse_num, inst] in our_verse_order \ and verses.has_key(verse_tag) \ and verses[verse_tag].has_key(verse_num): - inst = len(verses[verse_tag][verse_num])+1 - our_verse_order.append([verse_tag, verse_num, inst]) + inst = len(verses[verse_tag][verse_num]) + 1 continue # number at start of line.. it's verse number if this_line[0].isdigit(): @@ -257,6 +209,7 @@ class OpenSongImport(SongImport): verses[verse_tag][verse_num] = {} if not verses[verse_tag][verse_num].has_key(inst): verses[verse_tag][verse_num][inst] = [] + our_verse_order.append([verse_tag, verse_num, inst]) # Tidy text and remove the ____s from extended words this_line = self.tidy_text(this_line) this_line = this_line.replace(u'_', u'') @@ -268,28 +221,31 @@ class OpenSongImport(SongImport): verse_def = u'%s%s' % (verse_tag, verse_num) lines = u'\n'.join(verses[verse_tag][verse_num][inst]) self.add_verse(lines, verse_def) + if not self.verses: + self.add_verse('') # figure out the presentation order, if present - if u'presentation' in fields and root.presentation != u'': + if u'presentation' in fields and root.presentation: order = unicode(root.presentation) # We make all the tags in the lyrics lower case, so match that here # and then split into a list on the whitespace order = order.lower().split() for verse_def in order: - match = re.match(u'(.*)(\d+.*)', verse_def) + match = re.match(u'(\D*)(\d+.*)', verse_def) if match is not None: verse_tag = match.group(1) verse_num = match.group(2) if not len(verse_tag): - verse_tag = u'v' + verse_tag = VerseType.Tags[VerseType.Verse] else: # Assume it's no.1 if there are no digits verse_tag = verse_def verse_num = u'1' verse_def = u'%s%s' % (verse_tag, verse_num) - if verses.has_key(verse_tag) \ - and verses[verse_tag].has_key(verse_num): + if verses.has_key(verse_tag) and \ + verses[verse_tag].has_key(verse_num): self.verse_order_list.append(verse_def) else: log.info(u'Got order %s but not in verse tags, dropping' u'this item from presentation order', verse_def) - return True + if not self.finish(): + self.log_error(file.name) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 0b7e0c139..e0134f282 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,24 +31,33 @@ # http://www.oooforum.org/forum/viewtopic.phtml?t=14409 # http://wiki.services.openoffice.org/wiki/Python +import logging import os import re from oooimport import OooImport + +log = logging.getLogger(__name__) + if os.name == u'nt': - BOLD = 150.0 - ITALIC = 2 from oooimport import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH + RuntimeException = Exception else: try: - from com.sun.star.awt.FontWeight import BOLD - from com.sun.star.awt.FontSlant import ITALIC from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, \ PAGE_BOTH + from com.sun.star.uno import RuntimeException except ImportError: pass - +try: + from com.sun.star.awt.FontWeight import BOLD +except ImportError: + BOLD = 150.0 +try: + from com.sun.star.awt.FontSlant import ITALIC +except ImportError: + ITALIC = 2 class SofImport(OooImport): """ @@ -85,17 +95,18 @@ class SofImport(OooImport): """ self.blanklines = 0 self.new_song() - paragraphs = self.document.getText().createEnumeration() - while paragraphs.hasMoreElements(): - if self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'Import cancelled', 0) - return - paragraph = paragraphs.nextElement() - if paragraph.supportsService("com.sun.star.text.Paragraph"): - self.process_paragraph(paragraph) - if self.song: - self.finish() - self.song = False + try: + paragraphs = self.document.getText().createEnumeration() + while paragraphs.hasMoreElements(): + if self.stop_import_flag: + return + paragraph = paragraphs.nextElement() + if paragraph.supportsService("com.sun.star.text.Paragraph"): + self.process_paragraph(paragraph) + except RuntimeException as exc: + log.exception(u'Error processing file: %s', exc) + if not self.finish(): + self.log_error(self.filepath) def process_paragraph(self, paragraph): """ diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 5cd2c4329..400db8f9a 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,7 +34,6 @@ import logging import os import re -from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport @@ -68,6 +68,30 @@ class SongBeamerImport(SongImport): Song Beamer file format is text based in the beginning are one or more control tags written """ + HTML_TAG_PAIRS = [ + (re.compile(u''), u'{st}'), + (re.compile(u''), u'{/st}'), + (re.compile(u''), u'{it}'), + (re.compile(u''), u'{/it}'), + (re.compile(u''), u'{u}'), + (re.compile(u''), u'{/u}'), + (re.compile(u'

    '), u'{p}'), + (re.compile(u'

    '), u'{/p}'), + (re.compile(u''), u'{su}'), + (re.compile(u''), u'{/su}'), + (re.compile(u''), u'{sb}'), + (re.compile(u''), u'{/sb}'), + (re.compile(u''), u'{br}'), + (re.compile(u'<[/]?wordwrap>'), u''), + (re.compile(u'<[/]?strike>'), u''), + (re.compile(u'<[/]?h.*?>'), u''), + (re.compile(u'<[/]?s.*?>'), u''), + (re.compile(u'<[/]?linespacing.*?>'), u''), + (re.compile(u'<[/]?c.*?>'), u''), + (re.compile(u''), u''), + (re.compile(u''), u'') + ] + def __init__(self, manager, **kwargs): """ Initialise the Song Beamer importer. @@ -78,90 +102,63 @@ class SongBeamerImport(SongImport): """ Receive a single file or a list of files to import. """ - if isinstance(self.import_source, list): - self.import_wizard.progressBar.setMaximum( - len(self.import_source)) - for file in self.import_source: - # TODO: check that it is a valid SongBeamer file - self.set_defaults() - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] - read_verses = False - file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) - if os.path.isfile(file): - detect_file = open(file, u'r') - details = chardet.detect(detect_file.read(2048)) - detect_file.close() - infile = codecs.open(file, u'r', details['encoding']) - songData = infile.readlines() - infile.close() - else: - return False - self.title = file_name.split('.sng')[0] - read_verses = False - for line in songData: - # Just make sure that the line is of the type 'Unicode'. - line = unicode(line).strip() - if line.startswith(u'#') and not read_verses: - self.parse_tags(line) - elif line.startswith(u'---'): - if self.current_verse: - self.replace_html_tags() - self.add_verse(self.current_verse, - self.current_verse_type) - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] - read_verses = True - verse_start = True - elif read_verses: - if verse_start: - verse_start = False - if not self.check_verse_marks(line): - self.current_verse = line + u'\n' - else: - 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( - WizardStrings.ImportingType % file_name) - return True + self.import_wizard.progressBar.setMaximum(len(self.import_source)) + if not isinstance(self.import_source, list): + return + for file in self.import_source: + # TODO: check that it is a valid SongBeamer file + if self.stop_import_flag: + return + self.set_defaults() + self.current_verse = u'' + self.current_verse_type = VerseType.Tags[VerseType.Verse] + read_verses = False + file_name = os.path.split(file)[1] + if os.path.isfile(file): + detect_file = open(file, u'r') + details = chardet.detect(detect_file.read()) + detect_file.close() + infile = codecs.open(file, u'r', details['encoding']) + songData = infile.readlines() + infile.close() + else: + continue + self.title = file_name.split('.sng')[0] + read_verses = False + for line in songData: + # Just make sure that the line is of the type 'Unicode'. + line = unicode(line).strip() + if line.startswith(u'#') and not read_verses: + self.parse_tags(line) + elif line.startswith(u'---'): + if self.current_verse: + self.replace_html_tags() + self.add_verse(self.current_verse, + self.current_verse_type) + self.current_verse = u'' + self.current_verse_type = VerseType.Tags[VerseType.Verse] + read_verses = True + verse_start = True + elif read_verses: + if verse_start: + verse_start = False + if not self.check_verse_marks(line): + self.current_verse = line + u'\n' + else: + 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 not self.finish(): + self.log_error(file) def replace_html_tags(self): """ This can be called to replace SongBeamer's specific (html) tags with OpenLP's specific (html) tags. """ - tag_pairs = [ - (u'', u'{st}'), - (u'', u'{/st}'), - (u'', u'{it}'), - (u'', u'{/it}'), - (u'', u'{u}'), - (u'', u'{/u}'), - (u'

    ', u'{p}'), - (u'

    ', u'{/p}'), - (u'', u'{su}'), - (u'', u'{/su}'), - (u'', u'{sb}'), - (u'', u'{/sb}'), - (u'<[/]?br.*?>', u'{st}'), - (u'<[/]?wordwrap>', u''), - (u'<[/]?strike>', u''), - (u'<[/]?h.*?>', u''), - (u'<[/]?s.*?>', u''), - (u'<[/]?linespacing.*?>', u''), - (u'<[/]?c.*?>', u''), - (u'', u''), - (u'', u'') - ] - for pair in tag_pairs: - self.current_verse = re.compile(pair[0]).sub(pair[1], - self.current_verse) + for pair in SongBeamerImport.HTML_TAG_PAIRS: + self.current_verse = pair[0].sub(pair[1], self.current_verse) def parse_tags(self, line): """ @@ -189,7 +186,7 @@ class SongBeamerImport(SongImport): elif tag_val[0] == u'#Bible': pass elif tag_val[0] == u'#Categories': - self.topics = line.split(',') + self.topics = tag_val[1].split(',') elif tag_val[0] == u'#CCLI': self.ccli_number = tag_val[1] elif tag_val[0] == u'#Chords': @@ -236,11 +233,12 @@ class SongBeamerImport(SongImport): pass elif tag_val[0] == u'#Rights': song_book_pub = tag_val[1] - elif tag_val[0] == u'#Songbook': - book_num = tag_val[1].split(' / ') - self.song_book_name = book_num[0] - if len(book_num) == book_num[1]: - self.song_number = u'' + elif tag_val[0] == u'#Songbook' or tag_val[0] == u'#SongBook': + book_data = tag_val[1].split(u'/') + self.song_book_name = book_data[0].strip() + if len(book_data) == 2: + number = book_data[1].strip() + self.song_number = number if number.isdigit() else u'' elif tag_val[0] == u'#Speed': pass elif tag_val[0] == u'Tempo': @@ -287,5 +285,4 @@ class SongBeamerImport(SongImport): if marks[1].isdigit(): self.current_verse_type += marks[1] return True - else: - return False + return False diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 5bc1f15d0..dc45764e4 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -23,12 +24,13 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - import logging import re + from PyQt4 import QtCore from openlp.core.lib import Receiver, translate +from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile from openlp.plugins.songs.lib.ui import SongStrings @@ -66,6 +68,7 @@ class SongImport(QtCore.QObject): self.song = None self.stop_import_flag = False self.set_defaults() + self.error_log = [] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) @@ -94,6 +97,32 @@ class SongImport(QtCore.QObject): self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) + def log_error(self, filepath, reason=SongStrings.SongIncomplete): + """ + This should be called, when a song could not be imported. + + ``filepath`` + This should be the file path if ``self.import_source`` is a list + with different files. If it is not a list, but a single file (for + instance a database), then this should be the song's title. + + ``reason`` + The reason, why the import failed. The string should be as + informative as possible. + """ + self.set_defaults() + if self.import_wizard is None: + return + if self.import_wizard.errorReportTextEdit.isHidden(): + self.import_wizard.errorReportTextEdit.setText( + translate('SongsPlugin.SongImport', + 'The following songs could not be imported:')) + self.import_wizard.errorReportTextEdit.setVisible(True) + self.import_wizard.errorCopyToButton.setVisible(True) + self.import_wizard.errorSaveToButton.setVisible(True) + self.import_wizard.errorReportTextEdit.append( + u'- %s (%s)' % (filepath, reason)) + def stop_import(self): """ Sets the flag for importers to stop their import @@ -240,7 +269,7 @@ class SongImport(QtCore.QObject): Author not checked here, if no author then "Author unknown" is automatically added """ - if self.title == u'' or len(self.verses) == 0: + if not self.title or not len(self.verses): return False else: return True @@ -249,9 +278,15 @@ class SongImport(QtCore.QObject): """ All fields have been set to this song. Write the song to disk. """ + if not self.check_complete(): + self.set_defaults() + return False log.info(u'committing song %s to database', self.title) song = Song() song.title = self.title + if self.import_wizard is not None: + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % song.title) song.alternate_title = self.alternate_title # Values will be set when cleaning the song. song.search_title = u'' @@ -308,7 +343,7 @@ class SongImport(QtCore.QObject): publisher=self.song_book_pub) song.book = song_book for topictext in self.topics: - if len(topictext) == 0: + if not topictext: continue topic = self.manager.get_object_filtered(Topic, Topic.name == topictext) @@ -318,6 +353,7 @@ class SongImport(QtCore.QObject): clean_song(self.manager, song) self.manager.save_object(song) self.set_defaults() + return True def print_song(self): """ diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d5ab85f89..7f7527c6d 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,6 +33,7 @@ import logging import struct from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport TITLE = 1 @@ -46,6 +48,7 @@ VERSE_ORDER = 31 SONG_BOOK = 35 SONG_NUMBER = 36 CUSTOM_VERSE = 37 +BRIDGE = 24 log = logging.getLogger(__name__) @@ -96,84 +99,90 @@ class SongShowPlusImport(SongImport): """ Receive a single file or a list of files to import. """ - if isinstance(self.import_source, list): - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for file in self.import_source: - author = u'' - self.sspVerseOrderList = [] - otherCount = 0 - otherList = {} - file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) - songData = open(file, 'rb') - while (1): - blockKey, = struct.unpack("I", songData.read(4)) - # The file ends with 4 NUL's - if blockKey == 0: - break - nextBlockStarts, = struct.unpack("I", songData.read(4)) - if blockKey == VERSE or blockKey == CHORUS: - null, verseNo, = struct.unpack("BB", songData.read(2)) - elif blockKey == CUSTOM_VERSE: - null, verseNameLength, = struct.unpack("BB", - songData.read(2)) - verseName = songData.read(verseNameLength) - lengthDescriptorSize, = struct.unpack("B", songData.read(1)) - # Detect if/how long the length descriptor is - if lengthDescriptorSize == 12: - lengthDescriptor, = struct.unpack("I", songData.read(4)) - elif lengthDescriptorSize == 2: - lengthDescriptor = 1 - elif lengthDescriptorSize == 9: - lengthDescriptor = 0 - else: - lengthDescriptor, = struct.unpack("B", songData.read(1)) - data = songData.read(lengthDescriptor) - if blockKey == TITLE: - self.title = unicode(data, u'cp1252') - elif blockKey == AUTHOR: - authors = data.split(" / ") - for author in authors: - if author.find(",") !=-1: - authorParts = author.split(", ") - author = authorParts[1] + " " + authorParts[0] - self.parse_author(unicode(author, u'cp1252')) - elif blockKey == COPYRIGHT: - self.add_copyright(unicode(data, u'cp1252')) - elif blockKey == CCLI_NO: - self.ccli_number = int(data) - elif blockKey == VERSE: - self.add_verse(unicode(data, u'cp1252'), - "V%s" % verseNo) - elif blockKey == CHORUS: - self.add_verse(unicode(data, u'cp1252'), - "C%s" % verseNo) - elif blockKey == TOPIC: - self.topics.append(unicode(data, u'cp1252')) - elif blockKey == COMMENTS: - self.comments = unicode(data, u'cp1252') - elif blockKey == VERSE_ORDER: - verseTag = self.toOpenLPVerseTag(data, True) - if verseTag: - self.sspVerseOrderList.append(unicode(verseTag, - u'cp1252')) - elif blockKey == SONG_BOOK: - self.song_book_name = unicode(data, u'cp1252') - elif blockKey == SONG_NUMBER: - self.song_number = ord(data) - elif blockKey == CUSTOM_VERSE: - verseTag = self.toOpenLPVerseTag(verseName) - self.add_verse(unicode(data, u'cp1252'), verseTag) - else: - log.debug("Unrecognised blockKey: %s, data: %s" - %(blockKey, data)) - self.verse_order_list = self.sspVerseOrderList - songData.close() - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) - return True + if not isinstance(self.import_source, list): + return + self.import_wizard.progressBar.setMaximum(len(self.import_source)) + + for file in self.import_source: + self.sspVerseOrderList = [] + otherCount = 0 + otherList = {} + file_name = os.path.split(file)[1] + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % file_name, 0) + songData = open(file, 'rb') + + while True: + blockKey, = struct.unpack("I", songData.read(4)) + # The file ends with 4 NUL's + if blockKey == 0: + break + nextBlockStarts, = struct.unpack("I", songData.read(4)) + nextBlockStarts += songData.tell() + if blockKey in (VERSE, CHORUS, BRIDGE): + null, verseNo, = struct.unpack("BB", songData.read(2)) + elif blockKey == CUSTOM_VERSE: + null, verseNameLength, = struct.unpack("BB", + songData.read(2)) + verseName = songData.read(verseNameLength) + lengthDescriptorSize, = struct.unpack("B", songData.read(1)) + # Detect if/how long the length descriptor is + if lengthDescriptorSize == 12: + lengthDescriptor, = struct.unpack("I", songData.read(4)) + elif lengthDescriptorSize == 2: + lengthDescriptor = 1 + elif lengthDescriptorSize == 9: + lengthDescriptor = 0 + else: + lengthDescriptor, = struct.unpack("B", songData.read(1)) + data = songData.read(lengthDescriptor) + if blockKey == TITLE: + self.title = unicode(data, u'cp1252') + elif blockKey == AUTHOR: + authors = data.split(" / ") + for author in authors: + if author.find(",") !=-1: + authorParts = author.split(", ") + author = authorParts[1] + " " + authorParts[0] + self.parse_author(unicode(author, u'cp1252')) + elif blockKey == COPYRIGHT: + self.add_copyright(unicode(data, u'cp1252')) + elif blockKey == CCLI_NO: + self.ccli_number = int(data) + elif blockKey == VERSE: + self.add_verse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Verse], verseNo)) + elif blockKey == CHORUS: + self.add_verse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Chorus], verseNo)) + elif blockKey == BRIDGE: + self.add_verse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Bridge], verseNo)) + elif blockKey == TOPIC: + self.topics.append(unicode(data, u'cp1252')) + elif blockKey == COMMENTS: + self.comments = unicode(data, u'cp1252') + elif blockKey == VERSE_ORDER: + verseTag = self.toOpenLPVerseTag(data, True) + if verseTag: + if not isinstance(verseTag, unicode): + verseTag = unicode(verseTag, u'cp1252') + self.sspVerseOrderList.append(verseTag) + elif blockKey == SONG_BOOK: + self.song_book_name = unicode(data, u'cp1252') + elif blockKey == SONG_NUMBER: + self.song_number = ord(data) + elif blockKey == CUSTOM_VERSE: + verseTag = self.toOpenLPVerseTag(verseName) + self.add_verse(unicode(data, u'cp1252'), verseTag) + else: + log.debug("Unrecognised blockKey: %s, data: %s" + % (blockKey, data)) + songData.seek(nextBlockStarts) + self.verse_order_list = self.sspVerseOrderList + songData.close() + if not self.finish(): + self.log_error(file) def toOpenLPVerseTag(self, verseName, ignoreUnique=False): if verseName.find(" ") != -1: @@ -185,22 +194,19 @@ class SongShowPlusImport(SongImport): verseNumber = "1" verseType = verseType.lower() if verseType == "verse": - verseTag = "V" + verseTag = VerseType.Tags[VerseType.Verse] elif verseType == "chorus": - verseTag = "C" + verseTag = VerseType.Tags[VerseType.Chorus] elif verseType == "bridge": - verseTag = "B" + verseTag = VerseType.Tags[VerseType.Bridge] elif verseType == "pre-chorus": - verseTag = "P" - elif verseType == "bridge": - verseTag = "B" + verseTag = VerseType.Tags[VerseType.PreChorus] else: if not self.otherList.has_key(verseName): if ignoreUnique: return None self.otherCount = self.otherCount + 1 self.otherList[verseName] = str(self.otherCount) - verseTag = "O" + verseTag = VerseType.Tags[VerseType.Other] verseNumber = self.otherList[verseName] - verseTag = verseTag + verseNumber - return verseTag + return verseTag + verseNumber diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 14aacefdc..f24d12f58 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,8 +33,8 @@ class SongsTab(SettingsTab): """ SongsTab is the Songs settings tab in the settings dialog. """ - def __init__(self, title, visible_title): - SettingsTab.__init__(self, title, visible_title) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'SongsTab') diff --git a/openlp/plugins/songs/lib/test/test_import_file.py b/openlp/plugins/songs/lib/test/test_import_file.py index 6be485210..6ff46e52e 100644 --- a/openlp/plugins/songs/lib/test/test_import_file.py +++ b/openlp/plugins/songs/lib/test/test_import_file.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/openlp/plugins/songs/lib/test/test_importing_lots.py b/openlp/plugins/songs/lib/test/test_importing_lots.py index 5cd8b3362..1f2b3d0d6 100644 --- a/openlp/plugins/songs/lib/test/test_importing_lots.py +++ b/openlp/plugins/songs/lib/test/test_importing_lots.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py index e29b9733c..bead3097b 100644 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ b/openlp/plugins/songs/lib/test/test_opensongimport.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/openlp/plugins/songs/lib/ui.py b/openlp/plugins/songs/lib/ui.py index 0a389087e..066e2eef6 100644 --- a/openlp/plugins/songs/lib/ui.py +++ b/openlp/plugins/songs/lib/ui.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -40,6 +41,8 @@ class SongStrings(object): CopyrightSymbol = translate('OpenLP.Ui', '\xa9', 'Copyright symbol.') SongBook = translate('OpenLP.Ui', 'Song Book', 'Singular') SongBooks = translate('OpenLP.Ui', 'Song Books', 'Plural') + SongIncomplete = translate('OpenLP.Ui','Title and/or verses not found') SongMaintenance = translate('OpenLP.Ui', 'Song Maintenance') Topic = translate('OpenLP.Ui', 'Topic', 'Singular') Topics = translate('OpenLP.Ui', 'Topics', 'Plural') + XMLSyntaxError = translate('OpenLP.Ui', 'XML syntax error') diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index cbdd40758..e2a5820a5 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -30,7 +31,6 @@ Worship songs into the OpenLP database. import os import logging -from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib.songimport import SongImport BLOCK_TYPES = (u'V', u'C', u'B') @@ -105,15 +105,12 @@ class WowImport(SongImport): if isinstance(self.import_source, list): self.import_wizard.progressBar.setMaximum(len(self.import_source)) for file in self.import_source: - author = u'' - copyright = u'' file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) # Get the song title self.title = file_name.rpartition(u'.')[0] songData = open(file, 'rb') if songData.read(19) != u'WoW File\nSong Words': + self.log_error(file) continue # Seek to byte which stores number of blocks in the song songData.seek(56) @@ -129,7 +126,7 @@ class WowImport(SongImport): self.line_text = unicode( songData.read(ord(songData.read(1))), u'cp1252') songData.seek(1, os.SEEK_CUR) - if block_text != u'': + if block_text: block_text += u'\n' block_text += self.line_text self.lines_to_read -= 1 @@ -138,22 +135,19 @@ class WowImport(SongImport): songData.seek(3, os.SEEK_CUR) # Blocks are seperated by 2 bytes, skip them, but not if # this is the last block! - if (block + 1) < no_of_blocks: + if block + 1 < no_of_blocks: songData.seek(2, os.SEEK_CUR) self.add_verse(block_text, block_type) # Now to extract the author author_length = ord(songData.read(1)) - if author_length != 0: - author = unicode(songData.read(author_length), u'cp1252') + if author_length: + self.parse_author( + unicode(songData.read(author_length), u'cp1252')) # Finally the copyright copyright_length = ord(songData.read(1)) - if copyright_length != 0: - copyright = unicode( - songData.read(copyright_length), u'cp1252') - self.parse_author(author) - self.add_copyright(copyright) + if copyright_length: + self.add_copyright(unicode( + songData.read(copyright_length), u'cp1252')) songData.close() - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) - return True + if not self.finish(): + self.log_error(file) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 05da325e2..3635fd7e7 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -72,6 +73,8 @@ from openlp.core.utils import get_application_version log = logging.getLogger(__name__) +CHORD_REGEX = re.compile(u'') + class SongXML(object): """ This class builds and parses the XML used to describe songs. @@ -134,14 +137,26 @@ class SongXML(object): [{'lang': 'en', 'type': 'c', 'label': '1'}, u"English chorus"]] """ self.song_xml = None - if xml[:5] == u'') + self.lyrics = etree.SubElement(self.song_xml, u'lyrics') + verses = xml.split(u'\n\n') + for count, verse in enumerate(verses): + verse_list.append([{u'type': u'v', u'label': unicode(count)}, + unicode(verse)]) + self.add_verse_to_lyrics(u'v', unicode(count), verse) + return verse_list + elif xml.startswith(u'').sub(u'', xml) + xml = CHORD_REGEX.sub(u'', xml) song_xml = objectify.fromstring(xml) if hasattr(song_xml, u'properties'): properties = song_xml.properties @@ -500,7 +515,7 @@ class OpenLyrics(object): ``song`` The song object. """ - song.song_book_id = 0 + song.song_book_id = None song.song_number = u'' if hasattr(properties, u'songbooks'): for songbook in properties.songbooks.songbook: @@ -513,8 +528,7 @@ class OpenLyrics(object): book = Book.populate(name=bookname, publisher=u'') self.manager.save_object(book) song.song_book_id = book.id - if hasattr(songbook, u'entry'): - song.song_number = self._get(songbook, u'entry') + song.song_number = self._get(songbook, u'entry') # We only support one song book, so take the first one. break diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 1260a832b..8a773be90 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -33,7 +34,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ Receiver from openlp.core.lib.db import Manager -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, base_action, icon_action +from openlp.core.utils.actions import ActionList from openlp.plugins.songs.lib import clean_song, SongMediaItem, SongsTab from openlp.plugins.songs.lib.db import init_schema, Song from openlp.plugins.songs.lib.importer import SongFormat @@ -55,7 +57,7 @@ class SongsPlugin(Plugin): """ Create and set up the Songs plugin. """ - Plugin.__init__(self, u'Songs', plugin_helpers, SongMediaItem, SongsTab) + Plugin.__init__(self, u'songs', plugin_helpers, SongMediaItem, SongsTab) self.weight = -10 self.manager = Manager(u'songs', init_schema) self.icon_path = u':/plugins/plugin_songs.png' @@ -64,9 +66,13 @@ class SongsPlugin(Plugin): def initialise(self): log.info(u'Songs Initialising') Plugin.initialise(self) + self.songImportItem.setVisible(True) + self.songExportItem.setVisible(True) self.toolsReindexItem.setVisible(True) - self.mediaItem.displayResultsSong( - self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) + action_list = ActionList.get_instance() + action_list.add_action(self.songImportItem, UiStrings().Import) + action_list.add_action(self.songExportItem, UiStrings().Export) + action_list.add_action(self.toolsReindexItem, UiStrings().Tools) def addImportMenuItem(self, import_menu): """ @@ -78,15 +84,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongImportItem = QtGui.QAction(import_menu) - self.SongImportItem.setObjectName(u'SongImportItem') - self.SongImportItem.setText(translate( - 'SongsPlugin', '&Song')) - self.SongImportItem.setToolTip(translate('SongsPlugin', + self.songImportItem = base_action(import_menu, u'songImportItem') + self.songImportItem.setText(translate('SongsPlugin', '&Song')) + self.songImportItem.setToolTip(translate('SongsPlugin', 'Import songs using the import wizard.')) - import_menu.addAction(self.SongImportItem) + import_menu.addAction(self.songImportItem) # Signals and slots - QtCore.QObject.connect(self.SongImportItem, + QtCore.QObject.connect(self.songImportItem, QtCore.SIGNAL(u'triggered()'), self.onSongImportItemClicked) def addExportMenuItem(self, export_menu): @@ -99,15 +103,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongExportItem = QtGui.QAction(export_menu) - self.SongExportItem.setObjectName(u'SongExportItem') - self.SongExportItem.setText(translate( - 'SongsPlugin', '&Song')) - self.SongExportItem.setToolTip(translate('SongsPlugin', + self.songExportItem = base_action(export_menu, u'songExportItem') + self.songExportItem.setText(translate('SongsPlugin', '&Song')) + self.songExportItem.setToolTip(translate('SongsPlugin', 'Exports songs using the export wizard.')) - export_menu.addAction(self.SongExportItem) + export_menu.addAction(self.songExportItem) # Signals and slots - QtCore.QObject.connect(self.SongExportItem, + QtCore.QObject.connect(self.songExportItem, QtCore.SIGNAL(u'triggered()'), self.onSongExportItemClicked) def addToolsMenuItem(self, tools_menu): @@ -120,9 +122,8 @@ class SongsPlugin(Plugin): use it as their parent. """ log.info(u'add tools menu') - self.toolsReindexItem = QtGui.QAction(tools_menu) - self.toolsReindexItem.setIcon(build_icon(u':/plugins/plugin_songs.png')) - self.toolsReindexItem.setObjectName(u'toolsReindexItem') + self.toolsReindexItem = icon_action(tools_menu, u'toolsReindexItem', + u':/plugins/plugin_songs.png') self.toolsReindexItem.setText( translate('SongsPlugin', '&Re-index Songs')) self.toolsReindexItem.setStatusTip( @@ -141,7 +142,7 @@ class SongsPlugin(Plugin): if maxSongs == 0: return progressDialog = QtGui.QProgressDialog( - translate('SongsPlugin', 'Reindexing songs...'), UiStrings.Cancel, + translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel, 0, maxSongs, self.formparent) progressDialog.setWindowModality(QtCore.Qt.WindowModal) songs = self.manager.get_all_objects(Song) @@ -214,13 +215,13 @@ class SongsPlugin(Plugin): tooltips = { u'load': u'', u'import': u'', - u'new': translate('SongsPlugin', 'Add a new Song'), - u'edit': translate('SongsPlugin', 'Edit the selected Song'), - u'delete': translate('SongsPlugin', 'Delete the selected Song'), - u'preview': translate('SongsPlugin', 'Preview the selected Song'), - u'live': translate('SongsPlugin', 'Send the selected Song live'), + u'new': translate('SongsPlugin', 'Add a new song.'), + u'edit': translate('SongsPlugin', 'Edit the selected song.'), + u'delete': translate('SongsPlugin', 'Delete the selected song.'), + u'preview': translate('SongsPlugin', 'Preview the selected song.'), + u'live': translate('SongsPlugin', 'Send the selected song live.'), u'service': translate('SongsPlugin', - 'Add the selected Song to the service') + 'Add the selected song to the service.') } self.setPluginUiTextStrings(tooltips) @@ -229,12 +230,14 @@ class SongsPlugin(Plugin): If the first time wizard has run, this function is run to import all the new songs into the database. """ + self.onToolsReindexItemTriggered() db_dir = unicode(os.path.join(gettempdir(), u'openlp')) + if not os.path.exists(db_dir): + return song_dbs = [] for sfile in os.listdir(db_dir): if sfile.startswith(u'songs_') and sfile.endswith(u'.sqlite'): song_dbs.append(os.path.join(db_dir, sfile)) - self.onToolsReindexItemTriggered() if len(song_dbs) == 0: return progress = QtGui.QProgressDialog(self.formparent) @@ -258,5 +261,11 @@ class SongsPlugin(Plugin): """ log.info(u'Songs Finalising') self.manager.finalise() + self.songImportItem.setVisible(False) + self.songExportItem.setVisible(False) self.toolsReindexItem.setVisible(False) + action_list = ActionList.get_instance() + action_list.remove_action(self.songImportItem, UiStrings().Import) + action_list.remove_action(self.songExportItem, UiStrings().Export) + action_list.remove_action(self.toolsReindexItem, UiStrings().Tools) Plugin.finalise(self) diff --git a/openlp/plugins/songusage/__init__.py b/openlp/plugins/songusage/__init__.py index 15832d17c..739ce7fa7 100644 --- a/openlp/plugins/songusage/__init__.py +++ b/openlp/plugins/songusage/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/forms/__init__.py b/openlp/plugins/songusage/forms/__init__.py index 103ce032f..ff8176001 100644 --- a/openlp/plugins/songusage/forms/__init__.py +++ b/openlp/plugins/songusage/forms/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/forms/songusagedeletedialog.py b/openlp/plugins/songusage/forms/songusagedeletedialog.py index 95e877ca3..e66260975 100644 --- a/openlp/plugins/songusage/forms/songusagedeletedialog.py +++ b/openlp/plugins/songusage/forms/songusagedeletedialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/forms/songusagedeleteform.py b/openlp/plugins/songusage/forms/songusagedeleteform.py index 1c7294729..935fc7c71 100644 --- a/openlp/plugins/songusage/forms/songusagedeleteform.py +++ b/openlp/plugins/songusage/forms/songusagedeleteform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/forms/songusagedetaildialog.py b/openlp/plugins/songusage/forms/songusagedetaildialog.py index 371c3d6f4..08e0aaf7f 100644 --- a/openlp/plugins/songusage/forms/songusagedetaildialog.py +++ b/openlp/plugins/songusage/forms/songusagedetaildialog.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 11816d85c..303789d20 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/lib/__init__.py b/openlp/plugins/songusage/lib/__init__.py index 6cb536530..855e95138 100644 --- a/openlp/plugins/songusage/lib/__init__.py +++ b/openlp/plugins/songusage/lib/__init__.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/lib/db.py b/openlp/plugins/songusage/lib/db.py index a3a2c4fc4..9a11ef16b 100644 --- a/openlp/plugins/songusage/lib/db.py +++ b/openlp/plugins/songusage/lib/db.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 8ff40373a..4ca23aeb0 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -5,9 +5,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # @@ -32,6 +33,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, Receiver, build_icon, \ translate from openlp.core.lib.db import Manager +from openlp.core.lib.ui import base_action, shortcut_action +from openlp.core.utils.actions import ActionList from openlp.plugins.songusage.forms import SongUsageDetailForm, \ SongUsageDeleteForm from openlp.plugins.songusage.lib.db import init_schema, SongUsageItem @@ -42,11 +45,13 @@ class SongUsagePlugin(Plugin): log.info(u'SongUsage Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'SongUsage', plugin_helpers) + Plugin.__init__(self, u'songusage', plugin_helpers) self.weight = -4 self.icon = build_icon(u':/plugins/plugin_songusage.png') + self.activeIcon = build_icon(u':/songusage/song_usage_active.png') + self.inactiveIcon = build_icon(u':/songusage/song_usage_inactive.png') self.manager = None - self.songusageActive = False + self.songUsageActive = False def addToolsMenuItem(self, tools_menu): """ @@ -59,52 +64,56 @@ class SongUsagePlugin(Plugin): """ log.info(u'add tools menu') self.toolsMenu = tools_menu - self.SongUsageMenu = QtGui.QMenu(tools_menu) - self.SongUsageMenu.setObjectName(u'SongUsageMenu') - self.SongUsageMenu.setTitle(translate( + self.songUsageMenu = QtGui.QMenu(tools_menu) + self.songUsageMenu.setObjectName(u'songUsageMenu') + self.songUsageMenu.setTitle(translate( 'SongUsagePlugin', '&Song Usage Tracking')) - #SongUsage Delete - self.SongUsageDelete = QtGui.QAction(tools_menu) - self.SongUsageDelete.setText(translate('SongUsagePlugin', + # SongUsage Delete + self.songUsageDelete = base_action(tools_menu, u'songUsageDelete') + self.songUsageDelete.setText(translate('SongUsagePlugin', '&Delete Tracking Data')) - self.SongUsageDelete.setStatusTip(translate('SongUsagePlugin', + self.songUsageDelete.setStatusTip(translate('SongUsagePlugin', 'Delete song usage data up to a specified date.')) - self.SongUsageDelete.setObjectName(u'SongUsageDelete') - #SongUsage Report - self.SongUsageReport = QtGui.QAction(tools_menu) - self.SongUsageReport.setText( + # SongUsage Report + self.songUsageReport = base_action(tools_menu, u'songUsageReport') + self.songUsageReport.setText( translate('SongUsagePlugin', '&Extract Tracking Data')) - self.SongUsageReport.setStatusTip( + self.songUsageReport.setStatusTip( translate('SongUsagePlugin', 'Generate a report on song usage.')) - self.SongUsageReport.setObjectName(u'SongUsageReport') - #SongUsage activation - self.SongUsageStatus = QtGui.QAction(tools_menu) - self.SongUsageStatus.setCheckable(True) - self.SongUsageStatus.setChecked(False) - self.SongUsageStatus.setText(translate( + # SongUsage activation + self.songUsageStatus = shortcut_action(tools_menu, u'songUsageStatus', + [QtCore.Qt.Key_F4], self.toggleSongUsageState, checked=False) + self.songUsageStatus.setText(translate( 'SongUsagePlugin', 'Toggle Tracking')) - self.SongUsageStatus.setStatusTip(translate('SongUsagePlugin', - 'Toggle the tracking of song usage.')) - self.SongUsageStatus.setShortcut(u'F4') - self.SongUsageStatus.setObjectName(u'SongUsageStatus') - #Add Menus together - self.toolsMenu.addAction(self.SongUsageMenu.menuAction()) - self.SongUsageMenu.addAction(self.SongUsageStatus) - self.SongUsageMenu.addSeparator() - self.SongUsageMenu.addAction(self.SongUsageDelete) - self.SongUsageMenu.addAction(self.SongUsageReport) + self.songUsageStatus.setStatusTip(translate('SongUsagePlugin', + 'Toggle the tracking of song usage.')) + # Add Menus together + self.toolsMenu.addAction(self.songUsageMenu.menuAction()) + self.songUsageMenu.addAction(self.songUsageStatus) + self.songUsageMenu.addSeparator() + self.songUsageMenu.addAction(self.songUsageReport) + self.songUsageMenu.addAction(self.songUsageDelete) + self.songUsageActiveButton = QtGui.QToolButton( + self.formparent.statusBar) + self.songUsageActiveButton.setCheckable(True) + self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin', + 'Toggle the tracking of song usage.')) + self.songUsageActiveButton.setObjectName(u'songUsageActiveButton') + self.formparent.statusBar.insertPermanentWidget(1, + self.songUsageActiveButton) + self.songUsageActiveButton.hide() # Signals and slots - QtCore.QObject.connect(self.SongUsageStatus, + QtCore.QObject.connect(self.songUsageStatus, QtCore.SIGNAL(u'visibilityChanged(bool)'), - self.SongUsageStatus.setChecked) - QtCore.QObject.connect(self.SongUsageStatus, - QtCore.SIGNAL(u'triggered(bool)'), + self.songUsageStatus.setChecked) + QtCore.QObject.connect(self.songUsageActiveButton, + QtCore.SIGNAL(u'toggled(bool)'), self.toggleSongUsageState) - QtCore.QObject.connect(self.SongUsageDelete, + QtCore.QObject.connect(self.songUsageDelete, QtCore.SIGNAL(u'triggered()'), self.onSongUsageDelete) - QtCore.QObject.connect(self.SongUsageReport, + QtCore.QObject.connect(self.songUsageReport, QtCore.SIGNAL(u'triggered()'), self.onSongUsageReport) - self.SongUsageMenu.menuAction().setVisible(False) + self.songUsageMenu.menuAction().setVisible(False) def initialise(self): log.info(u'SongUsage Initialising') @@ -112,16 +121,25 @@ class SongUsagePlugin(Plugin): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_live_started'), self.onReceiveSongUsage) - self.SongUsageActive = QtCore.QSettings().value( + self.songUsageActive = QtCore.QSettings().value( self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() - self.SongUsageStatus.setChecked(self.SongUsageActive) + # Set the button and checkbox state + self.setButtonState() + action_list = ActionList.get_instance() + action_list.add_action(self.songUsageStatus, + translate('SongUsagePlugin', 'Song Usage')) + action_list.add_action(self.songUsageDelete, + translate('SongUsagePlugin', 'Song Usage')) + action_list.add_action(self.songUsageReport, + translate('SongUsagePlugin', 'Song Usage')) if self.manager is None: self.manager = Manager(u'songusage', init_schema) - self.SongUsagedeleteform = SongUsageDeleteForm(self.manager, + self.songUsageDeleteForm = SongUsageDeleteForm(self.manager, self.formparent) - self.SongUsagedetailform = SongUsageDetailForm(self, self.formparent) - self.SongUsageMenu.menuAction().setVisible(True) + self.songUsageDetailForm = SongUsageDetailForm(self, self.formparent) + self.songUsageMenu.menuAction().setVisible(True) + self.songUsageActiveButton.show() def finalise(self): """ @@ -130,38 +148,72 @@ class SongUsagePlugin(Plugin): log.info(u'Plugin Finalise') self.manager.finalise() Plugin.finalise(self) - self.SongUsageMenu.menuAction().setVisible(False) - #stop any events being processed - self.SongUsageActive = False + self.songUsageMenu.menuAction().setVisible(False) + action_list = ActionList.get_instance() + action_list.remove_action(self.songUsageStatus, + translate('SongUsagePlugin', 'Song Usage')) + action_list.remove_action(self.songUsageDelete, + translate('SongUsagePlugin', 'Song Usage')) + action_list.remove_action(self.songUsageReport, + translate('SongUsagePlugin', 'Song Usage')) + self.songUsageActiveButton.hide() + # stop any events being processed + self.songUsageActive = False def toggleSongUsageState(self): - self.SongUsageActive = not self.SongUsageActive + """ + Manage the state of the audit collection and amend + the UI when necessary, + """ + self.songUsageActive = not self.songUsageActive QtCore.QSettings().setValue(self.settingsSection + u'/active', - QtCore.QVariant(self.SongUsageActive)) + QtCore.QVariant(self.songUsageActive)) + self.setButtonState() + + def setButtonState(self): + """ + Keep buttons inline. Turn of signals to stop dead loop but we need the + button and check box set correctly. + """ + self.songUsageActiveButton.blockSignals(True) + self.songUsageStatus.blockSignals(True) + if self.songUsageActive: + self.songUsageActiveButton.setIcon(self.activeIcon) + self.songUsageStatus.setChecked(True) + self.songUsageActiveButton.setChecked(True) + self.songUsageActiveButton.setToolTip(translate('SongUsagePlugin', + 'Song usage tracking is active.')) + else: + self.songUsageActiveButton.setIcon(self.inactiveIcon) + self.songUsageStatus.setChecked(False) + self.songUsageActiveButton.setChecked(False) + self.songUsageActiveButton.setToolTip(translate('SongUsagePlugin', + 'Song usage tracking is inactive.')) + self.songUsageActiveButton.blockSignals(False) + self.songUsageStatus.blockSignals(False) + def onReceiveSongUsage(self, item): """ Song Usage for live song from SlideController """ audit = item[0].audit - if self.SongUsageActive and audit: + if self.songUsageActive and audit: song_usage_item = SongUsageItem() song_usage_item.usagedate = datetime.today() song_usage_item.usagetime = datetime.now().time() song_usage_item.title = audit[0] song_usage_item.copyright = audit[2] song_usage_item.ccl_number = audit[3] - song_usage_item.authors = u'' - for author in audit[1]: - song_usage_item.authors += author + u' ' + song_usage_item.authors = u' '.join(audit[1]) self.manager.save_object(song_usage_item) def onSongUsageDelete(self): - self.SongUsagedeleteform.exec_() + self.songUsageDeleteForm.exec_() def onSongUsageReport(self): - self.SongUsagedetailform.initialise() - self.SongUsagedetailform.exec_() + self.songUsageDetailForm.initialise() + self.songUsageDetailForm.exec_() def about(self): about_text = translate('SongUsagePlugin', 'SongUsage Plugin' diff --git a/resources/forms/amendthemedialog.ui b/resources/forms/amendthemedialog.ui deleted file mode 100644 index 90ed34cc5..000000000 --- a/resources/forms/amendthemedialog.ui +++ /dev/null @@ -1,1219 +0,0 @@ - - - AmendThemeDialog - - - Qt::ApplicationModal - - - - 0 - 0 - 586 - 651 - - - - Theme Maintance - - - - :/icon/openlp.org-icon-32.bmp:/icon/openlp.org-icon-32.bmp - - - true - - - - 8 - - - 8 - - - - - - 8 - - - 0 - - - - - Theme Name: - - - - - - - - - - - - - - 8 - - - 0 - - - - - 2 - - - - Background - - - - 8 - - - 8 - - - 8 - - - - - Background: - - - - - - - - Opaque - - - - - Transparent - - - - - - - - Background Type: - - - - - - - - Solid Color - - - - - Gradient - - - - - Image - - - - - - - - <Color1> - - - - - - - - - - - - - - <Color2> - - - - - - - - - - - - - - Image: - - - - - - - Gradient : - - - - - - - - Horizontal - - - - - Vertical - - - - - Circular - - - - - - - - - 0 - - - 0 - - - - - - - - - - - - :/images/image_load.png:/images/image_load.png - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Font Main - - - - 8 - - - 8 - - - - - - 8 - - - 0 - - - - - Main Font - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 8 - - - 8 - - - 8 - - - - - Font: - - - - - - - - - - Font Color: - - - - - - - - - - - - - - Size: - - - - - - - - 0 - 0 - - - - - 70 - 0 - - - - pt - - - 999 - - - 16 - - - - - - - Wrap Indentation - - - - - - - - - - TextLabel - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 8 - - - 0 - - - - - Display Location - - - - 8 - - - 8 - - - 8 - - - - - Use Default Location: - - - - - - - - - - false - - - - - - - X Position: - - - - - - - Y Position: - - - - - - - Width: - - - - - - - Height: - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - 0 - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Font Footer - - - - 8 - - - 8 - - - - - - 8 - - - 0 - - - - - Footer Font - - - - QFormLayout::ExpandingFieldsGrow - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 8 - - - 8 - - - 8 - - - - - Font: - - - - - - - - - - Font Color: - - - - - - - - - - - - - - Size: - - - - - - - - 0 - 0 - - - - - 70 - 0 - - - - pt - - - 999 - - - 10 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 8 - - - 0 - - - - - Display Location - - - - QFormLayout::ExpandingFieldsGrow - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 8 - - - 8 - - - 8 - - - - - Use Default Location: - - - - - - - - - - false - - - - - - - X Position: - - - - - - - Y Position: - - - - - - - Width: - - - - - - - Height: - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - 0 - - - - - - - - 0 - 0 - - - - - 78 - 0 - - - - px - - - 9999 - - - 0 - - - - - - - - 78 - 0 - - - - px - - - 9999 - - - - - - - - 78 - 0 - - - - px - - - 9999 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Other Options - - - - 8 - - - 8 - - - - - - 8 - - - 0 - - - - - Shadow && Outline - - - - 8 - - - 8 - - - - - - 8 - - - 8 - - - 0 - - - - - - - - - - - - Outline Color: - - - - - - - - - - - - - - Show Outline: - - - - - - - - - - - 8 - - - 8 - - - 0 - - - - - - - - - - - - Shadow Color: - - - - - - - - - - - - - - Show Shadow: - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 8 - - - 0 - - - - - Alignment - - - - - - Horizontal Align: - - - - - - - - Left - - - - - Right - - - - - Center - - - - - - - - Vertical Align: - - - - - - - - Top - - - - - Middle - - - - - Bottom - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - - - Preview - - - - 8 - - - 8 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 300 - 225 - - - - QFrame::WinPanel - - - QFrame::Sunken - - - 1 - - - - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - ThemeButtonBox - ThemeNameEdit - ThemeTabWidget - BackgroundComboBox - BackgroundTypeComboBox - Color1PushButton - Color2PushButton - ImageLineEdit - ImageToolButton - GradientComboBox - FontMainComboBox - FontMainColorPushButton - FontMainSizeSpinBox - FontMainDefaultCheckBox - FontMainXSpinBox - FontMainYSpinBox - FontMainWidthSpinBox - FontMainHeightSpinBox - FontFooterComboBox - FontFooterColorPushButton - FontFooterSizeSpinBox - FontFooterDefaultCheckBox - FontFooterXSpinBox - FontFooterYSpinBox - FontFooterWidthSpinBox - FontFooterHeightSpinBox - OutlineCheckBox - OutlineColorPushButton - ShadowCheckBox - ShadowColorPushButton - HorizontalComboBox - VerticalComboBox - - - - - - - ThemeButtonBox - accepted() - AmendThemeDialog - accept() - - - 375 - 466 - - - 375 - 241 - - - - - ThemeButtonBox - rejected() - AmendThemeDialog - reject() - - - 375 - 466 - - - 375 - 241 - - - - - diff --git a/resources/forms/displaytab.ui b/resources/forms/displaytab.ui deleted file mode 100644 index 7d2d78798..000000000 --- a/resources/forms/displaytab.ui +++ /dev/null @@ -1,295 +0,0 @@ - - - DisplaysDialog - - - - 0 - 0 - 620 - 716 - - - - Amend Display Settings - - - - - 0 - 40 - 241 - 79 - - - - - - - Default Settings - - - - - - - - X - - - Qt::AlignCenter - - - - - - - 0 - - - Qt::AlignCenter - - - - - - - - - - - Y - - - Qt::AlignCenter - - - - - - - 0 - - - Qt::AlignCenter - - - - - - - - - - - - 100 - 16777215 - - - - Height - - - Qt::AlignCenter - - - - - - - 0 - - - Qt::AlignCenter - - - - - - - - - - - Width - - - Qt::AlignCenter - - - - - - - 0 - - - Qt::AlignCenter - - - - - - - - - - - - - - 0 - 130 - 248 - 87 - - - - - 500 - 16777215 - - - - Amend Settings - - - - - - - - X - - - Qt::AlignCenter - - - - - - - - 50 - 16777215 - - - - 4 - - - - - - - - - - - Y - - - Qt::AlignCenter - - - - - - - - 50 - 16777215 - - - - 4 - - - - - - - - - - - Height - - - Qt::AlignCenter - - - - - - - - 50 - 16777215 - - - - 4 - - - - - - - - - QLayout::SetMinimumSize - - - - - - 100 - 16777215 - - - - Width - - - Qt::AlignCenter - - - - - - - - 60 - 16777215 - - - - - - - - layoutWidget - YAmendLabel - HeightAmendLabel - WidthAmendLabel - YAmendLabel - - - - - 0 - 10 - 191 - 23 - - - - Override Output Display - - - - - - diff --git a/resources/forms/settings.ui b/resources/forms/settings.ui index 6ad75e1e5..06e55a00d 100644 --- a/resources/forms/settings.ui +++ b/resources/forms/settings.ui @@ -14,565 +14,75 @@ Settings - + :/icon/openlp.org-icon-32.bmp:/icon/openlp.org-icon-32.bmp - - - 8 + + + + 10 + 30 + 691 + 441 + - - 8 - - - - - 2 - - - - General - - - - 8 - - - 8 - - - - - - - - Monitors - - - - 8 - - - 8 - - - - - Select monitor for output display: - - - - - - - - Monitor 1 on X11 Windowing System - - - - - Monitor 2 on X11 Windowing System - - - - - - - - - - - Blank Screen - - - - 8 - - - 8 - - - - - Show warning on startup - - - - - - - - - - Auto Open Last Service - - - - - - Automatically open the last service at startup - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 8 - - - 0 - - - - - CCLI Details - - - - 8 - - - 8 - - - - - CCLI Number: - - - - - - - - - - SongSelect Username: - - - - - - - - - - SongSelect Password: - - - - - - - QLineEdit::Password - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - + + + + + + 500 + 0 + + + + + + + 0 + 0 + 211 + 409 + + + + + 200 + 0 + + + + Qt::ScrollBarAlwaysOff + + + + - - - Themes - - - - 8 - - - 8 - - - - - Global theme - - - - 8 - - - 8 - - - - - - African Sunset - - - - - Snowy Mountains - - - - - Wilderness - - - - - - - - - - - - - - Theme level - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - 8 - - - 8 - - - 8 - - - - - Song level - - - - - - - Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - - - true - - - - - - - Service level - - - - - - - Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - - - true - - - - - - - true - - - Global level - - - - - - - Use the global theme, overriding any themes associated with either the service or the songs. - - - true - - - - - - - + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + - - - Alerts - - - - 8 - - - 8 - - - - - - 8 - - - 0 - - - - - Font - - - - 8 - - - 8 - - - - - Font Name: - - - - - - - - - - - - - Font Color: - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Background Color: - - - - - - - - - - - - - - - - - - 8 - - - 0 - - - - - Display length: - - - - - - - 5 - - - s - - - 180 - - - - - - - Qt::Horizontal - - - - 147 - 20 - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 94 - - - - - - - - - - - - 8 - - - 0 - - - - - - 0 - 0 - - - - Preview - - - - 8 - - - 8 - - - - - - 16777215 - 64 - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - + + + diff --git a/resources/forms/shortcutlistdialog.ui b/resources/forms/shortcutlistdialog.ui index 519925560..9a5c599d1 100644 --- a/resources/forms/shortcutlistdialog.ui +++ b/resources/forms/shortcutlistdialog.ui @@ -41,35 +41,35 @@ - + + + 0 + 8 - - 0 - - + - Default: None + Default: true - - + + + + Custom: + + + + + 8 - - - - Custom: - - - @@ -83,7 +83,7 @@ - :/system/system_settings.png:/system/system_settings.png + :/system/system_configure_shortcuts.png:/system/system_configure_shortcuts.png true @@ -110,21 +110,51 @@ + + + + + + 8 + - - - Qt::Horizontal + + + None - - - 40 - 20 - + + + :/system/system_configure_shortcuts.png:/system/system_configure_shortcuts.png - + + + + + + + + + + :/system/clear_shortcut.png:/system/clear_shortcut.png + + + + + + Ctrl+V + + + + + + + Shift+Ins + + + diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index d36d55147..d7233db70 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Daar is nie 'n parameter gegee om te vervang nie. Gaan steeds voort? - + No Parameter Found Geen Parameter Gevind nie - + No Placeholder Found Geen Plekhouer Gevind nie - + The alert text does not contain '<>'. Do you want to continue anyway? Die attent-teks bevat nie '<>' nie. @@ -30,83 +30,83 @@ Gaan steeds voort? AlertsPlugin - + &Alert W&aarskuwing - + Show an alert message. Vertoon 'n waarskuwing boodskap. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Waarskuwing Mini-program</strong><br/>Die waarskuwing mini-program beheer die vertoning van moederskamer inligting op die vertoon skerm - + Alert name singular Waarskuwing - + Alerts name plural - Waarskuwings + Waarskuwings - + Alerts container title - Waarskuwings + Waarskuwings AlertsPlugin.AlertForm - + Alert Message Waarskuwing Boodskap - + Alert &text: Waarskuwing &teks: - + &New &Nuwe - + &Save &Stoor - + Displ&ay V&ertoon - + Display && Cl&ose Vert&oon && Maak toe - + New Alert Nuwe Waarskuwing - + You haven't specified any text for your alert. Please type in some text before clicking New. Daar is geen teks vir die waarskuwing gespesifiseer nie. Tik asseblief teks in voordat 'n nuwe een bygevoeg word. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Gaan steeds voort? AlertsPlugin.AlertsTab - + Font Skrif - + Font name: Skrif naam: - + Font color: Skrif kleur: - + Background color: Agtergrond kleur: - + Font size: Skrif grootte: - + Alert timeout: Waarskuwing verstreke-tyd: @@ -155,51 +155,54 @@ Gaan steeds voort? BibleDB.Wizard - - Importing testaments... %s - Testament invoer... %s - - - - Importing testaments... done. - Testament invoer... voltooi. - - - + Importing books... %s Boek invoer... %s - + Importing verses from %s... Importing verses from <book name>... Vers invoer vanaf %s... - + Importing verses... done. Vers invoer... voltooi. + + BiblePlugin + + + &Upgrade older Bibles + &Opgradeer ouer Bybels + + + + Upgrade the Bible databases to the latest format. + Opgradeer die Bybel databasisse na die nuutste formaat. + + BiblePlugin.HTTPBible - + Download Error Aflaai Fout - + Parse Error Ontleed Fout - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Daar was 'n probleem om die vers seleksie af te laai. Gaan die Internet konneksie na en as hierdie probleem voortduur, oorweeg dit asseblief om 'n gogga te rapporteer. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Daar was 'n probleem om die vers seleksie te onttrek. As hierdie probleem voortduur, oorweeg dit asseblief om 'n gogga te rapporteer. @@ -207,123 +210,133 @@ Gaan steeds voort? BiblePlugin.MediaItem - + Bible not fully loaded. Die Bybel is nie ten volle gelaai nie. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Enkel en dubbel Bybel vers soek resultate kan nie kombineer word nie. Wis die resultate uit en begin 'n nuwe soektog? + + + Information + Informasie + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + Die tweede Bybel het nie al die verse wat in die hoof Bybel is nie. Slegs verse wat in beide Bybels voorkom, sal gewys word. %d verse is nie by die resultate ingesluit nie. + BiblesPlugin - + &Bible &Bybel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bybel Mini-program</strong><br/>Die Bybel mini-program verskaf die taak om Bybel verse vanaf verskillende bronne tydens die diens te vertoon. - - - - Import a Bible - Voer 'n Bybel in - - - - Add a new Bible - Voeg 'n nuwe Bybel by - - - - Edit the selected Bible - Redigeer geselekteerde Bybel - - - - Delete the selected Bible - Wis die geselekteerde Bybel uit - - - - Preview the selected Bible - Sien voorskou van die geselekteerde Bybel - - - - Send the selected Bible live - Stuur die geselekteerde Bybel regstreeks - - - - Add the selected Bible to the service - Voeg die geselekteerde Bybel by die diens - - - + Bible name singular - Bybel + Bybel - + Bibles name plural - Bybels + Bybels - + Bibles container title - Bybels + Bybels - + No Book Found - Geen Boek Gevind nie + Geen Boek Gevind nie - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Geen passende boek kon in hierdie Bybel gevind word nie. Gaan na dat die naam van die boek korrek gespel is. + + + Import a Bible. + Voer 'n Bybel in. + + + + Add a new Bible. + Voeg 'n nuwe Bybel by. + + + + Edit the selected Bible. + Redigeer geselekteerde Bybel. + + + + Delete the selected Bible. + Wis die geselekteerde Bybel uit. + + + + Preview the selected Bible. + Voorskou die geselekteerde Bybel. + + + + Send the selected Bible live. + Stuur die geselekteerde Bybel regstreeks. + + + + Add the selected Bible to the service. + Voeg die geselekteerde Bybel by die diens. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Bybel Mini-program</strong<br />Die Bybel mini-program verskaf die vermoë om Bybelverse vanaf verskillende bronne te vertoon tydens die diens. + BiblesPlugin.BibleManager - + Scripture Reference Error Skrif Verwysing Fout - + Web Bible cannot be used Web Bybel kan nie gebruik word nie - + Text Search is not available with Web Bibles. Teks Soektog is nie beskikbaar met Web Bybels nie. - + 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. Daar is nie 'n soek sleutelwoord ingevoer nie. Vir 'n soektog wat alle sleutelwoorde bevat, skei die woorde deur middel van 'n spasie. Vir 'n soektog wat een van die sleutelwoorde bevat, skei die woorde deur middel van 'n komma. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Huidig is daar geen Bybels geïnstalleer nie. Gebruik asseblief die Invoer Gids om een of meer Bybels te installeer. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Boek Hoofstuk:Vers-Vers, Hoofstuk:Vers-Vers Boek Hoofstuk:Vers-Hoofstuk:Vers - + No Bibles Available Geeb Bybels Beskikbaar nie @@ -350,45 +363,20 @@ Boek Hoofstuk:Vers-Hoofstuk:Vers BiblesPlugin.BiblesTab - + Verse Display Vers Vertoning - + Only show new chapter numbers Vertoon net nuwe hoofstuk nommers - - - Layout style: - Uitleg styl: - - - - Display style: - Vertoon styl: - Bible theme: Bybel tema: - - - Verse Per Slide - Verse Per Skyfie - - - - Verse Per Line - Verse Per Lyn - - - - Continuous - Aaneen-lopend - No Brackets @@ -422,258 +410,334 @@ Veranderinge affekteer nie verse wat reeds in die diens is nie. Vertoon tweede Bybel se verse + + BiblesPlugin.BookNameDialog + + + Select Book Name + Selekteer Boek Naam + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + Die volgende boek naam kan nie intern gepas word nie. Kies asseblief die ooreenstemmende Engelse naam van die lys. + + + + Current name: + Huidige naam: + + + + Corresponding name: + Ooreenstemmende naam: + + + + Show Books From + Wys Boeke Van + + + + Old Testament + Ou Testament + + + + New Testament + Nuwe Testament + + + + Apocrypha + Apokriewe + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Kies asseblief 'n boek. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registreer Bybel en laai boeke... + + + + Registering Language... + Taal registrasie... + + + + Importing %s... + Importing <book name>... + Voer %s in... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bybel Invoer Gids - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. Hierdie gids sal u help om Bybels van 'n verskeidenheid formate in te voer. Kliek die volgende knoppie hieronder om die proses te begin deur 'n formaat te kies om in te voer. - + Web Download Web Aflaai - + Location: Ligging: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bybel: - + Download Options Aflaai Opsies - + Server: Bediener: - + Username: Gebruikersnaam: - + Password: Wagwoord: - + Proxy Server (Optional) Tussenganger Bediener (Opsioneel) - + License Details Lisensie Besonderhede - + Set up the Bible's license details. Stel hierdie Bybel se lisensie besonderhede op. - + Version name: Weergawe naam: - + Copyright: Kopiereg: - + Please wait while your Bible is imported. Wag asseblief terwyl u Bybel ingevoer word. - + You need to specify a file with books of the Bible to use in the import. 'n Lêer met boeke van die Bybel moet gespesifiseer word vir gebruik tydens die invoer. - + You need to specify a file of Bible verses to import. 'n Lêer met Bybel verse moet gespesifiseer word om in te voer. - + You need to specify a version name for your Bible. 'n Weergawe naam moet vir die Bybel gespesifiseer word. - + Bible Exists Bybel Bestaan reeds - + Your Bible import failed. Die Bybel invoer het misluk. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Die Bybel benodig 'n kopiereg. Bybels in die Publieke Domein moet daarvolgens gemerk word. - + This Bible already exists. Please import a different Bible or first delete the existing one. Hierdie Bybel bestaan reeds. Voer asseblief 'n ander Bybel in of wis eers die bestaande een uit. - - Starting Registering bible... - Begin Bybel registrasie... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Geregistreerde bybel. Neem kennis daarvan dat verse op aanvraag -afgelaai word en dus word 'n Internet konneksie benodig. - - - + Permissions: Toestemming: - + CSV File KGW Lêer - + Bibleserver Bybelbediener - + Bible file: Bybel lêer: - - Testaments file: - Testament lêer: - - - + Books file: Boeke lêer: - + Verses file: Verse lêer: - - You have not specified a testaments file. Do you want to proceed with the import? - Daar is nie 'n testament lêer gespesifiser nie. Gaan voort met die invoer? - - - + openlp.org 1.x Bible Files openlp.org 1.x Bybel Lêers + + + Registering Bible... + Bybel word geregistreer... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Geregistreerde Bybel. Neem asseblief kennis dat verse op aan- +vraag afgelaai word en dus is 'n internet konneksie nodig. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Kies 'n Taal + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP is nie in staat om die taal van hierdie vertaling Bybel te bepaal nie. Kies asseblief die taal van die lys hieronder. + + + + Language: + Taal: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Kies asseblief 'n taal. + BiblesPlugin.MediaItem - + Quick Vinnig - + Find: Vind: - - Results: - Resultate: - - - + Book: Boek: - + Chapter: Hoofstuk: - + Verse: Vers: - + From: Vanaf: - + To: Tot: - + Text Search Teks Soektog - - Clear - Maak Skoon - - - - Keep - Behou - - - + Second: Tweede: - + Scripture Reference Skrif Verwysing + + + Toggle to keep or clear the previous results. + Wissel om die vorige resultate te behou of te verwyder. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Invoer %s %s... @@ -682,34 +746,268 @@ afgelaai word en dus word 'n Internet konneksie benodig. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Bepaal enkodering (dit mag 'n paar minuute neem)... - + Importing %s %s... Importing <book name> <chapter>... Invoer %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Kies 'n Rugsteun Ligging + + + + Bible Upgrade Wizard + Bybel Opgradeer Gids + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + Hierdie gids sal help om die bestaande Bybels vanaf 'n vorige weergawe van OpenLP 2.0 op te gradeer. Kliek die volgende knoppie hier-onder om die opgradeer proses te begin. + + + + Select Backup Directory + Kies Rugsteun Ligging + + + + Please select a backup directory for your Bibles + Kies asseblief 'n rugsteun liging vir die Bybels + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Vorige weergawes van OpenLP 2.0 is nie in staat om opgegradeerde Bybels te gebruik nie. Hierdie sal 'n rugsteun van die bestaande Bybels maak sodat indien dit nodig is om terug te gaan na 'n vorige weergawe van OpenLP, die Bybels net terug gekopiër kan word. Instruksies oor hoe om lêers te herstel kan gevind word by ons <a href="http://wiki.openlp.org/faq">Gereelde Vrae</a>. + + + + Please select a backup location for your Bibles. + Kies asseblief 'n rugsteun ligging vir die Bybels. + + + + Backup Directory: + Rugsteun Ligging: + + + + There is no need to backup my Bibles + Dit is nie nodig om die Bybels op te gradeer nie + + + + Select Bibles + Kies Bybels + + + + Please select the Bibles to upgrade + Kies asseblief die Bybels om op te gradeer + + + + Version name: + Weergawe naam: + + + + This Bible still exists. Please change the name or uncheck it. + Hierdie Bybel bestaan steeds. Kies asseblief 'n ander naam of werwyder die seleksie. + + + + Upgrading + Opgradeer + + + + Please wait while your Bibles are upgraded. + Wag asseblief terwyl die Bybels opgradeer word. + + + + You need to specify a Backup Directory for your Bibles. + 'n Rugsteun Ligging moet vir die Bybels gespesifiseer word. + + + + You need to specify a version name for your Bible. + 'n Weergawe naam moet vir die Bybel gespesifiseer word. + + + + Bible Exists + Bybel Bestaan reeds + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + Hierdie Bybel bestaan reeds. Opgradeer asseblief 'n ander Bybel, wis die bestaande uit of verwyder merk. + + + + There are no Bibles available to upgrade. + Daar is geen Bybels beskikbaar om op te gradeer nie. + + + + Upgrading Bible %s of %s: "%s" +Failed + Opgradeer Bybel %s van %s: "%s" +Gevaal + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Opgradeer Bybel %s van %s: "%s" +Opgradeer ... + + + + Download Error + Aflaai Fout + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Opgradeer Bybel %s van %s: "%s" +Opgradering %s... + + + + , %s failed + , %s het gevaal + + + + Upgrading Bible(s): %s successful%s + Opgradeer Bybel(s): %s suksesvol %s + + + + Upgrade failed. + Opgradeer het gevaal. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + Die rugsteun was nie suksesvol nie. +Om die Bybels op te gradeer word skryf-toestemming benodig vir die gegewe lêer. + + + + Starting Bible upgrade... + Bybel opgradering begin... + + + + To upgrade your Web Bibles an Internet connection is required. + Om die Web Bybels op te gradeer is 'n Internet verbinding nodig. + + + + Upgrading Bible %s of %s: "%s" +Complete + Opgradeer Bybel %s van %s: "%s" +Volledig + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Opgradeer Bybel(s): %s suksesvol %s +Neem kennis dat verse van Web Bybels op aanvraag afgelaai +word en dus is 'n Internet verbinding nodig. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Aanpas Mini-program</strong><br/>Die aanpas mini-program verskaf die vermoë om aangepasde teks skyfies op te stel wat in dieselfde manier gebruik word as die liedere mini-program. Dié mini-program verskaf grooter vryheid as die liedere mini-program. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Aanpas Skyfie Mini-program</strong><br/>Die aanpas syfie mini-program verskaf die vermoë om aangepasde teks skyfies op te stel wat in dieselfde manier gebruik word as die liedere mini-program. Dié mini-program verskaf grooter vryheid as die liedere mini-program. + + + + Custom Slide + name singular + Aangepasde Skyfie + + + + Custom Slides + name plural + Aangepasde Skyfies + + + + Custom Slides + container title + Aangepasde Skyfies + + + + Load a new custom slide. + Laai 'n nuwe aangepasde skyfie. + + + + Import a custom slide. + Voer 'n aangepasde skyfie in. + + + + Add a new custom slide. + Voeg 'n nuwe aangepasde skyfie by. + + + + Edit the selected custom slide. + Redigeer die geselekteerde aangepasde skyfie. + + + + Delete the selected custom slide. + Wis die geselekteerde aangepasde skyfie uit. + + + + Preview the selected custom slide. + Skou die geselekteerde aangepasde skyfie. + + + + Send the selected custom slide live. + Stuur die geselekteerde aangepasde skuifie regstreeks. + + + + Add the selected custom slide to the service. + Voeg die geselekteerde aangepasde skyfie by die diens. CustomPlugin.CustomTab - + Custom Display Aangepasde Vertoning - + Display footer Vertoon voetspasie @@ -717,192 +1015,139 @@ afgelaai word en dus word 'n Internet konneksie benodig. CustomPlugin.EditCustomForm - + Edit Custom Slides Redigeer Aangepaste Skyfies - + &Title: &Titel: - + Add a new slide at bottom. Voeg nuwe skyfie by aan die onderkant. - + Edit the selected slide. Redigeer die geselekteerde skyfie. - + Edit all the slides at once. Redigeer al die skyfies tegelyk. - - Split Slide - Verdeel Skyfie - - - + Split a slide into two by inserting a slide splitter. Verdeel 'n skyfie deur 'n skyfie-verdeler te gebruik. - + The&me: Te&ma: - + &Credits: &Krediete: - + You need to type in a title. 'n Titel word benodig. - + You need to add at least one slide Ten minste een skyfie moet bygevoeg word - + Ed&it All - Red&igeer Alles + Red&igeer Alles + + + + Insert Slide + Voeg 'n Skyfie in - CustomsPlugin + GeneralTab - - Import a Custom - Voer 'n Persoonlike nutsprogram in - - - - Load a new Custom - Laai 'n nuwe Aanpassing - - - - Add a new Custom - Voeg 'n nuwe Aanpassing by - - - - Edit the selected Custom - Redigeer die geselekteerde Aanpassing - - - - Delete the selected Custom - Wis die geselekteerde Aanpassing uit - - - - Preview the selected Custom - Sien voorskou van die geselekteerde Aanpassing - - - - Send the selected Custom live - Stuur die geselekteerde Aanpassing regstreeks - - - - Add the selected Custom to the service - Voeg die geselekteerde Aanpassing by die diens - - - - Custom - name singular - Aanpas - - - - Customs - name plural - Aanpassings - - - - Custom - container title - Aanpasing + + General + Algemeen ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Beeld Mini-program</strong><br/>Die beeld mini-program verskaf vertoning van beelde.<br/>Een van die onderskeidende kenmerke van hierdie mini-program is die vermoë om beelde te groepeer in die diensbestuurder wat dit maklik maak om verskeie beelde te vertoon. Die mini-program kan ook van OpenLP se "tydgebonde herhaling"-funksie gebruik maak om 'n automatiese skyfe-vertoning te verkry. Verder kan beelde van hierdie mini-program gebruik word om die huidige tema se agtergrond te vervang hoewel 'n tema sy eie agtergrond het. - - Load a new Image - Laai 'n nuwe Beeld - - - - Add a new Image - Voeg 'n nuwe Beeld by - - - - Edit the selected Image - Redigeer die geselekteerde Beeld - - - - Delete the selected Image - Wis die geselekteerde Beeld uit - - - - Preview the selected Image - Sien voorskou van die geselekteerde Beeld - - - - Send the selected Image live - Stuur die geselekteerde Beeld regstreeks - - - - Add the selected Image to the service - Voeg die geselekteerde Beeld by die diens - - - + Image name singular - Beeld + Beeld - + Images name plural - Beelde + Beelde - + Images container title Beelde + + + Load a new image. + Laai 'n nuwe beeld. + + + + Add a new image. + Voeg 'n nuwe beeld by. + + + + Edit the selected image. + Redigeer die geselekteerde beeld. + + + + Delete the selected image. + Wis die geselekteerde beeld uit. + + + + Preview the selected image. + Skou die geselekteerde beeld. + + + + Send the selected image live. + Stuur die geselekteerde beeld regstreeks. + + + + Add the selected image to the service. + Voeg die geselekteerde beeld by die diens. + ImagePlugin.ExceptionDialog - + Select Attachment Selekteer Aanhangsel @@ -910,39 +1155,39 @@ afgelaai word en dus word 'n Internet konneksie benodig. ImagePlugin.MediaItem - + Select Image(s) Selekteer beeld(e) - + You must select an image to delete. 'n Beeld om uit te wis moet geselekteer word. - + You must select an image to replace the background with. 'n Beeld wat die agtergrond vervang moet gekies word. - + Missing Image(s) Vermisde Beeld(e) - + The following image(s) no longer exist: %s Die volgende beeld(e) bestaan nie meer nie: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Die volgende beeld(e) bestaan nie meer nie: %s Voeg steeds die ander beelde by? - + There was a problem replacing your background, the image file "%s" no longer exists. Daar was 'n probleem om die agtergrond te vervang. Die beeld lêer "%s" bestaan ine meer nie. @@ -950,98 +1195,98 @@ Voeg steeds die ander beelde by? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Media Mini-program</strong><br/>Die media mini-program verskaf speel funksies van audio en video. - - Load a new Media - Laai nuwe Media + + Media + name singular + Media - - Add a new Media - Voeg nuwe Media by + + Media + name plural + Media + + + + Media + container title + Media + + + + Load new media. + Laai nuwe media. - Edit the selected Media - Redigeer die geselekteerde Media + Add new media. + Voeg nuwe media by. - Delete the selected Media - Wis die geselekteerde Media uit + Edit the selected media. + Redigeer di geselekteerde media. - Preview the selected Media - Sien voorskou van die geselekteerde Media + Delete the selected media. + Wis die giselekteerde media uit. - Send the selected Media live - Stuur die geselekteerde Media regstreeks + Preview the selected media. + Skou die geselekteerde media. - Add the selected Media to the service - Voeg die geselekteerde Media by die diens + Send the selected media live. + Stuur die geselekteerde media regstreeks. - - Media - name singular - Media - - - - Media - name plural - Media - - - - Media - container title - Media + + Add the selected media to the service. + Voeg die geselekteerde media by die diens. MediaPlugin.MediaItem - + Select Media Selekteer Media - + You must select a media file to delete. 'n Media lêer om uit te wis moet geselekteer word. - + Missing Media File Vermisde Media Lêer - + The file %s no longer exists. Die lêer %s bestaan nie meer nie. - + You must select a media file to replace the background with. - 'n Media lêer wat die agtergrond vervang moet gekies word. + 'n Media lêer wat die agtergrond vervang moet gekies word. - + There was a problem replacing your background, the media file "%s" no longer exists. Daar was 'n probleem om die agtergrond te vervang. Die media lêer "%s" bestaan nie meer nie. - + Videos (%s);;Audio (%s);;%s (*) Videos (%s);;Audio (%s);;%s (*) @@ -1049,12 +1294,12 @@ Voeg steeds die ander beelde by? MediaPlugin.MediaTab - + Media Display Media Vertoning - + Use Phonon for video playback Gebruik Phonon om Video terug te speel @@ -1062,62 +1307,57 @@ Voeg steeds die ander beelde by? OpenLP - + Image Files Beeld Lêers + + + Information + Informasie + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Bybel formaat het verander. Die bestaande Bybels moet opgradeer word. Moet OpenLP dit nou opgradeer? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is gratis kerk aanbieding sagteware of lirieke projeksie sagteware wat gebruik word vir die vertoning van liedere, Bybel verse, video's, beelde tot ook aanbiedings (as OpenOffice.org, PowerPoint of PowerPoint Viewer geïnstalleer is) vir kerklike aanbidding deur middel van 'n rekenaar en 'n data projektor. - -Vind meer uit oor OpenLP: http://openlp.org/ - -OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat meer Christelike sagteware geskryf word, oorweeg dit asseblief om by te dra deur die knoppie hieronder te gebruik. - - - + Credits Krediete - + License Lisensie - + Contribute Dra By - + build %s bou %s - + 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. Hierdie program is gratis sagteware; dit kan verspei en/of verander word onder die terme van die GNU Algemene Publieke Lisensie soos deur die Gratis Sagteware Vondasie gepubliseer is; weergawe 2 van die Lisensie. - + 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 below for more details. Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORG; sonder die geïmpliseerde waarborg van VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien hieronder vir meer inligting. - + Project Lead %s @@ -1243,189 +1483,318 @@ Finale Krediet Hy ons vry gemaak het. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Kopiereg © 2004-2011 Raoul Snyman -Gedeeltelike kopiereg © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is gratis kerk aanbieding sagteware of lirieke projeksie sagteware wat gebruik word vir die vertoning van liedere, Bybel verse, video's, beelde tot ook aanbiedings (as Impress, PowerPoint of PowerPoint Viewer geïnstalleer is) vir kerklike aanbidding deur middel van 'n rekenaar en 'n data projektor. + +Vind meer uit oor OpenLP: http://openlp.org/ + +OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat meer Christelike sagteware geskryf word, oorweeg dit asseblief om by te dra deur die knoppie hieronder te gebruik. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Kopiereg © 2004-2011%s +Gedeeltelike kopiereg © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings GK (UI) Verstellings - + Number of recent files to display: Hoeveelheid onlangse lêers om te vertoon: - + Remember active media manager tab on startup Onthou die laaste media bestuurder oortjie wanneer die program begin - + Double-click to send items straight to live Dubbel-kliek om die items regstreeks te stuur - + Expand new service items on creation Sit die nuwe diens items uit wanneer dit geskep word - + Enable application exit confirmation Stel die program in staat om die uitgang bevestiging te vertoon - + Mouse Cursor Muis Wyser - + Hide mouse cursor when over display window Steek die muis wyser weg wanneer dit oor die vertoon venster beweeg - + Default Image Verstek Beeld - + Background color: - Agtergrond kleur: + Agtergrond kleur: - + Image file: Beeld lêer: - + Open File Maak Lêer oop + + + Preview items when clicked in Media Manager + Skou items wanneer gekliek word in die Media Bestuurder + + + + Advanced + Gevorderd + + + + Click to select a color. + Kliek om 'n kleur te kies. + + + + Browse for an image file to display. + Blaai vir 'n beeld lêer om te vertoon. + + + + Revert to the default OpenLP logo. + Verander terug na die verstek OpenLP logo. + OpenLP.DisplayTagDialog - + Edit Selection Redigeer Seleksie - - Update - Opdatteer - - - + Description Beskrywing - + Tag Etiket - + Start tag Begin etiket - + End tag Eind-etiket - - Default - Verstek - - - + Tag Id Haak Id - + Start HTML Begin HTML - + End HTML Eindig HTML + + + Save + Stoor + OpenLP.DisplayTagTab - + Update Error Opdateer Fout - + Tag "n" already defined. Etiket "n" alreeds gedefinieër. - + Tag %s already defined. Etiket %s alreeds gedefinieër. + + + New Tag + Nuwe Etiket + + + + </and here> + </en hier> + + + + <HTML here> + <HTML hier> + + + + OpenLP.DisplayTags + + + Red + Rooi + + + + Black + Swart + + + + Blue + Blou + + + + Yellow + Geel + + + + Green + Groen + + + + Pink + Pienk + + + + Orange + Oranje + + + + Purple + Pers + + + + White + Wit + + + + Superscript + Bo-skrif + + + + Subscript + Onder-skrif + + + + Paragraph + Paragraaf + + + + Bold + Vetdruk + + + + Italics + Italiaans + + + + Underline + Onderlyn + + + + Break + Breek + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. Oeps! OpenLP het 'n probleem ondervind en kon nie daarvanaf herstel nie. Die teks in die boks hieronder bevat inligting wat van hulp kan wees aan die OpenLP ontwikkelaars, so stuur dit asseblief per e-pos na bugs@openlp.org saam met 'n gedetaileerde beskrywing van wat gedoen was toe die probleem plaasgevind het. - + Error Occurred 'n Fout het opgeduik - + Send E-Mail Stuur E-pos - + Save to File Stoor na Lêer - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Voer asseblief 'n beskrywing in van waarmee jy besig was toe de probleem ontstaan het (Mimimum 20 karrakters) - + Attach File Heg 'n Lêer aan - + Description characters to enter : %s Beskrywende karakters om in te voer: %s @@ -1433,24 +1802,24 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Platvorm: %s - + Save Crash Report Stoor Bots Verslag - + Text files (*.txt *.log *.text) Teks lêers (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1481,7 +1850,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1516,17 +1885,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename Lêer Hernoem - + New File Name: Nuwe Lêer Naam: - + File Copy Lêer Kopieër @@ -1534,17 +1903,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Kies Vertaling - + Choose the translation you'd like to use in OpenLP. Kies die taal wat gebruik moet word in OpenLP. - + Translation: Vertaling: @@ -1552,102 +1921,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... Aflaai %s... - + Download complete. Click the finish button to start OpenLP. Aflaai voltooi. Klik op die klaar knoppie om OpenLP te begin. - + Enabling selected plugins... Skakel geselekteerde miniprogramme aan... - + First Time Wizard Eerste-keer Gids - + Welcome to the First Time Wizard Welkom by die Eerste-keer Gids - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - Hierdie gids sal bystand verleen in die proses om OpenLP op te stel vir eerste gebruik. Klik die volgende knoppie hieronder om die seleksie proses te begin. - - - + Activate required Plugins Aktiveer nodige Miniprogramme - + Select the Plugins you wish to use. Kies die Miniprogramme wat gebruik moet word. - + Songs Liedere - + Custom Text Verpersoonlike Teks - + Bible Bybel - + Images - Beelde + Beelde - + Presentations Aanbiedinge - + Media (Audio and Video) Media (Klank en Video) - + Allow remote access Laat afgeleë toegang toe - + Monitor Song Usage Monitor Lied-Gebruik - + Allow Alerts Laat Waarskuwings Toe - + No Internet Connection Geen Internet Verbinding - + Unable to detect an Internet connection. Nie in staat om 'n Internet verbinding op te spoor nie. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1659,198 +2023,223 @@ Om die Eerste-gebruik Gids later te gebruik om hierde data in te trek, druk die Om die Eerste-keer gids heeltemal te kanselleer, druk die vollledig-knoppie hieronder. - + Sample Songs Voorbeeld Liedere - + Select and download public domain songs. Kies en laai liedere vanaf die publieke domein. - + Sample Bibles Voorbeeld Bybels - + Select and download free Bibles. Kies en laai gratis Bybels af. - + Sample Themes Voorbeeld Temas - + Select and download sample themes. Kies en laai voorbeeld temas af. - + Default Settings Verstek Instellings - + Set up default settings to be used by OpenLP. Stel verstek instellings wat deur OpenLP gebruik moet word. - - Setting Up And Importing - Opstel en Invoer - - - - Please wait while OpenLP is set up and your data is imported. - Wag asseblief terwyl OpenLP opgestel word en die data ingevoer word. - - - + Default output display: Verstek uitgaande vertoning: - + Select default theme: Kies verstek tema: - + Starting configuration process... Konfigurasie proses begin... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Hierdie gids sal bystand verleen in die proses om OpenLP op te stel vir eerste gebruik. Klik die volgende knoppie hieronder om die seleksie proses te begin. + + + + Setting Up And Downloading + Opstel en Afliaai + + + + Please wait while OpenLP is set up and your data is downloaded. + Wag asseblief terwyl OpenLP opgestel en die data afgelaai word. + + + + Setting Up + Opstel + + + + Click the finish button to start OpenLP. + Kliek die voltooi knoppie om OpenLP te begin. + OpenLP.GeneralTab - + General Algemeen - + Monitors Monitors - + Select monitor for output display: Selekteer monitor vir uitgaande vertoning: - + Display if a single screen Vertoon as dit 'n enkel skerm is - + Application Startup Applikasie Aanskakel - + Show blank screen warning Vertoon leë skerm waarskuwing - + Automatically open the last service Maak vanself die laaste diens oop - + Show the splash screen Wys die spatsel skerm - + Application Settings Program Verstellings - + Prompt to save before starting a new service Vra om te stoor voordat 'n nuwe diens begin word - + Automatically preview next item in service Wys voorskou van volgende item in diens automaties - Slide loop delay: - Skyfie herhaal vertraging: - - - sec sek - + CCLI Details CCLI Inligting - + SongSelect username: SongSelect gebruikersnaam: - + SongSelect password: SongSelect wagwoord: - + Display Position Vertoon Posisie - + X X - + Y Y - + Height Hoogte - + Width Wydte - + Override display position Oorskryf vertoon posisie - + Check for updates to OpenLP Kyk vir opdaterings van OpenLP + + + Unblank display when adding new live item + Verwyder blanko vertoning wanneer 'n nuwe regstreekse item bygevoeg word + + + + Enable slide wrap-around + Laat skyfie omvouing toe + + + + Timed slide interval: + Tyd-gedrewe skyfie interval: + OpenLP.LanguageManager - + Language Taal - + Please restart OpenLP to use your new language setting. Herlaai asseblief OpenLP om die nuwe taal instelling te gebruik. @@ -1858,7 +2247,7 @@ Om die Eerste-keer gids heeltemal te kanselleer, druk die vollledig-knoppie hier OpenLP.MainDisplay - + OpenLP Display OpenLP Vertooning @@ -1866,190 +2255,155 @@ Om die Eerste-keer gids heeltemal te kanselleer, druk die vollledig-knoppie hier OpenLP.MainWindow - + &File &Lêer - + &Import &Invoer - + &Export Uitvo&er - + &View &Bekyk - + M&ode M&odus - + &Tools &Gereedskap - + &Settings Ver&stellings - + &Language Taa&l - + &Help &Hulp - + Media Manager Media Bestuurder - + Service Manager Diens Bestuurder - + Theme Manager Tema Bestuurder - + &New &Nuwe - - Ctrl+N - Ctrl+N - - - + &Open Maak &Oop - + Open an existing service. Maak 'n bestaande diens oop. - - Ctrl+O - Ctrl+O - - - + &Save &Stoor - + Save the current service to disk. Stoor die huidige diens na skyf. - - Ctrl+S - Ctrl+S - - - + Save &As... Stoor &As... - + Save Service As Stoor Diens As - + Save the current service under a new name. Stoor die huidige diens onder 'n nuwe naam. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit &Uitgang - + Quit OpenLP Sluit OpenLP Af - - Alt+F4 - Alt+F4 - - - + &Theme &Tema - + &Configure OpenLP... &Konfigureer OpenLP... - + &Media Manager &Media Bestuurder - + Toggle Media Manager Wissel Media Bestuurder - + Toggle the visibility of the media manager. Wissel sigbaarheid van die media bestuurder. - - F8 - F8 - - - + &Theme Manager &Tema Bestuurder - + Toggle Theme Manager Wissel Tema Bestuurder - + Toggle the visibility of the theme manager. Wissel sigbaarheid van die tema bestuurder. - - - F10 - F10 - &Service Manager @@ -2067,146 +2421,121 @@ Om die Eerste-keer gids heeltemal te kanselleer, druk die vollledig-knoppie hier - F9 - F9 - - - &Preview Panel Voorskou &Paneel - + Toggle Preview Panel Wissel Voorskou Paneel - + Toggle the visibility of the preview panel. Wissel sigbaarheid van die voorskou paneel. - - F11 - F11 - - - + &Live Panel Regstreekse Panee&l - + Toggle Live Panel Wissel Regstreekse Paneel - + Toggle the visibility of the live panel. Wissel sigbaarheid van die regstreekse paneel. - - F12 - F12 - - - + &Plugin List Mini-&program Lys - + List the Plugins Lys die Mini-programme - - Alt+F7 - Alt+F7 - - - + &User Guide Gebr&uikers Gids - + &About &Aangaande - + More information about OpenLP Meer inligting aangaande OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Aanlyn Hulp - + &Web Site &Web Tuiste - + Use the system language, if available. Gebruik die sisteem se taal as dit beskikbaar is. - + Set the interface language to %s Verstel die koppelvlak taal na %s - + Add &Tool... Voeg Gereedskaps&tuk by... - + Add an application to the list of tools. Voeg 'n applikasie by die lys van gereedskapstukke. - + &Default &Verstek - + Set the view mode back to the default. Verstel skou modus terug na verstek modus. - + &Setup Op&stel - + Set the view mode to Setup. Verstel die skou modus na Opstel modus. - + &Live &Regstreeks - + Set the view mode to Live. Verstel die skou modus na Regstreeks. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2215,81 +2544,86 @@ You can download the latest version from http://openlp.org/. Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. - + OpenLP Version Updated OpenLP Weergawe is Opdateer - + OpenLP Main Display Blanked OpenLP Hoof Vertoning Blanko - + The Main Display has been blanked out Die Hoof Skerm is afgeskakel - + Default Theme: %s Verstek Tema: %s - + English Please add the name of your language here Afrikaans - + Configure &Shortcuts... - Konfigureer Kortpaaie + Konfigureer Kor&tpaaie... - + Close OpenLP Mook OpenLP toe - + Are you sure you want to close OpenLP? Maak OpenLP sekerlik toe? - - Print the current Service Order. - Druk die huidige Diens Bestelling. - - - - Ctrl+P - Ctrl+P - - - + Open &Data Folder... Maak &Data Lêer oop... - + Open the folder where songs, bibles and other data resides. Maak die lêer waar liedere, bybels en ander data is, oop. - + &Configure Display Tags - Konfigureer Vertoon Haakies + &Konfigureer Vertoon Haakies - + &Autodetect Spoor outom&aties op + + + Update Theme Images + Opdateer Tema Beelde + + + + Update the preview images for all themes. + Opdateer die voorskou beelde vir alle temas. + + + + Print the current service. + Druk die huidige diens. + OpenLP.MediaManagerItem - + No Items Selected Geen item geselekteer nie @@ -2299,75 +2633,92 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. &Voeg by die geselekteerde Diens item - + You must select one or more items to preview. Kies een of meer items vir die voorskou. - + You must select one or more items to send live. Kies een of meer items vir regstreekse uitsending. - + You must select one or more items. Kies een of meer items. - + You must select an existing service item to add to. 'n Bestaande diens item moet geselekteer word om by by te voeg. - + Invalid Service Item Ongeldige Diens Item - + You must select a %s service item. Kies 'n %s diens item. + + + You must select one or more items to add. + Kies een of meer items om by te voeg. + + + + No Search Results + Geen Soek Resultate + + + + Duplicate filename %s. +This filename is already in the list + Duplikaat lêer naam %s. +Die lêer naam is reeds in die lys + OpenLP.PluginForm - + Plugin List Mini-program Lys - + Plugin Details Mini-program Besonderhede - + Status: Status: - + Active Aktief - + Inactive Onaktief - + %s (Inactive) %s (Onaktief) - + %s (Active) %s (Aktief) - + %s (Disabled) %s (Onaktief) @@ -2375,12 +2726,12 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page Pas Blaai - + Fit Width Pas Wydte @@ -2388,7 +2739,7 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. OpenLP.PrintServiceForm - + Options Opsies @@ -2408,55 +2759,60 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Kopieër as HTML - + Zoom In Zoom In - + Zoom Out Zoem Uit - + Zoom Original Zoem Oorspronklike - + Other Options Ander Opsies - + Include slide text if available Sluit skyfie teks in indien beskikbaar - + Include service item notes Sluit diens item notas in - + Include play length of media items Sluit die speel tyd van die media items in - - Service Order Sheet - Diens Bestelling Blad + + Add page break before each text item + Voeg 'n bladsy-breking voor elke teks item + + + + Service Sheet + Diens Blad OpenLP.ScreenList - + Screen Skerm - + primary primêr @@ -2464,7 +2820,7 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item Hergroepeer Diens Item @@ -2472,217 +2828,257 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Laai 'n bestaande diens - - - - Save this service - Stoor hierdie diens - - - - Select a theme for the service - Selekteer 'n tema vir die diens - - - + Move to &top Skuif boon&toe - + Move item to the top of the service. Skuif item tot heel bo in die diens. - + Move &up Sk&uif op - + Move item up one position in the service. Skuif item een posisie boontoe in die diens. - + Move &down Skuif &af - + Move item down one position in the service. Skuif item een posisie af in die diens. - + Move to &bottom Skuif &tot heel onder - + Move item to the end of the service. Skuif item tot aan die einde van die diens. - + &Delete From Service Wis uit vanaf die &Diens - + Delete the selected item from the service. Wis geselekteerde item van die diens af. - + &Add New Item &Voeg Nuwe Item By - + &Add to Selected Item &Voeg by Geselekteerde Item - + &Edit Item R&edigeer Item - + &Reorder Item Ve&rander Item orde - + &Notes &Notas - + &Change Item Theme &Verander Item Tema - + File is not a valid service. The content encoding is not UTF-8. Lêer is nie 'n geldige diens nie. Die inhoud enkodering is nie UTF-8 nie. - + File is not a valid service. Lêer is nie 'n geldige diens nie. - + Missing Display Handler Vermisde Vertoon Hanteerder - + Your item cannot be displayed as there is no handler to display it Die item kan nie vertoon word nie omdat daar nie 'n hanteerder is om dit te vertoon nie - + Your item cannot be displayed as the plugin required to display it is missing or inactive Die item kan nie vertoon word nie omdat die mini-program wat dit moet vertoon vermis of onaktief is - + &Expand all Br&ei alles uit - + Expand all the service items. Brei al die diens items uit. - + &Collapse all - Stort alles ineen + Sto&rt alles ineen - + Collapse all the service items. - Stort al die diens items ineen + Stort al die diens items ineen. - + Open File - Maak Lêer oop + Maak Lêer oop - + OpenLP Service Files (*.osz) OpenLP Diens Lêers (*.osz) - + Moves the selection down the window. Skuif die geselekteerde afwaarts in die venster. - + Move up Skuif op - + Moves the selection up the window. Skuif die geselekteerde opwaarts in die venster. - + Go Live Gaan Regstreeks - + Send the selected item to Live. - Stuur die geselekteerde item Regstreeks + Stuur die geselekteerde item Regstreeks. - + Modified Service Redigeer Diens - - Notes: + + &Start Time + &Begin Tyd + + + + Show &Preview + Wys &Voorskou + + + + Show &Live + Vertoo&n Regstreeks + + + + The current service has been modified. Would you like to save this service? + Die huidige diens was verander. Stoor hierdie diens? + + + + File could not be opened because it is corrupt. + Lêer kon nie oopgemaak word nie omdat dit korrup is. + + + + Empty File + Leë Lêer + + + + This service file does not contain any data. + Die diens lêer het geen data inhoud nie. + + + + Corrupt File + Korrupte Lêer + + + + Custom Service Notes: + Aangepasde Diens Notas: + + + + Notes: Notas: - - &Start Time - Begin Tyd + + Playing time: + Speel tyd: - - Show &Preview - Wys Voorskou + + Untitled Service + Ongetitelde Diens - - Show &Live - Vertoon Regstreeks + + Load an existing service. + Laai 'n bestaande diens. - - The current service has been modified. Would you like to save this service? - Die huidige diens was verander. Stoor hierdie diens? + + Save this service. + Stoor die diens. + + + + Select a theme for the service. + Kies 'n tema vir die diens. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + Die lêer is óf korrup óf is nie 'n OpenLP 2.0 diens lêer nie. OpenLP.ServiceNoteForm - + Service Item Notes Diens Item Notas @@ -2690,7 +3086,7 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.SettingsForm - + Configure OpenLP Konfigureer OpenLP @@ -2698,221 +3094,276 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ShortcutListDialog - + Customize Shortcuts Verpersoonlik Kortpaaie - + Action Aksie - + Shortcut Kortpad - - Default: %s - Verstek: %s - - - - Custom: - Persoonlik: - - - - None - Geen - - - + Duplicate Shortcut Duplikaat Kortpad - + The shortcut "%s" is already assigned to another action, please use a different shortcut. Die kortpad "%s" is alreeds toegeken aan 'n ander aksie, kies asseblief 'n ander kortpad. - + Alternate Alternatief + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Kies 'n aksie en kliek een van die knoppies hieronder om 'n primêre of alternatiewe kortpad vas te vang. + + + + Default + Verstek + + + + Custom + Aanpasing + + + + Capture shortcut. + Vang kortpad. + + + + Restore the default shortcut of this action. + Stel die verstek kortpad terug vir hierdie aksie. + + + + Restore Default Shortcuts + Herstel Verstek Kortpaaie + + + + Do you want to restore all shortcuts to their defaults? + Herstel alle kortpaaie na hul verstek waarde? + OpenLP.SlideController - - Move to previous - Beweeg na vorige - - - - Move to next - Beweeg na volgende - - - + Hide Verskuil - - Move to live - Verskuif na regstreekse skerm - - - - Start continuous loop - Begin aaneenlopende lus - - - - Stop continuous loop - Stop deurlopende lus - - - - Delay between slides in seconds - Vertraging tussen skyfies in sekondes - - - - Start playing media - Begin media speel - - - + Go To Gaan Na - - Edit and reload song preview - Redigeer en laai weer 'n lied voorskou - - - + Blank Screen Blanko Skerm - + Blank to Theme Blanko na Tema - + Show Desktop Wys Werkskerm - + Previous Slide Vorige Skyfie - + Next Slide Volgende Skyfie - + Previous Service Vorige Diens - + Next Service Volgende Diens - + Escape Item Ontsnap Item + + + Move to previous. + Skuif terug. + + + + Move to next. + Skuif volgende. + + + + Play Slides + Speel Skyfies + + + + Play Slides in Loop + Speel Skyfies in Herhaling + + + + Play Slides to End + Speel Skyfies tot Einde + + + + Delay between slides in seconds. + Vertraging tussen skyfies in sekondes. + + + + Move to live. + Skuif na regstreeks. + + + + Add to Service. + Voeg by Diens. + + + + Edit and reload song preview. + Redigeer en herlaai lied voorskou. + + + + Start playing media. + Begin media speel. + OpenLP.SpellTextEdit - + Spelling Suggestions Spelling Voorstelle - + Formatting Tags Uitleg Hakkies + + + Language: + Taal: + OpenLP.StartTimeForm - - Item Start Time - Item Begin Tyd - - - + Hours: Ure: - - h - h - - - - m - m - - - + Minutes: Minute: - + Seconds: Sekondes: + + + Item Start and Finish Time + Item Begin en End Tyd + + + + Start + Begin + + + + Finish + Eindig + + + + Length + Lengte + + + + Time Validation Error + Tyd Validasie Fout + + + + Finish time is set after the end of the media item + End tyd is na die einde van die media item gestel + + + + Start time is after the finish time of the media item + Begin tyd is na die eind tyd van die media item + OpenLP.ThemeForm - + Select Image Selekteer Beeld - + Theme Name Missing Tema Naam Vermis - + There is no name for this theme. Please enter one. Daar is nie 'n naam vir hierdie tema nie. Voer asseblief een in. - + Theme Name Invalid Tema Naam Ongeldig - + Invalid theme name. Please enter one. Ongeldige tema naam. Voer asseblief een in. - - (%d lines per slide) - (%d lyne per skyfie) + + (approximately %d lines per slide) + (ongeveer %d lyne per skyfie) @@ -2978,69 +3429,69 @@ Die inhoud enkodering is nie UTF-8 nie. Stel in As &Globale Standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Kies 'n tema om te redigeer. - + You are unable to delete the default theme. Die standaard tema kan nie uitgewis word nie. - + You have not selected a theme. Geen tema is geselekteer nie. - + Save Theme - (%s) Stoor Tema - (%s) - + Theme Exported Tema Uitvoer - + Your theme has been successfully exported. Die tema was suksesvol uitgevoer. - + Theme Export Failed Tema Uitvoer het Misluk - + Your theme could not be exported due to an error. Die tema kon nie uitgevoer word nie weens 'n fout. - + Select Theme Import File Kies Tema Invoer Lêer - + File is not a valid theme. The content encoding is not UTF-8. Lêer is nie 'n geldige tema nie. Die inhoud enkodering is nie UTF-8 nie. - + File is not a valid theme. Lêer is nie 'n geldige tema nie. - + Theme %s is used in the %s plugin. Tema %s is in gebruik deur die %s mini-program. @@ -3060,47 +3511,47 @@ Die inhoud enkodering is nie UTF-8 nie. Vo&er Tema uit - + You must select a theme to rename. Kies 'n tema om te hernoem. - + Rename Confirmation Hernoem Bevestiging - + Rename %s theme? Hernoem %s tema? - + You must select a theme to delete. Kies 'n tema om uit te wis. - + Delete Confirmation Uitwis Bevestiging - + Delete %s theme? Wis %s tema uit? - + Validation Error Validerings Fout - + A theme with this name already exists. 'n Tema met hierdie naam bestaan alreeds. - + OpenLP Themes (*.theme *.otz) OpenLP Temas (*.theme *.otz) @@ -3108,242 +3559,242 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ThemeWizard - + Theme Wizard Tema Gids - + Welcome to the Theme Wizard Welkom by die Tema Gids - + Set Up Background Stel die Agtergrond Op - + Set up your theme's background according to the parameters below. Stel jou tema se agtergrond op volgens die parameters hier onder. - + Background type: Agtergrond tipe: - + Solid Color - Soliede Kleur + Soliede Kleur - + Gradient - Gradiënt + Gradiënt - + Color: - Kleur: + Kleur: - + Gradient: - Gradiënt: + Gradiënt: - + Horizontal - Horisontaal + Horisontaal - + Vertical - Vertikaal + Vertikaal - + Circular - Sirkelvormig + Sirkelvormig - + Top Left - Bottom Right Links Bo - Regs Onder - + Bottom Left - Top Right Links Onder - Regs Bo - + Main Area Font Details Hoof Area Skrif Gegewens - + Define the font and display characteristics for the Display text Definieër die skrif en vertoon karrakters vir die Vertoon teks - + Font: - Skrif: + Skrif: - + Size: - Grootte: + Grootte: - + Line Spacing: Lyn Spasiëring: - + &Outline: - Buitelyn: + &Buitelyn: - + &Shadow: &Skaduwee: - + Bold - Vetgedruk + Vetdruk - + Italic Italiaans - + Footer Area Font Details Voetskrif Area Skrif Gegewens - + Define the font and display characteristics for the Footer text Definieër die skrif en vertoon karraktereienskappe vir die Voetskrif teks - + Text Formatting Details Teks Formattering Gegewens - + Allows additional display formatting information to be defined Laat toe dat addisionele vertoon formattering inligting gedifinieër word - + Horizontal Align: Horisontale Sporing: - + Left - Links + Links - + Right - Regs + Regs - + Center - Middel + Middel - + Output Area Locations Uitvoer Area Liggings - + Allows you to change and move the main and footer areas. Laat toe dat die hoof en voetskrif areas verander en geskuif word. - + &Main Area - Hoof Area + &Hoof Area - + &Use default location Gebr&uik verstek ligging - + X position: - X posisie: + X posisie: - + px - px + px - + Y position: - Y posisie: + Y posisie: - + Width: - Wydte: + Wydte: - + Height: - Hoogte: + Hoogte: - + Use default location - Gebruik verstek ligging + Gebruik verstek ligging - + Save and Preview Stoor en Voorskou - + View the theme and save it replacing the current one or change the name to create a new theme Besigtig die tema en stoor dit waarna die huidige een vervang, of verander die naam om 'n nuwe een te skep - + Theme name: Tema naam: - + 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. Hierdie gids sal help om temas te skep en te redigeer. Klik die volgende knoppie hieronder om die proses te begin deur jou agtergrond op te stel. - + Transitions: Oorskakel effekte: - + &Footer Area - Voetskrif Area + &Voetskrif Area - + Edit Theme - %s Redigeer Tema - %s @@ -3351,42 +3802,42 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ThemesTab - + Global Theme Globale Tema - + Theme Level Tema Vlak - + S&ong Level Lied Vl&ak - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Gebruik die tema van elke lied in die lied-databasis. As 'n lied nie 'n geassosieërde tema het nie, gebruik die diens se tema. As die diens nie 'n tema het nie, gebruik dan die globale tema. - + &Service Level Dien&s Vlak - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Gebruik die tema van die diens en verplaas enige van die individuele liedere se temas. As die diens nie 'n tema het nie, gebruik dan die globale tema. - + &Global Level &Globale Vlak - + Use the global theme, overriding any themes associated with either the service or the songs. Gebruik die globale tema om enige temas wat met die diens of liedere geassosieer is te vervang. @@ -3394,421 +3845,528 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.Ui - + Error - Fout + Fout - + &Delete - &Wis Uit + &Wis Uit - + Delete the selected item. Wis die geselekteerde item uit. - + Move selection up one position. Skuif die seleksie een posisie op. - + Move selection down one position. Skuif die seleksie een posisie af. - + &Add &Voeg by - - - Advanced - Gevorderd - - - - All Files - Alle Lêers - - - - Create a new service. - Skep 'n nuwe diens. - - - - &Edit - R&edigeer - + Advanced + Gevorderd + + + + All Files + Alle Lêers + + + + Create a new service. + Skep 'n nuwe diens. + + + + &Edit + R&edigeer + + + Import Voer in - + Length %s Lengte %s - + Live - Regstreeks + Regstreeks - + Load Laai - + New Nuwe - + New Service - Nuwe Diens + Nuwe Diens - + OpenLP 2.0 - OpenLP 2.0 + OpenLP 2.0 - - Open Service - Maak Diens Oop - - - + Preview - Voorskou + Voorskou - + Replace Background - Vervang Agtergrond + Vervang Agtergrond - - Replace Live Background - Vervang Regstreekse Agtergrond - - - + Reset Background Herstel Agtergrond - - Reset Live Background - Herstel Regstreekse Agtergrond - - - + Save Service - Stoor Diens + Stoor Diens - + Service Diens - + Start %s Begin %s - + &Vertical Align: &Vertikale Sporing: - + Top - Bo + Bo - + Middle - Middel + Middel - + Bottom - Onder + Onder - + About - Aangaande + Aangaande - + Browse... - Deursoek... + Deursoek... - + Cancel Kanselleer - + CCLI number: - CCLI nommer: + CCLI nommer: - + Empty Field Leë Veld - + Export Uitvoer - + pt Abbreviated font pointsize unit - pt + pt - + Image - Beeld + Beeld - + Live Background Error Regstreekse Agtergrond Fout - - Live Panel - Regstreekse Paneel - - - + New Theme - Nuwe Tema + Nuwe Tema - + No File Selected Singular Geen Lêer Geselekteer nie - + No Files Selected Plural Geen Leêrs Geselekteer nie - + No Item Selected Singular Geen Item Geselekteer nie - + No Items Selected Plural Geen items geselekteer nie - + openlp.org 1.x - openlp.org 1.x + openlp.org 1.x - - Preview Panel - Voorskou Paneel - - - - Print Service Order - Druk Diens Orde - - - + s The abbreviated unit for seconds - s + s - + Save && Preview - Stoor && Voorskou + Stoor && Voorskou - + Search - Soek + Soek - + You must select an item to delete. Kies 'n item om uit te wis. - + You must select an item to edit. - Selekteer 'n item om te regideer. + Selekteer 'n item om te regideer. - + Theme Singular - Tema + Tema - + Themes Plural - Temas + Temas - + Version Weergawe - - - Finished import. - Invoer voltooi. - - Format: - Formaat: + Finished import. + Invoer voltooi. - - Importing - Invoer + + Format: + Formaat: - Importing "%s"... - "%s" ingevoer... + Importing + Invoer - Select Import Source - Selekteer Invoer Bron + Importing "%s"... + "%s" ingevoer... + Select Import Source + Selekteer Invoer Bron + + + Select the import format and the location to import from. Selekteer die invoer vormaat en die ligging vanwaar invoer geskied. - + The openlp.org 1.x 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. - Die openlp.org 1.x invoerder is onaktief gestel weens 'n vermisde Python module. Om van hierdie invoerder gebruik te maak moet die "python-sqlite" module installeer word. + Die openlp.org 1.x invoerder is onaktief gestel weens 'n vermisde Python module. Om van hierdie invoerder gebruik te maak moet die "python-sqlite" module installeer word. - + Open %s File Maak %s Lêer Oop - - - %p% - %p% - + %p% + %p% + + + Ready. - Gereed. + Gereed. - + Starting import... - Invoer begin... + Invoer begin... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Spesifiseer ten minste een %s lêer om vanaf in te voer. - + Welcome to the Bible Import Wizard - Welkom by die Bybel Invoer Gids + Welkom by die Bybel Invoer Gids - + Welcome to the Song Export Wizard Welkom by die Lied Uitvoer Gids - + Welcome to the Song Import Wizard - Welkom by die Lied Invoer Gids + Welkom by die Lied Invoer Gids - + Author Singular Outeur - + Authors Plural Outeure - + © Copyright symbol. - © - - - - Song Book - Singular - Lied Boek + © - Song Books - Plural - Lied Boeke + Song Book + Singular + Lied Boek - Song Maintenance - Lied Onderhoud - - - - Topic - Singular - Onderwerp + Song Books + Plural + Lied Boeke + Song Maintenance + Lied Onderhoud + + + + Topic + Singular + Onderwerp + + + Topics Plural - Onderwerpe + Onderwerpe + + + + Continuous + Aaneen-lopend + + + + Default + Verstek + + + + Display style: + Vertoon styl: + + + + File + Lêer + + + + Help + Hulp + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Uitleg styl: + + + + Live Toolbar + Regstreekse Gereedskapsbalk + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP is reeds ana die gang. Gaan voort? + + + + Settings + Verstellings + + + + Tools + Gereedskap + + + + Verse Per Slide + Vers Per Skyfie + + + + Verse Per Line + Vers Per Lyn + + + + View + Vertoon + + + + Duplicate Error + Dupliseer Fout + + + + Unsupported File + Lêer nie Ondersteun nie + + + + Title and/or verses not found + Titel en/of verse nie gevind + + + + XML syntax error + XML sintaks fout + + + + View Mode + Vertoon Modus + + + + Welcome to the Bible Upgrade Wizard + Welkom by die Bybel Opgradeer Gids + + + + Open service. + Maak 'n diens oop. + + + + Print Service + Druk Diens uit + + + + Replace live background. + Vervang regstreekse agtergrond. + + + + Reset live background. + Herstel regstreekse agtergrond. + + + + &Split + &Verdeel + + + + Split a slide into two only if it does not fit on the screen as one slide. + Verdeel 'n skyfie slegs in twee wanneer dit nie op die skerm as 'n enkele skyfie sal pas nie. OpenLP.displayTagDialog - + Configure Display Tags Konfigureer Vertoon Hakkies @@ -3820,104 +4378,99 @@ Die inhoud enkodering is nie UTF-8 nie. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Aanbieding Mini-program</strong><br/>Die aanbieding mini-program bied die vermoë om aanbiedings van verskillende programme te vertoon. Die keuse van beskikbare aanbieding-programme word aan die gebruiker vertoon deur 'n hangkieslys. - - - Load a new Presentation - Laai 'n nuwe Aanbiedieng - - - - Delete the selected Presentation - Wis die geselekteerde Aanbieding uit - - - - Preview the selected Presentation - Sien voorskou van die geselekteerde Aanbieding - - - - Send the selected Presentation live - Stuur die geselekteerde Aanbieding regstreeks - - - - Add the selected Presentation to the service - Voeg die geselekteerde Aanbieding by die diens - Presentation name singular - Aanbieding + Aanbieding Presentations name plural - Aanbiedinge + Aanbiedinge Presentations container title - Aanbiedinge + Aanbiedinge + + + + Load a new presentation. + Laai 'n nuwe aanbieding. + + + + Delete the selected presentation. + Wis die geselekteerde aanbieding uit. + + + + Preview the selected presentation. + Skou die geselekteerde aanbieding. + + + + Send the selected presentation live. + Stuur die geselekteerde aanbieding regstreeks. + + + + Add the selected presentation to the service. + Voeg die geselekteerde aanabieding by die diens. PresentationPlugin.MediaItem - + Select Presentation(s) Selekteer Aanbieding(e) - + Automatic Outomaties - + Present using: Bied aan met: - + File Exists Lêer Bestaan Reeds - + A presentation with that filename already exists. 'n Aanbieding met daardie lêernaam bestaan reeds. - - Unsupported File - Lêer nie Ondersteun nie - - - + This type of presentation is not supported. Hierdie tipe aanbieding word nie ondersteun nie. - + Presentations (%s) Aanbiedinge (%s) - + Missing Presentation Vermisde Aanbieding - + The Presentation %s no longer exists. Die Aanbieding %s bestaan nie meer nie. - + The Presentation %s is incomplete, please reload. Die Aanbieding %s is onvolledig, herlaai asseblief. @@ -3925,17 +4478,17 @@ Die inhoud enkodering is nie UTF-8 nie. PresentationPlugin.PresentationTab - + Available Controllers Beskikbare Beheerders - + Allow presentation application to be overriden Laat toe dat aanbieding program oorheers word - + %s (unavailable) %s (nie beskikbaar nie) @@ -3943,71 +4496,174 @@ Die inhoud enkodering is nie UTF-8 nie. RemotePlugin - + <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. <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). - + Remote name singular - Afstandbeheer + Afstandbeheer - + Remotes name plural - Afstandbehere + Afstandbehere - + Remote container title Afstandbeheer + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Afgelië + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Verhoog Aansig + + + + Service Manager + Diens Bestuurder + + + + Slide Controller + Skyfie Beheerder + + + + Alerts + Waarskuwings + + + + Search + Soek + + + + Back + Terug + + + + Refresh + Verfris + + + + Blank + Blanko + + + + Show + Wys + + + + Prev + Vorige + + + + Next + Volgende + + + + Text + Teks + + + + Show Alert + Wys Waarskuwing + + + + Go Live + Gaan Regstreeks + + + + Add To Service + Voeg By Diens + + + + No Results + Geen Resultate + + + + Options + Opsies + + RemotePlugin.RemoteTab - + Serve on IP address: Bedien op hierdie IP adres: - + Port number: Poort nommer: - + Server Settings Bediener Verstellings + + + Remote URL: + Afgeleë URL: + + + + Stage view URL: + Verhoog vertoning URL: + SongUsagePlugin - + &Song Usage Tracking &Volg Lied Gebruik - + &Delete Tracking Data Wis Volg &Data Uit - + Delete song usage data up to a specified date. Wis lied volg data uit tot en met 'n spesifieke datum. - + &Extract Tracking Data Onttr&ek Volg Data - + Generate a report on song usage. Genereer 'n verslag oor lied-gebruik. @@ -4022,53 +4678,58 @@ Die inhoud enkodering is nie UTF-8 nie. Wissel lied-gebruik volging. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>LiedGebruik Mini-program</strong><br/>Die mini-program volg die gebruik van liedere in dienste. - - - SongUsage - name singular - SongUsage - - - - SongUsage - name plural - SongUsage - SongUsage + name singular + Lied Gebruik + + + + SongUsage + name plural + Lied Gebruik + + + + SongUsage container title - SongUsage + Lied Gebruik + + + + Song Usage + Lied Gebruik SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Wis Lied Gebruik Data Uit - + Delete Selected Song Usage Events? Wis Geselekteerde Lied Gebruik Gebeure uit? - + Are you sure you want to delete selected Song Usage data? Wis regtig die geselekteerde Diens Gebruik data uit? - + Deletion Successful Uitwissing Suksesvol - + All requested data has been deleted successfully. Al die gevraagde data is suksesvol uitgewis. @@ -4076,42 +4737,42 @@ Die inhoud enkodering is nie UTF-8 nie. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Diens Gebruik Ontrekking - + Select Date Range Selekteer Datum Grense - + to tot - + Report Location Rapporteer Ligging - + Output File Location Uitvoer Lêer Ligging - + usage_detail_%s_%s.txt usage_detail_%s_%s.txt - + Report Creation Verslag Skepping - + Report %s has been successfully created. @@ -4120,12 +4781,12 @@ has been successfully created. was suksesvol geskep. - + Output Path Not Selected Skryf Ligging Nie Gekies Nie - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. Daar is nie 'n geldige skryf ligging gespesifiseer vir die lied-gebruik verslag nie. Kies asseblief 'n bestaande pad op die rekenaar. @@ -4133,160 +4794,130 @@ was suksesvol geskep. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Voer liedere in deur van die invoer helper gebruik te maak. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Liedere Mini-program</strong><br/>Die liedere mini-program verskaf die vermoë om liedere te vertoon en te bestuur. - + &Re-index Songs He&r-indeks Liedere - + Re-index the songs database to improve searching and ordering. Her-indeks die liedere databasis om lied-soektogte en organisering te verbeter. - + Reindexing songs... Besig om liedere indek te herskep... - - Add a new Song - Voeg 'n nuwe Lied by - - - - Edit the selected Song - Redigeer die geselekteerde Lied - - - - Delete the selected Song - Wis die geselekteerde Lied uit - - - - Preview the selected Song - Skou die geselekteerde Lied - - - - Send the selected Song live - Stuur die geselekteerde Lied regstreeks - - - - Add the selected Song to the service - Voeg die geselekteerde Lied by die diens - - - + Song name singular - Lied + Lied - + Songs name plural - Liedere + Liedere - + Songs container title - Liedere + Liedere - + Arabic (CP-1256) Arabies (CP-1256) - + Baltic (CP-1257) Balties (CP-1257) - + Central European (CP-1250) Sentraal Europees (CP-1250) - + Cyrillic (CP-1251) Cyrillies (CP-1251) - + Greek (CP-1253) Grieks (CP-1253) - + Hebrew (CP-1255) Hebreeus (CP-1255) - + Japanese (CP-932) Japanees (CP-932) - + Korean (CP-949) Koreaans (CP-949) - + Simplified Chinese (CP-936) Vereenvoudigde Chinees (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Tradisionele Chinees (CP-950) - + Turkish (CP-1254) Turks (CP-1254) - + Vietnam (CP-1258) Viëtnamees (CP-1258) - + Western European (CP-1252) Wes-Europees (CP-1252) - + Character Encoding Karrakter Enkodering - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4296,52 +4927,82 @@ Gewoonlik is die reeds-geselekteerde keuse voldoende. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Kies asseblief die karrakter enkodering. Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. - + Exports songs using the export wizard. Voer liedere uit deur gebruik te maak van die uitvoer gids. + + + Add a new song. + Voeg 'n nuwe lied by. + + + + Edit the selected song. + Redigeer die geselekteerde lied. + + + + Delete the selected song. + Wis die geselekteerde lied uit. + + + + Preview the selected song. + Skou die geselekteerde lied. + + + + Send the selected song live. + Stuur die geselekteerde lied regstreeks. + + + + Add the selected song to the service. + Voeg die geselekteerde lied by die diens. + SongsPlugin.AuthorsForm - + Author Maintenance Outeur Onderhoud - + Display name: Vertoon naam: - + First name: Voornaam: - + Last name: Van: - + You need to type in the first name of the author. U moet die naam van die skrywer invul. - + You need to type in the last name of the author. U moet ten minste die skrywer se naam invoer. - + You have not set a display name for the author, combine the first and last names? 'n Vertoon naam vir die skrywer is nie opgestel nie. Kan die naam en van gekombineer word? @@ -4349,190 +5010,198 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Voer lied %d van %d in + + The file does not have a valid extension. + Die lêer het nie 'n geldige verlening nie. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Toegedien deur %s SongsPlugin.EditSongForm - + Song Editor Lied Redigeerder - + &Title: &Titel: - + Alt&ernate title: Alt&ernatiewe titel: - + &Lyrics: &Lirieke: - + &Verse order: &Vers orde: - + Ed&it All Red&igeer Alles - + Title && Lyrics Titel && Lirieke - + &Add to Song &Voeg by Lied - + &Remove Ve&rwyder - + &Manage Authors, Topics, Song Books &Bestuur Skrywers, Onderwerpe en Lied Boeke - + A&dd to Song Voeg by Lie&d - + R&emove V&erwyder - + Book: Boek: - + Number: Nommer: - + Authors, Topics && Song Book Skrywers, Onderwerpe && Lied Boek - + New &Theme Nuwe &Tema - + Copyright Information Kopiereg Informasie - + Comments Kommentaar - + Theme, Copyright Info && Comments Tema, Kopiereg Informasie && Kommentaar - + Add Author Voeg Skrywer By - + This author does not exist, do you want to add them? Hierdie skrywer bestaan nie, moet die skrywer bygevoeg word? - + This author is already in the list. Hierdie skrywer is alreeds in die lys. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Die geselekteerde skrywer is ongeldig. Kies 'n skrywer vanaf die lys of voer 'n nuwe skrywer in en kliek op die "Voeg Skrywer by Lied" knoppie om die skrywer by te voeg. - + Add Topic Voeg Onderwerp by - + This topic does not exist, do you want to add it? Die onderwerp bestaan nie. Voeg dit by? - + This topic is already in the list. Die onderwerp is reeds in die lys. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Geselekteerde onderwerp is ongeldig. Kies 'n onderwerp vanaf die lys of voer 'n nuwe onderwerp in en kliek die "Voeg Onderwerp by Lied" knoppie om die onderwerp by te voeg. - + You need to type in a song title. Tik 'n lied titel in. - + You need to type in at least one verse. Ten minste een vers moet ingevoer word. - + Warning Waarskuwing - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Die vers orde is ongeldig. Daar is geen vers wat ooreenstem met %s nie. Geldige opsies is %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? In die vers orde is %s nie gebruik nie. Kan die lied so gestoor word? - + Add Book Voeg Boek by - + This song book does not exist, do you want to add it? Die lied boek bestaan nie. Voeg dit by? - + You need to have an author for this song. Daar word 'n outeur benodig vir hierdie lied. - + You need to type some text in to the verse. Daar word teks benodig vir die vers. @@ -4540,260 +5209,278 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.EditVerseForm - + Edit Verse Redigeer Vers - + &Verse type: &Vers tipe: - + &Insert Sit Tussen-&in + + + Split a slide into two by inserting a verse splitter. + Verdeel 'n skyfie in twee deur 'n vers-verdeler in te sit. + SongsPlugin.ExportWizardForm - + Song Export Wizard Lied Uitvoer Gids - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. Hierdie gids sal help om die liedere na die oop en gratis OpenLyrics aanbiddigs-formaat uit te voer. - + Select Songs Kies Liedere - + Uncheck All Merk Alles Af - + Check All Merk Alles Aan - + Select Directory Kies Lêer-gids - - Select the directory you want the songs to be saved. - Kies die gids waar die liedere gestoor moet word. - - - + Directory: Lêer Gids: - + Exporting Uitvoer - + Please wait while your songs are exported. Wag asseblief terwyl die liedere uitgevoer word. - + You need to add at least one Song to export. Ten minste een lied moet bygevoeg word om uit te voer. - + No Save Location specified Geen Stoor Ligging gespesifiseer nie - + Starting export... Uitvoer begin... - + Check the songs you want to export. Merk die liediere wat uitgevoer moet vord. - + You need to specify a directory. 'n Lêer gids moet gespesifiseer word. - + Select Destination Folder Kies Bestemming Lêer gids + + + Select the directory where you want the songs to be saved. + Kies die gids waar die liedere gestoor moet word. + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files Selekteer Dokument/Aanbieding Lêers - + Song Import Wizard Lied Invoer Gids - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. Hierdie gids help met die invoer van liedere in verskillende formate. Kliek die volgende knoppie hieronder om die proses te begin deur 'n formaat te kies wat gebruik moet word vir invoer. - + Generic Document/Presentation Generiese Dokumentasie/Aanbieding - + Filename: Lêernaam: - + Add Files... Voeg Lêers by... - + Remove File(s) Verwyder Lêer(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Die Songs of Fellowship invoerder is onaktief gestel omdat OpenLP nie OpenOffice.org op die rekenaar kon vind nie. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Die generiese dokument/aanbieding invoerder is onaktief gestel omdat OpenLP nie OpenOffice.org op die rekenaar kon vind nie. - - - + Please wait while your songs are imported. Wag asseblief terwyl die liedere ingevoer word. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. Die OpenLyrics invoerder is nog nie ontwikkel nie, maar soos gesien kan word is ons van mening om dit te doen. Hopelik sal dit in die volgende vrystelling wees. - - Administered by %s - Toegedien deur %s - - - + OpenLP 2.0 Databases OpenLP 2.0 Databasisse - + openlp.org v1.x Databases openlp.org v1.x Databasisse - + Words Of Worship Song Files Words Of Worship Lied Lêers - + Songs Of Fellowship Song Files Songs Of Fellowship Lied Lêers - + SongBeamer Files SongBeamer Lêers - + SongShow Plus Song Files SongShow Plus Lied Lêers - + You need to specify at least one document or presentation file to import from. Ten minste een document of aanbieding moet gespesifiseer word om vanaf in te voer. - + Foilpresenter Song Files Foilpresenter Lied Lêers + + + Copy + Kopieër + + + + Save to File + Stoor na Lêer + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Die Liedere van Volgelinge invoerder is onaktief gestel omdat OpenLP nie toegang tot OpenOffice of LibreOffice het nie. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Die generiese dokument/aanbieding invoerder is onaktief gestel omdat OpenLP nie toegang tot OpenOffice of LibreOffice het nie. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Handhaaf die lys van skrywers, onderwerpe en boeke - - - + Titles Titels - + Lyrics Lirieke - + Delete Song(s)? Wis Lied(ere) uit? - + CCLI License: CCLI Lisensie: - + Entire Song Volledige Lied - + Are you sure you want to delete the %n selected song(s)? - Wis regtig die %n geselekteerde lied(ere)? - + Wis regtig die %n geselekteerde lied uit? + Wis regtig die %n geselekteerde liedere uit? + + + Maintain the lists of authors, topics and books. + Onderhou die lys van skrywers, onderwerpe en boeke. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Nie 'n geldige openlp.org 1.x lied databasis. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Voer lied %d van %d in + + Not a valid OpenLP 2.0 song database. + Nie 'n geldige OpenLP 2.0 lied databasis. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Uitvoer "%s"... @@ -4801,22 +5488,22 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongBookForm - + Song Book Maintenance Lied Boek Onderhoud - + &Name: &Naam: - + &Publisher: &Uitgewer: - + You need to type in a name for the book. 'n Naam vir die boek moet ingevoer word. @@ -4824,12 +5511,12 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongExportForm - + Finished export. Uitvoer voltooi. - + Your song export failed. Die lied uitvoer het misluk. @@ -4837,15 +5524,35 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongImport - + copyright kopiereg + + + The following songs could not be imported: + Die volgende liedere kon nie ingevoer word nie: + + + + Unable to open file + Kan nie lêer oopmaak nie + + + + File not found + Lêer nie gevind nie + + + + Cannot access OpenOffice or LibreOffice + Het nie toegang tot OpenOffice of LibreOffice nie + SongsPlugin.SongImportForm - + Your song import failed. Lied invoer het misluk. @@ -4853,107 +5560,107 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongMaintenanceForm - + Could not add your author. Skrywer kon nie bygevoeg word nie. - + This author already exists. Die skrywer bestaan reeds. - + Could not add your topic. Onderwerp kon nie bygevoeg word nie. - + This topic already exists. Hierdie onderwerp bestaan reeds. - + Could not add your book. Boek kon nie bygevoeg word nie. - + This book already exists. Hierdie boek bestaan reeds. - + Could not save your changes. Veranderinge kon nie gestoor word nie. - + Could not save your modified topic, because it already exists. Geredigeerde onderwerp kon nie gestoor word nie, want dit bestaan alreeds. - + Delete Author Wis Skrywer Uit - + Are you sure you want to delete the selected author? Wis die geselekteerde skrywer uit? - + This author cannot be deleted, they are currently assigned to at least one song. Die skrywer kan nie uitgewis word nie, omdat die skrywer aan ten minste een lied toegeken is. - + Delete Topic Wis Onderwerp Uit - + Are you sure you want to delete the selected topic? Wis die geselekteerde onderwerp uit? - + This topic cannot be deleted, it is currently assigned to at least one song. Die onderwerp kan nie uitgewis word nie, omdat dit aan ten minste een lied toegeken is. - + Delete Book Wis Boek Uit - + Are you sure you want to delete the selected book? Wis die geselekteerde boek uit? - + This book cannot be deleted, it is currently assigned to at least one song. Die boek kan nie uitgewis word nie, omdat dit aan ten minste een lied toegeken is. - + Could not save your modified author, because the author already exists. Geredigeerde skrywer kon nie gestoor word nie, omdat die skrywer reeds bestaan. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? Die outeur %s bestaan alreeds. Moet liedere met die outeur %s die bestaande outeur %s gebruik? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? Die onderwerp %s bestaan alreeds. Moet liedere met die onderwerp %s die bestaande onderwerp %s gebruik? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? Die boek %s bestaan reeds. Moed liedere met die doek %s gebruik maak van bestaande boek %s? @@ -4961,27 +5668,27 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongsTab - + Songs Mode Liedere Modus - + Enable search as you type Bekragtig soek soos getik word - + Display verses on live tool bar Vertoon verse op regstreekse gereedskap staaf - + Update service from song edit Opdateer diens van lied-redigering - + Add missing songs when opening service Voer vermisde liedere by wanneer die diens oopgemaak word @@ -4989,17 +5696,17 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.TopicsForm - + Topic Maintenance Onderwerp Onderhoud - + Topic name: Onderwerp naam: - + You need to type in a topic name. 'n Onderwerp naam moet ingevoer word. @@ -5007,39 +5714,47 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.VerseType - + Verse Vers - + Chorus Koor - + Bridge Brug - + Pre-Chorus Voor-Refrein - + Intro Inleiding - + Ending Slot - + Other Ander + + ThemeTab + + + Themes + Temas + + diff --git a/resources/i18n/cs.ts b/resources/i18n/cs.ts index 2919e9622..d8fe71a44 100644 --- a/resources/i18n/cs.ts +++ b/resources/i18n/cs.ts @@ -3,112 +3,112 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Nebyl zadán žádný parametr pro nahrazení. -Chcete přesto pokračovat? +Chcete p?esto pokra?ovat? - + No Parameter Found Parametr nebyl nalezen - + No Placeholder Found Zástupný znak nenalezen. - + The alert text does not contain '<>'. Do you want to continue anyway? - Text upozornění neobsahuje '<>'. -Chcete přesto pokračovat? + Text upozorn?ní neobsahuje '<>'. +Chcete p?esto pokra?ovat? AlertsPlugin - + &Alert - &Upozornění + &Upozorn?ní - + Show an alert message. - Zobrazí vzkaz upozornění. + Zobrazí vzkaz upozorn?ní. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Modul upozornění</strong><br />Modul upozornění řídí zobrazení upozornění na zobrazovací obrazovce + <strong>Modul upozorn?ní</strong><br />Modul upozorn?ní ?ídí zobrazení upozorn?ní na zobrazovací obrazovce - + Alert name singular - Upozornění + Upozorn?ní - + Alerts name plural Více upozornění - + Alerts container title - Více upozornění + Upozorn?ní AlertsPlugin.AlertForm - + Alert Message - Vzkaz upozornění + Vzkaz upozorn?ní - + Alert &text: - &Text upozornění + &Text upozorn?ní - + &New &Nový - + &Save &Uložit - + Displ&ay &Zobrazit - + Display && Cl&ose - Zobrazit a za&vřít + Zobrazit a za&v?ít - + New Alert - Nové upozornění + Nové upozorn?ní - + You haven't specified any text for your alert. Please type in some text before clicking New. - Nebyl zadán žádný text upozornění. Před klepnutím na Nový prosím zadejte nějaký text. + Nebyl zadán žádný text upozorn?ní. P?ed klepnutím na Nový prosím zadejte n?jaký text. - + &Parameter: - &Parametr: + &Parametr: @@ -116,214 +116,227 @@ Chcete přesto pokračovat? Alert message created and displayed. - Vzkaz upozornění byl vytvořen a zobrazen. + Vzkaz upozorn?ní byl vytvo?en a zobrazen. AlertsPlugin.AlertsTab - + Font Písmo - + Font name: Název písma: - + Font color: Barva písma: - + Background color: Barva pozadí: - + Font size: Velikost písma: - + Alert timeout: - Čas vypršení upozornění: + ?as vypršení upozorn?ní: BibleDB.Wizard - - Importing testaments... %s - Importuji Bible... %s - - - - Importing testaments... done. - Importuji Bible... hotovo. - - - + Importing books... %s Importuji knihy... %s - + Importing verses from %s... Importing verses from <book name>... Importuji verše z %s... - + Importing verses... done. Importuji verše... hotovo. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error Chyba stahování - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - Při stahování výběru veršů se vyskytl problém. Prosím prověřte své internetové připojení. Pokud se tato chyba stále objevuje, zvašte prosím nahlášení chyby. + P?i stahování výb?ru verš? se vyskytl problém. Prosím prov??te své internetové p?ipojení. Pokud se tato chyba stále objevuje, zvašte prosím nahlášení chyby. - + Parse Error Chyba zpracování - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - Při rozbalování výběru veršů se vyskytl problém. Pokud se tato chyba stále objevuje, zvašte prosím nahlášení chyby. + P?i rozbalování výb?ru verš? se vyskytl problém. Pokud se tato chyba stále objevuje, zvašte prosím nahlášení chyby. BiblePlugin.MediaItem - + Bible not fully loaded. - Bible není celá načtena. + Bible není celá na?tena. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - Nelze kombinovat jednoduché a dvojité výsledky hledání veršů v Bibli. Přejete si smazat výsledky hledání a začít s novým vyhledáváním? + Nelze kombinovat jednoduché a dvojité výsledky hledání verš? v Bibli. P?ejete si smazat výsledky hledání a za?ít s novým vyhledáváním? + + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + BiblesPlugin - + &Bible &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Modul Bible</strong><br />Modul Bible dovoluje během služby zobrazovat biblické verše z různých zdrojů. - - - - Import a Bible - Import Bible - - - - Add a new Bible - Přidat Bibli - - - - Edit the selected Bible - Upravit vybranou Bibli - - - - Delete the selected Bible - Smazat vybranou Bibli - - - - Preview the selected Bible - Náhled vybrané Bible - - - - Send the selected Bible live - Vybraná Bibli naživo - - - - Add the selected Bible to the service - Přidat vybranou Bibli k službě - - - + Bible name singular Bible - + Bibles name plural Více Biblí - + Bibles container title - Více Biblí + Bible - + No Book Found Kniha nenalezena - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - V Bibli nebyla nalezena odpovídající kniha. Prověřte, že název knihy byl zadán správně. + V Bibli nebyla nalezena odpovídající kniha. Prov??te, že název knihy byl zadán správn?. + + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + BiblesPlugin.BibleManager - + Scripture Reference Error Chyba v odkazu do Bible - + Web Bible cannot be used Bibli z www nelze použít - + Text Search is not available with Web Bibles. Hledání textu není dostupné v Bibli z www. - + 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. Nebylo zadáno slovo pro hledání. -K hledání textu obsahující všechna slova je nutno tato slova oddělit mezerou. Oddělením slov čárkou se bude hledat text obsahující alespoň jedno ze zadaných slov. +K hledání textu obsahující všechna slova je nutno tato slova odd?lit mezerou. Odd?lením slov ?árkou se bude hledat text obsahující alespo? jedno ze zadaných slov. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Žádné Bible nejsou nainstalovány. K p?idání jedné nebo více Biblí prosím použijte Pr?vodce importem. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -332,7 +345,7 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - Odkaz do Bible buďto není podporován aplikací OpenLP nebo je neplatný. Přesvědčte se prosím, že odkaz odpovídá jednomu z následujcích vzorů: + Odkaz do Bible bu?to není podporován aplikací OpenLP nebo je neplatný. P?esv?d?te se prosím, že odkaz odpovídá jednomu z následujcích vzor?: Kniha Kapitola Kniha Kapitola-Kapitola @@ -342,7 +355,7 @@ Kniha Kapitola:Verš-Verš,Kapitola:Verš-Verš Kniha Kapitola:Verš-Kapitola:Verš - + No Bibles Available Žádné Bible k dispozici @@ -350,45 +363,20 @@ Kniha Kapitola:Verš-Kapitola:Verš BiblesPlugin.BiblesTab - + Verse Display Zobrazit verš - + Only show new chapter numbers - Zobrazit jen číslo nové kapitoly - - - - Layout style: - Styl rozvržení: - - - - Display style: - Styl zobrazení: + Zobrazit jen ?íslo nové kapitoly Bible theme: Motiv Bible: - - - Verse Per Slide - Verš na jeden snímek - - - - Verse Per Line - Verš na jeden řádek - - - - Continuous - Spojitý - No Brackets @@ -414,7 +402,7 @@ Kniha Kapitola:Verš-Kapitola:Verš Note: Changes do not affect verses already in the service. Poznámka: -Verše, které jsou už ve službě, nejsou změnami ovlivněny. +Verše, které jsou už ve služb?, nejsou zm?nami ovlivn?ny. @@ -422,257 +410,333 @@ Verše, které jsou už ve službě, nejsou změnami ovlivněny. Zobrazit druhé verše z Bible + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - Průvodce importem Bible + Pr?vodce importem Bible - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Tento průvodce usnadní import Biblí z různých formátů. Proces importu se spustí klepnutím níže na tlačítko další. Potom vyberte formát, ze kterého se bude Bible importovat. + Tento pr?vodce usnadní import Biblí z r?zných formát?. Proces importu se spustí klepnutím níže na tla?ítko další. Potom vyberte formát, ze kterého se bude Bible importovat. - + Web Download Stáhnutí z www - + Location: - Umístění: + Umíst?ní: - + Crosswalk - + Crosswalk + + + + BibleGateway + BibleGateway - BibleGateway - - - - Bible: Bible: - + Download Options Volby stahování - + Server: Server: - + Username: Uživatelské jméno: - + Password: Heslo: - + Proxy Server (Optional) Proxy Server (Volitelné) - + License Details Podrobnosti licence - + Set up the Bible's license details. Nastavit podrobnosti k licenci Bible. - + Version name: Název verze: - + Copyright: Autorská práva: - + Please wait while your Bible is imported. - Prosím vyčkejte, než se Bible importuje. + Prosím vy?kejte, než se Bible importuje. - + You need to specify a file with books of the Bible to use in the import. - Je potřeba určit soubor s knihami Bible. Tento soubor se použije při importu. + Je pot?eba ur?it soubor s knihami Bible. Tento soubor se použije p?i importu. - + You need to specify a file of Bible verses to import. - K importu je třeba určit soubor s veršemi Bible. + K importu je t?eba ur?it soubor s veršemi Bible. - + You need to specify a version name for your Bible. Je nutno uvést název verze Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - K Bibli je potřeba nastavit autorská práva. Bible, které jsou volná díla, je nutno takto označit. + K Bibli je pot?eba nastavit autorská práva. Bible, které jsou volná díla, je nutno takto ozna?it. - + Bible Exists Bible existuje - + This Bible already exists. Please import a different Bible or first delete the existing one. - Tato Bible už existuje. Importujte prosím jinou Bibli nebo nejdříve smažte tu existující. + Tato Bible už existuje. Importujte prosím jinou Bibli nebo nejd?íve smažte tu existující. - + Your Bible import failed. CSV soubor - + CSV File Zahajuji registraci Bible... - - Starting Registering bible... - Zahajuji registraci Bible... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Bible zaregistrována. Vezm?te prosím na v?domí, že verše budou stahovány jak bude pot?eba, což vyžaduje p?ipojení k Internetu. - - - + Bibleserver Bibleserver - + Permissions: Povolení: - + Bible file: Soubor s Biblí: - - Testaments file: - Soubor se zákonem: - - - + Books file: Soubor s knihami: - + Verses file: Soubor s verši: - - You have not specified a testaments file. Do you want to proceed with the import? - Nebyl zadán soubor se zákony. Chcete pokračovat s importem? - - - + openlp.org 1.x Bible Files Soubory s Biblemi z openlp.org 1.x + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + Jazyk: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + + BiblesPlugin.MediaItem - + Quick Rychlý - + Find: Hledat: - - Results: - Výsledky: - - - + Book: Kniha: - + Chapter: Kapitola: - + Verse: Verš: - + From: Od: - + To: Do: - + Text Search Hledání textu - - Clear - Vyprázdnit - - - - Keep - Ponechat - - - + Second: Druhý: - + Scripture Reference Odkaz do Bible + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importuji %s %s... @@ -681,267 +745,441 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - Zjištuji kódování (může trvat několik minut)... + Zjištuji kódování (m?že trvat n?kolik minut)... - + Importing %s %s... Importing <book name> <chapter>... Importuji %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Název verze: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Je nutno uvést název verze Bible. + + + + Bible Exists + Bible existuje + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Chyba stahování + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - Vlastní zobrazení + Uživatelské zobrazení - + Display footer - Patička zobrazení + Pati?ka zobrazení CustomPlugin.EditCustomForm - + Edit Custom Slides Upravit vlastní snímky - + &Title: &Název: - + Add a new slide at bottom. - Přidat nový snímek na konec. + P?idat nový snímek na konec. - + Edit the selected slide. Upravit vybraný snímek. - + Edit all the slides at once. Upravit všechny snímky najednou. - - Split Slide - Rozdělit snímek - - - + Split a slide into two by inserting a slide splitter. - Vložením oddělovače se snímek rozdělí na dva. + Vložením odd?lova?e se snímek rozd?lí na dva. - + The&me: &Motiv: - + &Credits: &Zásluhy: - + You need to type in a title. Je nutno zadat název. - + You need to add at least one slide - Je nutno přidat alespoň jeden snímek + Je nutno p?idat alespo? jeden snímek - + Ed&it All Upra&it vše + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - Import vlastního - - - - Load a new Custom - Načíst nový vlastní - - - - Add a new Custom - Přidat nový vlastní - - - - Edit the selected Custom - Upravit vybraný vlastní - - - - Delete the selected Custom - Smazat vybraný vlastní - - - - Preview the selected Custom - Náhled vybraného vlastního - - - - Send the selected Custom live - Vybraný vlastní snímek naživo - - - - Add the selected Custom to the service - Přidat vybraný vlastní ke službě - - - - Custom - name singular - Vlastní - - - - Customs - name plural - Více vlastních - - - - Custom - container title - Vlastní + + General + Obecné ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - + <strong>Modul obrázek</strong><br />Modul obrázek se stará o zobrazování obrázk?.<br />Jedna z charakteristických funkcí tohoto modulu je schopnost ve správci služby seskupit n?kolik obrázk? dohromady. Tato vlastnost zjednodušuje zobrazení více obrázk?. Tento modul také využívá vlastnosti "?asová smy?ka" aplikace OpenLP a je tudíž možno vytvo?it prezentaci obrázk?, která pob?ží samostatn?. Nadto lze využitím obrázk? z modulu p?ekrýt pozadí sou?asného motivu. - - Load a new Image - Načíst nový obrázek - - - - Add a new Image - Přidat nový obrázek - - - - Edit the selected Image - Upravit vybraný obrázek - - - - Delete the selected Image - Smazat vybraný obrázek - - - - Preview the selected Image - Náhled vybraného obrázku - - - - Send the selected Image live - Vybraný obrázek naživo - - - - Add the selected Image to the service - Přidat vybraný obrázek ke službě - - - + Image name singular Obrázek - + Images name plural Obrázky - + Images container title Obrázky + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment - Vybrat přílohu + Vybrat p?ílohu ImagePlugin.MediaItem - + Select Image(s) Vybrat obrázky - + You must select an image to delete. - Pro smazání musíte nejdříve vybrat obrázek. + Pro smazání musíte nejd?íve vybrat obrázek. - + You must select an image to replace the background with. - K nahrazení pozadí musíte nejdříve vybrat obrázek. + K nahrazení pozadí musíte nejd?íve vybrat obrázek. - + Missing Image(s) - Chybějící obrázky + Chyb?jící obrázky - + The following image(s) no longer exist: %s Následující obrázky už neexistují: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Následující obrázky už neexistují: % -Chcete přidat ostatní obrázky? +Chcete p?idat ostatní obrázky? - + There was a problem replacing your background, the image file "%s" no longer exists. Problém s nahrazením pozadí. Obrázek "%s" už neexistuje. @@ -949,98 +1187,98 @@ Chcete přidat ostatní obrázky? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - <strong>Modul média</strong><br />Modul média umožňuje přehrávat audio a video. + <strong>Modul média</strong><br />Modul média umož?uje p?ehrávat audio a video. - - Load a new Media - Načíst nové médium - - - - Add a new Media - Přidat nové médium - - - - Edit the selected Media - Upravit vybrané médium - - - - Delete the selected Media - Smazat vybrané médium - - - - Preview the selected Media - Náhled vybraného média - - - - Send the selected Media live - Vybrané médium naživo - - - - Add the selected Media to the service - Přidat vybrané médium ke službě - - - + Media name singular Médium - + Media name plural Médium - + Media container title - Médium + Média + + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + MediaPlugin.MediaItem - + Select Media Vybrat médium - + You must select a media file to delete. - Ke smazání musíte nejdříve vybrat soubor s médiem. + Ke smazání musíte nejd?íve vybrat soubor s médiem. - + You must select a media file to replace the background with. - K nahrazení pozadí musíte nejdříve vybrat soubor s médiem. + K nahrazení pozadí musíte nejd?íve vybrat soubor s médiem. - + There was a problem replacing your background, the media file "%s" no longer exists. Problém s nahrazením pozadí. Soubor s médiem "%s" už neexistuje. - + Missing Media File - Chybějící soubory s médii + Chyb?jící soubory s médii - + The file %s no longer exists. Soubor %s už neexistuje. - + Videos (%s);;Audio (%s);;%s (*) Video (%s);;Audio (%s);;%s (*) @@ -1048,69 +1286,70 @@ Chcete přidat ostatní obrázky? MediaPlugin.MediaTab - + Media Display Zobrazení médií - + Use Phonon for video playback - Použít Phonon k přehrávání videa + Použít Phonon k p?ehrávání videa OpenLP - + Image Files Soubory s obrázky + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits Zásluhy - + License Licence - + Contribute - Přispět + P?isp?t - + build %s sestavení %s - + 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. - + Tato aplikace je svobodný software. Lze ji libovoln? ší?it a upravovat v souladu s GNU General Public licencí, vydané Free Software Foundation; a to v souladu s verzí 2 této licence. - + 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 below for more details. - + Tato aplikace je ší?ena v nad?ji, že bude užite?ná, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO UR?ITÝ Ú?EL. Další podrobnosti viz níže. - + Project Lead %s @@ -1175,19 +1414,19 @@ Final Credit Vedení projektu %s -Vývojáři +Vývojá?i %s -Přispěvatelé +P?isp?vatelé %s -Testeři +Teste?i %s -Balíčkovači +Balí?kova?i %s -Překladatelé +P?ekladatelé Afrikaans (af) %s German (de) @@ -1216,227 +1455,355 @@ Překladatelé Dokumentace %s -Vytvořeno za použití +Vytvo?eno za použití Python: http://www.python.org/ Qt4: http://qt.nokia.com/ PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro Oxygen Icons: http://oxygen-icons.org/ Finální zásluhy - "Neboť Bůh tak miloval svět, že dal + "Nebo? B?h tak miloval sv?t, že dal svého jednorozeného Syna, aby žádný, - kdo v něj věří, nezahynul, ale měl věčný + kdo v n?j v??í, nezahynul, ale m?l v??ný život." -- Jan 3:16 - V neposlední řadě, konečné zásluhy patří + V neposlední ?ad?, kone?né zásluhy pat?í Bohu, našemu Otci, že poslal Svého Syna - zemřít na kříži, osvobodit nás od hříchu. - Přinášíme tuto aplikaci zdarma, protože - On nás učinil svobodnými. + zem?ít na k?íži, osvobodit nás od h?íchu. + P?inášíme tuto aplikaci zdarma, protože + On nás u?inil svobodnými. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - - - UI Settings - - - - - Number of recent files to display: - - - - - Remember active media manager tab on startup - - - - - Double-click to send items straight to live - - - - - Expand new service items on creation - - - - - Enable application exit confirmation - - - - - Mouse Cursor - - - Hide mouse cursor when over display window - + UI Settings + Nastavení rozhraní + Number of recent files to display: + Po?et zobrazených nedávných soubor?: + + + + Remember active media manager tab on startup + Pamatovat si p?i spušt?ní aktivní kartu správce médií + + + + Double-click to send items straight to live + Dvojklik zobrazí položku p?ímo naživo + + + + Expand new service items on creation + P?i vytvo?ení rozbalit nové položky služby + + + + Enable application exit confirmation + Zapnout potvrzování ukon?ení aplikace + + + + Mouse Cursor + Kurzor myši + + + + Hide mouse cursor when over display window + Skrýt kurzor myši v okn? zobrazení + + + Default Image - + Výchozí obrázek - + Background color: - Barva pozadí: + Barva pozadí: - + Image file: + Soubor s obrázkem: + + + + Open File + Otev?ít soubor + + + + Preview items when clicked in Media Manager + Náhled položek p?i klepnutí ve správci médií + + + + Advanced + Pokro?ilé + + + + Click to select a color. - - Open File + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. OpenLP.DisplayTagDialog - + Edit Selection - + Upravit výb?r - - Update - - - - + Description - - - - - Tag - + Popis + Tag + Zna?ka + + + Start tag - + Za?átek zna?ky - + End tag - + Konec zna?ky - - Default - - - - + Tag Id - + Id zna?ky - + Start HTML - + Za?átek HTML - + End HTML + Konec HTML + + + + Save OpenLP.DisplayTagTab - + Update Error - + Aktualizovat chybu - + Tag "n" already defined. + Zna?ka "n" je už definovaná. + + + + Tag %s already defined. + Zna?ka %s je už definovaná. + + + + New Tag - - Tag %s already defined. + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + Tu?né + + + + Italics + + + + + Underline + + + + + Break OpenLP.ExceptionDialog - + Error Occurred - + Vznikla chyba - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Jejda! V aplikaci OpenLP vznikl problém, ze kterého není možné se zotavit. Text v polícku níže obsahuje informace, které mohou být užite?né pro vývojá?e aplikace OpenLP. Zašlete je prosím spolu s podrobným popisem toho, co jste d?lal, když problém vzniknul, na adresu bugs@openlp.org. - + Send E-Mail - + Poslat e-mail - + Save to File - + Uložit do souboru - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Zadejte prosím popis toho, co jste provád?l, když vznikla tato chyba +(Minimáln? 20 znak?) - + Attach File - + P?iložit soubor - + Description characters to enter : %s - + Znaky popisu pro vložení : %s OpenLP.ExceptionForm - + Platform: %s - + Platforma: %s + - + Save Crash Report - + Uložit hlášení o pádu - + Text files (*.txt *.log *.text) - + Textové soubory (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1451,10 +1818,23 @@ Version: %s --- Library Versions --- %s - + **OpenLP Bug Report** +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + - + *OpenLP Bug Report* Version: %s @@ -1470,1402 +1850,1503 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *OpenLP Bug Report* +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + OpenLP.FileRenameForm - + File Rename - + P?ejmenovat soubor - + New File Name: - + Nový název souboru: - + File Copy - + Kopírovat soubor OpenLP.FirstTimeLanguageForm - + Select Translation - + Vybrat p?eklad - + Choose the translation you'd like to use in OpenLP. - + Vyberte p?eklad, který bude používat aplikace OpenLP. - + Translation: - + P?eklad: OpenLP.FirstTimeWizard - + Songs - - - - - First Time Wizard - - - - - Welcome to the First Time Wizard - - - - - Activate required Plugins - - - - - Select the Plugins you wish to use. - - - - - Custom Text - - - - - Bible - Bible - - - - Images - Obrázky - - - - Presentations - - - - - Media (Audio and Video) - - - - - Allow remote access - - - - - Monitor Song Usage - - - - - Allow Alerts - - - - - Default Settings - - - - - Downloading %s... - - - - - Download complete. Click the finish button to start OpenLP. - - - - - Enabling selected plugins... - + Písn? - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - + First Time Wizard + Pr?vodce prvním spušt?ní - - No Internet Connection - + + Welcome to the First Time Wizard + Vítejte v pr?vodci prvním spušt?ní - - Unable to detect an Internet connection. - + + Activate required Plugins + Zapnout požadované moduly + + + + Select the Plugins you wish to use. + Vyberte moduly, které chcete používat. + + + + Custom Text + Vlastní text + + + + Bible + Bible + + + + Images + Obrázky + + + + Presentations + Prezentace + + + + Media (Audio and Video) + Média (audio a video) + + + + Allow remote access + Povolit vzdálený p?ístup + + + + Monitor Song Usage + Sledovat užívání písní + Allow Alerts + Povolit upozorn?ní + + + + Default Settings + Výchozí nastavení + + + + Downloading %s... + Stahuji %s... + + + + Download complete. Click the finish button to start OpenLP. + Stahování dokon?eno. Klepnutím na tla?ítko konec se spustí aplikace OpenLP. + + + + Enabling selected plugins... + Zapínám vybrané moduly... + + + + No Internet Connection + Žádné p?ipojení k Internetu + + + + Unable to detect an Internet connection. + Nezda?ila se detekce internetového p?ipojení. + + + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - + Žádné p?ipojení k Internetu nenalezeno. Pr?vodce prvním spušt?ní pot?ebuje internetové p?ipojení pro stahování ukázek písní, Biblí a motiv?. + +Pro pozd?jší op?tovné spušt?ní Pr?vodce prvním spušt?ní a importu ukázkových dat klepn?te na tla?ítko Zrušit, prov??te internetové p?ipojení a restartujte aplikaci OpenLP. + +Pro úplné zrušení Pr?vodce prvním spušt?ní klepn?te nyní na tla?ítko Dokon?it. - + Sample Songs - + Ukázky písní - + Select and download public domain songs. - + Vybrat a stáhnout písn? s nechrán?nými autorskými právy. - + Sample Bibles - + Ukázky Biblí - + Select and download free Bibles. - + Vybrat a stáhnout voln? dostupné Bible. - + Sample Themes - + Ukázky motiv? - + Select and download sample themes. - + Vybrat a stáhnout ukázky motiv?. - + Set up default settings to be used by OpenLP. - + Nastavit výchozí nastavení pro aplikaci OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Výchozí výstup zobrazit na: - + Select default theme: + Vybrat výchozí motiv: + + + + Starting configuration process... + Spouštím pr?b?h nastavení... + + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. - - Starting configuration process... + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. OpenLP.GeneralTab - + General - + Obecné + + + + Monitors + Monitory + + + + Select monitor for output display: + Vybrat monitor pro výstupní zobrazení: + + + + Display if a single screen + Zobrazení p?i jedné obrazovce - Monitors - + Application Startup + Spušt?ní aplikace - Select monitor for output display: - + Show blank screen warning + Zobrazit varování p?i prázdné obrazovce - Display if a single screen - + Automatically open the last service + Automaticky otev?ít poslední službu - Application Startup - - - - - Show blank screen warning - + Show the splash screen + Zobrazit úvodní obrazovku - Automatically open the last service - + Application Settings + Nastavení aplikace - Show the splash screen - + Prompt to save before starting a new service + P?ed spušt?ním nové služby se ptát na uložení - Application Settings - + Automatically preview next item in service + Automatický náhled další položky ve služb? + + + + sec + sek + + + + CCLI Details + CCLI podrobnosti + + + + SongSelect username: + SongSelect uživatelské jméno: + + + + SongSelect password: + SongSelect heslo: + + + + Display Position + Umíst?ní zobrazení + + + + X + X + + + + Y + Y + + + + Height + Výška + + + + Width + Ší?ka + + + + Override display position + P?ekrýt umíst?ní zobrazení + + + + Check for updates to OpenLP + Kontrola aktualizací aplikace OpenLP + + + + Unblank display when adding new live item + Odkrýt zobrazení p?i p?idání nové položky naživo - Prompt to save before starting a new service + Enable slide wrap-around - Automatically preview next item in service - - - - - Slide loop delay: - - - - - sec - - - - - CCLI Details - - - - - SongSelect username: - - - - - SongSelect password: - - - - - Display Position - - - - - X - - - - - Y - - - - - Height - - - - - Width - - - - - Override display position - - - - - Check for updates to OpenLP + Timed slide interval: OpenLP.LanguageManager - + Language - + Jazyk - + Please restart OpenLP to use your new language setting. - + Zm?ny nastavení jazyka se projeví restartováním aplikace OpenLP. OpenLP.MainDisplay - + OpenLP Display - + Zobrazení OpenLP OpenLP.MainWindow - + &File - - - - - &Import - - - - - &Export - - - - - &View - - - - - M&ode - - - - - &Tools - - - - - &Settings - - - - - &Language - - - - - &Help - - - - - Media Manager - - - - - Service Manager - + &Soubor - Theme Manager - + &Import + &Import + + + + &Export + &Export - &New - &Nový + &View + &Zobrazit + + + + M&ode + &Režim + + + + &Tools + &Nástroje - Ctrl+N - + &Settings + &Nastavení - - &Open - + + &Language + &Jazyk - Open an existing service. - + &Help + &Nápov?da - - Ctrl+O - + + Media Manager + Správce médií - &Save - &Uložit + Service Manager + Správce služby - Save the current service to disk. - + Theme Manager + Správce motiv? - Ctrl+S - - - - - Save &As... - + &New + &Nový - Save Service As - + &Open + &Otev?ít - Save the current service under a new name. - + Open an existing service. + Otev?ít existující službu. - Ctrl+Shift+S - + &Save + &Uložit - + + Save the current service to disk. + Uložit sou?asnou službu na disk. + + + + Save &As... + Uložit &jako... + + + + Save Service As + Uložit službu jako + + + + Save the current service under a new name. + Uložit sou?asnou službu s novým názvem. + + + E&xit - + U&kon?it - + Quit OpenLP - + Ukon?it OpenLP - - Alt+F4 - - - - + &Theme - - - - - &Configure OpenLP... - - - - - &Media Manager - + &Motiv - Toggle Media Manager - + &Configure OpenLP... + &Nastavit OpenLP... - Toggle the visibility of the media manager. - + &Media Manager + Správce &médií - F8 - + Toggle Media Manager + P?epnout správce médií - &Theme Manager - + Toggle the visibility of the media manager. + P?epnout viditelnost správce médií. - Toggle Theme Manager - + &Theme Manager + Správce &motiv? - Toggle the visibility of the theme manager. - + Toggle Theme Manager + P?epnout správce motiv? - F10 - + Toggle the visibility of the theme manager. + P?epnout viditelnost správce motiv?. &Service Manager - + Správce &služby Toggle Service Manager - + P?epnout správce služby Toggle the visibility of the service manager. - + P?epnout viditelnost správce služby. - F9 - + &Preview Panel + Panel &náhledu - &Preview Panel - + Toggle Preview Panel + P?epnout panel náhledu - Toggle Preview Panel - + Toggle the visibility of the preview panel. + P?epnout viditelnost panelu náhled. - Toggle the visibility of the preview panel. - + &Live Panel + Panel na&živo - F11 - + Toggle Live Panel + P?epnout panel naživo - &Live Panel - + Toggle the visibility of the live panel. + P?epnout viditelnost panelu naživo. - Toggle Live Panel - + &Plugin List + Seznam &modul? - Toggle the visibility of the live panel. - + List the Plugins + Vypsat moduly - F12 - + &User Guide + &Uživatelská p?íru?ka - &Plugin List - - - - - List the Plugins - - - - - Alt+F7 - - - - - &User Guide - - - - &About - + &O aplikaci - + More information about OpenLP - + Více informací o aplikaci OpenLP - - Ctrl+F1 - + + &Online Help + &Online nápov?da + + + + &Web Site + &Webová stránka - &Online Help - - - - - &Web Site - - - - Use the system language, if available. - + Použít jazyk systému, pokud je dostupný. - + Set the interface language to %s - + Jazyk rozhraní nastaven na %s + + + + Add &Tool... + P?idat &nástroj... + + + + Add an application to the list of tools. + P?idat aplikaci do seznamu nástroj?. - Add &Tool... - + &Default + &Výchozí - Add an application to the list of tools. - - - - - &Default - - - - Set the view mode back to the default. - - - - - &Setup - - - - - Set the view mode to Setup. - - - - - &Live - - - - - Set the view mode to Live. - - - - - Version %s of OpenLP is now available for download (you are currently running version %s). - -You can download the latest version from http://openlp.org/. - - - - - OpenLP Version Updated - - - - - OpenLP Main Display Blanked - - - - - The Main Display has been blanked out - - - - - Default Theme: %s - - - - - English - Please add the name of your language here - - - - - Configure &Shortcuts... - - - - - Close OpenLP - - - - - Are you sure you want to close OpenLP? - - - - - Print the current Service Order. - - - - - Ctrl+P - - - - - &Configure Display Tags - + Nastavit režim zobrazení zp?t na výchozí. + &Setup + &Nastavení + + + + Set the view mode to Setup. + Nastavit režim zobrazení na Nastavení. + + + + &Live + &Naživo + + + + Set the view mode to Live. + Nastavit režim zobrazení na Naživo. + + + + Version %s of OpenLP is now available for download (you are currently running version %s). + +You can download the latest version from http://openlp.org/. + Ke stažení je dostupná verze %s aplikace OpenLP (v sou?asné dob? používáte verzi %s). + +Nejnov?jší verzi lze stáhnout z http://openlp.org/. + + + + OpenLP Version Updated + Verze OpenLP aktualizována + + + + OpenLP Main Display Blanked + Hlavní zobrazení OpenLP je prázdné + + + + The Main Display has been blanked out + Hlavní zobrazení nastaveno na prázdný snímek + + + + Default Theme: %s + Výchozí motiv: %s + + + + English + Please add the name of your language here + Angli?tina + + + + Configure &Shortcuts... + Nastavit &Zkratky + + + + Close OpenLP + Zav?ít OpenLP + + + + Are you sure you want to close OpenLP? + Chcete opravdu zav?ít aplikaci OpenLP? + + + + &Configure Display Tags + &Nastavit zna?ky zobrazení + + + Open &Data Folder... - + Otev?ít složku s &daty... - + Open the folder where songs, bibles and other data resides. + Otev?ít složku, kde se nachází písn?, Bible a ostatní data. + + + + &Autodetect + &Automaticky detekovat + + + + Update Theme Images - - &Autodetect + + Update the preview images for all themes. + + + + + Print the current service. OpenLP.MediaManagerItem - + No Items Selected - + Nevybraná zádná položka &Add to selected Service Item - + &P?idat k vybrané Položce Služby - + You must select one or more items to preview. - + Pro náhled je t?eba vybrat jednu nebo více položek. - + You must select one or more items to send live. - + Pro zobrazení naživo je pot?eba vybrat jednu nebo více položek. - + You must select one or more items. - + Je t?eba vybrat jednu nebo více položek. - + You must select an existing service item to add to. - + K p?idání Je t?eba vybrat existující položku služby. - + Invalid Service Item + Neplatná Položka služby + + + + You must select a %s service item. + Je t?eba vybrat %s položku služby. + + + + You must select one or more items to add. - - You must select a %s service item. + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list OpenLP.PluginForm - + Plugin List - + Seznam modul? - + Plugin Details - + Podrobnosti k modulu - + Status: - + Stav: - + Active - + Aktivní - + Inactive - + Neaktivní - + %s (Inactive) - + %s (Neaktivní) - + %s (Active) - + &s (Aktivní) - + %s (Disabled) - + %s (Vypnuto) OpenLP.PrintServiceDialog - + Fit Page - + P?izp?sobit stránce - + Fit Width - + P?izp?sobit ší?ce OpenLP.PrintServiceForm - + Options - + Možnosti Close - + Zav?ít Copy - + Kopírovat Copy as HTML - + Kopírovat jako HTML - + Zoom In - + Zv?tšit - + Zoom Out - + Zmenšit - + Zoom Original - + P?vodní velikost - + Other Options - + Ostatní možnosti - + Include slide text if available - + Zahrnout text snímku, pokud je k dispozici - + Include service item notes - + Zahrnout poznámky položky služby - + Include play length of media items + Zahrnout délku p?ehrávání mediálních položek + + + + Add page break before each text item - - Service Order Sheet + + Service Sheet OpenLP.ScreenList - + Screen - + Obrazovka - + primary - + Primární OpenLP.ServiceItemEditForm - + Reorder Service Item - + Zm?nit po?adí Položky služby OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + P?esun &nahoru - + Move item to the top of the service. - + P?esun položky ve služb? úpln? nahoru. - + Move &up - + P?esun &výše - + Move item up one position in the service. - + P?esun položky ve služb? o jednu pozici výše. - + Move &down - + P?esun &níže - + Move item down one position in the service. - + P?esun položky ve služb? o jednu pozici níže. - + Move to &bottom - + P?esun &dolu - + Move item to the end of the service. - + P?esun položky ve služb? úpln? dol?. - + &Delete From Service - + &Smazat ze služby - + Delete the selected item from the service. - + Smazat vybranou položku ze služby. - + &Add New Item - + &P?idat novou položku - + &Add to Selected Item - + &P?idat k vybrané položce - + &Edit Item - + &Upravit položku - + &Reorder Item - + &Zm?nit po?adí položky - + &Notes - + &Poznámky - + &Change Item Theme - + &Zm?nit motiv položky - + OpenLP Service Files (*.osz) - - - - - File is not a valid service. -The content encoding is not UTF-8. - + Soubory služby OpenLP (*.osz) + File is not a valid service. +The content encoding is not UTF-8. + Soubor není platná služba. +Obsah souboru není v kódování UTF-8. + + + File is not a valid service. - + Soubor není platná služba. - + Missing Display Handler - + Chyb?jící obsluha zobrazení - + Your item cannot be displayed as there is no handler to display it - + Položku není možno zobrazit, protože chybí obsluha pro její zobrazení - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + Položku není možno zobrazit, protože modul pot?ebný pro zobrazení položky chybí nebo je neaktivní - + &Expand all - + &Rozvinou vše - + Expand all the service items. - + Rozvinout všechny položky služby. - + &Collapse all - + &Svinout vše - + Collapse all the service items. - + Svinout všechny položky služby. - + Open File - + Otev?ít soubor - - Notes: - - - - + Moves the selection down the window. - + P?esune výb?r v rámci okna dolu. - + Move up - + P?esun nahoru - + Moves the selection up the window. - + P?esune výb?r v rámci okna nahoru. - + Go Live - + Zobrazit naživo - + Send the selected item to Live. - + Zobrazí vybranou položku naživo. - + &Start Time - + &Spustit ?as - + Show &Preview - + Zobrazit &náhled - + Show &Live - + Zobrazit n&aživo - + Modified Service + Zm?n?ná služba + + + + The current service has been modified. Would you like to save this service? + Sou?asná služba byla zm?n?na. P?ejete si službu uložit? + + + + File could not be opened because it is corrupt. + Soubor se nepoda?ilo otev?ít, protože je poškozený. + + + + Empty File + Prázdný soubor + + + + This service file does not contain any data. + Tento soubor služby neobsahuje žádná data. + + + + Corrupt File + Poškozený soubor + + + + Custom Service Notes: - - The current service has been modified. Would you like to save this service? + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. OpenLP.ServiceNoteForm - + Service Item Notes - + Poznámky položky služby OpenLP.SettingsForm - + Configure OpenLP - + Nastavit OpenLP OpenLP.ShortcutListDialog - + Customize Shortcuts - + P?izp?sobit zkratky - + Action - + ?innost - + Shortcut - + Zkratka - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + Duplikovat zkratku - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Zkratka "%s" je už p?i?azena jiné ?innosti. Použijte prosím jinou zkratku. - + Alternate - + Alternativa + + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Zadání nové hlavní nebo alternativní zkratky se spustí vybráním ?innosti a klepnutím na jedno z tla?ítek níže. + + + + Default + Výchozí + + + + Custom + Uživatelský + + + + Capture shortcut. + Zachytit zkratku. + + + + Restore the default shortcut of this action. + Obnovit výchozí zkratku ?innosti. + + + + Restore Default Shortcuts + Obnovit výchozí zkratku + + + + Do you want to restore all shortcuts to their defaults? + Chcete obnovit všechny zkratky na jejich výchozí hodnoty? OpenLP.SlideController - - Move to previous - - - - - Move to next - - - - + Hide - + Skrýt - - Move to live - - - - - Edit and reload song preview - - - - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Start playing media - - - - + Go To - + P?ejít na - + Blank Screen - + Prázdná obrazovka - + Blank to Theme - + Prázdný motiv - + Show Desktop - + Zobrazit plochu - + Previous Slide - + P?edchozí snímek - + Next Slide - + Následující snímek - + Previous Service - + P?edchozí služba - + Next Service + Následující služba + + + + Escape Item + Zrušit položku + + + + Move to previous. - - Escape Item + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. OpenLP.SpellTextEdit - + Spelling Suggestions - + Návrhy pravopisu - + Formatting Tags - + Formátovací zna?ky + + + + Language: + Jazyk: OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - + Hodiny: - - h - - - - - m - - - - + Minutes: + Minuty: + + + + Seconds: + Sekundy: + + + + Item Start and Finish Time + ?as za?átku a konce položky + + + + Start + Za?átek + + + + Finish + Konec + + + + Length + Délka + + + + Time Validation Error + Chyba p?i ov??ení ?asu + + + + Finish time is set after the end of the media item - - Seconds: + + Start time is after the finish time of the media item OpenLP.ThemeForm - + Select Image - + Vybrat obrázek - + Theme Name Missing - + Chybí název motivu - + There is no name for this theme. Please enter one. - + Není vypln?n název motivu. Prosím zadejte ho. - + Theme Name Invalid - + Neplatný název motivu - + Invalid theme name. Please enter one. - + Neplatný název motivu. Prosím zadejte nový. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2874,896 +3355,1004 @@ The content encoding is not UTF-8. Create a new theme. - + Vytvo?í nový motiv. Edit Theme - + Upravit motiv Edit a theme. - + Upraví motiv. Delete Theme - + Smazat motiv Delete a theme. - + Smaže motiv. Import Theme - + Import motivu Import a theme. - + Importuje motiv. Export Theme - + Export motivu Export a theme. - + Exportuje motiv. &Edit Theme - + &Upravit motiv &Delete Theme - + &Smazat motiv Set As &Global Default - + Nastavit jako &Globální výchozí - + %s (default) - + %s (výchozí) - + You must select a theme to edit. - + Pro úpravy je t?eba vybrat motiv. - + You are unable to delete the default theme. - + Není možno smazat výchozí motiv. - + Theme %s is used in the %s plugin. - - - - - You have not selected a theme. - + Motiv %s je používán v modulu %s. + You have not selected a theme. + Není vybrán žádný motiv. + + + Save Theme - (%s) - + Uložit motiv - (%s) - + Theme Exported - + Motiv exportován - + Your theme has been successfully exported. - + Motiv byl úsp?šn? exportován. - + Theme Export Failed - + Export motivu selhal - + Your theme could not be exported due to an error. - + Kv?li chyb? nebylo možno motiv exportovat. - + Select Theme Import File - + Vybrat soubor k importu motivu - + File is not a valid theme. The content encoding is not UTF-8. - + Soubor není platný motiv. +Obsah souboru není v kódování UTF-8. - + File is not a valid theme. - + Soubor není platný motiv. &Copy Theme - + &Kopírovat motiv &Rename Theme - + &P?ejmenovat motiv &Export Theme - + &Export motivu - + You must select a theme to rename. - + K p?ejmenování je t?eba vybrat motiv. - + Rename Confirmation - + Potvrzení p?ejmenování - + Rename %s theme? - + P?ejmenovat motiv %s? - + You must select a theme to delete. - + Pro smazání je t?eba vybrat motiv. - + Delete Confirmation - + Potvrzení smazání - + Delete %s theme? - + Smazat motiv %s? - + Validation Error - + Chyba ov??ování - + A theme with this name already exists. - + Motiv s tímto názvem již existuje. - + OpenLP Themes (*.theme *.otz) - + OpenLP motivy (*.theme *.otz) OpenLP.ThemeWizard - + Theme Wizard - + Pr?vodce motivem - + Welcome to the Theme Wizard - + Vítejte v pr?vodci motivem - + Set Up Background - + Nastavení pozadí - + Set up your theme's background according to the parameters below. - + Podle parametr? níže nastavte pozadí motivu. - + Background type: - + Typ pozadí: - + Solid Color - + Plná barva - + Gradient - - - - - Color: - - - - - Gradient: - - - - - Horizontal - - - - - Vertical - - - - - Circular - - - - - Top Left - Bottom Right - - - - - Bottom Left - Top Right - - - - - Main Area Font Details - - - - - Define the font and display characteristics for the Display text - - - - - Font: - + P?echod + Color: + Barva: + + + + Gradient: + P?echod: + + + + Horizontal + Vodorovný + + + + Vertical + Svislý + + + + Circular + Kruhový + + + + Top Left - Bottom Right + Vlevo naho?e - vpravo dole + + + + Bottom Left - Top Right + Vlevo dole - vpravo naho?e + + + + Main Area Font Details + Podrobnosti písma hlavní oblasti + + + + Define the font and display characteristics for the Display text + Definovat písmo a charakteristiku zobrazení pro zobrazený text + + + + Font: + Písmo: + + + Size: - + Velikost: - + Line Spacing: - + ?ádkování: - + &Outline: - + &Obrys: - + &Shadow: - - - - - Bold - + &Stín: + Bold + Tu?né + + + Italic - + Kurzíva - + Footer Area Font Details - + Podrobnosti písma oblasti zápatí - + Define the font and display characteristics for the Footer text - + Definovat písmo a charakteristiku zobrazení pro text zápatí - + Text Formatting Details - + Podrobnosti formátování textu - + Allows additional display formatting information to be defined - + Dovoluje definovat další formátovací informace zobrazení - + Horizontal Align: - + Vodorovné zarovnání: - + Left - + Vlevo - + Right - + Vpravo - + Center - + Na st?ed - + Output Area Locations - + Umíst?ní výstupní oblasti - + Allows you to change and move the main and footer areas. - + Dovoluje zm?nit a p?esunout hlavní oblast a oblast zápatí. - + &Main Area - + &Hlavní oblast - + &Use default location - + &Použít výchozí umíst?ní - + X position: - + Pozice X: - + px - + px - + Y position: - + Pozice Y: - + Width: - + Ší?ka: - + Height: - + Výška: - + Use default location - + Použít výchozí umíst?ní - + Save and Preview - + Uložit a náhled - + View the theme and save it replacing the current one or change the name to create a new theme - + Zobrazit motiv a uložit ho, dojde k p?epsání sou?asného nebo zm??te název, aby se vytvo?il nový motiv - + Theme name: - + Název motivu: - + Edit Theme - %s - + Upravit motiv - %s - + 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. - + Tento pr?vodce pomáhá s vytvo?ením a úpravou vašich motivu. Klepn?te níže na tla?ítko další pro spušt?ní procesu nastavení vašeho pozadí. - + Transitions: - + P?echody: - + &Footer Area - + Oblast &zápatí OpenLP.ThemesTab - + Global Theme - + Globální motiv - + Theme Level - + Úrove? motivu - + S&ong Level - + Úrove? &písn? - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + Použít motiv z každé písn? z databáze. Pokud píse? nemá p?i?azen motiv, potom se použije motiv služby. Pokud služba nemá motiv, pak se použije globální motiv. - + &Service Level - + Úrove? &služby - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + Použitím motivu ze služby se p?ekryje motiv jednotlivých písní. Pokud služba nemá motiv, tak se použije globální motiv. - + &Global Level - + &Globální úrove? - + Use the global theme, overriding any themes associated with either the service or the songs. - + Použitím globálního motivu se p?ekryjí motivy, které jsou p?i?azeny službám nebo písním. OpenLP.Ui - + Error - + Chyba - + About - - - - - &Add - - - - - Advanced - - - - - All Files - - - - - Bottom - - - - - Browse... - - - - - Cancel - - - - - CCLI number: - - - - - Create a new service. - - - - - &Delete - - - - - &Edit - - - - - Empty Field - - - - - Export - - - - - pt - Abbreviated font pointsize unit - + O aplikaci + &Add + &P?idat + + + + Advanced + Pokro?ilé + + + + All Files + Všechny soubory + + + + Bottom + Dole + + + + Browse... + Procházet... + + + + Cancel + Zrušit + + + + CCLI number: + CCLI ?íslo: + + + + Create a new service. + Vytvo?it novou službu. + + + + &Delete + &Smazat + + + + &Edit + &Upravit + + + + Empty Field + Prázdné pole + + + + Export + Export + + + + pt + Abbreviated font pointsize unit + pt + + + Image Obrázek - - - Import - - - - - Length %s - - - - - Live - - - - - Live Background Error - - - - - Live Panel - - - - - Load - - - - - Middle - - - - - New - - - - - New Service - - - - - New Theme - - - - - No File Selected - Singular - - - - - No Files Selected - Plural - - - - - No Item Selected - Singular - - - - - No Items Selected - Plural - - - - - openlp.org 1.x - - - - - OpenLP 2.0 - - - - - Open Service - - - - - Preview - - - - - Preview Panel - - - - - Print Service Order - - - - - Replace Background - - - - - Replace Live Background - - - - - Reset Background - - - Reset Live Background - - - - - s - The abbreviated unit for seconds - + Import + Import - Save && Preview - + Length %s + Délka %s - Search - + Live + Naživo - You must select an item to delete. - - - - - You must select an item to edit. - + Live Background Error + Chyba v pozadí naživo - Save Service - - - - - Service - - - - - Start %s - + Load + Na?íst - Theme - Singular - + Middle + Uprost?ed - Themes - Plural - + New + Nový - Top - + New Service + Nová služba + New Theme + Nový motiv + + + + No File Selected + Singular + Nevybrán žádný soubor + + + + No Files Selected + Plural + Nevybrány žádné soubory + + + + No Item Selected + Singular + Nevybrána žádná položka + + + + No Items Selected + Plural + Nevybrány žádné položky + + + + openlp.org 1.x + openlp.org 1.x + + + + OpenLP 2.0 + OpenLP 2.0 + + + + Preview + Náhled + + + + Replace Background + Nahradit pozadí + + + + Reset Background + Obnovit pozadí + + + + s + The abbreviated unit for seconds + s + + + + Save && Preview + Uložit a náhled + + + + Search + Hledat + + + + You must select an item to delete. + Je t?eba vybrat n?jakou položku ke smazání. + + + + You must select an item to edit. + Je t?eba vybrat n?jakou položku k úpravám. + + + + Save Service + Uložit službu + + + + Service + Služba + + + + Start %s + Spustit %s + + + + Theme + Singular + Motiv + + + + Themes + Plural + Motivy + + + + Top + Naho?e + + + Version - + Verze - + Delete the selected item. - + Smazat vybranou položku. - + Move selection up one position. - + P?esun výb?ru o jednu pozici výše. - + Move selection down one position. - + P?esun výb?ru o jednu pozici níže. - + &Vertical Align: - - - - - Finished import. - + &Svislé zarovnání: - Format: - + Finished import. + Import dokon?en. - - Importing - + + Format: + Formát: - Importing "%s"... - + Importing + Importuji - Select Import Source - + Importing "%s"... + Importuji "%s"... + Select Import Source + Vybrat zdroj importu + + + Select the import format and the location to import from. - + Vyberte formát importu a umíst?ní, ze kterého se má importovat. - + The openlp.org 1.x 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. - - - - - Open %s File - + Import dat z openlp.org 1.x je vypnuté kv?li chyb?jícímu Python modulu. Pokud chcete využít tohoto importu dat, je t?eba nainstallovat modul "python-sqlite". - %p% - + Open %s File + Otev?ít soubor %s + %p% + %p% + + + Ready. - + P?ipraven. - + Starting import... - + Spouštím import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Je t?eba specifikovat alespo? jeden %s soubor, ze kterého se bude importovat. - + Welcome to the Bible Import Wizard - + Vítejte v pr?vodci importu Bible - + Welcome to the Song Export Wizard - + Vítejte v pr?vodci exportu písní - + Welcome to the Song Import Wizard - - - - - Author - Singular - + Vítejte v pr?vodci importu písní - Authors - Plural - + Author + Singular + Autor - - © - Copyright symbol. - + + Authors + Plural + Auto?i - Song Book - Singular - + © + Copyright symbol. + © - Song Books - Plural - + Song Book + Singular + Zp?vník - Song Maintenance - - - - - Topic - Singular - + Song Books + Plural + Zp?vníky + Song Maintenance + Údržba písní + + + + Topic + Singular + Téma + + + Topics Plural + Témata + + + + Continuous + Spojitý + + + + Default + Výchozí + + + + Display style: + Styl zobrazení: + + + + File + Soubor + + + + Help + Nápov?da + + + + h + The abbreviated unit for hours + hod + + + + Layout style: + Styl rozvržení: + + + + Live Toolbar + Nástrojová lišta naživo + + + + m + The abbreviated unit for minutes + min + + + + OpenLP is already running. Do you wish to continue? + Aplikace OpenLP je už spušt?na. P?ejete si pokra?ovat? + + + + Settings + Nastavení + + + + Tools + Nástroje + + + + Verse Per Slide + Verš na jeden snímek + + + + Verse Per Line + Verš na jeden ?ádek + + + + View + Zobrazit + + + + Duplicate Error + + + + + Unsupported File + Nepodporovaný soubor + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. OpenLP.displayTagDialog - + Configure Display Tags - + Nastavit zna?ky zobrazení @@ -3771,1223 +4360,1385 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - + <strong>Modul prezentace</strong><br />Modul prezentace dovoluje zobrazovat prezentace z n?kolika r?zných program?. Výb?r dostupných prezenta?ních program? je uživateli p?ístupný v rozbalovacím menu. Presentation name singular - + Prezentace Presentations name plural - + Prezentace Presentations container title + Prezentace + + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. PresentationPlugin.MediaItem - + Select Presentation(s) - + Vybrat prezentace - + Automatic - + Automaticky - + Present using: - + Nyní používající: - + File Exists - + Soubor existuje - + A presentation with that filename already exists. - + Prezentace s tímto názvem souboru už existuje. - - Unsupported File - - - - + This type of presentation is not supported. - + Tento typ prezentace není podporován. - + Presentations (%s) - + Prezentace (%s) - + Missing Presentation - + Chyb?jící prezentace - + The Presentation %s no longer exists. - + Prezentace %s už neexistuje. - + The Presentation %s is incomplete, please reload. - + Prezentace %s není kompletní, prosím na?t?te ji znovu. PresentationPlugin.PresentationTab - + Available Controllers - + Dostupné ovládání - + Allow presentation application to be overriden - + Povolit p?ekrytí prezenta?ní aplikace. - + %s (unavailable) - + %s (nedostupný) RemotePlugin - + <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. - - - - - Remote - name singular - + <strong>Modul dálkové ovládání</strong><br />Modul dálkové ovládání poskytuje schopnost zasílat zprávy aplikaci OpenLP b?žící na jiném po?íta?i. Zprávy je možno posílat internetovým prohlíže?em nebo vzdáleným API. + Remote + name singular + Dálkové ovládání + + + Remotes name plural + Dálková ovládání + + + + Remote + container title + Dálkové ovládání + + + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote - - Remote - container title + + OpenLP 2.0 Stage View + + + Service Manager + Správce služby + + + + Slide Controller + + + + + Alerts + + + + + Search + Hledat + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + Zobrazit naživo + + + + Add To Service + + + + + No Results + + + + + Options + Možnosti + RemotePlugin.RemoteTab - + Serve on IP address: - + Poslouchat na IP adresse: - + Port number: + ?íslo portu: + + + + Server Settings + Nastavení serveru + + + + Remote URL: - - Server Settings + + Stage view URL: SongUsagePlugin - + &Song Usage Tracking - + Sledování použití &písní - + &Delete Tracking Data - + &Smazat data sledování - + Delete song usage data up to a specified date. - - - - - &Extract Tracking Data - + Smazat data použití písní až ke konkrétnímu kalendá?nímu datu. + &Extract Tracking Data + &Rozbalit data sledování + + + Generate a report on song usage. - + Vytvo?it hlášení z používání písní. Toggle Tracking - + P?epnout sledování Toggle the tracking of song usage. - + P?epnout sledování použití písní. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - - - SongUsage - name singular - - - - - SongUsage - name plural - + <strong>Modul používání písní</strong><br />Tento modul sleduje používání písní ve službách. SongUsage + name singular + Používání písní + + + + SongUsage + name plural + Používání písní + + + + SongUsage container title - + Používání písní + + + + Song Usage + Používání písní SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Smazat data používání písní - + Delete Selected Song Usage Events? - + Smazat události vybraného používání písní? - + Are you sure you want to delete selected Song Usage data? - + Jste si jist, že chcete smazat vybraná data o používání písní? - + Deletion Successful - + Smazání úsp?šné - + All requested data has been deleted successfully. - + Všechny požadovaná data byla úsp?šn? smazána. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Rozbalení používání písní - + Select Date Range - + Vybrat rozsah datumu - + to - + do - + Report Location - + Umíst?ní hlášení - + Output File Location - + Umíst?ní výstupního souboru - + usage_detail_%s_%s.txt - + usage_detail_%s_%s.txt - + Report Creation - + Vytvo?ení hlášení - + Report %s has been successfully created. - + Hlášení +%s +bylo úsp?šn? vytvo?eno. - + Output Path Not Selected - + Nevybrána výstupní cesta - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. - + Platné výstupní umíst?ní pro hlášení používání písní není nastaveno. Prosím vyberte existující cestu ve vašem po?íta?i. SongsPlugin - + &Song - + &Píse? - + Import songs using the import wizard. - + Import písní pr?vodcem importu. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + <strong>Modul písn?</strong><br />Modul písn? umož?uje zobrazovat a spravovat písn?. - + &Re-index Songs - + &P?eindexovat písn? - + Re-index the songs database to improve searching and ordering. - + P?eindexovat písn? v databázi pro vylepšení hledání a ?azení. - + Reindexing songs... - + P?eindexovávám písn?... - - Add a new Song - + + Arabic (CP-1256) + Arabština (CP-1256) + + + + Baltic (CP-1257) + Baltské jazyky (CP-1257) + + + + Central European (CP-1250) + St?edoevropské jazyky (CP-1250) + + + + Cyrillic (CP-1251) + Cyrilice (CP-1251) + + + + Greek (CP-1253) + ?e?tina (CP-1253) + + + + Hebrew (CP-1255) + Hebrejština (CP-1255) + + + + Japanese (CP-932) + Japonština (CP-932) + + + + Korean (CP-949) + Korejština (CP-949) + + + + Simplified Chinese (CP-936) + Zjednodušená ?ínština (CP-936) + + + + Thai (CP-874) + Thajština (CP-874) + + + + Traditional Chinese (CP-950) + Tradi?ní ?ínština (CP-950) + + + + Turkish (CP-1254) + Ture?tina (CP-1254) + + + + Vietnam (CP-1258) + Vietnamština (CP-1258) + + + + Western European (CP-1252) + Západoevropské jazyky (CP-1252) + + + + Character Encoding + Kódování znak? + + + + The codepage setting is responsible +for the correct character representation. +Usually you are fine with the preselected choice. + Nastavení kódové stránky zodpovídá +za správnou reprezentaci znak?. +P?edvybraná volba by obvykle m?la být správná. + + + + Please choose the character encoding. +The encoding is responsible for the correct character representation. + Vyberte prosím kódování znak?. +Kódování zodpovídá za správnou reprezentaci znak?. + + + + Song + name singular + Píse? + + + + Songs + name plural + Písně + + + + Songs + container title + Písn? + + + + Exports songs using the export wizard. + Exportuje písn? pr?vodcem exportu. - Edit the selected Song + Add a new song. - Delete the selected Song + Edit the selected song. - Preview the selected Song + Delete the selected song. - Send the selected Song live + Preview the selected song. - Add the selected Song to the service + Send the selected song live. - - Arabic (CP-1256) - - - - - Baltic (CP-1257) - - - - - Central European (CP-1250) - - - - - Cyrillic (CP-1251) - - - - - Greek (CP-1253) - - - - - Hebrew (CP-1255) - - - - - Japanese (CP-932) - - - - - Korean (CP-949) - - - - - Simplified Chinese (CP-936) - - - - - Thai (CP-874) - - - - - Traditional Chinese (CP-950) - - - - - Turkish (CP-1254) - - - - - Vietnam (CP-1258) - - - - - Western European (CP-1252) - - - - - Character Encoding - - - - - The codepage setting is responsible -for the correct character representation. -Usually you are fine with the preselected choice. - - - - - Please choose the character encoding. -The encoding is responsible for the correct character representation. - - - - - Song - name singular - - - - - Songs - name plural - - - - - Songs - container title - - - - - Exports songs using the export wizard. + + Add the selected song to the service. SongsPlugin.AuthorsForm - + Author Maintenance - + Údržba autor? - + Display name: - + Zobrazené jméno: - + First name: - + K?estní jméno: - + Last name: - + P?íjmení: - + You need to type in the first name of the author. - + Je pot?eba zadat k?estní jméno autora. - + You need to type in the last name of the author. - + Je pot?eba zadat p?íjmení autora. - + You have not set a display name for the author, combine the first and last names? - + Zobrazené jméno autora není zadáno. Má se zkombinovat k?estní jméno a p?íjmení? SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Spravuje %s + + SongsPlugin.EditSongForm - + Song Editor - + Editor písn? - + &Title: &Název: - + Alt&ernate title: - + &Jiný název: - + &Lyrics: - + &Text písn?: - + &Verse order: - + &Po?adí verš?: - + Ed&it All - Upra&it vše + &Upravit vše - + Title && Lyrics - + Název a text písn? - + &Add to Song - + &P?idat k písni - + &Remove - + &Odstranit - + &Manage Authors, Topics, Song Books - + &Správa autor?, témat a zp?vník? - + A&dd to Song - + &P?idat k písni - + R&emove - + &Odstranit - + Book: - Kniha: + Zp?vník: - + Number: - + ?íslo: - + Authors, Topics && Song Book - + Auto?i, témata a zp?vníky - + New &Theme - + Nový &motiv - + Copyright Information - + Informace o autorském právu - + Comments - + Komentá?e - + Theme, Copyright Info && Comments - + Motiv, autorská práva a komentá?e - + Add Author - + P?idat autora - + This author does not exist, do you want to add them? - + Tento autor neexistuje. Chcete ho p?idat? - + This author is already in the list. - + Tento autor je už v seznamu. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Není vybrán platný autor. Bu?to vyberte autora ze seznamu nebo zadejte nového autora a pro p?idání nového autora klepn?te na tla?ítko "P?idat autora k písni". - + Add Topic - + P?idat téma - + This topic does not exist, do you want to add it? - + Toto téma neexistuje. Chcete ho p?idat? - + This topic is already in the list. - + Toto téma je už v seznamu. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + Není vybráno platné téma. Bu?to vyberte téma ze seznamu nebo zadejte nové téma a pro p?idání nového tématu klepn?te na tla?ítko "P?idat téma k písni". - + You need to type in a song title. - + Je pot?eba zadat název písne. - + You need to type in at least one verse. - + Je pot?eba zadat alespo? jednu sloku. - + Warning - + Varování - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Po?adí ?ástí písn? není platné. ?ást odpovídající %s neexistuje. Platné položky jsou %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + ?ást %s není použita v po?adí ?ástí písn?. Jste si jisti, že chcete píse? takto uložit? - + Add Book - + P?idat zp?vník - + This song book does not exist, do you want to add it? - + Tento zp?vník neexistuje. Chcete ho p?idat? - + You need to have an author for this song. - + Pro tuto píse? je pot?eba zadat autora. - + You need to type some text in to the verse. - + Ke sloce je pot?eba zadat n?jaký text. SongsPlugin.EditVerseForm - + Edit Verse - + Upravit sloku - + &Verse type: - + &Typ sloky: - + &Insert + &Vložit + + + + Split a slide into two by inserting a verse splitter. SongsPlugin.ExportWizardForm - + Song Export Wizard - + Pr?vodce exportem písní - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Tento pr?vodce pomáhá exportovat vaše písn? do otev?eného a svobodného formátu chval OpenLyrics. - + Select Songs - + Vybrat písn? - + Check the songs you want to export. - + Zaškrtn?te písn?, které chcete exportovat. - + Uncheck All - + Odškrtnout vše - + Check All - + Zaškrtnout vše - + Select Directory - + Vybrat adresá? - - Select the directory you want the songs to be saved. - - - - + Directory: - + Adresá?: - + Exporting - + Exportuji - + Please wait while your songs are exported. - + ?ekejte prosím, než písn? budou exportovány. - + You need to add at least one Song to export. - + Je pot?eba p?idat k exportu alespo? jednu píse?. - + No Save Location specified - + Není zadáno umíst?ní pro uložení - + Starting export... - + Spouštím export... - + You need to specify a directory. - + Je pot?eba zadat adresá?. - + Select Destination Folder + Vybrat cílovou složku + + + + Select the directory where you want the songs to be saved. SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Vybrat dokumentové/prezenta?ní soubory - + Song Import Wizard - + Pr?vodce importem písní - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Tento pr?vodce pomáhá importovat písn? z r?zných formát?. Importování se spustí klepnutím níže na tla?ítko další a výb?rem formátu, ze kterého se bude importovat. - + Generic Document/Presentation - - - - - Filename: - - - - - The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - - - - Add Files... - + Obecný dokument/prezentace + Filename: + Název souboru: + + + + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. + Import pro formát OpenLyrics ješt? nebyl vyvinut, ale jak m?žete vid?t, stále to zamýšlíme ud?lat. Doufáme, že to bude p?ítomno v další verzi aplikace. + + + + Add Files... + P?idat soubory... + + + Remove File(s) - + Odstranit soubory - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + ?ekejte prosím, než písn? budou importovány. - - Administered by %s - - - - + OpenLP 2.0 Databases - + Databáze OpenLP 2.0 - + openlp.org v1.x Databases - + Databáze openlp.org v1.x - + Words Of Worship Song Files - + Soubory s písn?mi Words of Worship - + You need to specify at least one document or presentation file to import from. - + Je pot?eba zadat alespo? jeden dokument nebo jednu prezentaci, ze které importovat. - + Songs Of Fellowship Song Files - + Soubory s písn?mi Songs Of Fellowship - + SongBeamer Files - + SongBeamer soubory - + SongShow Plus Song Files + Soubory s písn?mi SongShow Plus + + + + Foilpresenter Song Files + Soubory s písn?mi Foilpresenter + + + + Copy + Kopírovat + + + + Save to File + Uložit do souboru + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. - - Foilpresenter Song Files + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Titles - + Názvy - + Lyrics - + Text písn? - + Delete Song(s)? - + Smazat písn?? - + CCLI License: - + CCLI Licence: - + Entire Song - + Celá píse? - + Are you sure you want to delete the %n selected song(s)? - - + + Jste si jisti, že chcete smazat %n vybraných písní? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... - + Exportuji "%s"... SongsPlugin.SongBookForm - + Song Book Maintenance - - - - - &Name: - + Údržba zp?vníku - &Publisher: - + &Name: + &Název: - + + &Publisher: + &Vydavatel: + + + You need to type in a name for the book. - + Je pot?eba zadat název zp?vníku. SongsPlugin.SongExportForm - + Finished export. - + Export dokon?en. - + Your song export failed. - + Export písn? selhal. SongsPlugin.SongImport - + copyright + autorská práva + + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice SongsPlugin.SongImportForm - + Your song import failed. - + Import písn? selhal. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + Nemohu p?idat autora. - + This author already exists. - + Tento autor již existuje. - + Could not add your topic. - + Nemohu p?idat téma. - + This topic already exists. - + Toto téma již existuje. - + Could not add your book. - + Nemohu p?idat zp?vník. - + This book already exists. - + Tento zp?vník již existuje. - + Could not save your changes. - + Nemohu uložit zm?ny. - + Could not save your modified author, because the author already exists. - + Nemohu uložit upraveného autora, protože tento autor již existuje. - + Could not save your modified topic, because it already exists. - + Nemohu uložit upravené téma, protože již existuje. - + Delete Author - + Smazat autora - + Are you sure you want to delete the selected author? - + Jste si jisti, že chcete smazat vybraného autora? - + This author cannot be deleted, they are currently assigned to at least one song. - + Nemohu smazat autora, protože je v sou?asné dob? p?i?azen alespo? k jedné písni. - + Delete Topic - + Smazat téma - + Are you sure you want to delete the selected topic? - + Jste si jisti, že opravdu chcete smazat vybrané téma? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Nemohu smazat toto téma, protože je v sou?asné dob? p?i?azeno alespo? k jedné písni. - + Delete Book - + Smazat zp?vník - + Are you sure you want to delete the selected book? - + Jste si jisti, že chcete smazat vybraný zp?vník? - + This book cannot be deleted, it is currently assigned to at least one song. - + Nemohu smazat tento zp?vník, protože je v sou?asné dob? p?i?azen alespo? k jedné písni. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + Autor %s již existuje. P?ejete si vytvo?it písn? s autorem %s a použít již existujícího autora %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + Téma %s již existuje. P?ejete si vytvo?it písn? s tématem %s a použít již existující téma %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + Zp?vník %s již existuje. P?ejete si vytvo?ít písn? se zp?vníkem %s a použít již existující zp?vník %s? SongsPlugin.SongsTab - + Songs Mode - + Režim písn? - + Enable search as you type - + Zapnout hledat b?hem psaní - + Display verses on live tool bar - + Zobrazit sloky v nástrojové lišt? naživo - + Update service from song edit - + Aktualizovat službu p?i úprav? písn? - + Add missing songs when opening service - + P?idat chyb?jící písn? p?i otev?ení služby SongsPlugin.TopicsForm - + Topic Maintenance - + Údržba témat - + Topic name: - + Název tématu: - + You need to type in a topic name. - + Je pot?eba zadat název tématu. SongsPlugin.VerseType - - - Verse - - - - - Chorus - - - - - Bridge - - - - - Pre-Chorus - - - Intro - + Verse + Sloka - Ending - + Chorus + Refrén + Bridge + P?echod + + + + Pre-Chorus + P?edrefrén + + + + Intro + P?edehra + + + + Ending + Zakon?ení + + + Other - + Ostatní + + + + ThemeTab + + + Themes + Motivy diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 8f9d65468..b22ffef5b 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Sie haben keinen Parameter angegeben, der ersetzt werden könnte. Möchten Sie trotzdem fortfahren? - + No Parameter Found Kein Parameter gefunden - + No Placeholder Found Kein Platzhalter gefunden - + The alert text does not contain '<>'. Do you want to continue anyway? Der Hinweistext enthält nicht <>. @@ -30,34 +30,34 @@ Möchten Sie trotzdem fortfahren? AlertsPlugin - + &Alert &Hinweis - + Show an alert message. Hinweis anzeigen. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Hinweis Erweiterung</strong><br />Die Erweiterung Hinweis ermöglicht es, Texte auf der Anzeige einzublenden. - + Alert name singular Hinweis - + Alerts name plural Hinweise - + Alerts container title Hinweise @@ -66,47 +66,47 @@ Möchten Sie trotzdem fortfahren? AlertsPlugin.AlertForm - + Alert Message Hinweis - + Alert &text: Hinweis&text: - + &New &Neu - + &Save &Speichern - + Displ&ay &Anzeigen - + Display && Cl&ose An&zeigen && Schließen - + New Alert Neuer Hinweis - + You haven't specified any text for your alert. Please type in some text before clicking New. - Der Hinweis enthält noch keinen Text. Bitte geben Sie einen Text an, bevor Sie auf »Neu« klicken. + Der Hinweis enthält noch keinen Text. Bitte geben Sie einen Text an, bevor Sie auf »Neu« klicken. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Möchten Sie trotzdem fortfahren? AlertsPlugin.AlertsTab - + Font Schrift - + Alert timeout: Anzeigedauer: - + Font name: Schriftart: - + Font color: Schriftfarbe: - + Background color: Hintergrundfarbe: - + Font size: Schriftgröße: @@ -155,51 +155,54 @@ Möchten Sie trotzdem fortfahren? BibleDB.Wizard - - Importing testaments... %s - Importiere Testamente... %s - - - - Importing testaments... done. - Importiere Testamente... Fertig. - - - + Importing books... %s Importiere Bücher... %s - + Importing verses from %s... Importing verses from <book name>... Importiere Verse von %s... - + Importing verses... done. - Importiere Verse... Fertig + Importiere Verse... Fertig. + + + + BiblePlugin + + + &Upgrade older Bibles + &Upgrade alte Bibeln + + + + Upgrade the Bible databases to the latest format. + Stelle die Bibeln auf das aktuelle Datenbankformat um. BiblePlugin.HTTPBible - + Download Error Download Fehler - + Parse Error Formatfehler - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Beim Herunterladen des Bibeltextes ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Internetverbindung. Sollte dieser Fehler dennoch auftreten, so wenden Sie sich bitte an den OpenLP Support. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Beim Auslesen des Bibeltextes ist ein Fehler aufgetreten. Sollte dieser Fehler wiederholt auftreten, so wenden Sie sich bitte an den OpenLP Support. @@ -207,123 +210,133 @@ Möchten Sie trotzdem fortfahren? BiblePlugin.MediaItem - + Bible not fully loaded. - Bibel wurde nicht vollständig geladen + Bibel wurde nicht vollständig geladen. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - Es ist nicht möglich Einzel- und Zweifach Bibelvers Suchergebnisse zu kombinieren. Sollen die Suchergebnisse gelöscht und eine neue Suche gestartet werden? + Es ist nicht möglich Einzel- und Zweifach Bibelvers Suchergebnisse zu kombinieren. Sollen die Suchergebnisse gelöscht und eine neue Suche gestartet werden? + + + + Information + Hinweis + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + Die Vergleichsbibel enthält nicht alle Verse, die in der Hauptbibel vorhanden sind. Nur die Verse, die in beiden Bibeln vorhanden sind, werden angezeigt. %d Verse sind nicht enthalten. BiblesPlugin - + &Bible &Bibel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bibel Erweiterung</strong><br />Die Bibel Erweiterung ermöglicht es Bibelverse aus verschiedenen Quellen anzuzeigen. - - - - Import a Bible - Neue Bibel importieren - - - + Bible name singular Bibeltext - + Bibles name plural Bibeln - + Bibles container title Bibeln - + No Book Found Kein Buch gefunden - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Es konnte kein passendes Buch gefunden werden. Überprüfen Sie bitte die Schreibweise. - - Add a new Bible - Füge eine neue Bibel hinzu + + Import a Bible. + Neue Bibel importieren. - - Edit the selected Bible - Bearbeite die ausgewählte Bibel + + Add a new Bible. + Füge eine neue Bibel hinzu. - - Delete the selected Bible - Lösche die ausgewählte Bibel + + Edit the selected Bible. + Bearbeite die ausgewählte Bibel. - - Preview the selected Bible - Zeige die ausgewählte Bibelverse in der Vorschau + + Delete the selected Bible. + Lösche die ausgewählte Bibel. - - Send the selected Bible live - Zeige die ausgewählte Bibelverse Live + + Preview the selected Bible. + Zeige die ausgewählte Bibelverse in der Vorschau. - - Add the selected Bible to the service - Füge die ausgewählten Bibelverse zum Ablauf hinzu + + Send the selected Bible live. + Zeige die ausgewählte Bibelverse Live. + + + + Add the selected Bible to the service. + Füge die ausgewählten Bibelverse zum Ablauf hinzu. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Bibel Erweiterung</strong><br />Die Bibel Erweiterung ermöglicht es Bibelverse aus verschiedenen Quellen anzuzeigen. BiblesPlugin.BibleManager - + Scripture Reference Error Fehler im Textverweis - + Web Bible cannot be used Für Onlinebibeln nicht verfügbar - + Text Search is not available with Web Bibles. In Onlinebibeln ist Textsuche nicht möglich. - + 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. Es wurde kein Suchbegriff eingegeben. Um nach mehreren Begriffen gleichzeitig zu suchen, müssen die Begriffe durch ein Leerzeichen getrennt sein. Alternative Suchbegriffe müssen per Komma getrennt sein. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - Zurzeit sind keine Bibelübersetzungen installiert. Zur Suche muss eine solche mit dem Importassistent importiert werden. + Zurzeit sind keine Bibelübersetzungen installiert. Zur Suche muss eine solche mit dem Importassistent importiert werden. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -332,7 +345,7 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - Ihre Bibelstelle ist entweder nicht von OpenLP unterstützt oder sie ist ungültig. Bitte überprüfen Sie, dass Ihre Bibelstelle ein der folgenden Muster entspricht: + Ihre Bibelstelle ist entweder nicht von OpenLP unterstützt oder sie ist ungültig. Bitte überprüfen Sie, dass Ihre Bibelstelle ein der folgenden Muster entspricht: Buch Kapitel Buch Kapitel-Kapitel @@ -342,7 +355,7 @@ Buch Kapitel:Verse-Verse,Kapitel:Verse-Verse Buch Kapitel:Verse-Kapitel:Verse - + No Bibles Available Keine Bibeln verfügbar @@ -350,45 +363,20 @@ Buch Kapitel:Verse-Kapitel:Verse BiblesPlugin.BiblesTab - + Verse Display Bibelstellenanzeige - + Only show new chapter numbers Nur neue Kapitelnummern anzeigen - - - Layout style: - Folienformat: - - - - Display style: - Versangabenformat: - Bible theme: Bibel-Design: - - - Verse Per Slide - Verse pro Folie - - - - Verse Per Line - Verse pro Zeile - - - - Continuous - Fortlaufend - No Brackets @@ -413,7 +401,7 @@ Buch Kapitel:Verse-Kapitel:Verse Note: Changes do not affect verses already in the service. - Anmerkung: + Hinweis: Änderungen beeinflussen keine Verse, welche bereits im Ablauf vorhanden sind. @@ -422,259 +410,335 @@ Changes do not affect verses already in the service. Vergleichsbibel anzeigen + + BiblesPlugin.BookNameDialog + + + Select Book Name + Buchnamen wählen + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + Das folgende Buch konnte intern nicht zugeordnet werden. Bitte wählen Sie den entsprechenden englischen Namen. + + + + Current name: + Aktueller Name: + + + + Corresponding name: + Entsprechender Name: + + + + Show Books From + Zeige Bücher aus dem: + + + + Old Testament + Altes Testament + + + + New Testament + Neues Testament + + + + Apocrypha + Apokryphen + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Sie müssen ein Buch wählen. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registriere Bibel und lade Bücher... + + + + Registering Language... + Registriere Sprache... + + + + Importing %s... + Importing <book name>... + Importiere »%s«... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibel Importassistent - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. Dieser Assistent hilft Ihnen Bibeln aus verschiedenen Formaten zu importieren. Um den Assistenten zu starten klicken Sie auf »Weiter«. - + Web Download Onlinebibel - + Location: Quelle: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Übersetzung: - + Download Options - Download-Optionen + Download-Optionen - + Server: Server: - + Username: Benutzername: - + Password: Passwort: - + Proxy Server (Optional) Proxy-Server (optional) - + License Details Lizenzdetails - + Set up the Bible's license details. Eingabe der Urheberrechtsangaben der Bibelübersetzung. - + Copyright: Copyright: - + Please wait while your Bible is imported. Bitte warten Sie während Ihre Bibel importiert wird. - + You need to specify a file with books of the Bible to use in the import. Eine Buchinformations-Datei muss zum Import angegeben werden. - + You need to specify a file of Bible verses to import. Eine Bibeltext-Datei muss zum Import angegeben werden. - + You need to specify a version name for your Bible. Bitte geben Sie den Namen der Bibelübersetzung ein. - + Bible Exists Übersetzung bereits vorhanden - + Your Bible import failed. Der Bibelimport ist fehlgeschlagen. - + Version name: Bibelausgabe: - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Das Copyright muss angegeben werden. Gemeinfreie Bibeln ohne Copyright sind als solche zu kennzeichnen. - + This Bible already exists. Please import a different Bible or first delete the existing one. Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. - - Starting Registering bible... - Starte Erfassung der Bibel... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Erfassung abgeschlossen. -Bitte beachten Sie, dass Bibeltexte bei Bedarf heruntergeladen werden. -Daher ist eine Verbindung zum Internet erforderlich. - - - + Permissions: Genehmigung: - + CSV File - CSV-Datei + CSV-Datei - + Bibleserver Bibleserver.com - + Bible file: Bibeldatei: - - Testaments file: - Testamentdatei: - - - + Books file: Bücherdatei: - + Verses file: Versedatei: - - You have not specified a testaments file. Do you want to proceed with the import? - Sie haben keine Testamentsdatei angegeben. Möchten Sie trotzdem fortfahren? - - - + openlp.org 1.x Bible Files openlp.org 1.x Bibel-Dateien + + + Registering Bible... + Registriere Bibel... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Registrierung abgeschlossen. +Bitte beachten Sie, dass Bibeltexte bei Bedarf heruntergeladen +werden. Daher ist eine Internetverbindung erforderlich. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Sprache auswählen + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP kann die Sprache dieser Bibeln nicht ermitteln. Bitte wählen Sie die Sprache dieser Bibel aus der Liste aus. + + + + Language: + Sprache: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Sie müssen eine Sprache wählen. + BiblesPlugin.MediaItem - + Quick Schnellsuche - + Find: Suchen: - - Results: - Ergebnisse: - - - + Book: Buch: - + Chapter: Kapitel: - + Verse: Vers: - + From: Von: - + To: Bis: - + Text Search Textsuche - - Clear - ersetzen - - - - Keep - ergänzen - - - + Second: Vergleichstext: - + Scripture Reference Bibelstelle + + + Toggle to keep or clear the previous results. + Vorheriges Suchergebnis behalten oder verwerfen. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s wird importiert... @@ -683,34 +747,267 @@ Daher ist eine Verbindung zum Internet erforderlich. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kodierung wird ermittelt (dies kann etwas dauern)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wird importiert... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Ein Backup-Verzeichnis wählen + + + + Bible Upgrade Wizard + Bibelupgradeassistent + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + Dieser Assistent hilft Ihnen Ihre Bibeln auf das aktuelle Format umzustellen. Klicken Sie »Weiter« um den Prozess zu starten. + + + + Select Backup Directory + Backup-Verzeichnis wählen + + + + Please select a backup directory for your Bibles + Bitte wählen Sie ein Backup-Verzeichnis für Ihre Bibeln + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Vorherige Versionen von OpenLP 2.0 können nicht mit den aktualisierten Bibeln umgehen. Sie können eine Backup von ihren Bibeln erstellen. Wie Sie ein Backup wiedereinspielen können Sie in den <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a> lesen. + + + + Please select a backup location for your Bibles. + Bitte wählen Sie ein Backup-Verzeichnis für Ihre Bibeln. + + + + Backup Directory: + Backup-Verzeichnis: + + + + There is no need to backup my Bibles + Es soll kein Backup gemacht werden + + + + Select Bibles + Bibeln wählen + + + + Please select the Bibles to upgrade + Bitte wählen Sie die Bibeln welche aktualisiert werden sollen + + + + Version name: + Bibelausgabe: + + + + This Bible still exists. Please change the name or uncheck it. + Diese Bibel existiert bereits. Bitte ändern Sie den Namen oder wählen Sie die Bibel in der Liste ab. + + + + Upgrading + Aktualisiere... + + + + Please wait while your Bibles are upgraded. + Bitte warten Sie bis Ihre Bibeln aktualisiert sind. + + + + You need to specify a Backup Directory for your Bibles. + Sie müssen ein Backup-Verzeichnis für Ihre Bibeln angeben. + + + + You need to specify a version name for your Bible. + Bitte geben Sie den Namen der Bibelübersetzung ein. + + + + Bible Exists + Übersetzung bereits vorhanden + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + Diese Bibel existiert bereits. Bitte aktualisieren Sie eine andere Bibel, löschen Sie die bereits vorhandene oder wählen Sie die Bibel in der Liste ab. + + + + There are no Bibles available to upgrade. + Es sind keine Bibel für eine Aktualisierung vorhanden... + + + + Upgrading Bible %s of %s: "%s" +Failed + Aktualisiere Bibel %s von %s: »%s« +Fehlgeschlagen... + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Aktualisiere Bibel %s von %s: »%s« +Aktualisiere... + + + + Download Error + Download Fehler + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Aktualisiere Bibel %s von %s: »%s« +Aktualisiere »%s«... + + + + , %s failed + , %s fehlgeschlagen + + + + Upgrading Bible(s): %s successful%s + Aktualisiere Bibeln: %s erfolgreich%s + + + + Upgrade failed. + Aktualisierung schlug fehl. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + Das Backup war nicht erfolgreich. +Damit das Backup erstellt werden kann brauchen Sie Schreibrechte in dem Verzeichnis. + + + + Starting Bible upgrade... + Beginne mit der Aktualisierung... + + + + To upgrade your Web Bibles an Internet connection is required. + Um Onlinebibeln zu aktualisieren ist eine Internetverbindung notwendig. + + + + Upgrading Bible %s of %s: "%s" +Complete + Aktualisiere Bibel %s von %s: »%s« +Fertig + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Aktualisiere Bibeln: %s erfolgreich%s +Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen werden. Daher ist eine Internetverbindung erforderlich. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. <strong>Sonderfolien Erweiterung</strong><br />Die Erweiterung Sonderfolien ermöglicht es beliebige Textfolien zu erstellen. Diese können in der gleichen Weise, wie Lieder dargestellt werden, bieten aber mehr Flexibilität. + + + Custom Slide + name singular + Sonderfolien + + + + Custom Slides + name plural + Sonderfolien + + + + Custom Slides + container title + Sonderfolien + + + + Load a new custom slide. + Lade eine neue Sonderfolie. + + + + Import a custom slide. + Importieren eine Sonderfolie. + + + + Add a new custom slide. + Erstelle eine neue Sonderfolie. + + + + Edit the selected custom slide. + Bearbeite die ausgewählte Sonderfolie. + + + + Delete the selected custom slide. + Lösche die ausgewählte Sonderfolie. + + + + Preview the selected custom slide. + Zeige die ausgewählte Sonderfolie in der Vorschau. + + + + Send the selected custom slide live. + Zeige die ausgewählte Sonderfolie Live. + + + + Add the selected custom slide to the service. + Füge die ausgewählte Sonderfolie zum Ablauf hinzu. + CustomPlugin.CustomTab - + Custom Display Sonderfolie Anzeige - + Display footer Fußzeile anzeigen @@ -718,192 +1015,139 @@ Daher ist eine Verbindung zum Internet erforderlich. CustomPlugin.EditCustomForm - + Edit Custom Slides Sonderfolien bearbeiten - + &Title: &Titel: - - Split Slide - Folie teilen - - - + The&me: Desig&n: - + &Credits: A&utoren: - + Add a new slide at bottom. - Neue Folie am Ende einfügen + Füge eine neue Folie am Ende ein. - + Edit the selected slide. - Ausgewählte Folie bearbeiten + Bearbeite ausgewählte Folie. - + Edit all the slides at once. - Alle Folien bearbeiten + Bearbeite alle Folien. - + Split a slide into two by inserting a slide splitter. - Einen Folienumbruch einfügen + Füge einen Folienumbruch ein. - + You need to type in a title. Bitte geben Sie einen Titel ein. - + You need to add at least one slide Es muss mindestens eine Folie erstellt werden. - + Ed&it All &Alle bearbeiten + + + Insert Slide + Folie einfügen + - CustomsPlugin + GeneralTab - - Import a Custom - Sonderfolien importieren - - - - Custom - name singular - Sonderfolien - - - - Customs - name plural - Sonderfolien - - - - Custom - container title - Sonderfolien - - - - Load a new Custom - Eine neue Sonderfolie laden - - - - Add a new Custom - Erstelle eine neue Sonderfolie - - - - Edit the selected Custom - Bearbeite die ausgewählte Sonderfolie - - - - Delete the selected Custom - Lösche die ausgewählte Sonderfolie - - - - Preview the selected Custom - Zeige die ausgewählte Sonderfolie in der Vorschau - - - - Send the selected Custom live - Zeige die ausgewählte Sonderfolie Live - - - - Add the selected Custom to the service - Füge die ausgewählte Sonderfolie zum Ablauf hinzu + + General + Allgemein ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Bilder Erweiterung</strong><br />Die Bilder Erweiterung ermöglicht die Anzeige von Bildern.<br />Eine der besonderen Eigenschaften dieser Erweiterung ist die Möglichkeit, in der Ablaufverwaltung, mehrere Bilder zu einer Gruppe zusammen zu fassen. Dies vereinfacht die die Anzeige mehrerer Bilder. Ebenso kann mit Hilfe der Zeitschleife, sehr einfach eine Diaschau erzeugt werden, welche dann automatisch abläuft. Des weiteren können mit dieser Erweiterung Bilder benutzt werden, um das Hintergrundbild des aktuellen Design zu ersetzen. - + Image name singular Bild - + Images name plural Bilder - + Images container title Bilder - - Load a new Image - Lade ein neues Bild - - - - Add a new Image - Füge eine neues Bild hinzu + + Load a new image. + Lade ein neues Bild. - Edit the selected Image - Bearbeite das ausgewählte Bild + Add a new image. + Füge eine neues Bild hinzu. - Delete the selected Image - Lösche da ausgewählte Bild + Edit the selected image. + Bearbeite das ausgewählte Bild. - Preview the selected Image - Zeige das ausgewählte Bild in der Vorschau + Delete the selected image. + Lösche das ausgewählte Bild. - Send the selected Image live - Zeige die ausgewählte Bild Live + Preview the selected image. + Zeige das ausgewählte Bild in der Vorschau. - Add the selected Image to the service - Füge das ausgewählte Bild zum Ablauf hinzu + Send the selected image live. + Zeige die ausgewählte Bild Live. + + + + Add the selected image to the service. + Füge das ausgewählte Bild zum Ablauf hinzu. ImagePlugin.ExceptionDialog - + Select Attachment Anhang auswählen @@ -911,39 +1155,39 @@ Daher ist eine Verbindung zum Internet erforderlich. ImagePlugin.MediaItem - + Select Image(s) Bilder auswählen - + You must select an image to delete. Das Bild, das entfernt werden soll, muss ausgewählt sein. - + You must select an image to replace the background with. Das Bild, das Sie als Hintergrund setzen möchten, muss ausgewählt sein. - + Missing Image(s) Fehlende Bilder - + The following image(s) no longer exist: %s Auf die folgenden Bilder kann nicht mehr zugegriffen werden: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - Auf die folgenden Bilder kann nicht mehr zugegriffen werden: %s + Auf die folgenden Bilder kann nicht mehr zugegriffen werden: %s Wollen Sie die anderen Bilder trotzdem hinzufügen? - + There was a problem replacing your background, the image file "%s" no longer exists. Da auf das Bild »%s« nicht mehr zugegriffen werden kann, konnte es nicht als Hintergrund gesetzt werden. @@ -951,98 +1195,98 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Erweiterung Medien</strong><br />Die Erweiterung Medien ermöglicht es Audio- und Videodateien abzuspielen. - + Media name singular Medien - + Media name plural Medien - + Media container title Medien - - Load a new Media - Lade eine neue Audio-/Videodatei - - - - Add a new Media - Füge eine neue Audio-/Videodatei hinzu + + Load new media. + Lade eine neue Audio-/Videodatei. - Edit the selected Media - Bearbeite die ausgewählte Audio-/Videodatei + Add new media. + Füge eine neue Audio-/Videodatei hinzu. - Delete the selected Media - Lösche die ausgewählte Audio-/Videodatei + Edit the selected media. + Bearbeite die ausgewählte Audio-/Videodatei. - Preview the selected Media - Zeige die ausgewählte Audio-/Videodatei in der Vorschau + Delete the selected media. + Lösche die ausgewählte Audio-/Videodatei. - Send the selected Media live - Zeige die ausgewählte Audio-/Videodatei Live + Preview the selected media. + Zeige die ausgewählte Audio-/Videodatei in der Vorschau. - Add the selected Media to the service - Füge die ausgewählte Audio-/Videodatei zum Ablauf hinzu + Send the selected media live. + Zeige die ausgewählte Audio-/Videodatei Live. + + + + Add the selected media to the service. + Füge die ausgewählte Audio-/Videodatei zum Ablauf hinzu. MediaPlugin.MediaItem - + Select Media Audio-/Videodatei auswählen - + You must select a media file to delete. Die Audio-/Videodatei, die entfernt werden soll, muss ausgewählt sein. - + Missing Media File Fehlende Audio-/Videodatei - + The file %s no longer exists. Die Audio-/Videodatei »%s« existiert nicht mehr. - + You must select a media file to replace the background with. Das Video, das Sie als Hintergrund setzen möchten, muss ausgewählt sein. - + There was a problem replacing your background, the media file "%s" no longer exists. Da auf die Mediendatei »%s« nicht mehr zugegriffen werden kann, konnte sie nicht als Hintergrund gesetzt werden. - + Videos (%s);;Audio (%s);;%s (*) Video (%s);;Audio (%s);;%s (*) @@ -1050,12 +1294,12 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? MediaPlugin.MediaTab - + Media Display Medienanzeige - + Use Phonon for video playback Videos über Phonon abspielen @@ -1063,62 +1307,59 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? OpenLP - + Image Files Bilddateien + + + Information + Hinweis + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Das Bibelformat wurde geändert. +Sie müssen Ihre Bibeln aktualisieren. +Möchten Sie dies jetzt tun? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision>-Open Source Lyrics Projection - -OpenLP ist eine freie Kirchen- oder Liedtext-Präsentationssoftware, mit der Liedtexte, Bibeltexte, Videos, Bilder sowie auch PowerPoint bzw. Impress Präsentationen (falls diese Programme installiert sind) von einem Computer aus auf einem Beamer angezeigt werden können. - -Erkunden Sie OpenLP: http://openlp.org/ - -OpenLP wird von freiwilligen Helfern programmiert und gewartet. Wenn Sie sich mehr freie christliche Programme wünschen, ermutigen wir Sie, sich doch sich zu beteiligen und den Knopf weiter unten nutzen. - - - + Credits Danksagungen - + License Lizenz - + Contribute Mitmachen - + build %s build %s - + 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 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 below for more details. 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 below for more details. - + Project Lead %s @@ -1246,190 +1487,320 @@ Danke Halleluja! - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Copyright © 2004-2011 Raoul Snyman -Anteiliges Copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision>-Open Source Lyrics Projection + +OpenLP ist eine freie Kirchen- oder Liedtext-Präsentationssoftware, mit der Liedtexte, Bibeltexte, Videos, Bilder sowie auch PowerPoint bzw. Impress Präsentationen (falls diese Programme installiert sind) von einem Computer aus auf einem Beamer angezeigt werden können. + +Erkunden Sie OpenLP: http://openlp.org/ + +OpenLP wird von freiwilligen Helfern programmiert und gewartet. Wenn Sie sich mehr freie christliche Programme wünschen, ermutigen wir Sie, sich doch sich zu beteiligen und den Knopf weiter unten nutzen. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Anteiliges Copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings Benutzeroberfläche - + Number of recent files to display: - Anzahl der zuletzt geöffneter Abläufe: + Anzahl zuletzt geöffneter Abläufe: - + Remember active media manager tab on startup - Aktiven Reiter der Medienverwaltung speichern + Erinnere aktiven Reiter der Medienverwaltung - + Double-click to send items straight to live Objekte bei Doppelklick live anzeigen - + Expand new service items on creation Neue Ablaufelemente bei ausklappen - + Enable application exit confirmation Aktiviere Bestätigung beim Schließen - + Mouse Cursor Mauszeiger - + Hide mouse cursor when over display window - Verstecke den Mauszeiger auf dem Hauptbildschirm + Verstecke den Mauszeiger auf dem Bildschrim - + Default Image Standardbild - + Background color: Hintergrundfarbe: - + Image file: Bild-Datei: - + Open File Datei öffnen + + + Preview items when clicked in Media Manager + Elemente in der Vorschau zeigen, wenn sie in +der Medienverwaltung angklickt werden + + + + Advanced + Erweitert + + + + Click to select a color. + Klicken Sie, um eine Farbe aus zu wählen. + + + + Browse for an image file to display. + Wählen Sie die Bild-Datei aus, die angezeigt werden soll. + + + + Revert to the default OpenLP logo. + Standard-Logo wiederherstellen. + OpenLP.DisplayTagDialog - + Edit Selection Auswahl bearbeiten - - Update - Aktualisieren - - - + Description Beschreibung - + Tag Tag - + Start tag Anfangs Tag - + End tag End Tag - - Default - Standard - - - + Tag Id Tag Nr. - + Start HTML Anfangs HTML - + End HTML End HTML + + + Save + Speichern + OpenLP.DisplayTagTab - + Update Error Aktualisierungsfehler - + Tag "n" already defined. Tag »n« bereits definiert. - + Tag %s already defined. - Tag »%s« bereits definiert. + Tag »%s« bereits definiert. + + + + New Tag + Neuer Tag + + + + </and here> + </und hier> + + + + <HTML here> + <HTML hier> + + + + OpenLP.DisplayTags + + + Red + rot + + + + Black + schwarz + + + + Blue + blau + + + + Yellow + gelb + + + + Green + grün + + + + Pink + rosa + + + + Orange + orange + + + + Purple + lila + + + + White + weiß + + + + Superscript + hochgestellt + + + + Subscript + tiefgestellt + + + + Paragraph + Textabsatz + + + + Bold + fett + + + + Italics + kursiv + + + + Underline + unterstrichen + + + + Break + Textumbruch OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - Ups! OpenLP hat ein Problem und kann es nicht beheben. Der Text im unteren Fenster enthält Informationen, welche möglicherweise hilfreich für die OpenLP Entwickler sind. + Ups! OpenLP hat ein Problem und kann es nicht beheben. Der Text im unteren Fenster enthält Informationen, welche möglicherweise hilfreich für die OpenLP Entwickler sind. Bitte senden Sie eine E-Mail an: bugs@openlp.org mit einer ausführlichen Beschreibung was Sie taten als das Problem auftrat. - + Error Occurred Fehler aufgetreten - + Send E-Mail E-Mail senden - + Save to File In Datei speichern - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - Bitte geben Sie ein Beschreibung ein, was Sie gemacht haben, als -dieser Fehler auftrat (mindestens 20 Zeichen). Bitte verwenden Sie (wenn möglich) Englisch. + Bitte geben Sie ein Beschreibung ein, was Sie gemacht haben, als +dieser Fehler auftrat. Bitte verwenden Sie (wenn möglich) Englisch. - + Attach File Datei einhängen - + Description characters to enter : %s Mindestens noch %s Zeichen eingeben @@ -1437,24 +1808,24 @@ dieser Fehler auftrat (mindestens 20 Zeichen). Bitte verwenden Sie (wenn möglic OpenLP.ExceptionForm - + Platform: %s Plattform: %s - + Save Crash Report Fehlerprotokoll speichern - + Text files (*.txt *.log *.text) Textdateien (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1485,7 +1856,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1520,17 +1891,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename Datei umbenennen - + New File Name: Neuer Dateiname: - + File Copy Datei kopieren @@ -1538,17 +1909,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Sprache wählen - + Choose the translation you'd like to use in OpenLP. Wählen Sie die Sprache, in der OpenLP sein soll. - + Translation: Sprache: @@ -1556,306 +1927,326 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... %s wird heruntergeladen... - + Download complete. Click the finish button to start OpenLP. - Download vollständig. Klicken Sie »Fertig« um OpenLP zu starten. + Download vollständig. Klicken Sie »Abschließen« um OpenLP zu starten. - + Enabling selected plugins... Aktiviere ausgewählte Erweiterungen... - + First Time Wizard Einrichtungsassistent - + Welcome to the First Time Wizard - Herzlich willkommen zum Einrichtungsassistent + Willkommen zum Einrichtungsassistent - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - Dieser Assistent wird Ihnen helfen OpenLP für die erste Benutzung zu konfigurieren. Klicken sie »Weiter« um den Assistenten zu starten. - - - + Activate required Plugins Erweiterungen aktivieren - + Select the Plugins you wish to use. Wählen Sie die Erweiterungen aus, die Sie nutzen wollen. - + Songs Lieder - + Custom Text Sonderfolien - + Bible Bibel - + Images Bilder - + Presentations Präsentationen - + Media (Audio and Video) Medien (Audio und Video) - + Allow remote access Erlaube Fernsteuerung - + Monitor Song Usage - Lieder Benutzung Protokollierung + Lied Benutzung protokollieren - + Allow Alerts Erlaube Hinweise - + No Internet Connection Keine Internetverbindung - + Unable to detect an Internet connection. Es könnte keine Internetverbindung aufgebaut werden. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - Es konnte keine Internetverbindung aufgebaut werden. Der Einrichtungsassistent benötigt eine Internetverbindung um Lieder, Bibeln und Design herunter zu laden. + Es konnte keine Internetverbindung aufgebaut werden. Der Einrichtungsassistent benötigt eine Internetverbindung um Lieder, Bibeln und Design herunter zu laden. Um den Einrichtungsassistent später erneut zu starten und diese Beispieldaten zu importieren, drücken Sie »Abbrechen«, überprüfen Sie Ihre Internetverbindung und starten Sie OpenLP erneut. -Um den Einrichtungsassistent nicht auszuführen, drücken Sie »Fertig«. +Um den Einrichtungsassistent nicht auszuführen, drücken Sie »Abschließen«. - + Sample Songs Beispiellieder - + Select and download public domain songs. - Wählen und laden Sie Gemeinfreie (bzw. kostenlose) Lieder herunter. + Wählen und laden Sie gemeinfreie (bzw. kostenlose) Lieder herunter. - + Sample Bibles Beispielbibeln - + Select and download free Bibles. Wählen und laden Sie freie Bibeln runter. - + Sample Themes Beispieldesigns - + Select and download sample themes. Wählen und laden Sie Beispieldesigns runter. - + Default Settings Standardeinstellungen - + Set up default settings to be used by OpenLP. - Grundeinstellungen konfigurieren... + Grundeinstellungen konfigurieren. - - Setting Up And Importing - Konfiguriere und importiere - - - - Please wait while OpenLP is set up and your data is imported. - Bitte warten Sie, während OpenLP eingerichtet wird. - - - + Default output display: Projektionsbildschirm: - + Select default theme: Standarddesign: - + Starting configuration process... Starte Konfiguration... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Dieser Assistent wird Ihnen helfen OpenLP für die erste Benutzung zu konfigurieren. Klicken sie »Weiter« um den Assistenten zu starten. + + + + Setting Up And Downloading + Konfiguriere und Herunterladen + + + + Please wait while OpenLP is set up and your data is downloaded. + Bitte warten Sie, während OpenLP eingerichtet wird und die Daten heruntergeladen werden. + + + + Setting Up + Konfiguriere + + + + Click the finish button to start OpenLP. + Klicken Sie »Abschließen« um OpenLP zu starten. + OpenLP.GeneralTab - + General Allgemein - + Monitors Bildschirme - + Select monitor for output display: Projektionsbildschirm: - + Display if a single screen Anzeige bei nur einem Bildschirm - + Application Startup Programmstart - + Show blank screen warning Warnung wenn Projektion deaktiviert wurde - + Automatically open the last service Zuletzt benutzten Ablauf beim Start laden - + Show the splash screen Zeige den Startbildschirm - + Application Settings Anwendungseinstellungen - + Prompt to save before starting a new service Geänderte Abläufe nicht ungefragt ersetzen - + Automatically preview next item in service Vorschau des nächsten Ablaufelements - Slide loop delay: - Schleifenverzögerung: - - - sec sek - + CCLI Details CCLI-Details - + SongSelect username: - SongSelect-Benutzername: + SongSelect-Benutzername: - + SongSelect password: - SongSelect-Passwort: + SongSelect-Passwort: - + Display Position Anzeigeposition - + X X - + Y Y - + Height Höhe - + Width Breite - + Override display position Anzeigeposition überschreiben - + Check for updates to OpenLP Prüfe nach Aktualisierungen + + + Unblank display when adding new live item + Neues Element hellt Anzeige automatisch auf + + + + Enable slide wrap-around + Nach letzter Folie wieder die Erste anzeigen + + + + Timed slide interval: + Automatischer Folienwechsel: + OpenLP.LanguageManager - + Language Sprache - + Please restart OpenLP to use your new language setting. Bitte starten Sie OpenLP neu, um die neue Spracheinstellung zu verwenden. @@ -1863,198 +2254,163 @@ Um den Einrichtungsassistent nicht auszuführen, drücken Sie »Fertig«. OpenLP.MainDisplay - + OpenLP Display - OpenLP-Anzeige + OpenLP-Anzeige OpenLP.MainWindow - + &File &Datei - + &Import &Importieren - + &Export &Exportieren - + &View &Ansicht - + M&ode An&sichtsmodus - + &Tools E&xtras - + &Settings &Einstellungen - + &Language &Sprache - + &Help &Hilfe - + Media Manager Medienverwaltung - + Service Manager Ablaufverwaltung - + Theme Manager Designverwaltung - + &New &Neu - - Ctrl+N - Strg+N - - - + &Open Ö&ffnen - + Open an existing service. Einen vorhandenen Ablauf öffnen. - - Ctrl+O - Strg+O - - - + &Save &Speichern - + Save the current service to disk. Den aktuellen Ablauf speichern. - - Ctrl+S - Strg+S - - - + Save &As... Speichern &unter... - + Save Service As Den aktuellen Ablauf unter einem neuen Namen speichern - + Save the current service under a new name. Den aktuellen Ablauf unter einem neuen Namen speichern. - - Ctrl+Shift+S - Strg+Umschalt+S - - - + E&xit &Beenden - + Quit OpenLP OpenLP beenden - - Alt+F4 - Alt+F4 - - - + &Theme &Design - + &Configure OpenLP... &Einstellungen... - + &Media Manager &Medienverwaltung - + Toggle Media Manager Die Medienverwaltung ein- bzw. ausblenden - + Toggle the visibility of the media manager. Die Medienverwaltung ein- bzw. ausblenden. - - F8 - F8 - - - + &Theme Manager &Designverwaltung - + Toggle Theme Manager Die Designverwaltung ein- bzw. ausblenden - + Toggle the visibility of the theme manager. Die Designverwaltung ein- bzw. ausblenden. - - - F10 - F10 - &Service Manager @@ -2072,166 +2428,141 @@ Um den Einrichtungsassistent nicht auszuführen, drücken Sie »Fertig«. - F9 - F9 + &Preview Panel + &Vorschau-Ansicht - &Preview Panel - &Vorschau-Ansicht - - - Toggle Preview Panel Die Vorschau ein- bzw. ausblenden - + Toggle the visibility of the preview panel. Die Vorschau ein- bzw. ausschalten. - - F11 - F11 - - - + &Live Panel - &Live-Ansicht + &Live-Ansicht - + Toggle Live Panel Die Live Ansicht ein- bzw. ausschalten - + Toggle the visibility of the live panel. Die Live Ansicht ein- bzw. ausschalten. - - F12 - F12 - - - + &Plugin List Er&weiterungen... - + List the Plugins Erweiterungen verwalten - - Alt+F7 - Alt+F7 - - - + &User Guide Benutzer&handbuch - + &About &Info über OpenLP - + More information about OpenLP Mehr Informationen über OpenLP - - Ctrl+F1 - Strg+F1 - - - + &Online Help &Online Hilfe - + &Web Site &Webseite - + Use the system language, if available. Die Systemsprache, sofern diese verfügbar ist, verwenden. - + Set the interface language to %s Die Sprache von OpenLP auf %s stellen - + Add &Tool... Hilfsprogramm hin&zufügen... - + Add an application to the list of tools. Eine Anwendung zur Liste der Hilfsprogramme hinzufügen. - + &Default &Standard - + Set the view mode back to the default. Den Ansichtsmodus auf Standardeinstellung setzen. - + &Setup &Einrichten - + Set the view mode to Setup. Die Ansicht für die Ablauferstellung optimieren. - + &Live &Live - + Set the view mode to Live. Die Ansicht für den Live-Betrieb optimieren. - + OpenLP Version Updated Neue OpenLP Version verfügbar - + OpenLP Main Display Blanked Hauptbildschirm abgedunkelt - + The Main Display has been blanked out Die Projektion ist momentan nicht aktiv. - + Default Theme: %s Standarddesign: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2240,61 +2571,66 @@ You can download the latest version from http://openlp.org/. Sie können die letzte Version auf http://openlp.org abrufen. - + English Please add the name of your language here Deutsch - + Configure &Shortcuts... &Tastenkürzel einrichten... - + Close OpenLP OpenLP beenden - + Are you sure you want to close OpenLP? Sind Sie sicher, dass OpenLP beendet werden soll? - - Print the current Service Order. - Drucke den aktuellen Ablauf. - - - - Ctrl+P - Strg+P - - - + Open &Data Folder... Öffne &Datenverzeichnis... - + Open the folder where songs, bibles and other data resides. Öffne das Verzeichnis, wo Lieder, Bibeln und andere Daten gespeichert sind. - + &Configure Display Tags &Formatvorlagen - + &Autodetect &Automatisch + + + Update Theme Images + Aktualisiere Design Bilder + + + + Update the preview images for all themes. + Aktualisiert die Vorschaubilder aller Designs. + + + + Print the current service. + Drucke den aktuellen Ablauf. + OpenLP.MediaManagerItem - + No Items Selected Keine Elemente ausgewählt. @@ -2304,75 +2640,92 @@ Sie können die letzte Version auf http://openlp.org abrufen. Zum &gewählten Ablaufelement hinzufügen - + You must select one or more items to preview. Zur Vorschau muss mindestens ein Elemente auswählt sein. - + You must select one or more items to send live. Zur Live Anzeige muss mindestens ein Element ausgewählt sein. - + You must select one or more items. Es muss mindestens ein Element ausgewählt sein. - + You must select an existing service item to add to. Sie müssen ein vorhandenes Ablaufelement auswählen. - + Invalid Service Item Ungültiges Ablaufelement - + You must select a %s service item. Sie müssen ein %s-Element im Ablaufs wählen. + + + No Search Results + Kein Suchergebnis + + + + You must select one or more items to add. + Sie müssen ein oder mehrer Element auswählen. + + + + Duplicate filename %s. +This filename is already in the list + Doppelter Dateiname %s. +Dateiname existiert bereits in der Liste. + OpenLP.PluginForm - + Plugin List Erweiterungen - + Plugin Details Erweiterungsdetails - + Status: Status: - + Active aktiv - + Inactive inaktiv - + %s (Inactive) %s (inaktiv) - + %s (Active) %s (aktiv) - + %s (Disabled) %s (deaktiviert) @@ -2380,12 +2733,12 @@ Sie können die letzte Version auf http://openlp.org abrufen. OpenLP.PrintServiceDialog - + Fit Page Auf Seite einpassen - + Fit Width An Breite anpassen @@ -2393,7 +2746,7 @@ Sie können die letzte Version auf http://openlp.org abrufen. OpenLP.PrintServiceForm - + Options Optionen @@ -2413,55 +2766,60 @@ Sie können die letzte Version auf http://openlp.org abrufen. Als HTML kopieren - + Zoom In Heranzoomen - + Zoom Out - Wegzoomen + Wegzoomen - + Zoom Original Original Zoom - + Other Options Andere Optionen - + Include slide text if available Drucke Folientext wenn verfügbar - + Include service item notes Drucke Element Notizen - + Include play length of media items Drucke Spiellänge von Medien Elementen - - Service Order Sheet + + Add page break before each text item + Einen Seitenumbruch nach jedem Text-Element einfügen + + + + Service Sheet Ablauf OpenLP.ScreenList - + Screen Bildschirm - + primary Primär @@ -2469,7 +2827,7 @@ Sie können die letzte Version auf http://openlp.org abrufen. OpenLP.ServiceItemEditForm - + Reorder Service Item Reihenfolge der Bilder ändern @@ -2477,217 +2835,257 @@ Sie können die letzte Version auf http://openlp.org abrufen. OpenLP.ServiceManager - - Load an existing service - Einen bestehenden Ablauf öffnen - - - - Save this service - Den aktuellen Ablauf speichern - - - - Select a theme for the service - Design für den Ablauf auswählen - - - + Move to &top Zum &Anfang schieben - + Move item to the top of the service. Das ausgewählte Element an den Anfang des Ablaufs verschieben. - + Move &up Nach &oben schieben - + Move item up one position in the service. Das ausgewählte Element um eine Position im Ablauf nach oben verschieben. - + Move &down Nach &unten schieben - + Move item down one position in the service. Das ausgewählte Element um eine Position im Ablauf nach unten verschieben. - + Move to &bottom Zum &Ende schieben - + Move item to the end of the service. Das ausgewählte Element an das Ende des Ablaufs verschieben. - + &Delete From Service Vom Ablauf &löschen - + Delete the selected item from the service. Das ausgewählte Element aus dem Ablaufs entfernen. - + &Add New Item &Neues Element hinzufügen - + &Add to Selected Item &Zum gewählten Element hinzufügen - + &Edit Item Element &bearbeiten - + &Reorder Item &Aufnahmeelement - + &Notes &Notizen - + &Change Item Theme &Design des Elements ändern - + File is not a valid service. The content encoding is not UTF-8. Die gewählte Datei ist keine gültige OpenLP Ablaufdatei. Der Inhalt ist nicht in UTF-8 kodiert. - + File is not a valid service. Die Datei ist keine gültige OpenLP Ablaufdatei. - + Missing Display Handler Fehlende Anzeigesteuerung - + Your item cannot be displayed as there is no handler to display it Dieses Element kann nicht angezeigt werden, da es keine Steuerung dafür gibt. - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dieses Element kann nicht angezeigt werden, da die zugehörige Erweiterung fehlt oder inaktiv ist. - + &Expand all Alle au&sklappen - + Expand all the service items. Alle Ablaufelemente ausklappen. - + &Collapse all Alle ei&nklappen - + Collapse all the service items. Alle Ablaufelemente einklappen. - + Open File Ablauf öffnen - + OpenLP Service Files (*.osz) OpenLP Ablaufdateien (*.osz) - + Moves the selection up the window. Ausgewähltes nach oben schieben - + Move up Nach oben - + Go Live Live - + Send the selected item to Live. Zeige das ausgewählte Element Live. - + Moves the selection down the window. Ausgewähltes nach unten schieben - + Modified Service Modifizierter Ablauf - - Notes: - Notizen: - - - + The current service has been modified. Would you like to save this service? Der momentane Ablauf wurde modifiziert. Möchten Sie ihn speichern? - + &Start Time &Startzeit - + Show &Preview &Vorschau - + Show &Live &Live + + + File could not be opened because it is corrupt. + Datei konnte nicht geöffnet werden, da sie fehlerhaft ist. + + + + Empty File + Leere Datei + + + + This service file does not contain any data. + Diese Datei enthält keine Daten. + + + + Corrupt File + Dehlerhaft Datei + + + + Untitled Service + Unbenannt + + + + Custom Service Notes: + Notizen zum Ablauf: + + + + Notes: + Notizen: + + + + Playing time: + Spiellänge: + + + + Load an existing service. + Einen bestehenden Ablauf öffnen. + + + + Save this service. + Den aktuellen Ablauf speichern. + + + + Select a theme for the service. + Design für den Ablauf auswählen. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + Entweder ist die Datei fehlerhaft oder sie ist keine OpenLP 2.0 Ablauf-Datei. + OpenLP.ServiceNoteForm - + Service Item Notes Elementnotiz @@ -2695,7 +3093,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.SettingsForm - + Configure OpenLP Konfiguriere OpenLP @@ -2703,221 +3101,276 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ShortcutListDialog - + Customize Shortcuts Tastenkürzel anpassen - + Action Aktion - + Shortcut Tastenkürzel - - Default: %s - Standard: %s - - - - Custom: - Benutzerdefiniert: - - - - None - Kein - - - + Duplicate Shortcut Belegtes Tastenkürzel - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - Das Tastenkürzel »%s« ist bereits einer anderen Aktion zugeordnet. Bitte wählen Sie ein anderes Tastenkürzel. + Das Tastenkürzel »%s« ist bereits einer anderen Aktion zugeordnet. Bitte wählen Sie ein anderes Tastenkürzel. - + Alternate Alternative + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Wählen Sie ein Aktion aus und klicken Sie eine der unteren Buttons um einen primären bzw. alternativen Tastenkürzel auf zuzeichnen. + + + + Default + Standard + + + + Custom + Sonderfolien + + + + Capture shortcut. + Tastenkürzel aufzeichen. + + + + Restore the default shortcut of this action. + Standard Tastenkürzel dieser Aktion wiederherstellen. + + + + Restore Default Shortcuts + Standard Tastenkürzel wiederherstellen + + + + Do you want to restore all shortcuts to their defaults? + Möchten Sie alle standard Tastenkürzel wiederherstellen? + OpenLP.SlideController - - Move to previous - Vorherige Folie anzeigen - - - - Move to next - Nächste Folie anzeigen - - - + Hide Verbergen - - Move to live - Zur Live Ansicht verschieben - - - - Start continuous loop - Endlosschleife starten - - - - Stop continuous loop - Endlosschleife stoppen - - - - Delay between slides in seconds - Pause zwischen den Folien in Sekunden - - - - Start playing media - Abspielen - - - + Go To Gehe zu - - Edit and reload song preview - Bearbeiten und Vorschau aktualisieren - - - + Blank Screen Anzeige abdunkeln - + Blank to Theme Design leeren - + Show Desktop Desktop anzeigen - + Previous Slide Vorherige Folie - + Next Slide Nächste Folie - + Previous Service - Vorheriger Ablauf + Vorheriges Element - + Next Service - Nächster Ablauf + Nächstes Element - + Escape Item Folie schließen + + + Move to previous. + Vorherige Folie anzeigen. + + + + Move to next. + Vorherige Folie anzeigen. + + + + Play Slides + Schleife + + + + Play Slides in Loop + Endlosschleife + + + + Play Slides to End + Schleife bis zum Ende + + + + Delay between slides in seconds. + Pause zwischen den Folien in Sekunden. + + + + Move to live. + Zur Live Ansicht verschieben. + + + + Add to Service. + Füge zum Ablauf hinzu. + + + + Edit and reload song preview. + Bearbeiten und Vorschau aktualisieren. + + + + Start playing media. + Abspielen. + OpenLP.SpellTextEdit - + Spelling Suggestions Rechtschreibvorschläge - + Formatting Tags - Formatvorlagen + Formatvorlagen + + + + Language: + Sprache: OpenLP.StartTimeForm - - Item Start Time - Element Startzeit - - - + Hours: Stunden: - - h - h - - - - m - m - - - + Minutes: Minuten: - + Seconds: Sekunden: + + + Item Start and Finish Time + Element Start- und Endzeit + + + + Start + Start + + + + Finish + Ende + + + + Length + Länge + + + + Time Validation Error + Ungültige Zeitangaben + + + + Finish time is set after the end of the media item + Die Endzeit ist nach dem Ende der Spielzeit gesetzt + + + + Start time is after the finish time of the media item + Die Startzeit ist nach der Endzeit gesetzt + OpenLP.ThemeForm - + Select Image Bild auswählen - + Theme Name Missing Designname fehlt - + There is no name for this theme. Please enter one. Es wurde kein Designname angegeben. Bitte benennen Sie das Design. - + Theme Name Invalid Designname ungültig - + Invalid theme name. Please enter one. Der Designname ist ungültig. Bitte ändern Sie diesen. - - (%d lines per slide) - (%d Zeilen pro Folie) + + (approximately %d lines per slide) + (ungefähr %d Zeilen pro Folie) @@ -2958,71 +3411,71 @@ Der Inhalt ist nicht in UTF-8 kodiert. Als &globalen Standard setzen - + %s (default) - %s (Standard) + %s (Standard) - + You must select a theme to edit. Zum Bearbeiten muss ein Design ausgewählt sein. - + You are unable to delete the default theme. Es ist nicht möglich das Standarddesign zu entfernen. - + You have not selected a theme. Es ist kein Design ausgewählt. - + Save Theme - (%s) Speicherort für »%s« - + Theme Exported Design exportiert - + Your theme has been successfully exported. Das Design wurde erfolgreich exportiert. - + Theme Export Failed Designexport fehlgeschlagen - + Your theme could not be exported due to an error. Dieses Design konnte aufgrund eines Fehlers nicht exportiert werden. - + Select Theme Import File OpenLP Designdatei importieren - + File is not a valid theme. The content encoding is not UTF-8. Die Datei ist keine gültige OpenLP Designdatei. Sie ist nicht in UTF-8 kodiert. - + File is not a valid theme. Diese Datei ist keine gültige OpenLP Designdatei. - + Theme %s is used in the %s plugin. - Das Design »%s« wird in der »%s« Erweiterung benutzt. + Das Design »%s« wird in der »%s« Erweiterung benutzt. @@ -3040,42 +3493,42 @@ Sie ist nicht in UTF-8 kodiert. Design &exportieren - + You must select a theme to rename. Es ist kein Design zur Umbenennung ausgewählt. - + Rename Confirmation Umbenennung bestätigen - + Rename %s theme? Soll das Design »%s« wirklich umbenennt werden? - + You must select a theme to delete. Es ist kein Design zum Löschen ausgewählt. - + Delete Confirmation Löschbestätigung - + Delete %s theme? - Soll das Design »%s« wirklich gelöscht werden? + Soll das Design »%s« wirklich gelöscht werden? - + Validation Error Validierungsfehler - + A theme with this name already exists. Ein Design mit diesem Namen existiert bereits. @@ -3105,7 +3558,7 @@ Sie ist nicht in UTF-8 kodiert. Exportiere Design - + OpenLP Themes (*.theme *.otz) OpenLP Designs (*.theme *.otz) @@ -3113,242 +3566,242 @@ Sie ist nicht in UTF-8 kodiert. OpenLP.ThemeWizard - + Theme Wizard Designassistent - + Welcome to the Theme Wizard - Willkommen beim Designassistenten + Willkommen beim Designassistenten - + Set Up Background Hintergrund einrichten - + Set up your theme's background according to the parameters below. Der Designhintergrund wird anhand der Parameter unten eingerichtet. - + Background type: Hintergrundart: - + Solid Color Füllfarbe - + Gradient Farbverlauf - + Color: Farbe: - + Gradient: Verlauf: - + Horizontal horizontal - + Vertical vertikal - + Circular radial - + Top Left - Bottom Right diagonal abwärts - + Bottom Left - Top Right diagonal aufwärts - + Main Area Font Details Schriftschnitt und -farbe - + Define the font and display characteristics for the Display text Die Schrift und die Anzeigeeigenschaften für die Hauptanzeigefläche einrichten - + Font: Schriftart: - + Size: Schriftgröße: - + Line Spacing: Zeilenabstand: - + &Outline: &Umrandung: - + &Shadow: S&chatten: - + Bold &fett - + Italic &kursiv - + Footer Area Font Details Fußzeile einrichten - + Define the font and display characteristics for the Footer text Die Schrift und die Anzeigeeigenschaften für die Fußzeile einrichten - + Text Formatting Details Weitere Formatierung - + Allows additional display formatting information to be defined Hier können zusätzliche Anzeigeeigenschaften eingerichtet werden. - + Horizontal Align: Horizontale Ausrichtung: - + Left links - + Right rechts - + Center zentriert - + Output Area Locations Anzeigeflächen - + Allows you to change and move the main and footer areas. Hier ist es möglich Hauptanzeigefläche und die Fußzeile zu verschieben. - + &Main Area &Hauptanzeigefläche - + &Use default location &Automatisch positionieren - + X position: Von links: - + px px - + Y position: Von oben: - + Width: Breite: - + Height: Höhe: - + Use default location Automatisch positionieren - + Save and Preview Vorschau und Speichern - + View the theme and save it replacing the current one or change the name to create a new theme Eine Vorschau anzeigen und das Design abspeichern - + Theme name: Designname: - + 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. Dieser Assistent hilft Ihnen Designs zu erstellen oder zu bearbeiten. Klicken Sie auf »Weiter« um den Hintergrund einzurichten. - + Transitions: Übergänge: - + &Footer Area &Fußzeile - + Edit Theme - %s Bearbeite Design - %s @@ -3356,42 +3809,42 @@ Sie ist nicht in UTF-8 kodiert. OpenLP.ThemesTab - + Global Theme Globales Standarddesign - + Theme Level Designstufe - + S&ong Level &Liedstufe - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Das im jeweiligen Lied eingestellte Design wird verwendet. Wenn für ein Lied kein Design festgelegt ist, wird das Ablaufdesign verwendet. Wenn dort auch kein Design festgelegt wurde, wird das Standarddesign benutzt. - + &Service Level &Ablaufstufe - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Das dem Ablauf zugewiesene Design wird genutzt. Das im Lied eingestellte Design wird ignoriert. Wenn dem Ablauf kein Design zugeordnet ist, dann wird das Standarddesign verwendet. - + &Global Level &Globale Stufe - + Use the global theme, overriding any themes associated with either the service or the songs. Das Standarddesign immer verwenden, unabhängig vom Lieddesign oder Ablaufdesign. @@ -3399,421 +3852,528 @@ Sie ist nicht in UTF-8 kodiert. OpenLP.Ui - + Error Fehler - + &Delete &Löschen - + Delete the selected item. Lösche den ausgewählten Eintrag. - + Move selection up one position. Ausgewählten Eintrag nach oben schieben. - + Move selection down one position. Ausgewählten Eintrag nach unten schieben. - + &Add &Hinzufügen - + Advanced Erweitert - + All Files Alle Dateien - + &Edit &Bearbeiten - + Import Import - + Live Live - + Load Öffnen - + New Neu - + OpenLP 2.0 OpenLP 2.0 - + Preview Vorschau - + Replace Background - Live-Hintergrund ersetzen - - - - Replace Live Background Live-Hintergrund ersetzen - + Reset Background Hintergrund zurücksetzen - - Reset Live Background - Live-Hintergrund zurücksetzen - - - + Service Ablauf - + &Vertical Align: &Vertikale Ausrichtung: - + Top oben - + Middle mittig - + Bottom unten - + Create a new service. - Erstelle neuen Ablauf + Erstelle neuen Ablauf. - + Length %s Länge %s - + New Service Neuer Ablauf - - Open Service - Öffne Ablauf - - - + Save Service Speicher Ablauf - + Start %s Start %s - + About Über - + Browse... Durchsuchen... - + Cancel Abbrechen - + CCLI number: - CCLI-Nummer: + CCLI-Nummer: - + Empty Field Leeres Feld - + Export Export - + pt Abbreviated font pointsize unit pt - + Image Bild - + Live Background Error - Live-Hintergrund Fehler + Live-Hintergrund Fehler - - Live Panel - Live - - - + New Theme Neues Design - + No File Selected Singular Keine Datei ausgewählt - + No Files Selected Plural Keine Dateien ausgewählt - + No Item Selected Singular Kein Element ausgewählt - + No Items Selected Plural Keine Elemente ausgewählt - + openlp.org 1.x openlp.org 1.x - - Preview Panel - Vorschau - - - - Print Service Order - Ablauf drucken - - - + s The abbreviated unit for seconds s - + Save && Preview Speichern && Vorschau - + Search Suchen - + You must select an item to delete. Sie müssen ein Element zum Löschen auswählen. - + You must select an item to edit. Sie müssen ein Element zum Bearbeiten auswählen. - + Theme Singular Design - + Themes Plural Designs - + Version Version - + Finished import. Importvorgang abgeschlossen. - + Format: Format: - + Importing Importieren - + Importing "%s"... »%s« wird importiert... - + Select Import Source Importquelle auswählen - + Select the import format and the location to import from. Wählen Sie das Importformat und das Quellverzeichnis aus. - + The openlp.org 1.x 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. - Der openlp.ort 1.x Importassistent wurde, wegen einem fehlenden Python Modul deaktiviert. Wenn Sie diesen Importassistenten nutzen wollen, dann müssen Sie das »python-sqlite« Modul installieren. + Der openlp.ort 1.x Importassistent wurde, wegen einem fehlenden Python Modul deaktiviert. Wenn Sie diesen Importassistenten nutzen wollen, dann müssen Sie das »python-sqlite« Modul installieren. - + Open %s File Öffne %s Datei - + %p% %p% - + Ready. Fertig. - + Starting import... - Beginne Import... + Beginne Import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Sie müssen wenigstens eine %s-Datei zum Importieren auswählen. - + Welcome to the Bible Import Wizard Willkommen beim Bibel Importassistenten - + Welcome to the Song Export Wizard Willkommen beim Lied Exportassistenten - + Welcome to the Song Import Wizard Willkommen beim Lied Importassistenten - + Author Singular Autor - + Authors Plural Autoren - + © Copyright symbol. © - + Song Book Singular Liederbuch - + Song Books Plural Liederbücher - + Song Maintenance Liedverwaltung - + Topic Singular Thema - + Topics Plural Themen + + + Continuous + Fortlaufend + + + + Default + Standard + + + + Display style: + Versangabenformat: + + + + File + Datei + + + + Help + Hilfe + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Folienformat: + + + + Live Toolbar + Live-Ansicht + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP läuft bereits. Möchten Sie trotzdem fortfahren? + + + + Settings + Einstellungen + + + + Tools + Extras + + + + Verse Per Slide + Verse pro Folie + + + + Verse Per Line + Verse pro Zeile + + + + View + Ansicht + + + + Duplicate Error + Duplikate gefunden + + + + Unsupported File + Nicht unterstütztes Dateiformat + + + + Title and/or verses not found + Titel und/oder Strophen nicht gefunden + + + + XML syntax error + XML Syntax Fehler + + + + View Mode + Ansichtsmodus + + + + Welcome to the Bible Upgrade Wizard + Willkommen zum Aktualisierungsssistent + + + + Open service. + Öffne einen Ablauf. + + + + Print Service + Ablauf drucken + + + + Replace live background. + Ersetzen den Live-Hintergrund. + + + + Reset live background. + Setze den Live-Hintergrund zurück. + + + + &Split + &Teilen + + + + Split a slide into two only if it does not fit on the screen as one slide. + Teile ein Folie dann, wenn sie als Ganzes nicht auf den Bildschirm passt. + OpenLP.displayTagDialog - + Configure Display Tags Konfiguriere Formatvorlagen @@ -3845,102 +4405,97 @@ Sie ist nicht in UTF-8 kodiert. - Load a new Presentation - Lade eine neue Präsentation + Load a new presentation. + Lade eine neue Präsentation. - - Delete the selected Presentation - Lösche die ausgewählte Präsentation + + Delete the selected presentation. + Lösche die ausgewählte Präsentation. - - Preview the selected Presentation - Zeige die ausgewählte Präsentation in der Vorschau + + Preview the selected presentation. + Zeige die ausgewählte Präsentation in der Vorschau. - - Send the selected Presentation live - Zeige die ausgewählte Präsentation Live + + Send the selected presentation live. + Zeige die ausgewählte Präsentation Live. - - Add the selected Presentation to the service - Füge die ausgewählte Präsentation zum Ablauf hinzu + + Add the selected presentation to the service. + Füge die ausgewählte Präsentation zum Ablauf hinzu. PresentationPlugin.MediaItem - + Select Presentation(s) Präsentationen auswählen - + Automatic automatisch - + Present using: Anzeigen mit: - + A presentation with that filename already exists. Eine Präsentation mit diesem Dateinamen existiert bereits. - + File Exists Datei existiert - - Unsupported File - Nicht unterstütztes Dateiformat - - - + This type of presentation is not supported. Präsentationsdateien dieses Dateiformats werden nicht unterstützt. - + Presentations (%s) Präsentationen (%s) - + Missing Presentation Fehlende Präsentation - + The Presentation %s no longer exists. Die Präsentation »%s« existiert nicht mehr. - + The Presentation %s is incomplete, please reload. - Die Präsentation »%s« ist nicht vollständig, bitte neu laden. + Die Präsentation »%s« ist nicht vollständig, bitte neu laden. PresentationPlugin.PresentationTab - + Available Controllers Verwendete Präsentationsprogramme - + Allow presentation application to be overriden Präsentationsprogramm kann ersetzt werden - + %s (unavailable) %s (nicht verfügbar) @@ -3948,71 +4503,174 @@ Sie ist nicht in UTF-8 kodiert. RemotePlugin - + <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. <strong>Erweiterung Fernsteuerung</strong><br />Die Erweiterung Fernsteuerung ermöglicht es eine laufende Version von OpenLP von einem anderen Computer über einen Web-Browser oder über die Fernsteuerungsoberfläche zu steuern. - + Remote name singular Fernsteuerung - + Remotes name plural Fernsteuerung - + Remote container title Fernsteuerung + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Fernsteuerung + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Bühnenmonitor + + + + Service Manager + Ablaufverwaltung + + + + Slide Controller + Live-Ansicht + + + + Alerts + Hinweise + + + + Search + Suchen + + + + Back + Zurück + + + + Refresh + Aktualisieren + + + + Blank + Schwarz + + + + Show + Zeigen + + + + Prev + Vorh. + + + + Next + Nächste + + + + Text + Text + + + + Show Alert + Hinweis zeigen + + + + Go Live + Live + + + + Add To Service + Füge zum Ablauf hinzu + + + + No Results + Kein Suchergebnis + + + + Options + Optionen + + RemotePlugin.RemoteTab - + Serve on IP address: Verfügbar über IP-Adresse: - + Port number: Port-Nummer: - + Server Settings - Server-Einstellungen + Server-Einstellungen + + + + Remote URL: + Fernsteuerung: + + + + Stage view URL: + Bühnenmonitor: SongUsagePlugin - + &Song Usage Tracking &Protokollierung - + &Delete Tracking Data &Protokoll löschen - + Delete song usage data up to a specified date. Das Protokoll ab einem bestimmten Datum löschen. - + &Extract Tracking Data &Protokoll extrahieren - + Generate a report on song usage. Einen Protokoll-Bericht erstellen. @@ -4027,53 +4685,58 @@ Sie ist nicht in UTF-8 kodiert. Setzt die Protokollierung aus. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Erweiterung Liedprotokollierung</strong><br />Diese Erweiterung zählt die Verwendung von Liedern in Veranstaltungen. - + SongUsage name singular Liedprotokollierung - + SongUsage name plural Liedprotokollierung - + SongUsage container title Liedprotokollierung + + + Song Usage + Liedprotokollierung + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Protokolldaten löschen - + Delete Selected Song Usage Events? Wollen sie die ausgewählten Ereignisse löschen? - + Are you sure you want to delete selected Song Usage data? Sind sie sicher, dass die ausgewählten Protokolldaten löschen wollen? - + Deletion Successful Löschung erfolgreich - + All requested data has been deleted successfully. Die Protokolldaten wurden erfolgreich gelöscht. @@ -4081,42 +4744,42 @@ Sie ist nicht in UTF-8 kodiert. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Protokoll extrahieren - + Select Date Range Zeitspanne - + to bis - + Report Location Zielverzeichnis für die Statistiken - + Output File Location Zielverzeichnis - + usage_detail_%s_%s.txt Aufrufprotokoll_%s_%s.txt - + Report Creation Statistik Erstellung - + Report %s has been successfully created. @@ -4125,12 +4788,12 @@ has been successfully created. wurde erfolgreich erstellt. - + Output Path Not Selected Kein Zielverzeichnis angegeben - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. Sie haben kein gültiges Zielverzeichnis für die Statistiken angegeben. Bitte geben Sie ein existierendes Verzeichnis an. @@ -4138,137 +4801,137 @@ wurde erfolgreich erstellt. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Lieder importieren. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Erweiterung Lieder</strong><br />Die Erweiterung Lieder ermöglicht die Darstellung und Verwaltung von Liedtexten. - + &Re-index Songs Liederverzeichnis &reindizieren - + Re-index the songs database to improve searching and ordering. Das reindizieren der Liederdatenbank kann die Suchergebnisse verbessern. - + Reindexing songs... Reindiziere die Liederdatenbank... - + Song name singular Lied - + Songs name plural Lieder - + Songs container title Lieder - + Arabic (CP-1256) Arabisch (CP-1256) - + Baltic (CP-1257) Baltisch (CP-1257) - + Central European (CP-1250) Zentraleuropäisch (CP-1250) - + Cyrillic (CP-1251) Kyrillisch (CP-1251) - + Greek (CP-1253) Griechisch (CP-1253) - + Hebrew (CP-1255) Hebräisch (CP-1255) - + Japanese (CP-932) Japanisch (CP-932) - + Korean (CP-949) Koreanisch (CP-949) - + Simplified Chinese (CP-936) Chinesisch, vereinfacht (CP-936) - + Thai (CP-874) Thailändisch (CP-874) - + Traditional Chinese (CP-950) Chinesisch, traditionell (CP-950) - + Turkish (CP-1254) Türkisch (CP-1254) - + Vietnam (CP-1258) Vietnamesisch (CP-1258) - + Western European (CP-1252) Westeuropäisch (CP-1252) - + Character Encoding Zeichenkodierung - + Please choose the character encoding. The encoding is responsible for the correct character representation. Bitte wählen sie die Zeichenkodierung. Diese ist für die korrekte Darstellung der Sonderzeichen verantwortlich. - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4278,75 +4941,75 @@ Gewöhnlich ist die vorausgewählte Einstellung korrekt. - + Exports songs using the export wizard. Exportiert Lieder mit dem Exportassistenten. - - - Add a new Song - Erstelle eine neues Lied - - Edit the selected Song - Bearbeite das ausgewählte Lied + Add a new song. + Erstelle eine neues Lied. - Delete the selected Song - Lösche das ausgewählte Lied + Edit the selected song. + Bearbeite das ausgewählte Lied. - Preview the selected Song - Zeige das ausgewählte Lied in der Vorschau + Delete the selected song. + Lösche das ausgewählte Lied. - Send the selected Song live - Zeige das ausgewählte Lied Live + Preview the selected song. + Zeige das ausgewählte Lied in der Vorschau. - Add the selected Song to the service - Füge das ausgewählte Lied zum Ablauf hinzu + Send the selected song live. + Zeige das ausgewählte Lied Live. + + + + Add the selected song to the service. + Füge das ausgewählte Lied zum Ablauf hinzu. SongsPlugin.AuthorsForm - + Author Maintenance Autorenverwaltung - + Display name: Anzeigename: - + First name: Vorname: - + Last name: Nachname: - + You need to type in the first name of the author. Der Vornamen des Autors muss angegeben werden. - + You need to type in the last name of the author. Der Nachname des Autors muss angegeben werden. - + You have not set a display name for the author, combine the first and last names? Es wurde kein Anzeigename für den Autor angegeben. Soll der Vor- und Nachname kombiniert werden? @@ -4354,451 +5017,477 @@ Einstellung korrekt. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Lied %d von %d wird importiert. + + The file does not have a valid extension. + Die Datei hat keine gültige Dateiendung. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Verwaltet durch %s SongsPlugin.EditSongForm - + Song Editor Lied bearbeiten - + &Title: &Titel: - + &Lyrics: Lied&text: - + Ed&it All &Alle Bearbeiten - + Title && Lyrics Titel && Liedtext - + &Add to Song &Hinzufügen - + &Remove &Entfernen - + A&dd to Song H&inzufügen - + R&emove &Entfernen - + New &Theme Neues &Design - + Copyright Information Copyright - + Comments Kommentare - + Theme, Copyright Info && Comments Design, Copyright && Kommentare - + Add Author Autor hinzufügen - + This author does not exist, do you want to add them? Dieser Autor existiert nicht. Soll er zur Datenbank hinzugefügt werden? - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - Es wurde kein gültiger Autor ausgewählt. Bitte wählen Sie einen Autor aus der Liste oder geben Sie einen neuen Autor ein und drücken die Schaltfläche »Autor hinzufügen«. + Es wurde kein gültiger Autor ausgewählt. Bitte wählen Sie einen Autor aus der Liste oder geben Sie einen neuen Autor ein und drücken die Schaltfläche »Autor hinzufügen«. - + Add Topic Thema hinzufügen - + This topic does not exist, do you want to add it? Dieses Thema existiert nicht. Soll es zur Datenbank hinzugefügt werden? - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Es wurde kein gültiges Thema ausgewählt. Bitte wählen Sie ein Thema aus der Liste oder geben Sie ein neues Thema ein und drücken die Schaltfläche »Thema hinzufügen«. - + Add Book Liederbuch hinzufügen - + This song book does not exist, do you want to add it? Dieses Liederbuch existiert nicht. Soll es zur Datenbank hinzugefügt werden? - + You need to type in a song title. Ein Liedtitel muss angegeben sein. - + You need to type in at least one verse. - Mindestens ein Vers muss angegeben sein. + Mindestens ein Vers muss angegeben sein. - + Warning Warnung - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Die Versfolge ist ungültig. Es gibt keinen Vers mit der Kennung »%s«. Gültige Werte sind »%s«. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? »%s« wurde nirgends in der Versfolge verwendet. Wollen Sie das Lied trotzdem so abspeichern? - + Alt&ernate title: &Zusatztitel: - + &Verse order: &Versfolge: - + &Manage Authors, Topics, Song Books &Datenbankeinträge verwalten - + Authors, Topics && Song Book Autoren, Themen && Liederbücher - + This author is already in the list. Dieser Autor ist bereits vorhanden. - + This topic is already in the list. Dieses Thema ist bereits vorhanden. - + Book: Liederbuch: - + Number: Nummer: - + You need to have an author for this song. - Das Lied benötigt mindestens einen Autor. + Das Lied benötigt mindestens einen Autor. - + You need to type some text in to the verse. - Das Lied benötigt mindestens einen Vers. + Die Strophe benötigt etwas Text. SongsPlugin.EditVerseForm - + Edit Verse Vers bearbeiten - + &Verse type: &Verstyp: - + &Insert &Einfügen + + + Split a slide into two by inserting a verse splitter. + Füge den Verstyp ein. + SongsPlugin.ExportWizardForm - + Song Export Wizard Lied Exportassistent - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Dieser Assistent wird Ihnen helfen Lieder in das freie und offene OpenLyrics Lobpreis Lieder Format zu exportieren. + Dieser Assistent wird Ihnen helfen Lieder in das freie und offene OpenLyrics Lobpreis Lieder Format zu exportieren. - + Select Songs Lieder auswählen - + Uncheck All Alle abwählen - + Check All Alle auswählen - + Select Directory Zielverzeichnis auswählen - - Select the directory you want the songs to be saved. - Geben Sie das Zielverzeichnis an. - - - + Directory: Verzeichnis: - + Exporting Exportiere - + Please wait while your songs are exported. Bitte warten Sie, während die Lieder exportiert werden. - + You need to add at least one Song to export. Sie müssen wenigstens ein Lied zum Exportieren auswählen. - + No Save Location specified Kein Zielverzeichnis angegeben - + Starting export... Beginne mit dem Export... - + Check the songs you want to export. Wählen Sie die Lieder aus, die Sie exportieren wollen. - + You need to specify a directory. Sie müssen ein Verzeichnis angeben. - + Select Destination Folder Zielverzeichnis wählen + + + Select the directory where you want the songs to be saved. + Geben Sie das Zielverzeichnis an. + SongsPlugin.ImportWizardForm - + Song Import Wizard Lied Importassistent - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Dieser Assistent hilft Ihnen Liedtexte aus verschiedenen Formaten zu importieren. Klicken Sie auf »Weiter« um das Quellformat auszuwählen, aus dem Sie importieren möchten. + Dieser Assistent hilft Ihnen Liedtexte aus verschiedenen Formaten zu importieren. Klicken Sie auf »Weiter« um das Quellformat auszuwählen, aus dem Sie importieren möchten. - + Add Files... Hinzufügen... - + Remove File(s) Entfernen - + Filename: Dateiname: - + Please wait while your songs are imported. Die Liedtexte werden importiert. Bitte warten. - + Select Document/Presentation Files Präsentationen/Textdokumente auswählen - + Generic Document/Presentation Präsentation/Textdokument - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Da OpenLP auf Ihrem Computer kein OpenOffice.org finden konnte ist der Import von »Songs of Fellowship«-Dateien nicht möglich. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Da OpenLP auf Ihrem Computer kein OpenOffice.org finden konnte ist der Import allgemeiner Präsentations- und Textdokumenten nicht möglich. - - - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. Leider können noch keine OpenLyric Lieder importiert werden, aber vielleicht klappts ja in der nächsten Version. - - Administered by %s - Verwaltet durch %s - - - + OpenLP 2.0 Databases OpenLP 2.0 Lieddatenbanken - + openlp.org v1.x Databases openlp.org 1.x Lieddatenbanken - + Words Of Worship Song Files »Words of Worship« Lieddateien - + Songs Of Fellowship Song Files Songs Of Fellowship Song Dateien - + SongBeamer Files SongBeamer Dateien - + SongShow Plus Song Files SongShow Plus Song Dateien - + You need to specify at least one document or presentation file to import from. Sie müssen wenigstens ein Dokument oder Präsentationsdatei auswählen, die importiert werden soll. - + Foilpresenter Song Files Foilpresenter Lied-Dateien + + + Copy + Kopieren + + + + Save to File + In Datei speichern + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Der Songs of Fellowship importer wurde deaktiviert, weil OpenLP nicht OpenOffice oder LibreOffice öffnen konnte. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Der Präsentation/Textdokument importer wurde deaktiviert, weil OpenLP nicht OpenOffice oder LibreOffice öffnen konnte. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Autoren, Themen und Bücher verwalten - - - + Titles Titel - + Lyrics Liedtext - + Delete Song(s)? Lied(er) löschen? - + CCLI License: CCLI-Lizenz: - + Entire Song Ganzes Lied - + Are you sure you want to delete the %n selected song(s)? Sind Sie sicher, dass die %n Lieder gelöscht werden sollen? + + + Maintain the lists of authors, topics and books. + Autoren, Themen und Bücher verwalten. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Keine gültige openlp.org 1.x Liederdatenbank. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Lied %d von %d wird importiert. + + Not a valid OpenLP 2.0 song database. + Keine gültige OpenLP 2.x Liederdatenbank. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exportiere »%s«... @@ -4806,22 +5495,22 @@ Einstellung korrekt. SongsPlugin.SongBookForm - + &Name: &Name: - + &Publisher: &Verlag: - + You need to type in a name for the book. Ein Buchname muss angegeben werden. - + Song Book Maintenance Liederbuch-Verwaltung @@ -4829,12 +5518,12 @@ Einstellung korrekt. SongsPlugin.SongExportForm - + Finished export. Export beendet. - + Your song export failed. Der Liedexport schlug fehl. @@ -4842,15 +5531,35 @@ Einstellung korrekt. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + Die folgenden Lieder konnten nicht importiert werden: + + + + Unable to open file + Konnte Datei nicht öffnen + + + + File not found + Datei nicht gefunden + + + + Cannot access OpenOffice or LibreOffice + Kann OpenOffice.org oder LibreOffice nicht öffnen + SongsPlugin.SongImportForm - + Your song import failed. Importvorgang fehlgeschlagen. @@ -4858,107 +5567,107 @@ Einstellung korrekt. SongsPlugin.SongMaintenanceForm - + Delete Author Autor löschen - + Are you sure you want to delete the selected author? Sind Sie sicher, dass der ausgewählten Autor gelöscht werden soll? - + Delete Topic Thema löschen - + Are you sure you want to delete the selected topic? Sind Sie sicher, dass das ausgewählte Thema gelöscht werden soll? - + Delete Book Liederbuch löschen - + Are you sure you want to delete the selected book? Sind Sie sicher, dass das ausgewählte Liederbuch gelöscht werden soll? - + Could not add your author. - Der Autor konnte nicht hinzugefügt werden. + Der Autor konnte nicht hinzugefügt werden. - + This author already exists. - Der Autor existiert bereits in der Datenbank. + Der Autor existiert bereits in der Datenbank. - + Could not add your topic. Das Thema konnte nicht hinzugefügt werden. - + This topic already exists. Das Thema existiert bereits in der Datenbank. - + Could not add your book. Das Liederbuch konnte nicht hinzugefügt werden. - + This book already exists. Das Liederbuch existiert bereits in der Datenbank. - + Could not save your changes. - Die Änderungen konnten nicht gespeichert werden. + Die Änderungen konnten nicht gespeichert werden. - + Could not save your modified topic, because it already exists. Das geänderte Thema konnte nicht gespeichert werden, da es bereits in der Datenbank existiert. - + This author cannot be deleted, they are currently assigned to at least one song. - Der Autor konnte nicht gelöscht werden, da er mindestens einem Lied zugeordnet ist. + Der Autor konnte nicht gelöscht werden, da er mindestens einem Lied zugeordnet ist. - + This topic cannot be deleted, it is currently assigned to at least one song. Das Thema konnte nicht gelöscht werden, da es mindestens einem Lied zugeordnet ist. - + This book cannot be deleted, it is currently assigned to at least one song. Das Liederbuch konnte nicht gelöscht werden, da es mindestens einem Lied zugeordnet ist. - + Could not save your modified author, because the author already exists. - Der geänderte Autor konnte nicht gespeichert werden, da es bereits in der Datenbank existiert. + Der geänderte Autor konnte nicht gespeichert werden, da es bereits in der Datenbank existiert. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - Der Autor »%s« existiert bereits. Sollen Lieder von »%s« »%s« als Autor setzen? + Der Autor »%s« existiert bereits. Sollen Lieder von »%s« »%s« als Autor setzen? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - Das Thema »%s« existiert bereits. Sollen Lieder zum Thema »%s« das Thema »%s« verwenden? + Das Thema »%s« existiert bereits. Sollen Lieder zum Thema »%s« das Thema »%s« verwenden? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? Das Liederbuch »%s« existiert bereits. Sollen Lieder aus »%s« dem Buch »%s« zugeordnet werden? @@ -4966,27 +5675,27 @@ Einstellung korrekt. SongsPlugin.SongsTab - + Songs Mode Lieder-Einstellungen - + Enable search as you type - Aktiviere Vorschlagssuche (search as you type) + Aktiviere Vorschlagssuche (search as you type) - + Display verses on live tool bar Versauswahl in der Live-Symbolleiste zeigen - + Update service from song edit - Bei Liedbearbeitung im Ablauf das Lied in der Datenbank aktualisieren + Lieder im Ablauf nach Bearbeitung aktualisieren - + Add missing songs when opening service Lieder aus Abläufen zur Datenbank hinzufügen @@ -4994,17 +5703,17 @@ Einstellung korrekt. SongsPlugin.TopicsForm - + Topic Maintenance Themenverwaltung - + Topic name: Thema: - + You need to type in a topic name. Ein Thema muss angegeben werden. @@ -5012,39 +5721,47 @@ Einstellung korrekt. SongsPlugin.VerseType - + Verse Strophe - + Chorus Refrain - + Bridge Bridge - + Pre-Chorus Überleitung - + Intro Intro - + Ending Ende - + Other Anderes + + ThemeTab + + + Themes + Designs + + diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index fbb56ea2e..55a5a5aca 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -3,23 +3,23 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? - + No Parameter Found - + No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? @@ -28,34 +28,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert - + Show an alert message. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - + Alert name singular - + Alerts name plural - + Alerts container title @@ -64,47 +64,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose - + New Alert - + You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: @@ -120,32 +120,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -153,51 +153,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Parse Error - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. @@ -205,122 +208,132 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - - - - - Import a Bible - - - - - Add a new Bible - - - - - Edit the selected Bible - - - - - Delete the selected Bible - - - - - Preview the selected Bible - - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - - - - + Bible name singular - + Bibles name plural - + Bibles container title - + No Book Found - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -332,7 +345,7 @@ Book Chapter:Verse-Chapter:Verse - + No Bibles Available @@ -340,45 +353,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display - + Only show new chapter numbers - - - Layout style: - - - - - Display style: - - Bible theme: - - - Verse Per Slide - - - - - Verse Per Line - - - - - Continuous - - No Brackets @@ -411,257 +399,333 @@ Changes do not affect verses already in the service. + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Bibleserver - + Permissions: - + Bible file: - - Testaments file: - - - - + Books file: - + Verses file: - - You have not specified a testaments file. Do you want to proceed with the import? + + openlp.org 1.x Bible Files - - openlp.org 1.x Bible Files + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick - + Find: - - Results: - - - - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - - Clear - - - - - Keep - - - - + Second: - + Scripture Reference + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -670,34 +734,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + You need to specify a version name for your Bible. + + + + + Bible Exists + + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + Starting Bible upgrade... + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - + Display footer @@ -705,192 +996,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: - + You need to type in a title. - + You need to add at least one slide - + Ed&it All + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title + + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - - - - - Add a new Image - - - - - Edit the selected Image - - - - - Delete the selected Image - - - - - Preview the selected Image - - - - - Send the selected Image live - - - - - Add the selected Image to the service - - - - + Image name singular - + Images name plural - + Images container title + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment @@ -898,38 +1136,38 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) - + You must select an image to delete. - + You must select an image to replace the background with. - + Missing Image(s) - + The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + There was a problem replacing your background, the image file "%s" no longer exists. @@ -937,98 +1175,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - - Media + name singular + + + + + Media name plural - + Media container title + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media - + You must select a media file to delete. - + You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Missing Media File - + The file %s no longer exists. - + Videos (%s);;Audio (%s);;%s (*) @@ -1036,12 +1274,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display - + Use Phonon for video playback @@ -1049,56 +1287,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + License - + Contribute - + build %s - + 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 below for more details. - + Project Lead %s @@ -1163,184 +1402,310 @@ Final Credit - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File + + + Advanced + + + + + Preview items when clicked in Media Manager + + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + <HTML here> + + + + + </and here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Error Occurred - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1348,23 +1713,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report - + Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1382,7 +1747,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1404,17 +1769,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename - + New File Name: - + File Copy @@ -1422,17 +1787,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1440,107 +1805,102 @@ Version: %s OpenLP.FirstTimeWizard - + Songs - + First Time Wizard - + Welcome to the First Time Wizard - + Activate required Plugins - + Select the Plugins you wish to use. - + Custom Text - + Bible - + Images - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + Default Settings - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1549,193 +1909,218 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - Slide loop delay: - - - - sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - + Check for updates to OpenLP + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1743,7 +2128,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display @@ -1751,188 +2136,153 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New - - Ctrl+N - - - - + &Open - + Open an existing service. - - Ctrl+O - - - - + &Save - + Save the current service to disk. - - Ctrl+S - - - - + Save &As... - + Save Service As - + Save the current service under a new name. - - Ctrl+Shift+S - - - - + E&xit - + Quit OpenLP - - Alt+F4 - - - - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - - F8 - - - - + &Theme Manager - + Toggle Theme Manager - - - Toggle the visibility of the theme manager. - - - F10 + Toggle the visibility of the theme manager. @@ -1952,227 +2302,207 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - - - - &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - - F11 - - - - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - - F12 - - - - + &Plugin List - + List the Plugins - - Alt+F7 - - - - + &User Guide - + &About - + More information about OpenLP - - Ctrl+F1 - - - - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s - + English Please add the name of your language here - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - - Print the current Service Order. - - - - - Ctrl+P - - - - + &Configure Display Tags - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected @@ -2182,75 +2512,91 @@ You can download the latest version from http://openlp.org/. - + You must select one or more items to preview. - + You must select one or more items to send live. - + You must select one or more items. - + You must select an existing service item to add to. - + Invalid Service Item - + You must select a %s service item. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive - + %s (Inactive) - + %s (Active) - + %s (Disabled) @@ -2258,12 +2604,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -2271,7 +2617,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options @@ -2291,55 +2637,60 @@ You can download the latest version from http://openlp.org/. - + Zoom In - + Zoom Out - + Zoom Original - + Other Options - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2347,7 +2698,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -2355,216 +2706,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + Move item to the top of the service. - + Move &up - + Move item up one position in the service. - + Move &down - + Move item down one position in the service. - + Move to &bottom - + Move item to the end of the service. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - - Notes: - - - - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes @@ -2572,7 +2963,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2580,220 +2971,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - - - - - Move to next - - - - + Hide - - Move to live - - - - - Edit and reload song preview - - - - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Start playing media - - - - + Go To - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2860,68 +3306,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. @@ -2941,47 +3387,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -2989,242 +3435,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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. - + Transitions: - + &Footer Area @@ -3232,42 +3678,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3275,421 +3721,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error - + About - + &Add - + Advanced - + All Files - + Bottom - + Browse... - + Cancel - + CCLI number: - + Create a new service. - + &Delete - + &Edit - + Empty Field - + Export - + pt Abbreviated font pointsize unit - + Image - + Import - + Length %s - + Live - + Live Background Error - - Live Panel - - - - + Load - + Middle - + New - + New Service - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural - + openlp.org 1.x - + OpenLP 2.0 - - Open Service - - - - + Preview - - Preview Panel - - - - - Print Service Order - - - - + Replace Background - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + s The abbreviated unit for seconds - + Save && Preview - + Search - + You must select an item to delete. - + You must select an item to edit. - + Save Service - + Service - + Start %s - + Theme Singular - + Themes Plural - + Top - + Version - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: - + Finished import. - + Format: - + Importing - + Importing "%s"... - + Select Import Source - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% - + Ready. - + Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural - + © Copyright symbol. - + Song Book Singular - + Song Books Plural - + Song Maintenance - + Topic Singular - + Topics Plural + + + Continuous + + + + + Default + + + + + Display style: + + + + + Duplicate Error + + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Unsupported File + + + + + Verse Per Slide + + + + + Verse Per Line + + + + + View + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + + + + Welcome to the Bible Upgrade Wizard + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3701,31 +4254,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3744,61 +4272,81 @@ The content encoding is not UTF-8. container title + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) - + Automatic - + Present using: - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3806,17 +4354,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3824,71 +4372,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + + + + + Slide Controller + + + + + Alerts + + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3903,53 +4554,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3957,54 +4613,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4012,211 +4668,211 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Song name singular - + Songs name plural - + Songs container title - + Exports songs using the export wizard. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance - + Display name: - + First name: - + Last name: - + You need to type in the first name of the author. - + You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? @@ -4224,190 +4880,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4415,259 +5079,277 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Check the songs you want to export. - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + You need to specify at least one document or presentation file to import from. - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + Foilpresenter Song Files + + + Copy + + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Titles - + Lyrics - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4675,22 +5357,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: - + &Publisher: - + You need to type in a name for the book. @@ -4698,12 +5380,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4711,15 +5393,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Cannot access OpenOffice or LibreOffice + + + + + Unable to open file + + + + + File not found + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4727,107 +5429,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified author, because the author already exists. - + Could not save your modified topic, because it already exists. - + Delete Author - + Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book - + Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4835,27 +5537,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4863,17 +5565,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: - + You need to type in a topic name. @@ -4881,39 +5583,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse - + Chorus - + Bridge - + Pre-Chorus - + Intro - + Ending - + Other + + ThemeTab + + + Themes + + + diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 0a2107ff9..fae148223 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? You have not entered a parameter to be replaced. Do you want to continue anyway? - + No Parameter Found No Parameter Found - + No Placeholder Found No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? The alert text does not contain '<>'. @@ -30,34 +30,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert &Alert - + Show an alert message. Show an alert message. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - + Alert name singular Alert - + Alerts name plural Alerts - + Alerts container title Alerts @@ -66,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message Alert Message - + Alert &text: Alert &text: - + &New &New - + &Save &Save - + Displ&ay Displ&ay - + Display && Cl&ose Display && Cl&ose - + New Alert New Alert - + You haven't specified any text for your alert. Please type in some text before clicking New. You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Font - + Font name: Font name: - + Font color: Font colour: - + Background color: Background colour: - + Font size: Font size: - + Alert timeout: Alert timeout: @@ -155,51 +155,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - Importing testaments... %s - - - - Importing testaments... done. - Importing testaments... done. - - - + Importing books... %s Importing books... %s - + Importing verses from %s... Importing verses from <book name>... Importing verses from %s... - + Importing verses... done. Importing verses... done. + + BiblePlugin + + + &Upgrade older Bibles + &Upgrade older Bibles + + + + Upgrade the Bible databases to the latest format. + Upgrade the Bible databases to the latest format. + + BiblePlugin.HTTPBible - + Download Error Download Error - + Parse Error Parse Error - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. @@ -207,123 +210,133 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. Bible not fully loaded. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + + Information + Information + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + BiblesPlugin - + &Bible &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - - - - Import a Bible - Import a Bible - - - - Add a new Bible - Add a new Bible - - - - Edit the selected Bible - Edit the selected Bible - - - - Delete the selected Bible - Delete the selected Bible - - - - Preview the selected Bible - Preview the selected Bible - - - - Send the selected Bible live - Send the selected Bible live - - - - Add the selected Bible to the service - Add the selected Bible to the service - - - + Bible name singular Bible - + Bibles name plural Bibles - + Bibles container title Bibles - + No Book Found No Book Found - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + + + Import a Bible. + Import a Bible. + + + + Add a new Bible. + Add a new Bible. + + + + Edit the selected Bible. + Edit the selected Bible. + + + + Delete the selected Bible. + Delete the selected Bible. + + + + Preview the selected Bible. + Preview the selected Bible. + + + + Send the selected Bible live. + Send the selected Bible live. + + + + Add the selected Bible to the service. + Add the selected Bible to the service. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + BiblesPlugin.BibleManager - + Scripture Reference Error Scripture Reference Error - + Web Bible cannot be used Web Bible cannot be used - + Text Search is not available with Web Bibles. Text Search is not available with Web Bibles. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + No Bibles Available No Bibles Available @@ -350,45 +363,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display Verse Display - + Only show new chapter numbers Only show new chapter numbers - - - Layout style: - Layout style: - - - - Display style: - Display style: - Bible theme: Bible theme: - - - Verse Per Slide - Verse Per Slide - - - - Verse Per Line - Verse Per Line - - - - Continuous - Continuous - No Brackets @@ -422,258 +410,334 @@ Changes do not affect verses already in the service. Display second Bible verses + + BiblesPlugin.BookNameDialog + + + Select Book Name + Select Book Name + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + Current name: + Current name: + + + + Corresponding name: + Corresponding name: + + + + Show Books From + Show Books From + + + + Old Testament + Old Testament + + + + New Testament + New Testament + + + + Apocrypha + Apocrypha + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + You need to select a book. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registering Bible and loading books... + + + + Registering Language... + Registering Language... + + + + Importing %s... + Importing <book name>... + Importing %s... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bible Import Wizard - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Web Download Web Download - + Location: Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Download Options - + Server: Server: - + Username: Username: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Optional) - + License Details License Details - + Set up the Bible's license details. Set up the Bible's license details. - + Version name: Version name: - + Copyright: Copyright: - + Please wait while your Bible is imported. Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. You need to specify a version name for your Bible. - + Bible Exists Bible Exists - + Your Bible import failed. Your Bible import failed. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + This Bible already exists. Please import a different Bible or first delete the existing one. This Bible already exists. Please import a different Bible or first delete the existing one. - - Starting Registering bible... - Starting Registering Bible... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Registered Bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - + Permissions: Permissions: - + CSV File CSV File - + Bibleserver Bibleserver - + Bible file: Bible file: - - Testaments file: - Testaments file: - - - + Books file: Books file: - + Verses file: Verses file: - - You have not specified a testaments file. Do you want to proceed with the import? - You have not specified a testaments file. Do you want to proceed with the import? - - - + openlp.org 1.x Bible Files openlp.org 1.x Bible Files + + + Registering Bible... + Registering Bible... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Select Language + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + Language: + Language: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + You need to choose a language. + BiblesPlugin.MediaItem - + Quick Quick - + Find: Find: - - Results: - Results: - - - + Book: Book: - + Chapter: Chapter: - + Verse: Verse: - + From: From: - + To: To: - + Text Search Text Search - - Clear - Clear - - - - Keep - Keep - - - + Second: Second: - + Scripture Reference Scripture Reference + + + Toggle to keep or clear the previous results. + Toggle to keep or clear the previous results. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... @@ -682,34 +746,267 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Select a Backup Directory + + + + Bible Upgrade Wizard + Bible Upgrade Wizard + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + Select Backup Directory + Select Backup Directory + + + + Please select a backup directory for your Bibles + Please select a backup directory for your Bibles + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + Please select a backup location for your Bibles. + Please select a backup location for your Bibles. + + + + Backup Directory: + Backup Directory: + + + + There is no need to backup my Bibles + There is no need to backup my Bibles + + + + Select Bibles + Select Bibles + + + + Please select the Bibles to upgrade + Please select the Bibles to upgrade + + + + Version name: + Version name: + + + + This Bible still exists. Please change the name or uncheck it. + This Bible still exists. Please change the name or uncheck it. + + + + Upgrading + Upgrading + + + + Please wait while your Bibles are upgraded. + Please wait while your Bibles are upgraded. + + + + You need to specify a Backup Directory for your Bibles. + You need to specify a Backup Directory for your Bibles. + + + + You need to specify a version name for your Bible. + You need to specify a version name for your Bible. + + + + Bible Exists + Bible Exists + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + There are no Bibles available to upgrade. + There are no Bibles available to upgrade. + + + + Upgrading Bible %s of %s: "%s" +Failed + Upgrading Bible %s of %s: "%s" +Failed + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + Download Error + Download Error + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + , %s failed + , %s failed + + + + Upgrading Bible(s): %s successful%s + Upgrading Bible(s): %s successful%s + + + + Upgrade failed. + Upgrade failed. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + Starting Bible upgrade... + Starting Bible upgrade... + + + + To upgrade your Web Bibles an Internet connection is required. + To upgrade your Web Bibles an Internet connection is required. + + + + Upgrading Bible %s of %s: "%s" +Complete + Upgrading Bible %s of %s: "%s" +Complete + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + Custom Slide + name singular + Custom Slide + + + + Custom Slides + name plural + Custom Slides + + + + Custom Slides + container title + Custom Slides + + + + Load a new custom slide. + Load a new custom slide. + + + + Import a custom slide. + Import a custom slide. + + + + Add a new custom slide. + Add a new custom slide. + + + + Edit the selected custom slide. + Edit the selected custom slide. + + + + Delete the selected custom slide. + Delete the selected custom slide. + + + + Preview the selected custom slide. + Preview the selected custom slide. + + + + Send the selected custom slide live. + Send the selected custom slide live. + + + + Add the selected custom slide to the service. + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display Custom Display - + Display footer Display footer @@ -717,192 +1014,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides Edit Custom Slides - + &Title: &Title: - + Add a new slide at bottom. Add a new slide at bottom. - + Edit the selected slide. Edit the selected slide. - + Edit all the slides at once. Edit all the slides at once. - - Split Slide - Split Slide - - - + Split a slide into two by inserting a slide splitter. Split a slide into two by inserting a slide splitter. - + The&me: The&me: - + &Credits: &Credits: - + You need to type in a title. You need to type in a title. - + You need to add at least one slide You need to add at least one slide - + Ed&it All Ed&it All + + + Insert Slide + Insert Slide + - CustomsPlugin + GeneralTab - - Import a Custom - Import a Custom - - - - Load a new Custom - Load a new Custom - - - - Add a new Custom - Add a new Custom - - - - Edit the selected Custom - Edit the selected Custom - - - - Delete the selected Custom - Delete the selected Custom - - - - Preview the selected Custom - Preview the selected Custom - - - - Send the selected Custom live - Send the selected Custom live - - - - Add the selected Custom to the service - Add the selected Custom to the service - - - - Custom - name singular - Custom - - - - Customs - name plural - Customs - - - - Custom - container title - Custom + + General + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - Load a new Image - - - - Add a new Image - Add a new Image - - - - Edit the selected Image - Edit the selected Image - - - - Delete the selected Image - Delete the selected Image - - - - Preview the selected Image - Preview the selected Image - - - - Send the selected Image live - Send the selected Image live - - - - Add the selected Image to the service - Add the selected Image to the service - - - + Image name singular Image - + Images name plural Images - + Images container title Images + + + Load a new image. + Load a new image. + + + + Add a new image. + Add a new image. + + + + Edit the selected image. + Edit the selected image. + + + + Delete the selected image. + Delete the selected image. + + + + Preview the selected image. + Preview the selected image. + + + + Send the selected image live. + Send the selected image live. + + + + Add the selected image to the service. + Add the selected image to the service. + ImagePlugin.ExceptionDialog - + Select Attachment Select Attachment @@ -910,39 +1154,39 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) Select Image(s) - + You must select an image to delete. You must select an image to delete. - + You must select an image to replace the background with. You must select an image to replace the background with. - + Missing Image(s) Missing Image(s) - + The following image(s) no longer exist: %s The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? The following image(s) no longer exist: %s Do you want to add the other images anyway? - + There was a problem replacing your background, the image file "%s" no longer exists. There was a problem replacing your background, the image file "%s" no longer exists. @@ -950,98 +1194,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - Load a new Media - Load a new Media - - - - Add a new Media - Add a new Media - - - - Edit the selected Media - Edit the selected Media - - - - Delete the selected Media - Delete the selected Media - - - - Preview the selected Media - Preview the selected Media - - - - Send the selected Media live - Send the selected Media live - - - - Add the selected Media to the service - Add the selected Media to the service - - - + Media name singular Media - + Media name plural Media - + Media container title Media + + + Load new media. + Load new media. + + + + Add new media. + Add new media. + + + + Edit the selected media. + Edit the selected media. + + + + Delete the selected media. + Delete the selected media. + + + + Preview the selected media. + Preview the selected media. + + + + Send the selected media live. + Send the selected media live. + + + + Add the selected media to the service. + Add the selected media to the service. + MediaPlugin.MediaItem - + Select Media Select Media - + You must select a media file to delete. You must select a media file to delete. - + Missing Media File Missing Media File - + The file %s no longer exists. The file %s no longer exists. - + You must select a media file to replace the background with. You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. There was a problem replacing your background, the media file "%s" no longer exists. - + Videos (%s);;Audio (%s);;%s (*) Videos (%s);;Audio (%s);;%s (*) @@ -1049,12 +1293,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display Media Display - + Use Phonon for video playback Use Phonon for video playback @@ -1062,62 +1306,59 @@ Do you want to add the other images anyway? OpenLP - + Image Files Image Files + + + Information + Information + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - + Credits Credits - + License Licence - + Contribute Contribute - + build %s build %s - + 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 free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; version 2 of the Licence. - + 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 below for more details. 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 below for more details. - + Project Lead %s @@ -1242,189 +1483,318 @@ Final Credit He has set us free. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings UI Settings - + Number of recent files to display: Number of recent files to display: - + Remember active media manager tab on startup Remember active media manager tab on startup - + Double-click to send items straight to live Double-click to send items straight to live - + Expand new service items on creation Expand new service items on creation - + Enable application exit confirmation Enable application exit confirmation - + Mouse Cursor Mouse Cursor - + Hide mouse cursor when over display window Hide mouse cursor when over display window - + Default Image Default Image - + Background color: Background colour: - + Image file: Image file: - + Open File Open File + + + Preview items when clicked in Media Manager + Preview items when clicked in Media Manager + + + + Advanced + Advanced + + + + Click to select a color. + Click to select a colour. + + + + Browse for an image file to display. + Browse for an image file to display. + + + + Revert to the default OpenLP logo. + Revert to the default OpenLP logo. + OpenLP.DisplayTagDialog - + Edit Selection Edit Selection - - Update - Update - - - + Description Description - + Tag Tag - + Start tag Start tag - + End tag End tag - - Default - Default - - - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML End HTML + + + Save + Save + OpenLP.DisplayTagTab - + Update Error Update Error - + Tag "n" already defined. Tag "n" already defined. - + Tag %s already defined. Tag %s already defined. + + + New Tag + New Tag + + + + </and here> + </and here> + + + + <HTML here> + <HTML here> + + + + OpenLP.DisplayTags + + + Red + Red + + + + Black + Black + + + + Blue + Blue + + + + Yellow + Yellow + + + + Green + Green + + + + Pink + Pink + + + + Orange + Orange + + + + Purple + Purple + + + + White + White + + + + Superscript + Superscript + + + + Subscript + Subscript + + + + Paragraph + Paragraph + + + + Bold + Bold + + + + Italics + Italics + + + + Underline + Underline + + + + Break + Break + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Error Occurred Error Occurred - + Send E-Mail Send E-Mail - + Save to File Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File Attach File - + Description characters to enter : %s Description characters to enter : %s @@ -1432,24 +1802,24 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Platform: %s - + Save Crash Report Save Crash Report - + Text files (*.txt *.log *.text) Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1480,7 +1850,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1515,17 +1885,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename File Rename - + New File Name: New File Name: - + File Copy File Copy @@ -1533,17 +1903,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Select Translation - + Choose the translation you'd like to use in OpenLP. Choose the translation you'd like to use in OpenLP. - + Translation: Translation: @@ -1551,102 +1921,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... Downloading %s... - + Download complete. Click the finish button to start OpenLP. Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... Enabling selected plugins... - + First Time Wizard First Time Wizard - + Welcome to the First Time Wizard Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selecting your initial options. - - - + Activate required Plugins Activate required Plugins - + Select the Plugins you wish to use. Select the Plugins you wish to use. - + Songs Songs - + Custom Text Custom Text - + Bible Bible - + Images Images - + Presentations Presentations - + Media (Audio and Video) Media (Audio and Video) - + Allow remote access Allow remote access - + Monitor Song Usage Monitor Song Usage - + Allow Alerts Allow Alerts - + No Internet Connection No Internet Connection - + Unable to detect an Internet connection. Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1659,198 +2024,223 @@ To re-run the First Time Wizard and import this sample data at a later stage, pr To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs Sample Songs - + Select and download public domain songs. Select and download public domain songs. - + Sample Bibles Sample Bibles - + Select and download free Bibles. Select and download free Bibles. - + Sample Themes Sample Themes - + Select and download sample themes. Select and download sample themes. - + Default Settings Default Settings - + Set up default settings to be used by OpenLP. Set up default settings to be used by OpenLP. - - Setting Up And Importing - Setting Up And Importing - - - - Please wait while OpenLP is set up and your data is imported. - Please wait while OpenLP is set up and your data is imported. - - - + Default output display: Default output display: - + Select default theme: Select default theme: - + Starting configuration process... Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + Setting Up And Downloading + Setting Up And Downloading + + + + Please wait while OpenLP is set up and your data is downloaded. + Please wait while OpenLP is set up and your data is downloaded. + + + + Setting Up + Setting Up + + + + Click the finish button to start OpenLP. + Click the finish button to start OpenLP. + OpenLP.GeneralTab - + General General - + Monitors Monitors - + Select monitor for output display: Select monitor for output display: - + Display if a single screen Display if a single screen - + Application Startup Application Startup - + Show blank screen warning Show blank screen warning - + Automatically open the last service Automatically open the last service - + Show the splash screen Show the splash screen - + Application Settings Application Settings - + Prompt to save before starting a new service Prompt to save before starting a new service - + Automatically preview next item in service Automatically preview next item in service - Slide loop delay: - Slide loop delay: - - - sec sec - + CCLI Details CCLI Details - + SongSelect username: SongSelect username: - + SongSelect password: SongSelect password: - + Display Position Display Position - + X X - + Y Y - + Height Height - + Width Width - + Override display position Override display position - + Check for updates to OpenLP Check for updates to OpenLP + + + Unblank display when adding new live item + Unblank display when adding new live item + + + + Enable slide wrap-around + Enable slide wrap-around + + + + Timed slide interval: + Timed slide interval: + OpenLP.LanguageManager - + Language Language - + Please restart OpenLP to use your new language setting. Please restart OpenLP to use your new language setting. @@ -1858,7 +2248,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display OpenLP Display @@ -1866,190 +2256,155 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &File - + &Import &Import - + &Export &Export - + &View &View - + M&ode M&ode - + &Tools &Tools - + &Settings &Settings - + &Language &Language - + &Help &Help - + Media Manager Media Manager - + Service Manager Service Manager - + Theme Manager Theme Manager - + &New &New - - Ctrl+N - Ctrl+N - - - + &Open &Open - + Open an existing service. Open an existing service. - - Ctrl+O - Ctrl+O - - - + &Save &Save - + Save the current service to disk. Save the current service to disk. - - Ctrl+S - Ctrl+S - - - + Save &As... Save &As... - + Save Service As Save Service As - + Save the current service under a new name. Save the current service under a new name. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit E&xit - + Quit OpenLP Quit OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Theme - + &Configure OpenLP... &Configure OpenLP... - + &Media Manager &Media Manager - + Toggle Media Manager Toggle Media Manager - + Toggle the visibility of the media manager. Toggle the visibility of the media manager. - - F8 - F8 - - - + &Theme Manager &Theme Manager - + Toggle Theme Manager Toggle Theme Manager - + Toggle the visibility of the theme manager. Toggle the visibility of the theme manager. - - - F10 - F10 - &Service Manager @@ -2067,146 +2422,121 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - F9 - - - &Preview Panel &Preview Panel - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - - F11 - F11 - - - + &Live Panel &Live Panel - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - - F12 - F12 - - - + &Plugin List &Plugin List - + List the Plugins List the Plugins - - Alt+F7 - Alt+F7 - - - + &User Guide &User Guide - + &About &About - + More information about OpenLP More information about OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Online Help - + &Web Site &Web Site - + Use the system language, if available. Use the system language, if available. - + Set the interface language to %s Set the interface language to %s - + Add &Tool... Add &Tool... - + Add an application to the list of tools. Add an application to the list of tools. - + &Default &Default - + Set the view mode back to the default. Set the view mode back to the default. - + &Setup &Setup - + Set the view mode to Setup. Set the view mode to Setup. - + &Live &Live - + Set the view mode to Live. Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2214,81 +2544,86 @@ You can download the latest version from http://openlp.org/. You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s - + English Please add the name of your language here English (United Kingdom) - + Configure &Shortcuts... Configure &Shortcuts... - + Close OpenLP Close OpenLP - + Are you sure you want to close OpenLP? Are you sure you want to close OpenLP? - - Print the current Service Order. - Print the current Service Order. - - - - Ctrl+P - Ctrl+P - - - + Open &Data Folder... Open &Data Folder... - + Open the folder where songs, bibles and other data resides. Open the folder where songs, Bibles and other data resides. - + &Configure Display Tags &Configure Display Tags - + &Autodetect &Autodetect + + + Update Theme Images + Update Theme Images + + + + Update the preview images for all themes. + Update the preview images for all themes. + + + + Print the current service. + Print the current service. + OpenLP.MediaManagerItem - + No Items Selected No Items Selected @@ -2298,75 +2633,92 @@ You can download the latest version from http://openlp.org/. &Add to selected Service Item - + You must select one or more items to preview. You must select one or more items to preview. - + You must select one or more items to send live. You must select one or more items to send live. - + You must select one or more items. You must select one or more items. - + You must select an existing service item to add to. You must select an existing service item to add to. - + Invalid Service Item Invalid Service Item - + You must select a %s service item. You must select a %s service item. + + + You must select one or more items to add. + You must select one or more items to add. + + + + No Search Results + No Search Results + + + + Duplicate filename %s. +This filename is already in the list + Duplicate filename %s. +This filename is already in the list + OpenLP.PluginForm - + Plugin List Plugin List - + Plugin Details Plugin Details - + Status: Status: - + Active Active - + Inactive Inactive - + %s (Inactive) %s (Inactive) - + %s (Active) %s (Active) - + %s (Disabled) %s (Disabled) @@ -2374,12 +2726,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page Fit Page - + Fit Width Fit Width @@ -2387,7 +2739,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options Options @@ -2407,55 +2759,60 @@ You can download the latest version from http://openlp.org/. Copy as HTML - + Zoom In Zoom In - + Zoom Out Zoom Out - + Zoom Original Zoom Original - + Other Options Other Options - + Include slide text if available Include slide text if available - + Include service item notes Include service item notes - + Include play length of media items Include play length of media items - - Service Order Sheet - Service Order Sheet + + Add page break before each text item + Add page break before each text item + + + + Service Sheet + Service Sheet OpenLP.ScreenList - + Screen Screen - + primary primary @@ -2463,7 +2820,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item Reorder Service Item @@ -2471,217 +2828,257 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Load an existing service - - - - Save this service - Save this service - - - - Select a theme for the service - Select a theme for the service - - - + Move to &top Move to &top - + Move item to the top of the service. Move item to the top of the service. - + Move &up Move &up - + Move item up one position in the service. Move item up one position in the service. - + Move &down Move &down - + Move item down one position in the service. Move item down one position in the service. - + Move to &bottom Move to &bottom - + Move item to the end of the service. Move item to the end of the service. - + &Delete From Service &Delete From Service - + Delete the selected item from the service. Delete the selected item from the service. - + &Add New Item &Add New Item - + &Add to Selected Item &Add to Selected Item - + &Edit Item &Edit Item - + &Reorder Item &Reorder Item - + &Notes &Notes - + &Change Item Theme &Change Item Theme - + File is not a valid service. The content encoding is not UTF-8. File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. File is not a valid service. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all &Expand all - + Expand all the service items. Expand all the service items. - + &Collapse all &Collapse all - + Collapse all the service items. Collapse all the service items. - + Open File Open File - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) - + Moves the selection down the window. Moves the selection down the window. - + Move up Move up - + Moves the selection up the window. Moves the selection up the window. - + Go Live Go Live - + Send the selected item to Live. Send the selected item to Live. - + Modified Service Modified Service - - Notes: - Notes: - - - + &Start Time &Start Time - + Show &Preview Show &Preview - + Show &Live Show &Live - + The current service has been modified. Would you like to save this service? The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + File could not be opened because it is corrupt. + + + + Empty File + Empty File + + + + This service file does not contain any data. + This service file does not contain any data. + + + + Corrupt File + Corrupt File + + + + Custom Service Notes: + Custom Service Notes: + + + + Notes: + Notes: + + + + Playing time: + Playing time: + + + + Untitled Service + Untitled Service + + + + Load an existing service. + Load an existing service. + + + + Save this service. + Save this service. + + + + Select a theme for the service. + Select a theme for the service. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + This file is either corrupt or it is not an OpenLP 2.0 service file. + OpenLP.ServiceNoteForm - + Service Item Notes Service Item Notes @@ -2689,7 +3086,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP Configure OpenLP @@ -2697,221 +3094,276 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts Customise Shortcuts - + Action Action - + Shortcut Shortcut - - Default: %s - Default: %s - - - - Custom: - Custom: - - - - None - None - - - + Duplicate Shortcut Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + Default + Default + + + + Custom + Custom + + + + Capture shortcut. + Capture shortcut. + + + + Restore the default shortcut of this action. + Restore the default shortcut of this action. + + + + Restore Default Shortcuts + Restore Default Shortcuts + + + + Do you want to restore all shortcuts to their defaults? + Do you want to restore all shortcuts to their defaults? + OpenLP.SlideController - - Move to previous - Move to previous - - - - Move to next - Move to next - - - + Hide Hide - - Move to live - Move to live - - - - Start continuous loop - Start continuous loop - - - - Stop continuous loop - Stop continuous loop - - - - Delay between slides in seconds - Delay between slides in seconds - - - - Start playing media - Start playing media - - - + Go To Go To - - Edit and reload song preview - Edit and reload song preview - - - + Blank Screen Blank Screen - + Blank to Theme Blank to Theme - + Show Desktop Show Desktop - + Previous Slide Previous Slide - + Next Slide Next Slide - + Previous Service Previous Service - + Next Service Next Service - + Escape Item Escape Item + + + Move to previous. + Move to previous. + + + + Move to next. + Move to next. + + + + Play Slides + Play Slides + + + + Play Slides in Loop + Play Slides in Loop + + + + Play Slides to End + Play Slides to End + + + + Delay between slides in seconds. + Delay between slides in seconds. + + + + Move to live. + Move to live. + + + + Add to Service. + Add to Service. + + + + Edit and reload song preview. + Edit and reload song preview. + + + + Start playing media. + Start playing media. + OpenLP.SpellTextEdit - + Spelling Suggestions Spelling Suggestions - + Formatting Tags Formatting Tags + + + Language: + Language: + OpenLP.StartTimeForm - - Item Start Time - Item Start Time - - - + Hours: Hours: - - h - h - - - - m - m - - - + Minutes: Minutes: - + Seconds: Seconds: + + + Item Start and Finish Time + Item Start and Finish Time + + + + Start + Start + + + + Finish + Finish + + + + Length + Length + + + + Time Validation Error + Time Validation Error + + + + Finish time is set after the end of the media item + Finish time is set after the end of the media item + + + + Start time is after the finish time of the media item + Start time is after the finish time of the media item + OpenLP.ThemeForm - + Select Image Select Image - + Theme Name Missing Theme Name Missing - + There is no name for this theme. Please enter one. There is no name for this theme. Please enter one. - + Theme Name Invalid Theme Name Invalid - + Invalid theme name. Please enter one. Invalid theme name. Please enter one. - - (%d lines per slide) - (%d lines per slide) + + (approximately %d lines per slide) + (approximately %d lines per slide) @@ -2977,69 +3429,69 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -3059,47 +3511,47 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. You must select a theme to rename. - + Rename Confirmation Rename Confirmation - + Rename %s theme? Rename %s theme? - + You must select a theme to delete. You must select a theme to delete. - + Delete Confirmation Delete Confirmation - + Delete %s theme? Delete %s theme? - + Validation Error Validation Error - + A theme with this name already exists. A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) OpenLP Themes (*.theme *.otz) @@ -3107,242 +3559,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard Theme Wizard - + Welcome to the Theme Wizard Welcome to the Theme Wizard - + Set Up Background Set Up Background - + Set up your theme's background according to the parameters below. Set up your theme's background according to the parameters below. - + Background type: Background type: - + Solid Color Solid Colour - + Gradient Gradient - + Color: Colour: - + Gradient: Gradient: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Top Left - Bottom Right - + Bottom Left - Top Right Bottom Left - Top Right - + Main Area Font Details Main Area Font Details - + Define the font and display characteristics for the Display text Define the font and display characteristics for the Display text - + Font: Font: - + Size: Size: - + Line Spacing: Line Spacing: - + &Outline: &Outline: - + &Shadow: &Shadow: - + Bold Bold - + Italic Italic - + Footer Area Font Details Footer Area Font Details - + Define the font and display characteristics for the Footer text Define the font and display characteristics for the Footer text - + Text Formatting Details Text Formatting Details - + Allows additional display formatting information to be defined Allows additional display formatting information to be defined - + Horizontal Align: Horizontal Align: - + Left Left - + Right Right - + Center Centre - + Output Area Locations Output Area Locations - + Allows you to change and move the main and footer areas. Allows you to change and move the main and footer areas. - + &Main Area &Main Area - + &Use default location &Use default location - + X position: X position: - + px px - + Y position: Y position: - + Width: Width: - + Height: Height: - + Use default location Use default location - + Save and Preview Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: Theme name: - + 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. 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. - + Transitions: Transitions: - + &Footer Area &Footer Area - + Edit Theme - %s Edit Theme - %s @@ -3350,42 +3802,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Global Theme - + Theme Level Theme Level - + S&ong Level S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Use the global theme, overriding any themes associated with either the service or the songs. @@ -3393,421 +3845,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error Error - + &Delete &Delete - + Delete the selected item. Delete the selected item. - + Move selection up one position. Move selection up one position. - + Move selection down one position. Move selection down one position. - + &Add &Add - + Advanced Advanced - + All Files All Files - + Create a new service. Create a new service. - + &Edit &Edit - + Import Import - + Length %s Length %s - + Live Live - + Load Load - + New New - + New Service New Service - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Open Service - - - + Preview Preview - + Replace Background Replace Background - - Replace Live Background - Replace Live Background - - - + Reset Background Reset Background - - Reset Live Background - Reset Live Background - - - + Save Service Save Service - + Service Service - + Start %s Start %s - + &Vertical Align: &Vertical Align: - + Top Top - + Middle Middle - + Bottom Bottom - + About About - + Browse... Browse... - + Cancel Cancel - + CCLI number: CCLI number: - + Empty Field Empty Field - + Export Export - + pt Abbreviated font pointsize unit pt - + Image Image - + Live Background Error Live Background Error - - Live Panel - Live Panel - - - + New Theme New Theme - + No File Selected Singular No File Selected - + No Files Selected Plural No Files Selected - + No Item Selected Singular No Item Selected - + No Items Selected Plural No Items Selected - + openlp.org 1.x openlp.org 1.x - - Preview Panel - Preview Panel - - - - Print Service Order - Print Service Order - - - + s The abbreviated unit for seconds s - + Save && Preview Save && Preview - + Search Search - + You must select an item to delete. You must select an item to delete. - + You must select an item to edit. You must select an item to edit. - + Theme Singular Theme - + Themes Plural Themes - + Version Version - + Finished import. Finished import. - + Format: Format: - + Importing Importing - + Importing "%s"... Importing "%s"... - + Select Import Source Select Import Source - + Select the import format and the location to import from. Select the import format and the location to import from. - + The openlp.org 1.x 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. The openlp.org 1.x 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. - + Open %s File Open %s File - + %p% %p% - + Ready. Ready. - + Starting import... Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong You need to specify at least one %s file to import from. - + Welcome to the Bible Import Wizard Welcome to the Bible Import Wizard - + Welcome to the Song Export Wizard Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard Welcome to the Song Import Wizard - + Author Singular Author - + Authors Plural Authors - + © Copyright symbol. © - + Song Book Singular Song Book - + Song Books Plural Song Books - + Song Maintenance Song Maintenance - + Topic Singular Topic - + Topics Plural Topics + + + Continuous + Continuous + + + + Default + Default + + + + Display style: + Display style: + + + + File + File + + + + Help + Help + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Layout style: + + + + Live Toolbar + Live Toolbar + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP is already running. Do you wish to continue? + + + + Settings + Settings + + + + Tools + Tools + + + + Verse Per Slide + Verse Per Slide + + + + Verse Per Line + Verse Per Line + + + + View + View + + + + Duplicate Error + Duplicate Error + + + + Unsupported File + Unsupported File + + + + Title and/or verses not found + Title and/or verses not found + + + + XML syntax error + XML syntax error + + + + View Mode + View Mode + + + + Open service. + Open service. + + + + Print Service + Print Service + + + + Replace live background. + Replace live background. + + + + Reset live background. + Reset live background. + + + + Welcome to the Bible Upgrade Wizard + Welcome to the Bible Upgrade Wizard + + + + &Split + &Split + + + + Split a slide into two only if it does not fit on the screen as one slide. + Split a slide into two only if it does not fit on the screen as one slide. + OpenLP.displayTagDialog - + Configure Display Tags Configure Display Tags @@ -3819,31 +4378,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - Load a new Presentation - - - - Delete the selected Presentation - Delete the selected Presentation - - - - Preview the selected Presentation - Preview the selected Presentation - - - - Send the selected Presentation live - Send the selected Presentation live - - - - Add the selected Presentation to the service - Add the selected Presentation to the service - Presentation @@ -3862,61 +4396,81 @@ The content encoding is not UTF-8. container title Presentations + + + Load a new presentation. + Load a new presentation. + + + + Delete the selected presentation. + Delete the selected presentation. + + + + Preview the selected presentation. + Preview the selected presentation. + + + + Send the selected presentation live. + Send the selected presentation live. + + + + Add the selected presentation to the service. + Add the selected presentation to the service. + PresentationPlugin.MediaItem - + Select Presentation(s) Select Presentation(s) - + Automatic Automatic - + Present using: Present using: - + File Exists File Exists - + A presentation with that filename already exists. A presentation with that filename already exists. - - Unsupported File - Unsupported File - - - + This type of presentation is not supported. This type of presentation is not supported. - + Presentations (%s) Presentations (%s) - + Missing Presentation Missing Presentation - + The Presentation %s no longer exists. The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. The Presentation %s is incomplete, please reload. @@ -3924,17 +4478,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Available Controllers - + Allow presentation application to be overriden Allow presentation application to be overriden - + %s (unavailable) %s (unavailable) @@ -3942,71 +4496,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. <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. - + Remote name singular Remote - + Remotes name plural Remotes - + Remote container title Remote + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Remote + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Stage View + + + + Service Manager + Service Manager + + + + Slide Controller + Slide Controller + + + + Alerts + Alerts + + + + Search + Search + + + + Back + Back + + + + Refresh + Refresh + + + + Blank + Blank + + + + Show + Show + + + + Prev + Prev + + + + Next + Next + + + + Text + Text + + + + Show Alert + Show Alert + + + + Go Live + Go Live + + + + Add To Service + Add To Service + + + + No Results + No Results + + + + Options + Options + + RemotePlugin.RemoteTab - + Serve on IP address: Serve on IP address: - + Port number: Port number: - + Server Settings Server Settings + + + Remote URL: + Remote URL: + + + + Stage view URL: + Stage view URL: + SongUsagePlugin - + &Song Usage Tracking &Song Usage Tracking - + &Delete Tracking Data &Delete Tracking Data - + Delete song usage data up to a specified date. Delete song usage data up to a specified date. - + &Extract Tracking Data &Extract Tracking Data - + Generate a report on song usage. Generate a report on song usage. @@ -4021,53 +4678,58 @@ The content encoding is not UTF-8. Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular SongUsage - + SongUsage name plural SongUsage - + SongUsage container title SongUsage + + + Song Usage + Song Usage + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Delete Song Usage Data - + Delete Selected Song Usage Events? Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? Are you sure you want to delete selected Song Usage data? - + Deletion Successful Deletion Successful - + All requested data has been deleted successfully. All requested data has been deleted successfully. @@ -4075,42 +4737,42 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location - + Output File Location Output File Location - + usage_detail_%s_%s.txt usage_detail_%s_%s.txt - + Report Creation Report Creation - + Report %s has been successfully created. @@ -4119,12 +4781,12 @@ has been successfully created. has been successfully created. - + Output Path Not Selected Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4132,160 +4794,130 @@ has been successfully created. SongsPlugin - + &Song &Song - + Import songs using the import wizard. Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs &Re-index Songs - + Re-index the songs database to improve searching and ordering. Re-index the songs database to improve searching and ordering. - + Reindexing songs... Reindexing songs... - - Add a new Song - Add a new Song - - - - Edit the selected Song - Edit the selected Song - - - - Delete the selected Song - Delete the selected Song - - - - Preview the selected Song - Preview the selected Song - - - - Send the selected Song live - Send the selected Song live - - - - Add the selected Song to the service - Add the selected Song to the service - - - + Song name singular Song - + Songs name plural Songs - + Songs container title Songs - + Arabic (CP-1256) Arabic (CP-1256) - + Baltic (CP-1257) Baltic (CP-1257) - + Central European (CP-1250) Central European (CP-1250) - + Cyrillic (CP-1251) Cyrillic (CP-1251) - + Greek (CP-1253) Greek (CP-1253) - + Hebrew (CP-1255) Hebrew (CP-1255) - + Japanese (CP-932) Japanese (CP-932) - + Korean (CP-949) Korean (CP-949) - + Simplified Chinese (CP-936) Simplified Chinese (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Traditional Chinese (CP-950) - + Turkish (CP-1254) Turkish (CP-1254) - + Vietnam (CP-1258) Vietnam (CP-1258) - + Western European (CP-1252) Western European (CP-1252) - + Character Encoding Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4294,52 +4926,82 @@ for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Please choose the character encoding. The encoding is responsible for the correct character representation. - + Exports songs using the export wizard. Exports songs using the export wizard. + + + Add a new song. + Add a new song. + + + + Edit the selected song. + Edit the selected song. + + + + Delete the selected song. + Delete the selected song. + + + + Preview the selected song. + Preview the selected song. + + + + Send the selected song live. + Send the selected song live. + + + + Add the selected song to the service. + Add the selected song to the service. + SongsPlugin.AuthorsForm - + Author Maintenance Author Maintenance - + Display name: Display name: - + First name: First name: - + Last name: Last name: - + You need to type in the first name of the author. You need to type in the first name of the author. - + You need to type in the last name of the author. You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? You have not set a display name for the author, combine the first and last names? @@ -4347,190 +5009,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Importing song %d of %d + + The file does not have a valid extension. + The file does not have a valid extension. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Administered by %s SongsPlugin.EditSongForm - + Song Editor Song Editor - + &Title: &Title: - + Alt&ernate title: Alt&ernate title: - + &Lyrics: &Lyrics: - + &Verse order: &Verse order: - + Ed&it All Ed&it All - + Title && Lyrics Title && Lyrics - + &Add to Song &Add to Song - + &Remove &Remove - + &Manage Authors, Topics, Song Books &Manage Authors, Topics, Song Books - + A&dd to Song A&dd to Song - + R&emove R&emove - + Book: Book: - + Number: Number: - + Authors, Topics && Song Book Authors, Topics && Song Book - + New &Theme New &Theme - + Copyright Information Copyright Information - + Comments Comments - + Theme, Copyright Info && Comments Theme, Copyright Info && Comments - + Add Author Add Author - + This author does not exist, do you want to add them? This author does not exist, do you want to add them? - + This author is already in the list. This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic Add Topic - + This topic does not exist, do you want to add it? This topic does not exist, do you want to add it? - + This topic is already in the list. This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. You need to type in a song title. - + You need to type in at least one verse. You need to type in at least one verse. - + Warning Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book Add Book - + This song book does not exist, do you want to add it? This song book does not exist, do you want to add it? - + You need to have an author for this song. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. @@ -4538,260 +5208,278 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse Edit Verse - + &Verse type: &Verse type: - + &Insert &Insert + + + Split a slide into two by inserting a verse splitter. + Split a slide into two by inserting a verse splitter. + SongsPlugin.ExportWizardForm - + Song Export Wizard Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs Select Songs - + Uncheck All Uncheck All - + Check All Check All - + Select Directory Select Directory - - Select the directory you want the songs to be saved. - Select the directory where you want the songs to be saved. - - - + Directory: Directory: - + Exporting Exporting - + Please wait while your songs are exported. Please wait while your songs are exported. - + You need to add at least one Song to export. You need to add at least one Song to export. - + No Save Location specified No Save Location specified - + Starting export... Starting export... - + Check the songs you want to export. Check the songs you want to export. - + You need to specify a directory. You need to specify a directory. - + Select Destination Folder Select Destination Folder + + + Select the directory where you want the songs to be saved. + Select the directory where you want the songs to be saved. + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files Select Document/Presentation Files - + Song Import Wizard Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation Generic Document/Presentation - + Filename: Filename: - + Add Files... Add Files... - + Remove File(s) Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - + Please wait while your songs are imported. Please wait while your songs are imported. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - Administered by %s - Administered by %s - - - + OpenLP 2.0 Databases OpenLP 2.0 Databases - + openlp.org v1.x Databases openlp.org v1.x Databases - + Words Of Worship Song Files Words Of Worship Song Files - + Songs Of Fellowship Song Files Songs Of Fellowship Song Files - + SongBeamer Files SongBeamer Files - + SongShow Plus Song Files SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files Foilpresenter Song Files + + + Copy + Copy + + + + Save to File + Save to File + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Maintain the lists of authors, topics and books - - - + Titles Titles - + Lyrics Lyrics - + Delete Song(s)? Delete Song(s)? - + CCLI License: CCLI License: - + Entire Song Entire Song - + Are you sure you want to delete the %n selected song(s)? Are you sure you want to delete the %n selected song? Are you sure you want to delete the %n selected songs? + + + Maintain the lists of authors, topics and books. + Maintain the lists of authors, topics and books. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Not a valid openlp.org 1.x song database. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exporting "%s"... @@ -4799,22 +5487,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance Song Book Maintenance - + &Name: &Name: - + &Publisher: &Publisher: - + You need to type in a name for the book. You need to type in a name for the book. @@ -4822,12 +5510,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. Finished export. - + Your song export failed. Your song export failed. @@ -4835,15 +5523,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + The following songs could not be imported: + + + + Unable to open file + Unable to open file + + + + File not found + File not found + + + + Cannot access OpenOffice or LibreOffice + Cannot access OpenOffice or LibreOffice + SongsPlugin.SongImportForm - + Your song import failed. Your song import failed. @@ -4851,107 +5559,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. Could not add your author. - + This author already exists. This author already exists. - + Could not add your topic. Could not add your topic. - + This topic already exists. This topic already exists. - + Could not add your book. Could not add your book. - + This book already exists. This book already exists. - + Could not save your changes. Could not save your changes. - + Could not save your modified topic, because it already exists. Could not save your modified topic, because it already exists. - + Delete Author Delete Author - + Are you sure you want to delete the selected author? Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic Delete Topic - + Are you sure you want to delete the selected topic? Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book Delete Book - + Are you sure you want to delete the selected book? Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. This book cannot be deleted, it is currently assigned to at least one song. - + Could not save your modified author, because the author already exists. Could not save your modified author, because the author already exists. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4959,27 +5667,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode Songs Mode - + Enable search as you type Enable search as you type - + Display verses on live tool bar Display verses on live tool bar - + Update service from song edit Update service from song edit - + Add missing songs when opening service Add missing songs when opening service @@ -4987,17 +5695,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance Topic Maintenance - + Topic name: Topic name: - + You need to type in a topic name. You need to type in a topic name. @@ -5005,39 +5713,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse Verse - + Chorus Chorus - + Bridge Bridge - + Pre-Chorus Pre-Chorus - + Intro Intro - + Ending Ending - + Other Other + + ThemeTab + + + Themes + Themes + + diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index e03cca1fa..c194d4197 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? You have not entered a parameter to be replaced. Do you want to continue anyway? - + No Parameter Found No Parameter Found - + No Placeholder Found No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? The alert text does not contain '<>'. @@ -30,34 +30,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert &Alert - + Show an alert message. Show an alert message. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - + Alert name singular Alert - + Alerts name plural Alerts - + Alerts container title Alerts @@ -66,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message Alert Message - + Alert &text: Alert &text: - + &New &New - + &Save &Save - + Displ&ay Displ&ay - + Display && Cl&ose Display && Cl&ose - + New Alert New Alert - + You haven't specified any text for your alert. Please type in some text before clicking New. You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Font - + Font name: Font name: - + Font color: Font color: - + Background color: Background color: - + Font size: Font size: - + Alert timeout: Alert timeout: @@ -155,51 +155,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - Importing testaments... %s - - - - Importing testaments... done. - Importing testaments... done. - - - + Importing books... %s Importing books... %s - + Importing verses from %s... Importing verses from <book name>... Importing verses from %s... - + Importing verses... done. Importing verses... done. + + BiblePlugin + + + &Upgrade older Bibles + &Upgrade older Bibles + + + + Upgrade the Bible databases to the latest format. + Upgrade the Bible databases to the latest format. + + BiblePlugin.HTTPBible - + Download Error Download Error - + Parse Error Parse Error - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. @@ -207,123 +210,133 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. Bible not fully loaded. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + + Information + Information + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + BiblesPlugin - + &Bible &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - - - - Import a Bible - Import a Bible - - - - Add a new Bible - Add a new Bible - - - - Edit the selected Bible - Edit the selected Bible - - - - Delete the selected Bible - Delete the selected Bible - - - - Preview the selected Bible - Preview the selected Bible - - - - Send the selected Bible live - Send the selected Bible live - - - - Add the selected Bible to the service - Add the selected Bible to the service - - - + Bible name singular Bible - + Bibles name plural Bibles - + Bibles container title Bibles - + No Book Found No Book Found - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + + + Import a Bible. + Import a Bible. + + + + Add a new Bible. + Add a new Bible. + + + + Edit the selected Bible. + Edit the selected Bible. + + + + Delete the selected Bible. + Delete the selected Bible. + + + + Preview the selected Bible. + Preview the selected Bible. + + + + Send the selected Bible live. + Send the selected Bible live. + + + + Add the selected Bible to the service. + Add the selected Bible to the service. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + BiblesPlugin.BibleManager - + Scripture Reference Error Scripture Reference Error - + Web Bible cannot be used Web Bible cannot be used - + Text Search is not available with Web Bibles. Text Search is not available with Web Bibles. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + No Bibles Available No Bibles Available @@ -350,45 +363,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display Verse Display - + Only show new chapter numbers Only show new chapter numbers - - - Layout style: - Layout style: - - - - Display style: - Display style: - Bible theme: Bible theme: - - - Verse Per Slide - Verse Per Slide - - - - Verse Per Line - Verse Per Line - - - - Continuous - Continuous - No Brackets @@ -422,259 +410,334 @@ Changes do not affect verses already in the service. Display second Bible verses + + BiblesPlugin.BookNameDialog + + + Select Book Name + Select Book Name + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + Current name: + Current name: + + + + Corresponding name: + Corresponding name: + + + + Show Books From + Show Books From + + + + Old Testament + Old Testament + + + + New Testament + New Testament + + + + Apocrypha + Apocrypha + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + You need to select a book. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registering Bible and loading books... + + + + Registering Language... + Registering Language... + + + + Importing %s... + Importing <book name>... + Importing %s... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bible Import Wizard - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Web Download Web Download - + Location: Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Download Options - + Server: Server: - + Username: Username: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Optional) - + License Details License Details - + Set up the Bible's license details. Set up the Bible's license details. - + Version name: Version name: - + Copyright: Copyright: - + Please wait while your Bible is imported. Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. You need to specify a version name for your Bible. - + Bible Exists Bible Exists - + Your Bible import failed. Your Bible import failed. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + This Bible already exists. Please import a different Bible or first delete the existing one. This Bible already exists. Please import a different Bible or first delete the existing one. - - Starting Registering bible... - Starting Registering bible... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Registered bible. Please note, that verses will be downloaded on - -demand and thus an internet connection is required. - - - + Permissions: Permissions: - + CSV File CSV File - + Bibleserver Bibleserver - + Bible file: Bible file: - - Testaments file: - Testaments file: - - - + Books file: Books file: - + Verses file: Verses file: - - You have not specified a testaments file. Do you want to proceed with the import? - You have not specified a testaments file. Do you want to proceed with the import? - - - + openlp.org 1.x Bible Files openlp.org 1.x Bible Files + + + Registering Bible... + Registering Bible... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Select Language + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + Language: + Language: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + You need to choose a language. + BiblesPlugin.MediaItem - + Quick Quick - + Find: Find: - - Results: - Results: - - - + Book: Book: - + Chapter: Chapter: - + Verse: Verse: - + From: From: - + To: To: - + Text Search Text Search - - Clear - Clear - - - - Keep - Keep - - - + Second: Second: - + Scripture Reference Scripture Reference + + + Toggle to keep or clear the previous results. + Toggle to keep or clear the previous results. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... @@ -683,34 +746,267 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Select a Backup Directory + + + + Bible Upgrade Wizard + Bible Upgrade Wizard + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + Select Backup Directory + Select Backup Directory + + + + Please select a backup directory for your Bibles + Please select a backup directory for your Bibles + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + Please select a backup location for your Bibles. + Please select a backup location for your Bibles. + + + + Backup Directory: + Backup Directory: + + + + There is no need to backup my Bibles + There is no need to backup my Bibles + + + + Select Bibles + Select Bibles + + + + Please select the Bibles to upgrade + Please select the Bibles to upgrade + + + + Version name: + Version name: + + + + This Bible still exists. Please change the name or uncheck it. + This Bible still exists. Please change the name or uncheck it. + + + + Upgrading + Upgrading + + + + Please wait while your Bibles are upgraded. + Please wait while your Bibles are upgraded. + + + + You need to specify a Backup Directory for your Bibles. + You need to specify a backup directory for your Bibles. + + + + You need to specify a version name for your Bible. + You need to specify a version name for your Bible. + + + + Bible Exists + Bible Exists + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + There are no Bibles available to upgrade. + There are no Bibles available to upgrade. + + + + Upgrading Bible %s of %s: "%s" +Failed + Upgrading Bible %s of %s: "%s" +Failed + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + Download Error + Download Error + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + , %s failed + , %s failed + + + + Upgrading Bible(s): %s successful%s + Upgrading Bible(s): %s successful%s + + + + Upgrade failed. + Upgrade failed. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + Starting Bible upgrade... + Starting Bible upgrade... + + + + To upgrade your Web Bibles an Internet connection is required. + To upgrade your Web Bibles an Internet connection is required. + + + + Upgrading Bible %s of %s: "%s" +Complete + Upgrading Bible %s of %s: "%s" +Complete + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + Custom Slide + name singular + Custom Slide + + + + Custom Slides + name plural + Custom Slides + + + + Custom Slides + container title + Custom Slides + + + + Load a new custom slide. + Load a new custom slide. + + + + Import a custom slide. + Import a custom slide. + + + + Add a new custom slide. + Add a new custom slide. + + + + Edit the selected custom slide. + Edit the selected custom slide. + + + + Delete the selected custom slide. + Delete the selected custom slide. + + + + Preview the selected custom slide. + Preview the selected custom slide. + + + + Send the selected custom slide live. + Send the selected custom slide live. + + + + Add the selected custom slide to the service. + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display Custom Display - + Display footer Display footer @@ -718,192 +1014,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides Edit Custom Slides - + &Title: &Title: - + Add a new slide at bottom. Add a new slide at bottom. - + Edit the selected slide. Edit the selected slide. - + Edit all the slides at once. Edit all the slides at once. - - Split Slide - Split Slide - - - + Split a slide into two by inserting a slide splitter. Split a slide into two by inserting a slide splitter. - + The&me: The&me: - + &Credits: &Credits: - + You need to type in a title. You need to type in a title. - + You need to add at least one slide You need to add at least one slide - + Ed&it All Ed&it All + + + Insert Slide + Insert Slide + - CustomsPlugin + GeneralTab - - Import a Custom - Import a Custom - - - - Load a new Custom - Load a new Custom - - - - Add a new Custom - Add a new Custom - - - - Edit the selected Custom - Edit the selected Custom - - - - Delete the selected Custom - Delete the selected Custom - - - - Preview the selected Custom - Preview the selected Custom - - - - Send the selected Custom live - Send the selected Custom live - - - - Add the selected Custom to the service - Add the selected Custom to the service - - - - Custom - name singular - Custom - - - - Customs - name plural - Customs - - - - Custom - container title - Custom + + General + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - Load a new Image - - - - Add a new Image - Add a new Image - - - - Edit the selected Image - Edit the selected Image - - - - Delete the selected Image - Delete the selected Image - - - - Preview the selected Image - Preview the selected Image - - - - Send the selected Image live - Send the selected Image live - - - - Add the selected Image to the service - Add the selected Image to the service - - - + Image name singular Image - + Images name plural Images - + Images container title Images + + + Load a new image. + Load a new image. + + + + Add a new image. + Add a new image. + + + + Edit the selected image. + Edit the selected image. + + + + Delete the selected image. + Delete the selected image. + + + + Preview the selected image. + Preview the selected image. + + + + Send the selected image live. + Send the selected image live. + + + + Add the selected image to the service. + Add the selected image to the service. + ImagePlugin.ExceptionDialog - + Select Attachment Select Attachment @@ -911,39 +1154,39 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) Select Image(s) - + You must select an image to delete. You must select an image to delete. - + You must select an image to replace the background with. You must select an image to replace the background with. - + Missing Image(s) Missing Image(s) - + The following image(s) no longer exist: %s The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? The following image(s) no longer exist: %s Do you want to add the other images anyway? - + There was a problem replacing your background, the image file "%s" no longer exists. There was a problem replacing your background, the image file "%s" no longer exists. @@ -951,98 +1194,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - Load a new Media - Load a new Media - - - - Add a new Media - Add a new Media - - - - Edit the selected Media - Edit the selected Media - - - - Delete the selected Media - Delete the selected Media - - - - Preview the selected Media - Preview the selected Media - - - - Send the selected Media live - Send the selected Media live - - - - Add the selected Media to the service - Add the selected Media to the service - - - + Media name singular Media - + Media name plural Media - + Media container title Media + + + Load new media. + Load new media. + + + + Add new media. + Add new media. + + + + Edit the selected media. + Edit the selected media. + + + + Delete the selected media. + Delete the selected media. + + + + Preview the selected media. + Preview the selected media. + + + + Send the selected media live. + Send the selected media live. + + + + Add the selected media to the service. + Add the selected media to the service. + MediaPlugin.MediaItem - + Select Media Select Media - + You must select a media file to delete. You must select a media file to delete. - + Missing Media File Missing Media File - + The file %s no longer exists. The file %s no longer exists. - + You must select a media file to replace the background with. You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. There was a problem replacing your background, the media file "%s" no longer exists. - + Videos (%s);;Audio (%s);;%s (*) Videos (%s);;Audio (%s);;%s (*) @@ -1050,12 +1293,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display Media Display - + Use Phonon for video playback Use Phonon for video playback @@ -1063,62 +1306,59 @@ Do you want to add the other images anyway? OpenLP - + Image Files Image Files + + + Information + Information + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - + Credits Credits - + License License - + Contribute Contribute - + build %s build %s - + 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 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 below for more details. 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 below for more details. - + Project Lead %s @@ -1243,189 +1483,318 @@ Final Credit He has set us free. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings UI Settings - + Number of recent files to display: Number of recent files to display: - + Remember active media manager tab on startup Remember active media manager tab on startup - + Double-click to send items straight to live Double-click to send items straight to live - + Expand new service items on creation Expand new service items on creation - + Enable application exit confirmation Enable application exit confirmation - + Mouse Cursor Mouse Cursor - + Hide mouse cursor when over display window Hide mouse cursor when over display window - + Default Image Default Image - + Background color: Background colour: - + Image file: Image file: - + Open File Open File + + + Preview items when clicked in Media Manager + Preview items when clicked in Media Manager + + + + Advanced + Advanced + + + + Click to select a color. + Click to select a colour. + + + + Browse for an image file to display. + Browse for an image file to display. + + + + Revert to the default OpenLP logo. + Revert to the default OpenLP logo. + OpenLP.DisplayTagDialog - + Edit Selection Edit Selection - - Update - Update - - - + Description Description - + Tag Tag - + Start tag Start tag - + End tag End tag - - Default - Default - - - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML End HTML + + + Save + Save + OpenLP.DisplayTagTab - + Update Error Update Error - + Tag "n" already defined. Tag "n" already defined. - + Tag %s already defined. Tag %s already defined. + + + New Tag + New Tag + + + + </and here> + </and here> + + + + <HTML here> + <HTML here> + + + + OpenLP.DisplayTags + + + Red + Red + + + + Black + Black + + + + Blue + Blue + + + + Yellow + Yellow + + + + Green + Green + + + + Pink + Pink + + + + Orange + Orange + + + + Purple + Purple + + + + White + White + + + + Superscript + Superscript + + + + Subscript + Subscript + + + + Paragraph + Paragraph + + + + Bold + Bold + + + + Italics + Italics + + + + Underline + Underline + + + + Break + Break + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Error Occurred Error Occurred - + Send E-Mail Send E-Mail - + Save to File Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File Attach File - + Description characters to enter : %s Description characters to enter : %s @@ -1433,24 +1802,24 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Platform: %s - + Save Crash Report Save Crash Report - + Text files (*.txt *.log *.text) Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1481,7 +1850,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1516,17 +1885,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename File Rename - + New File Name: New File Name: - + File Copy File Copy @@ -1534,17 +1903,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Select Translation - + Choose the translation you'd like to use in OpenLP. Choose the translation you'd like to use in OpenLP. - + Translation: Translation: @@ -1552,102 +1921,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... Downloading %s... - + Download complete. Click the finish button to start OpenLP. Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... Enabling selected plugins... - + First Time Wizard First Time Wizard - + Welcome to the First Time Wizard Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - + Activate required Plugins Activate required Plugins - + Select the Plugins you wish to use. Select the Plugins you wish to use. - + Songs Songs - + Custom Text Custom Text - + Bible Bible - + Images Images - + Presentations Presentations - + Media (Audio and Video) Media (Audio and Video) - + Allow remote access Allow remote access - + Monitor Song Usage Monitor Song Usage - + Allow Alerts Allow Alerts - + No Internet Connection No Internet Connection - + Unable to detect an Internet connection. Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1660,198 +2024,223 @@ To re-run the First Time Wizard and import this sample data at a later stage, pr To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs Sample Songs - + Select and download public domain songs. Select and download public domain songs. - + Sample Bibles Sample Bibles - + Select and download free Bibles. Select and download free Bibles. - + Sample Themes Sample Themes - + Select and download sample themes. Select and download sample themes. - + Default Settings Default Settings - + Set up default settings to be used by OpenLP. Set up default settings to be used by OpenLP. - - Setting Up And Importing - Setting Up And Importing - - - - Please wait while OpenLP is set up and your data is imported. - Please wait while OpenLP is set up and your data is imported. - - - + Default output display: Default output display: - + Select default theme: Select default theme: - + Starting configuration process... Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + Setting Up And Downloading + Setting Up And Downloading + + + + Please wait while OpenLP is set up and your data is downloaded. + Please wait while OpenLP is set up and your data is downloaded. + + + + Setting Up + Setting Up + + + + Click the finish button to start OpenLP. + Click the finish button to start OpenLP. + OpenLP.GeneralTab - + General General - + Monitors Monitors - + Select monitor for output display: Select monitor for output display: - + Display if a single screen Display if a single screen - + Application Startup Application Startup - + Show blank screen warning Show blank screen warning - + Automatically open the last service Automatically open the last service - + Show the splash screen Show the splash screen - + Application Settings Application Settings - + CCLI Details CCLI Details - + SongSelect username: SongSelect username: - + SongSelect password: SongSelect password: - + Display Position Display Position - + X X - + Y Y - + Height Height - + Width Width - + Override display position Override display position - + Prompt to save before starting a new service Prompt to save before starting a new service - + Automatically preview next item in service Automatically preview next item in service - Slide loop delay: - Slide loop delay: - - - sec sec - + Check for updates to OpenLP Check for updates to OpenLP + + + Unblank display when adding new live item + Unblank display when adding new live item + + + + Enable slide wrap-around + Enable slide wrap-around + + + + Timed slide interval: + Timed slide interval: + OpenLP.LanguageManager - + Language Language - + Please restart OpenLP to use your new language setting. Please restart OpenLP to use your new language setting. @@ -1859,7 +2248,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display OpenLP Display @@ -1867,190 +2256,155 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &File - + &Import &Import - + &Export &Export - + &View &View - + M&ode M&ode - + &Tools &Tools - + &Settings &Settings - + &Language &Language - + &Help &Help - + Media Manager Media Manager - + Service Manager Service Manager - + Theme Manager Theme Manager - + &New &New - - Ctrl+N - Ctrl+N - - - + &Open &Open - + Open an existing service. Open an existing service. - - Ctrl+O - Ctrl+O - - - + &Save &Save - + Save the current service to disk. Save the current service to disk. - - Ctrl+S - Ctrl+S - - - + Save &As... Save &As... - + Save Service As Save Service As - + Save the current service under a new name. Save the current service under a new name. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit E&xit - + Quit OpenLP Quit OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Theme - + &Configure OpenLP... &Configure OpenLP... - + &Media Manager &Media Manager - + Toggle Media Manager Toggle Media Manager - + Toggle the visibility of the media manager. Toggle the visibility of the media manager. - - F8 - F8 - - - + &Theme Manager &Theme Manager - + Toggle Theme Manager Toggle Theme Manager - + Toggle the visibility of the theme manager. Toggle the visibility of the theme manager. - - - F10 - F10 - &Service Manager @@ -2068,166 +2422,141 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - F9 - - - &Preview Panel &Preview Panel - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - - F11 - F11 - - - + &Live Panel &Live Panel - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - - F12 - F12 - - - + &Plugin List &Plugin List - + List the Plugins List the Plugins - - Alt+F7 - Alt+F7 - - - + &User Guide &User Guide - + &About &About - + More information about OpenLP More information about OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Online Help - + &Web Site &Web Site - + Use the system language, if available. Use the system language, if available. - + Set the interface language to %s Set the interface language to %s - + Add &Tool... Add &Tool... - + Add an application to the list of tools. Add an application to the list of tools. - + &Default &Default - + Set the view mode back to the default. Set the view mode back to the default. - + &Setup &Setup - + Set the view mode to Setup. Set the view mode to Setup. - + &Live &Live - + Set the view mode to Live. Set the view mode to Live. - + OpenLP Version Updated OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2236,61 +2565,66 @@ You can download the latest version from http://openlp.org/. You can download the latest version from http://openlp.org/. - + English Please add the name of your language here English (South Africa) - + Configure &Shortcuts... Configure &Shortcuts... - + Close OpenLP Close OpenLP - + Are you sure you want to close OpenLP? Are you sure you want to close OpenLP? - - Print the current Service Order. - Print the current Service Order. - - - - Ctrl+P - Ctrl+P - - - + Open &Data Folder... Open &Data Folder... - + Open the folder where songs, bibles and other data resides. Open the folder where songs, Bibles and other data resides. - + &Configure Display Tags &Configure Display Tags - + &Autodetect &Autodetect + + + Update Theme Images + Update Theme Images + + + + Update the preview images for all themes. + Update the preview images for all themes. + + + + Print the current service. + Print the current service. + OpenLP.MediaManagerItem - + No Items Selected No Items Selected @@ -2300,75 +2634,92 @@ You can download the latest version from http://openlp.org/. &Add to selected Service Item - + You must select one or more items to preview. You must select one or more items to preview. - + You must select one or more items to send live. You must select one or more items to send live. - + You must select one or more items. You must select one or more items. - + You must select an existing service item to add to. You must select an existing service item to add to. - + Invalid Service Item Invalid Service Item - + You must select a %s service item. You must select a %s service item. + + + You must select one or more items to add. + You must select one or more items to add. + + + + No Search Results + No Search Results + + + + Duplicate filename %s. +This filename is already in the list + Duplicate filename %s. +This filename is already in the list + OpenLP.PluginForm - + Plugin List Plugin List - + Plugin Details Plugin Details - + Status: Status: - + Active Active - + Inactive Inactive - + %s (Inactive) %s (Inactive) - + %s (Active) %s (Active) - + %s (Disabled) %s (Disabled) @@ -2376,12 +2727,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page Fit Page - + Fit Width Fit Width @@ -2389,7 +2740,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options Options @@ -2409,55 +2760,60 @@ You can download the latest version from http://openlp.org/. Copy as HTML - + Zoom In Zoom In - + Zoom Out Zoom Out - + Zoom Original Zoom Original - + Other Options Other Options - + Include slide text if available Include slide text if available - + Include service item notes Include service item notes - + Include play length of media items Include play length of media items - - Service Order Sheet - Service Order Sheet + + Add page break before each text item + Add page break before each text item + + + + Service Sheet + Service Sheet OpenLP.ScreenList - + Screen Screen - + primary primary @@ -2465,7 +2821,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item Reorder Service Item @@ -2473,217 +2829,257 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Load an existing service - - - - Save this service - Save this service - - - - Select a theme for the service - Select a theme for the service - - - + Move to &top Move to &top - + Move item to the top of the service. Move item to the top of the service. - + Move &up Move &up - + Move item up one position in the service. Move item up one position in the service. - + Move &down Move &down - + Move item down one position in the service. Move item down one position in the service. - + Move to &bottom Move to &bottom - + Move item to the end of the service. Move item to the end of the service. - + &Delete From Service &Delete From Service - + Delete the selected item from the service. Delete the selected item from the service. - + &Add New Item &Add New Item - + &Add to Selected Item &Add to Selected Item - + &Edit Item &Edit Item - + &Reorder Item &Reorder Item - + &Notes &Notes - + &Change Item Theme &Change Item Theme - + File is not a valid service. The content encoding is not UTF-8. File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. File is not a valid service. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all &Expand all - + Expand all the service items. Expand all the service items. - + &Collapse all &Collapse all - + Collapse all the service items. Collapse all the service items. - + Open File Open File - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) - + Moves the selection down the window. Moves the selection down the window. - + Move up Move up - + Moves the selection up the window. Moves the selection up the window. - + Go Live Go Live - + Send the selected item to Live. Send the selected item to Live. - + Modified Service Modified Service - - Notes: - Notes: - - - + &Start Time &Start Time - + Show &Preview Show &Preview - + Show &Live Show &Live - + The current service has been modified. Would you like to save this service? The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + File could not be opened because it is corrupt. + + + + Empty File + Empty File + + + + This service file does not contain any data. + This service file does not contain any data. + + + + Corrupt File + Corrupt File + + + + Custom Service Notes: + Custom Service Notes: + + + + Notes: + Notes: + + + + Playing time: + Playing time: + + + + Untitled Service + Untitled Service + + + + Load an existing service. + Load an existing service. + + + + Save this service. + Save this service. + + + + Select a theme for the service. + Select a theme for the service. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + This file is either corrupt or it is not an OpenLP 2.0 service file. + OpenLP.ServiceNoteForm - + Service Item Notes Service Item Notes @@ -2691,7 +3087,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP Configure OpenLP @@ -2699,221 +3095,276 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts Customize Shortcuts - + Action Action - + Shortcut Shortcut - - Default: %s - Default: %s - - - - Custom: - Custom: - - - - None - None - - - + Duplicate Shortcut Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + Default + Default + + + + Custom + Custom + + + + Capture shortcut. + Capture shortcut. + + + + Restore the default shortcut of this action. + Restore the default shortcut of this action. + + + + Restore Default Shortcuts + Restore Default Shortcuts + + + + Do you want to restore all shortcuts to their defaults? + Do you want to restore all shortcuts to their defaults? + OpenLP.SlideController - - Move to previous - Move to previous - - - - Move to next - Move to next - - - + Hide Hide - - Move to live - Move to live - - - - Start continuous loop - Start continuous loop - - - - Stop continuous loop - Stop continuous loop - - - - Delay between slides in seconds - Delay between slides in seconds - - - - Start playing media - Start playing media - - - + Go To Go To - - Edit and reload song preview - Edit and reload song preview - - - + Blank Screen Blank Screen - + Blank to Theme Blank to Theme - + Show Desktop Show Desktop - + Previous Slide Previous Slide - + Next Slide Next Slide - + Previous Service Previous Service - + Next Service Next Service - + Escape Item Escape Item + + + Move to previous. + Move to previous. + + + + Move to next. + Move to next. + + + + Play Slides + Play Slides + + + + Play Slides in Loop + Play Slides in Loop + + + + Play Slides to End + Play Slides to End + + + + Delay between slides in seconds. + Delay between slides in seconds. + + + + Move to live. + Move to live. + + + + Add to Service. + Add to Service. + + + + Edit and reload song preview. + Edit and reload song preview. + + + + Start playing media. + Start playing media. + OpenLP.SpellTextEdit - + Spelling Suggestions Spelling Suggestions - + Formatting Tags Formatting Tags + + + Language: + Language: + OpenLP.StartTimeForm - - Item Start Time - Item Start Time - - - + Hours: Hours: - - h - h - - - - m - m - - - + Minutes: Minutes: - + Seconds: Seconds: + + + Item Start and Finish Time + Item Start and Finish Time + + + + Start + Start + + + + Finish + Finish + + + + Length + Length + + + + Time Validation Error + Time Validation Error + + + + Finish time is set after the end of the media item + Finish time is set after the end of the media item + + + + Start time is after the finish time of the media item + Start time is after the finish time of the media item + OpenLP.ThemeForm - + Select Image Select Image - + Theme Name Missing Theme Name Missing - + There is no name for this theme. Please enter one. There is no name for this theme. Please enter one. - + Theme Name Invalid Theme Name Invalid - + Invalid theme name. Please enter one. Invalid theme name. Please enter one. - - (%d lines per slide) - (%d lines per slide) + + (approximately %d lines per slide) + (approximately %d lines per slide) @@ -2979,69 +3430,69 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -3061,47 +3512,47 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. You must select a theme to rename. - + Rename Confirmation Rename Confirmation - + Rename %s theme? Rename %s theme? - + You must select a theme to delete. You must select a theme to delete. - + Delete Confirmation Delete Confirmation - + Delete %s theme? Delete %s theme? - + Validation Error Validation Error - + A theme with this name already exists. A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) OpenLP Themes (*.theme *.otz) @@ -3109,242 +3560,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard Theme Wizard - + Welcome to the Theme Wizard Welcome to the Theme Wizard - + Set Up Background Set Up Background - + Set up your theme's background according to the parameters below. Set up your theme's background according to the parameters below. - + Background type: Background type: - + Solid Color Solid Colour - + Gradient Gradient - + Color: Colour: - + Gradient: Gradient: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Top Left - Bottom Right - + Bottom Left - Top Right Bottom Left - Top Right - + Main Area Font Details Main Area Font Details - + Define the font and display characteristics for the Display text Define the font and display characteristics for the Display text - + Font: Font: - + Size: Size: - + Line Spacing: Line Spacing: - + &Outline: &Outline: - + &Shadow: &Shadow: - + Bold Bold - + Italic Italic - + Footer Area Font Details Footer Area Font Details - + Define the font and display characteristics for the Footer text Define the font and display characteristics for the Footer text - + Text Formatting Details Text Formatting Details - + Allows additional display formatting information to be defined Allows additional display formatting information to be defined - + Horizontal Align: Horizontal Align: - + Left Left - + Right Right - + Center Centre - + Output Area Locations Output Area Locations - + Allows you to change and move the main and footer areas. Allows you to change and move the main and footer areas. - + &Main Area &Main Area - + &Use default location &Use default location - + X position: X position: - + px px - + Y position: Y position: - + Width: Width: - + Height: Height: - + Use default location Use default location - + Save and Preview Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: Theme name: - + 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. 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. - + Transitions: Transitions: - + &Footer Area &Footer Area - + Edit Theme - %s Edit Theme - %s @@ -3352,42 +3803,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Global Theme - + Theme Level Theme Level - + S&ong Level S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Use the global theme, overriding any themes associated with either the service or the songs. @@ -3395,421 +3846,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error Error - + &Delete &Delete - + Delete the selected item. Delete the selected item. - + Move selection up one position. Move selection up one position. - + Move selection down one position. Move selection down one position. - + &Add &Add - + Advanced Advanced - + All Files All Files - + Create a new service. Create a new service. - + &Edit &Edit - + Import Import - + Length %s Length %s - + Live Live - + Load Load - + New New - + New Service New Service - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Open Service - - - + Preview Preview - + Replace Background Replace Background - - Replace Live Background - Replace Live Background - - - + Reset Background Reset Background - - Reset Live Background - Reset Live Background - - - + Save Service Save Service - + Service Service - + Start %s Start %s - + &Vertical Align: &Vertical Align: - + Top Top - + Middle Middle - + Bottom Bottom - + About About - + Browse... Browse... - + Cancel Cancel - + CCLI number: CCLI number: - + Empty Field Empty Field - + Export Export - + pt Abbreviated font pointsize unit pt - + Image Image - + Live Background Error Live Background Error - - Live Panel - Live Panel - - - + New Theme New Theme - + No File Selected Singular No File Selected - + No Files Selected Plural No Files Selected - + No Item Selected Singular No Item Selected - + No Items Selected Plural No Items Selected - + openlp.org 1.x openlp.org 1.x - - Preview Panel - Preview Panel - - - - Print Service Order - Print Service Order - - - + s The abbreviated unit for seconds s - + Save && Preview Save && Preview - + Search Search - + You must select an item to delete. You must select an item to delete. - + You must select an item to edit. You must select an item to edit. - + Theme Singular Theme - + Themes Plural Themes - + Version Version - + Finished import. Finished import. - + Format: Format: - + Importing Importing - + Importing "%s"... Importing "%s"... - + Select Import Source Select Import Source - + Select the import format and the location to import from. Select the import format and the location to import from. - + The openlp.org 1.x 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. The openlp.org 1.x 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. - + Open %s File Open %s File - + %p% %p% - + Ready. Ready. - + Starting import... Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong You need to specify at least one %s file to import from. - + Welcome to the Bible Import Wizard Welcome to the Bible Import Wizard - + Welcome to the Song Export Wizard Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard Welcome to the Song Import Wizard - + Author Singular Author - + Authors Plural Authors - + © Copyright symbol. © - + Song Book Singular Song Book - + Song Books Plural Song Books - + Song Maintenance Song Maintenance - + Topic Singular Topic - + Topics Plural Topics + + + Continuous + Continuous + + + + Default + Default + + + + Display style: + Display style: + + + + File + File + + + + Help + Help + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Layout style: + + + + Live Toolbar + Live Toolbar + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP is already running. Do you wish to continue? + + + + Settings + Settings + + + + Tools + Tools + + + + Verse Per Slide + Verse Per Slide + + + + Verse Per Line + Verse Per Line + + + + View + View + + + + Duplicate Error + Duplicate Error + + + + Unsupported File + Unsupported File + + + + Title and/or verses not found + Title and/or verses not found + + + + XML syntax error + XML syntax error + + + + View Mode + View Mode + + + + Welcome to the Bible Upgrade Wizard + Welcome to the Bible Upgrade Wizard + + + + Open service. + Open service. + + + + Print Service + Print Service + + + + Replace live background. + Replace live background. + + + + Reset live background. + Reset live background. + + + + &Split + &Split + + + + Split a slide into two only if it does not fit on the screen as one slide. + Split a slide into two only if it does not fit on the screen as one slide. + OpenLP.displayTagDialog - + Configure Display Tags Configure Display Tags @@ -3821,31 +4379,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - Load a new Presentation - - - - Delete the selected Presentation - Delete the selected Presentation - - - - Preview the selected Presentation - Preview the selected Presentation - - - - Send the selected Presentation live - Send the selected Presentation live - - - - Add the selected Presentation to the service - Add the selected Presentation to the service - Presentation @@ -3864,61 +4397,81 @@ The content encoding is not UTF-8. container title Presentations + + + Load a new presentation. + Load a new presentation. + + + + Delete the selected presentation. + Delete the selected presentation. + + + + Preview the selected presentation. + Preview the selected presentation. + + + + Send the selected presentation live. + Send the selected presentation live. + + + + Add the selected presentation to the service. + Add the selected presentation to the service. + PresentationPlugin.MediaItem - + Select Presentation(s) Select Presentation(s) - + Automatic Automatic - + Present using: Present using: - + File Exists File Exists - + A presentation with that filename already exists. A presentation with that filename already exists. - - Unsupported File - Unsupported File - - - + This type of presentation is not supported. This type of presentation is not supported. - + Presentations (%s) Presentations (%s) - + Missing Presentation Missing Presentation - + The Presentation %s no longer exists. The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. The Presentation %s is incomplete, please reload. @@ -3926,17 +4479,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Available Controllers - + Allow presentation application to be overriden Allow presentation application to be overriden - + %s (unavailable) %s (unavailable) @@ -3944,71 +4497,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. <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. - + Remote name singular Remote - + Remotes name plural Remotes - + Remote container title Remote + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Remote + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Stage View + + + + Service Manager + Service Manager + + + + Slide Controller + Slide Controller + + + + Alerts + Alerts + + + + Search + Search + + + + Back + Back + + + + Refresh + Refresh + + + + Blank + Blank + + + + Show + Show + + + + Prev + Prev + + + + Next + Next + + + + Text + Text + + + + Show Alert + Show Alert + + + + Go Live + Go Live + + + + Add To Service + Add To Service + + + + No Results + No Results + + + + Options + Options + + RemotePlugin.RemoteTab - + Serve on IP address: Serve on IP address: - + Port number: Port number: - + Server Settings Server Settings + + + Remote URL: + Remote URL: + + + + Stage view URL: + Stage view URL: + SongUsagePlugin - + &Song Usage Tracking &Song Usage Tracking - + &Delete Tracking Data &Delete Tracking Data - + Delete song usage data up to a specified date. Delete song usage data up to a specified date. - + &Extract Tracking Data &Extract Tracking Data - + Generate a report on song usage. Generate a report on song usage. @@ -4023,53 +4679,58 @@ The content encoding is not UTF-8. Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular SongUsage - + SongUsage name plural SongUsage - + SongUsage container title SongUsage + + + Song Usage + Song Usage + SongUsagePlugin.SongUsageDeleteForm - + Delete Selected Song Usage Events? Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? Are you sure you want to delete selected Song Usage data? - + Delete Song Usage Data Delete Song Usage Data - + Deletion Successful Deletion Successful - + All requested data has been deleted successfully. All requested data has been deleted successfully. @@ -4077,42 +4738,42 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Output File Location Output File Location - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location - + usage_detail_%s_%s.txt usage_detail_%s_%s.txt - + Report Creation Report Creation - + Report %s has been successfully created. @@ -4121,12 +4782,12 @@ has been successfully created. has been successfully created. - + Output Path Not Selected Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4134,160 +4795,130 @@ has been successfully created. SongsPlugin - + &Song &Song - + Import songs using the import wizard. Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs &Re-index Songs - + Re-index the songs database to improve searching and ordering. Re-index the songs database to improve searching and ordering. - + Reindexing songs... Reindexing songs... - - Add a new Song - Add a new Song - - - - Edit the selected Song - Edit the selected Song - - - - Delete the selected Song - Delete the selected Song - - - - Preview the selected Song - Preview the selected Song - - - - Send the selected Song live - Send the selected Song live - - - - Add the selected Song to the service - Add the selected Song to the service - - - + Song name singular Song - + Songs name plural Songs - + Songs container title Songs - + Arabic (CP-1256) Arabic (CP-1256) - + Baltic (CP-1257) Baltic (CP-1257) - + Central European (CP-1250) Central European (CP-1250) - + Cyrillic (CP-1251) Cyrillic (CP-1251) - + Greek (CP-1253) Greek (CP-1253) - + Hebrew (CP-1255) Hebrew (CP-1255) - + Japanese (CP-932) Japanese (CP-932) - + Korean (CP-949) Korean (CP-949) - + Simplified Chinese (CP-936) Simplified Chinese (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Traditional Chinese (CP-950) - + Turkish (CP-1254) Turkish (CP-1254) - + Vietnam (CP-1258) Vietnam (CP-1258) - + Western European (CP-1252) Western European (CP-1252) - + Character Encoding Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4296,52 +4927,82 @@ for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Please choose the character encoding. The encoding is responsible for the correct character representation. - + Exports songs using the export wizard. Exports songs using the export wizard. + + + Add a new song. + Add a new song. + + + + Edit the selected song. + Edit the selected song. + + + + Delete the selected song. + Delete the selected song. + + + + Preview the selected song. + Preview the selected song. + + + + Send the selected song live. + Send the selected song live. + + + + Add the selected song to the service. + Add the selected song to the service. + SongsPlugin.AuthorsForm - + Author Maintenance Author Maintenance - + Display name: Display name: - + First name: First name: - + Last name: Last name: - + You need to type in the first name of the author. You need to type in the first name of the author. - + You need to type in the last name of the author. You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? You have not set a display name for the author, combine the first and last names? @@ -4349,190 +5010,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Importing song %d of %d + + The file does not have a valid extension. + The file does not have a valid extension. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Administered by %s SongsPlugin.EditSongForm - + Song Editor Song Editor - + &Title: &Title: - + &Lyrics: &Lyrics: - + Ed&it All Ed&it All - + Title && Lyrics Title && Lyrics - + &Add to Song &Add to Song - + &Remove &Remove - + &Manage Authors, Topics, Song Books &Manage Authors, Topics, Song Books - + A&dd to Song A&dd to Song - + R&emove R&emove - + Authors, Topics && Song Book Authors, Topics && Song Book - + New &Theme New &Theme - + Copyright Information Copyright Information - + Comments Comments - + Theme, Copyright Info && Comments Theme, Copyright Info && Comments - + Add Author Add Author - + This author does not exist, do you want to add them? This author does not exist, do you want to add them? - + This author is already in the list. This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic Add Topic - + This topic does not exist, do you want to add it? This topic does not exist, do you want to add it? - + This topic is already in the list. This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. You need to type in a song title. - + You need to type in at least one verse. You need to type in at least one verse. - + Warning Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book Add Book - + This song book does not exist, do you want to add it? This song book does not exist, do you want to add it? - + Alt&ernate title: Alt&ernate title: - + &Verse order: &Verse order: - + Book: Book: - + Number: Number: - + You need to have an author for this song. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. @@ -4540,260 +5209,278 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse Edit Verse - + &Verse type: &Verse type: - + &Insert &Insert + + + Split a slide into two by inserting a verse splitter. + Split a slide into two by inserting a verse splitter. + SongsPlugin.ExportWizardForm - + Song Export Wizard Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs Select Songs - + Uncheck All Uncheck All - + Check All Check All - + Select Directory Select Directory - - Select the directory you want the songs to be saved. - Select the directory you want the songs to be saved. - - - + Directory: Directory: - + Exporting Exporting - + Please wait while your songs are exported. Please wait while your songs are exported. - + You need to add at least one Song to export. You need to add at least one Song to export. - + No Save Location specified No Save Location specified - + Starting export... Starting export... - + Check the songs you want to export. Check the songs you want to export. - + You need to specify a directory. You need to specify a directory. - + Select Destination Folder Select Destination Folder + + + Select the directory where you want the songs to be saved. + Select the directory where you want the songs to be saved. + SongsPlugin.ImportWizardForm - + Song Import Wizard Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Add Files... Add Files... - + Remove File(s) Remove File(s) - + Filename: Filename: - + Please wait while your songs are imported. Please wait while your songs are imported. - + Select Document/Presentation Files Select Document/Presentation Files - + Generic Document/Presentation Generic Document/Presentation - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - Administered by %s - Administered by %s - - - + OpenLP 2.0 Databases OpenLP 2.0 Databases - + openlp.org v1.x Databases openlp.org v1.x Databases - + Words Of Worship Song Files Words Of Worship Song Files - + Songs Of Fellowship Song Files Songs Of Fellowship Song Files - + SongBeamer Files SongBeamer Files - + SongShow Plus Song Files SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files Foilpresenter Song Files + + + Copy + Copy + + + + Save to File + Save to File + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Maintain the lists of authors, topics and books - - - + Titles Titles - + Lyrics Lyrics - + Delete Song(s)? Delete Song(s)? - + CCLI License: CCLI License: - + Entire Song Entire Song - + Are you sure you want to delete the %n selected song(s)? Are you sure you want to delete the %n selected song(s)? Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + Maintain the lists of authors, topics and books. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Not a valid openlp.org 1.x song database. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exporting "%s"... @@ -4801,22 +5488,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance Song Book Maintenance - + &Name: &Name: - + &Publisher: &Publisher: - + You need to type in a name for the book. You need to type in a name for the book. @@ -4824,12 +5511,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. Finished export. - + Your song export failed. Your song export failed. @@ -4837,15 +5524,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + The following songs could not be imported: + + + + Unable to open file + Unable to open file + + + + File not found + File not found + + + + Cannot access OpenOffice or LibreOffice + Cannot access OpenOffice or LibreOffice + SongsPlugin.SongImportForm - + Your song import failed. Your song import failed. @@ -4853,107 +5560,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. Could not add your author. - + This author already exists. This author already exists. - + Could not add your topic. Could not add your topic. - + This topic already exists. This topic already exists. - + Could not add your book. Could not add your book. - + This book already exists. This book already exists. - + Could not save your changes. Could not save your changes. - + Could not save your modified topic, because it already exists. Could not save your modified topic, because it already exists. - + Delete Author Delete Author - + Are you sure you want to delete the selected author? Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic Delete Topic - + Are you sure you want to delete the selected topic? Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book Delete Book - + Are you sure you want to delete the selected book? Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. This book cannot be deleted, it is currently assigned to at least one song. - + Could not save your modified author, because the author already exists. Could not save your modified author, because the author already exists. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4961,27 +5668,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode Songs Mode - + Enable search as you type Enable search as you type - + Display verses on live tool bar Display verses on live tool bar - + Update service from song edit Update service from song edit - + Add missing songs when opening service Add missing songs when opening service @@ -4989,17 +5696,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance Topic Maintenance - + Topic name: Topic name: - + You need to type in a topic name. You need to type in a topic name. @@ -5007,39 +5714,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse Verse - + Chorus Chorus - + Bridge Bridge - + Pre-Chorus Pre-Chorus - + Intro Intro - + Ending Ending - + Other Other + + ThemeTab + + + Themes + Themes + + diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 5f8c716ad..c31c1ce06 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -3,111 +3,112 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? No ha ingresado un parámetro para reemplazarlo. ¿Desea continuar de todas maneras? - + No Parameter Found - + Parámetro no encontrado - + No Placeholder Found - + Marcador No Encontrado - + The alert text does not contain '<>'. Do you want to continue anyway? - + El texto de alerta no contiene '<>'. +¿Desea continuar de todos modos? AlertsPlugin - + &Alert - &Alerta + &Alerta - + Show an alert message. - Mostrar mensaje de alerta + Mostrar mensaje de alerta. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Alerts Plugin</strong><br />El plugin de alertas controla la visualización de mensajes de guardería + <strong>Complemento de Alertas</strong><br />El complemento de alertas controla la visualización de mensajes de guardería - + Alert name singular - Alerta + Alerta - + Alerts name plural - Alertas + Alertas - + Alerts container title - Alertas + Alertas AlertsPlugin.AlertForm - + Alert Message - Mensaje de Alerta + Mensaje de Alerta - + Alert &text: - &Texto de Alerta: + &Texto de alerta: - + &New - &Nuevo + &Nuevo - + &Save - &Guardar + &Guardar - + Displ&ay Mostr&ar - + Display && Cl&ose M&ostrar && Cerrar - + New Alert Alerta Nueva - + You haven't specified any text for your alert. Please type in some text before clicking New. No ha especificado ningún texto de alerta. Por favor, escriba algún texto antes de hacer clic en Nueva. - + &Parameter: - + &Parámetro: @@ -121,207 +122,221 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - Tipo de Letra + Fuente - + Font name: Nombre: - + Font color: Color: - + Background color: - Color de Fondo: + Color de fondo: - + Font size: Tamaño: - + Alert timeout: - Espera: + Tiempo de espera: BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importando libros... %s - + Importing verses from %s... Importing verses from <book name>... - + Importando versículos de %s... - + Importing verses... done. - + Importando versículos... listo. + + + + BiblePlugin + + + &Upgrade older Bibles + &Actualizar Biblias antiguas + + + + Upgrade the Bible databases to the latest format. + Actualizar las Biblias al último formato disponible. BiblePlugin.HTTPBible - + Download Error - + Error de Descarga - + Parse Error - + Error de Análisis - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Hubo un problema al descargar los versículos seleccionados. Por favor revise la conexión a internet, y si el error persiste considere reportar esta falla. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - + Hubo un problema al extraer los versículos seleccionados. Si el error persiste considere reportar esta falla. BiblePlugin.MediaItem - + Bible not fully loaded. - + Carga incompleta. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + No puede mezclar busquedas individuales y dobles de versículos. ¿Desea borrar los resultados y abrir una busqueda nueva? + + + + Information + Información + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + La Biblia secundaria no contiene todos los versículos de la Bilbia principal. Solo se muestran los versículos comunes. Versículos %d no se incluyen en los resultados. BiblesPlugin - + &Bible - &Biblia + &Biblia - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bible Plugin</strong><br />El plugin de Biblia proporciona la capacidad de mostrar versículos de la Biblia de fuentes diferentes durante el servicio.. - - - - Import a Bible - - - - - Add a new Bible - - - - - Edit the selected Bible - - - - - Delete the selected Bible - - - - - Preview the selected Bible - - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - - - - + Bible name singular - Biblia + Biblia - + Bibles name plural - Biblias + Biblias - + Bibles container title - Biblias + Biblias - + No Book Found - No se encontró el libro + No se encontró el libro - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - + No se hayó el nombre en esta Biblia. Revise que el nombre del libro esté deletreado correctamente. + + + + Import a Bible. + Importar una Biblia. + + + + Add a new Bible. + Agregar una Biblia nueva. + + + + Edit the selected Bible. + Editar la Biblia seleccionada. + + + + Delete the selected Bible. + Eliminar la Biblia seleccionada. + + + + Preview the selected Bible. + Visualizar la Biblia seleccionada. + + + + Send the selected Bible live. + Proyectar la Biblia seleccionada. + + + + Add the selected Bible to the service. + Agregar esta Biblia al servicio. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Complemento de Biblias</strong><br />El complemento de Biblias proporciona la capacidad de mostrar versículos de diversas fuentes, durante el servicio. BiblesPlugin.BibleManager - + Scripture Reference Error Error de Referencia Bíblica - + Web Bible cannot be used - + No se puede usar la Biblia Web - + Text Search is not available with Web Bibles. - + LA búsqueda no esta disponible para Biblias Web. - + 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. - + No ingreso una palabra clave a buscar. +Puede separar palabras clave por un espacio para buscar todas las palabras clave y puede separar conr una coma para buscar una de ellas. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No existen Bilbias instaladas. Puede usar el Asistente de Importación para instalar una o varias más. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -330,776 +345,1014 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + OpenLP no soporta su referencia bíblica o esta no es válida. Por favor asegurese que tenga una estructura similar a alguno de los siguientes patrones: + +Libro Capítulo +Libro Capítulo-Capítulo +Libro Capítulo:Versículo-Versículo +Libro Capítulo:Versículo-Versículo,Versículo-Versículo +Libro Capítulo:Versículo-Versículo,Capítulo:Versículo-Versículo +Libro Capítulo:Versículo-Capítulo:Versículo - + No Bibles Available - + Biblias no Disponibles BiblesPlugin.BiblesTab - - - Verse Display - Visualización de versículos - + Verse Display + Visualización de versículos + + + Only show new chapter numbers - Solo mostrar los números de capítulos nuevos - - - - Layout style: - - - - - Display style: - + Solo mostrar números para capítulos nuevos Bible theme: - - - - - Verse Per Slide - - - - - Verse Per Line - - - - - Continuous - + Tema: No Brackets - + Sin paréntesis ( And ) - + ( Y ) { And } - + { Y } [ And ] - + [ Y ] Note: Changes do not affect verses already in the service. - + Nota: +Los cambios no se aplican a ítems en el servcio. Display second Bible verses + Mostrar versículos secundarios + + + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + Nombre actual: + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + Antiguo Testamento + + + + New Testament + Nuevo Testamento + + + + Apocrypha + Apócrifos + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Debe seleccionar un libro. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registrando Biblia y cargando libros... + + + + Registering Language... + Registrando Idioma... + + + + Importing %s... + Importing <book name>... + Importando %s... + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - Asistente de Importación de Biblias + Asistente para Biblias - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Este asistente le ayudará a importar Biblias en una variedad de formatos. Haga clic en el botón siguiente para empezar el proceso seleccionando un formato a importar. + Este asistente le ayudará a importar Biblias en una variedad de formatos. Haga clic en el botón siguiente para empezar el proceso seleccionando un formato a importar. - + Web Download - Descarga Web - - - - Location: - Ubicación: - - - - Crosswalk - Crosswalk - - - - BibleGateway - BibleGateway - - - - Bible: - Biblia: - - - - Download Options - Opciones de Descarga - - - - Server: - Servidor: - - - - Username: - Usuario: - - - - Password: - Contraseña: - - - - Proxy Server (Optional) - Servidor Proxy (Opcional) - - - - License Details - Detalles de Licencia - - - - Set up the Bible's license details. - Establezca los detalles de licencia de la Biblia. - - - - Version name: - - - - - Copyright: - Derechos de autor: - - - - Please wait while your Bible is imported. - Por favor, espere mientras que la Biblia es importada. - - - - You need to specify a file with books of the Bible to use in the import. - - - - - You need to specify a file of Bible verses to import. - - - - - You need to specify a version name for your Bible. - - - - - Bible Exists - Ya existe la Biblia - - - - Your Bible import failed. - La importación de su Biblia falló. - - - - You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - - - - - This Bible already exists. Please import a different Bible or first delete the existing one. - - - - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - - Permissions: - - - - - CSV File - - - - - Bibleserver - - - - - Bible file: - - - - - Testaments file: - - - - - Books file: - + Descarga Web + Location: + Ubicación: + + + + Crosswalk + Crosswalk + + + + BibleGateway + BibleGateway + + + + Bible: + Biblia: + + + + Download Options + Opciones de Descarga + + + + Server: + Servidor: + + + + Username: + Usuario: + + + + Password: + Contraseña: + + + + Proxy Server (Optional) + Servidor Proxy (Opcional) + + + + License Details + Detalles de Licencia + + + + Set up the Bible's license details. + Establezca los detalles de licencia de la Biblia. + + + + Version name: + Nombre de la versión: + + + + Copyright: + Derechos de autor: + + + + Please wait while your Bible is imported. + Por favor, espere mientras que la Biblia es importada. + + + + You need to specify a file with books of the Bible to use in the import. + Debe especificar un archivo que contenga los libros de la Biblia para importar. + + + + You need to specify a file of Bible verses to import. + Debe especificar un archivo que contenga los versículos de la Biblia para importar. + + + + You need to specify a version name for your Bible. + Debe ingresar un nombre para la versión de esta Biblia. + + + + Bible Exists + Ya existe la Biblia + + + + Your Bible import failed. + La importación de su Biblia falló. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Debe establecer los derechos de autor de su Biblia. Si es de Dominio Público debe indicarlo. + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Ya existe esta Biblia. Por favor importe una diferente o borre la anterior antes de continuar. + + + + Permissions: + Permisos: + + + + CSV File + Archivo CSV + + + + Bibleserver + Servidor + + + + Bible file: + Archivo de biblia: + + + + Books file: + Archivo de libros: + + + Verses file: - + Archivo de versículos: - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + openlp.org 1.x Bible Files - + Archivos de Biblia openlp.org 1.x + + + + Registering Bible... + Registrando Biblia... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Biblia registrada. Note que los versículos se descargarán según +sea necesario, por lo que se necesita una conexión a internet. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Seleccionar Idioma + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP no puede determinar el idioma de la traducción de esta Biblia. Seleccione uno de la siguiente lista. + + + + Language: + Idioma: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Debe elegir un idioma. BiblesPlugin.MediaItem - + Quick - Rápida + Rápida - + Find: - Encontrar: + Encontrar: - - Results: - Resultados: - - - + Book: - Libro: + Libro: - + Chapter: - Capítulo: + Capítulo: - + Verse: - Versículo: + Versículo: - + From: - Desde: + Desde: - + To: - Hasta: + Hasta: - + Text Search - Búsqueda de texto + Buscar texto - - Clear - Limpiar - - - - Keep - Conservar - - - + Second: - + Secundaria: - + Scripture Reference - + Referencia Bíblica + + + + Toggle to keep or clear the previous results. + Alterna entre mantener o limpiar resultados previos. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... - + Importando %s %s... BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... + Detectando codificación (esto puede tardar algunos minutos)... + + + + Importing %s %s... + Importing <book name> <chapter>... + Importando %s %s... + + + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory - - Importing %s %s... - Importing <book name> <chapter>... + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Nombre de la versión: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Debe ingresar un nombre para la versión de esta Biblia. + + + + Bible Exists + Ya existe la Biblia + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Error de Descarga + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Diapositivas</strong><br />Este complemento le permite mostar diapositivas de texto, de igual manera que se muestran las canciones. Este ofrece una mayor libertad que el complemento de canciones. + + + + Custom Slide + name singular + Diapositiva + + + + Custom Slides + name plural + Diapositivas + + + + Custom Slides + container title + Diapositivas + + + + Load a new custom slide. + Cargar nueva diapositiva. + + + + Import a custom slide. + Importar nueva diapositiva. + + + + Add a new custom slide. + Agregar nueva diapositiva. + + + + Edit the selected custom slide. + Editar diapositiva seleccionada. + + + + Delete the selected custom slide. + Eliminar diapositiva seleccionada. + + + + Preview the selected custom slide. + Visualizar diapositiva seleccionada. + + + + Send the selected custom slide live. + Proyectar diapositiva seleccionada. + + + + Add the selected custom slide to the service. + Agregar diapositiva al servicio. CustomPlugin.CustomTab - + Custom Display - Presentación Personalizada + Pantalla Personal - + Display footer - + Mostrar pie de página CustomPlugin.EditCustomForm - + Edit Custom Slides - Editar Diapositivas Personalizadas + Editar Diapositivas - + &Title: - + &Título: - + Add a new slide at bottom. - + Nueva diapositiva al final. - + Edit the selected slide. - + Editar la diapositiva seleccionada. - + Edit all the slides at once. - + Editar todas las diapositivas a la vez. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + Dividir la diapositiva insertando un separador. - + The&me: - + Te&ma: - + &Credits: - + &Creditos: - + You need to type in a title. - + Debe escribir un título. - + You need to add at least one slide - + Debe agregar al menos una diapositiva - + Ed&it All - + Ed&itar Todo + + + + Insert Slide + Insertar - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title - + + General + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - - - - Load a new Image - - - - - Add a new Image - - - - - Edit the selected Image - - - - - Delete the selected Image - - - - - Preview the selected Image - - - - - Send the selected Image live - - - - - Add the selected Image to the service - - - - - Image - name singular - Imagen + <strong>Complemento de Imagen</strong><br />El complemento de imagen permite proyectar imágenes.<br />Una de sus características, es que permite agrupar imagenes para facilitar su proyección. Este plugin puede utilizar el "bulce de tiempo" de OpenLP para crear una presentación que avance automáticamente. Aparte, las imágenes de este plugin se pueden utilizar para reemplazar la imagen de fondo del tema en actual. - Images - name plural - + Image + name singular + Imagen - + + Images + name plural + Imágenes + + + Images container title - + Imágenes + + + + Load a new image. + Cargar una imagen nueva. + + + + Add a new image. + Agregar una imagen nueva. + + + + Edit the selected image. + Editar la imagen seleccionada. + + + + Delete the selected image. + Eliminar la imagen seleccionada. + + + + Preview the selected image. + Visualizar la imagen seleccionada. + + + + Send the selected image live. + Proyectar la imagen seleccionada. + + + + Add the selected image to the service. + Agregar esta imagen al servicio. ImagePlugin.ExceptionDialog - + Select Attachment - + Seleccionar Anexo ImagePlugin.MediaItem - + Select Image(s) - Seleccionar Imagen(es) + Seleccionar Imagen(es) - + You must select an image to delete. - + Debe seleccionar una imagen para eliminar. - + You must select an image to replace the background with. - + Debe seleccionar una imagen para reemplazar el fondo. - + Missing Image(s) - + Imágen(es) faltante - + The following image(s) no longer exist: %s - + La siguiente imagen(es) ya no esta disponible: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + La siguiente imagen(es) ya no esta disponible: %s +¿Desea agregar las demás imágenes? - + There was a problem replacing your background, the image file "%s" no longer exists. - + Ocurrió un problema al reemplazar el fondo, el archivo "%s" ya no existe. MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - Medios + <strong>Complemento de Medios</strong><br />El complemento de medios permite reproducir audio y video. Media - name plural - Medios + name singular + Medio - + + Media + name plural + Medios + + + Media container title - Medios + Medios + + + + Load new media. + Cargar un medio nuevo. + + + + Add new media. + Agregar un medio nuevo. + + + + Edit the selected media. + Editar el medio seleccionado. + + + + Delete the selected media. + Eliminar el medio seleccionado. + + + + Preview the selected media. + Visualizar el medio seleccionado. + + + + Send the selected media live. + Proyectar el medio seleccionado. + + + + Add the selected media to the service. + Agregar este medio al servicio. MediaPlugin.MediaItem - + Select Media - Seleccionar Medios + Seleccionar Medios - + You must select a media file to delete. - + Debe seleccionar un medio para eliminar. - + Missing Media File - + Archivo de Medios faltante - + The file %s no longer exists. - + El archivo %s ya no esta disponible. - + You must select a media file to replace the background with. - + Debe seleccionar un archivo de medios para reemplazar el fondo. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Ocurrió un problema al reemplazar el fondo, el archivo "%s" ya no existe. - + Videos (%s);;Audio (%s);;%s (*) - + Videos (%s);;Audio (%s);;%s (*) MediaPlugin.MediaTab - + Media Display - + Pantalla de Medios - + Use Phonon for video playback - + Use Phonon para reproducir video OpenLP - + Image Files - + Archivos de Imagen + + + + Information + Información + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + El formato de las Bilbias ha cambiado. +Debe actualizar las existentes. +¿Desea hacerlo en este momento? OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - Créditos + Créditos - + License - Licencia + Licencia - + Contribute - Contribuir + Contribuir - + build %s - + compilación %s - + 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. - + Este es un programa gratuito; usted puede distribuirlo y/o modificarlo bajo los términos de GNU General Public License según la publicación de Free Software Foundation; versión 2 de la Licencia. - + 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 below for more details. - + 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 below for more details. - + Project Lead %s @@ -1161,211 +1414,406 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - + Líder de Proyecto + %s + +Desarrolladores + %s + +Contribuyentes + %s + +Probadores + %s + +Empaquetadores + %s + +Traductores + Africano (af) + %s + Alemán (de) + %s + Inglés, Reino Unido (en_GB) + %s + Inglés, Sudáfrica (en_ZA) + %s + Estonio (et) + %s + Francés (fr) + %s + Húngaro (hu) + %s + Japonés (ja) + %s + Bokmål Noruego (nb) + %s + Holandés (nl) + %s + Portugés, Brasil (pt_BR) + %s + Ruso (ru) + %s + +Documentación + %s + +Compilado con + Python: http://www.python.org/ + Qt4: http://qt.nokia.com/ + PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro + Oxygen Icons: http://oxygen-icons.org/ + +Crédito Final + "Porque de tal manera amó Dios al mundo, + que ha dado a su Hijo unigénito, + para que todo aquel que en él cree, + no se pierda, mas tenga vida eterna." -- Juan 3:16 + + Y por último pero no menos importante, + el crédito final va a Dios nuestro Padre, + por enviar a su Hijo a morir en la cruz, + liberándonos del pecado. Traemos este software + de forma gratuita, porque Él nos ha liberado. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP es un software de proyección para iglesias gratuito, utilizado para mostar diapositivas de canciones, versículos de la Biblia, videos, imágenes, e incluso presentaciones (si OpenOffice.org, PowerPoint o PowerPoint Viewer están instalados) para el servicio de alabanza, utilizando una computadora y un proyector de datos. + +Para más información de OpenLP visite: http://openlp.org/ + +OpenLP es desarrollado y mantenido por voluntarios. Si desea apoyar la creación de más software Cristiano gratuito, por favor considere contribuir mediante el botón de abajo. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - - - UI Settings - - - - - Number of recent files to display: - - - - - Remember active media manager tab on startup - - - - - Double-click to send items straight to live - - - - - Expand new service items on creation - - - - - Enable application exit confirmation - - - - - Mouse Cursor - - - Hide mouse cursor when over display window - + UI Settings + Preferencias de Interface + Number of recent files to display: + Archivos recientes a mostrar: + + + + Remember active media manager tab on startup + Recordar la última pestaña de medios utilizada + + + + Double-click to send items straight to live + Doble-click para proyectar directamente + + + + Expand new service items on creation + Expandir nuevos ítems del servicio al crearlos + + + + Enable application exit confirmation + Preguntar antes de cerrar la aplicación + + + + Mouse Cursor + Cursor del Ratón + + + + Hide mouse cursor when over display window + Ocultar el cursor en la pantalla principal + + + Default Image - + Imagen por defecto - + Background color: - Color de Fondo: + Color de fondo: - + Image file: - + Archivo: - + Open File - + Abrir Archivo + + + + Preview items when clicked in Media Manager + Vista previa al hacer click en el Adminstrador de Medios + + + + Advanced + Avanzado + + + + Click to select a color. + Click para seleccionar color. + + + + Browse for an image file to display. + Buscar un archivo de imagen para mostrar. + + + + Revert to the default OpenLP logo. + Volver al logo por defecto de OpenLP. OpenLP.DisplayTagDialog - + Edit Selection - + Editar Selección - - Update - - - - + Description - - - - - Tag - + Descripción + Tag + Marca + + + Start tag - + Marca inicial - + End tag - + Marca final - - Default - - - - + Tag Id - + Id - + Start HTML - + Inicio HTML - + End HTML - + Final HTML + + + + Save + Guardar OpenLP.DisplayTagTab - + Update Error - + Error de Actualización - + Tag "n" already defined. + Etiqueta "n" ya definida. + + + + Tag %s already defined. + Etiqueta %s ya definida. + + + + New Tag + Etiqueta nueva + + + + </and here> - - Tag %s already defined. + + <HTML here> + + OpenLP.DisplayTags + + + Red + Rojo + + + + Black + Negro + + + + Blue + Azul + + + + Yellow + Amarillo + + + + Green + Verde + + + + Pink + Rosado + + + + Orange + Anaranjado + + + + Purple + Morado + + + + White + Blanco + + + + Superscript + Superíndice + + + + Subscript + Subíndice + + + + Paragraph + Párrafo + + + + Bold + Negrita + + + + Italics + Cursiva + + + + Underline + Subrayado + + + + Break + Salto + + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + ¡Uy! OpenLP encontró un problema, y no pudo recuperarse. El texto en el cuadro siguiente contiene información que podría ser útil para los desarrolladores de OpenLP, así que por favor envíe un correo a bugs@openlp.org, junto con una descripción detallada de lo que estaba haciendo cuando se produjo el problema. - + Error Occurred - + Se presento un Error - + Send E-Mail - + Enviar E-Mail - + Save to File - + Guardar a Archivo - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Por favor ingrese una descripción de lo que hacia al ocurrir el error +(Mínimo 20 caracteres) - + Attach File - + Archivo Adjunto - + Description characters to enter : %s - + Caracteres faltantes: %s OpenLP.ExceptionForm - + Platform: %s - + Plataforma: %s + - + Save Crash Report - + Guardar Reporte de Errores - + Text files (*.txt *.log *.text) - + Archivos de texto (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1380,10 +1828,23 @@ Version: %s --- Library Versions --- %s - + **OpenLP Bug Report** +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + - + *OpenLP Bug Report* Version: %s @@ -1399,1402 +1860,1505 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *Reporte de Errores OpenLP* +(Nota: Reporte de preferencia en Inglés) +Version: %s + +--- Detalles de la Excepción. --- + +%s + + --- Ratreo de Excepción --- +%s +--- Información del sistema --- +%s +--- Versión de Librerias --- +%s + OpenLP.FileRenameForm - + File Rename - + Cambiar Nombre - + New File Name: - + Nombre Nuevo: - + File Copy - + Copiar Archivo OpenLP.FirstTimeLanguageForm - + Select Translation - + Seleccionar Idioma - + Choose the translation you'd like to use in OpenLP. - + Elija la traducción que desea utilizar en OpenLP. - + Translation: - + Traducción: OpenLP.FirstTimeWizard - + Downloading %s... - + Descargando %s... - + Download complete. Click the finish button to start OpenLP. - + Descarga completa. Presione finalizar para iniciar OpenLP. - + Enabling selected plugins... - - - - - First Time Wizard - - - - - Welcome to the First Time Wizard - + Habilitando complementos seleccionados... - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - + First Time Wizard + Asistente Inicial - - Activate required Plugins - - - - - Select the Plugins you wish to use. - - - - - Songs - + + Welcome to the First Time Wizard + Bienvenido al Asistente Inicial - Custom Text - + Activate required Plugins + Activar complementos necesarios - Bible - + Select the Plugins you wish to use. + Seleccione los complementos que desea usar. - - Images - + + Songs + Canciones - Presentations - + Custom Text + Texto Personalizado + Bible + Biblia + + + + Images + Imágenes + + + + Presentations + Presentaciones + + + Media (Audio and Video) - + Medios (Audio y Video) - + Allow remote access - + Permitir acceso remoto - + Monitor Song Usage - - - - - Allow Alerts - - - - - No Internet Connection - - - - - Unable to detect an Internet connection. - + Monitorear el uso de Canciones + Allow Alerts + Permitir Alertas + + + + No Internet Connection + Sin Conexión a Internet + + + + Unable to detect an Internet connection. + No se detectó una conexión a Internet. + + + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - + No se encontró una conexión a Internet. El Asistente Inicial necesita una conexión a Internet para poder descargar canciones de muestra, Biblias y temas. + +Para volver a ejecutar el AsistenteInicial e importar estos datos de muestra posteriormente, presione el botón de cancelar ahora, compruebe su conexión a Internet y reinicie OpenLP. + +Para cancelar el Asistente Inicial por completo, pulse el botón Finalizar ahora. - + Sample Songs - + Canciones de Muestra - + Select and download public domain songs. - + Seleccionar y descargar canciones de dominio público. - + Sample Bibles - + Biblias de Muestra - + Select and download free Bibles. - + Seleccionar y descargar Biblias gratuitas. - + Sample Themes - + Temas de Muestra - + Select and download sample themes. - + Seleccionar y descargar temas de muestra. - + Default Settings - + Configuración por defecto - + Set up default settings to be used by OpenLP. - + Utilizar la configuración por defecto. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Pantalla predeterminada: - + Select default theme: - + Seleccione el tema por defecto: - + Starting configuration process... - + Iniciando proceso de configuración... + + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Este asistente configurará OpenLP para su uso inicial. Presione el botón Siguiente para iniciar. + + + + Setting Up And Downloading + Configurando && Descargando + + + + Please wait while OpenLP is set up and your data is downloaded. + Por favor espere mientras OpenLP se configura e importa los datos. + + + + Setting Up + Configurando + + + + Click the finish button to start OpenLP. + Presione finalizar para iniciar OpenLP. OpenLP.GeneralTab - + General - General + General + + + + Monitors + Monitores + + + + Select monitor for output display: + Seleccionar monitor para proyectar: + + + + Display if a single screen + Mostar si solo hay una pantalla - Monitors - Monitores + Application Startup + Inicio de la Aplicación - Select monitor for output display: - Seleccionar monitor para visualizar la salida: + Show blank screen warning + Mostrar advertencia de pantalla en blanco - Display if a single screen - + Automatically open the last service + Abrir automáticamente el último servicio - Application Startup - Inicio de la Aplicación - - - - Show blank screen warning - Mostrar advertencia de pantalla en blanco + Show the splash screen + Mostrar pantalla de bienvenida - Automatically open the last service - Abrir automáticamente el último servicio + Application Settings + Configuración del Programa - Show the splash screen - Mostrar pantalla de bienvenida + Prompt to save before starting a new service + Ofrecer guardar antes de abrir un servicio nuevo - Application Settings - Configuración del Programa + Automatically preview next item in service + Vista previa automatica del siguiente ítem de servicio + + + + sec + seg + + + + CCLI Details + Detalles de CCLI + + + + SongSelect username: + Usuario SongSelect: + + + + SongSelect password: + Contraseña SongSelect: + + + + Display Position + Posición de Pantalla + + + + X + X + + + + Y + Y + + + + Height + Altura + + + + Width + Ancho + + + + Override display position + Ignorar posición de pantalla + + + + Check for updates to OpenLP + Buscar actualizaciones para OpenLP + + + + Unblank display when adding new live item + Mostar proyección al agregar un ítem nuevo - Prompt to save before starting a new service + Enable slide wrap-around - Automatically preview next item in service - - - - - Slide loop delay: - - - - - sec - - - - - CCLI Details - Detalles de CCLI - - - - SongSelect username: - - - - - SongSelect password: - - - - - Display Position - - - - - X - - - - - Y - - - - - Height - - - - - Width - - - - - Override display position - - - - - Check for updates to OpenLP + Timed slide interval: OpenLP.LanguageManager - + Language - + Idioma - + Please restart OpenLP to use your new language setting. - + Por favor reinicie OpenLP para usar su nuevo idioma. OpenLP.MainDisplay - + OpenLP Display - + Pantalla de OpenLP OpenLP.MainWindow - + &File - &Archivo - - - - &Import - &Importar - - - - &Export - &Exportar - - - - &View - &Ver - - - - M&ode - M&odo - - - - &Tools - &Herramientas - - - - &Settings - &Preferencias - - - - &Language - &Idioma - - - - &Help - &Ayuda - - - - Media Manager - Gestor de Medios - - - - Service Manager - Gestor de Servicio + &Archivo - Theme Manager - Gestor de Temas + &Import + &Importar + + + + &Export + &Exportar - &New - &Nuevo + &View + &Ver + + + + M&ode + M&odo + + + + &Tools + &Herramientas - Ctrl+N - Ctrl+N + &Settings + &Preferencias - - &Open - &Abrir + + &Language + &Idioma - Open an existing service. - + &Help + &Ayuda - - Ctrl+O - Ctrl+O + + Media Manager + Gestor de Medios - &Save - &Guardar + Service Manager + Gestor de Servicio - Save the current service to disk. - + Theme Manager + Gestor de Temas - Ctrl+S - Crtl+G - - - - Save &As... - Guardar &Como... + &New + &Nuevo - Save Service As - Guardar Servicio Como + &Open + &Abrir - Save the current service under a new name. - + Open an existing service. + Abrir un servicio existente. - Ctrl+Shift+S - + &Save + &Guardar - + + Save the current service to disk. + Guardar el servicio actual en el disco. + + + + Save &As... + Guardar &Como... + + + + Save Service As + Guardar Servicio Como + + + + Save the current service under a new name. + Guardar el servicio actual con un nombre nuevo. + + + E&xit - &Salir + &Salir - + Quit OpenLP - Salir de OpenLP + Salir de OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme - &Tema - - - - &Configure OpenLP... - - - - - &Media Manager - Gestor de &Medios + &Tema - Toggle Media Manager - Alternar Gestor de Medios + &Configure OpenLP... + &Configurar OpenLP... - Toggle the visibility of the media manager. - + &Media Manager + Gestor de &Medios - F8 - F8 + Toggle Media Manager + Alternar Gestor de Medios - &Theme Manager - Gestor de &Temas + Toggle the visibility of the media manager. + Alernar la visibilidad del gestor de medios. - Toggle Theme Manager - Alternar Gestor de Temas + &Theme Manager + Gestor de &Temas - Toggle the visibility of the theme manager. - + Toggle Theme Manager + Alternar Gestor de Temas - F10 - F10 + Toggle the visibility of the theme manager. + Alernar la visibilidad del gestor de temas. &Service Manager - Gestor de &Servicio + Gestor de &Servicio Toggle Service Manager - Alternar Gestor de Servicio + Alternar Gestor de Servicio Toggle the visibility of the service manager. - + Alernar la visibilidad del gestor de servicio. - F9 - F9 + &Preview Panel + &Panel de Vista Previa - &Preview Panel - &Panel de Vista Previa + Toggle Preview Panel + Alternar Panel de Vista Previa - Toggle Preview Panel - Alternar Panel de Vista Previa + Toggle the visibility of the preview panel. + Alernar la visibilidad del panel de vista previa. - Toggle the visibility of the preview panel. - + &Live Panel + Panel de Pro&yección - F11 - F11 + Toggle Live Panel + Alternar Panel de Proyección - &Live Panel - + Toggle the visibility of the live panel. + Alternar la visibilidad del panel de proyección. - Toggle Live Panel - + &Plugin List + Lista de &Complementos - Toggle the visibility of the live panel. - + List the Plugins + Lista de Complementos - F12 - F12 + &User Guide + Guía de &Usuario - &Plugin List - Lista de &Plugins - - - - List the Plugins - Lista de Plugins - - - - Alt+F7 - Alt+F7 - - - - &User Guide - Guía de &Usuario - - - &About - &Acerca De + &Acerca de - + More information about OpenLP - Más información acerca de OpenLP + Más información acerca de OpenLP - - Ctrl+F1 - Ctrl+F1 + + &Online Help + &Ayuda En Línea + + + + &Web Site + Sitio &Web - &Online Help - &Ayuda En Línea - - - - &Web Site - Sitio &Web - - - Use the system language, if available. - + Usar el idioma del sistema, si esta disponible. - + Set the interface language to %s - + Fijar el idioma de la interface en %s + + + + Add &Tool... + Agregar &Herramienta... + + + + Add an application to the list of tools. + Agregar una aplicación a la lista de herramientas. - Add &Tool... - + &Default + Por &defecto - Add an application to the list of tools. - - - - - &Default - - - - Set the view mode back to the default. - - - - - &Setup - - - - - Set the view mode to Setup. - - - - - &Live - En &vivo - - - - Set the view mode to Live. - - - - - Version %s of OpenLP is now available for download (you are currently running version %s). - -You can download the latest version from http://openlp.org/. - - - - - OpenLP Version Updated - Versión de OpenLP Actualizada - - - - OpenLP Main Display Blanked - Pantalla Principal de OpenLP en Blanco - - - - The Main Display has been blanked out - La Pantalla Principal esta en negro - - - - Default Theme: %s - - - - - English - Please add the name of your language here - Español - - - - Configure &Shortcuts... - - - - - Close OpenLP - - - - - Are you sure you want to close OpenLP? - - - - - Print the current Service Order. - - - - - Ctrl+P - + Modo de vizualización por defecto. + &Setup + &Administración + + + + Set the view mode to Setup. + Modo de Administración. + + + + &Live + En &vivo + + + + Set the view mode to Live. + Modo de visualización.en Vivo. + + + + Version %s of OpenLP is now available for download (you are currently running version %s). + +You can download the latest version from http://openlp.org/. + Esta disponible para descarga la versión %s de OpenLP (actualmente esta ejecutando la versión %s). + +Puede descargar la última versión desde http://openlp.org/. + + + + OpenLP Version Updated + Versión de OpenLP Actualizada + + + + OpenLP Main Display Blanked + Pantalla Principal de OpenLP en Blanco + + + + The Main Display has been blanked out + La Pantalla Principal se ha puesto en blanco + + + + Default Theme: %s + Tema por defecto: %s + + + + English + Please add the name of your language here + Español + + + + Configure &Shortcuts... + Configurar &Atajos... + + + + Close OpenLP + Cerrar OpenLP + + + + Are you sure you want to close OpenLP? + ¿Desea realmente salir de OpenLP? + + + Open &Data Folder... - + Abrir Folder de &Datos... - + Open the folder where songs, bibles and other data resides. - + Abrir el folder donde se almacenan las canciones, biblias y otros datos. - + &Configure Display Tags - + &Configurar Etiquetas de Visualización - + &Autodetect - + &Autodetectar + + + + Update Theme Images + Actualizar Imágenes de Tema + + + + Update the preview images for all themes. + Actualizar imagen de vista previa de todos los temas. + + + + Print the current service. + Imprimir Orden del Servicio actual. OpenLP.MediaManagerItem - + No Items Selected - + Nada Seleccionado &Add to selected Service Item - + &Agregar al ítem del Servico - + You must select one or more items to preview. - + Debe seleccionar uno o más ítems para visualizar. - + You must select one or more items to send live. - + Debe seleccionar uno o más ítems para proyectar. - + You must select one or more items. - + Debe seleccionar uno o más ítems. - + You must select an existing service item to add to. - + Debe seleccionar un servicio existente al cual añadir. - + Invalid Service Item - + Ítem de Servicio no válido - + You must select a %s service item. - + Debe seleccionar un(a) %s del servicio. + + + + You must select one or more items to add. + Debe seleccionar uno o más ítemes para agregar. + + + + No Search Results + Sin Resultados + + + + Duplicate filename %s. +This filename is already in the list + Nombre %s duplicado. +Este nombre ya existe en la lista OpenLP.PluginForm - + Plugin List - Lista de Plugins + Lista de Complementos - + Plugin Details - Detalles de Plugin + Detalles del Complemento - + Status: - Estado: + Estado: - + Active - Activo + Activo - + Inactive - Inactivo + Inactivo - + %s (Inactive) - + %s (Inactivo) - + %s (Active) - + %s (Activo) - + %s (Disabled) - + %s (Desabilitado) OpenLP.PrintServiceDialog - + Fit Page - + Ajustar a Página - + Fit Width - + Ajustar a Ancho OpenLP.PrintServiceForm - + Options - + Opciones Close - + Cerrar Copy - + Copiar Copy as HTML - + Copiar como HTML - + Zoom In - + Acercar - + Zoom Out - + Alejar - + Zoom Original - + Zoom Original - + Other Options - + Otras Opciones - + Include slide text if available - + Incluir texto de diap. si está disponible - + Include service item notes - + Incluir las notas de servicio - + Include play length of media items - + Incluir la duración de los medios - - Service Order Sheet - + + Add page break before each text item + Agregar salto de página antes de cada ítem + + + + Service Sheet + Hoja de Servicio OpenLP.ScreenList - + Screen - + Pantalla - + primary - + principal OpenLP.ServiceItemEditForm - + Reorder Service Item - + Reorganizar ítem de Servicio OpenLP.ServiceManager - - Load an existing service - Abrir un servicio existente - - - - Save this service - Guardar este servicio - - - - Select a theme for the service - Seleccione un tema para el servicio - - - + Move to &top - + Mover al &inicio - + Move item to the top of the service. - + Mover el ítem al inicio del servicio. - + Move &up - + S&ubir - + Move item up one position in the service. - + Mover el ítem una posición hacia arriba. - + Move &down - + Ba&jar - + Move item down one position in the service. - + Mover el ítem una posición hacia abajo. - + Move to &bottom - + Mover al &final - + Move item to the end of the service. - + Mover el ítem al final del servicio. - + &Delete From Service - + &Eliminar Del Servicio - + Delete the selected item from the service. - + Eliminar el ítem seleccionado del servicio. - + &Add New Item - + &Agregar un ítem nuevo - + &Add to Selected Item - + &Agregar al ítem Seleccionado - + &Edit Item - &Editar Ítem + &Editar ítem - + &Reorder Item - + &Reorganizar ítem - + &Notes - &Notas + &Notas - + &Change Item Theme - &Cambiar Tema de Ítem - - - - File is not a valid service. -The content encoding is not UTF-8. - + &Cambiar Tema de ítem + File is not a valid service. +The content encoding is not UTF-8. + Este no es un servicio válido. +La codificación del contenido no es UTF-8. + + + File is not a valid service. - + El archivo no es un servicio válido. - + Missing Display Handler - + Controlador de Pantalla Faltante - + Your item cannot be displayed as there is no handler to display it - + No se puede mostrar el ítem porque no hay un controlador de pantalla disponible - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + El ítem no se puede mostar porque falta el complemento requerido o esta desabilitado - + &Expand all - + &Expandir todo - + Expand all the service items. - + Expandir todos los ítems del servicio. - + &Collapse all - + &Colapsar todo - + Collapse all the service items. - + Colapsar todos los ítems del servicio. - + Open File - + Abrir Archivo - + OpenLP Service Files (*.osz) - + Archivo de Servicio OpenLP (*.osz) - + Moves the selection down the window. - + Mover selección hacia abajo. - + Move up - + Subir - + Moves the selection up the window. - + Mover selección hacia arriba. - + Go Live - + Proyectar - + Send the selected item to Live. - + Proyectar el ítem seleccionado. - + Modified Service - + Servicio Modificado - - Notes: - - - - + &Start Time - + &Tiempo de Inicio - + Show &Preview - + Mostrar &Vista previa - + Show &Live - + Mostrar &Proyección - + The current service has been modified. Would you like to save this service? - + El servicio actual a sido modificado. ¿Desea guardar este servicio? + + + + File could not be opened because it is corrupt. + No se pudo abrir el archivo porque está corrompido. + + + + Empty File + Archivo Vacio + + + + This service file does not contain any data. + El archivo de servicio no contiene ningún dato. + + + + Corrupt File + Archivo Corrompido + + + + Custom Service Notes: + Notas Personales del Servicio: + + + + Notes: + Notas: + + + + Playing time: + Tiempo de reproducción: + + + + Untitled Service + Servicio Sin nombre + + + + Load an existing service. + Abrir un servicio existente. + + + + Save this service. + Guardar este servicio. + + + + Select a theme for the service. + Seleccione un tema para el servicio. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + El archivo está corrupto o no es un archivo OpenLP 2.0 válido. OpenLP.ServiceNoteForm - + Service Item Notes - Notas de Elemento de Servicio + Notas de Elemento de Servicio OpenLP.SettingsForm - + Configure OpenLP - + Configurar OpenLP OpenLP.ShortcutListDialog - + Customize Shortcuts - + Cambiar Atajos - + Action - + Acción - + Shortcut - + Atajo - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + Duplicar Atajo - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + El atajo "%s" esta asignado a otra acción, por favor utilize un atajo diferente. - + Alternate - + Secundario + + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Seleccione una acción y presione uno de los siguientes botones para capturar un nuevo atajo primario y secundario, respectivamente. + + + + Default + Por defecto + + + + Custom + Personalizado + + + + Capture shortcut. + Capturar atajo. + + + + Restore the default shortcut of this action. + Restuarar el atajo por defecto para esta acción. + + + + Restore Default Shortcuts + Restaurar los Atajos Por defecto + + + + Do you want to restore all shortcuts to their defaults? + ¿Quiere restaurar todos los atajos a su valor original? OpenLP.SlideController - - Move to previous - Regresar al anterior - - - - Move to next - Ir al siguiente - - - + Hide - + Ocultar - - Move to live - Proyectar en vivo - - - - Start continuous loop - Iniciar bucle continuo - - - - Stop continuous loop - Detener el bucle - - - - Delay between slides in seconds - Espera entre diapositivas en segundos - - - - Start playing media - Iniciar la reproducción de medios - - - + Go To - + Ir A - - Edit and reload song preview - - - - + Blank Screen - + Pantalla en Blanco - + Blank to Theme - + Proyectar el Tema - + Show Desktop - + Mostrar Escritorio - + Previous Slide - + Diapositiva Anterior - + Next Slide - + Diapositiva Siguiente - + Previous Service - + Servicio Anterior - + Next Service - + Servicio Siguiente - + Escape Item - + Salir de ítem + + + + Move to previous. + Ir al anterior. + + + + Move to next. + Ir al siguiente. + + + + Play Slides + Reproducir diapositivas + + + + Play Slides in Loop + Reproducir en Bucle + + + + Play Slides to End + Reproducir hasta el final + + + + Delay between slides in seconds. + Tiempo entre diapositivas en segundos. + + + + Move to live. + Proyectar en vivo. + + + + Add to Service. + Agregar al Servicio. + + + + Edit and reload song preview. + Editar y actualizar la vista previa. + + + + Start playing media. + Reproducir medios. OpenLP.SpellTextEdit - + Spelling Suggestions - + Sugerencias Ortográficas - + Formatting Tags - + Etiquetas de Formato + + + + Language: + Idioma: OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - + Horas: - - h - - - - - m - - - - + Minutes: + Minutos: + + + + Seconds: + Segundos: + + + + Item Start and Finish Time + Tiempo de Inicio y Final + + + + Start + Inicio + + + + Finish + Final + + + + Length + Duración + + + + Time Validation Error + Error de Validación de Tiempo + + + + Finish time is set after the end of the media item - - Seconds: + + Start time is after the finish time of the media item OpenLP.ThemeForm - + Select Image - + Seleccionar Imagen - + Theme Name Missing - + Falta Nombre de Tema - + There is no name for this theme. Please enter one. - + No existe nombre para este tema. Ingrese uno. - + Theme Name Invalid - + Nombre de Tema no válido - + Invalid theme name. Please enter one. - + Nombre de tema no válido. Ingrese uno. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2803,896 +3367,1004 @@ The content encoding is not UTF-8. Create a new theme. - + Crear un tema nuevo. Edit Theme - Editar Tema + Editar Tema Edit a theme. - + Editar un tema. Delete Theme - Eliminar Tema + Eliminar Tema Delete a theme. - + Eliminar un tema. Import Theme - Importar Tema + Importar Tema Import a theme. - + Importa un tema. Export Theme - Exportar Tema + Exportar Tema Export a theme. - + Exportar un tema. &Edit Theme - + &Editar Tema &Delete Theme - + Elimi&nar Tema Set As &Global Default - + &Global, por defecto - + %s (default) - + %s (por defecto) - + You must select a theme to edit. - + Debe seleccionar un tema para editar. - + You are unable to delete the default theme. - - - - - You have not selected a theme. - + No se puede eliminar el tema predeterminado. + You have not selected a theme. + No ha seleccionado un tema. + + + Save Theme - (%s) - Guardar Tema - (%s) + Guardar Tema - (%s) - + Theme Exported - + Tema Exportado - + Your theme has been successfully exported. - + Su tema a sido exportado exitosamente. - + Theme Export Failed - + La importación falló - + Your theme could not be exported due to an error. - + No se pudo exportar el tema dedido a un error. - + Select Theme Import File - Seleccione el Archivo de Tema a Importar + Seleccione el Archivo de Tema a Importar - + File is not a valid theme. The content encoding is not UTF-8. - + Este no es un tema válido. +La codificación del contenido no es UTF-8. - + File is not a valid theme. - + El archivo no es un tema válido. - + Theme %s is used in the %s plugin. - + El tema %s se usa en el complemento %s. &Copy Theme - + &Copiar Tema &Rename Theme - + &Renombrar Tema &Export Theme - + &Exportar Tema - + You must select a theme to rename. - + Debe seleccionar un tema para renombrar. - + Rename Confirmation - + Confirmar Cambio de Nombre - + Rename %s theme? - + ¿Renombrar el tema %s? - + You must select a theme to delete. - + Debe seleccionar un tema para eliminar. - + Delete Confirmation - + Confirmar Eliminación - + Delete %s theme? - + ¿Eliminar el tema %s? - + Validation Error - + Error de Validación - + A theme with this name already exists. - + Ya existe un tema con este nombre. - + OpenLP Themes (*.theme *.otz) - + Tema OpenLP (*.theme *otz) OpenLP.ThemeWizard - + Theme Wizard - + Asistente para Temas - + Welcome to the Theme Wizard - + Bienvenido al Asistente para Temas - + Set Up Background - + Establecer un fondo - + Set up your theme's background according to the parameters below. - + Establecer el fondo de su tema según los siguientes parámetros. - + Background type: - + Tipo de fondo: - + Solid Color - Color Sólido + Color Sólido - + Gradient - Gradiente - - - - Color: - - - - - Gradient: - - - - - Horizontal - Horizontal - - - - Vertical - Vertical - - - - Circular - Circular - - - - Top Left - Bottom Right - - - - - Bottom Left - Top Right - - - - - Main Area Font Details - - - - - Define the font and display characteristics for the Display text - - - - - Font: - Fuente: + Gradiente + Color: + Color: + + + + Gradient: + Gradiente: + + + + Horizontal + Horizontal + + + + Vertical + Vertical + + + + Circular + Circular + + + + Top Left - Bottom Right + Arriba Izquierda - Abajo Derecha + + + + Bottom Left - Top Right + Abajo Izquierda - Abajo Derecha + + + + Main Area Font Details + Fuente del Área Principal + + + + Define the font and display characteristics for the Display text + Definir la fuente y las características para el texto en Pantalla + + + + Font: + Fuente: + + + Size: - Tamaño: + Tamaño: - + Line Spacing: - + Epaciado de Líneas: - + &Outline: - + &Contorno: - + &Shadow: - - - - - Bold - Negrita + &Sombra: + Bold + Negrita + + + Italic - + Cursiva - + Footer Area Font Details - + Fuente de Pié de página - + Define the font and display characteristics for the Footer text - + Definir la fuente y las características para el texto de Pié de página - + Text Formatting Details - + Detalles de Formato - + Allows additional display formatting information to be defined - + Permite definir información adicional de formato - + Horizontal Align: - + Alinea. Horizontal: - + Left - Izquierda + Izquierda - + Right - Derecha + Derecha - + Center - Centro + Centro - + Output Area Locations - + Ubicación del Área de Proyección - + Allows you to change and move the main and footer areas. - + Le permite mover y cambiar la ubicación del área principal y de pié de página. - + &Main Area - + Área &Principal - + &Use default location - + &Usar ubicación por defecto - + X position: - + Posición x: - + px - px + px - + Y position: - + Posición y: - + Width: - Ancho: + Ancho: - + Height: - Altura: + Altura: - + Use default location - + Usar ubicación por defecto - + Save and Preview - + Guardar && Previsualizar - + View the theme and save it replacing the current one or change the name to create a new theme - + Ver el tema y guardarlo reemplazando el actual o cambiando el nombre para crear un tema nuevo - + Theme name: - + Nombre: - + 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. - + Este asistente le ayudará a crear y editar temas. Presione Siguiente para iniciar el proceso al establecer el fondo. - + Transitions: - + Transiciones: - + &Footer Area - + &Pie de Página - + Edit Theme - %s - + Editar Tema - %s OpenLP.ThemesTab - + Global Theme - + Tema Global - + Theme Level - + Nivel - + S&ong Level - + &Canción - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - Utilice el tema de cada canción en la base de datos. Si una canción no tiene un tema asociado, utilizar el tema del servicio. Si el servicio no tiene un tema, utilizar el tema global. + Utilizar el tema de la canción en la base de datos. Si una canción no tiene un tema asociado, utilizar el tema del servicio. Si el servicio no tiene un tema, utilizar el tema global. - + &Service Level - + &Servicio - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - Utilizar el tema del servicio, ignorando el tema de las canciones individuales. Si el servicio no tiene un tema, utilizar el tema global. + Utilizar el tema del servicio ignorando los temas individuales. Si el servicio no tiene un tema, utilizar el tema global. - + &Global Level - + &Global - + Use the global theme, overriding any themes associated with either the service or the songs. - Utilice el tema global, ignorado los temas asociados con el servicio o con las canciones. + Utilizar el tema global, ignorado los temas asociados con el servicio o con las canciones. OpenLP.Ui - + Error - Error - - - - &Delete - &Eliminar - - - - Delete the selected item. - - - - - Move selection up one position. - - - - - Move selection down one position. - - - - - &Add - - - - - Advanced - Avanzado - - - - All Files - - - - - Create a new service. - - - - - &Edit - &Editar - - - - Import - - - - - Length %s - - - - - Live - - - - - Load - - - - - New - - - - - New Service - Servicio Nuevo - - - - OpenLP 2.0 - OpenLP 2.0 - - - - Open Service - Abrir Servicio - - - - Preview - Vista Previa - - - - Replace Background - - - - - Replace Live Background - - - - - Reset Background - - - - - Reset Live Background - - - - - Save Service - Guardar Servicio - - - - Service - - - - - Start %s - - - - - &Vertical Align: - - - - - Top - Superior - - - - Middle - Medio - - - - Bottom - Inferior - - - - About - Acerca De - - - - Browse... - - - - - Cancel - - - - - CCLI number: - - - - - Empty Field - - - - - Export - - - - - pt - Abbreviated font pointsize unit - pt - - - - Image - Imagen - - - - Live Background Error - - - - - Live Panel - + Error - New Theme - + &Delete + &Eliminar - - No File Selected - Singular - + + Delete the selected item. + Eliminar el ítem seleccionado. - - No Files Selected - Plural - + + Move selection up one position. + Mover selección un espacio hacia arriba. + + + + Move selection down one position. + Mover selección un espacio hacia abajo. + + + + &Add + &Agregar + + + + Advanced + Avanzado + + + + All Files + Todos los Archivos + + + + Create a new service. + Crear un servicio nuevo. - No Item Selected - Singular - + &Edit + &Editar - - No Items Selected - Plural - - - - - openlp.org 1.x - - - - - Preview Panel - - - - - Print Service Order - - - - - s - The abbreviated unit for seconds - + + Import + Importar - Save && Preview - Guardar && Vista Previa + Length %s + Duración %s - Search - Buscar + Live + En vivo - - You must select an item to delete. - - - - - You must select an item to edit. - - - - - Theme - Singular - Tema + + Load + Cargar - Themes - Plural - + New + Nuevo + + + + New Service + Servicio Nuevo + + + + OpenLP 2.0 + OpenLP 2.0 + + + + Preview + Vista previa + + + + Replace Background + Reemplazar Fondo + + + + Reset Background + Restablecer Fondo + + + + Save Service + Guardar Servicio + + + + Service + Servicio + + + + Start %s + Inicio %s + + + + &Vertical Align: + Alinea. &Vertical: + + + + Top + Superior + + + + Middle + Medio + + + + Bottom + Inferior + + + + About + Acerca de + + + + Browse... + Explorar... + + + + Cancel + Cancelar + + + + CCLI number: + Número CCLI: + + + + Empty Field + Campo Vacío + + + + Export + Exportar + + + + pt + Abbreviated font pointsize unit + pto + + + + Image + Imagen + + + + Live Background Error + Error del Fondo en proyección - Version - + New Theme + Tema Nuevo - - Finished import. - Importación finalizada. + + No File Selected + Singular + Archivo No Seleccionado + + + + No Files Selected + Plural + Archivos No Seleccionados + + + + No Item Selected + Singular + Nada Seleccionado + + + + No Items Selected + Plural + Nada Seleccionado + + + + openlp.org 1.x + openlp.org 1.x + + + + s + The abbreviated unit for seconds + s + + + + Save && Preview + Guardar && Previsualizar + + + + Search + Buscar + + + + You must select an item to delete. + Debe seleccionar un ítem para eliminar. + + + + You must select an item to edit. + Debe seleccionar un ítem para editar. + + + + Theme + Singular + Tema + + + + Themes + Plural + Temas + + + + Version + Versión - Format: - Formato: + Finished import. + Importación finalizada. - - Importing - Importando + + Format: + Formato: - Importing "%s"... - + Importing + Importando - Select Import Source - Seleccione Origen de Importación + Importing "%s"... + Importando "%s"... + Select Import Source + Seleccione la Fuente para Importar + + + Select the import format and the location to import from. - + Seleccione el formato a importar y su ubicación. - + The openlp.org 1.x 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. - - - - - Open %s File - + Se ha deshabilitado el importador openlp.org 1.x debido a la falta de un módulo Python. Si desea utilizar este importador, debe instalar el módulo "python-sqlite". - %p% - + Open %s File + Abrir %s Archivo + %p% + %p% + + + Ready. - + Listo. - + Starting import... - Iniciando importación... + Iniciando importación... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Debe especificar un archivo %s para importar. - + Welcome to the Bible Import Wizard - Bienvenido al Asistente de Importación de Biblias + Bienvenido al Asistente para Biblias - + Welcome to the Song Export Wizard - + Bienvenido al Asistente para Exportar Canciones - + Welcome to the Song Import Wizard - - - - - Author - Singular - + Bienvenido al Asistente para Importar Canciones - Authors - Plural - Autores + Author + Singular + Autor - - © - Copyright symbol. - + + Authors + Plural + Autores - Song Book - Singular - Himnario + © + Copyright symbol. + © - Song Books - Plural - + Song Book + Singular + Himnario - Song Maintenance - - - - - Topic - Singular - Categoría + Song Books + Plural + Himnarios + Song Maintenance + Administración de Canciones + + + + Topic + Singular + Categoría + + + Topics Plural - Categoría + Categorías + + + + Continuous + Continuo + + + + Default + Por defecto + + + + Display style: + Estilo de presentación: + + + + File + Archivos + + + + Help + Ayuda + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Distribución: + + + + Live Toolbar + Barra de Proyección + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP ya esta abierto. ¿Desea continuar? + + + + Settings + Preferencias + + + + Tools + Herramientas + + + + Verse Per Slide + Verso por Diapositiva + + + + Verse Per Line + Verso Por Línea + + + + View + Vista + + + + Duplicate Error + Error de Duplicación + + + + Unsupported File + Archivo no Soportado + + + + Title and/or verses not found + Título y/o verso no encontrado + + + + XML syntax error + Error XML de sintaxis + + + + View Mode + Disposición + + + + Welcome to the Bible Upgrade Wizard + Bienvenido al Asistente para Actualización de Biblias + + + + Open service. + Abrir Servicio. + + + + Print Service + Imprimir Servicio + + + + Replace live background. + Reemplazar el fondo proyectado. + + + + Reset live background. + Restablecer el fondo proyectado. + + + + &Split + &Dividir + + + + Split a slide into two only if it does not fit on the screen as one slide. + Dividir la diapositiva, solo si no se puede mostrar como una sola. OpenLP.displayTagDialog - + Configure Display Tags - + Configurar Etiquetas de Visualización @@ -3700,1222 +4372,1384 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - + <strong>Complemento de Presentaciones</strong><br />El complemento de presentaciones permite mostrar presentaciones, usando diversos programas. La selección del programa se realiza por medio de una casilla de selección. Presentation name singular - Presentación + Presentación Presentations name plural - Presentaciones + Presentaciones Presentations container title - Presentaciones + Presentaciones + + + + Load a new presentation. + Cargar una Presentación nueva. + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + PresentationPlugin.MediaItem - + Select Presentation(s) - Seleccionar Presentación(es) + Seleccionar Presentación(es) - + Automatic - + Automático - + Present using: - Mostrar usando: + Mostrar usando: - + File Exists - + Ya existe el Archivo - + A presentation with that filename already exists. - Ya existe una presentación con ese nombre. + Ya existe una presentación con este nombre. - - Unsupported File - - - - + This type of presentation is not supported. - + No existe soporte para este tipo de presentación. - + Presentations (%s) - + Presentaciones (%s) - + Missing Presentation - + Presentación faltante - + The Presentation %s no longer exists. - + La Presentación %s ya no esta disponible. - + The Presentation %s is incomplete, please reload. - + La Presentación %s esta incompleta, por favor recargela. PresentationPlugin.PresentationTab - + Available Controllers - Controladores Disponibles + Controladores Disponibles - + Allow presentation application to be overriden - + Permitir tomar control sobre el programa de presentación - + %s (unavailable) - + %s (no disponible) RemotePlugin - + <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. - - - - - Remote - name singular - + <strong>Acceso Remoto</strong><br />El acceso remoto le permite enviar mensajes a otra versión del programa en un equipo diferente, por medio del navegador de internet o por medio de API. - Remotes - name plural - Remotas + Remote + name singular + Remoto - + + Remotes + name plural + Remotos + + + Remote container title + Acceso remoto + + + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + OpenLP 2.0 Stage View + + + + + Service Manager + Gestor de Servicio + + + + Slide Controller + + + + + Alerts + Alertas + + + + Search + Buscar + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + Proyectar + + + + Add To Service + + + + + No Results + + + + + Options + Opciones + RemotePlugin.RemoteTab - + Serve on IP address: - + Dirección IP a Servir: - + Port number: - + Puerto número: - + Server Settings - + Config. de Servidor + + + + Remote URL: + URL Remota: + + + + Stage view URL: + URL Administración: SongUsagePlugin - + &Song Usage Tracking - + &Historial de Uso - + &Delete Tracking Data - + &Eliminar datos de Historial - + Delete song usage data up to a specified date. - - - - - &Extract Tracking Data - + Borrar el historial de datos hasta la fecha especificada. + &Extract Tracking Data + &Extraer datos de Historial + + + Generate a report on song usage. - + Generar un reporte del uso de las canciones. Toggle Tracking - + Alternar Historial Toggle the tracking of song usage. - + Alternar seguimiento del uso de las canciones. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - - - SongUsage - name singular - - - - - SongUsage - name plural - + <strong>Historial</strong><br />Este complemento mantiene un registro del número de veces que se usa una canción en los servicios. SongUsage + name singular + Historial + + + + SongUsage + name plural + Historiales + + + + SongUsage container title - + Historial + + + + Song Usage + Historial SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Borrar historial de canción - + Delete Selected Song Usage Events? - + ¿Borrar el historial de esta canción? - + Are you sure you want to delete selected Song Usage data? - + ¿Desea realmente borrar los datos del historial de la canción seleccionada? - + Deletion Successful - + Limpieza Exitosa - + All requested data has been deleted successfully. - + Todos los datos han sido borrados exitosamente. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Extracción del Historial - + Select Date Range - + Seleccionar Rango de Fechas - + to - hasta + hasta - + Report Location - Ubicación de Reporte + Ubicación de Reporte - + Output File Location - Archivo de Salida + Archivo de Salida - + usage_detail_%s_%s.txt - + historial_%s_%s.txt - + Report Creation - + Crear Reporte - + Report %s has been successfully created. - + Reporte +%s +se ha creado satisfactoriamente. - + Output Path Not Selected - + Ruta de salida no seleccionada - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. - + No se ha establecido una ubicación válida para el archivo de reporte. Por favor seleccione una ubicación en su equipo. SongsPlugin - + &Song - &Canción + &Canción - + Import songs using the import wizard. - + Importar canciones usando el asistente. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + <strong>Complemento de Canciones</strong><br />El complemento de canciones permite mostar y editar canciones. - + &Re-index Songs - + &Re-indexar Canciones - + Re-index the songs database to improve searching and ordering. - + Reorganiza la base de datos para mejorar la busqueda y ordenamiento. - + Reindexing songs... - - - - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - - Song - name singular - Canción + Reindexando canciones... + Song + name singular + Canción + + + Songs name plural - Canciones + Canciones - + Songs container title - Canciones - - - - Arabic (CP-1256) - - - - - Baltic (CP-1257) - - - - - Central European (CP-1250) - - - - - Cyrillic (CP-1251) - + Canciones - Greek (CP-1253) - + Arabic (CP-1256) + Árabe (CP-1256) - Hebrew (CP-1255) - + Baltic (CP-1257) + Báltico (CP-1257) - Japanese (CP-932) - + Central European (CP-1250) + Europa Central (CP-1250) - Korean (CP-949) - + Cyrillic (CP-1251) + Cirílico (CP-1251) - Simplified Chinese (CP-936) - + Greek (CP-1253) + Griego (CP-1253) - Thai (CP-874) - + Hebrew (CP-1255) + Hebreo (CP-1255) - Traditional Chinese (CP-950) - + Japanese (CP-932) + Japonés (CP-932) - Turkish (CP-1254) - + Korean (CP-949) + Koreano (CP-949) - Vietnam (CP-1258) - + Simplified Chinese (CP-936) + Chino Simplificado (CP-936) + Thai (CP-874) + Tailandés (CP-874) + + + + Traditional Chinese (CP-950) + Chino Tradicional (CP-950) + + + + Turkish (CP-1254) + Turco (CP-1254) + + + + Vietnam (CP-1258) + Vietnamita (CP-1258) + + + Western European (CP-1252) - + Europa Occidental (CP-1252) - + Character Encoding - + Codificación de Caracteres - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + La configuración de códigos de página es responsable +por la correcta representación de los caracteres. +Por lo general, la opción preseleccionada es la adecuada. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Por favor elija una codificación de caracteres. +La codificación se encarga de la correcta representación de caracteres. - + Exports songs using the export wizard. - + Exportar canciones usando el asistente. + + + + Add a new song. + Agregar una canción nueva. + + + + Edit the selected song. + Editar la canción seleccionada. + + + + Delete the selected song. + Eliminar la canción seleccionada. + + + + Preview the selected song. + Visualizar la canción seleccionada. + + + + Send the selected song live. + Proyectar la canción seleccionada. + + + + Add the selected song to the service. + Agregar esta canción al servicio. SongsPlugin.AuthorsForm - + Author Maintenance - Mantenimiento de Autores + Administración de Autores - + Display name: - Mostrar: + Mostrar: - + First name: - Nombre: + Nombre: - + Last name: - Apellido: + Apellido: - + You need to type in the first name of the author. - Tiene que escribir el nombre del autor. + Debe escribir el nombre del autor. - + You need to type in the last name of the author. - Debe ingresar el apellido del autor. + Debe ingresar el apellido del autor. - + You have not set a display name for the author, combine the first and last names? - + No a establecido un nombre para mostrar, ¿desea unir el nombre y el apellido? SongsPlugin.CCLIFileImport - - Importing song %d of %d - + + The file does not have a valid extension. + El archivo no tiene una extensión válida. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Administrado por %s SongsPlugin.EditSongForm - + Song Editor - Editor de Canción + Editor de Canción - + &Title: - + &Título: - + Alt&ernate title: - + Título alt&ernativo: - + &Lyrics: - + &Letras: - + &Verse order: - + Orden de &versos: - + Ed&it All - + Ed&itar Todo - + Title && Lyrics - Título && Letra + Título && Letra - + &Add to Song - &Agregar a Canción + &Agregar a Canción - + &Remove - &Quitar + &Quitar - + &Manage Authors, Topics, Song Books - + Ad&ministrar Autores, Categorías, Himnarios - + A&dd to Song - A&gregar a Canción + A&gregar a Canción - + R&emove - &Quitar + &Quitar - + Book: - Libro: + Libro: - + Number: - + Número: - + Authors, Topics && Song Book - + Autores, Categorías e Himnarios - + New &Theme - + &Tema Nuevo - + Copyright Information - Información de Derechos de Autor + Información de Derechos de Autor - + Comments - Comentarios + Comentarios - + Theme, Copyright Info && Comments - Tema, Derechos de Autor && Comentarios + Tema, Derechos de Autor && Comentarios - + Add Author - + Agregar Autor - + This author does not exist, do you want to add them? - + Este autor no existe, ¿desea agregarlo? - + This author is already in the list. - + Este autor ya esta en la lista. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + No seleccionado un autor válido. Seleccione un autor de la lista o ingrese un nombre nuevo y presione el botón "Agregar Autor a Canción" para agregar el autor nuevo. - + Add Topic - + Agregar Categoría - + This topic does not exist, do you want to add it? - + Esta categoría no existe, ¿desea agregarla? - + This topic is already in the list. - + Esta categoría ya esta en la lista. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + No seleccionado una categoría válida. Seleccione una categoría de la lista o ingrese un nombre nuevo y presione el botón "Agregar Categoría a Canción" para agregar la categoría nueva. - + You need to type in a song title. - + Debe escribir un título. - + You need to type in at least one verse. - + Debe agregar al menos un verso. - + Warning - + Advertencia - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + El orden de los versos no es válido. Ningún verso corresponde a %s. Las entradas válidas so %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + No ha utilizado %s en el orden de los versos. ¿Desea guardar la canción de esta manera? - + Add Book - + Agregar Himnario - + This song book does not exist, do you want to add it? - + Este himnario no existe, ¿desea agregarlo? - + You need to have an author for this song. - + Debe ingresar un autor para esta canción. - + You need to type some text in to the verse. - + Debe ingresar algún texto en el verso. SongsPlugin.EditVerseForm - + Edit Verse - Editar Verso + Editar Verso - + &Verse type: - + Tipo de &verso: - + &Insert - + &Insertar + + + + Split a slide into two by inserting a verse splitter. + Insertar un separador para dividir la diapositiva. SongsPlugin.ExportWizardForm - + Song Export Wizard - + Asistente para Exportar Canciones - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Este asistente le ayudará a exportar canciones al formato OpenLyrics que es gratuito y de código abierto. - + Select Songs - + Seleccione Canciones - + Uncheck All - + Desmarcar Todo - + Check All - + Marcar Todo - + Select Directory - + Seleccione un Directorio - - Select the directory you want the songs to be saved. - - - - + Directory: - + Directorio: - + Exporting - + Exportando - + Please wait while your songs are exported. - + Por favor espere mientras se exportan las canciones. - + You need to add at least one Song to export. - + Debe agregar al menos una Canción para exportar. - + No Save Location specified - + Destino No especificado - + Starting export... - + Iniciando exportación... - + Check the songs you want to export. - + Revise las canciones a exportar. - + You need to specify a directory. - + Debe especificar un directorio. - + Select Destination Folder - + Seleccione Carpeta de Destino + + + + Select the directory where you want the songs to be saved. + Seleccionar el directorio para guardar las canciones. SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Seleccione Documento/Presentación - + Song Import Wizard - + Asistente para Exportar Canciones - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Este asistente le ayudará a importar canciones de diversos formatos. Presione Siguiente para iniciar el proceso al seleccionar un formato a importar. - + Generic Document/Presentation - - - - - Filename: - - - - - Add Files... - + Documento/Presentación genérica + Filename: + Nombre: + + + + Add Files... + Agregar Archivos... + + + Remove File(s) - + Eliminar Archivo(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + Por favor espere mientras se exportan las canciones. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + El importador OpenLyrics no esta desarrollado, pero puede notar que tenemos la intención de hacerlo. Esperamos incluirlo en la siguiente versión. - - Administered by %s - - - - + OpenLP 2.0 Databases - + Base de Datos OpenLP 2.0 - + openlp.org v1.x Databases - + Base de datos openlp v1.x - + Words Of Worship Song Files - + Archivo Words Of Worship - + Songs Of Fellowship Song Files - + Archivo Songs Of Fellowship - + SongBeamer Files - + Archivo SongBeamer - + SongShow Plus Song Files - + Archivo SongShow Plus - + You need to specify at least one document or presentation file to import from. - + Debe especificar al menos un documento o presentación para importar. - + Foilpresenter Song Files - + Archivo Foilpresenter + + + + Copy + Copiar + + + + Save to File + Guardar a Archivo + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + El importador de Songs of Fellowship se ha deshabilitado porque OpenOffice.org o LibreOffice no esta disponible. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + El importador documento/presentación se ha deshabilitado porque OpenOffice.org o LibreOffice no esta disponible. SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Administrar la lista de autores, categorías y libros - - - + Titles - Títulos + Títulos - + Lyrics - Letra + Letra - + Delete Song(s)? - + ¿Eliminar Canción(es)? - + CCLI License: - + Licensia CCLI: - + Entire Song - + Canción Completa - + Are you sure you want to delete the %n selected song(s)? - - - + + ¿Desea realmente borrar %n canción(es) seleccionada(s)? + ¿Desea realmente borrar %n canciones seleccionadas? + + + Maintain the lists of authors, topics and books. + Administrar la lista de autores, categorías y libros. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Base de datos openlp.org 1.x no válida. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - + + Not a valid OpenLP 2.0 song database. + Base de datos OpenLP 2.0 no válida. SongsPlugin.OpenLyricsExport - + Exporting "%s"... - + Exportando "%s"... SongsPlugin.SongBookForm - + Song Book Maintenance - - - - - &Name: - + Administración de Himnarios - &Publisher: - + &Name: + &Nombre: - + + &Publisher: + &Editor: + + + You need to type in a name for the book. - + Debe ingresar un nombre para el himnario. SongsPlugin.SongExportForm - + Finished export. - + Exportación finalizada. - + Your song export failed. - + La importación falló. SongsPlugin.SongImport - + copyright - + derechos de autor + + + + The following songs could not be imported: + Las siguientes canciones no se importaron: + + + + Unable to open file + No se puede abrir el archivo + + + + File not found + No se encontró el archivo + + + + Cannot access OpenOffice or LibreOffice + Imposible accesar OpenOffice o LibreOffice SongsPlugin.SongImportForm - + Your song import failed. - + La importación falló. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + No se pudo agregar el autor. - + This author already exists. - + Este autor ya existe. - + Could not add your topic. - + No se pudo agregar la categoría. - + This topic already exists. - + Esta categoría ya existe. - + Could not add your book. - + No se pudo agregar el himnario. - + This book already exists. - + Este himnario ya existe. - + Could not save your changes. - + No se pudo guardar los cambios. - + Could not save your modified topic, because it already exists. - + No se pudo guardar la categoría, porque esta ya existe. - + Delete Author - Borrar Autor + Borrar Autor - + Are you sure you want to delete the selected author? - ¿Está seguro que desea eliminar el autor seleccionado? + ¿Está seguro que desea eliminar el autor seleccionado? - + This author cannot be deleted, they are currently assigned to at least one song. - + No se puede eliminar el autor, esta asociado con al menos una canción. - + Delete Topic - Borrar Categoría + Borrar Categoría - + Are you sure you want to delete the selected topic? - ¿Está seguro que desea eliminar la categoría seleccionada? + ¿Está seguro que desea eliminar la categoría seleccionada? - + This topic cannot be deleted, it is currently assigned to at least one song. - + No se puede eliminar la categoría, esta asociada con al menos una canción. - + Delete Book - Eliminar Libro + Eliminar Libro - + Are you sure you want to delete the selected book? - ¿Está seguro de que quiere eliminar el libro seleccionado? + ¿Está seguro de que quiere eliminar el himnario seleccionado? - + This book cannot be deleted, it is currently assigned to at least one song. - + Este himnario no se puede eliminar, esta asociado con al menos una canción. - + Could not save your modified author, because the author already exists. - + No se pudo guardar el autor, porque este ya existe. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + El autor %s ya existe. ¿Desea que las canciones con el autor %s utilizen el existente %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + La categoría %s ya existe. ¿Desea que las canciones con la categoría %s utilizen la existente %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + El himnario %s ya existe. ¿Desea que las canciones con el himnario %s utilizen el existente %s? SongsPlugin.SongsTab - + Songs Mode - Modo de canciones + Modo de canciones - + Enable search as you type - + Buscar a medida que se escribe - + Display verses on live tool bar - + Mostar los versos en la barra de proyección - + Update service from song edit - + Actualizar servicio desde el editor - + Add missing songs when opening service - + Agregar canciones faltantes al abrir el servicio SongsPlugin.TopicsForm - + Topic Maintenance - Mantenimiento de Categorías + Administración de Categorías - + Topic name: - Categoría: + Categoría: - + You need to type in a topic name. - + Debe escribir un nombre para la categoría. SongsPlugin.VerseType - - - Verse - Verso - - - - Chorus - Coro - - - - Bridge - Puente - - - - Pre-Chorus - Pre-Coro - - Intro - Intro + Verse + Verso - Ending - Final + Chorus + Coro + Bridge + Puente + + + + Pre-Chorus + Pre-Coro + + + + Intro + Intro + + + + Ending + Final + + + Other - Otro + Otro + + + + ThemeTab + + + Themes + Temas diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 14d81f18e..5e2fedeee 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -1,26 +1,26 @@ - + AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Sa ei ole sisestanud parameetrit, mida asendada. Kas tahad sellegi poolest jätkata? - + No Parameter Found Parameetreid ei leitud - + No Placeholder Found Kohahoidjat ei leitud - + The alert text does not contain '<>'. Do you want to continue anyway? Teate tekst ei sisalda '<>'. @@ -30,34 +30,34 @@ Kas tahad sellest hoolimata jätkata? AlertsPlugin - + &Alert &Teade - + Show an alert message. Teate kuvamine. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Teadete plugin</strong><br />Teadete plugina abil saab juhtida näiteks lastehoiu teadete kuvamist ekraanil - + Alert name singular Teade - + Alerts name plural Teated - + Alerts container title Teated @@ -66,47 +66,47 @@ Kas tahad sellest hoolimata jätkata? AlertsPlugin.AlertForm - + Alert Message Teate sõnum - + Alert &text: Teate &tekst: - + &New &Uus - + &Save &Salvesta - + Displ&ay &Kuva - + Display && Cl&ose Kuva && &sulge - + New Alert Uus teade - + You haven't specified any text for your alert. Please type in some text before clicking New. Sa ei ole oma teatele teksti lisanud. Enne nupu Uus vajutamist sisesta mingi tekst. - + &Parameter: &Parameeter: @@ -122,32 +122,32 @@ Kas tahad sellest hoolimata jätkata? AlertsPlugin.AlertsTab - + Font Font - + Font name: Fondi nimi: - + Font color: Teksti värvus: - + Background color: Tausta värvus: - + Font size: Teksti suurus: - + Alert timeout: Teate kestus: @@ -155,51 +155,54 @@ Kas tahad sellest hoolimata jätkata? BibleDB.Wizard - - Importing testaments... %s - Testamentide importimine... %s - - - - Importing testaments... done. - Testamentide importimine... valmis. - - - + Importing books... %s Raamatute importimine... %s - + Importing verses from %s... Importing verses from <book name>... Salmide importimine failist %s... - + Importing verses... done. Salmide importimine... valmis. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error Tõrge allalaadimisel - + Parse Error Parsimise viga - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Valitud salmide allalaadimisel esines viga. Kontrolli oma internetiühendust ning kui see viga kordub, teata sellest veast. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Sinu salmide vahemiku analüüsimisel esines viga. Kui see viga kordub, siis palun teata sellest veast. @@ -207,123 +210,133 @@ Kas tahad sellest hoolimata jätkata? BiblePlugin.MediaItem - + Bible not fully loaded. Piibel ei ole täielikult laaditud. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Ühe- ja kahekeelseid piiblisalmide otsitulemusi pole võimalik kombineerida. Kas tahad otsingu tulemused kustutada ja alustada uue otsinguga? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible &Piibel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Piibli plugin</strong><br />Piibli plugina abil saab teenistuse ajal kuvada erinevate tõlgete piiblisalme. - - - - Import a Bible - Piibli importimine - - - - Add a new Bible - Uue Piibli lisamine - - - - Edit the selected Bible - Valitud Piibli muutmine - - - - Delete the selected Bible - Valitud Piibli kustutamine - - - - Preview the selected Bible - Valitud Piibli eelvaade - - - - Send the selected Bible live - Valitud Piibli saatmine ekraanile - - - - Add the selected Bible to the service - Valitud Piibli lisamine teenistusse - - - + Bible name singular Piibel - + Bibles name plural Piiblid - + Bibles container title Piiblid - + No Book Found Ühtegi raamatut ei leitud - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Sellest Piiblist ei leitud vastavat raamatut. Kontrolli, kas sa sisestasid raamatu nime õigesti. + + + Import a Bible. + Piibli importimine. + + + + Add a new Bible. + Uue Piibli lisamine. + + + + Edit the selected Bible. + Valitud Piibli muutmine. + + + + Delete the selected Bible. + Valitud Piibli kustutamine. + + + + Preview the selected Bible. + Valitud Piibli eelvaade. + + + + Send the selected Bible live. + Valitud Piibli saatmine ekraanile. + + + + Add the selected Bible to the service. + Valitud Piibli lisamine teenistusele. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error Kirjakohaviite tõrge - + Web Bible cannot be used Veebipiiblit pole võimalik kasutada - + Text Search is not available with Web Bibles. Tekstiotsing veebipiiblist pole võimalik. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Praegu pole ühtegi Piiblit paigaldatud. Palun paigalda mõni Piibel importimise nõustaja abil. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Raamat peatükk:salm-salm,peatükk:salm-salm Raamat peatükk:salm-peatükk:salm - + No Bibles Available Ühtegi Piiblit pole saadaval @@ -350,45 +363,20 @@ Raamat peatükk:salm-peatükk:salm BiblesPlugin.BiblesTab - + Verse Display Salmi kuvamine - + Only show new chapter numbers Kuvatakse ainult uute peatükkide numbreid - - - Layout style: - Paigutuse laad: - - - - Display style: - Kuvalaad: - Bible theme: Piibli kujundus: - - - Verse Per Slide - Iga salm eraldi slaidil - - - - Verse Per Line - Iga salm eraldi real - - - - Continuous - Jätkuv - No Brackets @@ -422,258 +410,333 @@ Muudatused ei rakendu juba teenistusesse lisatud salmidele. Piiblit kuvatakse kahes keeles + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Piibli importimise nõustaja - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. See nõustaja aitab erinevatest vormingutest Piibleid importida. Klõpsa all asuvale edasi nupule, et alustada vormingu valimisest, millest importida. - + Web Download Veebist allalaadimine - + Location: Asukoht: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Piibel: - + Download Options Allalaadimise valikud - + Server: Server: - + Username: Kasutajanimi: - + Password: Parool: - + Proxy Server (Optional) Proksiserver (valikuline) - + License Details Litsentsist lähemalt - + Set up the Bible's license details. Määra Piibli litsentsi andmed. - + Version name: Versiooni nimi: - + Copyright: Autoriõigus: - + Please wait while your Bible is imported. Palun oota, kuni sinu Piiblit imporditakse. - + You need to specify a file with books of the Bible to use in the import. Pead määrama faili, mis sisaldab piibliraamatuid, mida tahad importida. - + You need to specify a file of Bible verses to import. Pead ette andma piiblisalmide faili, mida importida. - + You need to specify a version name for your Bible. Pead määrama Piibli versiooni nime. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Pead määrama piiblitõlke autoriõiguse! Avalikkuse omandisse kuuluvad Piiblid tuleb vastavalt tähistada. - + Bible Exists Piibel on juba olemas - + This Bible already exists. Please import a different Bible or first delete the existing one. See Piibel on juba olemas! Palun impordi mingi muu Piibel või kustuta enne olemasolev. - + Your Bible import failed. Piibli importimine nurjus. - - Starting Registering bible... - Piibli registreerimise alustamine... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Piibel on registreeritud. Pane tähele, et salmid laaditakse alla -vajadusel, seetõttu on vajalik internetiühendus. - - - + Permissions: Õigused: - + CSV File CSV fail - + Bibleserver Piibliserver - + Bible file: Piibli fail: - - Testaments file: - Testamentide fail: - - - + Books file: Raamatute fail: - + Verses file: Salmide fail: - - You have not specified a testaments file. Do you want to proceed with the import? - Sa pole määranud testamentide faili. Kas tahad importimisega jätkata? - - - + openlp.org 1.x Bible Files openlp.org 1.x piiblifailid + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + Keel: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + + BiblesPlugin.MediaItem - + Quick Kiirotsing - + Find: Otsing: - - Results: - Tulemused: - - - + Book: Raamat: - + Chapter: Peatükk: - + Verse: Salm: - + From: Algus: - + To: Kuni: - + Text Search Tekstiotsing - - Clear - Puhasta - - - - Keep - Säilita - - - + Second: Teine: - + Scripture Reference Salmiviide + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s. peatüki importimine... @@ -682,34 +745,261 @@ vajadusel, seetõttu on vajalik internetiühendus. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kooditabeli tuvastamine (see võib võtta mõne minuti)... - + Importing %s %s... Importing <book name> <chapter>... %s %s. peatüki importimine... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Versiooni nimi: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Pead määrama Piibli versiooni nime. + + + + Bible Exists + Piibel on juba olemas + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Tõrge allalaadimisel + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Kohandatud plugin</strong><br />Kohandatud plugin võimaldab tekitada oma tekstiga slaidid, mida kuvatakse ekraanil täpselt nagu laulusõnugi. See plugin võimaldab rohkem vabadust, kui laulude plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. + CustomPlugin.CustomTab - + Custom Display Kohandatud kuva - + Display footer Jaluse kuvamine @@ -717,192 +1007,139 @@ vajadusel, seetõttu on vajalik internetiühendus. CustomPlugin.EditCustomForm - + Edit Custom Slides Kohandatud slaidide muutmine - + &Title: &Pealkiri: - + Add a new slide at bottom. Uue slaidi lisamine kõige alumiseks. - + Edit the selected slide. Valitud slaidi muutmine. - + Edit all the slides at once. Kõigi slaidide muutmine ühekorraga. - - Split Slide - Slaidi tükeldamine - - - + Split a slide into two by inserting a slide splitter. Tükelda slaid kaheks, sisestades slaidide eraldaja. - + The&me: &Kujundus: - + &Credits: &Autorid: - + You need to type in a title. Pead sisestama pealkirja. - + You need to add at least one slide Pead lisama vähemalt ühe slaidi - + Ed&it All Muuda &kõiki + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - Impordi kohandatud - - - - Load a new Custom - Laadi uus kohandatud - - - - Add a new Custom - Lisa uus kohandatud - - - - Edit the selected Custom - Muuda valitud kohandatut - - - - Delete the selected Custom - Kustuta valitud kohandatud - - - - Preview the selected Custom - Valitud kohandatu eelvaade - - - - Send the selected Custom live - Valitud kohandatu saatmine ekraanile - - - - Add the selected Custom to the service - Valitud kohandatud slaidi lisamine teenistusse - - - - Custom - name singular - Kohandatud - - - - Customs - name plural - Kohandatud - - - - Custom - container title - Kohandatud + + General + Üldine ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Pildiplugin</strong><br />Pildiplugin võimaldab piltide kuvamise.<br />Üks selle plugina One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - Uue pildi laadimine - - - - Add a new Image - Uue pildi lisamine - - - - Edit the selected Image - Valitud pildi muutmine - - - - Delete the selected Image - Valitud pildi kustutamine - - - - Preview the selected Image - Valitud pildi eelvaatlemine - - - - Send the selected Image live - Valitud pildi saatmine ekraanile - - - - Add the selected Image to the service - Valitud pildi lisamine teenistusele - - - + Image name singular Pilt - + Images name plural Pildid - + Images container title Pildid + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment Manuse valimine @@ -910,38 +1147,38 @@ vajadusel, seetõttu on vajalik internetiühendus. ImagePlugin.MediaItem - + Select Image(s) Pildi (piltide) valimine - + You must select an image to delete. Pead valima pildi, mida kustutada. - + You must select an image to replace the background with. Pead enne valima pildi, millega tausta asendada. - + Missing Image(s) Puuduvad pildid - + The following image(s) no longer exist: %s Järgnevaid pilte enam pole: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Järgnevaid pilte enam pole: %sKas tahad teised pildid sellest hoolimata lisada? - + There was a problem replacing your background, the image file "%s" no longer exists. Tausta asendamisel esines viga, pildifaili "%s" enam pole. @@ -949,98 +1186,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Meediaplugin</strong><br />Meedia plugin võimaldab audio- ja videofailide taasesitamist. - - Load a new Media - Uue meedia laadimine - - - - Add a new Media - Uue meedia lisamine - - - - Edit the selected Media - Valitud meedia muutmine - - - - Delete the selected Media - Valitud meedia kustutamine - - - - Preview the selected Media - Valitud meedia eelvaatlus - - - - Send the selected Media live - Valitud meedia saatmine ekraanile - - - - Add the selected Media to the service - Valitud meedia lisamine teenistusse - - - + Media name singular Meedia - + Media name plural Meedia - + Media container title Meedia + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media Meedia valimine - + You must select a media file to delete. Pead valima meedia, mida kustutada. - + Missing Media File Puuduv meediafail - + The file %s no longer exists. Faili %s ei ole enam olemas. - + You must select a media file to replace the background with. Pead enne valima meediafaili, millega tausta asendada. - + There was a problem replacing your background, the media file "%s" no longer exists. Tausta asendamisel esines viga, meediafaili "%s" enam pole. - + Videos (%s);;Audio (%s);;%s (*) Videod (%s);;Audio (%s);;%s (*) @@ -1048,12 +1285,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display Meediakuva - + Use Phonon for video playback Phononi kasutamine video esitamiseks @@ -1061,62 +1298,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files Pildifailid + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - + Credits Autorid - + License Litsents - + Contribute Aita kaasa - + build %s kompileering %s - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - avatud lähtekoodiga laulusõnade kuvaja - -OpenLP on vaba esitlustarkvara kirikusse, võib öelda ka laulusõnade projitseerimise tarkvara, mis sobib laulusõnade, piiblisalmide, videote, piltide ja isegi esitluste (kui OpenOffice.org, PowerPoint või PowerPoint Viewer on paigaldatud) kuvamiseks dataprojektori kaudu kirikus. - -OpenLP kohta võid lähemalt uurida aadressil: http://openlp.org/ - -OpenLP on kirjutatud vabatahtlike poolt. Kui sulle meeldiks näha rohkem kristlikku tarkvara, siis võid annetada, selleks klõpsa alumisele nupule. - - - + 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. See programm on vaba tarkvara. Sa võid seda edasi levitada ja/või muuta vastavalt GNU Üldise Avaliku Litsentsi versiooni 2 (GNU GPL 2) tingimustele, nagu need on Vaba Tarkvara Fondi poolt avaldatud. - + 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 below for more details. Seda programmi levitatakse lootuses, et see on kasulik, kuid ILMA IGASUGUSE GARANTIITA; isegi KESKMISE/TAVALISE KVALITEEDI GARANTIITA või SOBIVUSELE TEATUD KINDLAKS EESMÄRGIKS. Üksikasjade suhtes vaata GNU Üldist Avalikku Litsentsi. - + Project Lead %s @@ -1240,189 +1472,311 @@ vabastada pattudest. Me jagame seda tarkvara tasuta, sest Tema on meid vabastanud. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Autoriõigused © 2004-2011 Raoul Snyman -Osalised autoriõigused © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + OpenLP.AdvancedTab - + UI Settings Kasutajaliidese sätted - + Number of recent files to display: Kuvatavate hiljutiste failide arv: - + Remember active media manager tab on startup Käivitumisel avatakse viimati avatud meediahalduri osa - + Double-click to send items straight to live Topeltklõps otse ekraanile saatmiseks - + Expand new service items on creation Uued teenistuse kirjed on loomisel laiendatud - + Enable application exit confirmation Rakenduse lõpetamise teabe lubamine - + Mouse Cursor Hiirekursor - + Hide mouse cursor when over display window Ekraanil oleva akna kohal peidetakse hiirekursor - + Default Image Vaikimisi pilt - + Background color: Taustapilt: - + Image file: Pildifail: - + Open File Faili avamine + + + Preview items when clicked in Media Manager + Elemendi eelvaate kuvamine, kui sellele klõpsatakse meediahalduris + + + + Advanced + Täpsem + + + + Click to select a color. + Klõpsa värvi valimiseks. + + + + Browse for an image file to display. + Vali pilt, mida kuvada. + + + + Revert to the default OpenLP logo. + Vaikimisi OpenLP logo kasutamine. + OpenLP.DisplayTagDialog - + Edit Selection Valiku muutmine - - Update - Uuenda - - - + Description Kirjeldus - + Tag Silt - + Start tag Alustamise silt - + End tag Lõpu silt - - Default - Vaikimisi - - - + Tag Id Märgise ID - + Start HTML HTML alguses - + End HTML HTML lõpus + + + Save + + OpenLP.DisplayTagTab - + Update Error Tõrge uuendamisel - + Tag "n" already defined. Silt "n" on juba defineeritud. - + Tag %s already defined. Silt %s on juba defineeritud. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + Rasvane + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Error Occurred Esines viga - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. Uups! OpenLP-s esines viga, millest pole võimalik taastada. Alumises kastis olev tekst võib olla kasulik OpenLP arendajatele, palun meili see aadressil bugs@openlp.org, koos täpse kirjeldusega sellest, mida sa tegid, kui selline probleem esines. - + Send E-Mail Saada e-kiri - + Save to File Salvesta faili - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Palun kirjelda siin, mida sa tegid, mis kutsus selle vea esile. (vähemalt 20 tähte) - + Attach File Pane fail kaasa - + Description characters to enter : %s Puuduvad tähed kirjelduses: %s @@ -1430,24 +1784,24 @@ Jon Tibble, Carsten Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Platvorm: %s - + Save Crash Report Vearaporti salvestamine - + Text files (*.txt *.log *.text) Tekstifailid (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1478,7 +1832,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1513,17 +1867,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename Faili ümbernimetamine - + New File Name: Uue faili nimi: - + File Copy Faili kopeerimine @@ -1531,17 +1885,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Tõlke valimine - + Choose the translation you'd like to use in OpenLP. Vali keel, milles tahad OpenLP-d kasutada. - + Translation: Keel: @@ -1549,102 +1903,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... %s allalaadimine... - + Download complete. Click the finish button to start OpenLP. Allalaadimine lõpetatud. OpenLP käivitamiseks klõpsa lõpetamise nupule. - + Enabling selected plugins... Valitud pluginate sisselülitamine... - + First Time Wizard Esmakäivituse nõustaja - + Welcome to the First Time Wizard Tere tulemast esmakäivituse nõustajasse - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - Nõustaja aitab teha esmase seadistuse OpenLP kasutamiseks. Klõpsa all asuval edasi nupul, et alustada lähtevalikute tegemist. - - - + Activate required Plugins Vajalike pluginate sisselülitamine - + Select the Plugins you wish to use. Vali pluginad, mida tahad kasutada. - + Songs Laulud - + Custom Text Kohandatud tekst - + Bible Piibel - + Images Pildid - + Presentations Esitlused - + Media (Audio and Video) Meedia (audio ja video) - + Allow remote access Kaugligipääs - + Monitor Song Usage Laulukasutuse monitooring - + Allow Alerts Teadaanded - + No Internet Connection Internetiühendust pole - + Unable to detect an Internet connection. Internetiühendust ei leitud. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1657,198 +2006,223 @@ Esmakäivituse nõustaja taaskäivitamiseks hiljem, klõpsa praegu loobu nupule, Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. - + Sample Songs Näidislaulud - + Select and download public domain songs. Vali ja laadi alla avalikku omandisse kuuluvaid laule. - + Sample Bibles Näidispiiblid - + Select and download free Bibles. Vabade Piiblite valimine ja allalaadimine. - + Sample Themes Näidiskujundused - + Select and download sample themes. Näidiskujunduste valimine ja allalaadimine. - + Default Settings Vaikimisi sätted - + Set up default settings to be used by OpenLP. OpenLP jaoks vaikimisi sätete määramine. - - Setting Up And Importing - Seadistamine ja importimine - - - - Please wait while OpenLP is set up and your data is imported. - Palun oota, kuni OpenLP on seadistatud ning sinu andmed on imporditud. - - - + Default output display: Vaikimisi ekraani kuva: - + Select default theme: Vali vaikimisi kujundus: - + Starting configuration process... Seadistamise alustamine... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General Üldine - + Monitors Monitorid - + Select monitor for output display: Vali väljundkuva ekraan: - + Display if a single screen Kuvatakse, kui on ainult üks ekraan - + Application Startup Rakenduse käivitumine - + Show blank screen warning Kuvatakse tühjendatud ekraani hoiatust - + Automatically open the last service Automaatselt avatakse viimane teenistus - + Show the splash screen Käivitumisel kuvatakse logo - + Application Settings Rakenduse sätted - + Prompt to save before starting a new service Enne uue teenistuse alustamist küsitakse, kas salvestada avatud teenistus - + Automatically preview next item in service Järgmise teenistuse elemendi automaatne eelvaade - Slide loop delay: - Slaidi pikkus korduses: - - - sec sek - + CCLI Details CCLI andmed - + SongSelect username: SongSelecti kasutajanimi: - + SongSelect password: SongSelecti parool: - + Display Position Kuva asukoht - + X X - + Y Y - + Height Kõrgus - + Width Laius - + Override display position Kuva asukoht määratakse jõuga - + Check for updates to OpenLP OpenLP uuenduste kontrollimine + + + Unblank display when adding new live item + Uue elemendi saatmisel ekraanile võetakse ekraani tühjendamine maha + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language Keel - + Please restart OpenLP to use your new language setting. Uue keele kasutamiseks käivita OpenLP uuesti. @@ -1856,7 +2230,7 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. OpenLP.MainDisplay - + OpenLP Display OpenLP kuva @@ -1864,190 +2238,155 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. OpenLP.MainWindow - + &File &Fail - + &Import &Impordi - + &Export &Ekspordi - + &View &Vaade - + M&ode &Režiim - + &Tools &Tööriistad - + &Settings &Sätted - + &Language &Keel - + &Help A&bi - + Media Manager Meediahaldur - + Service Manager Teenistuse haldur - + Theme Manager Kujunduse haldur - + &New &Uus - - Ctrl+N - Ctrl+N - - - + &Open &Ava - + Open an existing service. Olemasoleva teenistuse avamine. - - Ctrl+O - Ctrl+O - - - + &Save &Salvesta - + Save the current service to disk. Praeguse teenistuse salvestamine kettale. - - Ctrl+S - Ctrl+S - - - + Save &As... Salvesta &kui... - + Save Service As Salvesta teenistus kui - + Save the current service under a new name. Praeguse teenistuse salvestamine uue nimega. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit &Välju - + Quit OpenLP Lahku OpenLPst - - Alt+F4 - Alt+F4 - - - + &Theme &Kujundus - + &Configure OpenLP... &Seadista OpenLP... - + &Media Manager &Meediahaldur - + Toggle Media Manager Meediahalduri lüliti - + Toggle the visibility of the media manager. Meediahalduri nähtavuse ümberlüliti. - - F8 - F8 - - - + &Theme Manager &Kujunduse haldur - + Toggle Theme Manager Kujunduse halduri lüliti - + Toggle the visibility of the theme manager. Kujunduse halduri nähtavuse ümberlülitamine. - - - F10 - F10 - &Service Manager @@ -2065,166 +2404,141 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. - F9 - F9 - - - &Preview Panel &Eelvaatluspaneel - + Toggle Preview Panel Eelvaatluspaneeli lüliti - + Toggle the visibility of the preview panel. Eelvaatluspaneeli nähtavuse ümberlülitamine. - - F11 - F11 - - - + &Live Panel &Ekraani paneel - + Toggle Live Panel Ekraani paneeli lüliti - + Toggle the visibility of the live panel. Ekraani paneeli nähtavuse muutmine. - - F12 - F12 - - - + &Plugin List &Pluginate loend - + List the Plugins Pluginate loend - - Alt+F7 - Alt+F7 - - - + &User Guide &Kasutajajuhend - + &About &Lähemalt - + More information about OpenLP Lähem teave OpenLP kohta - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Abi veebis - + &Web Site &Veebileht - + Use the system language, if available. Kui saadaval, kasutatakse süsteemi keelt. - + Set the interface language to %s Kasutajaliidese keeleks %s määramine - + Add &Tool... Lisa &tööriist... - + Add an application to the list of tools. Rakenduse lisamine tööriistade loendisse. - + &Default &Vaikimisi - + Set the view mode back to the default. Vaikimisi kuvarežiimi taastamine. - + &Setup &Ettevalmistus - + Set the view mode to Setup. Ettevalmistuse kuvarežiimi valimine. - + &Live &Otse - + Set the view mode to Live. Vaate režiimiks ekraanivaate valimine. - + OpenLP Version Updated OpenLP uuendus - + OpenLP Main Display Blanked OpenLP peakuva on tühi - + The Main Display has been blanked out Peakuva on tühi - + Default Theme: %s Vaikimisi kujundus: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2233,61 +2547,66 @@ You can download the latest version from http://openlp.org/. Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. - + English Please add the name of your language here Eesti - + Configure &Shortcuts... &Kiirklahvide seadistamine... - + Close OpenLP OpenLP sulgemine - + Are you sure you want to close OpenLP? Kas oled kindel, et tahad OpenLP sulgeda? - - Print the current Service Order. - Praeguse teenistuse järjekorra printimine. - - - - Ctrl+P - Ctrl+P - - - + &Configure Display Tags &Kuvasiltide seadistamine - + Open &Data Folder... Ava &andmete kataloog... - + Open the folder where songs, bibles and other data resides. Laulude, Piiblite ja muude andmete kataloogi avamine. - + &Autodetect &Isetuvastus + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected Ühtegi elementi pole valitud @@ -2297,75 +2616,91 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.&Lisa valitud teenistuse elemendile - + You must select one or more items to preview. Sa pead valima vähemalt ühe kirje, mida eelvaadelda. - + You must select one or more items to send live. Sa pead valima vähemalt ühe kirje, mida tahad ekraanil näidata. - + You must select one or more items. Pead valima vähemalt ühe elemendi. - + You must select an existing service item to add to. Pead valima olemasoleva teenistuse, millele lisada. - + Invalid Service Item Vigane teenistuse element - + You must select a %s service item. Pead valima teenistuse elemendi %s. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List Pluginate loend - + Plugin Details Plugina andmed - + Status: Olek: - + Active Aktiivne - + Inactive Pole aktiivne - + %s (Inactive) %s (pole aktiivne) - + %s (Active) %s (aktiivne) - + %s (Disabled) %s (keelatud) @@ -2373,12 +2708,12 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page Mahuta lehele - + Fit Width Mahuta laius @@ -2386,7 +2721,7 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. OpenLP.PrintServiceForm - + Options Valikud @@ -2406,55 +2741,60 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.Kopeeri HTMLina - + Zoom In Suurendamine - + Zoom Out Vähendamine - + Zoom Original Originaalsuurus - + Other Options Muud valikud - + Include slide text if available Slaidi teksti, kui saadaval - + Include service item notes Teenistuse kirje märkmed - + Include play length of media items Meediakirjete pikkus - - Service Order Sheet - Teenistuse järjekord + + Add page break before each text item + Iga tekstikirje algab uuelt lehelt + + + + Service Sheet + OpenLP.ScreenList - + Screen Ekraan - + primary peamine @@ -2462,7 +2802,7 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item Teenistuse elementide ümberjärjestamine @@ -2470,217 +2810,257 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Olemasoleva teenistuse laadimine - - - - Save this service - Selle teenistuse salvestamine - - - - Select a theme for the service - Vali teenistuse jaoks kujundus - - - + Move to &top Tõsta ü&lemiseks - + Move item to the top of the service. Teenistuse algusesse tõstmine. - + Move &up Liiguta &üles - + Move item up one position in the service. Elemendi liigutamine teenistuses ühe koha võrra ettepoole. - + Move &down Liiguta &alla - + Move item down one position in the service. Elemendi liigutamine teenistuses ühe koha võrra tahapoole. - + Move to &bottom Tõsta &alumiseks - + Move item to the end of the service. Teenistuse lõppu tõstmine. - + &Delete From Service &Kustuta teenistusest - + Delete the selected item from the service. Valitud elemendi kustutamine teenistusest. - + &Add New Item &Lisa uus element - + &Add to Selected Item &Lisa valitud elemendile - + &Edit Item &Muuda kirjet - + &Reorder Item &Muuda elemendi kohta järjekorras - + &Notes &Märkmed - + &Change Item Theme &Muuda elemendi kujundust - + File is not a valid service. The content encoding is not UTF-8. Fail ei ole sobiv teenistus. Sisu ei ole UTF-8 kodeeringus. - + File is not a valid service. Fail pole sobiv teenistus. - + Missing Display Handler Puudub kuvakäsitleja - + Your item cannot be displayed as there is no handler to display it Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm - + Your item cannot be displayed as the plugin required to display it is missing or inactive Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm - + &Expand all &Laienda kõik - + Expand all the service items. Kõigi teenistuse kirjete laiendamine. - + &Collapse all &Ahenda kõik - + Collapse all the service items. Kõigi teenistuse kirjete ahendamine. - + Open File Faili avamine - + OpenLP Service Files (*.osz) OpenLP teenistuse failid (*.osz) - + Moves the selection down the window. Valiku tõstmine aknas allapoole. - + Move up Liiguta üles - + Moves the selection up the window. Valiku tõstmine aknas ülespoole. - + Go Live Ekraanile - + Send the selected item to Live. Valitud kirje saatmine ekraanile. - + Modified Service Teenistust on muudetud - - Notes: - Märkmed: - - - + &Start Time &Alguse aeg - + Show &Preview Näita &eelvaadet - + Show &Live Näita &ekraanil - + The current service has been modified. Would you like to save this service? Praegust teensitust on muudetud. Kas tahad selle teenistuse salvestada? + + + File could not be opened because it is corrupt. + Faili pole võimalik avada, kuna see on rikutud. + + + + Empty File + Tühi fail + + + + This service file does not contain any data. + Selles teenistuse failis pole andmeid. + + + + Corrupt File + Rikutud fail + + + + Custom Service Notes: + Kohandatud teenistuse märkmed: + + + + Notes: + Märkmed: + + + + Playing time: + Kestus: + + + + Untitled Service + Pealkirjata teenistus + + + + Load an existing service. + Olemasoleva teenistuse laadimine. + + + + Save this service. + Selle teenistuse salvestamine. + + + + Select a theme for the service. + Teenistuse jaoks kujunduse valimine. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes Teenistuse elemendi märkmed @@ -2688,7 +3068,7 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.SettingsForm - + Configure OpenLP Seadista OpenLP @@ -2696,221 +3076,276 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.ShortcutListDialog - + Customize Shortcuts Kiirklahvide kohandamine - + Action Tegevus - + Shortcut Kiirklahv - - Default: %s - Vaikimisi: %s - - - - Custom: - Kohandatud: - - - - None - Pole - - - + Duplicate Shortcut Dubleeriv kiirklahv - + The shortcut "%s" is already assigned to another action, please use a different shortcut. Kiirklahv "%s" on juba seotud teise tegevusega, kasuta mingit muud kiirklahvi. - + Alternate Muuda + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Vali tegevus ja klõpsa kummalgi alumisel nupul, et salvestada uus peamine või alternatiivne kiirklahv. + + + + Default + Vaikimisi + + + + Custom + Kohandatud + + + + Capture shortcut. + Kiirklahvi salvestamine. + + + + Restore the default shortcut of this action. + Selle tegevuse vaikimisi kiirklahvi taastamine. + + + + Restore Default Shortcuts + Vaikimisi kiirklahvide taastamine + + + + Do you want to restore all shortcuts to their defaults? + Kas tahad taastada kõigi kiirklahvide vaikimisi väärtused? + OpenLP.SlideController - - Move to previous - Eelmisele liikumine - - - - Move to next - Järgmisele liikumine - - - + Hide Peida - - Move to live - Tõsta ekraanile - - - - Edit and reload song preview - Muuda ja kuva laulu eelvaade uuesti - - - - Start continuous loop - Katkematu korduse alustamine - - - - Stop continuous loop - Katkematu korduse lõpetamine - - - - Delay between slides in seconds - Viivitus slaidide vahel sekundites - - - - Start playing media - Meediaesituse alustamine - - - + Go To Liigu kohta - + Blank Screen Ekraani tühjendamine - + Blank to Theme Kujunduse tausta näitamine - + Show Desktop Töölaua näitamine - + Previous Slide Eelmine slaid - + Next Slide Järgmine slaid - + Previous Service Eelmine teenistus - + Next Service Järgmine teenistus - + Escape Item Kuva sulgemine + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions Õigekirjasoovitused - + Formatting Tags Siltide vormindus + + + Language: + Keel: + OpenLP.StartTimeForm - - Item Start Time - Kirje alguse aeg - - - + Hours: Tundi: - - h - h - - - - m - m - - - + Minutes: Minutid: - + Seconds: Sekundit: + + + Item Start and Finish Time + Elemendi algus ja lõpp + + + + Start + Algus + + + + Finish + Lõpp + + + + Length + Pikkus + + + + Time Validation Error + Valesti sisestatud aeg + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image Pildi valimine - + Theme Name Missing Kujundusel puudub nimi - + There is no name for this theme. Please enter one. Kujundusel ei ole nime. Palun sisesta nimi. - + Theme Name Invalid Sobimatu kujunduse nimi - + Invalid theme name. Please enter one. Kujunduse nimi pole sobiv. Palun sisesta sobiv nimi. - - (%d lines per slide) - (%d rida slaidil) + + (approximately %d lines per slide) + @@ -2976,69 +3411,69 @@ Sisu ei ole UTF-8 kodeeringus. Määra &globaalseks vaikeväärtuseks - + %s (default) %s (vaikimisi) - + You must select a theme to edit. Pead valima kujunduse, mida muuta. - + You are unable to delete the default theme. Vaikimisi kujundust pole võimalik kustutada. - + Theme %s is used in the %s plugin. Kujundust %s kasutatakse pluginas %s. - + You have not selected a theme. Sa ei ole kujundust valinud. - + Save Theme - (%s) Salvesta kujundus - (%s) - + Theme Exported Kujundus eksporditud - + Your theme has been successfully exported. Sinu kujunduse on edukalt eksporditud. - + Theme Export Failed Kujunduse eksportimine nurjus - + Your theme could not be exported due to an error. Sinu kujundust polnud võimalik eksportida, kuna esines viga. - + Select Theme Import File Importimiseks kujunduse faili valimine - + File is not a valid theme. The content encoding is not UTF-8. See fail ei ole korrektne kujundus. Sisu kodeering ei ole UTF-8. - + File is not a valid theme. See fail ei ole sobilik kujundus. @@ -3058,47 +3493,47 @@ Sisu kodeering ei ole UTF-8. &Ekspordi kujundus - + You must select a theme to rename. Pead valima kujunduse, mida ümber nimetada. - + Rename Confirmation Ümbernimetamise kinnitus - + Rename %s theme? Kas anda kujundusele %s uus nimi? - + You must select a theme to delete. Pead valima kujunduse, mida tahad kustutada. - + Delete Confirmation Kustutamise kinnitus - + Delete %s theme? Kas kustutada kujundus %s? - + Validation Error Valideerimise viga - + A theme with this name already exists. Sellenimeline teema on juba olemas. - + OpenLP Themes (*.theme *.otz) OpenLP kujundused (*.theme *.otz) @@ -3106,242 +3541,242 @@ Sisu kodeering ei ole UTF-8. OpenLP.ThemeWizard - + Theme Wizard Kujunduse nõustaja - + Welcome to the Theme Wizard Tere tulemast kujunduse nõustajasse - + Set Up Background Tausta määramine - + Set up your theme's background according to the parameters below. Määra kujunduse taust, kasutades järgnevaid parameetreid. - + Background type: Tausta liik: - + Solid Color Ühtlane värv - + Gradient Üleminek - + Color: Värvus: - + Gradient: Üleminek: - + Horizontal Horisontaalne - + Vertical Vertikaalne - + Circular Radiaalne - + Top Left - Bottom Right Loodest kagusse - + Bottom Left - Top Right Edelast kirdesse - + Main Area Font Details Peamise teksti üksikasjad - + Define the font and display characteristics for the Display text Määra font ja teised teksti omadused - + Font: Font: - + Size: Suurus: - + Line Spacing: Reavahe: - + &Outline: &Kontuurjoon: - + &Shadow: &Vari: - + Bold Rasvane - + Italic Kaldkiri - + Footer Area Font Details Jaluse fondi üksikasjad - + Define the font and display characteristics for the Footer text Määra jaluse font ja muud omadused - + Text Formatting Details Teksti vorminduse üksikasjad - + Allows additional display formatting information to be defined Võimaldab määrata lisaks vorminduse andmeid - + Horizontal Align: Rõhtjoondus: - + Left Vasakul - + Right Paremal - + Center Keskel - + Output Area Locations Väljundala asukoht - + Allows you to change and move the main and footer areas. Võimaldab muuta ja liigutada peamist ja jaluse ala. - + &Main Area &Peamine ala - + &Use default location &Vaikimisi asukoha kasutamine - + X position: X-asukoht: - + px px - + Y position: Y-asukoht: - + Width: Laius: - + Height: Kõrgus: - + Use default location Vaikimisi asukoha kasutamine - + Save and Preview Salvestamine ja eelvaade - + View the theme and save it replacing the current one or change the name to create a new theme Vaata kujundus üle ja salvesta see, asendades olemasolev või muuda nime, et luua uus kujundus - + Theme name: Kujunduse nimi: - + 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. See nõustaja aitab kujundusi luua ja muuta. Klõpsa edasi nupul, et alustada tausta määramisest. - + Transitions: Üleminekud: - + &Footer Area &Jaluse ala - + Edit Theme - %s Teema muutmine - %s @@ -3349,42 +3784,42 @@ Sisu kodeering ei ole UTF-8. OpenLP.ThemesTab - + Global Theme Üldine kujundus - + Theme Level Kujunduse tase - + S&ong Level &Laulu tase - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Laul kuvatakse sellele andmebaasis määratud kujundusega. Kui laulul kujundus puudub, kasutatakse teenistuse kujundust. Kui teenistusel kujundus puudub, siis kasutatakse üleüldist kujundust. - + &Service Level &Teenistuse tase - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Kasutatakse teenistuse kujundust, eirates laulude kujundusi. Kui teenistusel kujundust pole, kasutatakse globaalset. - + &Global Level &Üleüldine tase - + Use the global theme, overriding any themes associated with either the service or the songs. Kasutatakse globaalset kujundust, eirates nii teenistuse kui laulu kujundust. @@ -3392,421 +3827,528 @@ Sisu kodeering ei ole UTF-8. OpenLP.Ui - + Error Viga - + &Delete &Kustuta - + Delete the selected item. Valitud kirje kustutamine. - + Move selection up one position. Valiku liigutamine ühe koha võrra ülespoole. - + Move selection down one position. Valiku liigutamine ühe koha võrra allapoole. - + About Programmist - + &Add &Lisa - + Advanced Täpsem - + All Files Kõik failid - + Bottom All - + Browse... Lehitse... - + Cancel Loobu - + CCLI number: CCLI number: - + Create a new service. Uue teenistuse loomine. - + &Edit &Muuda - + Empty Field Tühi väli - + Export Ekspordi - + pt Abbreviated font pointsize unit pt - + Image Pilt - + Import Impordi - + Length %s Kestus %s - + Live Ekraan - + Live Background Error Ekraani tausta viga - - Live Panel - Ekraani paneel - - - + Load Laadi - + Middle Keskel - + New Uus - + New Service Uus teenistus - + New Theme Uus kujundus - + No File Selected Singular Ühtegi faili pole valitud - + No Files Selected Plural Ühtegi faili pole valitud - + No Item Selected Singular Ühtegi elementi pole valitud - + No Items Selected Plural Ühtegi elementi pole valitud - + openlp.org 1.x openlp.org 1.x - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Teenistuse avamine - - - + Preview Eelvaade - - Preview Panel - Eelvaate paneel - - - - Print Service Order - Teenistuse järjekorra printimine - - - + Replace Background Tausta asendamine - - Replace Live Background - Ekraani tausta asendamine - - - + Reset Background Tausta lähtestamine - - Reset Live Background - Ekraani tausta asendamine - - - + s The abbreviated unit for seconds s - + Save && Preview Salvesta && eelvaatle - + Search Otsi - + You must select an item to delete. Pead valima elemendi, mida tahad kustutada. - + You must select an item to edit. Pead valima elemendi, mida tahad muuta. - + Save Service Teenistuse salvestamine - + Service Teenistus - + Start %s Algus %s - + Theme Singular Kujundus - + Themes Plural Kujundused - + Top Üleval - + Version Versioon - + &Vertical Align: &Vertikaaljoondus: - + Finished import. Importimine lõpetatud. - + Format: Vorming: - + Importing Importimine - + Importing "%s"... "%s" importimine... - + Select Import Source Importimise allika valimine - + Select the import format and the location to import from. Vali importimise vorming ja asukoht, kust importida. - + The openlp.org 1.x 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. openlp.org 1.x importija on ühe puuduva Pythoni mooduli pärast keelatud. Kui sa tahad seda importijat kasutada, pead paigaldama mooduli "python-sqlite". - + Open %s File %s faili avamine - + %p% %p% - + Ready. Valmis. - + Starting import... Importimise alustamine... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Pead määrama vähemalt ühe %s faili, millest importida. - + Welcome to the Bible Import Wizard Tere tulemast Piibli importimise nõustajasse - + Welcome to the Song Export Wizard Tere tulemast laulude eksportimise nõustajasse - + Welcome to the Song Import Wizard Tere tulemast laulude importimise nõustajasse - + Author Singular Autor - + Authors Plural Autorid - + © Copyright symbol. © - + Song Book Singular Laulik - + Song Books Plural Laulikud - + Song Maintenance Laulude haldus - + Topic Singular Teema - + Topics Plural Teemad + + + Continuous + Jätkuv + + + + Default + Vaikimisi + + + + Display style: + Kuvalaad: + + + + File + Fail + + + + Help + Abi + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Paigutuse laad: + + + + Live Toolbar + Ekraani tööriistariba + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP juba töötab. Kas tahad jätkata? + + + + Settings + Sätted + + + + Tools + Tööriistad + + + + Verse Per Slide + Iga salm eraldi slaidil + + + + Verse Per Line + Iga salm eraldi real + + + + View + Vaade + + + + Duplicate Error + Korduse viga + + + + Unsupported File + Toetamata fail + + + + Title and/or verses not found + Pealkirja ja/või salme ei leitud + + + + XML syntax error + XML süntaksi viga + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags Kuvasiltide seadistamine @@ -3818,31 +4360,6 @@ Sisu kodeering ei ole UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Esitluse plugin</strong><br />Esitluse plugin võimaldab näidata esitlusi erinevate programmidega. Saadaolevate esitlusprogrammide valik on saadaval valikukastis. - - - Load a new Presentation - Uue esitluse laadimine - - - - Delete the selected Presentation - Valitud esitluse kustutamine - - - - Preview the selected Presentation - Valitud esitluse eelvaatlus - - - - Send the selected Presentation live - Valitud esitluse saatmine ekraanile - - - - Add the selected Presentation to the service - Valitud esitluse lisamine teenistusse - Presentation @@ -3861,61 +4378,81 @@ Sisu kodeering ei ole UTF-8. container title Esitlused + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) Esitlus(t)e valimine - + Automatic Automaatne - + Present using: Esitluseks kasutatakse: - + File Exists Fail on olemas - + A presentation with that filename already exists. Sellise nimega esitluse fail on juba olemas. - - Unsupported File - Toetamata fail - - - + This type of presentation is not supported. Seda liiki esitlus ei ole toetatud. - + Presentations (%s) Esitlused (%s) - + Missing Presentation Puuduv esitlus - + The Presentation %s no longer exists. Esitlust %s enam ei ole. - + The Presentation %s is incomplete, please reload. Esitlus %s ei ole täielik, palun laadi see uuesti. @@ -3923,17 +4460,17 @@ Sisu kodeering ei ole UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Saadaolevad juhtijad - + Allow presentation application to be overriden Esitlusrakendust on lubatud asendada - + %s (unavailable) %s (pole saadaval) @@ -3941,71 +4478,174 @@ Sisu kodeering ei ole UTF-8. RemotePlugin - + <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. <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. - + Remote name singular Kaugjuhtimine - + Remotes name plural Kaugjuhtimine - + Remote container title Kaugjuhtimine + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + Teenistuse haldur + + + + Slide Controller + + + + + Alerts + Teated + + + + Search + Otsi + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + Ekraanile + + + + Add To Service + + + + + No Results + + + + + Options + Valikud + + RemotePlugin.RemoteTab - + Serve on IP address: Saadaval IP-aadressilt: - + Port number: Pordi number: - + Server Settings Serveri sätted + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking &Laulude kasutuse jälgimine - + &Delete Tracking Data &Kustuta kogutud andmed - + Delete song usage data up to a specified date. Laulude kasutuse andmete kustutamine kuni antud kuupäevani. - + &Extract Tracking Data &Eralda laulukasutuse andmed - + Generate a report on song usage. Genereeri raport laulude kasutuse kohta. @@ -4020,53 +4660,58 @@ Sisu kodeering ei ole UTF-8. Laulukasutuse jälgimise sisse- ja väljalülitamine. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Laulude plugin</strong><br />See plugin võimaldab laulude kuvamise ja haldamise. - + SongUsage name singular Laulukasutus - + SongUsage name plural Laulukasutus - + SongUsage container title Laulukasutus + + + Song Usage + Laulude kasutus + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Laulukasutuse andmete kustutamine - + Delete Selected Song Usage Events? Kas kustutada valitud laulude kasutamise sündmused? - + Are you sure you want to delete selected Song Usage data? Kas oled kindel, et tahad kustutada valitud laulude kasutuse andmed? - + Deletion Successful Kustutamine edukas - + All requested data has been deleted successfully. Kõik kustutamisele määratud andmed kustutati edukalt. @@ -4074,42 +4719,42 @@ Sisu kodeering ei ole UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Laulukasutuse salvestamine - + Select Date Range Vali kuupäevade vahemik - + to kuni - + Report Location Asukohast raporteerimine - + Output File Location Väljundfaili asukoht - + usage_detail_%s_%s.txt laulukasutuse_andmed_%s_%s.txt - + Report Creation Raporti koostamine - + Report %s has been successfully created. @@ -4118,12 +4763,12 @@ has been successfully created. on edukalt loodud. - + Output Path Not Selected Sihtkohta pole valitud - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. Sa pole määranud sobivat sihtkohta laulukasutuse raporti jaoks. Palun vali mõni kataloog oma arvutist. @@ -4131,160 +4776,130 @@ on edukalt loodud. SongsPlugin - + &Song &Laul - + Import songs using the import wizard. Laulude importimine importimise nõustajaga. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Laulude plugin</strong><br />See plugin võimaldab laulude kuvamise ja haldamise. - + &Re-index Songs &Indekseeri laulud uuesti - + Re-index the songs database to improve searching and ordering. Laulude andmebaasi kordusindekseerimine, et parendada otsimist ja järjekorda. - + Reindexing songs... Laulude kordusindekseerimine... - - Add a new Song - Uue laulu lisamine - - - - Edit the selected Song - Valitud laulu muutmine - - - - Delete the selected Song - Valitud laulu kustutamine - - - - Preview the selected Song - Valitud laulu eelvaatlus - - - - Send the selected Song live - Valitud laulu saatmine ekraanile - - - - Add the selected Song to the service - Valitud laulu lisamine teenistusele - - - + Song name singular Laul - + Songs name plural Laulud - + Songs container title Laulud - + Arabic (CP-1256) Araabia (CP-1256) - + Baltic (CP-1257) Balti (CP-1257) - + Central European (CP-1250) Kesk-Euroopa (CP-1250) - + Cyrillic (CP-1251) Kirillitsa (CP-1251) - + Greek (CP-1253) Kreeka (CP-1253) - + Hebrew (CP-1255) Heebrea (CP-1255) - + Japanese (CP-932) Jaapani (CP-932) - + Korean (CP-949) Korea (CP-949) - + Simplified Chinese (CP-936) Lihtsustatud Hiina (CP-936) - + Thai (CP-874) Tai (CP-874) - + Traditional Chinese (CP-950) Tradistiooniline Hiina (CP-950) - + Turkish (CP-1254) Türgi (CP-1254) - + Vietnam (CP-1258) Vietnami (CP-1258) - + Western European (CP-1252) Lääne-Euroopa (CP-1252) - + Character Encoding Märgikodeering - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4292,52 +4907,82 @@ Usually you are fine with the preselected choice. Tavaliselt on vaikimisi valik õige. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Palun vali märgikodeering. Kodeering on vajalik märkide õige esitamise jaoks. - + Exports songs using the export wizard. Eksportimise nõustaja abil laulude eksportimine. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance Autorite haldus - + Display name: Täisnimi: - + First name: Eesnimi: - + Last name: Perekonnanimi: - + You need to type in the first name of the author. Pead sisestama autori eesnime. - + You need to type in the last name of the author. Pead sisestama autori perekonnanime. - + You have not set a display name for the author, combine the first and last names? Sa ei ole sisestanud autori kuvamise nime, kas see tuleks kombineerida ees- ja perekonnanimest? @@ -4345,190 +4990,198 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Laulu importimine, %d %d-st + + The file does not have a valid extension. + Sellel failil pole sobiv laiend. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Haldab %s SongsPlugin.EditSongForm - + Song Editor Lauluredaktor - + &Title: &Pealkiri: - + Alt&ernate title: &Alternatiivne pealkiri: - + &Lyrics: &Sõnad: - + &Verse order: &Salmide järjekord: - + Ed&it All Muuda &kõiki - + Title && Lyrics Pealkiri && laulusõnad - + &Add to Song &Lisa laulule - + &Remove &Eemalda - + &Manage Authors, Topics, Song Books &Autorite, teemade ja laulikute haldamine - + A&dd to Song L&isa laulule - + R&emove &Eemalda - + Book: Book: - + Number: Number: - + Authors, Topics && Song Book Autorid, teemad && laulik - + New &Theme Uus &kujundus - + Copyright Information Autoriõiguse andmed - + Comments Kommentaarid - + Theme, Copyright Info && Comments Kujundus, autoriõigus && kommentaarid - + Add Author Autori lisamine - + This author does not exist, do you want to add them? Seda autorit veel pole, kas tahad autori lisada? - + This author is already in the list. See autor juba on loendis. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Sa ei ole valinud ühtegi sobilikku autorit. Vali autor loendist või sisesta uue autori nimi ja klõpsa uue nupul "Lisa laulule autor". - + Add Topic Teema lisamine - + This topic does not exist, do you want to add it? Sellist teemat pole. Kas tahad selle lisada? - + This topic is already in the list. See teema juba on loendis. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Sa pole valinud sobivat teemat. Vali teema kas loendist või sisesta uus teema ja selle lisamiseks klõpsa nupule "Lisa laulule teema". - + You need to type in a song title. Pead sisestama laulu pealkirja. - + You need to type in at least one verse. Pead sisestama vähemalt ühe salmi. - + Warning Hoiatus - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Salmide järjekord pole sobiv. Mitte ükski valm ei vasta %s-le. Sobivad salmid on %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? Sa pole kasutanud %s mitte kusagil salmide järjekorras. Kas sa oled kindel, et tahad laulu selliselt salvestada? - + Add Book Lauliku lisamine - + This song book does not exist, do you want to add it? Sellist laulikut pole. Kas tahad selle lisada? - + You need to have an author for this song. Pead lisama sellele laulule autori. - + You need to type some text in to the verse. Salm peab sisaldama teksti. @@ -4536,259 +5189,278 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.EditVerseForm - + Edit Verse Salmi muutmine - + &Verse type: &Salmi liik: - + &Insert &Sisesta + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard Laulude eksportimise nõustaja - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. See nõustaja aitab laulud eksportida avatud ülistuslaulude vormingus OpenLyrics. - + Select Songs Laulude valimine - + Check the songs you want to export. Vali laulud, mida tahad eksportida. - + Uncheck All Eemalda märgistus - + Check All Märgi kõik - + Select Directory Kataloogi valimine - - Select the directory you want the songs to be saved. - Vali kataloog, kuhu tahad laulud salvestada. - - - + Directory: Kataloog: - + Exporting Eksportimine - + Please wait while your songs are exported. Palun oota, kuni kõik laulud on eksporditud. - + You need to add at least one Song to export. Pead lisama vähemalt ühe laulu, mida tahad eksportida. - + No Save Location specified Salvestamise asukohta pole määratud - + Starting export... Eksportimise alustamine... - + You need to specify a directory. Pead määrama kataloogi. - + Select Destination Folder Sihtkausta valimine + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files Dokumentide/esitluste valimine - + Song Import Wizard Laulude importimise nõustaja - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. See nõustaja aitab sul laule importida paljudest erinevatest formaatidest. Klõpsa all asuvat edasi nuppu, et jätkata tegevust importimise vormingu valimisega. - + Generic Document/Presentation Tavaline dokumenti/esitlus - + Filename: Failinimi: - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. OpenLyrics importija ei ole veel valmis, kuid nagu sa näed, on meil plaanis see luua. Loodetavasti saab see järgmiseks väljalaskeks valmis. - + Add Files... Lisa faile... - + Remove File(s) Faili(de) eemaldamine - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Songs of Fellowship importija on keelatud, kuna OpenLP ei suuda leida sinu arvutist OpenOffice.org-i. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Tavalisest dokumendist/esitlusest importija on keelatud, kuna OpenLP ei suuda leida sinu arvutist OpenOffice.org-i. - - - + Please wait while your songs are imported. Palun oota, kuni laule imporditakse. - - Administered by %s - Haldab %s - - - + OpenLP 2.0 Databases OpenLP 2.0 andmebaas - + openlp.org v1.x Databases openlp.org v1.x andmebaas - + Words Of Worship Song Files Words Of Worship Song failid - + You need to specify at least one document or presentation file to import from. Pead määrama vähemalt ühe dokumendi või esitluse faili, millest tahad importida. - + Songs Of Fellowship Song Files Songs Of Fellowship laulufailid - + SongBeamer Files SongBeameri failid - + SongShow Plus Song Files SongShow Plus laulufailid - + Foilpresenter Song Files Foilpresenteri laulufailid + + + Copy + Kopeeri + + + + Save to File + Salvesta faili + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Autorite, teemade ja raamatute loendi haldamine - - - + Titles Pealkirjad - + Lyrics Laulusõnad - + Delete Song(s)? Kas kustutada laul(ud)? - + CCLI License: CCLI litsents: - + Entire Song Kogu laulust - + Are you sure you want to delete the %n selected song(s)? - - + + Kas sa oled kindel, et soovid kustutada %n valitud laulu? + Kas sa oled kindel, et soovid kustutada %n valitud laulu? + + + Maintain the lists of authors, topics and books. + Autorite, teemade ja laulikute loendi haldamine. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + See pole openlp.org 1.x laulude andmebaas. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Laulu importimine, %d. %d-st. + + Not a valid OpenLP 2.0 song database. + See pole OpenLP 2.0 laulude andmebaas. SongsPlugin.OpenLyricsExport - + Exporting "%s"... "%s" eksportimine... @@ -4796,22 +5468,22 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongBookForm - + Song Book Maintenance Lauliku haldus - + &Name: &Nimi: - + &Publisher: &Kirjastaja: - + You need to type in a name for the book. Pead sisestama lauliku nime. @@ -4819,12 +5491,12 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongExportForm - + Finished export. Eksportimine lõpetatud. - + Your song export failed. Laulude eksportimine nurjus. @@ -4832,15 +5504,35 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongImport - + copyright autoriõigus + + + The following songs could not be imported: + Järgnevaid laule polnud võimalik importida: + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. Laulu importimine nurjus. @@ -4848,107 +5540,107 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongMaintenanceForm - + Could not add your author. Autori lisamine pole võimalik. - + This author already exists. See autor on juba olemas. - + Could not add your topic. Sinu teema lisamine pole võimalik. - + This topic already exists. Teema on juba olemas. - + Could not add your book. Lauliku lisamine pole võimalik. - + This book already exists. See laulik on juba olemas. - + Could not save your changes. Muudatuste salvestamine pole võimalik. - + Could not save your modified author, because the author already exists. Sinu muudetud autorit pole võimalik salvestada, kuna autor on juba olemas. - + Could not save your modified topic, because it already exists. Sinu muudetud teemat pole võimalik salvestada, kuna selline on juba olemas. - + Delete Author Autori kustutamine - + Are you sure you want to delete the selected author? Kas oled kindel, et tahad kustutada valitud autori? - + This author cannot be deleted, they are currently assigned to at least one song. Seda autorit pole võimalik kustutada, kuna ta on märgitud vähemalt ühe laulu autoriks. - + Delete Topic Teema kustutamine - + Are you sure you want to delete the selected topic? Kas oled kindel, et tahad valitud teema kustutada? - + This topic cannot be deleted, it is currently assigned to at least one song. Seda teemat pole võimalik kustutada, kuna see on seostatud vähemalt ühe lauluga. - + Delete Book Lauliku kustutamine - + Are you sure you want to delete the selected book? Kas oled kindel, et tahad valitud lauliku kustutada? - + This book cannot be deleted, it is currently assigned to at least one song. Seda laulikut pole võimalik kustutada, kuna vähemalt üks laul kuulub sellesse laulikusse. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? Autor %s on juba olemas. Kas sa tahad, et laulud autoriga %s liidetaks olemasolevale autorile %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? Teema %s on juba olemas. Kas sa tahad, et laulud teemaga %s kasutaksid olemasolevat teemat %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? Laulik %s on juba olemas. Kas sa tahad, et lauliku %s laulid liidetaks olemasoleva laulikuga %s? @@ -4956,27 +5648,27 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongsTab - + Songs Mode Laulurežiim - + Enable search as you type Otsing sisestamise ajal - + Display verses on live tool bar Salme kuvatakse ekraani tööriistaribal - + Update service from song edit Teenistuse uuendamine laulu muutmisel - + Add missing songs when opening service Teenistuse avamisel lisatakse puuduvad laulud @@ -4984,17 +5676,17 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.TopicsForm - + Topic Maintenance Teemade haldus - + Topic name: Teema nimi: - + You need to type in a topic name. Pead sisestama teema nime. @@ -5002,39 +5694,47 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.VerseType - + Verse Salm - + Chorus Refrään - + Bridge Vahemäng - + Pre-Chorus Eelrefrään - + Intro Sissejuhatus - + Ending Lõpetus - + Other Muu + + ThemeTab + + + Themes + Kujundused + + diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index 90e4d6d16..f74fc68f0 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -3,59 +3,61 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? - + Vous n'avez pas entrer de paramètre a remplacer. +Voulez vous continuer tout de même ? - + No Parameter Found - + Pas de paramètre trouvé - + No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? - + Le texte d'alerte ne doit pas contenir '<>'. +Voulez-vous continuer tout de même ? AlertsPlugin - + &Alert &Alerte - + Show an alert message. Affiche un message d'alerte. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - + <strong>Module d'alerte</strong><br />Le module d'alerte contre l'affichage d'alerte sur l’écran live - + Alert name singular Alerte - + Alerts name plural Alertes - + Alerts container title Alertes @@ -64,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message Message d'alerte - + Alert &text: Alerte &texte : - + &Parameter: &Paramètre : - + &New &Nouveaux - + &Save &Enregistre - + Displ&ay A&ffiche - + Display && Cl&ose - &Affiche && Ferme + &Affiche && Ferme - + New Alert Nouvelle alerte - + You haven't specified any text for your alert. Please type in some text before clicking New. Vous n'avez pas spécifier de texte pour votre alerte. Pouvez vous introduire du texte avant de cliquer Nouveau. @@ -120,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Police - + Font name: Nom de la police : - + Font color: Couleur de la police : - + Background color: Couleur de fond : - + Font size: Taille de la police : - + Alert timeout: Temps d'alerte : @@ -153,51 +155,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importation des livres... %s - + Importing verses from %s... Importing verses from <book name>... - + Importation des versets de %s... - + Importing verses... done. - + Importation des versets... terminé. + + + + BiblePlugin + + + &Upgrade older Bibles + Mettre à &jour les anciennes Bibles + + + + Upgrade the Bible databases to the latest format. + Mettre à jour les bases de données de Bible au nouveau format BiblePlugin.HTTPBible - + Download Error Erreur de téléchargement - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Il y a un problème de téléchargement de votre sélection de verset. Pouvez-vous contrôler votre connexion Internet, et si cette erreur persiste pensez a rapporter un dysfonctionnement. - + Parse Error Erreur syntaxique - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Il y a un problème pour extraire votre sélection de verset. Si cette erreur persiste pensez a rapporter un dysfonctionnement. @@ -205,123 +210,133 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. - + Bible pas entièrement chargée. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + Vous ne pouvez pas combiner simple et double Bible dans les résultats de recherche. Voulez vous effacer les résultats et commencer une nouvelle recherche ? + + + + Information + Information + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + La deuxième Bible ne contient pas tous les versets présents dans la Bible principale. Seulement les versets trouvés dans les deux Bibles vont être affichés. %s versets n'ont pas été inclus dans le résultat. BiblesPlugin - + &Bible &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Module Bible</strong><br />Le module Bible fournis la possibilité d'afficher des versets bibliques de plusieurs sources pendant le service. - - - + Bible name singular Bible - + Bibles name plural Bibles - + Bibles container title Bibles - - Import a Bible - Importer une Bible - - - - Add a new Bible - Ajouter une nouvelle Bible - - - - Edit the selected Bible - Édite la Bible sélectionnée - - - - Delete the selected Bible - Supprime la Bible sélectionnée - - - - Preview the selected Bible - Prévisualise la Bible sélectionnée - - - - Send the selected Bible live - Envoie la Bible sélectionnée en live - - - - Add the selected Bible to the service - Ajoute la Bible sélectionnée au service - - - + No Book Found Pas de livre trouvé - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - Pas de livre correspondant n'a été trouvé dans cette Bible. Contrôlez que vous avez correctement écris le mon du livre. + Pas de livre correspondant n'a été trouvé dans cette Bible. Contrôlez que vous avez correctement écrit le nom du livre. + + + + Import a Bible. + Importe une Bible. + + + + Add a new Bible. + Ajouter une nouvelle Bible. + + + + Edit the selected Bible. + Édite la bible sélectionnée. + + + + Delete the selected Bible. + Efface la Bible sélectionnée. + + + + Preview the selected Bible. + Prévisualise la Bible sélectionnée. + + + + Send the selected Bible live. + Affiche la Bible sélectionnée en directe. + + + + Add the selected Bible to the service. + Ajoute la Bible sélectionnée au service. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Module Bible</strong><br />Le Module Bible permet d'afficher des versets bibliques de différentes sources pendant le service. BiblesPlugin.BibleManager - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Il n'y a pas de Bibles actuellement installée. Pouvez-vous utiliser l'assistant d'importation pour installer une ou plusieurs Bibles. - + Scripture Reference Error - Écriture de référence erronée. + Écriture de référence erronée - + Web Bible cannot be used Les Bible Web ne peut être utilisée - + Text Search is not available with Web Bibles. La recherche textuelle n'est pas disponible pour les Bibles Web. - + 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. Vous n'avez pas introduit de mot clé de recherche. Vous pouvez séparer différents mot clé par une espace pour rechercher tous les mot clé et les séparer par des virgules pour en rechercher uniquement un. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -330,56 +345,38 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + Vos références ne sont pas supportée par OpenLP ou sont invalide. Vérifier que vos références soient conforme a un des schémas suivant : + +Livre Chapitre +Livre Chapitre-Chapitre +Livre Chapitre:Verset-Verset +Livre Chapitre:Verset-Verset,Verset-Verset +Livre Chapitre:Verset-Verset,Chapitre:Verset-Verset +Livre Chapitre:Verset-Chapitre:Verset - + No Bibles Available - + Pas de Bible disponible BiblesPlugin.BiblesTab - + Verse Display Affichage de versets - + Only show new chapter numbers - Affiche uniquement les nouveaux numéros de chapitre. - - - - Layout style: - Style de disposition : - - - - Display style: - Style d'affichage : + Affiche uniquement les nouveaux numéros de chapitre Bible theme: Thème : - - - Verse Per Slide - Un verset par diapositive - - - - Verse Per Line - Un verset par ligne - - - - Continuous - Continu - No Brackets @@ -410,261 +407,337 @@ Les changement ne s'applique aux versets déjà un service. Display second Bible verses - + Affiche les versets de la deuxième Bible + + + + BiblesPlugin.BookNameDialog + + + Select Book Name + Sélectionne le nom du livre + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + Les nom de livres suivants n'ont pas de correspondance interne. Veuillez sélectionner le nom du anglais correspondant dans la liste. + + + + Current name: + Nom courent : + + + + Corresponding name: + Nom correspondant : + + + + Show Books From + Affiche le formulaire des livres + + + + Old Testament + Ancien testament + + + + New Testament + Nouveau testament + + + + Apocrypha + Apocryphes + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Vous devez sélectionner un livre. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Enregistrement de la Bible et chargement des livres... + + + + Registering Language... + Enregistrement des langages... + + + + Importing %s... + Importing <book name>... + Importation %s... BiblesPlugin.ImportWizardForm - + Bible Import Wizard Assistant d'import de Bibles - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. Cette assistant vous aide a importer des bible de différents formats. Clique le bouton suivant si dessous pour démarrer le processus par sélectionner le format à importer. - + Web Download Téléchargement Web - + Location: Emplacement : - + Crosswalk - + BibleGateway BibleGateway - + Bibleserver - + Bibleserver - + Bible: Bible : - + Download Options Options de téléchargement - + Server: Serveur : - + Username: Nom d'utilisateur : - + Password: Mot de passe : - + Proxy Server (Optional) Serveur Proxy (Optionnel) - + License Details Détails de la licence - + Set up the Bible's license details. - + Mise en place des détailles de la licence de la Bible. - + Version name: Nom de la version : - + Copyright: Copyright : - + Permissions: Permissions : - + Please wait while your Bible is imported. Attendez que la Bible sois importée. - + You need to specify a file with books of the Bible to use in the import. Vous devez spécifier un fichier avec les livres de la Bible à utiliser dans l'import. - + You need to specify a file of Bible verses to import. Vous devez spécifier un fichier de verset biblique à importer. - + You need to specify a version name for your Bible. Vous devez spécifier un nom de version pour votre Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - Vous devez introduire un copyright pour votre Bible, Les Bibles dans le domaine publics doivent être marquée comme trouvé. + Vous devez introduire un copyright pour votre Bible. Les Bibles dans le domaine publics doivent être marquée comme trouvé. - + Bible Exists La Bible existe - + This Bible already exists. Please import a different Bible or first delete the existing one. Cette bible existe déjà. Veuillez introduire un non de Bible différent ou commencer par supprimer celle qui existe déjà. - + CSV File Fichier CSV - - Starting Registering bible... - Commence l'enregistrement de la Bible... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Bible enregistrée. Veuillez noter que les verset vont être téléchargement -a la demande, une connexion Interner fiable est donc nécessaire. - - - + Your Bible import failed. Votre import de Bible à échoué. - + Bible file: - + Fichier Bible : + + + + Books file: + Fichiers de livres : - Testaments file: - - - - - Books file: - - - - Verses file: - + Fichiers de versets : - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + openlp.org 1.x Bible Files - + Fichiers Bible openlp.org 1.x + + + + Registering Bible... + Enregistrement de Bible... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Enregistrement de Bible. Remarquer que les versets vont être +téléchargé à la demande, une connexion Internet fiable est donc nécessaire. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Sélectionne la langue + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP ne peut déterminer la langue de cette traduction de la Bible. Veillez sélectionner la langue dans la liste suivante. + + + + Language: + Langue : + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Vous devez choisir une langue. BiblesPlugin.MediaItem - + Quick Rapide - + Second: Deuxième : - + Find: Recherche : - - Results: - Résultat : - - - + Book: Livre : - + Chapter: Chapitre : - + Verse: Verset : - + From: De : - + To: A : - + Text Search Recherche de texte - - Clear - Efface - - - - Keep - Laisse - - - + Scripture Reference - + Référence biblique + + + + Toggle to keep or clear the previous results. + Cocher pour garder ou effacer le résultat précédent. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Import %s %s... @@ -673,34 +746,267 @@ a la demande, une connexion Interner fiable est donc nécessaire. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Détection de l'encodage (cela peut prendre quelque minutes)... - + Importing %s %s... Importing <book name> <chapter>... Import %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Sélectionner un répertoire de sauvegarde + + + + Bible Upgrade Wizard + Assistant de mise a jours des Bibles + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + Cet assistant va vous aider à mettre a jours vos Bibles depuis une version prétendante d'OpenLP 2. Cliquer sur le bouton, si dessous, suivant pour commencer le processus de mise a jour. + + + + Select Backup Directory + Sélectionner répertoire de sauvegarde + + + + Please select a backup directory for your Bibles + Veuillez sélectionner un répertoire de sauvegarde pour vos Bibles + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Les versions précédentes de OpenLP 2.0 sont incapables d'utiliser Bibles mises à jour. Cela créera une sauvegarde de vos Bibles de sorte que vous puissiez simplement copier les fichiers vers votre répertoire de donnée d'OpenLP si vous avez besoin de revenir à une version précédente de OpenLP. Instructions sur la façon de restaurer les fichiers peuvent être trouvés dans notre <a href="http://wiki.openlp.org/faq">Foire aux questions</ a>. + + + + Please select a backup location for your Bibles. + Veuillez sélectionner un répertoire de sauvegarde pour vos Bibles. + + + + Backup Directory: + Répertoire de sauvegarde : + + + + There is no need to backup my Bibles + Il n'y a pas besoin de sauvegarder mes Bibles + + + + Select Bibles + Sélectionne Bibles + + + + Please select the Bibles to upgrade + Veuillez sélectionner les Bibles à mettre à jours + + + + Version name: + Nom de la version : + + + + This Bible still exists. Please change the name or uncheck it. + Cette Bible existe encore. Veuillez changer le nom ou la décocher. + + + + Upgrading + Mise à jour + + + + Please wait while your Bibles are upgraded. + Merci d'attendre pendant que vos Bible soient mises à jour. + + + + You need to specify a Backup Directory for your Bibles. + Vous devez spécifier un répertoire de sauvegarde pour vos Bibles. + + + + You need to specify a version name for your Bible. + Vous devez spécifier un nom de version pour votre Bible. + + + + Bible Exists + La Bible existe + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + Cette Bible existe déjà. Merci de mettre a jours une Bible différente, effacer la bible existante ou décocher. + + + + There are no Bibles available to upgrade. + Il n'y a pas de Bibles à mettre a jour. + + + + Upgrading Bible %s of %s: "%s" +Failed + Mise a jour de la Bible %s de %s : "%s" +Échouée + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Mise a jour de la Bible %s de %s : "%s" +Mise à jour ... + + + + Download Error + Erreur de téléchargement + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Mise a jour de la Bible %s de %s : "%s" +Mise à jour %s ... + + + + , %s failed + , %s écobuée + + + + Upgrading Bible(s): %s successful%s + Mise à jour des Bible(s) : %s succès%s + + + + Upgrade failed. + Mise à jour échouée. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + La sauvegarde à échoué. +Pour sauvegarder vos bibles vous avez besoin des droits d'écriture pour le répertoire donné. + + + + Starting Bible upgrade... + Commence la mise à jour de Bible... + + + + To upgrade your Web Bibles an Internet connection is required. + Pour mettre à jours vos Bibles Web une connexion à Internet est nécessaire. + + + + Upgrading Bible %s of %s: "%s" +Complete + Mise a jour de la Bible %s de %s : "%s" +Terminée + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Mise a jour des Bible(s) : %s succès%s +Veuillez remarquer, que les versets des Bibles Web sont téléchargés à la demande vous avez donc besoin d'une connexion Internet. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Module custom</strong><br />Le module custom permet de créer des diapositive textuel personnalisée qui peuvent être affichée comme les chants. Ce module permet une grande liberté par rapport au module chant. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Module Diapositive personnel</strong><br />Le module de diapositive personnelle permet de créer des diapositive textuel personnalisée qui peuvent être affichée comme les chants. Ce module permet une grande liberté par rapport au module chant. + + + + Custom Slide + name singular + Diapositive personnelle + + + + Custom Slides + name plural + Diapositives personnelles + + + + Custom Slides + container title + Diapositives personnelles + + + + Load a new custom slide. + Charge une nouvelle diapositive personnelle. + + + + Import a custom slide. + Importe une diapositive personnelle. + + + + Add a new custom slide. + Ajoute la diapositive personnelle sélectionnée. + + + + Edit the selected custom slide. + Édite la diapositive personnelle sélectionnée. + + + + Delete the selected custom slide. + Supprime la diapositive personnelle sélectionnée. + + + + Preview the selected custom slide. + Prévisualise la diapositive personnelle sélectionnée. + + + + Send the selected custom slide live. + Envoie en direct la diapositive personnelle sélectionnée. + + + + Add the selected custom slide to the service. + Ajoute la diapositive personnelle sélectionnée au service. CustomPlugin.CustomTab - + Custom Display - Affichage custom + Affichage Personnel - + Display footer Affiche le pied de page @@ -708,232 +1014,179 @@ a la demande, une connexion Interner fiable est donc nécessaire. CustomPlugin.EditCustomForm - + Edit Custom Slides - Édite les diapositives custom + Édite les diapositives Personnel - + &Title: &Titre : - + Add a new slide at bottom. Ajoute une nouvelle diapositive en bas. - + Edit the selected slide. Édite la diapositive sélectionnée. - + Ed&it All Édite &tous - + Edit all the slides at once. Édite toutes les diapositives en une. - + The&me: Thè&me : - + &Credits: &Crédits : - + You need to type in a title. Vous devez introduire un titre. - + You need to add at least one slide Vous devez ajouter au moins une diapositive - - Split Slide - Sépare la diapositive - - - + Split a slide into two by inserting a slide splitter. Sépare la diapositive en deux par l'inversion d'un séparateur de diapositive. + + + Insert Slide + Insère une diapositive + - CustomsPlugin + GeneralTab - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title - - - - - Import a Custom - Import un élément custom - - - - Load a new Custom - - - - - Add a new Custom - Ajoute un nouveau custom - - - - Edit the selected Custom - Édite le custom sélectionner - - - - Delete the selected Custom - Efface le custom sélectionné - - - - Preview the selected Custom - Prévisualise le custom sélectionné - - - - Send the selected Custom live - Envoie le custom sélectionner en live - - - - Add the selected Custom to the service - Ajoute le custom sélectionner au service + + General + Général ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - + <strong>Module Image</strong><br />Le module Image permet l'affichage d'image.<br />L'un des traits distinctifs de ce module est la possibilité de regrouper un certain nombre d'images dans le gestionnaire de services, ce qui rend l'affichage de plusieurs images plus facile. Ce module permet également d'afficher les image sous forme de diaporama en boucle et avec un retard. En plus de cela, les images du module peut être utilisé pour remplacer l'arrière-plan du thème en cours. - + Image name singular Image - + Images name plural Images - + Images container title - Images + Images - - Load a new Image - Charge une nouvelle image - - - - Add a new Image - Ajoute une nouvelle image + + Load a new image. + Charge une nouvelle image. - Edit the selected Image - Édite l'image sélectionnée + Add a new image. + Ajoute une nouvelle image. - Delete the selected Image - Efface l'image sélectionnée + Edit the selected image. + Édite l'image sélectionnée. - Preview the selected Image - Prévisualise l'image sélectionnée + Delete the selected image. + Efface l'image sélectionnée. - Send the selected Image live - Envoie l'image sélectionnée en direct + Preview the selected image. + Prévisualise l'image sélectionnée. - Add the selected Image to the service - Ajoute l'image sélectionnée au service + Send the selected image live. + Envoie en direct l'image sélectionnée. + + + + Add the selected image to the service. + Ajoute l'image sélectionnée au service. ImagePlugin.ExceptionDialog - + Select Attachment - + Sélectionne attachement ImagePlugin.MediaItem - + Select Image(s) - Image(s) séléctionnée + Sélectionne Image(s) - + You must select an image to delete. Vous devez sélectionner une image a effacer. - + Missing Image(s) Image(s) manquante - + The following image(s) no longer exist: %s L(es) image(s) suivante(s) n'existe(nt) plus : %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? L(es) image(s) suivante(s) n'existe(nt) plus : %s Voulez-vous ajouter de toute façon d'autres images ? - + You must select an image to replace the background with. Vous devez sélectionner une image pour remplacer le fond. - + There was a problem replacing your background, the image file "%s" no longer exists. Il y a un problème pour remplacer votre fond, le fichier d'image "%s" n'existe plus. @@ -941,111 +1194,111 @@ Voulez-vous ajouter de toute façon d'autres images ? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - <strong>Module média</strong><br />Le module média permet une lecture de contenu audio et vidéo. + <strong>Module Média</strong><br />Le module Média permet une lecture de contenu audio et vidéo. - + Media name singular Médias - + Media name plural Médias - + Media container title - Médias + Média - - Load a new Media - Charge un nouveau média - - - - Add a new Media - Ajoute un nouveau média + + Load new media. + Charge un nouveau média. - Edit the selected Media - Édite le média sélectionné + Add new media. + Ajouter un nouveau média. - Delete the selected Media - Efface le média sélectionné + Edit the selected media. + Édite le média sélectionné. - Preview the selected Media - Prévisualise le média sélectionné + Delete the selected media. + Efface le média sélectionné. - Send the selected Media live - Envoie le média en direct + Preview the selected media. + Prévisualise le média sélectionné. - Add the selected Media to the service - Ajouter le média sélectionné au service + Send the selected media live. + Envoie en direct le média sélectionné. + + + + Add the selected media to the service. + Ajoute le média sélectionné au service. MediaPlugin.MediaItem - + Select Media Média sélectionné - + You must select a media file to replace the background with. Vous devez sélectionné un fichier média le fond. - + There was a problem replacing your background, the media file "%s" no longer exists. Il y a un problème pour remplacer le fond du direct, le fichier du média "%s" n'existe plus. - + Missing Media File Fichier du média manquant - + The file %s no longer exists. Le fichier %s n'existe plus. - + You must select a media file to delete. Vous devez sélectionné un fichier média à effacer. - + Videos (%s);;Audio (%s);;%s (*) - + Vidéos (%s);;Audio (%s);;%s (*) MediaPlugin.MediaTab - + Media Display Affiche le média - + Use Phonon for video playback Use Phonon pour la lecture des vidéos @@ -1053,56 +1306,59 @@ Voulez-vous ajouter de toute façon d'autres images ? OpenLP - + Image Files Fichiers image + + + Information + Information + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Le format de Bible à changé. +Vous devez mettre à jour vos Bibles existantes. +Es-ce que OpenLP doit mettre a jours vos bible maintenant ? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits Crédits - + License Licence - + Contribute Contribuer - + build %s - + compilation %s - + 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. - + Ce programme est un logiciel libre ; vous pouvez le redistribuer ou/et le modifier dans les termes de la licence GNU General Public License comme publier par la Free Software Foundation ; version 2 de la licence. - + 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 below for more details. - + Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN USAGE PARTICULIER. Voir ci-dessous pour plus de détails. - + Project Lead %s @@ -1164,212 +1420,407 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - + Chef de Projet + %s + +Développeur + %s + +Contributeurs + %s + +Testeurs + %s + +Empaqueteurs + %s + +Traducteurs + Afrikaans (af) + %s + Allemand (de) + %s + Anglais, Royaumes unis (en_GB) + %s + Anglais, Afrique du sud (en_ZA) + %s + Estonien (et) + %s + Français (fr) + %s + Hongrois (hu) + %s + Japonnai (ja) + %s + Norvégien Bokmål (nb) + %s + Néerlandais (nl) + %s + Portugais, Brésil (pt_BR) + %s + Ruse (ru) + %s + +Documentation + %s + +Compiler avec + Python : http://www.python.org/ + Qt4 : http://qt.nokia.com/ + PyQt4 : http://www.riverbankcomputing.co.uk/software/pyqt/intro + Icônes Oxygen : http://oxygen-icons.org/ + +Crédit de fin +Final de crédit + "Car Dieu a tant aimé le monde qu'Il a donné + son Fils unique, afin que quiconque + croit en lui ne périra pas, mais héritent + la vie éternelle." -- Jean 3:16 + + Et pour finir, le crédit final va à Dieu notre Père, + pour l'envoi de son Fils pour mourir + sur la croix, nous libérant du péché. Nous + mettre ce logiciel à votre disposition gratuitement, + car Il nous a libérés. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version> <revision> - Projection de paroles Open Source + +OpenLP est un logiciel gratuit de présentation pour église, ou un logiciel de projection de paroles, utilisé pour afficher les diapositives de chant, versets de la Bible, vidéos, images, et même des présentations (Impress, PowerPoint ou PowerPoint Viewer si il est installé) pour le culte l'église à l'aide d'un ordinateur et d'un projecteur. + +En savoir plus sur OpenLP : http://openlp.org/ + +OpenLP est écrit et maintenu par des bénévoles. Si vous souhaitez voir plus de logiciel libre d'être chrétien écrit, s'il vous plaît envisager de contribuer à l'aide du bouton ci-dessous. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Copyright de composant © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - Propriétés de l'interface + Propriétés de l'interface utilisateur - + Number of recent files to display: Nombre de fichiers récents a afficher : - + Remember active media manager tab on startup Se souvenir de l'onglet actif du gestionnaire de média au démarrage - + Double-click to send items straight to live Double-cliquer pour envoyer les éléments directement en live - + Expand new service items on creation Étends les nouveaux éléments du service a la création - + Enable application exit confirmation Demande une confirmation avant de quitter l'application - + Mouse Cursor Curseur de la souris - + Hide mouse cursor when over display window - + Cache le curseur de la souris quand elle se trouve sur l'écran live - + Default Image - + Image par défaut - + Background color: - Couleur de fond : + Couleur de fond : - + Image file: - + Fichier image : - + Open File - Ouvre un fichier + Ouvre un fichier + + + + Preview items when clicked in Media Manager + Prévisualise l’élément quand on le clique dans le gestionnaire de média + + + + Advanced + Avancé + + + + Click to select a color. + Clique pour sélectionner une couleur. + + + + Browse for an image file to display. + Parcoure pour trouver une image a afficher. + + + + Revert to the default OpenLP logo. + Retour au logo OpenLP par défaut. OpenLP.DisplayTagDialog - + Edit Selection - Édite la sélection + Édite la sélection - - Update - Mettre à jours - - - + Description - Description - - - - Tag - Onglet + Description + Tag + Balise + + + Start tag - Tag de démarrage + Balise de début - + End tag - Tag de fin + Balise de fin - - Default - Défaut - - - + Tag Id - + Identifiant de balise - + Start HTML - + HTML de début - + End HTML - + HTML de fin + + + + Save + Enregistre OpenLP.DisplayTagTab - + Update Error Erreur de mise a jours - + Tag "n" already defined. - + Balise "n" déjà définie. - + Tag %s already defined. + Balise %s déjà définie. + + + + New Tag + Nouvelle balise + + + + </and here> + </ajoute ici> + + + + <HTML here> + <HTML ici> + + + + OpenLP.DisplayTags + + + Red + Rouge + + + + Black + Noir + + + + Blue + Bleu + + + + Yellow + Jaune + + + + Green + Vert + + + + Pink + Rose + + + + Orange + Orange + + + + Purple + Pourpre + + + + White + Blanc + + + + Superscript + Exposant + + + + Subscript + Indice + + + + Paragraph + Paragraphe + + + + Bold + Gras + + + + Italics + Italiques + + + + Underline + Souligner + + + + Break OpenLP.ExceptionDialog - + Error Occurred - + Erreur - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Oups! OpenLP a rencontré un problème, et ne peut pas la récupérer. Le texte dans le champ ci-dessous contient des informations qui pourraient être utiles aux développeurs d'OpenLP, donc s'il vous plaît encoyer un courriel à bugs@openlp.org, avec une description détaillée de ce que vous faisiez lorsque le problème est survenu. - + Send E-Mail Envoyer un courriel - + Save to File Sauve dans un fichier - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Merci d'introduire une description de ce que vous faisiez au moment de l'erreur +(minimum 20 caractères) - + Attach File - + Attacher un fichier - + Description characters to enter : %s - + Description a introduire : %s OpenLP.ExceptionForm - + Platform: %s Plateforme: %s - + Save Crash Report Sauve le rapport de crache - + Text files (*.txt *.log *.text) Fichiers texte (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1384,10 +1835,23 @@ Version: %s --- Library Versions --- %s - + **Rapport de dysfonctionnement OpenLP** +Version : %s + +--- Détails de l'exception. --- + +%s + + --- Trace de l'exception --- +%s +--- Système d'information --- +%s +--- Version des bibliothèques --- +%s + - + *OpenLP Bug Report* Version: %s @@ -1403,23 +1867,36 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *Rapport de dysfonctionnement OpenLP* +Version : %s + +--- Détails de l'exception. --- + +%s + + --- Trace de l'exception --- +%s +--- Système d'information --- +%s +--- Version des bibliothèques --- +%s + OpenLP.FileRenameForm - + New File Name: Nouveau nom de fichier : - + File Copy Copie le fichier - + File Rename Renomme le fichier @@ -1427,320 +1904,344 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Sélectionne la traduction - + Choose the translation you'd like to use in OpenLP. - + Choisir la traduction que vous voulez utiliser dans OpenLP. - + Translation: - + Traduction : OpenLP.FirstTimeWizard - + Downloading %s... - + Téléchargement %s... - + Download complete. Click the finish button to start OpenLP. - + Téléchargement terminer. Clic le bouton terminer pour démarrer OpenLP. - + Enabling selected plugins... - - - - - First Time Wizard - - - - - Welcome to the First Time Wizard - + Active le module sélectionné... - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - + First Time Wizard + Assistant de démarrage - - Activate required Plugins - - - - - Select the Plugins you wish to use. - - - - - Songs - + + Welcome to the First Time Wizard + Bienvenue dans l'assistant de démarrage - Custom Text - + Activate required Plugins + Activer les modules requis - Bible - Bible + Select the Plugins you wish to use. + Sélectionne les modules que vous voulez utiliser. - - Images - Images + + Songs + Chants - Presentations - Présentations + Custom Text + Texte Personnel + Bible + Bible + + + + Images + Images + + + + Presentations + Présentations + + + Media (Audio and Video) - + Média (audio et vidéo) - + Allow remote access - + Périmètre l’accès à distance - + Monitor Song Usage - - - - - Allow Alerts - - - - - No Internet Connection - - - - - Unable to detect an Internet connection. - + Suivre l'utilisation des chants + Allow Alerts + Permêtre les Alertes + + + + No Internet Connection + Pas de connexion de connexion + + + + Unable to detect an Internet connection. + Impossible de détecter une connexion Internet. + + + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - + Pas de connexion Internet trouvée. L'assistant de démarrage a besoin d'une connexion Internet pour pouvoir télécharge les exemple de chants , Bibles et thèmes. + +Pour redémarrer l'assistant de démarrage et importer les donnée d'exemple plus tard, appuyez sur le bouton annuler maintenant, vérifier votre connexion Internet et redémarrer OpenLP. + +Pour annuler l'assistant de démarrage, appuyer sur le bouton fin maintenant. - + Sample Songs - + Chant exemple - + Select and download public domain songs. - + Sélectionne et télécharge les chants du domaine publics. - + Sample Bibles - + Example de Bibles - + Select and download free Bibles. - + Sélectionne et télécharge des Bibles gratuites. - + Sample Themes - + Exemple de Thèmes - + Select and download sample themes. - + Sélectionne et télécharge des exemple de thèmes. - + Default Settings - + Paramètres par défaut - + Set up default settings to be used by OpenLP. - + Définir les paramètres par défaut pour être utilisé par OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Sortie écran par défaut : - + Select default theme: - + Sélectionne le thème pas défaut : - + Starting configuration process... - + Démarrer le processus de configuration... + + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Cet assistant va vous aider à configurer OpenLP pour sa première utilisation. Cliquez sur le bouton suivant pour démarrer. + + + + Setting Up And Downloading + Mise en place et téléchargement + + + + Please wait while OpenLP is set up and your data is downloaded. + Merci d'attendre pendant qu'OpenLP ce met en place que que vos données soient téléchargée. + + + + Setting Up + Mise en place + + + + Click the finish button to start OpenLP. + Cliquer sur le bouton pour démarrer OpenLP. OpenLP.GeneralTab - + General Général - + Monitors Monitors - + Select monitor for output display: - Select le moniteur pour la sortie d'affichage : + Sélectionne l’écran pour la sortie d'affichage : - + Display if a single screen Affiche si il n'y a qu'un écran - + Application Startup Démarrage de l'application - + Show blank screen warning - Affiche un écran noir d'avertissement + Afficher un avertissement d'écran vide - + Automatically open the last service Ouvre automatiquement le dernier service - + Show the splash screen Affiche l'écran de démarrage - + Check for updates to OpenLP Regarde s'il y a des mise à jours d'OpenLP - + Application Settings Préférence d'application - + Prompt to save before starting a new service - Demande a sauver avant de commencer un nouveau service + Demande d'enregistrer avant de commencer un nouveau service - + Automatically preview next item in service Prévisualise automatiquement le prochain élément de service - Slide loop delay: - Délais de boucle des diapositive : - - - sec sec - + CCLI Details CCLI détails - + SongSelect username: Nom d'utilisateur SongSelect : - + SongSelect password: Mot de passe SongSelect : - + Display Position Position d'affichage - + X X - + Y Y - + Height Hauteur - + Width Largeur - + Override display position Surcharge la position d'affichage + + + Unblank display when adding new live item + Supprime l'écran noir lors de l'ajout de nouveaux élément direct + + + + Enable slide wrap-around + Enclenche le passage automatique des diapositives + + + + Timed slide interval: + Intervalle de temps entre les diapositives : + OpenLP.LanguageManager - + Language Langage - + Please restart OpenLP to use your new language setting. Veuillez redémarrer OpenLP pour utiliser votre nouvelle propriété de langue. @@ -1748,7 +2249,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display Affichage OpenLP @@ -1756,194 +2257,159 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Fichier - + &Import &Import - + &Export &Export - + &View - &View + &Visualise - + M&ode M&ode - + &Tools &Outils - + &Settings &Options - + &Language &Langue - + &Help &Aide - + Media Manager Gestionnaire de médias - + Service Manager Gestionnaire de services - + Theme Manager Gestionnaire de thèmes - + &New &Nouveau - - Ctrl+N - Ctrl+N - - - + &Open - &Open + &Ouvrir - + Open an existing service. Ouvre un service existant. - - Ctrl+O - Ctrl+O - - - + &Save &Enregistre - + Save the current service to disk. Enregistre le service courant sur le disque. - - Ctrl+S - Ctrl+S - - - + Save &As... Enregistre &sous... - + Save Service As Enregistre le service sous - + Save the current service under a new name. Enregistre le service courant sous un nouveau nom. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit &Quitter - + Quit OpenLP Quitter OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Thème - + Configure &Shortcuts... Personnalise les &raccourcis... - + &Configure OpenLP... &Personnalise OpenLP... - + &Media Manager Gestionnaire de &médias - - - Toggle Media Manager - - - - - Toggle the visibility of the media manager. - - - F8 - F8 + Toggle Media Manager + Gestionnaire de Média + Toggle the visibility of the media manager. + Change la visibilité du gestionnaire de média. + + + &Theme Manager Gestionnaire de &thèmes - - - Toggle Theme Manager - - - Toggle the visibility of the theme manager. - + Toggle Theme Manager + Gestionnaire de Thème - F10 - F10 + Toggle the visibility of the theme manager. + Change la visibilité du gestionnaire de tème. @@ -1953,233 +2419,213 @@ To cancel the First Time Wizard completely, press the finish button now. Toggle Service Manager - + Gestionnaire de service Toggle the visibility of the service manager. - + Change la visibilité du gestionnaire de service. - F9 - F9 - - - &Preview Panel Panneau de &prévisualisation - + Toggle Preview Panel - + Panneau de prévisualisation + + + + Toggle the visibility of the preview panel. + Change la visibilité du panel de prévisualisation. - Toggle the visibility of the preview panel. - - - - - F11 - F11 - - - &Live Panel Panneau du &direct - + Toggle Live Panel - + Panneau du direct - + Toggle the visibility of the live panel. - + Change la visibilité du directe. - - F12 - F12 - - - + &Plugin List Liste des &modules - + List the Plugins Liste des modules - - Alt+F7 - Alt+F7 - - - + &User Guide &Guide utilisateur - + &About - &Á propos + &À propos - + More information about OpenLP Plus d'information sur OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Aide en ligne - + &Web Site Site &Web - + Use the system language, if available. Utilise le langage système, si disponible. - + Set the interface language to %s Défini la langue de l'interface à %s - + Add &Tool... - Ajoute un &outils.. + Ajoute un &outils... - + Add an application to the list of tools. Ajoute une application a la liste des outils. - + &Default &Défaut - + Set the view mode back to the default. Redéfini le mode vue comme par défaut. - + &Setup - + &Configuration - + Set the view mode to Setup. - + Mode vue Configuration. - + &Live &Direct - + Set the view mode to Live. - + Mode vue Direct. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - La version %s l'OpenLP est maintenant disponible au téléchargement (vous utiliser actuellement la version %s). + La version %s l'OpenLP est maintenant disponible au téléchargement (vous utiliser actuellement la version %s). Vous pouvez télécharger la dernière version depuis http://openlp.org/. - + OpenLP Version Updated Version d'OpenLP mis a jours - + OpenLP Main Display Blanked OpenLP affichage principale noirci - + The Main Display has been blanked out L'affichage principale a été noirci - + Close OpenLP Ferme OpenLP - + Are you sure you want to close OpenLP? Êtes vous sur de vouloir fermer OpenLP ? - + Default Theme: %s Thème par défaut : %s - + English Please add the name of your language here Anglais - - Print the current Service Order. - - - - - Ctrl+P - - - - + Open &Data Folder... - + Ouvre le répertoire de &données... - + Open the folder where songs, bibles and other data resides. - + Ouvre le répertoire ou les chants, bibles et les autres données sont placées. - + &Configure Display Tags - + &Configure les balise d'affichage - + &Autodetect - + &Détecte automatiquement + + + + Update Theme Images + Met a jours les images de thèmes + + + + Update the preview images for all themes. + Met a jours les images de tous les thèmes. + + + + Print the current service. + Imprime le service courant. OpenLP.MediaManagerItem - + No Items Selected Pas d'éléments sélectionné @@ -2189,75 +2635,92 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/.&Ajoute à l'élément sélectionné du service - + You must select one or more items to preview. Vous devez sélectionner un ou plusieurs éléments a prévisualiser. - + You must select one or more items to send live. Vous devez sélectionner un ou plusieurs éléments pour les envoyer en direct. - + You must select one or more items. Vous devez sélectionner un ou plusieurs éléments. - + You must select an existing service item to add to. Vous devez sélectionner un élément existant du service pour l'ajouter. - + Invalid Service Item Élément du service invalide - + You must select a %s service item. Vous devez sélectionner un %s élément du service. + + + You must select one or more items to add. + Vous devez sélectionner un ou plusieurs éléments a ajouter. + + + + No Search Results + Pas de résultats de recherche + + + + Duplicate filename %s. +This filename is already in the list + Nom de fichiers dupliquer %s. +Ce nom de fichier est déjà dans la liste + OpenLP.PluginForm - + Plugin List Liste des modules - + Plugin Details Détails du module - + Status: Statu : - + Active Actif - + Inactive Inactif - + %s (Disabled) %s (Désactivé) - + %s (Active) %s (Actif) - + %s (Inactive) %s (Inactif) @@ -2265,96 +2728,101 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Ajuster à la page - + Fit Width - + Ajuster à la largeur OpenLP.PrintServiceForm - + Options - + Options Close - + Fermer Copy - + Copier Copy as HTML - + Copier comme de l'HTML - + Zoom In - + Zoom avant - + Zoom Out - + Zoom arrière - + Zoom Original - + Zoom originel - + Other Options - + Autres options - + Include slide text if available - + Inclure le texte des diapositives si disponible - + Include service item notes - + Inclure les notes des éléments du service - + Include play length of media items - + Inclure la longueur des éléments média - - Service Order Sheet - + + Add page break before each text item + Ajoute des saut de page entre chaque éléments + + + + Service Sheet + Feuille de service OpenLP.ScreenList - + Screen - Écran + Écran - + primary - primaire + primaire OpenLP.ServiceItemEditForm - + Reorder Service Item Réordonne les éléments du service @@ -2362,217 +2830,257 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Cherche un service existant - - - - Save this service - Enregistre ce service - - - - Select a theme for the service - Selecte un thème pour le service - - - + Move to &top Place en &premier - + Move item to the top of the service. Place l'élément au début du service. - + Move &up Déplace en &haut - + Move item up one position in the service. Déplace l'élément d'une position en haut. - + Move &down - Déplace en %bas + Déplace en &bas - + Move item down one position in the service. Déplace l'élément d'une position en bas. - + Move to &bottom Place en &dernier - + Move item to the end of the service. Place l'élément a la fin du service. - + Moves the selection up the window. - + Déplace la sélection en haut de la fenêtre. - + Move up Déplace en haut - + &Delete From Service &Efface du service - + Delete the selected item from the service. Efface l'élément sélectionner du service. - + &Expand all &Développer tous - + Expand all the service items. Développe tous les éléments du service. - + &Collapse all &Réduire tous - + Collapse all the service items. Réduit tous les élément du service. - + Go Live Lance le direct - + Send the selected item to Live. Envoie l'élément sélectionné en direct. - + &Add New Item &Ajoute un nouvel élément - + &Add to Selected Item &Ajoute a l'élément sélectionné - + &Edit Item &Édite l'élément - + &Reorder Item &Réordonne l'élément - + &Notes &Remarques - + &Change Item Theme &Change le thème de l'élément - + Open File Ouvre un fichier - + OpenLP Service Files (*.osz) Fichier service OpenLP (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Le fichier n'est un service valide. Le contenu n'est pas de l'UTF-8. - + File is not a valid service. Le fichier n'est pas un service valide. - + Missing Display Handler Délégué d'affichage manquent - + Your item cannot be displayed as there is no handler to display it Votre élément ne peut pas être affiché il n'y a pas de délégué pour l'afficher - + Your item cannot be displayed as the plugin required to display it is missing or inactive Votre élément ne peut pas être affiché le module nécessaire pour l'afficher est manquant ou inactif - + Moves the selection down the window. - + Déplace la sélection en bas de la fenêtre. - + Modified Service - + Service modifié - - Notes: - - - - + &Start Time - + Temps de &début - + Show &Preview - + Affiche en &prévisualisation - + Show &Live - + Affiche en &direct - + The current service has been modified. Would you like to save this service? - + Le service courant à été modifier. Voulez-vous l'enregistrer ? + + + + File could not be opened because it is corrupt. + Le fichier n'a pas pu être ouvert car il est corrompu. + + + + Empty File + Fichier vide + + + + This service file does not contain any data. + Ce fichier de service ne contiens aucune données. + + + + Corrupt File + Fichier corrompu + + + + Custom Service Notes: + Remarques de service : + + + + Notes: + Remarques : + + + + Playing time: + Durée du service : + + + + Untitled Service + Service sans titre + + + + Load an existing service. + Charge un service existant. + + + + Save this service. + Enregistre ce service. + + + + Select a theme for the service. + Sélectionne un thème pour le service. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + Ce fichier est sois corrompu ou n'est pas un fichier de service OpenLP 2.0. OpenLP.ServiceNoteForm - + Service Item Notes Remarque sur l'élément du service @@ -2580,7 +3088,7 @@ Le contenu n'est pas de l'UTF-8. OpenLP.SettingsForm - + Configure OpenLP Configuration d'OpenLP @@ -2588,222 +3096,277 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - Personnalise les raccourci. + Personnalise les raccourci - + Action Action - + Shortcut Raccourci - - Default: %s - Défaut : %s - - - - Custom: - - - - - None - Aucun - - - + Duplicate Shortcut Raccourci dupliqué - + The shortcut "%s" is already assigned to another action, please use a different shortcut. Le raccourci "%s" est déjà assigner a une autre action, veillez utiliser un raccourci diffèrent. - + Alternate - + Alternatif + + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Sélectionne une action, puis cliquez sur un des boutons ci-dessous pour commencer à capturer un nouveau raccourci principal ou secondaire, respectivement. + + + + Default + Défaut + + + + Custom + Personnalisé + + + + Capture shortcut. + Capture un raccourci. + + + + Restore the default shortcut of this action. + Restaure le raccourci par défaut de cette action. + + + + Restore Default Shortcuts + Restaure les raccourcis par défaut + + + + Do you want to restore all shortcuts to their defaults? + Voulez vous restaurer tous les raccourcis par leur valeur par défaut ? OpenLP.SlideController - + Previous Slide Diapositive précédente - - Move to previous - Aller au précédent - - - + Next Slide Aller au suivant - - Move to next - Aller au suivant - - - + Hide Cache - + Blank Screen Écran noir - + Blank to Theme Thème vide - + Show Desktop Affiche le bureau - - Start continuous loop - Démarre une boucle continue - - - - Stop continuous loop - Arrête la boucle continue - - - - Delay between slides in seconds - Délais entre les diapositives en secondes - - - - Move to live - Déplace en direct - - - - Edit and reload song preview - Édite et recharge le chant prévisualisé - - - - Start playing media - Démarre la lecture de média - - - + Go To Aller à - + Previous Service Service précédent - + Next Service Service suivant - + Escape Item - + Élément échappement + + + + Move to previous. + Déplace au précédant. + + + + Move to next. + Déplace au suivant. + + + + Play Slides + Joue les diapositives + + + + Play Slides in Loop + Joue les diapositives en boucle + + + + Play Slides to End + Joue les diapositives jusqu’à la fin + + + + Delay between slides in seconds. + Intervalle entre les diapositives en secondes. + + + + Move to live. + Affiche en direct. + + + + Add to Service. + Ajoute au service. + + + + Edit and reload song preview. + Édite et recharge la prévisualisation du chant. + + + + Start playing media. + Joue le média. OpenLP.SpellTextEdit - + Spelling Suggestions Suggestions orthographique - + Formatting Tags Tags de formatage + + + Language: + Langue : + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - + Heures : - - h - - - - - m - - - - + Minutes: - + Minutes : - + Seconds: - + Secondes : + + + + Item Start and Finish Time + Temps de début et de fin de l'élément + + + + Start + Début + + + + Finish + Fini + + + + Length + Longueur + + + + Time Validation Error + Erreur de validation du temps + + + + Finish time is set after the end of the media item + Le temps de fin est défini après la fin de l’élément média + + + + Start time is after the finish time of the media item + Le temps de début est avant le temps de fin de l'élément média OpenLP.ThemeForm - - (%d lines per slide) - (%d lignes pas diapositive) - - - + Select Image Sélectionne l'image - + Theme Name Missing Nom du thème manquant - + There is no name for this theme. Please enter one. - Il n'y a pas ne nom pour ce thème, Veillez en introduire un. + Il n'y a pas ne nom pour ce thème. Veillez en introduire un. - + Theme Name Invalid Nom du thème invalide - + Invalid theme name. Please enter one. Nom du thème invalide. Veuillez en introduire un. + + + (approximately %d lines per slide) + (approximativement %d lignes pas diapositive) + OpenLP.ThemeManager @@ -2883,357 +3446,357 @@ Le contenu n'est pas de l'UTF-8. &Exporte le thème - + %s (default) %s (défaut) - + You must select a theme to rename. Vous devez sélectionner a thème à renommer. - + Rename Confirmation Confirme le renommage - + Rename %s theme? Renomme le thème %s ? - + You must select a theme to edit. Vous devez sélectionner un thème a éditer. - + You must select a theme to delete. Vous devez sélectionner un thème à effacer. - + Delete Confirmation Confirmation d'effacement - + Delete %s theme? Efface le thème %s ? - + You have not selected a theme. Vous n'avez pas sélectionner de thème. - + Save Theme - (%s) Enregistre le thème - (%s) - + Theme Exported Thème exporté - + Your theme has been successfully exported. Votre thème a été exporter avec succès. - + Theme Export Failed L'export du thème a échoué - + Your theme could not be exported due to an error. Votre thème ne peut pas être exporter a cause d'une erreur. - + Select Theme Import File Select le fichier thème à importer - + File is not a valid theme. The content encoding is not UTF-8. Le fichier n'est pas un thème. Le contenu n'est pas de l'UTF-8. - + Validation Error Erreur de validation - + File is not a valid theme. Le fichier n'est pas un thème valide. - + A theme with this name already exists. Le thème avec ce nom existe déjà. - + You are unable to delete the default theme. Vous ne pouvez pas supprimer le thème par défaut. - + Theme %s is used in the %s plugin. Thème %s est utiliser par le module %s. - + OpenLP Themes (*.theme *.otz) - + Thèmes OpenLP (*.theme *.otz) OpenLP.ThemeWizard - + Edit Theme - %s Édite le thème - %s - + Theme Wizard Assistant thème - + Welcome to the Theme Wizard Bienvenue dans l'assistant thème - + 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. Cet assistant va vous aider à créer et éditer votre thème. Cliquer sur la bouton suivant pour démarrer le processus par configurer votre fond. - + Set Up Background Établir le font - + Set up your theme's background according to the parameters below. Établir le fond de votre thème en fonction des paramètre si dessous. - + Background type: Type de font : - + Solid Color Couleur unie - + Gradient Dégrader - + Color: Couleur : - + Gradient: Dégrader : - + Horizontal Horizontal - + Vertical Vertical - + Circular Circulaire - + Top Left - Bottom Right Haut gauche - Bas droite - + Bottom Left - Top Right Bas gauche - Haut droite - + Main Area Font Details Aire principale détails de police - + Define the font and display characteristics for the Display text Définir la police et les caractéristique d'affichage pour afficher le text - + Font: Police : - + Size: Taille : - + Line Spacing: Espace des lignes : - + &Outline: &Contour : - + &Shadow: &Ombre : - + Bold Gras - + Italic Italique - + Footer Area Font Details Détailles de la police du pied de page - + Define the font and display characteristics for the Footer text Définir la police et les caractéristiques d'affichage du texte en pied de page - + Text Formatting Details Détails de formatage du texte - + Allows additional display formatting information to be defined Permet de définir des paramètre d'affichage supplémentaire - + Horizontal Align: Alignement horizontal : - + Left Gauche - + Right Droite - + Center Centrer - + Transitions: Traductions : - + Output Area Locations Emplacement de la zone d'affichage - + Allows you to change and move the main and footer areas. - Vous permettre de déplacer les zone principale et de pied de page + Vous permettre de déplacer les zone principale et de pied de page. - + &Main Area Zone &principale - + &Use default location &Utilise l'emplacement par défaut - + X position: Position x : - + px px - + Y position: Position y : - + Width: Largeur : - + Height: Hauteur : - + &Footer Area Zone de &pied de page - + Use default location Utilise l'emplacement pas défaut - + Save and Preview Enregistre et prévisualise - + View the theme and save it replacing the current one or change the name to create a new theme Visualise le thème et l'enregistre a la place du thème courent, ou change le nom pour en créer un nouveau - + Theme name: Nom du thème : @@ -3241,42 +3804,42 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ThemesTab - + Global Theme Thème global - + Theme Level Politique d'application du thème - + S&ong Level Niveau &chant - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Utilise le thème pour chaque chants de la basse de donnée. Si un chant n'a pas de thème associer, alors utilise le thème du service. Si le service n'as pas de thème utilise le thème global. - + &Service Level - Niveau service + Niveau &service - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Utilise le thème du service, surcharge le thème de chaque chants. Si le service n'as pas de thème utilise le thème global. - + &Global Level Niveau &global - + Use the global theme, overriding any themes associated with either the service or the songs. Utilise un thème global, surcharge tous les thèmes associer aux services et aux chants. @@ -3284,423 +3847,530 @@ Le contenu n'est pas de l'UTF-8. OpenLP.Ui - + Error Erreur - + &Delete - + &Supprime - + Delete the selected item. - + Supprime l'élément sélectionné. - + Move selection up one position. - + Déplace la sélection d'une position en haut. - + Move selection down one position. - - - - - &Add - - - - - Advanced - Avancé - - - - All Files - - - - - Create a new service. - Crée un nouveau service. - - - - &Edit - - - - - Import - Import - - - - Length %s - - - - - Live - - - - - Load - Charge - - - - New - Nouveau - - - - New Service - Nouveau service - - - - OpenLP 2.0 - OpenLP 2.0 - - - - Open Service - Ouvre un service - - - - Preview - - - - - Replace Background - Remplace le fond - - - - Replace Live Background - - - - - Reset Background - - - - - Reset Live Background - Remettre de fond du direct - - - - Save Service - Enregistre le service - - - - Service - Service - - - - Start %s - - - - - &Vertical Align: - - - - - Top - Haut - - - - Middle - Milieux - - - - Bottom - Bas - - - - About - À propos - - - - Browse... - - - - - Cancel - - - - - CCLI number: - Numéro CCLI : - - - - Empty Field - - - - - Export - - - - - pt - Abbreviated font pointsize unit - pt + Déplace la sélection d'une position en bas. - Image - Image + &Add + &Ajoute - - Live Background Error - + + Advanced + Avancé - - Live Panel - + + All Files + Tous les Fichiers - - New Theme - Nouveau thème - - - - No File Selected - Singular - - - - - No Files Selected - Plural - + + Create a new service. + Crée un nouveau service. - No Item Selected - Singular - + &Edit + &Édite - - No Items Selected - Plural - Pas d'éléments sélectionné - - - - openlp.org 1.x - openlp.org 1.x - - - - Preview Panel - - - - - Print Service Order - - - - - s - The abbreviated unit for seconds - s + + Import + Import - Save && Preview - Sauve && prévisualise + Length %s + Longueur %s - Search - Recherche + Live + Dirrect - - You must select an item to delete. - - - - - You must select an item to edit. - - - - - Theme - Singular - + + Load + Charge - Themes - Plural - Thèmes + New + Nouveau + + + + New Service + Nouveau service + + + + OpenLP 2.0 + OpenLP 2.0 + + + + Preview + Prévisualise + + + + Replace Background + Remplace le fond + + + + Reset Background + Réinitialiser le fond + + + + Save Service + Enregistre le service + + + + Service + Service + + + + Start %s + Début %s + + + + &Vertical Align: + Alignement &vertical : + + + + Top + Haut + + + + Middle + Milieu + + + + Bottom + Bas + + + + About + À propos + + + + Browse... + Parcourir... + + + + Cancel + Annuler + + + + CCLI number: + Numéro CCLI : + + + + Empty Field + Champ vide + + + + Export + Export + + + + pt + Abbreviated font pointsize unit + pt + + + + Image + Image + + + + Live Background Error + Erreur fond du direct - Version - + New Theme + Nouveau thème - - Finished import. - Import terminé. + + No File Selected + Singular + Pas de fichier sélectionné + + + + No Files Selected + Plural + Pas de fichiers sélectionnés + + + + No Item Selected + Singular + Pas d'élément sélectionné + + + + No Items Selected + Plural + Pas d'éléments sélectionnés + + + + openlp.org 1.x + openlp.org 1.x + + + + s + The abbreviated unit for seconds + s + + + + Save && Preview + Enregistre && prévisualise + + + + Search + Recherche + + + + You must select an item to delete. + Vous devez sélectionner un élément à supprimer. + + + + You must select an item to edit. + Vous devez sélectionner un élément à éditer. + + + + Theme + Singular + Thème + + + + Themes + Plural + Thèmes + + + + Version + Version - Format: - Format : + Finished import. + Import terminé. - - Importing - Import en cours + + Format: + Format : - Importing "%s"... - + Importing + Import en cours - Select Import Source - Sélectionne la source a importer + Importing "%s"... + Import "%s"... + Select Import Source + Sélectionne la source à importer + + + Select the import format and the location to import from. - + Sélectionne le format d'import et le chemin à importer. - + The openlp.org 1.x 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. - L'import openlp.org 1.x a été désactivé à cause d'un module Python manquant. Si vous voulez utiliser cet import, vous devez installer le module Python "python-sqlite". - - - - Open %s File - + L'import openlp.org 1.x a été désactivé à cause d'un module Python manquant. Si vous voulez utiliser cet import, vous devez installer le module Python "python-sqlite". - %p% - + Open %s File + Ouvre le fichier %s + %p% + %p% + + + Ready. - Prêt. + Prêt. - + Starting import... - Commence l'import... + Commence l'import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Vous devez spécifier au moins un %s fichier à importer. - + Welcome to the Bible Import Wizard - Bienvenue dans l'assistant d'import de Bibles + Bienvenue dans l'assistant d'import de Bibles - + Welcome to the Song Export Wizard - + Bienvenue dans l'assistant d'export de Chant - + Welcome to the Song Import Wizard - - - - - Author - Singular - + Bienvenue dans l'assistant d'import de Chant - Authors - Plural - + Author + Singular + Auteur - - © - Copyright symbol. - + + Authors + Plural + Auteurs - Song Book - Singular - + © + Copyright symbol. + © - Song Books - Plural - + Song Book + Singular + Psautier - Song Maintenance - - - - - Topic - Singular - + Song Books + Plural + Psautiers + Song Maintenance + Entretien des Chants + + + + Topic + Singular + Sujet + + + Topics Plural - + Sujets + + + + Continuous + Continu + + + + Default + Défaut + + + + Display style: + Style d'affichage : + + + + File + Fichier + + + + Help + Aide + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Style de disposition : + + + + Live Toolbar + Bar d'outils dirrect + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP est déjà démarré. Voulez vous continuer ? + + + + Settings + Configuration + + + + Tools + Outils + + + + Verse Per Slide + Un verset par diapositive + + + + Verse Per Line + Un verset par ligne + + + + View + Affiche + + + + Duplicate Error + Erreur de duplication + + + + Unsupported File + Fichier pas supporté + + + + Title and/or verses not found + Titre et/ou verset pas trouvé + + + + XML syntax error + Erreur de syntaxe XML + + + + View Mode + Mode d'affichage + + + + Welcome to the Bible Upgrade Wizard + Bienvenue dans l'assistant de mise à jour de Bible + + + + Open service. + Ouvre le service. + + + + Print Service + Imprime le service + + + + Replace live background. + Remplace le fond du direct. + + + + Reset live background. + Restaure le fond du direct. + + + + &Split + &Sépare + + + + Split a slide into two only if it does not fit on the screen as one slide. + Sépare la diapositive en 2 seulement si cela n'entre pas un l'écran d'une diapositive. OpenLP.displayTagDialog - + Configure Display Tags - + Configure les balises d'affichage @@ -3708,7 +4378,7 @@ Le contenu n'est pas de l'UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - <strong>Module de présentation</strong><br />Le module de présentation donne la possibilité d'afficher une présentation en utilisant différents programmes. Le choix des programmes disponibles ce trouve dans la boite déroulante utilisateur.. + <strong>Module de présentation</strong><br />Le module de présentation donne la possibilité d'afficher une présentation en utilisant différents programmes. Le choix des programmes disponibles ce trouve dans la boite déroulante utilisateur. @@ -3726,1204 +4396,1366 @@ Le contenu n'est pas de l'UTF-8. Presentations container title - Présentations + Présentations - Load a new Presentation - + Load a new presentation. + Charge une nouvelle présentation. - - Delete the selected Presentation - + + Delete the selected presentation. + Supprime la présentation sélectionnée. - - Preview the selected Presentation - + + Preview the selected presentation. + Prévisualise la présentation sélectionnée. - - Send the selected Presentation live - + + Send the selected presentation live. + Envoie en direct la présentation sélectionnée. - - Add the selected Presentation to the service - + + Add the selected presentation to the service. + Ajoute la présentation sélectionnée au service. PresentationPlugin.MediaItem - + Select Presentation(s) - + Sélectionne Présentation(s) - + Automatic - + Automatique - + Present using: - + Actuellement utilise : - + Presentations (%s) - + Présentations (%s) - + File Exists - + Fichier existe - + A presentation with that filename already exists. - + Une présentation avec ce nom de fichier existe déjà. - - Unsupported File - - - - + This type of presentation is not supported. - + Ce type de présentation n'est pas supporté. - + Missing Presentation - + Présentation manquante - + The Presentation %s is incomplete, please reload. - + La présentation %s est incomplète, merci de recharger. - + The Presentation %s no longer exists. - + La présentation %s n'existe plus. PresentationPlugin.PresentationTab - + Available Controllers - + Contrôleurs disponibles - + Allow presentation application to be overriden - + Permet de surcharger l'application de présentation - + %s (unavailable) - + %s (indisponible) RemotePlugin - + <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. - - - - - Remote - name singular - + <strong>Module Connexion à distance</strong><br />Le module de connexion à distance permet d'envoyer des messages a une instance d'OpenLP fonctionnant sur un autre ordinateur au moyen d'une interface web ou au travers d'une API. - Remotes - name plural - + Remote + name singular + Connexion à distance - + + Remotes + name plural + Connexion à distance + + + Remote container title - + Connexion à distance + + + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 à distance + + + + OpenLP 2.0 Stage View + OpenLP 2.0 vue scène + + + + Service Manager + Gestionnaire de services + + + + Slide Controller + Controlleur de slides + + + + Alerts + Alertes + + + + Search + Recherche + + + + Back + Arrière + + + + Refresh + Rafraîchir + + + + Blank + Vide + + + + Show + Affiche + + + + Prev + Préc + + + + Next + Suiv + + + + Text + Texte + + + + Show Alert + Affiche une alerte + + + + Go Live + Lance en direct + + + + Add To Service + Ajoute au service + + + + No Results + Pas de résultats + + + + Options + Options RemotePlugin.RemoteTab - + Server Settings - + Configuration du serveur - + Serve on IP address: - + Disponible sur l'adresse : - + Port number: - + Numéro de port : + + + + Remote URL: + URL de contrôle : + + + + Stage view URL: + URL de visualisation d'étape : SongUsagePlugin - + &Song Usage Tracking - + Suivre de l'utilisation des chants - + &Delete Tracking Data - + &Supprime les données de suivi - + Delete song usage data up to a specified date. - - - - - &Extract Tracking Data - + Supprime les données de l'utilisation des chants jusqu'à une date déterminée. + &Extract Tracking Data + &Extraire les données de suivi + + + Generate a report on song usage. - + Génère un rapport de l'utilisation des chants. Toggle Tracking - + Enclenche/déclenche suivi Toggle the tracking of song usage. - + Enclenche/déclenche le suivi de l'utilisation des chants. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - - - SongUsage - name singular - - - - - SongUsage - name plural - + <strong>Module de suivi</strong><br />Ce module permet de suivre l'utilisation des chants dans les services. SongUsage + name singular + Suivi de l'utilisation des chants + + + + SongUsage + name plural + Suivi de l'utilisation des chants + + + + SongUsage container title - + Suivi de l'utilisation des chants + + + + Song Usage + Suivi de l'utilisation des chants SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Supprime les données de suivi de l'utilisation des chants - + Delete Selected Song Usage Events? - + Supprime les événement d'usages sélectionné ? - + Are you sure you want to delete selected Song Usage data? - + Êtes vous sur de vouloir supprimer les donnée de suivi sélectionnée ? - + Deletion Successful - + Suppression effectuée - + All requested data has been deleted successfully. - + Toutes les données demandées a été supprimées avec succès. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Extraction de l'utilisation des chants - + Select Date Range - + Sélectionne une période - + to - + à - + Report Location - + Emplacement du rapport - + Output File Location - + Emplacement du fichier de sortie - + usage_detail_%s_%s.txt - + Report Creation - + Création du rapport - + Report %s has been successfully created. - + Le rapport +%s +à été crée avec succès. - + Output Path Not Selected - + Répertoire de destination pas sélectionné - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. - + Vous n'avez pas défini de répertoire de destination valide pour votre rapport d'usage des chants. Merci de sélectionner un répertoire existant sur votre ordinateur. SongsPlugin - - - Arabic (CP-1256) - - - - - Baltic (CP-1257) - - - - - Central European (CP-1250) - - - - - Cyrillic (CP-1251) - - - Greek (CP-1253) - + Arabic (CP-1256) + Arabe (CP-1256) - Hebrew (CP-1255) - + Baltic (CP-1257) + Baltique (CP-1257) - Japanese (CP-932) - + Central European (CP-1250) + Europe centrale (CP-1250) - Korean (CP-949) - + Cyrillic (CP-1251) + Cyrillique (CP-1251) - Simplified Chinese (CP-936) - + Greek (CP-1253) + Grecque (CP-1253) - Thai (CP-874) - + Hebrew (CP-1255) + Hébreux (CP-1255) - Traditional Chinese (CP-950) - + Japanese (CP-932) + Japonais (CP-932) - Turkish (CP-1254) - + Korean (CP-949) + Coréen (CP-949) - Vietnam (CP-1258) - + Simplified Chinese (CP-936) + Chinois simplifié (CP-936) + Thai (CP-874) + Thaï (CP-874) + + + + Traditional Chinese (CP-950) + Chinois Traditionnel (CP-950) + + + + Turkish (CP-1254) + Turque (CP-1254) + + + + Vietnam (CP-1258) + Vietnamiens (CP-1258) + + + Western European (CP-1252) - + Europe de l'ouest (CP-1252) - + Character Encoding - + Enccodage des caractères - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + La table de codage est responsable +de l'affichage correct des caractères. +Habituellement le choix présélectionné est pertinent. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Veillez choisir l'enccodage des caractères. +L'enccodage est responsable de l'affichage correct des caractères. - + &Song - + &Chant - + Import songs using the import wizard. - + Import des chants en utilisant l'assistant d'import. - + &Re-index Songs - + &Re-index Chants - + Re-index the songs database to improve searching and ordering. - + Re-index la base de donnée des chants pour accélérer la recherche et le tri. - + Reindexing songs... - + Récréation des index des chants en cours... - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - - - - - Song - name singular - + <strong>Module Chants</strong><br />Le module des Chants permet d'afficher et de gérer les chants. + Song + name singular + Chant + + + Songs name plural - + Chants - + Songs container title - + Chants - - Add a new Song - + + Exports songs using the export wizard. + Export les chants en utilisant l'assistant d'export. - Edit the selected Song - + Add a new song. + Ajouter un nouveau chant. - Delete the selected Song - + Edit the selected song. + Édite la chant sélectionné. - Preview the selected Song - + Delete the selected song. + Efface le chant sélectionné. - Send the selected Song live - + Preview the selected song. + Prévisualise le chant sélectionné. - Add the selected Song to the service - + Send the selected song live. + Affiche en dirrect le Chant sélectionné. - - Exports songs using the export wizard. - + + Add the selected song to the service. + Ajoute le chant sélectionné au service. SongsPlugin.AuthorsForm - + Author Maintenance - + Display name: - + Nom affiché : - + First name: - + Prénom : - + Last name: - + Nom : - + You need to type in the first name of the author. - + Vous devez introduire le prénom de l'auteur. - + You need to type in the last name of the author. - + Vous devez introduire le nom de l'auteur. - + You have not set a display name for the author, combine the first and last names? - + Nous n'avez pas introduit de nom affiché pour l'auteur, combiner le prénom et le nom ? SongsPlugin.CCLIFileImport - - Importing song %d of %d - + + The file does not have a valid extension. + Le fichier n'a pas d'extension valide. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Administré pas %s SongsPlugin.EditSongForm - + Song Editor - + Éditeur de Chant - + &Title: - &Titre : + &Titre : - + Alt&ernate title: - + Titre alt&ernatif : - + &Lyrics: - + &Paroles : - + &Verse order: - + Ordre des &versets : - + Ed&it All - Édite &tous + Édite &tous - + Title && Lyrics - + Titre && paroles - + &Add to Song - + &Ajoute un Chant - + &Remove - + &Enlève - + &Manage Authors, Topics, Song Books - + &Gère les auteurs, sujets, psautiers - + A&dd to Song - + A&joute un Chant - + R&emove - + E&nlève - + Book: - Livre : + Psautier : - + Number: - + Numéro : - + Authors, Topics && Song Book - + Auteurs, sujets && psautiers - + New &Theme - + Nouveau &thème - + Copyright Information - + Information du copyright - + Comments - + Commentaires - + Theme, Copyright Info && Comments - + Thème, copyright && commentaires - + Add Author - + Ajoute un auteur - + This author does not exist, do you want to add them? - + Cet auteur n'existe pas, voulez vous l'ajouter ? - + This author is already in the list. - + Cet auteur ce trouve déjà dans la liste. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Vous n'avez pas sélectionné un autheur valide. Vous pouvez sélectionner un auteur de la liste, ou tapez un nouvel auteur et cliquez sur "Ajouter un auteur au Chant" pour ajouter le nouvel auteur. - + Add Topic - + Ajoute un sujet - + This topic does not exist, do you want to add it? - + Ce sujet n'existe pas voulez vous l'ajouter ? - + This topic is already in the list. - + Ce sujet ce trouve déjà dans la liste. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + Vous n'avez pas sélectionné de sujet valide. Vous pouvez sélectionner un auteur de la liste, ou tapez un nouvel auteur et cliquez sur "Ajouter un sujet au Chant" pour ajouter le nouvel auteur. - + You need to type in a song title. - + Vous avez besoin d'introduire un titre pour le chant. - + You need to type in at least one verse. - + Vous avez besoin d'introduire au moins un verset. - + You need to have an author for this song. - + Vous avez besoin d'un auteur pour ce chant. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + L'ordre des versets n'est pas valide. Il n'y a pas de verset correspondant à %s. Les entrées valide sont %s. - + Warning - + Attention - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Vous n'avez pas utilisé %s dans l'ordre des verset. Êtes vous sur de vouloir enregistrer un chant comme ça ? - + Add Book - + Ajoute un psautier - + This song book does not exist, do you want to add it? - + Ce chant n'existe pas, voulez vous l'ajouter ? - + You need to type some text in to the verse. - + Vous avez besoin d'introduire du texte pour le verset. SongsPlugin.EditVerseForm - + Edit Verse - + Edit le verset - + &Verse type: - + &Type de verset : - + &Insert - + &Insère + + + + Split a slide into two by inserting a verse splitter. + Sépare une diapositive par l’insertion d'un séparateur de verset. SongsPlugin.ExportWizardForm - + Song Export Wizard - + Assistant d'export de chant - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Cet assistant va sous aider a exporter vos chant fans le format de chant libre et gratuit OpenLyrics worship. - + Select Songs - + Sélectionne chants - + Uncheck All - + Décoche tous - + Check All - + Coche tous - + Select Directory - + Sélectionne répertoire - - Select the directory you want the songs to be saved. - - - - + Directory: - + Répertoire : - + Exporting - + Exportation - + Please wait while your songs are exported. - + Merci d'attendre que vos chants soient exporter. - + You need to add at least one Song to export. - + Vous devez exporter au moins un chant. - + No Save Location specified - + Pas d'emplacement de sauvegarde spécifier - + Starting export... - + Démarre l'export... - + Check the songs you want to export. - + Coche les chants que vous voulez exporter. - + You need to specify a directory. - + Vous devez spécifier un répertoire. - + Select Destination Folder - + Sélectionne le répertoire de destination + + + + Select the directory where you want the songs to be saved. + Sélectionne le répertoire ou vous voulez enregistrer vos chants. SongsPlugin.ImportWizardForm - + Song Import Wizard - + Assistant d'import de Chant - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Cet assistant vous aide a importer des chants de divers formats. Cliquez sur le bouton suivant ci-dessous pour démarrer le processus pas sélectionner le format à importer. - + Generic Document/Presentation - - - - - Filename: - - - - - Add Files... - + Document/présentation générique + Filename: + Nom de fichiers : + + + + Add Files... + Ajoute des fichiers... + + + Remove File(s) - + Supprime des fichier(s) - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + L'import OpenLyrics n'a pas encore été déployer, mais comme vous pouvez le voir, nous avous toujours l'intention de le faire. J'espère que ce sera dans la prochaine version. - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + Attendez pendant que vos chants sont importé. - + OpenLP 2.0 Databases - + Base de données OpenLP 2.0 - + openlp.org v1.x Databases - + Base de données openlp.org 1.x - + Words Of Worship Song Files - + Fichiers Chant Words Of Worship - + Select Document/Presentation Files - + Sélectionne les fichiers document/présentation - - Administered by %s - - - - + Songs Of Fellowship Song Files - + Fichiers Chant Songs Of Fellowship - + SongBeamer Files - + Fichiers SongBeamer - + SongShow Plus Song Files - + Fichiers Chant SongShow Plus - + You need to specify at least one document or presentation file to import from. - + Vous devez spécifier au moins un fichier document ou présentation à importer. - + Foilpresenter Song Files - + Fichiers Chant Foilpresenter + + + + Copy + Copier + + + + Save to File + Enregistre dans le fichier + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + L'import de chants Fellowship à été désactivé car OpenLP ne peut accéder à OpenOffice ou LibreOffice. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + L'import générique de document/présentation à été désactiver car OpenLP ne peut accéder à OpenOffice ou LibreOffice. SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Entire Song - + L'entier du Chant - + Titles - + Titres - + Lyrics - + Paroles - + Delete Song(s)? - + Supprime le(s) Chant(s) ? - + Are you sure you want to delete the %n selected song(s)? - - + + Êtes vous sur de vouloir supprimer le(s) %n chant(s) sélectionné(s) ? - + CCLI License: - + License CCLI : + + + + Maintain the lists of authors, topics and books. + Maintenir la liste des auteur, sujet et psautiers. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Base de données de chant openlp.org 1.x pas valide. SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - + + Not a valid OpenLP 2.0 song database. + Base de données de chant OpenLP.org 2.0 pas valide. SongsPlugin.OpenLyricsExport - + Exporting "%s"... - + Exportation "%s"... SongsPlugin.SongBookForm - + Song Book Maintenance - - - - - &Name: - + Maintenance les psautiers - &Publisher: - + &Name: + &Nom : - + + &Publisher: + &Éditeur : + + + You need to type in a name for the book. - + Vous devez introduire un nom pour votre psautier. SongsPlugin.SongExportForm - + Finished export. - + Export terminé. - + Your song export failed. - + Votre export de chant à échouer. SongsPlugin.SongImport - + copyright - + copyright + + + + The following songs could not be imported: + Les chants suivant ne peut pas être importé : + + + + Unable to open file + Impossible d'ouvrir le fichier + + + + File not found + Fichier pas trouver + + + + Cannot access OpenOffice or LibreOffice + Impossible d’accéder à OpenOffice ou LibreOffice SongsPlugin.SongImportForm - + Your song import failed. - + Votre import de chant à échouer. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + Impossible d'ajouter votre auteur. - + This author already exists. - + Cet auteur existe déjà. - + Could not add your topic. - + Impossible d'ajouter votre sujet. - + This topic already exists. - + Ce sujet existe déjà. - + Could not add your book. - + Impossible d'ajouter votre psautier. - + This book already exists. - + Ce psautier existe déjà. - + Could not save your changes. - + Impossible d'enregistrer vos changements. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + L'auteur %s existe déjà. Voulez vous faire en sorte que les chants avec l'auteur %s utilise l'auteur existant %s ? - + Could not save your modified author, because the author already exists. - + Impossible d'enregistrer vos modifications de l'auteur, car l'auteur existe déjà. - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + Le sujet %s existe déjà. Voulez vous faire en sorte que les chants avec le sujet %s utilise le sujet existant %s ? - + Could not save your modified topic, because it already exists. - + Impossible d'enregistrer vos modifications du sujet, car le sujet existe déjà. - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + Le psautier %s existe déjà. Voulez vous faire en sorte que les chants avec le psautier %s utilise le psautier existant %s ? - + Delete Author - + Efface l'auteur - + Are you sure you want to delete the selected author? - + Êtes-vous sur de vouloir effacer l'auteur sélectionné ? - + This author cannot be deleted, they are currently assigned to at least one song. - + Cet auteur ne peut être effacé, il est actuellement utilisé par au moins un chant. - + Delete Topic - + Efface le sujet - + Are you sure you want to delete the selected topic? - + Êtes-vous sur de vouloir effacer le sujet sélectionné ? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Ce sujet ne peut être effacé, il est actuellement utilisé par au moins un chant. - + Delete Book - + Efface le psautier - + Are you sure you want to delete the selected book? - + Êtes-vous sur de vouloir effacer le psautier sélectionné ? - + This book cannot be deleted, it is currently assigned to at least one song. - + Ce psautier ne peut être effacé, il est actuellement utilisé par au moins un chant. SongsPlugin.SongsTab - + Songs Mode - + Mode Chants - + Enable search as you type - + Activer recherche a la frappe - + Display verses on live tool bar - + Affiche les versets dans la bar d'outils direct - + Update service from song edit - + Met à jours le service avec les édition de chant - + Add missing songs when opening service - + Ajoute les chants manquant quand on ouvre un service SongsPlugin.TopicsForm - + Topic Maintenance - + Maintenance des sujets - + Topic name: - + Nom du sujet : - + You need to type in a topic name. - + Vous devez introduire un nom au sujet. SongsPlugin.VerseType - - - Verse - - - - - Chorus - - - - - Bridge - - - - - Pre-Chorus - - - Intro - + Verse + Verset - Ending - + Chorus + Refrain + Bridge + Pont + + + + Pre-Chorus + Pré-refrain + + + + Intro + Introduction + + + + Ending + Fin + + + Other - + Autre + + + + ThemeTab + + + Themes + Thèmes diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 7280722a0..b62d73581 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -3,23 +3,23 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Nincs megadva a cserélendő paraméter. Folytatható? - + No Parameter Found Nem található a paraméter - + No Placeholder Found Nem található a helyjelölő - + The alert text does not contain '<>'. Do you want to continue anyway? Az értesítő szöveg nem tartalmaz „<>” karaktereket. @@ -29,34 +29,34 @@ Folytatható? AlertsPlugin - + &Alert &Értesítés - + Show an alert message. Értesítést jelenít meg. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Értesítés bővítmény</strong><br />Az értesítés bővítmény kezeli a gyermekfelügyelet felhívásait a vetítőn. - + Alert name singular Értesítés - + Alerts name plural Értesítések - + Alerts container title Értesítések @@ -65,47 +65,47 @@ Folytatható? AlertsPlugin.AlertForm - + Alert Message Értesítő üzenet - + Alert &text: Értesítés &szövege: - + &New &Új - + &Save &Mentés - + Displ&ay &Megjelenítés - + Display && Cl&ose M&egjelenítés és bezárás - + New Alert Új értesítés - + You haven't specified any text for your alert. Please type in some text before clicking New. Az értesítés szövege nincs megadva. Adj meg valamilyen szöveget az Új gombra való kattintás előtt. - + &Parameter: &Paraméter: @@ -121,32 +121,32 @@ Folytatható? AlertsPlugin.AlertsTab - + Font Betűkészlet - + Font name: Betűkészlet neve: - + Font color: Betűszín: - + Background color: Háttérszín: - + Font size: Betűméret: - + Alert timeout: Értesítés időtartama: @@ -154,51 +154,54 @@ Folytatható? BibleDB.Wizard - - Importing testaments... %s - Szövetség importálása… %s - - - - Importing testaments... done. - Szövetség importálása… kész. - - - + Importing books... %s Könyvek importálása… %s - + Importing verses from %s... Importing verses from <book name>... Versek importálása ebből a könyvből: %… - + Importing verses... done. Versek importálása… kész. + + BiblePlugin + + + &Upgrade older Bibles + &Régebbi bibliák frissítés + + + + Upgrade the Bible databases to the latest format. + Frissíti a biblia adatbázisokat a legutolsó formára. + + BiblePlugin.HTTPBible - + Download Error Letöltési hiba - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Probléma történt a kijelölt versek letöltésekor. Kérem, ellenőrizd a az internetkapcsolatot, és ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. - + Parse Error Feldolgozási hiba - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Probléma történt a kiválasztott versek kicsomagolásakor. Ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. @@ -206,101 +209,111 @@ Folytatható? BiblePlugin.MediaItem - + Bible not fully loaded. - A Biblia nem töltődött be teljesen. + A biblia nem töltődött be teljesen. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Az egyes és a kettőzött bibliaversek nem kombinálhatók. Töröljük a keresési eredményt és kezdjünk egy újabbat? + + + Information + Információ + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + A második biblia nem tartalmaz minden verset, ami az elsőben megtalálható. Csak a mindkét bibliában fellelhető versek fognak mgejelenni. Ezek a versek nem lesznek megtalálhatóak: %d. + BiblesPlugin - + &Bible &Biblia - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Biblia bővítmény</strong><br />A Biblia bővítmény különféle forrásokból származó igehelyek vetítését teszi lehetővé a szolgálat alatt. - - - - Import a Bible - Biblia importálása - - - - Add a new Bible - Biblia hozzáadása - - - - Edit the selected Bible - A kijelölt Biblia szerkesztése - - - - Delete the selected Bible - A kijelölt Biblia törlése - - - - Preview the selected Bible - A kijelölt Biblia előnézete - - - - Send the selected Bible live - A kijelölt Biblia élő adásba küldése - - - - Add the selected Bible to the service - A kijelölt Biblia hozzáadása a szolgálati sorrendhez - - - + Bible name singular Biblia - + Bibles name plural Bibliák - + Bibles container title Bibliák - + No Book Found Nincs ilyen könyv - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - A kért könyv nem található ebben a Bibliában. Kérlek, ellenőrizd a könyv nevének helyesírását. + A kért könyv nem található ebben a bibliában. Kérlek, ellenőrizd a könyv nevének helyesírását. + + + + Import a Bible. + Biblia importálása. + + + + Add a new Bible. + Biblia hozzáadása. + + + + Edit the selected Bible. + A kijelölt biblia szerkesztése. + + + + Delete the selected Bible. + A kijelölt biblia törlése. + + + + Preview the selected Bible. + A kijelölt biblia előnézete. + + + + Send the selected Bible live. + A kijelölt biblia élő adásba küldése. + + + + Add the selected Bible to the service. + A kijelölt biblia hozzáadása a szolgálati sorrendhez. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Biblia bővítmény</strong><br />A biblia bővítmény különféle forrásokból származó igehelyek vetítését teszi lehetővé a szolgálat alatt. BiblesPlugin.BibleManager - + Scripture Reference Error Igehely hivatkozási hiba - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -319,75 +332,50 @@ Könyv fejezet:Vers-Vers,Fejezet:Vers-Vers Könyv fejezet:Vers-Fejezet:Vers - + Web Bible cannot be used - Online Biblia nem használható + Online biblia nem használható - + Text Search is not available with Web Bibles. - A keresés nem érhető el online Biblián. + A keresés nem érhető el online biblián. - + 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. Nincs megadva keresési kifejezés. Több kifejezés is megadható. Szóközzel történő elválasztás esetén minden egyes kifejezésre történik a keresés, míg vesszővel való elválasztás esetén csak az egyikre. - + No Bibles Available - Nincsenek elérhető Bibliák + Nincsenek elérhető bibliák - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - Jelenleg nincs telepített Biblia. Kérlek, használd a Bibliaimportáló tündért Bibliák telepítéséhez. + Jelenleg nincs telepített biblia. Kérlek, használd a bibliaimportáló tündért bibliák telepítéséhez. BiblesPlugin.BiblesTab - + Verse Display Vers megjelenítés - + Only show new chapter numbers Csak az új fejezetszámok megjelenítése - - - Layout style: - Elrendezési stílus: - - - - Display style: - Megjelenítési stílus: - Bible theme: Biblia téma: - - - Verse Per Slide - Egy vers diánként - - - - Verse Per Line - Egy vers soronként - - - - Continuous - Folytonos - No Brackets @@ -421,257 +409,333 @@ A módosítások nem érintik a már a szolgálati sorrendben lévő verseket.Kettőzött bibliaversek megjelenítése + + BiblesPlugin.BookNameDialog + + + Select Book Name + Válaszd ki a könyv nevét + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + A következő könyvnév nem ismerhető fel. Válassz egy helyes angol nevet a következő listából. + + + + Current name: + Jelenlegi név: + + + + Corresponding name: + Megfelelő név: + + + + Show Books From + Könyvek megjelenítése + + + + Old Testament + Ószövetség + + + + New Testament + Újszövetség + + + + Apocrypha + Apokrif + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Ki kell jelölni egy könyvet. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Biblia regisztrálása és a könyvek letöltése… + + + + Registering Language... + Nyelv regisztrálása… + + + + Importing %s... + Importing <book name>... + Importálás: %s… + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibliaimportáló tündér - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - A tündérrel különféle formátumú Bibliákat lehet importálni. Az alább található Tovább gombra való kattintással indítható a folyamat első lépése a formátum kiválasztásával. + A tündér segít a különféle formátumú bibliák importálásában. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a formátum kiválasztásához. - + Web Download Web letöltés - + Location: Hely: - + Crosswalk - + BibleGateway - + Bible: Biblia: - + Download Options Letöltési beállítások - + Server: Szerver: - + Username: Felhasználói név: - + Password: Jelszó: - + Proxy Server (Optional) Proxy szerver (választható) - + License Details Licenc részletek - + Set up the Bible's license details. - Állítsd be a Biblia licenc részleteit. + Állítsd be a biblia licenc részleteit. - + Version name: Verzió neve: - + Copyright: Szerzői jog: - + Please wait while your Bible is imported. - Kérlek, várj, míg a Biblia importálás alatt áll. + Kérlek, várj, míg a biblia importálás alatt áll. - + You need to specify a file with books of the Bible to use in the import. Meg kell adni egy fájlt a bibliai könyvekről az importáláshoz. - + You need to specify a file of Bible verses to import. Meg kell adni egy fájlt a bibliai versekről az importáláshoz. - + You need to specify a version name for your Bible. - Meg kell adni a Biblia verziószámát. + Meg kell adni a biblia verziószámát. - + Bible Exists Biblia létezik - + Your Bible import failed. - A Biblia importálása nem sikerült. + A biblia importálása nem sikerült. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - Meg kell adni a Biblia szerzői jogait. A közkincs Bibliákat meg kell jelölni ilyennek. + Meg kell adni a biblia szerzői jogait. A közkincsű bibliákat meg kell jelölni ilyennek. - + This Bible already exists. Please import a different Bible or first delete the existing one. - Ez a Biblia már létezik. Kérlek, importálj egy másik Bibliát vagy előbb töröld a meglévőt. + Ez a biblia már létezik. Kérlek, importálj egy másik bibliát vagy előbb töröld a meglévőt. - - Starting Registering bible... - A Biblia regisztrálása elkezdődött… - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Biblia regisztrálva. Megjegyzés: a versek csak kérésre lesznek letöltve és ekkor internet kapcsolat szükségeltetik. - - - + Permissions: Engedélyek: - + CSV File CSV fájl - + Bibleserver - + Bible file: Biblia fájl: - - Testaments file: - Szövetség file: - - - + Books file: Könyv fájl: - + Verses file: Versek fájl: - - You have not specified a testaments file. Do you want to proceed with the import? - Szövetség fájl nincs megadva. Folytaható az importálás? + + openlp.org 1.x Bible Files + openlp.org 1.x biblia fájlok - - openlp.org 1.x Bible Files - openlp.org 1.x Biblia fájlok + + Registering Bible... + Biblia regisztrálása… + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Biblia regisztrálva. Megjegyzés: a versek csak kérésre lesznek letöltve és ekkor internet kapcsolat szükségeltetik. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Nyelvválasztás + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + Az OpenLP nem képes meghatározni ennek a bibliafordítás nyelvét. Válaszd ki az alábbi listából. + + + + Language: + Nyelv: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Meg kell adnod a nyelvet. BiblesPlugin.MediaItem - + Quick Gyors - + Find: Keresés: - - Results: - Eredmények: - - - + Book: Könyv: - + Chapter: Fejezet: - + Verse: Vers: - + From: Innentől: - + To: Idáig: - + Text Search Szöveg keresése - - Clear - Törlés - - - - Keep - Megtartása - - - + Second: Második: - + Scripture Reference Igehely hivatkozás + + + Toggle to keep or clear the previous results. + Átváltás az előző eredmény megőrzése, ill. törlése között. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importálás: %s %s… @@ -680,34 +744,267 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kódolás észlelése (ez eltarthat pár percig)… - + Importing %s %s... Importing <book name> <chapter>... Importálás: %s %s… + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Válassz egy mappát a biztonsági mentésnek + + + + Bible Upgrade Wizard + Bibliafrissítő tündér + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + A tündér segít az OpenLP 2 korábbi verzióiból származó bibliák frissítésében. Kattints az alábbi Következő gombra a folyamat indításhoz. + + + + Select Backup Directory + Biztonsági mentés mappája + + + + Please select a backup directory for your Bibles + Válassz egy mappát a Biliáid biztonsági mentésének + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Az OpenLP 2.0 előző verziói nem képesek a frissített bibliákat alkalmazni. Ez a tündér segít bitonsági mentést készíteni a jelenlegi bibliákról, így ha vissza kell térni az OpenLP egy régebbi verziójára, akkor ezeket csak be kell majd másolni az OpenLP adatmappájába. A helyreállítási tudnivalók a <a href="http://wiki.openlp.org/faq">Gyakran Ismételt Kérdések</a> között találhatók. + + + + Please select a backup location for your Bibles. + Válassz egy helyet a Biliáid biztonsági mentésének. + + + + Backup Directory: + Biztonsági mentés helye: + + + + There is no need to backup my Bibles + Nincs szükségem biztonsági másolatra + + + + Select Bibles + Bibliák kijelölése + + + + Please select the Bibles to upgrade + Jelöld ki a frissítendő bibliákat + + + + Version name: + Verzió neve: + + + + This Bible still exists. Please change the name or uncheck it. + A Bibia már létezik. Változtasd meg a nevét vagy ne jelöld be. + + + + Upgrading + Frissítés + + + + Please wait while your Bibles are upgraded. + Kérlek, várj, míg a biblia frissítés alatt áll. + + + + You need to specify a Backup Directory for your Bibles. + Meg kell adni a bibliáid biztonsági mentésének helyét. + + + + You need to specify a version name for your Bible. + Meg kell adni a biblia verziószámát. + + + + Bible Exists + Biblia létezik + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + A bibia már létezik. Kérlek, frissíts egy másik bibliát, töröld a már meglévőt vagy ne jelöld be. + + + + There are no Bibles available to upgrade. + Nincs frissíthető biblia. + + + + Upgrading Bible %s of %s: "%s" +Failed + Biblia frissítése: %s/%s: „%s” +Sikertelen + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Biblia frissítése: %s/%s: „%s” +Frissítés… + + + + Download Error + Letöltési hiba + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Biblia frissítése: %s/%s: „%s” +Frissítés: %s … + + + + , %s failed + , %s sikertelen + + + + Upgrading Bible(s): %s successful%s + Biblia frissítése: %s teljesítve %s + + + + Upgrade failed. + A frissítés nem sikerült. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + A bizontonsági mentés nem teljes. +A bibliák biztonsági mentéséhez írási jogosultság szükséges a megadott mappára. + + + + Starting Bible upgrade... + Bibliák frissítésének kezdése… + + + + To upgrade your Web Bibles an Internet connection is required. + A webes bibliák frissítéséshez internet kapcsolat szükséges. + + + + Upgrading Bible %s of %s: "%s" +Complete + Biblia frissítése: %s/%s: „%s” +Teljes + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Bibliák frissítése: %s teljesítve %s. +Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor is internet kapcsolat szükségeltetik. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Speciális bővítmény</strong><br />Az speciális bővítmény dalokhoz hasonló egyéni diák vetítését teszi lehetővé. Ugyanakkor több szabadságot enged meg, mint a dalok bővítmény. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Speciális dia bővítmény</strong><br />A speciális dia bővítmény dalokhoz hasonló egyéni diasor vetítését teszi lehetővé. Ugyanakkor több szabadságot enged meg, mint a dalok bővítmény. + + + + Custom Slide + name singular + Speciális dia + + + + Custom Slides + name plural + Speciális diák + + + + Custom Slides + container title + Speciális dia + + + + Load a new custom slide. + Új speciális dia betöltése. + + + + Import a custom slide. + Speciális dia importálása. + + + + Add a new custom slide. + Új speciális dia hozzáadása. + + + + Edit the selected custom slide. + A kijelölt speciális dia szerkesztése. + + + + Delete the selected custom slide. + A kijelölt speciális dia törlése. + + + + Preview the selected custom slide. + A kijelölt speciális dia előnézete. + + + + Send the selected custom slide live. + A kijelölt speciális dia élő adásba küldése. + + + + Add the selected custom slide to the service. + A kijelölt speciális dia hozzáadása a szolgálati sorrendhez. CustomPlugin.CustomTab - + Custom Display Speciális megjelenése - + Display footer Lábléc megjelenítése @@ -715,192 +1012,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - Speciális diák szerkesztése + Speciális diasor szerkesztése - + &Title: &Cím: - + Add a new slide at bottom. Új dia hozzáadása alulra. - + Edit the selected slide. Kijelölt dia szerkesztése. - + Edit all the slides at once. Minden kijelölt dia szerkesztése egyszerre. - - Split Slide - Szétválasztás - - - + Split a slide into two by inserting a slide splitter. Dia ketté vágása egy diaelválasztó beszúrásával. - + The&me: &Téma: - + &Credits: &Közreműködők: - + You need to type in a title. Meg kell adnod a címet. - + You need to add at least one slide Meg kell adnod legalább egy diát - + Ed&it All &Összes szerkesztése + + + Insert Slide + Dia beszúrása + - CustomsPlugin + GeneralTab - - Import a Custom - Speciális importálása - - - - Load a new Custom - Új speciális betöltése - - - - Add a new Custom - Új speciális hozzáadása - - - - Edit the selected Custom - A kijelölt speciális szerkesztése - - - - Delete the selected Custom - A kijelölt speciális törlése - - - - Preview the selected Custom - A kijelölt speciális előnézete - - - - Send the selected Custom live - A kijelölt speciális élő adásba küldése - - - - Add the selected Custom to the service - A kijelölt speciális hozzáadása a szolgálati sorrendhez - - - - Custom - name singular - Speciális - - - - Customs - name plural - Speciálisak - - - - Custom - container title - Speciális + + General + Általános ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - <strong>Kép bővítmény</strong><br />A kép a bővítmény különféle képek vetítését teszi lehetővé.<br />A bővítmény egyik különös figyelmet érdemlő képessége az, hogy képes a sorrendkezelőn csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A bővítmény képes az OpenLP „időzített körkörös” lejátszásra is, amivel a diákat automatikusan tudjuk léptetni. Továbbá, a bővítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett. + <strong>Kép bővítmény</strong><br />A kép a bővítmény különféle képek vetítését teszi lehetővé.<br />A bővítmény egyik különös figyelmet érdemlő képessége az, hogy képes a sorrendkezelőn csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A bővítmény képes az OpenLP „időzített körkörös” lejátszásra is, amivel a diasort automatikusan tudjuk léptetni. Továbbá, a bővítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett. - - Load a new Image - Új kép betöltése - - - - Add a new Image - Új kép hozzáadása - - - - Edit the selected Image - A kijelölt kép szerkesztése - - - - Delete the selected Image - A kijelölt kép törlése - - - - Preview the selected Image - A kijelölt kép előnézete - - - - Send the selected Image live - A kijelölt kép élő adásba küldése - - - - Add the selected Image to the service - A kijelölt kép hozzáadása a szolgálati sorrendhez - - - + Image name singular Kép - + Images name plural Képek - + Images container title Képek + + + Load a new image. + Új kép betöltése. + + + + Add a new image. + Új kép hozzáadása. + + + + Edit the selected image. + A kijelölt kép szerkesztése. + + + + Delete the selected image. + A kijelölt kép törlése. + + + + Preview the selected image. + A kijelölt kép előnézete. + + + + Send the selected image live. + A kijelölt kép élő adásba küldése. + + + + Add the selected image to the service. + A kijelölt kép hozzáadása a szolgálati sorrendhez. + ImagePlugin.ExceptionDialog - + Select Attachment Melléklet kijelölése @@ -908,39 +1152,39 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) Kép(ek) kijelölése - + You must select an image to delete. Ki kell választani egy képet a törléshez. - + You must select an image to replace the background with. Ki kell választani egy képet a háttér cseréjéhez. - + Missing Image(s) - + The following image(s) no longer exist: %s A következő kép(ek) nem létezik: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? A következő kép(ek) nem létezik: %s Szeretnél más képeket megadni? - + There was a problem replacing your background, the image file "%s" no longer exists. Probléma történt a háttér cseréje során, a(z) „%s” kép nem létezik. @@ -948,98 +1192,98 @@ Szeretnél más képeket megadni? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Média bővítmény</strong><br />A média bővítmény hangok és videók lejátszását teszi lehetővé. - - Load a new Media - Új médiafájl betöltése - - - - Add a new Media - Új médiafájl hozzáadása - - - - Edit the selected Media - A kijelölt médiafájl szerkesztése - - - - Delete the selected Media - A kijelölt médiafájl törlése - - - - Preview the selected Media - A kijelölt médiafájl előnézete - - - - Send the selected Media live - A kijelölt médiafájl élő adásba küldése - - - - Add the selected Media to the service - A kijelölt médiafájl hozzáadása a szolgálati sorrendhez - - - + Media name singular Média - + Media name plural Média - + Media container title Média + + + Load new media. + Új médiafájl betöltése. + + + + Add new media. + Új médiafájl hozzáadása. + + + + Edit the selected media. + A kijelölt médiafájl szerkesztése. + + + + Delete the selected media. + A kijelölt médiafájl törlése. + + + + Preview the selected media. + A kijelölt médiafájl előnézete. + + + + Send the selected media live. + A kijelölt médiafájl élő adásba küldése. + + + + Add the selected media to the service. + A kijelölt médiafájl hozzáadása a szolgálati sorrendhez. + MediaPlugin.MediaItem - + Select Media Médiafájl kijelölése - + You must select a media file to delete. Ki kell jelölni egy médiafájlt a törléshez. - + Videos (%s);;Audio (%s);;%s (*) Videók (%s);;Hang (%s);;%s (*) - + You must select a media file to replace the background with. Ki kell jelölni médiafájlt a háttér cseréjéhez. - + There was a problem replacing your background, the media file "%s" no longer exists. Probléma történt a háttér cseréje során, a(z) „%s” média fájl nem létezik. - + Missing Media File Hiányzó média fájl - + The file %s no longer exists. A(z) „%s” fájl nem létezik. @@ -1047,12 +1291,12 @@ Szeretnél más képeket megadni? MediaPlugin.MediaTab - + Media Display Média megjelenés - + Use Phonon for video playback A Phonon médiakezelő keretrendszer alkalmazása videók lejátszására @@ -1060,52 +1304,49 @@ Szeretnél más képeket megadni? OpenLP - + Image Files Kép fájlok + + + Information + Információ + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + A bibliák formátuma megváltozott, +ezért frissíteni kell a már meglévő bibliákat. +Frissítheti most az OpenLP? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version> <revision> – Nyílt forrású dalszöveg vetítő - -Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetítő szabad szoftver, mely használható énekek, bibliai versek, videók, képek és bemutatók (ha az OpenOffice.org, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére a gyülekezeti dicsőítés alatt egy számítógép és egy projektor segítségével. - -Többet az OpenLP-ről: http://openlp.org/ - -Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több keresztény számítógépes programot, fontold meg a projektben való részvételt az alábbi gombbal. - - - + Credits Közreműködők - + License Licenc - + Contribute Részvétel - + build %s - + Project Lead %s @@ -1221,210 +1462,336 @@ Végső köszönet „Úgy szerette Isten a világot, hogy egyszülött Fiát adta oda, hogy egyetlen benne hívő se vesszen el, hanem - örök élete legyen." ‒ János 3,16 + örök élete legyen.” (Jn 3,16) És végül, de nem utolsósorban, a végső köszönet Istené, Atyánké, mert elküldte a Fiát, hogy meghaljon a kereszten, megszabadítva bennünket a bűntől. Ezért - ezt a programot ingyen készítettük neked, mert Ő - tett minket szabaddá. + ezt a programot szabadnak és ingyenesnek készítettük, + mert Ő tett minket szabaddá. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Szerzői jog © 2004-2011 Raoul Snyman -Részleges szerzői jogok © 2004-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. - Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint -- 2. verzió --, melyet a Szabad Szoftver Alapítvány ad ki. - + Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki. - + 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 below for more details. - Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részletekért lásd a alább. - + Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részletekért lásd a alább. + + + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> – Nyílt forrású dalszöveg vetítő + +Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetítő szabad szoftver, mely használható énekek, bibliai versek, videók, képek és bemutatók (ha az Impress, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére a gyülekezeti dicsőítés alatt egy számítógép és egy projektor segítségével. + +Többet az OpenLP-ről: http://openlp.org/ + +Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több keresztény számítógépes programot, fontold meg a projektben való részvételt az alábbi gombbal. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Szerzői jog © 2004-2011 %s +Részleges szerzői jog © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings Felhasználói felület beállításai - + Number of recent files to display: Előzmények megjelenítésének hossza: - + Remember active media manager tab on startup Újraindításkor az aktív médiakezelő fülek visszaállítása - + Double-click to send items straight to live Dupla kattintással az elemek azonnali élő adásba küldése - + Expand new service items on creation A sorrendbe kerülő elemek kibontása létrehozáskor - + Enable application exit confirmation Kilépési megerősítés engedélyezése - + Mouse Cursor Egérmutató - + Hide mouse cursor when over display window Egérmutató elrejtése a vetítési képernyő felett - + Default Image Alapértelmezett kép - + Background color: Háttérszín: - + Image file: Kép fájl: - + Open File Fájl megnyitása + + + Preview items when clicked in Media Manager + Elem előnézete a médiakezelőben való kattintáskor + + + + Advanced + Haladó + + + + Click to select a color. + Kattintás a szín kijelöléséhez. + + + + Browse for an image file to display. + Tallózd be a megjelenítendő képfájlt. + + + + Revert to the default OpenLP logo. + Az eredeti OpenLP logó visszaállítása. + OpenLP.DisplayTagDialog - + Edit Selection Kijelölés szerkesztése - - Update - Frissítés - - - + Description Leírás - + Tag Címke - + Start tag - Kezdő címke + Nyitó címke - + End tag Záró címke - - Default - Alapértelmezett - - - + Tag Id - Címke ID + ID - + Start HTML - Kezdő HTML + Nyitó HTML - + End HTML Befejező HTML + + + Save + Mentés + OpenLP.DisplayTagTab - + Update Error Frissítési hiba - + Tag "n" already defined. Az „n” címke már létezik. - + Tag %s already defined. A címke már létezik: %s. + + + New Tag + Új címke + + + + </and here> + </és itt> + + + + <HTML here> + <HTML itt> + + + + OpenLP.DisplayTags + + + Red + Vörös + + + + Black + Fekete + + + + Blue + Kék + + + + Yellow + Sárga + + + + Green + Zöld + + + + Pink + Rózsaszín + + + + Orange + Narancs + + + + Purple + Lila + + + + White + Fehér + + + + Superscript + Felső index + + + + Subscript + Alsó index + + + + Paragraph + Bekezdés + + + + Bold + Félkövér + + + + Italics + Dőlt + + + + Underline + Aláhúzott + + + + Break + Sortörés + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alábbi dobozban található szöveg olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejlesztői számára, tehát kérjük, küld el bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen merre és mit tettél, amikor a hiba történt. + Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alsó szövegdoboz olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejlesztői számára, tehát kérjük, küld el a bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen hol és mit tettél, amikor a hiba történt. - + Error Occurred Hiba történt - + Send E-Mail E-mail küldése - + Save to File Mentés fájlba - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - Írd le mit tettél, ami a hibát okozta -(minimum 20 karakter) + Írd le mit tettél, ami a hibához vezetett (minimum 20 karakter) - + Attach File - Csatolt fájl + Fájl csatolása - + Description characters to enter : %s Leírás: %s @@ -1432,23 +1799,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report Összeomlási jelentés mentése - + Text files (*.txt *.log *.text) Szöveg fájlok (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1466,7 +1833,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1488,17 +1855,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename Fájl átnevezése - + New File Name: Új fájl neve: - + File Copy Fájl másolása @@ -1506,17 +1873,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation Fordítás kijelölése - + Choose the translation you'd like to use in OpenLP. Válassz egy fordítást, amit használni szeretnél az OpenLP-ben. - + Translation: Fordítás: @@ -1524,306 +1891,326 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... Letöltés %s… - + Download complete. Click the finish button to start OpenLP. Letöltés kész. Kattints a Befejezés gombra az OpenLP indításához. - + Enabling selected plugins... - Kijelölt beépülők engedélyezése… + Kijelölt bővítmények engedélyezése… - + First Time Wizard Első indítás tündér - + Welcome to the First Time Wizard Üdvözlet az első indítás tündérben - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - A tündérrel előkészítheti az OpenLP első használatát. Az alább található Tovább gombra való kattintással indítható a folyamat első lépése. - - - + Activate required Plugins - Szükséges beépülők aktiválása + Igényelt bővítmények aktiválása - + Select the Plugins you wish to use. - Jelöld ki az alkalmazni kívánt beépülőket. + Jelöld ki az alkalmazni kívánt bővítményeket. - + Songs Dalok - + Custom Text - Egyedi szöveg + Speciális - + Bible Biblia - + Images Képek - + Presentations Bemutatók - + Media (Audio and Video) Média (hang és videó) - + Allow remote access - Távvezérlés engedélyezése + Távirányító - + Monitor Song Usage - Dalstatisztika monitorozása + Dalstatisztika - + Allow Alerts - Értesítések engedélyezése + Értesítések - + No Internet Connection Nincs internet kapcsolat - + Unable to detect an Internet connection. Nem sikerült internet kapcsolatot észlelni. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - Nem sikerült internetkapcsolatot találni. Az Első indulás tündérnek internetkapcsolatra van szüksége ahhoz, hogy a példa dalokat, Bibliákat és témákat le tudja tölteni. + Nem sikerült internetkapcsolatot találni. Az Első indulás tündérnek internetkapcsolatra van szüksége ahhoz, hogy a példa dalokat, bibliákat és témákat le tudja tölteni. Az Első indulás tündér újbóli indításához most a Mégse gobra kattints először, ellenőrizd az internetkapcsolatot és indítsd újra az OpenLP-t. Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés gombot. - + Sample Songs Példa dalok - + Select and download public domain songs. Közkincs dalok kijelölése és letöltése. - + Sample Bibles - Példa Bibliák + Példa bibliák - + Select and download free Bibles. - Szabad Bibliák kijelölése és letöltése. + Szabad bibliák kijelölése és letöltése. - + Sample Themes Példa témák - + Select and download sample themes. Példa témák kijelölése és letöltése. - + Default Settings Alapértelmezett beállítások - + Set up default settings to be used by OpenLP. Az OpenLP alapértelmezett beállításai. - - Setting Up And Importing - Beállítás és importálás - - - - Please wait while OpenLP is set up and your data is imported. - Várj, amíg az OpenLP beállítások érvényre jutnak és míg at adatok importálódnak. - - - + Default output display: Alapértelmezett kimeneti képernyő: - + Select default theme: Alapértelmezett téma kijelölése: - + Starting configuration process... Beállítási folyamat kezdése… + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + A tündér segít elkezdeni az OpenLP használatát. Kattints az alábbi Következő gombra az indításhoz. + + + + Setting Up And Downloading + Beállítás és letöltés + + + + Please wait while OpenLP is set up and your data is downloaded. + Várj, amíg az OpenLP beállítások érvényre jutnak és míg az adatok letöltődnek. + + + + Setting Up + Beállítás + + + + Click the finish button to start OpenLP. + Kattints a Befejezés gombra az OpenLP indításához. + OpenLP.GeneralTab - + General Általános - + Monitors Monitorok - + Select monitor for output display: Jelöld ki a vetítési képernyőt: - + Display if a single screen Megjelenítés egy képernyő esetén - + Application Startup Alkalmazás indítása - + Show blank screen warning - Figyelmeztetés megjelenítése az üres képernyőről + Figyelmeztetés megjelenítése az elsötétített képernyőről - + Automatically open the last service Utolsó sorrend automatikus megnyitása - + Show the splash screen Indító képernyő megjelenítése - + Application Settings Alkalmazás beállítások - + Prompt to save before starting a new service Rákérdezés mentésre új sorrend létrehozása előtt - + Automatically preview next item in service Következő elem automatikus előnézete a sorrendben - Slide loop delay: - Időzített diák késleltetése: - - - sec mp - + CCLI Details CCLI részletek - + SongSelect username: SongSelect felhasználói név: - + SongSelect password: SongSelect jelszó: - + Display Position Megjelenítés pozíciója - + X - + Y - + Height Magasság - + Width Szélesség - + Override display position Megjelenítési pozíció felülírása - + Check for updates to OpenLP Frissítés keresése az OpenLP-hez + + + Unblank display when adding new live item + Képernyő elsötétítésének visszavonása új elem élő adásba küldésekor + + + + Enable slide wrap-around + Körbefutó diák engedélyezése + + + + Timed slide interval: + Időzített dia intervalluma: + OpenLP.LanguageManager - + Language Nyelv - + Please restart OpenLP to use your new language setting. A nyelvi beállítások az OpenLP újraindítása után lépnek érvénybe. @@ -1831,7 +2218,7 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go OpenLP.MainDisplay - + OpenLP Display OpenLP megjelenítés @@ -1839,190 +2226,155 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go OpenLP.MainWindow - + &File &Fájl - + &Import &Importálás - + &Export &Exportálás - + &View &Nézet - + M&ode &Mód - + &Tools &Eszközök - + &Settings &Beállítások - + &Language &Nyelv - + &Help &Súgó - + Media Manager Médiakezelő - + Service Manager Sorrendkezelő - + Theme Manager Témakezelő - + &New &Új - - Ctrl+N - - - - + &Open Meg&nyitás - + Open an existing service. Meglévő sorrend megnyitása. - - Ctrl+O - - - - + &Save &Mentés - + Save the current service to disk. Aktuális sorrend mentése lemezre. - - Ctrl+S - - - - + Save &As... Mentés má&sként… - + Save Service As Sorrend mentése másként - + Save the current service under a new name. Az aktuális sorrend más néven való mentése. - - Ctrl+Shift+S - - - - + E&xit &Kilépés - + Quit OpenLP OpenLP bezárása - - Alt+F4 - - - - + &Theme &Téma - + &Configure OpenLP... OpenLP &beállítása… - + &Media Manager &Médiakezelő - + Toggle Media Manager Médiakezelő átváltása - + Toggle the visibility of the media manager. A médiakezelő láthatóságának átváltása. - - F8 - - - - + &Theme Manager &Témakezelő - + Toggle Theme Manager Témakezelő átváltása - + Toggle the visibility of the theme manager. A témakezelő láthatóságának átváltása. - - - F10 - - &Service Manager @@ -2040,146 +2392,121 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go - F9 - - - - &Preview Panel &Előnézet panel - + Toggle Preview Panel Előnézet panel átváltása - + Toggle the visibility of the preview panel. Az előnézet panel láthatóságának átváltása. - - F11 - - - - + &Live Panel &Élő adás panel - + Toggle Live Panel Élő adás panel átváltása - + Toggle the visibility of the live panel. Az élő adás panel láthatóságának átváltása. - - F12 - - - - + &Plugin List &Bővítménylista - + List the Plugins Bővítmények listája - - Alt+F7 - - - - + &User Guide &Felhasználói kézikönyv - + &About &Névjegy - + More information about OpenLP További információ az OpenLP-ről - - Ctrl+F1 - - - - + &Online Help &Online súgó - + &Web Site &Weboldal - + Use the system language, if available. Rendszernyelv használata, ha elérhető. - + Set the interface language to %s A felhasználói felület nyelvének átváltása erre: %s - + Add &Tool... &Eszköz hozzáadása… - + Add an application to the list of tools. Egy alkalmazás hozzáadása az eszközök listához. - + &Default &Alapértelmezett - + Set the view mode back to the default. Nézetmód visszaállítása az alapértelmezettre. - + &Setup &Szerkesztés - + Set the view mode to Setup. Nézetmód váltása a Beállítás módra. - + &Live &Élő adás - + Set the view mode to Live. Nézetmód váltása a Élő módra. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2188,81 +2515,86 @@ You can download the latest version from http://openlp.org/. A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. - + OpenLP Version Updated OpenLP verziófrissítés - + OpenLP Main Display Blanked - Sötét OpenLP fő képernyő + Elsötétített OpenLP fő képernyő - + The Main Display has been blanked out A fő képernyő el lett sötétítve - + Default Theme: %s Alapértelmezett téma: %s - + Configure &Shortcuts... &Gyorsbillentyűk beállítása… - + English Please add the name of your language here Magyar - - Print the current Service Order. - Az aktuális sorrend nyomtatása. - - - - Ctrl+P - - - - + &Configure Display Tags - Megjelenítési &címkek beállítása + Megjelenítési &címkék beállítása - + &Autodetect &Automatikus felismerés - + Open &Data Folder... &Adatmappa megnyitása… - + Open the folder where songs, bibles and other data resides. - A dalokat, Bibliákat és egyéb adatokat tartalmazó mappa megnyitása. + A dalokat, bibliákat és egyéb adatokat tartalmazó mappa megnyitása. - + Close OpenLP OpenLP bezárása - + Are you sure you want to close OpenLP? Biztosan bezárható az OpenLP? + + + Update Theme Images + Témaképek frissítése + + + + Update the preview images for all themes. + Összes téma előnézeti képének frissítése. + + + + Print the current service. + Az aktuális sorrend nyomtatása. + OpenLP.MediaManagerItem - + No Items Selected Nincs kijelölt elem @@ -2272,75 +2604,92 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.&Hozzáadás a kijelölt sorrend elemhez - + You must select one or more items to preview. Ki kell jelölni egy elemet az előnézethez. - + You must select one or more items to send live. Ki kell jelölni egy élő adásba küldendő elemet. - + You must select one or more items. Ki kell jelölni egy vagy több elemet. - + You must select an existing service item to add to. Ki kell jelölni egy sorrend elemet, amihez hozzá szeretné adni. - + Invalid Service Item Érvénytelen sorrend elem - + You must select a %s service item. Ki kell jelölni egy %s sorrend elemet. + + + You must select one or more items to add. + Ki kell jelölni egy vagy több elemet a hozzáadáshoz. + + + + No Search Results + Nincs találat + + + + Duplicate filename %s. +This filename is already in the list + Duplikátum fájlnév: %s. +A fájlnév már benn van a listában + OpenLP.PluginForm - + Plugin List Bővítménylista - + Plugin Details Bővítmény részletei - + Status: Állapot: - + Active Aktív - + Inactive Inaktív - + %s (Inactive) %s (inaktív) - + %s (Active) %s (aktív) - + %s (Disabled) %s (letiltott) @@ -2348,12 +2697,12 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. OpenLP.PrintServiceDialog - + Fit Page Oldal kitöltése - + Fit Width Szélesség kitöltése @@ -2361,7 +2710,7 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. OpenLP.PrintServiceForm - + Options Beállítások @@ -2381,55 +2730,60 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.Másolás HTML-ként - + Zoom In Nagyítás - + Zoom Out Kicsinyítés - + Zoom Original Eredeti nagyítás - + Other Options További beállítások - + Include slide text if available Dia szövegének beillesztése, ha elérhető - + Include service item notes Sorrend elem megjegyzéseinek beillesztése - + Include play length of media items Sorrend elem lejátszási hosszának beillesztése - - Service Order Sheet - Szolgálati sorrend adatlap + + Add page break before each text item + Oldaltörés hozzádása minden szöveges elem elé + + + + Service Sheet + Szolgálati adatlap OpenLP.ScreenList - + Screen Képernyő - + primary elsődleges @@ -2437,7 +2791,7 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. OpenLP.ServiceItemEditForm - + Reorder Service Item Sorrend elemek újrarendezése @@ -2445,217 +2799,257 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. OpenLP.ServiceManager - - Load an existing service - Egy meglévő szolgálati sorrend betöltése - - - - Save this service - Aktuális szolgálati sorrend mentése - - - - Select a theme for the service - Jelöljön ki egy témát a sorrendhez - - - + Move to &top Mozgatás &felülre - + Move item to the top of the service. Elem mozgatása a sorrend elejére. - + Move &up Mozgatás f&eljebb - + Move item up one position in the service. Elem mozgatása a sorrendben eggyel feljebb. - + Move &down Mozgatás &lejjebb - + Move item down one position in the service. Elem mozgatása a sorrendben eggyel lejjebb. - + Move to &bottom Mozgatás &alulra - + Move item to the end of the service. Elem mozgatása a sorrend végére. - + &Delete From Service &Törlés a sorrendből - + Delete the selected item from the service. Kijelölt elem törlése a sorrendből. - + &Add New Item Új elem &hozzáadása - + &Add to Selected Item &Hozzáadás a kijelölt elemhez - + &Edit Item &Elem szerkesztése - + &Reorder Item Elem újra&rendezése - + &Notes &Jegyzetek - + &Change Item Theme Elem témájának &módosítása - + OpenLP Service Files (*.osz) OpenLP sorrend fájlok (*.osz) - + File is not a valid service. The content encoding is not UTF-8. A fájl nem érvényes sorrend. A tartalom kódolása nem UTF-8. - + File is not a valid service. A fájl nem érvényes sorrend. - + Missing Display Handler Hiányzó képernyő kezelő - + Your item cannot be displayed as there is no handler to display it Az elemet nem lehet megjeleníteni, mert nincs kezelő, amely megjelenítené - + Your item cannot be displayed as the plugin required to display it is missing or inactive Az elemet nem lehet megjeleníteni, mert a bővítmény, amely kezelné, hiányzik vagy inaktív - + &Expand all Mind &kibontása - + Expand all the service items. Minden sorrend elem kibontása. - + &Collapse all Mind össze&csukása - + Collapse all the service items. Minden sorrend elem összecsukása. - - Notes: - Jegyzetek: - - - + Moves the selection down the window. A kiválasztás lejjebb mozgatja az ablakot. - + Move up Mozgatás feljebb - + Moves the selection up the window. A kiválasztás feljebb mozgatja az ablakot. - + Go Live Élő adásba - + Send the selected item to Live. A kiválasztott elem élő adásba küldése. - + &Start Time &Kezdő időpont - + Show &Preview &Előnézet megjelenítése - + Show &Live Élő &adás megjelenítése - + Open File Fájl megnyitása - + Modified Service Módosított sorrend - + The current service has been modified. Would you like to save this service? Az aktuális sorrend módosult. Szeretnéd elmenteni? + + + File could not be opened because it is corrupt. + A fájl nem nyitható meg, mivel sérült. + + + + Empty File + Üres fájl + + + + This service file does not contain any data. + A szolgálati sorrend fájl nem tartalmaz semmilyen adatot. + + + + Corrupt File + Sérült fájl + + + + Custom Service Notes: + Egyedi szolgálati elem jegyzetek: + + + + Notes: + Jegyzetek: + + + + Playing time: + Lejátszási idő: + + + + Untitled Service + Névnélküli szolgálat + + + + Load an existing service. + Egy meglévő szolgálati sorrend betöltése. + + + + Save this service. + Sorrend mentése. + + + + Select a theme for the service. + Jelöljön ki egy témát a sorrendhez. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + A fájl vagy sérült vagy nem egy OpenLP 2.0 szolgálati sorrend fájl. + OpenLP.ServiceNoteForm - + Service Item Notes Sorrend elem jegyzetek @@ -2663,7 +3057,7 @@ A tartalom kódolása nem UTF-8. OpenLP.SettingsForm - + Configure OpenLP OpenLP beállítása @@ -2671,221 +3065,276 @@ A tartalom kódolása nem UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts Egyedi gyorsbillentyűk - + Action Parancs - + Shortcut Gyorsbillentyű - - Default: %s - Alapértelmezett: %s - - - - Custom: - Egyedi: - - - - None - Nincs - - - + Duplicate Shortcut Azonos gyorsbillentyű - + The shortcut "%s" is already assigned to another action, please use a different shortcut. A „%s” gyorsbillentyű már foglalt. - + Alternate Alternatív + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Válassz egy parancsot és kattints egyenként az egyik alul található gombra az elsődleges vagy alternatív gyorbillenytű elfogásához. + + + + Default + Alapértelmezett + + + + Custom + Egyéni + + + + Capture shortcut. + Gyorbillentyű elfogása. + + + + Restore the default shortcut of this action. + Az eredeti gyorsbillentyű visszaállítása. + + + + Restore Default Shortcuts + Alapértelmezett gyorsbillentyűk visszaállítása + + + + Do you want to restore all shortcuts to their defaults? + Valóban minden gyorsbillenytű visszaállítandó az alapértelmezettjére? + OpenLP.SlideController - - Move to previous - Mozgatás az előzőre - - - - Move to next - Mozgatás a következőre - - - + Hide Elrejtés - - Move to live - Élő adásba küldés - - - - Start continuous loop - Folyamatos vetítés indítása - - - - Stop continuous loop - Folyamatos vetítés leállítása - - - - Delay between slides in seconds - Diák közötti késleltetés másodpercben - - - - Start playing media - Médialejátszás indítása - - - + Go To Ugrás - - Edit and reload song preview - Szerkesztés és az dal előnézetének újraolvasása - - - + Blank Screen - Üres képernyő + Képernyő elsötétítése - + Blank to Theme - Üres téma + Elsötétítés a témára - + Show Desktop Asztal megjelenítése - + Previous Slide Előző dia - + Next Slide Következő dia - + Previous Service Előző sorrend - + Next Service Következő sorrend - + Escape Item Kilépés az elemből + + + Move to previous. + Mozgatás az előzőre. + + + + Move to next. + Mozgatás a következőre. + + + + Play Slides + Diák vetítése + + + + Play Slides in Loop + Diák ismétlődő vetítése + + + + Play Slides to End + Diak vetítése végig + + + + Delay between slides in seconds. + Diák közötti késleltetés másodpercben. + + + + Move to live. + Élő adásba küldés. + + + + Add to Service. + Hozzáadás a sorrendhez. + + + + Edit and reload song preview. + Szerkesztés és az dal előnézetének újraolvasása. + + + + Start playing media. + Médialejátszás indítása. + OpenLP.SpellTextEdit - + Spelling Suggestions Helyesírási javaslatok - + Formatting Tags Formázó címkék + + + Language: + Nyelv: + OpenLP.StartTimeForm - - Item Start Time - Elem kezdő időpontja - - - + Hours: Óra: - - h - ó - - - - m - p - - - + Minutes: Perc: - + Seconds: Másodperc: + + + Item Start and Finish Time + Elem kezdő és befejező idő + + + + Start + Kezdés + + + + Finish + Befejezés + + + + Length + Hosszúság + + + + Time Validation Error + Idő érvényességi hiba + + + + Finish time is set after the end of the media item + A médiaelem befejező időpontja későbbre van állítva van, mint a hossza + + + + Start time is after the finish time of the media item + A médiaelem kezdő időpontja későbbre van állítva, mint a befejezése + OpenLP.ThemeForm - + Select Image Kép kijelölése - + Theme Name Missing Téma neve nincs megadva - + There is no name for this theme. Please enter one. A témának nincs neve, meg kell adni. - + Theme Name Invalid Érvénytelen téma név - + Invalid theme name. Please enter one. A téma neve érvénytelen, érvényeset kell megadni. - - (%d lines per slide) - (%d sor diánként) + + (approximately %d lines per slide) + (körülbelül %d sor diánként) @@ -2951,79 +3400,79 @@ A tartalom kódolása nem UTF-8. Beállítás &globális alapértelmezetté - + %s (default) %s (alapértelmezett) - + You must select a theme to edit. Ki kell jelölni egy témát a szerkesztéshez. - + You must select a theme to delete. Ki kell jelölni egy témát a törléshez. - + Delete Confirmation Törlés megerősítése - + You are unable to delete the default theme. Az alapértelmezett témát nem lehet törölni. - + You have not selected a theme. Nincs kijelölve egy téma sem. - + Save Theme - (%s) Téma mentése – (%s) - + Theme Exported Téma exportálva - + Your theme has been successfully exported. A téma sikeresen exportálásra került. - + Theme Export Failed A téma exportálása nem sikerült - + Your theme could not be exported due to an error. A témát nem sikerült exportálni egy hiba miatt. - + Select Theme Import File Importálandó téma fájl kijelölése - + File is not a valid theme. The content encoding is not UTF-8. Nem érvényes témafájl. A tartalom kódolása nem UTF-8. - + File is not a valid theme. Nem érvényes témafájl. - + Theme %s is used in the %s plugin. A(z) %s témát a(z) %s bővítmény használja. @@ -3043,37 +3492,37 @@ A tartalom kódolása nem UTF-8. Téma e&xportálása - + Delete %s theme? Törölhető ez a téma: %s? - + You must select a theme to rename. Ki kell jelölni egy témát az átnevezéséhez. - + Rename Confirmation Átnevezési megerősítés - + Rename %s theme? A téma átnevezhető: %s? - + OpenLP Themes (*.theme *.otz) OpenLP témák (*.theme *.otz) - + Validation Error Érvényességi hiba - + A theme with this name already exists. Ilyen fájlnéven már létezik egy téma. @@ -3081,242 +3530,242 @@ A tartalom kódolása nem UTF-8. OpenLP.ThemeWizard - + Theme Wizard Téma tündér - + Welcome to the Theme Wizard Üdvözlet a téma tündérben - + Set Up Background Háttér beállítása - + Set up your theme's background according to the parameters below. A téma háttere az alábbi paraméterekkel állítható be. - + Background type: Háttér típusa: - + Solid Color Homogén szín - + Gradient Színátmenet - + Color: Szín: - + Gradient: Színátmenet: - + Horizontal Vízszintes - + Vertical Függőleges - + Circular Körkörös - + Top Left - Bottom Right Bal felső sarokból jobb alsó sarokba - + Bottom Left - Top Right Bal alsó sarokból jobb felső sarokba - + Main Area Font Details Fő tartalom betűkészlet jellemzői - + Define the font and display characteristics for the Display text - A fő szöveg betűkészlete és a megjelenési tulajdonságai + A fő szöveg betűkészlete és megjelenési tulajdonságai - + Font: Betűkészlet: - + Size: Méret: - + Line Spacing: Sorköz: - + &Outline: &Körvonal: - + &Shadow: &Árnyék: - + Bold Félkövér - + Italic Dőlt - + Footer Area Font Details Lábléc betűkészlet jellemzői - + Define the font and display characteristics for the Footer text - A lábléc szöveg betűkészlete és a megjelenési tulajdonságai + A lábléc szöveg betűkészlete és megjelenési tulajdonságai - + Text Formatting Details Szövegformázás jellemzői - + Allows additional display formatting information to be defined További megjelenési formázások - + Horizontal Align: Vízszintes igazítás: - + Left Balra zárt - + Right Jobbra zárt - + Center Középre igazított - + Output Area Locations Pozíciók - + Allows you to change and move the main and footer areas. A fő szöveg és a lábléc helyzetének mozgatása. - + &Main Area &Fő szöveg - + &Use default location &Alapértelmezett helyen - + X position: X pozíció: - + px - + Y position: Y pozíció: - + Width: Szélesség: - + Height: Magasság: - + Use default location Alapértelmezett helyen - + Save and Preview Mentés és előnézet - + View the theme and save it replacing the current one or change the name to create a new theme - 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 + A téma előnézete és mentése: egy már meglévő téma felülírható vagy egy új név megadásával új téma hozható létre - + Theme name: Téma neve: - + Edit Theme - %s Téma szerkesztése – %s - + 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. - 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. + A tündér segít témákat létrehozni és módosítani. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a háttér beállításához. - + Transitions: Átmenetek: - + &Footer Area &Lábléc @@ -3324,42 +3773,42 @@ A tartalom kódolása nem UTF-8. OpenLP.ThemesTab - + Global Theme Globális téma - + Theme Level Téma szint - + S&ong Level Dal &szint - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Minden dalra az adatbázisban tárolt téma alkalmazása. Ha egy dalhoz nincs saját téma beállítva, akkor a szolgálati sorrendhez beállított alkalmazása. Ha a sorrendhez sincs téma beállítva, akkor a globális téma alkalmazása. - + &Service Level Szolgálati sorrend &szint - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. A szolgálati sorrendhez beállított téma alkalmazása, vagyis az egyes dalokhoz megadott témák felülírása. Ha a szolgálati sorrendhez nincs téma beállítva, akkor a globális téma alkalmazása. - + &Global Level &Globális szint - + Use the global theme, overriding any themes associated with either the service or the songs. A globális téma alkalmazása, vagyis a szolgálati sorrendhez, ill. a dalokhoz beállított témák felülírása. @@ -3367,421 +3816,528 @@ A tartalom kódolása nem UTF-8. OpenLP.Ui - + About Névjegy - + &Add &Hozzáadás - + Advanced Haladó - + All Files Minden fájl - + Bottom Alulra - + Browse... Tallózás… - + Cancel Mégsem - + CCLI number: CCLI szám: - + Create a new service. Új szolgálati sorrend létrehozása. - + &Delete &Törlés - + &Edit &Szerkesztés - + Empty Field Üres mező - + Error Hiba - + Export Exportálás - + pt Abbreviated font pointsize unit - + Image Kép - + Import Importálás - + Length %s Hossz %s - + Live Élő adás - + Live Background Error Élő háttér hiba - - Live Panel - Élő panel - - - + Load Betöltés - + Middle Középre - + New Új - + New Service Új sorrend - + New Theme Új téma - + No File Selected Singular Nincs kijelölt fájl - + No Files Selected Plural Nincsenek kijelölt fájlok - + No Item Selected Singular Nincs kijelölt elem - + No Items Selected Plural Nincsenek kijelölt elemek - + openlp.org 1.x - + OpenLP 2.0 - - Open Service - Sorrend megnyitása - - - + Preview Előnézet - - Preview Panel - Előnézet panel - - - - Print Service Order - Szolgálati sorrend nyomtatása - - - + Replace Background Háttér cseréje - - Replace Live Background - Élő adás hátterének cseréje - - - + Reset Background Háttér visszaállítása - - Reset Live Background - Élő adás hátterének visszaállítása - - - + s The abbreviated unit for seconds mp - + Save && Preview Mentés és előnézet - + Search Keresés - + You must select an item to delete. Ki kell jelölni egy törlendő elemet. - + You must select an item to edit. Ki kell jelölni egy szerkesztendő elemet. - + Save Service Sorrend mentése - + Service Sorrend - + Start %s Kezdés %s - + Theme Singular Téma - + Themes Plural Témák - + Top Felülre - + Version Verzió - + Delete the selected item. Kiválasztott elem törlése. - + Move selection up one position. Kiválasztás eggyel feljebb helyezése. - + Move selection down one position. Kiválasztás eggyel lejjebb helyezése. - + &Vertical Align: &Függőleges igazítás: - + Finished import. Az importálás befejeződött. - + Format: Formátum: - + Importing Importálás - + Importing "%s"... Importálás „%s”… - + Select Import Source Jelölj ki az importálandó forrást - + Select the import format and the location to import from. Jelöld ki az importálás formátumát és az importálás helyét. - + The openlp.org 1.x 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. Az openlp.org 1.x importáló le lett tiltva egy hiányzó Python modul miatt. Ha szeretnéd használni ezt az importálót, telepíteni kell a „python-sqlite” modult. - + Open %s File % fájl megnyitása - + %p% - + Ready. Kész. - + Starting import... Importálás indítása… - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Ki kell választani legalább egy %s fájlt az importáláshoz. - + Welcome to the Bible Import Wizard - Üdvözlet a Bibliaimportáló tündérben + Üdvözlet a bibliaimportáló tündérben - + Welcome to the Song Export Wizard Üdvözlet a dalexportáló tündérben - + Welcome to the Song Import Wizard Üdvözlet a dalimportáló tündérben - + Author Singular Szerző - + Authors Plural Szerzők - + © Copyright symbol. - + Song Book Singular Énekeskönyv - + Song Books Plural Énekeskönyvek - + Song Maintenance Dalok kezelése - + Topic Singular Témakör - + Topics Plural Témakörök + + + Continuous + Folytonos + + + + Default + Alapértelmezett + + + + Display style: + Megjelenítési stílus: + + + + File + Fájl + + + + Help + Súgó + + + + h + The abbreviated unit for hours + ó + + + + Layout style: + Elrendezési stílus: + + + + Live Toolbar + Élő eszköztár + + + + m + The abbreviated unit for minutes + p + + + + OpenLP is already running. Do you wish to continue? + Az OpenLP mér fut. Folytatható? + + + + Settings + Beállítások + + + + Tools + Eszközök + + + + Verse Per Slide + Egy vers diánként + + + + Verse Per Line + Egy vers soronként + + + + View + Nézet + + + + Duplicate Error + Duplikátum hiba + + + + Unsupported File + Nem támogatott fájl + + + + Title and/or verses not found + A cím és/vagy a versszak nem található + + + + XML syntax error + XML szintaktikai hiba + + + + View Mode + Nézetmód + + + + Welcome to the Bible Upgrade Wizard + Üdvözlet a bibliafrissítő tündérben + + + + Open service. + Sorrend megnyitása. + + + + Print Service + Szolgálati sorrend nyomtatása + + + + Replace live background. + Élő adás hátterének cseréje. + + + + Reset live background. + Élő adás hátterének visszaállítása. + + + + &Split + &Szétválasztás + + + + Split a slide into two only if it does not fit on the screen as one slide. + Diák kettéválasztása csak akkor, ha nem fér ki a képernyőn egy diaként. + OpenLP.displayTagDialog - + Configure Display Tags Megjelenítési címkék beállítása @@ -3793,31 +4349,6 @@ A tartalom kódolása nem UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Bemutató bővítmény</strong><br />A bemutató bővítmény különböző külső programok segítségével bemutatók megjelenítését teszi lehetővé. A prezentációs programok egy listából választhatók ki. - - - Load a new Presentation - Új bemutató betöltése - - - - Delete the selected Presentation - A kijelölt bemutató törlése - - - - Preview the selected Presentation - A kijelölt bemutató előnézete - - - - Send the selected Presentation live - A kijelölt bemutató élő adásba küldése - - - - Add the selected Presentation to the service - A kijelölt bemutató hozzáadása a sorrendhez - Presentation @@ -3836,61 +4367,81 @@ A tartalom kódolása nem UTF-8. container title Bemutatók + + + Load a new presentation. + Új bemutató betöltése. + + + + Delete the selected presentation. + A kijelölt bemutató törlése. + + + + Preview the selected presentation. + A kijelölt bemutató előnézete. + + + + Send the selected presentation live. + A kijelölt bemutató élő adásba küldése. + + + + Add the selected presentation to the service. + A kijelölt bemutató hozzáadása a sorrendhez. + PresentationPlugin.MediaItem - + Select Presentation(s) Bemutató(k) kijelölése - + Automatic Automatikus - + Present using: Bemutató ezzel: - + File Exists A fájl létezik - + A presentation with that filename already exists. Ilyen fájlnéven már létezik egy bemutató. - - Unsupported File - Nem támogatott fájl - - - + This type of presentation is not supported. Ez a bemutató típus nem támogatott. - + Presentations (%s) Bemutatók (%s) - + Missing Presentation Hiányzó bemutató - + The Presentation %s is incomplete, please reload. A(z) %s bemutató hiányos, újra kell tölteni. - + The Presentation %s no longer exists. A(z) %s bemutató már nem létezik. @@ -3898,17 +4449,17 @@ A tartalom kódolása nem UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Elérhető vezérlők - + Allow presentation application to be overriden A bemutató program felülírásának engedélyezése - + %s (unavailable) %s (elérhetetlen) @@ -3916,71 +4467,174 @@ A tartalom kódolása nem UTF-8. RemotePlugin - + <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. - <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. - - - - Remote - name singular - Távvezérlő + <strong>Távirányító bővítmény</strong><br />A távirányító 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. - Remotes - name plural - Távvezérlők + Remote + name singular + Távirányító - + + Remotes + name plural + Távirányítók + + + Remote container title - Távvezérlő + Távirányító + + + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 távirányító + + + + OpenLP 2.0 Stage View + OpenLP 2.0 színpadi nézet + + + + Service Manager + Sorrendkezelő + + + + Slide Controller + Diakezelő + + + + Alerts + Értesítések + + + + Search + Keresés + + + + Back + Vissza + + + + Refresh + Frissítés + + + + Blank + Elsötétítés + + + + Show + Vetítés + + + + Prev + Előző + + + + Next + Következő + + + + Text + Szöveg + + + + Show Alert + Értesítés megjelenítése + + + + Go Live + Élő adásba + + + + Add To Service + Hozzáadás a sorrendhez + + + + No Results + Nincs találat + + + + Options + Beállítások RemotePlugin.RemoteTab - + Serve on IP address: Szolgáltatás IP címe: - + Port number: Port száma: - + Server Settings Szerver beállítások + + + Remote URL: + Távirányító URL: + + + + Stage view URL: + Színpadi nézet URL: + SongUsagePlugin - + &Song Usage Tracking &Dalstatisztika rögzítése - + &Delete Tracking Data Rögzített adatok &törlése - + Delete song usage data up to a specified date. Dalstatisztika adatok törlése egy meghatározott dátumig. - + &Extract Tracking Data Rögzített adatok &kicsomagolása - + Generate a report on song usage. Dalstatisztika jelentés összeállítása. @@ -3995,53 +4649,58 @@ A tartalom kódolása nem UTF-8. Dalstatisztika rögzítésének átváltása. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Dalstatisztika bővítmény</strong><br />Ez a bővítmény rögzíti, hogy a dalok mikor lettek vetítve egy élő szolgálat vagy istentisztelet során. - + SongUsage name singular Dalstatisztika - + SongUsage name plural Dalstatisztika - + SongUsage container title Dalstatisztika + + + Song Usage + Dalstatisztika + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Dalstatisztika adatok törlése - + Delete Selected Song Usage Events? Valóban törölhetők a kijelölt dalstatisztika események? - + Are you sure you want to delete selected Song Usage data? Valóban törölhetők a kijelölt dalstatisztika adatok? - + Deletion Successful Sikeres törlés - + All requested data has been deleted successfully. Minden kért adat sikeresen törlésre került. @@ -4049,52 +4708,52 @@ A tartalom kódolása nem UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Dalstatisztika kicsomagolása - + Select Date Range Időintervallum kijelölése - + to - + Report Location Helyszín jelentése - + Output File Location Kimeneti fájl elérési útvonala - + Output Path Not Selected Kimeneti útvonal nincs kijelölve - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. Egy nem létező útvonalat adtál meg a dalstatisztika riporthoz. Jelölj ki egy érvényes űtvonalat a számítógépen. - + usage_detail_%s_%s.txt Dalstatisztika_%s%s.txt - + Report Creation Riport készítése - + Report %s has been successfully created. @@ -4104,142 +4763,112 @@ has been successfully created. SongsPlugin - + &Song &Dal - + Import songs using the import wizard. Dalok importálása az importálás tündérrel. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - <strong>Dalok bővítmény</strong><br />A dalok bővítmény dalok megjelenítését és kezelését teszi lehetővé. + <strong>Dal bővítmény</strong><br />A dal bővítmény dalok megjelenítését és kezelését teszi lehetővé. - + &Re-index Songs Dalok újra&indexelése - + Re-index the songs database to improve searching and ordering. Dal adatbázis újraindexelése a keresés és a rendezés javításához. - + Reindexing songs... Dalok indexelése folyamatban… - - Add a new Song - Új dal hozzáadása - - - - Edit the selected Song - A kijelölt dal szerkesztése - - - - Delete the selected Song - A kijelölt dal törlése - - - - Preview the selected Song - A kijelölt dal előnézete - - - - Send the selected Song live - A kijelölt dal élő adásba küldése - - - - Add the selected Song to the service - A kijelölt dal hozzáadása a sorrendhez - - - + Arabic (CP-1256) Arab (CP-1256) - + Baltic (CP-1257) Balti (CP-1257) - + Central European (CP-1250) Közép-európai (CP-1250) - + Cyrillic (CP-1251) Cirill (CP-1251) - + Greek (CP-1253) Görög (CP-1253) - + Hebrew (CP-1255) Héber (CP-1255) - + Japanese (CP-932) Japán (CP-932) - + Korean (CP-949) Koreai (CP-949) - + Simplified Chinese (CP-936) Egyszerűsített kínai (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Hagyományos kínai (CP-950) - + Turkish (CP-1254) Török (CP-1254) - + Vietnam (CP-1258) Vietnami (CP-1258) - + Western European (CP-1252) Nyugat-európai (CP-1252) - + Character Encoding Karakterkódolás - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4248,70 +4877,100 @@ a karakterek helyes megjelenítéséért. Általában az előre beállított érték megfelelő. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Válasszd ki a karakterkódolást. A kódlap felelős a karakterek helyes megjelenítéséért. - + Exports songs using the export wizard. Dalok exportálása a dalexportáló tündérrel. - + Song name singular Dal - + Songs name plural Dalok - + Songs container title Dalok + + + Add a new song. + Új dal hozzáadása. + + + + Edit the selected song. + A kijelölt dal szerkesztése. + + + + Delete the selected song. + A kijelölt dal törlése. + + + + Preview the selected song. + A kijelölt dal előnézete. + + + + Send the selected song live. + A kijelölt dal élő adásba küldése. + + + + Add the selected song to the service. + A kijelölt dal hozzáadása a sorrendhez. + SongsPlugin.AuthorsForm - + Author Maintenance Szerzők kezelése - + Display name: Megjelenített név: - + First name: Keresztnév: - + Last name: Vezetéknév: - + You need to type in the first name of the author. Meg kell adni a szerző vezetéknevét. - + You need to type in the last name of the author. Meg kell adni a szerző keresztnevét. - + You have not set a display name for the author, combine the first and last names? Nincs megadva a szerző megjelenített neve, legyen előállítva a vezeték és keresztnevéből? @@ -4319,190 +4978,198 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Dalok importálása %d/%d + + The file does not have a valid extension. + A fájlnév nem tartalmaz valós kiterjesztést. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Adminisztrálta: %s SongsPlugin.EditSongForm - + Song Editor Dalszerkesztő - + &Title: &Cím: - + Alt&ernate title: &Alternatív cím: - + &Lyrics: &Dalszöveg: - + &Verse order: Versszak &sorrend: - + Ed&it All &Összes szerkesztése - + Title && Lyrics Cím és dalszöveg - + &Add to Song &Hozzáadás - + &Remove &Eltávolítás - + &Manage Authors, Topics, Song Books Szerzők, témakörök, énekeskönyvek &kezelése - + A&dd to Song H&ozzáadás - + R&emove &Eltávolítás - + Book: Könyv: - + Number: Szám: - + Authors, Topics && Song Book Szerzők, témakörök és énekeskönyvek - + New &Theme Új &téma - + Copyright Information Szerzői jogi információ - + Comments Megjegyzések - + Theme, Copyright Info && Comments Téma, szerzői jog és megjegyzések - + Add Author Szerző hozzáadása - + This author does not exist, do you want to add them? Ez a szerző még nem létezik, valóban hozzá kívánja adni? - + This author is already in the list. A szerző már benne van a listában. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - Nincs kijelölve egyetlen szerző sem. Vagy válassz egy szerzőt a listából, vagy írj az új szerző mezőbe és kattints az „Szerző hozzáadása a dalhoz” gombon a szerző megjelöléséhez. + Nincs kijelölve egyetlen szerző sem. Vagy válassz egy szerzőt a listából, vagy írj az új szerző mezőbe és kattints a Hozzáadás gombra a szerző megjelöléséhez. - + Add Topic Témakör hozzáadása - + This topic does not exist, do you want to add it? Ez a témakör még nem létezik, szeretnéd hozzáadni? - + This topic is already in the list. A témakör már benne van a listában. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mezőbe és kattints a Témakör hozzáadása a dalhoz gombon a témakör megjelöléséhez. + Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mezőbe és kattints a Hozzáadás gombraa témakör megjelöléséhez. - + You need to type in a song title. Add meg a dal címét. - + You need to type in at least one verse. Legalább egy versszakot meg kell adnod. - + Warning Figyelmeztetés - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. A versszaksorrend hibás. Nincs ilyen versszak: %s. Az érvényes elemek ezek: %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? Ez a versszak sehol nem lett megadva a sorrendben: %s. Biztosan így kívánod elmenteni a dalt? - + Add Book Könyv hozzáadása - + This song book does not exist, do you want to add it? Ez az énekeskönyv még nem létezik, szeretnéd hozzáadni a listához? - + You need to have an author for this song. Egy szerzőt meg kell adnod ehhez a dalhoz. - + You need to type some text in to the verse. Meg kell adnod a versszak szövegét. @@ -4510,259 +5177,277 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.EditVerseForm - + Edit Verse Versszak szerkesztése - + &Verse type: Versszak &típusa: - + &Insert &Beszúrás + + + Split a slide into two by inserting a verse splitter. + Dia kettéválasztása versszakelválasztó beszúrásával. + SongsPlugin.ExportWizardForm - + Song Export Wizard Dalexportáló tündér - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - A tündérrel a szabad OpenLyrics formátumba lehet exportálni a dalokat. + A tündér segít a dalok szabad OpenLyrics formátumba való exportálásában. - + Select Songs Dalok kijelölése - + Check the songs you want to export. Jelöld ki az exportálandó dalokat. - + Uncheck All Minden kijelölés eltávolítása - + Check All Mindent kijelöl - + Select Directory Mappa kijelölése - - Select the directory you want the songs to be saved. - Jelöld ki a mappát, ahová a dalok mentésre kerülnek. - - - + Directory: Mappa: - + Exporting Exportálás - + Please wait while your songs are exported. Várj, míg a dalok exportálódnak. - + You need to add at least one Song to export. Ki kell választani legalább egy dalt az exportáláshoz. - + No Save Location specified Nincs megadva a mentési hely - + You need to specify a directory. Egy mappát kell megadni. - + Starting export... Exportálás indítása… - + Select Destination Folder Célmappa kijelölése + + + Select the directory where you want the songs to be saved. + Jelöld ki a mappát, ahová a dalok mentésre kerülnek. + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files Jelölj ki egy dokumentum vagy egy bemutató fájlokat - + Song Import Wizard Dalimportáló tündér - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - A tündérrel különféle formátumú dalokat lehet importálni. Az alább található Tovább gombra való kattintással indítható a folyamat első lépése a formátum kiválasztásával. + A tündér segít a különféle formátumú dalok importálásában. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a formátum kiválasztásához. - + Generic Document/Presentation Általános dokumentum vagy bemutató - + Filename: Fájlnév: - + Add Files... Fájlok hozzáadása… - + Remove File(s) Fájl(ok) törlése - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - A Songs of Fellowship importáló le lett tiltva, mivel az OpenLP nem találja az OpenOffice.org-ot a számítógépen. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Az általános dokumentum, ill. bemutató importáló le lett tiltva, mivel az OpenLP nem találja az OpenOffice.org-ot a számítógépen. - - - + Please wait while your songs are imported. Kérlek, várj, míg a dalok importálás alatt állnak. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. Az OpenLyrics importáló még nem lett kifejlesztve, de amint már láthatod, szándékozunk elkészíteni. Remélhetőleg a következő kiadásban már benne lesz. - + OpenLP 2.0 Databases OpenLP 2.0 adatbázisok - + openlp.org v1.x Databases openlp.org v1.x adatbázisok - + Words Of Worship Song Files Words of Worship dal fájlok - - Administered by %s - Adminisztrálta: %s - - - + You need to specify at least one document or presentation file to import from. Ki kell jelölnie legalább egy dokumentumot vagy bemutatót az importáláshoz. - + Songs Of Fellowship Song Files Songs Of Fellowship dal fájlok - + SongBeamer Files SongBeamer fájlok - + SongShow Plus Song Files SongShow Plus dal fájlok - + Foilpresenter Song Files Foilpresenter dal fájlok + + + Copy + Másolás + + + + Save to File + Mentés fájlba + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + A Songs of Fellowship importáló le lett tiltva, mivel az OpenLP nem talál OpenOffice-t vagy LibreOffice-t a számítógépen. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Az általános dokumentum, ill. bemutató importáló le lett tiltva, mivel az OpenLP nem talál OpenOffice-t vagy LibreOffice-t a számítógépen. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Szerzők, témakörök, könyvek listájának kezelése - - - + Titles Címek - + Lyrics Dalszöveg - + Delete Song(s)? Törölhető(ek) a dal(ok)? - + CCLI License: CCLI licenc: - + Entire Song Teljes dal - + Are you sure you want to delete the %n selected song(s)? Törölhetők a kijelölt dalok: %n? + + + Maintain the lists of authors, topics and books. + Szerzők, témakörök, könyvek listájának kezelése. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Ez nem egy openlp.org 1.x daladatbázis. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Dalok importálása %d/%d. + + Not a valid OpenLP 2.0 song database. + Ez nem egy OpenLP 2.0 daladatbázis. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exportálás „%s”… @@ -4770,22 +5455,22 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.SongBookForm - + Song Book Maintenance Énekeskönyvek kezelése - + &Name: &Név: - + &Publisher: &Kiadó: - + You need to type in a name for the book. Meg kell adni a könyv nevét. @@ -4793,12 +5478,12 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.SongExportForm - + Finished export. Exportálás befejeződött. - + Your song export failed. Dalexportálás meghiúsult. @@ -4806,15 +5491,35 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.SongImport - + copyright szerzői jog + + + The following songs could not be imported: + A következő dalok nem importálhatók: + + + + Unable to open file + Nem sikerült megnyitni a fájlt + + + + File not found + A fájl nem található + + + + Cannot access OpenOffice or LibreOffice + Nem lehet élérni az OpenOffice-t vagy a LibreOffice-t + SongsPlugin.SongImportForm - + Your song import failed. Az importálás meghiúsult. @@ -4822,107 +5527,107 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.SongMaintenanceForm - + Could not add your author. A szerzőt nem lehet hozzáadni. - + This author already exists. Ez a szerző már létezik. - + Could not add your topic. A témakört nem lehet hozzáadni. - + This topic already exists. Ez a témakör már létezik. - + Could not add your book. A könyvet nem lehet hozzáadni. - + This book already exists. Ez a könyv már létezik. - + Could not save your changes. A módosításokat nem lehet elmenteni. - + Could not save your modified topic, because it already exists. A módosított témakört nem lehet elmenteni, mivel már létezik. - + Delete Author Szerző törlése - + Are you sure you want to delete the selected author? A kijelölt szerző biztosan törölhető? - + This author cannot be deleted, they are currently assigned to at least one song. Ezt a szerzőt nem lehet törölni, mivel jelenleg legalább egy dalhoz hozzá van rendelve. - + Delete Topic Témakör törlése - + Are you sure you want to delete the selected topic? A kijelölt témakör biztosan törölhető? - + This topic cannot be deleted, it is currently assigned to at least one song. Ezt a témakört nem lehet törölni, mivel jelenleg legalább egy dalhoz hozzá van rendelve. - + Delete Book Könyv törlése - + Are you sure you want to delete the selected book? A kijelölt könyv biztosan törölhető? - + This book cannot be deleted, it is currently assigned to at least one song. Ezt a könyvet nem lehet törölni, mivel jelenleg legalább egy dalhoz hozzá van rendelve. - + Could not save your modified author, because the author already exists. A módosított szerzőt nem lehet elmenteni, mivel már a szerző létezik. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? Ez a szerző már létezik: %s. Szeretnéd, hogy a dal – melynek szerzője %s – a már létező szerző (%s) dalai közé kerüljön rögzítésre? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? Ez a témakör már létezik: %s. Szeretnéd, hogy a dal – melynek témaköre: %s – a már létező témakörben (%s) kerüljön rögzítésre? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? Ez a könyv már létezik: %s. Szeretnéd, hogy a dal – melynek köynve: %s – a már létező könyvben (%s) kerüljön rögzítésre? @@ -4930,27 +5635,27 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.SongsTab - + Songs Mode Dalmód - + Enable search as you type Gépelés közbeni keresés engedélyezése - + Display verses on live tool bar Versszakok megjelenítése az élő adás eszköztáron - + Update service from song edit Sorrend frissítése a dal módosításából - + Add missing songs when opening service Hiányzó dalok hozzáadása a sorrend megnyitásakor @@ -4958,17 +5663,17 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.TopicsForm - + Topic Maintenance Témakörök kezelése - + Topic name: Témakör neve: - + You need to type in a topic name. Meg kell adni egy témakör nevet. @@ -4976,39 +5681,47 @@ A kódlap felelős a karakterek helyes megjelenítéséért. SongsPlugin.VerseType - + Verse Versszak - + Chorus Refrén - + Bridge Mellékdal - + Pre-Chorus Elő-refrén - + Intro Bevezetés - + Ending Befejezés - + Other Egyéb + + ThemeTab + + + Themes + Témák + + diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index 977dba6d8..e2570003f 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Anda belum memasukkan parameter baru. Tetap lanjutkan? - + No Parameter Found Parameter Tidak Ditemukan - + No Placeholder Found Placeholder Tidak Ditemukan - + The alert text does not contain '<>'. Do you want to continue anyway? Peringatan tidak mengandung '<>'. @@ -30,34 +30,34 @@ Tetap lanjutkan? AlertsPlugin - + &Alert Per&ingatan - + Show an alert message. Menampilkan pesan peringatan. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Plugin Peringatan</strong><br />Plugin peringatan mengendalikan tampilan pesan pada layar. + <strong>Plugin Peringatan</strong><br />Plugin peringatan mengendalikan tampilan pesan pada layar - + Alert name singular Peringatan - + Alerts name plural Peringatan - + Alerts container title Peringatan @@ -66,47 +66,47 @@ Tetap lanjutkan? AlertsPlugin.AlertForm - + Alert Message Pesan Peringatan - + Alert &text: Peringatan &teks: - + &New &Baru - + &Save &Simpan - + Displ&ay &Tampilan - + Display && Cl&ose Tampilkan dan &Tutup - + New Alert Peringatan Baru - + You haven't specified any text for your alert. Please type in some text before clicking New. Teks isi peringatan belum dispesifikasi. Harap masukkan teks sebelum memilih Baru. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Tetap lanjutkan? AlertsPlugin.AlertsTab - + Font Fon - + Font name: Nama fon: - + Font color: Warna fon: - + Background color: Warna latar: - + Font size: Ukuran fon: - + Alert timeout: Waktu-habis untuk peringatan: @@ -155,51 +155,54 @@ Tetap lanjutkan? BibleDB.Wizard - - Importing testaments... %s - Mengimpor testamen... %s - - - - Importing testaments... done. - Mengimpor testamen... selesai. - - - + Importing books... %s Mengimpor kitab... %s - + Importing verses from %s... Importing verses from <book name>... Mengimpor ayat dari %s... - + Importing verses... done. Mengimpor ayat... selesai. + + BiblePlugin + + + &Upgrade older Bibles + &Upgrade Alkitab lama + + + + Upgrade the Bible databases to the latest format. + Upgrade basis data Alkitab ke format terbaru. + + BiblePlugin.HTTPBible - + Download Error Unduhan Gagal - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Ada masalah dalam mengunduh ayat yang terpilih. Mohon periksa sambungan internet Anda dan jika masalah berlanjut, pertimbangkan untuk melaporkan hal ini sebagai kutu. - + Parse Error - + Galat saat parsing - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Ada masalah dalam mengekstrak ayat yang terpilih. Jika masalah berlanjut, pertimbangkan untuk melaporkan hal ini sebagai kutu. @@ -207,123 +210,133 @@ Tetap lanjutkan? BiblePlugin.MediaItem - + Bible not fully loaded. Alkitab belum termuat seluruhnya. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Tidak dapat menggabungkan hasil pencarian ayat. Ingin menghapus hasil pencarian dan mulai pencarian baru? + + + Information + Informasi + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + Alkitab kedua tidak memiliki seluruh ayat yang ada di Alkitab utama. Hanya ayat yang ditemukan di kedua Alkitab yang akan ditampilkan. %d ayat tidak terlihat di hasil. + BiblesPlugin - + &Bible &Alkitab - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Plugin Alkitab</strong><br />Plugin Alkitab memungkinkan program untuk menampilkan ayat-ayat dari berbagai sumber selama kebaktian. - - - - Import a Bible - Impor Alkitab - - - - Add a new Bible - Tambahkan Alkitab - - - - Edit the selected Bible - Sunting Alkitab terpilih - - - - Delete the selected Bible - Hapus Alkitab terpilih - - - - Preview the selected Bible - Pratinjau Alkitab terpilih - - - - Send the selected Bible live - Tampilkan Alkitab terpilih - - - - Add the selected Bible to the service - Tambahkan Alkitab terpilih untuk kebaktian - - - + Bible name singular Alkitab - + Bibles name plural Alkitab - + Bibles container title Alkitab - + No Book Found Kitab Tidak Ditemukan - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Kitab tidak ditemukan dalam Alkitab ini. Periksa apakah Anda telah mengeja nama kitab dengan benar. + + + Import a Bible. + Impor Alkitab. + + + + Add a new Bible. + Tambahkan Alkitab baru. + + + + Edit the selected Bible. + Sunting Alkitab terpilih. + + + + Delete the selected Bible. + Hapus Alkitab terpilih. + + + + Preview the selected Bible. + Pratinjau Alkitab terpilih. + + + + Send the selected Bible live. + Tayangkan Alkitab terpilih. + + + + Add the selected Bible to the service. + Tambahkan Alkitab terpilih ke dalam layanan. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error Referensi Kitab Suci Galat - + Web Bible cannot be used Alkitab Web tidak dapat digunakan - + Text Search is not available with Web Bibles. Pencarian teks tidak dapat dilakukan untuk Alkitab Web. - + 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. - Anda tidak memasukkan kata kunci pencarian. -Anda dapat memisahkan kata kunci dengan spasi untuk mencari seluruh kata kunci dan Anda dapat memisahkan kata kunci dengan koma untuk mencari salah satu. + Anda tidak memasukkan kata kunci pencarian. +Anda dapat memisahkan kata kunci dengan spasi untuk mencari seluruh kata kunci dan Anda dapat memisahkan kata kunci dengan koma untuk mencari salah satu kata kunci. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - TIdak ada Alkitab terpasang. Harap gunakan Import Wizard untuk memasang sebuah atau beberapa Alkitab. + TIdak ada Alkitab terpasang. Harap gunakan Wisaya Impor untuk memasang sebuah atau beberapa Alkitab. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Kitab Pasal:Ayat-Ayat,Pasal:Ayat-Ayat Kitab Pasal:Ayat-Pasal:Ayat - + No Bibles Available Alkitab tidak tersedia @@ -350,49 +363,24 @@ Kitab Pasal:Ayat-Pasal:Ayat BiblesPlugin.BiblesTab - + Verse Display Tampilan Ayat - + Only show new chapter numbers - Hanya tampilkan nomor pasal baru - - - - Layout style: - Gaya tata letak: - - - - Display style: - Gaya tampilan: + Hanya tampilkan nomor pasal baru Bible theme: Tema Alkitab: - - - Verse Per Slide - Ayat Tiap Slide - - - - Verse Per Line - Ayat Tiap Baris - - - - Continuous - Sinambung - No Brackets - Tidak ada tanda kurung + Tanpa tanda kurung @@ -422,257 +410,333 @@ Perubahan tidak akan mempengaruhi ayat yang kini tampil. Tampilkan ayat Alkitab selanjutnya + + BiblesPlugin.BookNameDialog + + + Select Book Name + Pilih nama Kitab + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + Wisaya Impor Alkitab - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Wisaya ini akan membantu Anda mengimpor Alkitab dari berbagai format. Klik tombol lanjut di bawah untuk memulai proses dengan memilih format untuk diimpor. - + Web Download - + Unduh dari web - + Location: Lokasi: - + Crosswalk - + Crosswalk + + + + BibleGateway + BibleGateway - BibleGateway - - - - Bible: - + Alkitab: - + Download Options - + Opsi Unduhan - + Server: Server: - + Username: Nama Pengguna: - + Password: Sandi-lewat: - + Proxy Server (Optional) - + Proxy Server (Opsional) - + License Details - + Rincian Lisensi - + Set up the Bible's license details. - + Memasang rincian lisensi Alkitab. + + + + Version name: + Nama versi: + + + + Copyright: + Hak cipta: + + + + Please wait while your Bible is imported. + Mohon tunggu selama Alkitab diimpor. + + + + You need to specify a file with books of the Bible to use in the import. + Anda harus menentukan berkas yang berisi nama kitab dalam Alkitab untuk digunakan dalam import. + + + + You need to specify a file of Bible verses to import. + Anda harus menentukan berkas Alkitab untuk diimpor. + + + + You need to specify a version name for your Bible. + Anda harus menentukan nama versi untuk Alkitab Anda. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Anda harus memberikan hak cipta untuk Alkitab Anda. Alkitab di Public Domain harus ditandai sedemikian. + + + + Bible Exists + Alkitab Sudah Ada + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Alkitab sudah ada. Silakan impor Alkitab lain atau hapus yang sudah ada. + + + + Your Bible import failed. + Impor Alkitab gagal. + + + + CSV File + Berkas CSV + + + + Bibleserver + Server Alkitab - Version name: - - - - - Copyright: - - - - - Please wait while your Bible is imported. - - - - - You need to specify a file with books of the Bible to use in the import. - - - - - You need to specify a file of Bible verses to import. - - - - - You need to specify a version name for your Bible. - - - - - You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - - - - - Bible Exists - - - - - This Bible already exists. Please import a different Bible or first delete the existing one. - - - - - Your Bible import failed. - - - - - CSV File - - - - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - - Bibleserver - - - - Permissions: - - - - - Bible file: - - - - - Testaments file: - + Izin: + Bible file: + Berkas Alkitab: + + + Books file: - + Berkas kitab: - + Verses file: - + Berkas ayat: - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + openlp.org 1.x Bible Files + Ayat Alkitab openlp.org 1.x + + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick - + Cepat - + Find: - + Temukan: - - Results: - - - - + Book: - + Kitab: - + Chapter: - + Pasal: - + Verse: - + Ayat: - + From: - + Dari: - + To: - + Kepada: - + Text Search - + Pencarian Teks - - Clear - - - - - Keep - - - - + Second: - + Kedua: - + Scripture Reference + Referensi Alkitab + + + + Toggle to keep or clear the previous results. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Mengimpor %s %s... @@ -681,435 +745,611 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Mendeteksi pengodean (mungkin butuh beberapa menit)... - + Importing %s %s... Importing <book name> <chapter>... Mengimpor %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Nama versi: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Anda harus menentukan nama versi untuk Alkitab Anda. + + + + Bible Exists + Alkitab Sudah Ada + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Unduhan Gagal + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - + Tampilan Suai - + Display footer - + Catatan kaki tampilan CustomPlugin.EditCustomForm - + Edit Custom Slides - + Sunting Tampilan Suai - + &Title: - + &Judul: - + Add a new slide at bottom. - + Tambahkan slide baru di bawah. - + Edit the selected slide. - + Sunting slide terpilih. - + Edit all the slides at once. - + Sunting seluruh slide bersamaan. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + Pecah slide menjadi dua menggunakan pemecah slide. - + The&me: - + Te&ma: - + &Credits: - + &Kredit: - + You need to type in a title. - + Anda harus mengetikkan judul. - + You need to add at least one slide - + Anda harus menambah paling sedikit satu salindia - + Ed&it All + Sun&ting Semua + + + + Insert Slide - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title - + + General + Umum ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - + <strong>Plugin Gambar</strong><br />Plugin gambar memungkinkan penayangan gambar.<br />Salah satu keunggulan fitur ini adalah kemampuan untuk menggabungkan beberapa gambar pada Service Manager, yang menjadikan penayangan beberapa gambar mudah. Plugin ini juga dapat menggunakan "perulangan terwaktu" dari OpenLP untuk membuat slide show yang berjalan otomatis. Juga, gambar dari plugin dapat digunakan untuk menggantikan latar tema. - - Load a new Image - + + Image + name singular + Gambar - - Add a new Image + + Images + name plural + Gambar + + + + Images + container title + Gambar + + + + Load a new image. - Edit the selected Image + Add a new image. - Delete the selected Image + Edit the selected image. - Preview the selected Image + Delete the selected image. - Send the selected Image live + Preview the selected image. - Add the selected Image to the service + Send the selected image live. - - Image - name singular - - - - - Images - name plural - - - - - Images - container title + + Add the selected image to the service. ImagePlugin.ExceptionDialog - + Select Attachment - + Pilih Lampiran ImagePlugin.MediaItem - + Select Image(s) - + Pilih Gambar - + You must select an image to delete. - + Pilih sebuah gambar untuk dihapus. - + You must select an image to replace the background with. - + Pilih sebuah gambar untuk menggantikan latar. - + Missing Image(s) - + Gambar Tidak Ditemukan - + The following image(s) no longer exist: %s - + Gambar berikut tidak ada lagi: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + Gambar berikut tidak ada lagi: %s +Ingin tetap menambah gambar lain? - + There was a problem replacing your background, the image file "%s" no longer exists. - + Ada masalah dalam mengganti latar, berkas gambar "%s" tidak ada lagi. MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - + <strong>Media Plugin</strong><br />Media plugin mampu memutar audio dan video. Media + name singular + Media + + + + Media name plural + Media + + + + Media + container title + Media + + + + Load new media. - - Media - container title + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. MediaPlugin.MediaItem - + Select Media - + Pilih Media - + You must select a media file to delete. - + Pilih sebuah berkas media untuk dihapus. - + You must select a media file to replace the background with. - + Pilih sebuah media untuk menggantikan latar. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Ada masalah dalam mengganti latar, berkas media "%s" tidak ada lagi. - + Missing Media File - + Berkas Media hilang - + The file %s no longer exists. - + Berkas %s tidak ada lagi. - + Videos (%s);;Audio (%s);;%s (*) - + Videos (%s);;Audio (%s);;%s (*) MediaPlugin.MediaTab - + Media Display - + Tayangan Media - + Use Phonon for video playback - + Pakai Phonon untuk memutar video OpenLP - + Image Files + Berkas Gambar + + + + Information + Informasi + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + Kredit - + License - + Lisensi - + Contribute - + Berkontribusi - + build %s - + build %s - + 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. - + Program ini adalah perangkat lunak gratis; Anda dapat meredistribusikannya dan/atau memodifikasinya di bawah syarat-syarat GNU General Public License yang dikeluarkan Free Software Foundation; Lisensi versi 2. - + 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 below for more details. - + Program ini didistribusikan dengan harapan dapat berguna, namun TANPA GARANSI; bahkan tanpa garansi implisit dalam PEMBELIAN maupun KETEPATAN TUJUAN TERTENTU. Lihat di bawah untuk detail lengkap. - + Project Lead %s @@ -1171,211 +1411,400 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. + Pemimpin Proyek + %s + +Pengembang +%s + +Kontributor +%s + +Penguji Coba +%s + +Pemaket +%s + +Penerjemah +Afrikaans (af) +%s +German (de) +%s +English, United Kingdom (en_GB) +%s +English, South Africa (en_ZA) +%s +Estonian (et) +%s +French (fr) +%s +Hungarian (hu) +%s +Japanese (ja) +%s +Norwegian Bokmål (nb) +%s +Dutch (nl) +%s +Portuguese, Brazil (pt_BR) +%s +Russian (ru) +%s + +Dokumentasi +%s + +Dibuat Dengan + Python: http://www.python.org/ + Qt4: http://qt.nokia.com/ + PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro + Oxygen Icons: http://oxygen-icons.org/ + +Kredit Akhir + "Karena begitu besarnya kasih Allah akan + dunia ini, sehingga Ia telah mengaruniakan + anak-Nya yang tunggal, supaya setiap orang + yang pecaya kepada-Nya tidak binasa, melainkan + beroleh hidup yang kekal. -- Yohanes 3:16 + + Dan <em>last but not least</em, kredit akhir + kepada Allah Bapa kita, untuk mengirim anak-Nya + untuk mati di salib, membebaskan kita dari dosa. + Kami memberikan perangkat lunak ini gratis karena + Dia telah membebaskan kita. + + + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - - - UI Settings - - - - - Number of recent files to display: - - - - - Remember active media manager tab on startup - - - - - Double-click to send items straight to live - - - - - Expand new service items on creation - - - - - Enable application exit confirmation - - - - - Mouse Cursor - - - Hide mouse cursor when over display window - + UI Settings + Pengaturan Antarmuka - Default Image - + Number of recent files to display: + Jumlah berkas anyar untuk ditampilkan: - + + Remember active media manager tab on startup + Ingat tab media manager yang aktif saat mulai + + + + Double-click to send items straight to live + Klik-ganda untuk menayangkan butir terpilih + + + + Expand new service items on creation + Tampilkan benda service saat dibuat + + + + Enable application exit confirmation + Gunakan konfirmasi aplikasi keluar + + + + Mouse Cursor + Kursor Tetikus + + + + Hide mouse cursor when over display window + Sembunyikan kursor tetikus saat melewati jendela tampilan + + + + Default Image + Gambar bawaan + + + Background color: Warna latar: - + Image file: - + Berkas gambar: - + Open File - + Buka Berkas + + + + Preview items when clicked in Media Manager + Pratayang barang saat diklik pada Media Manager + + + + Advanced + Lanjutan + + + + Click to select a color. + Klik untuk memilih warna. + + + + Browse for an image file to display. + Ramban sebuah gambar untuk ditayangkan. + + + + Revert to the default OpenLP logo. + Balikkan ke logo OpenLP bawaan. OpenLP.DisplayTagDialog - + Edit Selection - + Sunting pilihan - - Update - - - - + Description - - - - - Tag - + Deskripsi + Tag + Label + + + Start tag - + Label awal - + End tag - + Label akhir - - Default - - - - + Tag Id - + ID Label - + Start HTML - + HTML Awal - + End HTML + Akhir HTML + + + + Save OpenLP.DisplayTagTab - + Update Error - + Galat dalam Memperbarui - + Tag "n" already defined. + Label "n" sudah terdefinisi. + + + + Tag %s already defined. + Label %s telah terdefinisi. + + + + New Tag - - Tag %s already defined. + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break OpenLP.ExceptionDialog - + Error Occurred - + Galat Terjadi. - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Aduh! OpenLP mengalami masalah yang tidak dapat diatasi. Teks di kotak bawah mengandung informasi yang membantu pengembang OpenLP, jadi tolong surelkan ini ke bugs@openlp.org, bersama dengan deskripsi detail apa yang Anda lakukan saat masalah terjadi. - + Send E-Mail - + Kirim Surel - + Save to File - + Simpan menjadi Berkas - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Mohon masukkan deskripsi apa yang Anda lakukan saat galat terjadi +(Paling sedikit 20 karakter) - + Attach File - + Lampirkan Berkas - + Description characters to enter : %s - + Karakter deskripsi untuk dimasukkan: %s OpenLP.ExceptionForm - + Platform: %s - + Platform: %s + - + Save Crash Report - + Simpan Laporan Crash - + Text files (*.txt *.log *.text) - + File teks (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1390,10 +1819,23 @@ Version: %s --- Library Versions --- %s - + **OpenLP Bug Report** +Version: %s + +--- Details of the Exception. --- + +%s + +--- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + - + *OpenLP Bug Report* Version: %s @@ -1409,1173 +1851,1219 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *OpenLP Bug Report* +Version: %s + +--- Details of the Exception. --- + +%s + +--- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s +Mohon gunakan bahasa Inggris untuk laporan kutu. OpenLP.FileRenameForm - + File Rename - + Namai Berkas - + New File Name: - + Nama Berkas Baru: - + File Copy - + Salin Berkas OpenLP.FirstTimeLanguageForm - + Select Translation - + Pilih Terjemahan - + Choose the translation you'd like to use in OpenLP. - + Pilih terjemahan yang ingin Anda gunakan di OpenLP. - + Translation: - + Terjemahan: OpenLP.FirstTimeWizard - + Downloading %s... - + Mengunduh %s... - + Download complete. Click the finish button to start OpenLP. - + Unduhan selesai. Klik tombol selesai untuk memulai OpenLP. - + Enabling selected plugins... - - - - - First Time Wizard - - - - - Welcome to the First Time Wizard - + Mengaktifkan plugin terpilih... - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - + First Time Wizard + Wisaya Kali Pertama - - Activate required Plugins - - - - - Select the Plugins you wish to use. - - - - - Songs - + + Welcome to the First Time Wizard + Selamat datang di Wisaya Kali Pertama - Custom Text - + Activate required Plugins + Mengaktivasi Plugin yang dibutuhkan + Select the Plugins you wish to use. + Pilih Plugin yang ingin digunakan. + + + + Songs + Lagu + + + + Custom Text + Teks + + + Bible Alkitab - + Images - + Gambar - + Presentations - + Presentasi - + Media (Audio and Video) - + Media (Audio dan Video) - + Allow remote access - + Izinkan akses jauh - + Monitor Song Usage - - - - - Allow Alerts - - - - - No Internet Connection - - - - - Unable to detect an Internet connection. - + Catat Penggunaan Lagu + Allow Alerts + Izinkan Peringatan + + + + No Internet Connection + Tidak Terhubung ke Internet + + + + Unable to detect an Internet connection. + Tidak dapat mendeteksi koneksi Internet. + + + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - + Koneksi Internet tidak ditemukan. Wisaya Kali Pertama butuh sambungan Internet untuk mengunduh contoh lagu, Alkitab, dan tema. + +Untuk menjalankan lagi Wisaya Kali Pertama dan mengimpor contoh data, tekan batal, cek koneksi Internet, dan mulai ulang OpenLP. + +Untuk membatalkan Wisaya Kali Pertama, tekan tombol selesai. - + Sample Songs - + Contoh Lagu - + Select and download public domain songs. - + Pilih dan unduh lagu domain bebas. - + Sample Bibles - + Contoh Alkitab - + Select and download free Bibles. - + Pilih dan unduh Alkitab gratis - + Sample Themes - + Contoh Tema - + Select and download sample themes. - + Pilih dan unduh contoh Tema - + Default Settings - + Pengaturan Bawaan - + Set up default settings to be used by OpenLP. - + Atur pengaturan bawaan pada OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Tampilan keluaran bawaan: - + Select default theme: + Pilih tema bawaan: + + + + Starting configuration process... + Memulai proses konfigurasi... + + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. - - Starting configuration process... + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. OpenLP.GeneralTab - + General - + Umum + + + + Monitors + Monitor + + + + Select monitor for output display: + Pilih monitor untuk tampilan keluaran: + + + + Display if a single screen + Tampilkan jika layar tunggal - Monitors - + Application Startup + Awal Mulai Aplikasi - Select monitor for output display: - + Show blank screen warning + Tampilkan peringatan layar kosong - Display if a single screen - + Automatically open the last service + Buka layanan terakhir secara otomatis - Application Startup - - - - - Show blank screen warning - + Show the splash screen + Tampilkan logo di awal - Automatically open the last service - + Application Settings + Pengaturan Aplikasi - Show the splash screen - + Prompt to save before starting a new service + Coba simpan sebelum memulai pelayanan baru - Application Settings - + Automatically preview next item in service + Pratinjau item selanjutnya pada sevice + + + + sec + sec + + + + CCLI Details + Detail CCLI + + + + SongSelect username: + Nama pengguna SongSelect: + + + + SongSelect password: + Sandi-lewat SongSelect: + + + + Display Position + Posisi Tampilan + + + + X + X + + + + Y + Y + + + + Height + Tinggi + + + + Width + Lebar + + + + Override display position + Timpa posisi tampilan + + + + Check for updates to OpenLP + Cek pembaruan untuk OpenLP + + + + Unblank display when adding new live item + Jangan kosongkan layar saat menambah butir tayang baru - Prompt to save before starting a new service + Enable slide wrap-around - Automatically preview next item in service - - - - - Slide loop delay: - - - - - sec - - - - - CCLI Details - - - - - SongSelect username: - - - - - SongSelect password: - - - - - Display Position - - - - - X - - - - - Y - - - - - Height - - - - - Width - - - - - Override display position - - - - - Check for updates to OpenLP + Timed slide interval: OpenLP.LanguageManager - + Language - + Bahasa - + Please restart OpenLP to use your new language setting. - + Mohon mulai ulang OpenLP untuk menggunakan pengaturan bahasa baru. OpenLP.MainDisplay - + OpenLP Display - + Tampilan OpenLP OpenLP.MainWindow - + &File - + &File - + &Import &Impor - + &Export - - - - - &View - - - - - M&ode - - - - - &Tools - - - - - &Settings - - - - - &Language - - - - - &Help - - - - - Media Manager - - - - - Service Manager - - - - - Theme Manager - + &Ekspor + &View + &Lihat + + + + M&ode + M&ode + + + + &Tools + Ala&t + + + + &Settings + &Pengaturan + + + + &Language + &Bahasa + + + + &Help + Bantua&n + + + + Media Manager + Manajer Media + + + + Service Manager + Manajer Layanan + + + + Theme Manager + Manajer Tema + + + &New &Baru - - Ctrl+N - - - - + &Open - + &Buka - + Open an existing service. - + Buka layanan yang ada. - - Ctrl+O - - - - + &Save &Simpan - + Save the current service to disk. - + Menyimpan layanan aktif ke dalam diska. - - Ctrl+S - - - - + Save &As... - + Simp&an Sebagai... - + Save Service As - + Simpan Layanan Sebagai - + Save the current service under a new name. - + Menyimpan layanan aktif dengan nama baru. - - Ctrl+Shift+S - - - - + E&xit - + Kelua&r - + Quit OpenLP - + Keluar dari OpenLP - - Alt+F4 - - - - + &Theme - - - - - &Configure OpenLP... - - - - - &Media Manager - + &Tema - Toggle Media Manager - + &Configure OpenLP... + &Konfigurasi OpenLP... - Toggle the visibility of the media manager. - + &Media Manager + Manajer &Media - F8 - + Toggle Media Manager + Ganti Manajer Media - &Theme Manager - + Toggle the visibility of the media manager. + Mengganti kenampakan manajer media. - Toggle Theme Manager - + &Theme Manager + Manajer &Tema - Toggle the visibility of the theme manager. - + Toggle Theme Manager + Ganti Manajer Tema - F10 - + Toggle the visibility of the theme manager. + Mengganti kenampakan manajer tema. &Service Manager - + Manajer &Layanan Toggle Service Manager - + Ganti Manajer Layanan Toggle the visibility of the service manager. - + Mengganti kenampakan manajer layanan. - F9 - + &Preview Panel + Panel &Pratinjau - &Preview Panel - + Toggle Preview Panel + Ganti Panel Pratinjau - Toggle Preview Panel - + Toggle the visibility of the preview panel. + Ganti kenampakan panel pratinjau - Toggle the visibility of the preview panel. - + &Live Panel + Pane&l Tayang - F11 - + Toggle Live Panel + Ganti Panel Tayang - &Live Panel - + Toggle the visibility of the live panel. + Mengganti kenampakan panel tayang. - Toggle Live Panel - + &Plugin List + Daftar &Plugin - Toggle the visibility of the live panel. - + List the Plugins + Melihat daftar Plugin - F12 - + &User Guide + T&untunan Pengguna - &Plugin List - - - - - List the Plugins - - - - - Alt+F7 - - - - - &User Guide - - - - &About - + Tent&ang - + More information about OpenLP - + Informasi lebih lanjut tentang OpenLP - - Ctrl+F1 - + + &Online Help + Bantuan &Daring + + + + &Web Site + Situs &Web - &Online Help - - - - - &Web Site - - - - Use the system language, if available. - + Gunakan bahasa sistem, jika ada. - + Set the interface language to %s - + Ubah bahasa antarmuka menjadi %s + + + + Add &Tool... + Tambahkan Ala&t... + + + + Add an application to the list of tools. + Tambahkan aplikasi ke daftar alat. - Add &Tool... - + &Default + &Bawaan - Add an application to the list of tools. - - - - - &Default - - - - Set the view mode back to the default. - - - - - &Setup - - - - - Set the view mode to Setup. - - - - - &Live - - - - - Set the view mode to Live. - - - - - Version %s of OpenLP is now available for download (you are currently running version %s). - -You can download the latest version from http://openlp.org/. - - - - - OpenLP Version Updated - - - - - OpenLP Main Display Blanked - - - - - The Main Display has been blanked out - - - - - Default Theme: %s - - - - - English - Please add the name of your language here - - - - - Configure &Shortcuts... - - - - - Close OpenLP - - - - - Are you sure you want to close OpenLP? - - - - - Print the current Service Order. - - - - - Ctrl+P - + Ubah mode tampilan ke bawaan. + &Setup + &Persiapan + + + + Set the view mode to Setup. + Pasang mode tampilan ke Persiapan. + + + + &Live + &Tayang + + + + Set the view mode to Live. + Pasang mode tampilan ke Tayang. + + + + Version %s of OpenLP is now available for download (you are currently running version %s). + +You can download the latest version from http://openlp.org/. + OpenLP versi %s sekarang siap untuk diunduh (Anda menggunakan versi %s). + +Versi terbaru dapat diunduh dari http://openlp.org/. + + + + OpenLP Version Updated + Versi OpenLP Terbarui + + + + OpenLP Main Display Blanked + Tampilan Utama OpenLP Kosong + + + + The Main Display has been blanked out + Tampilan Utama telah dikosongkan + + + + Default Theme: %s + Tema Bawaan: %s + + + + English + Please add the name of your language here + Inggris + + + + Configure &Shortcuts... + Atur &Pintasan + + + + Close OpenLP + Tutup OpenLP + + + + Are you sure you want to close OpenLP? + Yakin ingin menutup OpenLP? + + + Open &Data Folder... - + Buka Folder &Data - + Open the folder where songs, bibles and other data resides. - + Buka folder tempat lagu, Alkitab, dan data lain disimpan. - + &Configure Display Tags + &Konfigurasi Label Tampilan + + + + &Autodetect + &Autodeteksi + + + + Update Theme Images - - &Autodetect + + Update the preview images for all themes. + + + + + Print the current service. OpenLP.MediaManagerItem - + No Items Selected - + Tidak Ada Barang yang Terpilih &Add to selected Service Item - + T&ambahkan ke dalam Butir Layanan - + You must select one or more items to preview. - + Anda harus memilih satu atau beberapa butir untuk dipratilik. - + You must select one or more items to send live. - + Anda harus memilih satu atau beberapa butir untuk ditayangkan. - + You must select one or more items. - + Anda harus memilih satu atau beberapa butir. - + You must select an existing service item to add to. - + Anda harus memilih butir layanan yang ada untuk ditambahkan. - + Invalid Service Item + Butir Layanan Tidak Sahih + + + + You must select a %s service item. + Anda harus memilih sebuah butir layanan %s. + + + + You must select one or more items to add. - - You must select a %s service item. + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list OpenLP.PluginForm - + Plugin List - + Daftar Plugin - + Plugin Details - + Detail Plugin - + Status: - + Status: - + Active - + Aktif - + Inactive - + Tidak Aktif - + %s (Inactive) - + % (Tidak Aktif) - + %s (Active) - + %s (Aktif) - + %s (Disabled) - + %s (Dihentikan) OpenLP.PrintServiceDialog - + Fit Page - + Samakan dengan Halaman - + Fit Width - + Samakan dengan Lebar OpenLP.PrintServiceForm - + Options - + Pilihan Close - + Tutup Copy - + Salin Copy as HTML - + Salin sebagai HTML - + Zoom In - + Perbesar - + Zoom Out - + Perkecil - + Zoom Original - + Kembalikan Ukuran - + Other Options - + Pilihan Lain - + Include slide text if available - + Masukkan teks dari salindia jika tersedia - + Include service item notes - + Masukkan catatan butir layanan - + Include play length of media items - + Masukkan lama putar butir media - - Service Order Sheet + + Add page break before each text item + Tambahkan pemisan sebelum tiap butir teks + + + + Service Sheet OpenLP.ScreenList - + Screen - + Layar - + primary - + Utama OpenLP.ServiceItemEditForm - + Reorder Service Item - + Atur Ulang Butir Layanan OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + Pindahkan ke punc&ak - + Move item to the top of the service. - + Pindahkan butir ke puncak daftar layanan. - + Move &up - + Pindahkan ke a&tas - + Move item up one position in the service. - + Naikkan butir satu posisi pada daftar layanan. - + Move &down - + Pindahkan ke &bawah - + Move item down one position in the service. - + Turunkan butir satu posisi pada daftar layanan. - + Move to &bottom - + Pindahkan ke &kaki - + Move item to the end of the service. - + Pindahkan butir ke kaki daftar layanan. - + &Delete From Service - + Hapus &dari Layanan - + Delete the selected item from the service. - + Hapus butir terpilih dari layanan, - + &Add New Item - + T&ambahkan Butir Baru - + &Add to Selected Item - + T&ambahkan ke Butir Terpilih - + &Edit Item - + &Sunting Butir - + &Reorder Item - + Atu&r Ulang Butir - + &Notes - + Catata&n - + &Change Item Theme - + &Ubah Tema - + OpenLP Service Files (*.osz) - - - - - File is not a valid service. -The content encoding is not UTF-8. - + Berkas Layanan OpenLP (*.osz) + File is not a valid service. +The content encoding is not UTF-8. + Berkas bukan berupa layanan. +Isi berkas tidak berupa UTF-8. + + + File is not a valid service. - + Berkas bukan layanan sahih. - + Missing Display Handler - + Penangan Tayang hilang - + Your item cannot be displayed as there is no handler to display it - + Butir tidak dapat ditayangkan karena tidak ada penangan untuk menayangkannya. - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Buka Berkas - - Notes: - - - - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Tayangkan - + Send the selected item to Live. - + Tayangkan butir terpilih. - + &Start Time - + Show &Preview - + Show &Live - + Tampi&lkan Tayang - + Modified Service - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes @@ -2583,7 +3071,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2591,220 +3079,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + Bawaan + + + + Custom + Suaian + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - - - - - Move to next - - - - + Hide - - Move to live - - - - - Edit and reload song preview - - - - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Start playing media - - - - + Go To - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2871,68 +3414,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. @@ -2952,47 +3495,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -3000,242 +3543,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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. - + Transitions: - + &Footer Area @@ -3243,42 +3786,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3286,421 +3829,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error - + &Add - + Advanced - + Lanjutan - + All Files - + Create a new service. - + &Delete - + &Edit - + Import - + Length %s - + Live - + Tayang - + Load - + New - + New Service - + OpenLP 2.0 - - Open Service - - - - + Preview - + Replace Background - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + Save Service - + Service - + Start %s - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: - + Top - + Middle - + Bottom - + About - + Browse... - + Cancel - + CCLI number: - + Empty Field - + Export - + pt Abbreviated font pointsize unit pn - + Image - + Gambar - + Live Background Error - - Live Panel - - - - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural - + Tidak Ada Barang yang Terpilih - + openlp.org 1.x - - Preview Panel - - - - - Print Service Order - - - - + s The abbreviated unit for seconds s - + Save && Preview - + Search - + You must select an item to delete. - + You must select an item to edit. - + Theme Singular - + Themes Plural - + Version - + Finished import. - + Format: - + Importing - + Importing "%s"... - + Select Import Source - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% - + Ready. - + Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural - + © Copyright symbol. - + Song Book Singular - + Song Books Plural - + Song Maintenance - + Topic Singular - + Topics Plural + + + Continuous + Kontinu + + + + Default + Bawaan + + + + Display style: + Gaya tampilan: + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + Gaya tata letak: + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + Ayat Tiap Slide + + + + Verse Per Line + Ayat Tiap Baris + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3712,31 +4362,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3747,69 +4372,89 @@ The content encoding is not UTF-8. Presentations name plural - + Presentasi Presentations container title + Presentasi + + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. PresentationPlugin.MediaItem - + Select Presentation(s) - + Automatic - + Present using: - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3817,17 +4462,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3835,71 +4480,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + Manajer Layanan + + + + Slide Controller + + + + + Alerts + Peringatan + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + Tayangkan + + + + Add To Service + + + + + No Results + + + + + Options + Pilihan + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3914,53 +4662,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3968,54 +4721,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4023,211 +4776,211 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Song name singular - + Songs name plural - + Lagu - + Songs container title + Lagu + + + + Exports songs using the export wizard. - - Exports songs using the export wizard. + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. SongsPlugin.AuthorsForm - + Author Maintenance - + Display name: - + First name: - + Last name: - + You need to type in the first name of the author. - + You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? @@ -4235,190 +4988,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor - + &Title: - + &Judul: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Sun&ting Semua - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Kitab: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4426,259 +5187,277 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + Check the songs you want to export. - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files + + + Copy + Salin + + + + Save to File + Simpan menjadi Berkas + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Titles - + Lyrics - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4686,22 +5465,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: - + &Publisher: - + You need to type in a name for the book. @@ -4709,12 +5488,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4722,15 +5501,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4738,107 +5537,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified author, because the author already exists. - + Could not save your modified topic, because it already exists. - + Delete Author - + Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book - + Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4846,27 +5645,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4874,17 +5673,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: - + You need to type in a topic name. @@ -4892,39 +5691,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse - + Chorus - + Bridge - + Pre-Chorus - + Intro - + Ending - + Other Lainnya + + ThemeTab + + + Themes + + + diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index 9ab1f0cbc..d3fd78828 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? 引数が入力されていません。 続けますか? - + No Parameter Found 引数が見つかりません - + No Placeholder Found プレースホルダーが見つかりません - + The alert text does not contain '<>'. Do you want to continue anyway? 警告テキストは、'<>'を含みません。 @@ -30,34 +30,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert 警告(&A) - + Show an alert message. 警告メッセージを表示する。 - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>警告プラグイン</strong><br />警告プラグインは、画面に警告文を表示する機能を提供します - + Alert name singular 警告 - + Alerts name plural 警告 - + Alerts container title 警告 @@ -66,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message 警告メッセージ - + Alert &text: 警告文(&T): - + &New 新規作成(&N) - + &Save 保存(&S) - + Displ&ay 表示(&A) - + Display && Cl&ose 表示して閉じる(&O) - + New Alert 新しい警告 - + You haven't specified any text for your alert. Please type in some text before clicking New. 警告文が何も設定されていません。新規作成をクリックする前にメッセージを入力してください。 - + &Parameter: 引数(&P): @@ -122,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font フォント - + Font name: フォント名: - + Font color: 文字色: - + Background color: 背景色: - + Font size: 大きさ: - + Alert timeout: 警告タイムアウト: @@ -155,51 +155,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - 新旧訳を取込み中...%s - - - - Importing testaments... done. - 新旧訳の取込み...完了。 - - - + Importing books... %s 書簡の取込み中...%s - + Importing verses from %s... Importing verses from <book name>... 節の取込み中 %s... - + Importing verses... done. 節の取込み....完了。 + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error ダウンロードエラー - + Parse Error HTML構文エラー - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. 選択された聖書のダウンロードに失敗しました。インターネット接続を確認し、エラーが再び起こったときは、バグ報告を検討してください。 - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. 選択された聖書の展開に失敗しました。エラーが再び起こったときは、バグ報告を検討してください。 @@ -207,123 +210,133 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. 聖書が完全に読み込まれていません。 - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 一つの聖書と複数の聖書の検索結果をくっつける事はできません。検索結果を削除して、再検索しますか? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible 聖書(&B) - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>聖書プラグイン</strong><br />聖書プラグインは、礼拝プログラムで様々な訳の御言葉を表示する機能を提供します。 - - - - Import a Bible - 聖書をインポート - - - - Add a new Bible - 聖書を追加 - - - - Edit the selected Bible - 選択した聖書を編集 - - - - Delete the selected Bible - 選択した聖書を削除 - - - - Preview the selected Bible - 選択した聖書をプレビュー - - - - Send the selected Bible live - 選択した聖書をライブへ送る - - - - Add the selected Bible to the service - 選択した聖書を礼拝プログラムに追加 - - - + Bible name singular 聖書 - + Bibles name plural 聖書 - + Bibles container title 聖書 - + No Book Found 書名がみつかりません - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. 該当する書名がこの聖書に見つかりません。書名が正しいか確認してください。 + + + Import a Bible. + 聖書をインポートします。 + + + + Add a new Bible. + 聖書を追加します。 + + + + Edit the selected Bible. + 選択したスライドを編集します。 + + + + Delete the selected Bible. + 選択した聖書を削除します。 + + + + Preview the selected Bible. + 選択した聖書をプレビューします。 + + + + Send the selected Bible live. + 選択した聖書をライブへ送ります。 + + + + Add the selected Bible to the service. + 選択した聖書を礼拝プログラムに追加します。 + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error 書名章節番号エラー - + Web Bible cannot be used ウェブ聖書は使用できません - + Text Search is not available with Web Bibles. 本文検索はウェブ聖書では使用できません。 - + 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. 検索語句が入力されていません。 複数の語句をスペースで区切ると全てに該当する箇所を検索し、コンマ(,)で区切るといずれかに該当する箇所を検索します。 - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. 利用可能な聖書がありません。インポートガイドを利用して、一つ以上の聖書をインストールしてください。 - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Book Chapter:Verse-Chapter:Verse 書 章:節-章:節 - + No Bibles Available 利用可能な聖書翻訳がありません @@ -350,45 +363,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display 聖句の表示 - + Only show new chapter numbers 初めの章番号のみを表示 - - - Layout style: - レイアウトスタイル: - - - - Display style: - 表示スタイル: - Bible theme: 聖書の外観テーマ: - - - Verse Per Slide - スライドに1節 - - - - Verse Per Line - 1行に1節 - - - - Continuous - 連続 - No Brackets @@ -421,257 +409,333 @@ Changes do not affect verses already in the service. 2つの聖句を表示 + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard 聖書インポートウィザード - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. この一連の手順を通じて、様々な聖書のデータを取り込む事ができます。次へボタンをクリックし、取り込む聖書のフォーマットを選択してください。 - + Web Download ウェブからダウンロード - + Location: サイト: - + Crosswalk - + BibleGateway - + Bible: 訳: - + Download Options ダウンロードオプション - + Server: サーバ: - + Username: ユーザ名: - + Password: パスワード: - + Proxy Server (Optional) プロキシサーバ (任意) - + License Details ライセンス詳細 - + Set up the Bible's license details. ライセンス詳細を設定してください。 - + Version name: 訳名: - + Copyright: 著作権: - + Please wait while your Bible is imported. 聖書データの取り込みが完了するまでしばらくお待ちください。 - + You need to specify a file with books of the Bible to use in the import. 取り込む聖書データの書簡を指定する必要があります。 - + You need to specify a file of Bible verses to import. 取り込む節の指定が必要です。 - + You need to specify a version name for your Bible. 聖書データのバージョン名を指定する必要があります。 - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. 著作権情報を入力してください。公共のサイトからの聖書もそのように入力ください。 - + Bible Exists 聖書が存在します - + This Bible already exists. Please import a different Bible or first delete the existing one. すでにこの聖書データは取り込み済みです。他の聖書データを取り込むか既に取り込まれた聖書を削除してください。 - + Your Bible import failed. 聖書データの取り込みに失敗しました。 - - Starting Registering bible... - 聖書を登録しています... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - 聖書が登録されました。節ごとに必要に応じてダウンロードされますので、インターネットへの接続が要求される事を留意しておいてください。 - - - + Permissions: 使用許可: - + CSV File CSVファイル - + Bibleserver - + Bible file: 聖書訳: - - Testaments file: - 新旧訳: - - - + Books file: 書簡: - + Verses file: 節: - - You have not specified a testaments file. Do you want to proceed with the import? - 新旧訳ファイルを指定していません。インポートを継続しますか? - - - + openlp.org 1.x Bible Files openlp.org 1x 聖書ファイル + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + 言語: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + + BiblesPlugin.MediaItem - + Quick 高速 - + Find: 検索: - - Results: - 結果: - - - + Book: 書名: - + Chapter: 章: - + Verse: 節: - + From: 開始: - + To: 終了: - + Text Search キーワード検索 - - Clear - 消去 - - - - Keep - 追加 - - - + Second: 第二訳: - + Scripture Reference 参照聖句 + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %sをインポートしています... @@ -680,34 +744,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... エンコードの検出中です(数分かかることがあります)... - + Importing %s %s... Importing <book name> <chapter>... %s %sをインポートしています... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + 訳名: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + 聖書データのバージョン名を指定する必要があります。 + + + + Bible Exists + 聖書が存在します + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + ダウンロードエラー + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>カスタムプラグイン</strong><br />カスタムプラグインは、カスタムのテキストを賛美などと同様に表示する機能を提供します。 + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. + CustomPlugin.CustomTab - + Custom Display カスタム表示 - + Display footer フッター表示 @@ -715,192 +1006,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides カスタムスライドを編集 - + &Title: タイトル(&T): - + Add a new slide at bottom. 一番下に新規スライドを追加。 - + Edit the selected slide. 選択したスライドを編集。 - + Edit all the slides at once. すべてのスライドを一括編集。 - - Split Slide - スライドを分割 - - - + Split a slide into two by inserting a slide splitter. スライド分割機能を用い、スライドを分割してください。 - + The&me: 外観テーマ(&m): - + You need to type in a title. タイトルの入力が必要です。 - + You need to add at least one slide 最低一枚のスライドが必要です - + Ed&it All 全て編集(&I) - + &Credits: クレジット(&C): + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - カスタムをインポート - - - - Load a new Custom - 新しいカスタムを読み込む - - - - Add a new Custom - 新しいカスタムを追加 - - - - Edit the selected Custom - 選択したカスタムを編集 - - - - Delete the selected Custom - 選択したカスタムを削除 - - - - Preview the selected Custom - 選択したカスタムをプレビュー - - - - Send the selected Custom live - 選択したカスタムをライブへ送る - - - - Add the selected Custom to the service - 選択したカスタムを礼拝プログラムに追加 - - - - Custom - name singular - カスタム - - - - Customs - name plural - カスタム - - - - Custom - container title - カスタム + + General + 一般 ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>画像プラグイン</strong><br />画像プラグインは、画像を表示する機能を提供します。<br />礼拝プログラムで複数の画像をグループ化したり、複数の画像を簡単に表示することができます。タイムアウトループの機能を使用してスライドショーを自動的に表示することもできます。さらに、賛美などのテキストベースの項目の背景を、外観テーマで指定されたものからこのプラグインの画像に変更することもできます。 - - Load a new Image - 新しい画像を読み込み - - - - Add a new Image - 新しい画像を追加 - - - - Edit the selected Image - 選択した画像を編集 - - - - Delete the selected Image - 選択した画像を削除 - - - - Preview the selected Image - 選択した画像をプレビュー - - - - Send the selected Image live - 選択した画像をライブへ送る - - - - Add the selected Image to the service - 選択した画像を礼拝プログラムに追加 - - - + Image name singular 画像 - + Images name plural 画像 - + Images container title 画像 + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment 添付を選択 @@ -908,39 +1146,39 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) 画像を選択 - + You must select an image to delete. 削除する画像を選択してください。 - + You must select an image to replace the background with. 置き換える画像を選択してください。 - + Missing Image(s) 画像が見つかりません - + The following image(s) no longer exist: %s 以下の画像は既に存在しません - + The following image(s) no longer exist: %s Do you want to add the other images anyway? 以下の画像は既に存在しません:%s それでも他の画像を追加しますか? - + There was a problem replacing your background, the image file "%s" no longer exists. 背景画像を置換する際に問題が発生しました。画像ファイル"%s"が存在しません。 @@ -948,98 +1186,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>メディアプラグイン</strong><br />メディアプラグインは、音声や動画を再生する機能を提供します。 - - Load a new Media - 新しいメディアを読み込み - - - - Add a new Media - 新しいメディアを追加 - - - - Edit the selected Media - 選択したメディアを編集 - - - - Delete the selected Media - 選択したメディアを削除 - - - - Preview the selected Media - 選択したメディアをプレビュー - - - - Send the selected Media live - 選択したメディアをライブへ送る - - - - Add the selected Media to the service - 選択したメディアを礼拝プログラムに追加 - - - + Media name singular メディア - + Media name plural メディア - + Media container title メディア + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media メディア選択 - + You must select a media file to delete. 削除するメディアファイルを選択してください。 - + Missing Media File メディアファイルが見つかりません - + The file %s no longer exists. ファイル %s が見つかりません。 - + You must select a media file to replace the background with. 背景を置換するメディアファイルを選択してください。 - + There was a problem replacing your background, the media file "%s" no longer exists. 背景を置き換えする際に問題が発生しました。メディアファイル"%s"は既に存在しません。 - + Videos (%s);;Audio (%s);;%s (*) ビデオ (%s);;オーディオ (%s);;%s (*) @@ -1047,12 +1285,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display メディア表示 - + Use Phonon for video playback Phononをビデオ再生に使用する @@ -1060,62 +1298,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files 画像ファイル + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLPは、教会専用のフリー(無償及び利用に関して)のプレゼンテーション及び賛美詞投射ソフトウェアです。 - -パソコンとプロジェクターを用いて、聖書箇所、画像また他プレゼンテーションデータ(OpenOffice.orgやPowerPoint/Viewerが必要)をスライド表示する事ができます。 - -http://openlp.org/にて詳しくご紹介しております。 - -OpenLPは、ボランティアの手により開発保守されています。もっと多くのクリスチャンの手によるフリーのソフトウェア開発に興味がある方は、以下のボタンからどうぞ。 - - - + Credits 著作情報 - + License ライセンス - + Contribute 貢献する - + build %s ビルド %s - + 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. このプログラムは、フリーソフトです。あなたは、これを再配布したり、the Free Software Foundationが発行したGNU General Public Licenseバージョン2の元で改変する事が出来ます。 - + 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 below for more details. このプログラムは、皆様のお役に立てると期待し、配布しています。しかし、完全に無保障である事を覚えて下さい。商品としての暗黙の保障としての商品適格性や特定の使用適合性もありません。詳しくは、以下の文をお読みください。 - + Project Lead %s @@ -1242,189 +1475,311 @@ Final Credit します。それは神が私たちをフリー(自由)にして下さった故です。 - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + OpenLP.AdvancedTab - + UI Settings ユーザインターフェイス設定 - + Number of recent files to display: 最近のファイルの表示数: - + Remember active media manager tab on startup 起動時に前回のメディアマネジャーを開く - + Double-click to send items straight to live ダブルクリックで項目を直接ライブへ送る - + Expand new service items on creation 礼拝項目の作成時に展開する - + Enable application exit confirmation 終了時に確認する - + Mouse Cursor マウスカーソル - + Hide mouse cursor when over display window ディスプレイウィンドウの上では、マウスカーソルを隠す - + Default Image 既定の画像 - + Background color: 背景色: - + Image file: 画像ファイル: - + Open File ファイルを開く + + + Preview items when clicked in Media Manager + メディアマネジャーでクリック時に項目をプレビューする + + + + Advanced + 詳細設定 + + + + Click to select a color. + クリックして色を選択する。 + + + + Browse for an image file to display. + 表示する画像ファイルを参照する。 + + + + Revert to the default OpenLP logo. + 規定のOpenLPロゴに戻す。 + OpenLP.DisplayTagDialog - + Edit Selection 選択項目を編集 - - Update - 更新 - - - + Description 説明 - + Tag タグ - + Start tag 開始タグ - + End tag 終了タグ - - Default - 初期設定 - - - + Tag Id タグID - + Start HTML 開始HTML - + End HTML 終了HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error 更新エラー - + Tag "n" already defined. タグ「n」は既に定義されています。 - + Tag %s already defined. タグ「%s」は既に定義されています。 + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + 太字 + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Error Occurred エラーが発生しました - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. OpenLPは問題に直面し、復旧する事ができませんでした。以下に表示される情報は、開発者が問題を修正するのに役に立つかも知れません。bugs@openlp.orgに以下のエラーメッセージと問題が発生するまでの手順を送ってくださると光栄です。 - + Send E-Mail Eメールで送る - + Save to File ファイルに保存 - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) この問題が発生するまで何をしていたかをご入力ください。 (20文字以内。お手数ですが、英語でお願い致します。) - + Attach File ファイルを添付 - + Description characters to enter : %s 説明 : %s @@ -1432,24 +1787,24 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Platform: %s - + Save Crash Report クラッシュ報告の保存 - + Text files (*.txt *.log *.text) テキストファイル (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1480,7 +1835,7 @@ Version: %s %s - + *OpenLP Bug Report* Version: %s @@ -1515,17 +1870,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename ファイル名 - + New File Name: 新しいファイル名: - + File Copy ファイルをコピー @@ -1533,17 +1888,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation 翻訳言語を選択して下さい - + Choose the translation you'd like to use in OpenLP. OpenLPを利用する言語を選択して下さい。 - + Translation: 翻訳言語: @@ -1551,102 +1906,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... ダウンロード中 %s... - + Download complete. Click the finish button to start OpenLP. ダウンロードが完了しました。終了ボタンが押下されると、OpenLPを開始します。 - + Enabling selected plugins... 選択されたプラグインを有効化しています... - + First Time Wizard 初回利用ガイド - + Welcome to the First Time Wizard 初回起動ガイドへようこそ - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - このガイドは、初回起動時に、OpenLPを設定するお手伝いをします。次へボタンを押下し、OpenLPを設定していきましょう。 - - - + Activate required Plugins 必要なプラグインを有効化する - + Select the Plugins you wish to use. ご利用になるプラグインを選択してください。 - + Songs 賛美 - + Custom Text カスタムテキスト - + Bible 聖書 - + Images 画像 - + Presentations プレゼンテーション - + Media (Audio and Video) メディア(音声と動画) - + Allow remote access リモートアクセスを許可 - + Monitor Song Usage 賛美利用記録 - + Allow Alerts 警告を許可 - + No Internet Connection インターネット接続が見つかりません - + Unable to detect an Internet connection. インターネット接続が検知されませんでした。 - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1659,198 +2009,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs サンプル賛美 - + Select and download public domain songs. 以下のキリスト教化において合法的に利用が可能な賛美を選択して下さい。 - + Sample Bibles サンプル聖書 - + Select and download free Bibles. 以下のフリー聖書を選択する事でダウンロードできます。 - + Sample Themes サンプル外観テーマ - + Select and download sample themes. サンプル外観テーマを選択して、ダウンロードして下さい。 - + Default Settings 既定設定 - + Set up default settings to be used by OpenLP. 既定設定がOpenLPに使われるようにセットアップします。 - - Setting Up And Importing - セットアップとインポート中 - - - - Please wait while OpenLP is set up and your data is imported. - OpenLPがセットアップされ、あなたのデータがインポートされるまでお待ち下さい。 - - - + Default output display: 既定出力先: - + Select default theme: 既定外観テーマを選択: - + Starting configuration process... 設定処理を開始しています... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General 一般 - + Monitors モニタ - + Select monitor for output display: 画面出力に使用するスクリーン: - + Display if a single screen スクリーンが1つしかなくても表示する - + Application Startup アプリケーションの起動 - + Show blank screen warning 警告中には、ブランク画面を表示する - + Automatically open the last service 自動的に前回の礼拝プログラムを開く - + Show the splash screen スプラッシュスクリーンを表示 - + Application Settings アプリケーションの設定 - + Prompt to save before starting a new service 新しい礼拝プログラムを開く前に保存を確認する - + Automatically preview next item in service 自動的に次の項目をプレビューする - Slide loop delay: - スライド繰返の遅延: - - - sec - + CCLI Details CCLI詳細 - + SongSelect username: SongSelect ユーザー名: - + SongSelect password: SongSelect パスワード: - + Display Position 表示位置 - + X - + Y - + Height - + Width - + Override display position 表示位置を変更する - + Check for updates to OpenLP OpenLPのバージョン更新の確認 + + + Unblank display when adding new live item + ライブ項目の追加時にブランクを解除 + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language 言語 - + Please restart OpenLP to use your new language setting. 新しい言語設定を使用するために、OpenLPを再起動してください。 @@ -1858,7 +2233,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display OpenLP ディスプレイ @@ -1866,190 +2241,155 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File ファイル(&F) - + &Import インポート(&I) - + &Export エクスポート(&E) - + &View 表示(&V) - + M&ode モード(&O) - + &Tools ツール(&T) - + &Settings 設定(&S) - + &Language 言語(&L) - + &Help ヘルプ(&H) - + Media Manager メディアマネジャー - + Service Manager 礼拝プログラム - + Theme Manager 外観テーママネジャー - + &New 新規作成(&N) - - Ctrl+N - - - - + &Open 開く(&O) - + Open an existing service. 存在する礼拝プログラムを開きます。 - - Ctrl+O - - - - + &Save 保存(&S) - + Save the current service to disk. 現在の礼拝プログラムをディスクに保存します。 - - Ctrl+S - - - - + Save &As... 名前を付けて保存(&A)... - + Save Service As 名前をつけて礼拝プログラムを保存 - + Save the current service under a new name. 現在の礼拝プログラムを新しい名前で保存します。 - - Ctrl+Shift+S - - - - + E&xit 終了(&X) - + Quit OpenLP Open LPを終了 - - Alt+F4 - - - - + &Theme 外観テーマ(&T) - + &Configure OpenLP... OpenLPの設定(&C)... - + &Media Manager メディアマネジャー(&M) - + Toggle Media Manager メディアマネジャーを切り替える - + Toggle the visibility of the media manager. メディアマネジャーの可視性を切り替える。 - - F8 - - - - + &Theme Manager 外観テーママネジャー(&T) - + Toggle Theme Manager 外観テーママネジャーの切り替え - + Toggle the visibility of the theme manager. 外観テーママネジャーの可視性を切り替える。 - - - F10 - - &Service Manager @@ -2067,146 +2407,121 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - 礼拝プログラム - - - &Preview Panel プレビューパネル(&P) - + Toggle Preview Panel プレビューパネルの切り替え - + Toggle the visibility of the preview panel. プレビューパネルの可視性を切り替える。 - - F11 - - - - + &Live Panel ライブパネル(&L) - + Toggle Live Panel ライブパネルの切り替え - + Toggle the visibility of the live panel. ライブパネルの可視性を切り替える。 - - F12 - - - - + &Plugin List プラグイン一覧(&P) - + List the Plugins プラグイン一覧 - - Alt+F7 - - - - + &User Guide ユーザガイド(&U) - + &About バージョン情報(&A) - + More information about OpenLP OpenLPの詳細情報 - - Ctrl+F1 - - - - + &Online Help オンラインヘルプ(&O) - + &Web Site ウェブサイト(&W) - + Use the system language, if available. システム言語を可能であれば使用します。 - + Set the interface language to %s インターフェイス言語を%sに設定 - + Add &Tool... ツールの追加(&T)... - + Add an application to the list of tools. ツールの一覧にアプリケーションを追加。 - + &Default デフォルト(&D) - + Set the view mode back to the default. 表示モードを既定に戻す。 - + &Setup 設定(&S) - + Set the view mode to Setup. ビューモードに設定します。 - + &Live ライブ(&L) - + Set the view mode to Live. 表示モードをライブにします。 - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2215,81 +2530,86 @@ You can download the latest version from http://openlp.org/. http://openlp.org/から最新版がダウンロード可能です。 - + OpenLP Version Updated OpenLPのバージョンアップ完了 - + OpenLP Main Display Blanked OpenLPのプライマリディスプレイがブランクです - + The Main Display has been blanked out OpenLPのプライマリディスプレイがブランクになりました - + Default Theme: %s 既定外観テーマ - + English Please add the name of your language here 日本語 - + Configure &Shortcuts... ショートカットの設定(&S)... - + Close OpenLP OpenLPの終了 - + Are you sure you want to close OpenLP? 本当にOpenLPを終了してもよろしいですか? - - Print the current Service Order. - 現在の礼拝プログラム順序を印刷します。 - - - - Ctrl+P - - - - + &Configure Display Tags 表示タグを設定(&C) - + Open &Data Folder... データフォルダを開く(&D)... - + Open the folder where songs, bibles and other data resides. 賛美、聖書データなどのデータが含まれているフォルダを開く。 - + &Autodetect 自動検出(&A) + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected 項目の選択がありません @@ -2299,75 +2619,91 @@ http://openlp.org/から最新版がダウンロード可能です。選択された礼拝項目を追加(&A - + You must select one or more items to preview. プレビューを見るには、一つ以上の項目を選択してください。 - + You must select one or more items to send live. ライブビューを見るには、一つ以上の項目を選択してください。 - + You must select one or more items. 一つ以上の項目を選択してください。 - + You must select an existing service item to add to. 追加するには、既存の礼拝項目を選択してください。 - + Invalid Service Item 無効な礼拝項目 - + You must select a %s service item. %sの項目を選択してください。 + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List プラグイン一覧 - + Plugin Details プラグイン詳細 - + Status: 状況: - + Active 有効 - + Inactive 無効 - + %s (Inactive) %s (無効) - + %s (Active) %s (有効) - + %s (Disabled) %s (無効) @@ -2375,12 +2711,12 @@ http://openlp.org/から最新版がダウンロード可能です。 OpenLP.PrintServiceDialog - + Fit Page サイズをページに合わせる - + Fit Width サイズをページの横幅に合わせる @@ -2388,7 +2724,7 @@ http://openlp.org/から最新版がダウンロード可能です。 OpenLP.PrintServiceForm - + Options オプション @@ -2408,55 +2744,60 @@ http://openlp.org/から最新版がダウンロード可能です。HTMLとしてコピーする - + Zoom In ズームイン - + Zoom Out ズームアウト - + Zoom Original 既定のズームに戻す - + Other Options その他のオプション - + Include slide text if available 可能であれば、スライドテキストを含める - + Include service item notes 礼拝項目メモを含める - + Include play length of media items メディア項目の再生時間を含める - - Service Order Sheet - 礼拝プログラム順序シート + + Add page break before each text item + テキスト項目毎に改ページ + + + + Service Sheet + OpenLP.ScreenList - + Screen スクリーン - + primary プライマリ @@ -2464,7 +2805,7 @@ http://openlp.org/から最新版がダウンロード可能です。 OpenLP.ServiceItemEditForm - + Reorder Service Item 礼拝項目を並べ替え @@ -2472,217 +2813,257 @@ http://openlp.org/から最新版がダウンロード可能です。 OpenLP.ServiceManager - - Load an existing service - 既存の礼拝プログラムを読み込む - - - - Save this service - 礼拝プログラムを保存 - - - - Select a theme for the service - 礼拝プログラムの外観テーマを選択 - - - + Move to &top 一番上に移動(&t) - + Move item to the top of the service. 選択した項目を最も上に移動する。 - + Move &up 一つ上に移動(&u) - + Move item up one position in the service. 選択した項目を1つ上に移動する。 - + Move &down 一つ下に移動(&d) - + Move item down one position in the service. 選択した項目を1つ下に移動する。 - + Move to &bottom 一番下に移動(&b) - + Move item to the end of the service. 選択した項目を最も下に移動する。 - + &Delete From Service 削除(&D) - + Delete the selected item from the service. 選択した項目を礼拝プログラムから削除する。 - + &Add New Item 新しい項目を追加(&A) - + &Add to Selected Item 選択された項目を追加(&A) - + &Edit Item 項目の編集(&E) - + &Reorder Item 項目を並べ替え(&R) - + &Notes メモ(&N) - + &Change Item Theme 項目の外観テーマを変更(&C) - + File is not a valid service. The content encoding is not UTF-8. 礼拝プログラムファイルが有効でありません。 エンコードがUTF-8でありません。 - + File is not a valid service. 礼拝プログラムファイルが有効でありません。 - + Missing Display Handler ディスプレイハンドラが見つかりません - + Your item cannot be displayed as there is no handler to display it ディスプレイハンドラが見つからないため項目を表示する事ができません - + Your item cannot be displayed as the plugin required to display it is missing or inactive 必要なプラグインが見つからないか無効なため、項目を表示する事ができません - + &Expand all すべて展開(&E) - + Expand all the service items. 全ての項目を展開する。 - + &Collapse all すべて折り畳む(&C) - + Collapse all the service items. 全ての項目を折り畳みます。 - + Open File ファイルを開く - + OpenLP Service Files (*.osz) OpenLP 礼拝プログラムファイル (*.osz) - + Moves the selection down the window. 選択をウィンドウの下に移動する。 - + Move up 上に移動 - + Moves the selection up the window. 選択をウィンドウの上に移動する。 - + Go Live ライブへGO - + Send the selected item to Live. 選択された項目をライブ表示する。 - + Modified Service 礼拝プログラムの編集 - - Notes: - メモ: - - - + &Start Time 開始時間(&S) - + Show &Preview プレビュー表示(&P) - + Show &Live ライブ表示(&L) - + The current service has been modified. Would you like to save this service? 現在の礼拝プログラムは、編集されています。保存しますか? + + + File could not be opened because it is corrupt. + ファイルが破損しているため開けません。 + + + + Empty File + 空のファイル + + + + This service file does not contain any data. + この礼拝プログラムファイルは空です。 + + + + Corrupt File + 破損したファイル + + + + Custom Service Notes: + カスタム礼拝項目メモ: + + + + Notes: + メモ: + + + + Playing time: + 再生時間: + + + + Untitled Service + 無題 + + + + Load an existing service. + 既存の礼拝プログラムを読み込みます。 + + + + Save this service. + 礼拝プログラムを保存します。 + + + + Select a theme for the service. + 礼拝プログラムの外観テーマを選択します。 + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes 礼拝項目メモ @@ -2690,7 +3071,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP OpenLPの設定 @@ -2698,221 +3079,276 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts ショートカットのカスタマイズ - + Action 動作 - + Shortcut ショートカット - - Default: %s - 既定: %s - - - - Custom: - カスタム: - - - - None - 指定なし - - - + Duplicate Shortcut ショートカットの重複 - + The shortcut "%s" is already assigned to another action, please use a different shortcut. このショートカット"%s"は既に他の動作に割り振られています。他のショートカットをご利用ください。 - + Alternate 代替 + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + 動作を選択して下のボタンをクリックし、新しいショートカットを入力してください。 + + + + Default + 初期設定 + + + + Custom + カスタム + + + + Capture shortcut. + ショートカットを入力する。 + + + + Restore the default shortcut of this action. + この動作のショートカットを初期値に戻す。 + + + + Restore Default Shortcuts + ショートカットを初期設定に戻す + + + + Do you want to restore all shortcuts to their defaults? + 全てのショートカットを初期設定に戻しますか? + OpenLP.SlideController - - Move to previous - 前へ移動 - - - - Move to next - 次へ移動 - - - + Hide 隠す - - Move to live - ライブへ移動 - - - - Edit and reload song preview - 編集し再読み込み - - - - Start continuous loop - 繰り返し再生を開始 - - - - Stop continuous loop - 繰り返し再生を停止 - - - - Delay between slides in seconds - 次のスライドまでの遅延 - - - - Start playing media - メディア再生を開始 - - - + Go To - + Blank Screen スクリーンをブランク - + Blank to Theme 外観テーマをブランク - + Show Desktop デスクトップを表示 - + Previous Slide 前スライド - + Next Slide 次スライド - + Previous Service 前の礼拝プログラム - + Next Service 次の礼拝プログラム - + Escape Item 項目をエスケープ + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions 綴りの推奨 - + Formatting Tags タグフォーマット + + + Language: + 言語: + OpenLP.StartTimeForm - - Item Start Time - 項目開始時間 - - - + Hours: 時: - - h - - - - - m - - - - + Minutes: 分: - + Seconds: 秒: + + + Item Start and Finish Time + 項目の開始終了時間 + + + + Start + 開始 + + + + Finish + 終了 + + + + Length + 長さ + + + + Time Validation Error + 時間検証エラー + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image 画像の選択 - + Theme Name Missing 外観テーマ名が不明です - + There is no name for this theme. Please enter one. 外観テーマ名がありません。入力してください。 - + Theme Name Invalid 無効な外観テーマ名 - + Invalid theme name. Please enter one. 無効な外観テーマ名です。入力してください。 - - (%d lines per slide) - (一枚のスライドに付き%d行) + + (approximately %d lines per slide) + @@ -2978,68 +3414,68 @@ The content encoding is not UTF-8. 全体の既定として設定(&G)) - + %s (default) %s (既定) - + You must select a theme to edit. 編集する外観テーマを選択してください。 - + You are unable to delete the default theme. 既定の外観テーマを削除する事はできません。 - + Theme %s is used in the %s plugin. %s プラグインでこの外観テーマは利用されています。 - + You have not selected a theme. 外観テーマの選択がありません。 - + Save Theme - (%s) 外観テーマを保存 - (%s) - + Theme Exported 外観テーマエキスポート - + Your theme has been successfully exported. 外観テーマは正常にエキスポートされました。 - + Theme Export Failed 外観テーマのエキスポート失敗 - + Your theme could not be exported due to an error. エラーが発生したため外観テーマは、エキスポートされませんでした。 - + Select Theme Import File インポート対象の外観テーマファイル選択 - + File is not a valid theme. The content encoding is not UTF-8. ファイルは無効な外観テーマです。文字コードがUTF-8ではありません。 - + File is not a valid theme. 無効な外観テーマファイルです。 @@ -3059,47 +3495,47 @@ The content encoding is not UTF-8. 外観テーマのエキスポート(&E) - + You must select a theme to rename. 名前を変更する外観テーマを選択してください。 - + Rename Confirmation 名前変更確認 - + Rename %s theme? %s外観テーマの名前を変更します。宜しいですか? - + You must select a theme to delete. 削除する外観テーマを選択してください。 - + Delete Confirmation 削除確認 - + Delete %s theme? %s 外観テーマを削除します。宜しいですか? - + Validation Error 検証エラー - + A theme with this name already exists. 同名の外観テーマが既に存在します。 - + OpenLP Themes (*.theme *.otz) OpenLP 外観テーマ (*.theme *.otz) @@ -3107,242 +3543,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard 外観テーマガイド - + Welcome to the Theme Wizard 外観テーマガイドをようこそ - + Set Up Background 背景設定 - + Set up your theme's background according to the parameters below. 以下の項目に応じて、外観テーマに使用する背景を設定してください。 - + Background type: 背景の種類: - + Solid Color 単色 - + Gradient グラデーション - + Color: 色: - + Gradient: グラデーション: - + Horizontal - + Vertical - + Circular 放射状 - + Top Left - Bottom Right 左上 - 右下 - + Bottom Left - Top Right 左下 - 右上 - + Main Area Font Details 中央表示エリアのフォント詳細 - + Define the font and display characteristics for the Display text 中央エリアの表示のための文字設定とフォントを定義してください - + Font: フォント: - + Size: 文字サイズ: - + Line Spacing: 文字間: - + &Outline: アウトライン(&O): - + &Shadow: 影(&S): - + Bold 太字 - + Italic 斜体 - + Footer Area Font Details フッターフォント詳細 - + Define the font and display characteristics for the Footer text フッター表示のための文字設定とフォントを定義してください - + Text Formatting Details テキストフォーマット詳細 - + Allows additional display formatting information to be defined 追加の表示フォーマット情報が定義される事を許可する - + Horizontal Align: 水平位置: - + Left 左揃え - + Right 右揃え - + Center 中央揃え - + Output Area Locations 出力エリアの場所 - + Allows you to change and move the main and footer areas. 中央エリアとフッターエリアの場所が変更される事を許可する。 - + &Main Area 中央エリア(&M) - + &Use default location 既定の場所を使う(&U) - + X position: X位置: - + px - + Y position: Y位置: - + Width: 幅: - + Height: 高: - + Use default location 既定の場所を使う - + Save and Preview 保存とプレビュー - + View the theme and save it replacing the current one or change the name to create a new theme 外観テーマを表示し、現在の外観テーマを置き換えるか名前を変更して新しい外観テーマを作成し、保存する - + Theme name: 外観テーマ名: - + 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. このガイドは、あなたの外観テーマを作成編集する手助けをします。次へをクリックして、背景を選択してください。 - + Transitions: 切り替え: - + &Footer Area フッター(&F) - + Edit Theme - %s 外観テーマ編集 - %s @@ -3350,42 +3786,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme 全体外観テーマ - + Theme Level 外観テーマレベル - + S&ong Level 賛美レベル(&O) - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. データベース内のそれぞれの賛美の外観テーマを使用します。賛美に外観テーマが設定されていない場合、礼拝プログラムの外観テーマを使用します。礼拝プログラムに外観テーマが設定されていなければ、全体設定の外観テーマを使用します。 - + &Service Level 礼拝プログラムレベル(&S) - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. 礼拝プログラムの外観テーマを用い、賛美個々の外観テーマを上書きします。礼拝プログラムに外観テーマが設定されていなければ、全体設定の外観テーマを使用します。 - + &Global Level 全体レベル(&G) - + Use the global theme, overriding any themes associated with either the service or the songs. 全体外観テーマを用い、すべての礼拝プログラムや賛美に関連付けられた外観テーマを上書きします。 @@ -3393,421 +3829,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error エラー - + &Delete 削除(&D) - + Delete the selected item. 選択された項目を削除。 - + Move selection up one position. 選択された項目を一つ上げる。 - + Move selection down one position. 選択された項目を一つ下げる。 - + About ソフトウェア情報 - + &Add 追加(&A) - + Advanced 詳細設定 - + All Files 全てのファイル - + Bottom 下部 - + Browse... 参照... - + Cancel キャンセル - + CCLI number: CCLI番号: - + Create a new service. 新規礼拝プログラムを作成します。 - + &Edit 編集(&E) - + Empty Field 空のフィールド - + Export エキスポート - + pt Abbreviated font pointsize unit - + Image 画像 - + Import インポート - + Length %s 長さ %s - + Live ライブ - + Live Background Error ライブ背景エラー - - Live Panel - ライブパネル - - - + Load 読み込み - + Middle 中央部 - + New 新規 - + New Service 新しい礼拝プログラム - + New Theme 新しい外観テーマ - + No File Selected Singular ファイルが選択されていません - + No Files Selected Plural ファイルが一つも選択されていません - + No Item Selected Singular 項目が選択されていません - + No Items Selected Plural 一つの項目も選択されていません - + openlp.org 1.x - + OpenLP 2.0 - - Open Service - 礼拝プログラムを開く - - - + Preview プレビュー - - Preview Panel - プレビューパネル - - - - Print Service Order - 礼拝プログラム順序を印刷 - - - + Replace Background 背景を置換 - - Replace Live Background - ライブの背景を置換 - - - + Reset Background 背景をリセット - - Reset Live Background - ライブの背景をリセット - - - + s The abbreviated unit for seconds - + Save && Preview 保存してプレビュー - + Search 検索 - + You must select an item to delete. 削除する項目を選択して下さい。 - + You must select an item to edit. 編集する項目を選択して下さい。 - + Save Service 礼拝プログラムの保存 - + Service 礼拝プログラム - + Start %s 開始 %s - + Theme Singular 外観テーマ - + Themes Plural 外観テーマ - + Top 上部 - + Version バージョン - + &Vertical Align: 垂直整列(&V): - + Finished import. インポートの完了。 - + Format: 書式: - + Importing インポート中 - + Importing "%s"... "%s"をインポート中... - + Select Import Source インポート元を選択 - + Select the import format and the location to import from. インポート形式とインポート元を選択して下さい。 - + The openlp.org 1.x 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. The openlp.org 1.xの取込機能が、Pythonの拡張機能がないためオフになっています。取込機能をお使いになられる場合、python-sqlite拡張機能をインストール必要があります。 - + Open %s File %sファイルを開く - + %p% - + Ready. 準備完了。 - + Starting import... インポートを開始しています.... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong インポート元となる%sファイルを最低一つ選択する必要があります。 - + Welcome to the Bible Import Wizard 聖書インポートガイドへようこそ - + Welcome to the Song Export Wizard 賛美エキスポートガイドへようこそ - + Welcome to the Song Import Wizard 賛美インポートガイドへようこそ - + Author Singular アーティスト - + Authors Plural アーティスト - + Song Book Singular アルバム - + Song Books Plural アルバム - + Song Maintenance 賛美の保守 - + Topic Singular 題目 - + Topics Plural 題目 - + © Copyright symbol. © + + + Continuous + 連続 + + + + Default + 初期設定 + + + + Display style: + 表示スタイル: + + + + File + ファイル + + + + Help + ヘルプ + + + + h + The abbreviated unit for hours + + + + + Layout style: + レイアウトスタイル: + + + + Live Toolbar + ライブツールバー + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + OpenLPは既に実行されています。続けますか? + + + + Settings + 設定 + + + + Tools + ツール + + + + Verse Per Slide + スライドに1節 + + + + Verse Per Line + 1行に1節 + + + + View + 表示 + + + + Duplicate Error + 重複エラー + + + + Unsupported File + サポートされていないファイル + + + + Title and/or verses not found + タイトル/歌詞が見つかりません + + + + XML syntax error + XML構文エラー + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags 表示タグを設定 @@ -3819,31 +4362,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>プレゼンテーションプラグイン</strong><br />プレゼンテーションプラグインは、外部のプログラムを使用してプレゼンテーションを表示する機能を提供します。使用可能なプログラムは、ドロップダウンボックスから選択できます。 - - - Load a new Presentation - 新しいプレゼンテーションを読み込み - - - - Delete the selected Presentation - 選択したプレゼンテーションを削除 - - - - Preview the selected Presentation - 選択したプレゼンテーションをプレビュー - - - - Send the selected Presentation live - 選択したプレゼンテーションをライブへ送る - - - - Add the selected Presentation to the service - 選択したプレゼンテーションを礼拝プログラムに追加 - Presentation @@ -3862,61 +4380,81 @@ The content encoding is not UTF-8. container title プレゼンテーション + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) プレゼンテーション選択 - + Automatic 自動 - + Present using: 使用プレゼン: - + File Exists ファイルが存在します - + A presentation with that filename already exists. そのファイル名のプレゼンテーションは既に存在します。 - - Unsupported File - サポートされていないファイル - - - + This type of presentation is not supported. このタイプのプレゼンテーションはサポートされておりません。 - + Presentations (%s) プレゼンテーション (%s) - + Missing Presentation 不明なプレゼンテーション - + The Presentation %s no longer exists. プレゼンテーション%sが見つかりません。 - + The Presentation %s is incomplete, please reload. プレゼンテーション%sは不完全です。再度読み込んでください。 @@ -3924,17 +4462,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers 使用可能なコントローラ - + Allow presentation application to be overriden プレゼンテーションアプリケーションに上書きを許可 - + %s (unavailable) %s (利用不可) @@ -3942,71 +4480,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. <strong>遠隔操作プラグイン</strong><br />遠隔操作プラグインは、ウェブブラウザや遠隔操作APIを使用して、他のコンピュータ上のOpenLPを操作する機能を提供します。 - + Remote name singular 遠隔操作 - + Remotes name plural 遠隔操作 - + Remote container title 遠隔操作 + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + 礼拝プログラム + + + + Slide Controller + + + + + Alerts + 警告 + + + + Search + 検索 + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + ライブへGO + + + + Add To Service + + + + + No Results + + + + + Options + オプション + + RemotePlugin.RemoteTab - + Serve on IP address: 待ち受けるIPアドレス: - + Port number: ポート番号: - + Server Settings サーバ設定 + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking 賛美の利用記録(&S) - + &Delete Tracking Data 利用記録を削除(&D) - + Delete song usage data up to a specified date. 削除する利用記録の対象となるまでの日付を指定してください。 - + &Extract Tracking Data 利用記録の抽出(&E) - + Generate a report on song usage. 利用記録のレポートを出力する。 @@ -4021,53 +4662,58 @@ The content encoding is not UTF-8. 賛美の利用記録の切り替える。 - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>SongUsage Plugin</strong><br />このプラグインは、賛美の利用頻度を記録します。 - + SongUsage name singular 利用記録 - + SongUsage name plural 利用記録 - + SongUsage container title 利用記録 + + + Song Usage + 利用記録 + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data 利用記録削除 - + Delete Selected Song Usage Events? 選択された賛美の利用記録を削除しますか? - + Are you sure you want to delete selected Song Usage data? 選択された賛美の利用記録を削除します。よろしいですか? - + Deletion Successful 正常に削除されました - + All requested data has been deleted successfully. 正常に削除されました。 @@ -4075,42 +4721,42 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction 賛美利用記録の抽出 - + Select Date Range 賛美利用の期間 - + to から - + Report Location レポートの出力 - + Output File Location レポートの出力場所 - + usage_detail_%s_%s.txt - + Report Creation レポート生成 - + Report %s has been successfully created. @@ -4119,12 +4765,12 @@ has been successfully created. - は正常に生成されました。 - + Output Path Not Selected 出力先が選択されていません - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. 賛美利用記録レポートの出力先が無効です。コンピューター上に存在するフォルダを選択して下さい。 @@ -4132,211 +4778,211 @@ has been successfully created. SongsPlugin - + &Song 賛美(&S) - + Import songs using the import wizard. インポートウィザードを使用して賛美をインポートします。 - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>賛美プラグイン</strong><br />賛美プラグインは、賛美を表示し管理する機能を提供します。 - + &Re-index Songs 賛美のインデックスを再作成(&R) - + Re-index the songs database to improve searching and ordering. 賛美データベースのインデックスを再作成し、検索や並べ替えを速くします。 - + Reindexing songs... 賛美のインデックスを再作成中... - - Add a new Song - 賛美を追加 - - - - Edit the selected Song - 選択した賛美を編集 - - - - Delete the selected Song - 選択した賛美を削除 - - - - Preview the selected Song - 選択した賛美をプレビュー - - - - Send the selected Song live - 選択した賛美をライブへ送る - - - - Add the selected Song to the service - 選択した賛美を礼拝プログラムに追加 - - - + Song name singular 賛美 - + Songs name plural 賛美 - + Songs container title 賛美 - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) 日本語 (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding 文字コード - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. 文字コード設定は、文字が正常に表示されるのに必要な設定です。通常、既定設定で問題ありません。 - + Please choose the character encoding. The encoding is responsible for the correct character representation. 文字コードを選択してください。文字が正常に表示されるのに必要な設定です。 - + Exports songs using the export wizard. エキスポートガイドを使って賛美をエキスポートする。 + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance アーティストを保守 - + Display name: 表示名: - + First name: 名: - + Last name: 姓: - + You need to type in the first name of the author. 名を入力してください。 - + You need to type in the last name of the author. 姓を入力してください。 - + You have not set a display name for the author, combine the first and last names? 表示名が設定されていません。名と姓を合わせますか? @@ -4344,190 +4990,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d - 賛美(%d/%d)をインポートしています + + The file does not have a valid extension. + ファイルの拡張子が無効です。 + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + %s によって管理されています SongsPlugin.EditSongForm - + Song Editor ソングエディタ - + &Title: タイトル(&T): - + Alt&ernate title: サブタイトル(&e): - + &Lyrics: 賛美詞(&L): - + &Verse order: 節順(&V): - + Ed&it All 全て編集(&E) - + Title && Lyrics タイトル && 賛美詞 - + &Add to Song 賛美に追加(&A) - + &Remove 削除(&R) - + &Manage Authors, Topics, Song Books アーティスト、題目、アルバムを管理(&M) - + A&dd to Song 賛美に追加(&A) - + R&emove 削除(&e) - + Book: 書名: - + Number: ナンバー: - + Authors, Topics && Song Book アーティスト、題目 && アルバム - + New &Theme 新しい外観テーマ(&N) - + Copyright Information 著作権情報 - + Comments コメント - + Theme, Copyright Info && Comments 外観テーマ、著作情報 && コメント - + Add Author アーティストを追加 - + This author does not exist, do you want to add them? アーティストが存在しません。追加しますか? - + This author is already in the list. 既にアーティストは一覧に存在します。 - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. 有効なアーティストを選択してください。一覧から選択するか新しいアーティストを入力し、"賛美にアーティストを追加"をクリックしてください。 - + Add Topic トピックを追加 - + This topic does not exist, do you want to add it? このトピックは存在しません。追加しますか? - + This topic is already in the list. このトピックは既に存在します。 - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. 有効なトピックを選択してください。一覧から選択するか新しいトピックを入力し、"賛美にトピックを追加"をクリックしてください。 - + You need to type in a song title. 賛美のタイトルを入力する必要があります。 - + You need to type in at least one verse. 最低一つのバースを入力する必要があります。 - + Warning 警告 - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. バース順序が無効です。%sに対応するバースはありません。%sは有効です。 - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? %sはバース順序で使われていません。本当にこの賛美を保存しても宜しいですか? - + Add Book アルバムを追加 - + This song book does not exist, do you want to add it? アルバムが存在しません、追加しますか? - + You need to have an author for this song. アーティストを入力する必要があります。 - + You need to type some text in to the verse. バースにテキストを入力する必要があります。 @@ -4535,259 +5189,277 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse バース編集 - + &Verse type: バースのタイプ(&): - + &Insert 挿入(&I) + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard 賛美エキスポートガイド - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. このガイドは、あなたの賛美がオープンなOpenLyrics worship song形式としてエキスポートする手伝いをします。 - + Select Songs 賛美を選択して下さい - + Check the songs you want to export. エキスポートしたい賛美をチェックして下さい。 - + Uncheck All すべてのチェックを外す - + Check All すべてをチェックする - + Select Directory フォルダを選択して下さい - - Select the directory you want the songs to be saved. - 賛美を保存するフォルダを選択して下さい。 - - - + Directory: フォルダ: - + Exporting エキスポート中 - + Please wait while your songs are exported. 賛美をエキスポートしている間今しばらくお待ちください。 - + You need to add at least one Song to export. エキスポートする最低一つの賛美を選択する必要があります。 - + No Save Location specified 保存先が指定されていません - + Starting export... エキスポートを開始しています... - + You need to specify a directory. フォルダを選択して下さい。 - + Select Destination Folder 出力先フォルダを選択して下さい + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files ドキュメント/プレゼンテーションファイル選択 - + Song Import Wizard 賛美インポートガイド - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. このガイドは、様々なフォーマットの賛美をインポートする手助けをします。次へをクリックし、インポートするファイルのフォーマットを選択してください。 - + Generic Document/Presentation 汎用ドキュメント/プレゼンテーション - + Filename: ファイル名: - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. OpenLyricsのインポートは未開発です。次のバージョンにご期待ください。 - + Add Files... ファイルの追加... - + Remove File(s) ファイルの削除 - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Songs of Fellowshipの取込み機能は、お使いのパソコンにOpenOffice.orgがインストールされていないためご利用になれません。 - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - 汎用的なドキュメント/プレゼンテーション取込機能は、お使いのパソコンにOpenOffice.orgがインストールされていないためご利用になれません。 - - - + Please wait while your songs are imported. 賛美がインポートされるまでしばらくお待ちください。 - - Administered by %s - %s によって管理されています - - - + OpenLP 2.0 Databases OpenLP 2.0 データベース - + openlp.org v1.x Databases openlp.org v1.x データベース - + Words Of Worship Song Files - + Words Of Worship Song ファイル - + You need to specify at least one document or presentation file to import from. インポート対象となる最低一つのドキュメント又はプレゼンテーションファイルを選択する必要があります。 - + Songs Of Fellowship Song Files Songs Of Fellowship Song ファイル - + SongBeamer Files SongBeamerファイル - + SongShow Plus Song Files SongShow Plus Songファイル - + Foilpresenter Song Files Foilpresenter Song ファイル + + + Copy + コピー + + + + Save to File + ファイルに保存 + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - アーティスト、トピックとアルバムの一覧を保守 - - - + Titles タイトル - + Lyrics 賛美詞 - + Delete Song(s)? これらの賛美を削除しますか? - + CCLI License: CCLI ライセンス: - + Entire Song 賛美全体 - + Are you sure you want to delete the %n selected song(s)? 選択された%n件の賛美を削除します。宜しいですか? + + + Maintain the lists of authors, topics and books. + アーティスト、トピックとアルバムの一覧を保守します。 + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + 有効なopenlp.org v1.xデータベースではありません。 + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - 賛美(%d/%d)をインポートしています。 + + Not a valid OpenLP 2.0 song database. + 有効なOpenLP 2.0データベースではありません。 SongsPlugin.OpenLyricsExport - + Exporting "%s"... 「%s」をエキスポートしています... @@ -4795,22 +5467,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance アルバムの保守 - + &Name: 名前(&N): - + &Publisher: 発行元(&P): - + You need to type in a name for the book. アルバム名を入力してください。 @@ -4818,12 +5490,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. エキスポート完了。 - + Your song export failed. 賛美のエキスポートに失敗しました。 @@ -4831,15 +5503,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright 著作権 + + + The following songs could not be imported: + 以下の賛美はインポートできませんでした: + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. 賛美のインポートに失敗しました。 @@ -4847,107 +5539,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. アーティストが追加できませんでした。 - + This author already exists. このアーティストは既に登録されています。 - + Could not add your topic. トピックの追加に失敗しました。 - + This topic already exists. トピックが既に存在します。 - + Could not add your book. アルバムが追加できませんでした。 - + This book already exists. 既にこのアルバムが存在します。 - + Could not save your changes. 変更が保存できませんでした。 - + Could not save your modified author, because the author already exists. 既にアーティストが登録されているため、変更を保存できませんでした。 - + Could not save your modified topic, because it already exists. 既に題目登録されているため、変更を保存できませんでした。 - + Delete Author アーティスト削除 - + Are you sure you want to delete the selected author? 選択されたアーティストを削除しますか? - + This author cannot be deleted, they are currently assigned to at least one song. 最低一つの賛美に割り振られているため、このアーティストを削除できませんでした。 - + Delete Topic トピックの削除 - + Are you sure you want to delete the selected topic? 選択されたトピックを削除しますか? - + This topic cannot be deleted, it is currently assigned to at least one song. 最低一つの賛美に割り振られているため、このトピックを削除できませんでした。 - + Delete Book アルバム削除 - + Are you sure you want to delete the selected book? 選択されたアルバムを削除しますか? - + This book cannot be deleted, it is currently assigned to at least one song. 最低一つの賛美に割り振られているため、このアルバムを削除できませんでした。 - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? アーティスト%sは既に存在します。既存のアーティスト%sを用い、アーティスト%sで賛美を作りますか? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? 題目%sは既に存在します。既存の題目%sを用い、題目%sで賛美を作りますか? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? アルバム%sは既に存在します。既存のアルバム%sを用い、アルバム%sで賛美を作りますか? @@ -4955,27 +5647,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode 賛美モード - + Enable search as you type 入力と同時に検索する - + Display verses on live tool bar ライブツールバーにバースを表示 - + Update service from song edit 編集後に礼拝プログラムを更新 - + Add missing songs when opening service 礼拝プログラムを開いたときに存在しない賛美を追加 @@ -4983,17 +5675,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance 題目保守 - + Topic name: 題目名: - + You need to type in a topic name. 題目名を入力してください。 @@ -5001,39 +5693,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse バース - + Chorus コーラス - + Bridge ブリッジ - + Pre-Chorus 間奏 - + Intro 序奏 - + Ending エンディング - + Other その他 + + ThemeTab + + + Themes + 外観テーマ + + diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 19693e6df..65788fa9d 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -3,23 +3,23 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? - + No Parameter Found - + No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? @@ -28,34 +28,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert 경고(&A) - + Show an alert message. 에러 메세지를 보여줍니다. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>경고 플러그인</strong><br />경고 플러그인은 디스플레이 화면에 경고를 출력하는 것을 통제합니다. - + Alert name singular - + Alerts name plural 경고 - + Alerts container title 경고 @@ -64,47 +64,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message 경고 메세지 - + Alert &text: 경고 문구(&T) - + &New 새로 만들기(&N) - + &Save 저장(&S) - + Displ&ay 출력(&A) - + Display && Cl&ose 출력 && 닫기(&O) - + New Alert 새 경고 - + You haven't specified any text for your alert. Please type in some text before clicking New. 경고 문구를 입력하지 않았습니다. 새로 만들기를 하려면 문구를 입력해주세요. - + &Parameter: @@ -120,32 +120,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font 글꼴 - + Font name: 글꼴: - + Font color: 글꼴색: - + Background color: 배경색: - + Font size: 글꼴 크기: - + Alert timeout: 경고 타임아웃: @@ -153,51 +153,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error - + Parse Error - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. @@ -205,122 +208,132 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible 성경(&B) - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>성경 플러그인</strong><br />성경 플러그인은 서비스 중에 성경 구절을 출력할 수 있는 기능을 제공합니다. - - - - Import a Bible - - - - - Add a new Bible - - - - - Edit the selected Bible - - - - - Delete the selected Bible - - - - - Preview the selected Bible - - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - - - - + Bible name singular ?? - + Bibles name plural 성경 - + Bibles container title 성경 - + No Book Found - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error 성경 참조 오류 - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -332,7 +345,7 @@ Book Chapter:Verse-Chapter:Verse - + No Bibles Available @@ -340,45 +353,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display 절 출력 - + Only show new chapter numbers 새로운 장번호만 보이기 - - - Layout style: - 배치 스타일: - - - - Display style: - 출력 스타일: - Bible theme: 성경 테마: - - - Verse Per Slide - 슬라이드당 절 수 - - - - Verse Per Line - 줄당 절 수 - - - - Continuous - 연속해서 보기 - No Brackets @@ -412,257 +400,333 @@ Changes do not affect verses already in the service. + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard 성경 가져오기 마법사 - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. 이 마법사는 각종 형식의 성경을 가져오도록 안내해드립니다. 다음 버튼을 눌러서 가져올 성경의 형식을 선택해 주세요. - + Web Download 웹 다운로드 - + Location: 위치: - + Crosswalk - + BibleGateway - + Bible: 성경: - + Download Options 다운로드 옵션 - + Server: 서버: - + Username: 사용자 이름: - + Password: 비밀번호: - + Proxy Server (Optional) 프록시 서버 (선택 사항) - + License Details 라이센스 정보 - + Set up the Bible's license details. 성경의 라이센스 정보를 설정하세요. - + Version name: 버전 이름: - + Copyright: 저작권: - + Please wait while your Bible is imported. 성경 가져오기가 진행되는 동안 기다려주세요. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + Bible Exists - + Your Bible import failed. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + This Bible already exists. Please import a different Bible or first delete the existing one. - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Permissions: - + CSV File - + Bibleserver - + Bible file: - - Testaments file: - - - - + Books file: - + Verses file: - - You have not specified a testaments file. Do you want to proceed with the import? + + openlp.org 1.x Bible Files - - openlp.org 1.x Bible Files + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick ?? - + Find: - - Results: - - - - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - - Clear - - - - - Keep - - - - + Second: - + Scripture Reference + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -671,34 +735,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + 버전 이름: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + + + + + Bible Exists + + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - + Display footer @@ -706,192 +997,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: - + You need to type in a title. - + You need to add at least one slide - + Ed&it All + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title + + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - - - - - Add a new Image - - - - - Edit the selected Image - - - - - Delete the selected Image - - - - - Preview the selected Image - - - - - Send the selected Image live - - - - - Add the selected Image to the service - - - - + Image name singular - + Images name plural - + Images container title + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment @@ -899,38 +1137,38 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) - + You must select an image to delete. - + You must select an image to replace the background with. - + Missing Image(s) - + The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + There was a problem replacing your background, the image file "%s" no longer exists. @@ -938,98 +1176,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - - Media + name singular + + + + + Media name plural - + Media container title + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media - + You must select a media file to delete. - + Missing Media File - + The file %s no longer exists. - + You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Videos (%s);;Audio (%s);;%s (*) @@ -1037,12 +1275,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display - + Use Phonon for video playback @@ -1050,56 +1288,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + License - + Contribute - + build %s - + 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 below for more details. - + Project Lead %s @@ -1164,184 +1403,310 @@ Final Credit - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: 배경색: - + Image file: - + Open File + + + Preview items when clicked in Media Manager + + + + + Advanced + + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Error Occurred - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1349,23 +1714,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report - + Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1383,7 +1748,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1405,17 +1770,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename - + New File Name: - + File Copy @@ -1423,17 +1788,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1441,102 +1806,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - + First Time Wizard - + Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + Activate required Plugins - + Select the Plugins you wish to use. - + Songs - + Custom Text - + Bible - + Images - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1545,198 +1905,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Default Settings - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - Slide loop delay: - - - - sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - + Check for updates to OpenLP + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1744,7 +2129,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display @@ -1752,188 +2137,153 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New 새로 만들기(&N) - - Ctrl+N - - - - + &Open - + Open an existing service. - - Ctrl+O - - - - + &Save 저장(&S) - + Save the current service to disk. - - Ctrl+S - - - - + Save &As... - + Save Service As - + Save the current service under a new name. - - Ctrl+Shift+S - - - - + E&xit - + Quit OpenLP - - Alt+F4 - - - - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - - F8 - - - - + &Theme Manager - + Toggle Theme Manager - - - Toggle the visibility of the theme manager. - - - F10 + Toggle the visibility of the theme manager. @@ -1953,227 +2303,207 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - - - - &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - - F11 - - - - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - - F12 - - - - + &Plugin List - + List the Plugins - - Alt+F7 - - - - + &User Guide - + &About - + More information about OpenLP - - Ctrl+F1 - - - - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s - + English Please add the name of your language here - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - - Print the current Service Order. - - - - - Ctrl+P - - - - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Configure Display Tags - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected @@ -2183,75 +2513,91 @@ You can download the latest version from http://openlp.org/. - + You must select one or more items to preview. - + You must select one or more items to send live. - + You must select one or more items. - + You must select an existing service item to add to. - + Invalid Service Item - + You must select a %s service item. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive - + %s (Inactive) - + %s (Active) - + %s (Disabled) @@ -2259,12 +2605,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -2272,7 +2618,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options @@ -2292,55 +2638,60 @@ You can download the latest version from http://openlp.org/. - + Zoom In - + Zoom Out - + Zoom Original - + Other Options - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2348,7 +2699,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -2356,216 +2707,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + Move item to the top of the service. - + Move &up - + Move item up one position in the service. - + Move &down - + Move item down one position in the service. - + Move to &bottom - + Move item to the end of the service. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + OpenLP Service Files (*.osz) - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + Modified Service - - Notes: - - - - + &Start Time - + Show &Preview - + Show &Live - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes @@ -2573,7 +2964,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2581,220 +2972,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - - - - - Move to next - - - - + Hide - - Move to live - - - - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Start playing media - - - - + Go To - - Edit and reload song preview - - - - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2861,68 +3307,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. - + Theme %s is used in the %s plugin. @@ -2942,47 +3388,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -2990,242 +3436,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s @@ -3233,42 +3679,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3276,421 +3722,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error 에러 - + &Delete 삭제(&D) - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Add - + Advanced - + All Files - + Create a new service. - + &Edit - + Import - + Length %s - + Live - + Load - + New - + New Service - + OpenLP 2.0 - - Open Service - - - - + Preview 미리 보기 - + Replace Background - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + Save Service - + Service - + Start %s - + &Vertical Align: - + Top - + Middle 가운데 - + Bottom 아래 - + About - + Browse... - + Cancel - + CCLI number: - + Empty Field - + Export - + pt Abbreviated font pointsize unit - + Image - + Live Background Error - - Live Panel - - - - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural - + openlp.org 1.x - - Preview Panel - - - - - Print Service Order - - - - + s The abbreviated unit for seconds - + Save && Preview - + Search - + You must select an item to delete. - + You must select an item to edit. - + Theme Singular - + Themes Plural - + Version - + Finished import. - + Format: 형식 - + Importing 가져오는 중 - + Importing "%s"... - + Select Import Source 가져올 원본 선택 - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% - + Ready. - + Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard 성경 가져오기 마법사에 오신 것을 환영합니다. - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural - + © Copyright symbol. - + Song Book Singular - + Song Books Plural - + Song Maintenance - + Topic Singular - + Topics Plural + + + Continuous + 연속해서 보기 + + + + Default + + + + + Display style: + 출력 스타일: + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + 배치 스타일: + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + 슬라이드당 절 수 + + + + Verse Per Line + 줄당 절 수 + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3702,31 +4255,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3745,61 +4273,81 @@ The content encoding is not UTF-8. container title + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) - + Automatic - + Present using: - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3807,17 +4355,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3825,71 +4373,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + + + + + Slide Controller + + + + + Alerts + + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3904,53 +4555,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3958,54 +4614,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4013,211 +4669,211 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Song name singular - + Songs name plural - + Songs container title - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Exports songs using the export wizard. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance - + Display name: - + First name: - + Last name: - + You need to type in the first name of the author. - + You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? @@ -4225,190 +4881,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4416,259 +5080,277 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + Check the songs you want to export. - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files + + + Copy + + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Titles - + Lyrics - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4676,22 +5358,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: - + &Publisher: - + You need to type in a name for the book. @@ -4699,12 +5381,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4712,15 +5394,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4728,107 +5430,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified topic, because it already exists. - + Delete Author - + Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book - + Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. - + Could not save your modified author, because the author already exists. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4836,27 +5538,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4864,17 +5566,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: - + You need to type in a topic name. @@ -4882,39 +5584,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse - + Chorus - + Bridge - + Pre-Chorus - + Intro - + Ending - + Other + + ThemeTab + + + Themes + + + diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 8986f7674..ed248b010 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -3,110 +3,112 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? - + Du har ikke angitt et parameter å erstatte. +Vil du fortsette likevel? - + No Parameter Found - + Ingen parametre funnet - + No Placeholder Found - + Ingen plassholder funnet - + The alert text does not contain '<>'. Do you want to continue anyway? - + Varselteksten inneholder ikke '<>'. +Vil du fortsette likevel? AlertsPlugin - + &Alert &Varsel - + Show an alert message. Vis en varselmelding. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Varsel Tilleg</strong><br />Varsels tillegg kontrolleren viser barn-varsel på visnings skjermen - + Alert name singular - + Varsel - + Alerts name plural Varsel - + Alerts container title - Varsel + Varsler AlertsPlugin.AlertForm - + Alert Message - Varsel-melding + Varselmelding - + Alert &text: - Varsel &tekst: + Varsel&tekst: - + &New &Ny - + &Save &Lagre - + Displ&ay Vis - + Display && Cl&ose Vis && Lukk - + New Alert Nytt Varsel - + You haven't specified any text for your alert. Please type in some text before clicking New. Du har ikke spesifisert noen tekst for varselet. Vennligst skriv inn en tekst før du trykker Ny. - + &Parameter: - + &Parameter: @@ -114,213 +116,227 @@ Do you want to continue anyway? Alert message created and displayed. - Varsel beskjed er laget og vist + Varselmeldingen er laget og vist. AlertsPlugin.AlertsTab - + Font - Skrifttype + Skrifttype - + Font name: - Skrift navn: + Skriftnavn: - + Font color: - Skrift farge + Skriftfarge: - + Background color: - Bakgrunns farge: + Bakgrunnsfarge: - + Font size: - Skrift størrelse + Skriftstørrelse: - + Alert timeout: - Varsel varighet: + Varselvarighet: BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importerer bøker... %s - + Importing verses from %s... Importing verses from <book name>... + Importerer vers fra %s... + + + + Importing verses... done. + Importerer vers... ferdig. + + + + BiblePlugin + + + &Upgrade older Bibles - - Importing verses... done. + + Upgrade the Bible databases to the latest format. BiblePlugin.HTTPBible - + Download Error - + Nedlastningsfeil - + Parse Error - + Analysefeil - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Det oppstod et problem ved nedlastingen av de valgte versene. Vennligst sjekk internettilkoblingen, dersom denne feilen vedvarer, vær vennlig å rapportere feilen. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - + Det oppstod et problem ved uthenting av de valgte versene. Dersom denne feilen vedvarer, vær vennlig å rapportere feilen. BiblePlugin.MediaItem - + Bible not fully loaded. + Bibelen er ikke ferdiglastet. + + + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + Du kan ikke kombinere enkle og doble bibelverssøkeresultat. Vil du fjerne søkeresultatene og starte et nytt søk? + + + + Information - - You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. BiblesPlugin - + &Bible &Bibel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - - - - - Import a Bible - - - - - Add a new Bible - - - - - Edit the selected Bible - - - - - Delete the selected Bible - - - - - Preview the selected Bible - - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - - - - + Bible name singular Bibel - + Bibles name plural Bibler - + Bibles container title Bibler - + No Book Found - Ingen bøker funnet + Ingen bok funnet - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + Ingen samsvarende bok ble funnet i denne bibelen. Sjekk at du har stavet navnet på boken riktig. + + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. BiblesPlugin.BibleManager - + Scripture Reference Error - + Bibelreferansefeil - + Web Bible cannot be used - + Nettbibel kan ikke brukes - + Text Search is not available with Web Bibles. - + Tekstsøk er ikke tilgjengelig med nettbibler. - + 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. - + Du har ikke angitt et søkeord. +Du kan skille ulike søkeord med mellomrom for å søke etter alle søkeordene dine, og du kan skille dem med komma for å søke etter ett av dem. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Det er ingen bibler installert. Vennligst bruk importeringsveiviseren for å installere en eller flere bibler. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -329,375 +345,661 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + Din bibelreferanse er enten ikke støttet av OpenLP eller ugyldig. Vennligst kontroller at referansen oppfyller et av de følgende mønstre: + +Bok Kapittel +Bok Kapittel-Kapittel +Bok Kapittel:Vers-Vers +Bok Kapittel:Vers-Vers,Vers-Vers +Bok Kapittel:Vers-Vers,Kapittel:Vers-Vers +Bok Kapittel:Vers-Kapittel:Vers - + No Bibles Available - + Ingen bibler tilgjengelig BiblesPlugin.BiblesTab - - - Verse Display - Vers visning - + Verse Display + Versvisning + + + Only show new chapter numbers - Bare vis nye kapittel nummer - - - - Layout style: - - - - - Display style: - Visningstil: + Bare vis nye kapittelnummer Bible theme: Bibel tema: - - - Verse Per Slide - Vers pr side - - - - Verse Per Line - Vers pr linje - - - - Continuous - Kontinuerlig - No Brackets - + Ingen klammer ( And ) - ( og ) + ( Og ) { And } - { og } + { Og } [ And ] - [ og ] + [ Og ] Note: Changes do not affect verses already in the service. - + Merk: +Endringer påvirker ikke vers som alt er lagt til møtet. Display second Bible verses + Vis alternative bibelvers + + + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... BiblesPlugin.ImportWizardForm - + Bible Import Wizard - Bibelimporteringsverktøy + Bibelimporteringsverktøy - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Denne veiviseren vil hjelpe deg å importere Bibler fra en rekke ulike formater. Klikk på neste-knappen under for å starte prosessen ved å velge et format å importere fra. + Denne veiviseren vil hjelpe deg å importere bibler fra en rekke ulike formater. Klikk på neste-knappen under for å starte prosessen ved å velge et format å importere fra. - + Web Download - Web nedlastning + Nettnedlastning - + Location: Plassering: - + Crosswalk Crosswalk - + BibleGateway - BibleGateway + BibleGateway - + Bible: Bibel: - + Download Options - Nedlastingsalternativer + Nedlastingsalternativer - + Server: - Server: + Tjener: - + Username: Brukernavn: - + Password: Passord: - + Proxy Server (Optional) - Proxy Server (valgfritt) + Proxytjener (valgfritt) - + License Details Lisensdetaljer - + Set up the Bible's license details. - Skriv inn Bibelens lisensdetaljer. + Sett opp Bibelens lisensdetaljer. - + Version name: - Versons navn: + Versjonsnavn: - + Copyright: - Opphavsrett: + Opphavsrett: - + Please wait while your Bible is imported. - Vennligst vent mens bibelen blir importert + Vennligst vent mens bibelen blir importert. - + You need to specify a file with books of the Bible to use in the import. Du må angi en fil som inneholder bøkene i Bibelen du vil importere. - + You need to specify a file of Bible verses to import. Du må angi en fil med bibelvers som skal importeres. - + You need to specify a version name for your Bible. - Du må spesifisere et versjonsnummer for Bibelen din. + Du må spesifisere et versjonsnavn for Bibelen din. - + Bible Exists - Bibelen eksisterer + Bibelen finnes - + Your Bible import failed. Bibelimporteringen mislyktes. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Du må angi kopiretten for Bibelen. Offentlige bibler må markeres deretter. - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Denne bibelen finnes alt. Vennligst importer en annen bibel eller slett først den eksisterende. - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Permissions: - + Tillatelser: - + CSV File - + CSV-fil - + Bibleserver - - - - - Bible file: - - - - - Testaments file: - + Bibeltjener + Bible file: + Bibelfil: + + + Books file: - + Bokfil: - + Verses file: - + Versfil: - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + openlp.org 1.x Bible Files + OpenLP 1.x Bibelfiler + + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick - Rask + Hurtig - + Find: Finn: - - Results: - Resultat: - - - + Book: Bok: - + Chapter: Kapittel: - + Verse: Vers: - + From: Fra: - + To: Til: - + Text Search - Tekstsøk + Tekstsøk - - Clear - Blank - - - - Keep - Behold - - - + Second: - + Alternativ: - + Scripture Reference + Bibelreferanse + + + + Toggle to keep or clear the previous results. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... - + Importerer %s %s... BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... + Oppdager tegnkoding (dette kan ta noen minutter)... + + + + Importing %s %s... + Importing <book name> <chapter>... + Importerer %s %s... + + + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory - - Importing %s %s... - Importing <book name> <chapter>... + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Versjonsnavn: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Du må spesifisere et versjonsnavn for Bibelen din. + + + + Bible Exists + Bibelen finnes + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Nedlastningsfeil + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - Tilpasset visning + Tilpasset visning - + Display footer Vis bunntekst @@ -705,400 +1007,349 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - Rediger egendefinerte lysbilder + Rediger egendefinerte lysbilder - + &Title: &Tittel: - + Add a new slide at bottom. - + Legg til nytt lysbilde nederst. - + Edit the selected slide. - Rediger merket side + Rediger markert lysbilde. - + Edit all the slides at once. - Rediger alle sider på en gang. + Rediger alle lysbilder på en gang. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + Del lysbilde i to ved å sette inn en lysbildedeler. - + The&me: - + Tema: - + &Credits: - + &Credits: - + You need to type in a title. Du må skrive inn en tittel. - + You need to add at least one slide - + Du må legge til minst et lysbilde - + Ed&it All + Rediger alle + + + + Insert Slide - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title - + + General + Generell ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - + <strong>Bildetillegg</strong><br />Bildetillegget gir mulighet til visning av bilder.<br />Et av særtrekkene med dette tillegget er muligheten til å gruppere flere bilder sammen i møteplanleggeren, noe som gjør visning av flere bilder enklere. Programtillegget kan også benytte seg av OpenLP's "tidsbestemte løkke"-funksjon til å lage en lysbildefremvisning som kjører automatisk. I tillegg kan bilder fra tillegget brukes til å overstyre gjeldende temabakgrunn, noe som gir tekstbaserte saker, som sanger, det valgte bildet som bakgrunn. - - Load a new Image - + + Image + name singular + Bilde - - Add a new Image + + Images + name plural + Bilder + + + + Images + container title + Bilder + + + + Load a new image. - Edit the selected Image + Add a new image. - Delete the selected Image + Edit the selected image. - Preview the selected Image + Delete the selected image. - Send the selected Image live + Preview the selected image. - Add the selected Image to the service + Send the selected image live. - - Image - name singular - - - - - Images - name plural - - - - - Images - container title + + Add the selected image to the service. ImagePlugin.ExceptionDialog - + Select Attachment - + Velg vedlegg ImagePlugin.MediaItem - + Select Image(s) Velg bilde(r) - + You must select an image to delete. - + Du må velge et bilde å slette. - + You must select an image to replace the background with. - + Du må velge et bilde å erstatte bakgrunnen med. - + Missing Image(s) - + Bilde(r) mangler - + The following image(s) no longer exist: %s - + De følgende bilde(r) finnes ikke lenger: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + De følgende bilde(r) finnes ikke lenger: %s +Vil du likevel legge til de andre bildene? - + There was a problem replacing your background, the image file "%s" no longer exists. - + Det oppstod et problem ved erstatting av bakgrunnen, bildefilen "%s" finnes ikke lenger. MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - + <strong>Mediatillegg</strong><br />Mediatillegget tilbyr avspilling av lyd og video. Media + name singular + Media + + + + Media name plural + Media + + + + Media + container title + Media + + + + Load new media. - - Media - container title + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. MediaPlugin.MediaItem - + Select Media - Velg media + Velg fil - + You must select a media file to delete. - + Du må velge en fil å slette - + Missing Media File - + Fil mangler - + The file %s no longer exists. - + Filen %s finnes ikke lenger - + You must select a media file to replace the background with. - + Du må velge en fil å erstatte bakgrunnen med. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Det oppstod et problem ved bytting av bakgrunn, filen "%s" finnes ikke lenger. - + Videos (%s);;Audio (%s);;%s (*) - + Videoer (%s);;Lyd (%s);;%s (*) MediaPlugin.MediaTab - + Media Display - + Mediavisning - + Use Phonon for video playback - + Bruk Phonon for videoavspilling OpenLP - + Image Files + Bildefiler + + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + Credits - + License Lisens - + Contribute - + Bidra - + build %s - + build %s - + 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. - + Dette programmet er fri programvare; du kan redistribuere det og/eller endre det under betingelsene i GNU General Public License versjon 2, som publisert av Free Software Foundation. - + 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 below for more details. - + Dette programmet er distribuert i det håp at det vil være nyttig, men UTEN NOEN FORM FOR GARANTI; selv uten underforståtte garantier om SALGBARHET eller ANVENDELIGHET FOR ET SPESIELT FORMÅL. Se nedenfor for flere detaljer. - + Project Lead %s @@ -1160,187 +1411,373 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. + Prosjektleder +%s + +Utviklere +%s + +Bidragsytere +%s + +Testere +%s + +Pakkere +%s + +Oversettere +Afrikaans (af) +%s +Tysk (de) +%s +Engelsk, Storbritannia (en_GB) +%s +Engelsk, Sør-Afrika (en_ZA) +%s +Estisk (et) +%s +Fransk (fr) +%s +Ungarsk (hu) +%s +Japansk (ja) +%s +Norsk - bokmål (nb) +%s +Nederlandsk (nl) +%s +Portogisisk, Brazil (pt_BR) +%s +Russisk (ru) +%s + +Dokumentasjon +%s + +Laget med +Python: http://www.python.org/ +Qt4: http://qt.nokia.com/ +PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro +Oxygen Icons: http://oxygen-icons.org/ + +Endelig takk +"For så høyt har Gud elsket verden, at han +ga sin Sønn, den enbårne, for at hver den +som tror på ham, ikke skal gå fortapt, men +ha evig liv." -- Joh 3:16 + +Og sist, men ikke minst, takken går til Gud vår +far, for at han sendet oss sin Sønn for å dø +på korset, og satte oss fri fra synd. Vi gir deg +dette programmet fritt for omkostninger, +fordi han har satt oss fri. + + + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Innstillinger for brukergrensesnitt - + Number of recent files to display: - + Antall nylig brukte filer å vise. - + Remember active media manager tab on startup - + Husk aktiv mediebehandlerfane ved oppstart - + Double-click to send items straight to live - + Dobbelklikk for å sende saker direkte live - + Expand new service items on creation - + Utvid nye møteenheter ved opprettelse - + Enable application exit confirmation - + Aktiver avsluttningsbekreftelse - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: Bakgrunns farge: - + Image file: - + Open File + + + Preview items when clicked in Media Manager + + + + + Advanced + Avansert + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Error Occurred - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1348,23 +1785,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report - + Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1382,7 +1819,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1404,17 +1841,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename - + New File Name: - + File Copy @@ -1422,17 +1859,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1440,102 +1877,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - + First Time Wizard - + Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + Activate required Plugins - + Select the Plugins you wish to use. - + Songs - + Custom Text - + Bible - + Images - + Bilder - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1544,198 +1976,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Default Settings - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General - + Generell - + Monitors - + Select monitor for output display: Velg hvilken skjerm som skal brukes til fremvisning: - + Display if a single screen - + Application Startup - Programoppstart + Programoppstart - + Show blank screen warning - + Automatically open the last service - Åpne forrige møteplan automatisk + Åpne forrige møteplan automatisk - + Show the splash screen - + Application Settings - Programinnstillinger + Programinnstillinger - + Prompt to save before starting a new service - + Automatically preview next item in service - Slide loop delay: - - - - sec - + CCLI Details CCLI-detaljer - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - + Check for updates to OpenLP + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1743,7 +2200,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display @@ -1751,190 +2208,155 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - &Fil + &Fil - + &Import - &Import + &Importer - + &Export - &Eksporter + &Eksporter - + &View &Vis - + M&ode - + &Tools - + &Settings - &Innstillinger + &Innstillinger - + &Language &Språk - + &Help - &Hjelp + &Hjelp - + Media Manager Innholdselementer - + Service Manager - + Theme Manager - + &New &Ny - - Ctrl+N - Ctrl+N - - - + &Open &Åpne - + Open an existing service. - - Ctrl+O - Ctrl+O - - - + &Save &Lagre - + Save the current service to disk. - - Ctrl+S - Ctrl+S - - - + Save &As... - + Save Service As - + Save the current service under a new name. - - Ctrl+Shift+S - - - - + E&xit - &Avslutt + &Avslutt - + Quit OpenLP Avslutt OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Tema - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - - F8 - F8 - - - + &Theme Manager - + Toggle Theme Manager Åpne tema-behandler - + Toggle the visibility of the theme manager. - - - F10 - F10 - &Service Manager @@ -1952,227 +2374,207 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - F9 + &Preview Panel + &Forhåndsvisningspanel - &Preview Panel - &Forhåndsvisningspanel + Toggle Preview Panel + Vis forhåndsvisningspanel - Toggle Preview Panel - Vis forhåndsvisningspanel - - - Toggle the visibility of the preview panel. - - F11 - F11 - - - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - - F12 - F12 - - - + &Plugin List &Tillegsliste - + List the Plugins Hent liste over tillegg - - Alt+F7 - ALT+F7 - - - + &User Guide - &Brukerveiledning + &Brukerveiledning - + &About &Om - + More information about OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help - + &Web Site &Internett side - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... Legg til & Verktøy... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live &Direkte - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP versjonen har blitt oppdatert - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s - + English Please add the name of your language here Norsk - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - - Print the current Service Order. - - - - - Ctrl+P - - - - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Configure Display Tags - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected @@ -2182,75 +2584,91 @@ You can download the latest version from http://openlp.org/. - + You must select one or more items to preview. - + You must select one or more items to send live. - + You must select one or more items. - + You must select an existing service item to add to. - + Invalid Service Item - + You must select a %s service item. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: Status: - + Active - Aktiv + Aktiv - + Inactive - + %s (Inactive) - + %s (Active) - + %s (Disabled) @@ -2258,12 +2676,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -2271,7 +2689,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options @@ -2291,55 +2709,60 @@ You can download the latest version from http://openlp.org/. - + Zoom In - + Zoom Out - + Zoom Original - + Other Options - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2347,7 +2770,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -2355,216 +2778,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - Lagre møteplan - - - - Select a theme for the service - - - - + Move to &top Flytt til &toppen - + Move item to the top of the service. - + Move &up - + Move item up one position in the service. - + Move &down - + Move item down one position in the service. - + Move to &bottom - + Move item to the end of the service. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes &Notis - + &Change Item Theme &Bytt objekttema - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + OpenLP Service Files (*.osz) - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + Modified Service - - Notes: - - - - + &Start Time - + Show &Preview - + Show &Live - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes @@ -2572,7 +3035,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2580,220 +3043,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + Egendefinert lysbilde + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - Flytt til forrige - - - - Move to next - - - - + Hide - - Move to live - - - - - Start continuous loop - Start kontinuerlig løkke - - - - Stop continuous loop - - - - - Delay between slides in seconds - Forsinkelse mellom lysbilder i sekund - - - - Start playing media - Start avspilling av media - - - + Go To - - Edit and reload song preview - - - - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2860,68 +3378,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - Du kan ikke slette det globale temaet + Du kan ikke slette det globale temaet. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. - Filen er ikke et gyldig tema. + Filen er ikke et gyldig tema. - + Theme %s is used in the %s plugin. @@ -2941,47 +3459,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -2989,242 +3507,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color Ensfarget - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical Vertikal - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: Størrelse: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold Fet - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center Sentrert - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: Bredde: - + Height: Høyde: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s @@ -3232,42 +3750,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Bruk temaet fra hver sang i databasen. Hvis en sang ikke er tilknyttet et tema, bruk temaet til møteplanen. Hvis møteplanen ikke har et tema, bruk det globale temaet. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Bruk det globale temaet, og la det overstyre eventuelle tema som er tilknyttet møteplaner eller sanger. @@ -3275,421 +3793,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error Feil - + &Delete &Slett - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Add - + Advanced Avansert - + All Files Alle filer - + Create a new service. - + &Edit - &Rediger + &Rediger - + Import - + Length %s - + Live - + Load - + New - + New Service - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Åpne møteplan - - - + Preview Forhåndsvisning - + Replace Background - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + Save Service - + Service - + Start %s - + &Vertical Align: - + Top Topp - + Middle Midtstilt - + Bottom Bunn - + About Om - + Browse... - + Cancel - + CCLI number: - + Empty Field - + Export - + pt Abbreviated font pointsize unit pt - + Image - + Bilde - + Live Background Error - - Live Panel - - - - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural - + openlp.org 1.x - - Preview Panel - - - - - Print Service Order - - - - + s The abbreviated unit for seconds s - + Save && Preview - + Search Søk - + You must select an item to delete. - + You must select an item to edit. - + Theme Singular Tema - + Themes Plural - + Version - + Finished import. Import fullført. - + Format: - + Importing Importerer - + Importing "%s"... - + Select Import Source - Velg importeringskilde + Velg importeringskilde - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% - + Ready. Klar. - + Starting import... Starter å importere... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard Velkommen til bibelimporterings-veilederen - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural - + © Copyright symbol. - + Song Book Singular - + Song Books Plural - + Song Maintenance - + Topic Singular - Emne + Emne - + Topics Plural Emne + + + Continuous + Kontinuerlig + + + + Default + + + + + Display style: + Visningstil: + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + Vers pr side + + + + Verse Per Line + Vers pr linje + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3701,31 +4326,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3744,61 +4344,81 @@ The content encoding is not UTF-8. container title + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) Velg presentasjon(er) - + Automatic Automatisk - + Present using: Presenter ved hjelp av: - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3806,17 +4426,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3824,71 +4444,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural Fjernmeldinger - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + + + + + Slide Controller + + + + + Alerts + Varsler + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3903,53 +4626,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3957,54 +4685,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - Velg dato-område + Velg dato-område - + to til - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4012,211 +4740,211 @@ has been successfully created. SongsPlugin - + &Song &Sang - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Song name singular Sang - + Songs name plural Sanger - + Songs container title Sanger - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Exports songs using the export wizard. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance - Behandle forfatterdata + Behandle forfatterdata - + Display name: - + First name: Fornavn: - + Last name: Etternavn: - + You need to type in the first name of the author. Du må skrive inn forfatterens fornavn. - + You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? @@ -4224,190 +4952,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor - Sangredigeringsverktøy + Sangredigeringsverktøy - + &Title: &Tittel: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Rediger alle - + Title && Lyrics Tittel && Sangtekst - + &Add to Song - + &Remove &Fjern - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove &Fjern - + Book: Bok: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information Copyright-informasjon - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4415,260 +5151,278 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse Rediger Vers - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + Check the songs you want to export. - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files + + + Copy + + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Rediger liste over forfattere, emner og bøker. - - - + Titles - Titler + Titler - + Lyrics - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4676,22 +5430,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: - + &Publisher: - + You need to type in a name for the book. @@ -4699,12 +5453,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4712,15 +5466,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4728,107 +5502,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified topic, because it already exists. - + Delete Author - + Are you sure you want to delete the selected author? - Er du sikker på at du vil slette den valgte forfatteren? + Er du sikker på at du vil slette den valgte forfatteren? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic Slett emne - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book Slett bok - + Are you sure you want to delete the selected book? Er du sikker på at du vil slette den merkede boken? - + This book cannot be deleted, it is currently assigned to at least one song. - + Could not save your modified author, because the author already exists. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4836,27 +5610,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4864,17 +5638,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: Emnenavn: - + You need to type in a topic name. @@ -4882,39 +5656,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse Vers - + Chorus - + Bridge - + Pre-Chorus Pre-Chorus - + Intro - + Ending - + Other - Annet + Annet + + + + ThemeTab + + + Themes + diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index cf7cb8b69..38826c175 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? U heeft geen parameter opgegeven die vervangen moeten worden Toch doorgaan? - + No Parameter Found geen parameters gevonden - + No Placeholder Found niet gevonden - + The alert text does not contain '<>'. Do you want to continue anyway? De waarschuwing bevat geen '<>'. @@ -30,34 +30,34 @@ Toch doorgaan? AlertsPlugin - + &Alert W&aarschuwing - + Show an alert message. Toon waarschuwingsberichten. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Waarschuwing Plugin</strong><br />Deze plugin regelt de weergave van waarschuwingen op het scherm. + <strong>Waarschuwing Plugin</strong><br />Deze plugin regelt de weergave van waarschuwingen op het scherm - + Alert name singular Waarschuwing - + Alerts name plural Waarschuwingen - + Alerts container title Waarschuwingen @@ -66,47 +66,47 @@ Toch doorgaan? AlertsPlugin.AlertForm - + Alert Message Waarschuwing - + Alert &text: Waarschuwings&text: - + &New &Nieuw - + &Save Op&slaan - + Displ&ay Wee&rgeven - + Display && Cl&ose &Weergeven en sluiten - + New Alert Nieuwe waarschuwing - + You haven't specified any text for your alert. Please type in some text before clicking New. De waarschuwing bevat geen tekst. Voer eerst tekst in voordat u op nieuw klikt. - + &Parameter: &Parameter: @@ -122,32 +122,32 @@ Toch doorgaan? AlertsPlugin.AlertsTab - + Font Font - + Alert timeout: Tijdsduur: - + Font name: Naam lettertype: - + Font color: Letterkleur: - + Background color: Achtergrondkleur: - + Font size: Corpsgrootte: @@ -155,51 +155,54 @@ Toch doorgaan? BibleDB.Wizard - - Importing testaments... %s - Testament importeren... %s - - - - Importing testaments... done. - Importeren testamenten... klaar. - - - + Importing books... %s Importeren bijbelboeken... %s - + Importing verses from %s... Importing verses from <book name>... Importeren bijbelverzen uit %s... - + Importing verses... done. Importeren bijbelverzen... klaar. + + BiblePlugin + + + &Upgrade older Bibles + &Upgrade oude bijbels + + + + Upgrade the Bible databases to the latest format. + Upgrade de bijbel databases naar de meest recente indeling. + + BiblePlugin.HTTPBible - + Download Error Download fout - + Parse Error Verwerkingsfout - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Er ging iets mis bij het downloaden van de bijbelverzen. Controleer uw internet verbinding (open bijv. een pagina in de internetbrowser). Als dit probleem zich blijft herhalen is er misschien sprake van een bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Er ging iets mis bij het uitpakken van de bijbelverzen. Als dit probleem zich blijft herhalen is er misschien sprake van een bug. @@ -207,123 +210,133 @@ Toch doorgaan? BiblePlugin.MediaItem - + Bible not fully loaded. Bijbel niet geheel geladen. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Enkele en dubbele bijbelvers zoekresultaten kunnen niet gecombineerd worden. Resultaten wissen en opnieuw beginnen? + + + Information + Informatie + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + De tweede bijbelvertaling bevat niet alle verzen die in de eerste bijbelvertaling staan. Alleen de verzen die in beide vertalingen voorkomen worden getoond. %d verzen zijn niet opgenomen in de resultaten. + BiblesPlugin - + &Bible &Bijbel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bijbel plugin</strong><br />De Bijbel plugin maakt het mogelijk bijbelteksten uit verschillende vertalingen tijdens de dienst te gebruiken. - - - - Import a Bible - Importeer een Bijbel - - - - Add a new Bible - Voeg een nieuwe Bijbel toe - - - - Edit the selected Bible - Geselecteerde Bijbel bewerken - - - - Delete the selected Bible - Geselecteerde Bijbel verwijderen - - - - Preview the selected Bible - Voorbeeld geselecteerde bijbeltekst - - - - Send the selected Bible live - Geselecteerde bijbeltekst live tonen - - - - Add the selected Bible to the service - Geselecteerde bijbeltekst aan de liturgie toevoegen - - - + Bible name singular bijbeltekst - + Bibles name plural bijbelteksten - + Bibles container title Bijbelteksten - + No Book Found Geen bijbelboek gevonden - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Er kon geen bijbelboek met die naam gevonden worden. Controleer de spelling. + + + Import a Bible. + Importeer een Bijbel. + + + + Add a new Bible. + Voeg een nieuwe Bijbel toe. + + + + Edit the selected Bible. + Geselecteerde Bijbel bewerken. + + + + Delete the selected Bible. + Geselecteerde Bijbel verwijderen. + + + + Preview the selected Bible. + Voorbeeld geselecteerde bijbeltekst. + + + + Send the selected Bible live. + Geselecteerde bijbeltekst live tonen. + + + + Add the selected Bible to the service. + Geselecteerde bijbeltekst aan de liturgie toevoegen. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Bijbel Plugin</strong><br />De Bijbel plugin voorziet in de mogelijkheid bijbelteksten uit verschillende bronnen weer te geven tijdens de dienst. + BiblesPlugin.BibleManager - + Scripture Reference Error Fouten in schriftverwijzingen - + Web Bible cannot be used Online bijbels kunnen niet worden gebruikt - + Text Search is not available with Web Bibles. In online bijbels kunt u niet zoeken op tekst. - + 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. Geen zoekterm opgegeven. Woorden met een spatie ertussen betekent zoeken naar alle woorden, Woorden met een komma ertussen betekent zoeken naar de afzonderlijke woorden. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Er zijn geen bijbels geïnstalleerd. Gebruik de Import assistent om een of meerdere bijbels te installeren. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Boek Hoofdstuk:Vers-Vers,Hoofdstuk:Vers-Vers Boek Hoofdstuk:Vers-Hoofdstuk:Vers - + No Bibles Available Geen bijbels beschikbaar @@ -350,45 +363,20 @@ Boek Hoofdstuk:Vers-Hoofdstuk:Vers BiblesPlugin.BiblesTab - + Verse Display Bijbeltekst weergave - + Only show new chapter numbers Toon alleen nieuw hoodstuknummer - - - Layout style: - Paginaformaat: - - - - Display style: - Weergave stijl: - Bible theme: Bijbel thema: - - - Verse Per Slide - Bijbelvers per dia - - - - Verse Per Line - Bijbelvers per regel - - - - Continuous - Doorlopend - No Brackets @@ -422,258 +410,334 @@ Deze wijzigingen hebben geen betrekking op bijbelverzen die al in de liturgie zi Toon tweede bijbelvertaling + + BiblesPlugin.BookNameDialog + + + Select Book Name + Selecteer naam bijbelboek + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + Er kon geen bijbelboek met die naam gevonden worden. Selecteer de overeenkomstige Engels naam uit de lijst. + + + + Current name: + Huidige naam: + + + + Corresponding name: + Overeenkomstige naam: + + + + Show Books From + Toon boeken uit + + + + Old Testament + Oude Testament + + + + New Testament + Nieuwe Testament + + + + Apocrypha + Apocriefe boeken + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Geef een boek op. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registreer Bijbel en laad de boeken... + + + + Registering Language... + Registreer de taal... + + + + Importing %s... + Importing <book name>... + Importeer "%s"... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bijbel Import Assistent - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. Deze Assistent helpt u bijbels van verschillende bestandsformaten te importeren. Om de Assistent te starten klikt op volgende. - + Web Download Onlinebijbel - + Location: Locatie: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bijbelvertaling: - + Download Options Download opties - + Server: Server: - + Username: Gebruikersnaam: - + Password: Wachtwoord: - + Proxy Server (Optional) Proxy-Server (optioneel) - + License Details Licentiedetails - + Set up the Bible's license details. Geef aan welke licentievoorwaarden gelden voor deze bijbelvertaling. - + Copyright: Copyright: - + Please wait while your Bible is imported. Even geduld. De bijbelvertaling wordt geïmporteerd. - + You need to specify a file with books of the Bible to use in the import. Er moet een bestand met beschikbare bijbelboeken opgegeven worden. - + You need to specify a file of Bible verses to import. Er moet een bestand met bijbelverzen opgegeven worden. - + You need to specify a version name for your Bible. Geef de naam van de bijbelvertaling op. - + Bible Exists Deze bijbelvertaling bestaat reeds - + Your Bible import failed. Het importeren is mislukt. - + Version name: Bijbeluitgave: - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Copyright moet opgegeven worden. Bijbels in het publieke domein moeten als zodanig gemarkeerd worden. - + This Bible already exists. Please import a different Bible or first delete the existing one. Deze bijbel bestaat reeds. Geef een andere naam of verwijder eerst het bestaande exemplaar. - - Starting Registering bible... - Start registreren Bijbel... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Registratie afgerond. -N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus noodzakelijk. - - - + Permissions: Rechten: - + CSV File CSV bestand - + Bibleserver Bibleserver.com - + Bible file: Bijbel bestand: - - Testaments file: - Testamenten bestand: - - - + Books file: Bijbelboeken bestand: - + Verses file: Bijbelverzen bestand: - - You have not specified a testaments file. Do you want to proceed with the import? - Geen testament bestand opgegeven. Toch importeren? - - - + openlp.org 1.x Bible Files openlp.org 1.x bijbel bestanden + + + Registering Bible... + Registreer Bijbel... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Bijbel geregistreerd. Let op, de bijbelverzen worden gedownload +indien nodig en een internetverbinding is dus noodzakelijk. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Selecteer taal + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP kan niet bepalen in welke taal deze Bijbel is geschreven. Selecteer een taal uit de onderstaande lijst. + + + + Language: + Taal: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Geef een taal op. + BiblesPlugin.MediaItem - + Quick Snelzoeken - + Find: Vind: - - Results: - Resulaten: - - - + Book: Boek: - + Chapter: Hoofdstuk: - + Verse: Vers: - + From: Van: - + To: Tot: - + Text Search Zoek op tekst - - Clear - Wissen - - - - Keep - Bewaren - - - + Second: Tweede: - + Scripture Reference Schriftverwijzing + + + Toggle to keep or clear the previous results. + Zoekresultaten wel / niet behouden. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s wordt geïmporteerd... @@ -682,34 +746,267 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Tekstcodering detecteren (dat kan even duren)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wordt geïmporteerd... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Selecteer Backup map + + + + Bible Upgrade Wizard + Bijbel Upgrade Assistent + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + Deze Assistent helpt u bestaande bijbels op te waarderen van een eerdere indeling van OpenLP 2. Om de Assistent te starten klikt op volgende. + + + + Select Backup Directory + Selecteer Backup map + + + + Please select a backup directory for your Bibles + Selecteer een map om de backup van uw bijbel in op te slaan + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + Eerdere versies van OpenLP 2.0 kunnen de nieuwe bijbelbestanden niet lezen. De assistent maakt een backup van uw huidige bestanden zodat u eenvoudig de bijbels terug kunt zetten in de OpenLP data-map voor het geval u met een oude versie van OpenLP moet werken. Instructies hoe de oorspronkelijke bestanden te herstellen staan in de <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>(engelstalig). + + + + Please select a backup location for your Bibles. + Selecteer een map om de backup van uw bijbel in op te slaan. + + + + Backup Directory: + Backup map: + + + + There is no need to backup my Bibles + Er hoeft geen Backup gemaakt te worden + + + + Select Bibles + Selecteer bijbels + + + + Please select the Bibles to upgrade + Selecteer de bijbels om op te waarderen + + + + Version name: + Bijbeluitgave: + + + + This Bible still exists. Please change the name or uncheck it. + Deze bijbel bestaat al. Verander de naam of deselecteer. + + + + Upgrading + Opwaarderen + + + + Please wait while your Bibles are upgraded. + Even geduld. De bijbels worden opgewaardeerd. + + + + You need to specify a Backup Directory for your Bibles. + Selecteer een map om de backup van uw bijbels in op te slaan. + + + + You need to specify a version name for your Bible. + Geef de naam van de bijbelvertaling op. + + + + Bible Exists + Deze bijbelvertaling bestaat reeds + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + Deze bijbel bestaat reeds. Geef een andere naam of verwijder eerst het bestaande exemplaar of deselecteer. + + + + There are no Bibles available to upgrade. + Er zijn geen op te waarderen bijbels beschikbaar. + + + + Upgrading Bible %s of %s: "%s" +Failed + Opwaarderen Bijbel %s van %s: "%s" +Faal + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Opwaarderen Bijbel %s van %s: "%s" +Opwaarderen ... + + + + Download Error + Download fout + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Opwaarderen Bijbel %s van %s: "%s" +Opwaarderen %s ... + + + + , %s failed + , %s mislukt + + + + Upgrading Bible(s): %s successful%s + Opwaarderen Bijbel(s): %s gelukt%s + + + + Upgrade failed. + Opwaarderen mislukt. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + De backup is mislukt. +Om bijbels op te waarderen moet de map beschrijfbaar zijn.. + + + + Starting Bible upgrade... + Begin opwaarderen bijbel... + + + + To upgrade your Web Bibles an Internet connection is required. + Om online bijbels op te waarderen is een internet verbinding noodzakelijk. + + + + Upgrading Bible %s of %s: "%s" +Complete + Opwaarderen Bijbel %s van %s: "%s" +Klaar + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Opwaarderen Bijbel(s): %s gelukt%s +Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding is dus noodzakelijk. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. <strong>Custom plugin</strong><br />De custom plugin voorziet in mogelijkheden aangepaste tekst weer te geven op dezelfde manier als liederen. Deze plugin voorziet in meer mogelijkheden dan de Lied plugin. + + + Custom Slide + name singular + Aangepaste dia + + + + Custom Slides + name plural + Aangepaste dia’s + + + + Custom Slides + container title + Aangepaste dia’s + + + + Load a new custom slide. + Aangepaste dia laden. + + + + Import a custom slide. + Aangepaste dia importeren. + + + + Add a new custom slide. + Aangepaste dia toevoegen. + + + + Edit the selected custom slide. + Geselecteerde dia bewerken. + + + + Delete the selected custom slide. + Geselecteerde aangepaste dia verwijderen. + + + + Preview the selected custom slide. + Bekijk voorbeeld aangepaste dia. + + + + Send the selected custom slide live. + Bekijk aangepaste dia live. + + + + Add the selected custom slide to the service. + Aangepaste dia aan liturgie toevoegen. + CustomPlugin.CustomTab - + Custom Display Aangepaste weergave - + Display footer Voettekst weergeven @@ -717,192 +1014,139 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood CustomPlugin.EditCustomForm - + Edit Custom Slides Aangepaste dia's bewerken - + &Title: &Titel: - - Split Slide - Dia splitsen - - - + The&me: The&ma: - + &Credits: &Credits: - + Add a new slide at bottom. Nieuwe dia onderaan invoegen. - + Edit the selected slide. Geselecteerde dia bewerken. - + Edit all the slides at once. Alle dia's tegelijk bewerken. - + Split a slide into two by inserting a slide splitter. Dia doormidden delen door een dia 'splitter' in te voegen. - + You need to type in a title. Geef een titel op. - + You need to add at least one slide Minstens een dia invoegen - + Ed&it All &Alles bewerken + + + Insert Slide + Invoegen dia + - CustomsPlugin + GeneralTab - - Import a Custom - Aangepaste dia importeren - - - - Load a new Custom - Aangepaste dia laden - - - - Add a new Custom - Aangepaste dia toevoegn - - - - Edit the selected Custom - Geselecteerde dia bewerken - - - - Delete the selected Custom - Geselecteerde aangepaste dia verwijderen - - - - Preview the selected Custom - Bekijk voorbeeld aangepaste dia - - - - Send the selected Custom live - Bekijk aangepaste dia live - - - - Add the selected Custom to the service - Aangepaste dia aan liturgie toevoegen - - - - Custom - name singular - Sonderfolien - - - - Customs - name plural - Aangepaste dia's - - - - Custom - container title - Aangepaste dia + + General + Algemeen ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Afbeeldingen Plugin</strong><br />De afbeeldingen plugin voorziet in de mogelijkheid afbeeldingen te laten zien.<br />Een van de bijzondere mogelijkheden is dat meerdere afbeeldingen als groep in de liturgie worden opgenomen, zodat weergave van meerdere afbeeldingen eenvoudiger wordt. Deze plugin maakt doorlopende diashows (bijv. om de 3 sec. een nieuwe dia) mogelijk. Ook kun met deze plugin de achtergrondafbeelding van het thema vervangen met een andere afbeelding. Ook de combinatie van tekst en beeld is mogelijk. - - Load a new Image - Afbeelding laden - - - - Add a new Image - Afbeelding toevoegen - - - - Edit the selected Image - Afbeelding bewerken - - - - Delete the selected Image - Geselecteerde afbeeldingen wissen - - - - Preview the selected Image - Geselecteerde afbeeldingen voorbeeld bekijken - - - - Send the selected Image live - Geselecteerde afbeeldingen Live tonen - - - - Add the selected Image to the service - Geselecteerde afbeeldingen aan liturgie toevoegen - - - + Image name singular Afbeelding - + Images name plural Bilder - + Images container title Afbeeldingen + + + Load a new image. + Afbeelding laden. + + + + Add a new image. + Afbeelding toevoegen. + + + + Edit the selected image. + Afbeelding bewerken. + + + + Delete the selected image. + Geselecteerde afbeelding wissen. + + + + Preview the selected image. + Geselecteerde afbeelding voorbeeld bekijken. + + + + Send the selected image live. + Geselecteerde afbeelding Live tonen. + + + + Add the selected image to the service. + Geselecteerde afbeelding aan liturgie toevoegen. + ImagePlugin.ExceptionDialog - + Select Attachment Selecteer bijlage @@ -910,39 +1154,39 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood ImagePlugin.MediaItem - + Select Image(s) Selecteer afbeelding(en) - + You must select an image to delete. Selecteer een afbeelding om te verwijderen. - + You must select an image to replace the background with. Selecteer een afbeelding om de achtergrond te vervangen. - + Missing Image(s) Ontbrekende afbeelding(en) - + The following image(s) no longer exist: %s De volgende afbeelding(en) ontbreken: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? De volgende afbeelding(en) ontbreken: %s De andere afbeeldingen alsnog toevoegen? - + There was a problem replacing your background, the image file "%s" no longer exists. Achtergrond kan niet vervangen worden, omdat de afbeelding "%s" ontbreekt. @@ -950,98 +1194,98 @@ De andere afbeeldingen alsnog toevoegen? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Media Plugin</strong><br />De media plugin voorziet in mogelijkheden audio en video af te spelen. - - Load a new Media - Laad nieuw media bestand - - - - Add a new Media - Voeg nieuwe media toe - - - - Edit the selected Media - Bewerk geselecteerd media bestand - - - - Delete the selected Media - Verwijder geselecteerd media bestand - - - - Preview the selected Media - Toon voorbeeld van geselecteerd media bestand - - - - Send the selected Media live - Toon geselecteerd media bestand Live - - - - Add the selected Media to the service - Voeg geselecteerd media bestand aan liturgie toe - - - + Media name singular Medien - + Media name plural Medien - + Media container title Media + + + Load new media. + Laad nieuw media bestand. + + + + Add new media. + Voeg nieuwe media toe. + + + + Edit the selected media. + Bewerk geselecteerd media bestand. + + + + Delete the selected media. + Verwijder geselecteerd media bestand. + + + + Preview the selected media. + Toon voorbeeld van geselecteerd media bestand. + + + + Send the selected media live. + Toon geselecteerd media bestand Live. + + + + Add the selected media to the service. + Voeg geselecteerd media bestand aan liturgie toe. + MediaPlugin.MediaItem - + Select Media Secteer media bestand - + You must select a media file to delete. Selecteer een media bestand om te verwijderen. - + Missing Media File Ontbrekend media bestand - + The file %s no longer exists. Media bestand %s bestaat niet meer. - + You must select a media file to replace the background with. Selecteer een media bestand om de achtergrond mee te vervangen. - + There was a problem replacing your background, the media file "%s" no longer exists. Probleem met het vervangen van de achtergrond, omdat het bestand "%s" niet meer bestaat. - + Videos (%s);;Audio (%s);;%s (*) Video’s (%s);;Audio (%s);;%s (*) @@ -1049,12 +1293,12 @@ De andere afbeeldingen alsnog toevoegen? MediaPlugin.MediaTab - + Media Display Media weergave - + Use Phonon for video playback Gebruik Phonon voor het afspelen van video @@ -1062,62 +1306,59 @@ De andere afbeeldingen alsnog toevoegen? OpenLP - + Image Files Afbeeldingsbestanden + + + Information + Informatie + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + Bijbel bestandsformaat is gewijzigd. +Bestaande bijbels moeten worden opgewaardeerd. +Zal OpenLP dat nu doen? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - + Credits Credits - + License Licentie - + Contribute Bijdragen - + build %s build %s - + 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 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 below for more details. 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 below for more details. - + Project Lead %s @@ -1244,190 +1485,319 @@ Final Credit Deze tekst is niet vertaald. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is vrije kerk presentatie- of projectiesoftware, dat kan worden gebruikt om liedteksten, bijbelteksten, video’s, afbeeldingen en zelfs bestaande presentaties (mits Impress, PowerPoint of PowerPoint Viewer is geïnstalleerd) tijdens de kerkdienst te laten zien met behulp van een computer en een beamer. + +Ontdek meer over OpenLP: http://openlp.org/ + +OpenLP wordt ontwikkeld en bijgehouden door vrijwilligers. Als u meer vrije software op het gebied van het christelijk geloof wilt zien, overweeg dan een bijdrage te leveren door onderstaande knop te gebruiken. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings Werkomgeving instellingen - + Number of recent files to display: Aantal recent geopende bestanden: - + Remember active media manager tab on startup Laatstgeopende tab opslaan - + Double-click to send items straight to live Dubbelklikken om onderdelen direct aan live toe te voegen - + Expand new service items on creation Nieuwe liturgieonderdelen automatisch uitklappen - + Enable application exit confirmation Afsluiten OpenLP bevestigen - + Mouse Cursor Muisaanwijzer - + Hide mouse cursor when over display window Verberg muisaanwijzer in het weergave venster - + Default Image standaard afbeelding - + Background color: Achtergrondkleur: - + Image file: Afbeeldingsbestand: - + Open File Open bestand + + + Preview items when clicked in Media Manager + Voorbeeld direct laten zien bij aanklikken in Media beheer + + + + Advanced + Geavanceerd + + + + Click to select a color. + Klik om een kleur te kiezen. + + + + Browse for an image file to display. + Blader naar een afbeelding om te laten zien. + + + + Revert to the default OpenLP logo. + Herstel standaard OpenLP logo. + OpenLP.DisplayTagDialog - + Edit Selection Bewerk selectie - - Update - Update - - - + Description Omschrijving - + Tag Tag - + Start tag Start tag - + End tag Eind tag - - Default - Standaard - - - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML Eind HTML + + + Save + Opslaan + OpenLP.DisplayTagTab - + Update Error Update Fout - + Tag "n" already defined. Tag "n" bestaat al. - + Tag %s already defined. Tag %s bestaat al. + + + New Tag + Nieuwe tag + + + + </and here> + </and here> + + + + <HTML here> + <HTML here> + + + + OpenLP.DisplayTags + + + Red + Rood + + + + Black + Zwart + + + + Blue + Blauw + + + + Yellow + Geel + + + + Green + Groen + + + + Pink + Roze + + + + Orange + Oranje + + + + Purple + Paars + + + + White + Wit + + + + Superscript + Superscript + + + + Subscript + Subscript + + + + Paragraph + Paragraaf + + + + Bold + Vet + + + + Italics + Cursief + + + + Underline + Onderstreept + + + + Break + Breek af + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. Oeps! OpenLP heeft een probleem en kan het niet zelf oplossen. De tekst in het onderste venster bevat informatie waarmee de OpenLP ontwikkelaars iets kunnen. Stuur een e-mail naar: bugs@openlp.org met een gedetailleerde beschrijving van het probleem en hoe het ontstond. - + Error Occurred Er gaat iets fout - + Send E-Mail Stuur e-mail - + Save to File - Opslaan als… + Opslaan als bestand - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Omschrijf in het Engels wat u deed toen deze fout zich voordeed (minstens 20 tekens gebruiken) - + Attach File Voeg bestand toe - + Description characters to enter : %s Toelichting aanvullen met nog %s tekens @@ -1435,24 +1805,24 @@ Stuur een e-mail naar: bugs@openlp.org met een gedetailleerde beschrijving van h OpenLP.ExceptionForm - + Platform: %s Plattform: %s - + Save Crash Report Bewaar Bug Report - + Text files (*.txt *.log *.text) Tekstbestand (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1483,7 +1853,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1518,17 +1888,17 @@ Schrijf in het Engels, omdat de meeste programmeurs geen Nederlands spreken. OpenLP.FileRenameForm - + File Rename Bestand hernoemen - + New File Name: Nieuwe bestandsnaam: - + File Copy Bestand kopiëren @@ -1536,17 +1906,17 @@ Schrijf in het Engels, omdat de meeste programmeurs geen Nederlands spreken. OpenLP.FirstTimeLanguageForm - + Select Translation Selecteer vertaling - + Choose the translation you'd like to use in OpenLP. Kies de vertaling waarin u OpenLP wilt gebruiken. - + Translation: Vertaling: @@ -1554,102 +1924,97 @@ Schrijf in het Engels, omdat de meeste programmeurs geen Nederlands spreken. OpenLP.FirstTimeWizard - + Downloading %s... Downloaden %s... - + Download complete. Click the finish button to start OpenLP. Download compleet. Klik op afrond om OpenLP te starten. - + Enabling selected plugins... Geselecteerde plugins inschakelen... - + First Time Wizard Eerste keer assistent - + Welcome to the First Time Wizard Welkom bij de Eerste keer Assistent - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - Deze assistent helpt je om OpenLP voor de eerste keer in te stellen. Klik op volgende om dit proces te beginnen. - - - + Activate required Plugins Activeer noodzakelijke plugins - + Select the Plugins you wish to use. Selecteer de plugins die je gaat gebruiken. - + Songs Liederen - + Custom Text Aangepaste tekst - + Bible Bijbel - + Images Afbeeldingen - + Presentations Presentaties - + Media (Audio and Video) Media (Audio en Video) - + Allow remote access Toegang op afstand toestaan - + Monitor Song Usage Liedgebruik bijhouden - + Allow Alerts Toon berichten - + No Internet Connection Geen internetverbinding - + Unable to detect an Internet connection. OpenLP kan geen internetverbinding vinden. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1662,198 +2027,223 @@ Om deze assistent de volgende keer te starten, klikt u nu annuleren, controleer Om deze assistent over te slaan, klik op klaar. - + Sample Songs Voorbeeld liederen - + Select and download public domain songs. Selecteer en download liederen uit het publieke domein. - + Sample Bibles Voorbeeld bijbels - + Select and download free Bibles. Selecteer en download (gratis) bijbels uit het publieke domein. - + Sample Themes Voorbeeld thema's - + Select and download sample themes. Selecteer en download voorbeeld thema's. - + Default Settings Standaard instellingen - + Set up default settings to be used by OpenLP. Stel standaardinstellingen in voor OpenLP. - - Setting Up And Importing - Instellen en importeren - - - - Please wait while OpenLP is set up and your data is imported. - Even geduld terwijl OpenLP de gegevens importeert. - - - + Default output display: Standaard weergave scherm: - + Select default theme: Selecteer standaard thema: - + Starting configuration process... Begin het configuratie proces... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Deze assistent helpt u bij het instellen van OpenLP voor het eerste gebruik. Klik op volgende om te beginnen. + + + + Setting Up And Downloading + Instellen en downloaden + + + + Please wait while OpenLP is set up and your data is downloaded. + Even geduld terwijl OpenLP ingesteld wordt en de voorbeeldgegevens worden gedownload. + + + + Setting Up + Instellen + + + + Click the finish button to start OpenLP. + Klik op afronden om OpenLP te starten. + OpenLP.GeneralTab - + General Algemeen - + Monitors Beeldschermen - + Select monitor for output display: Projectiescherm: - + Display if a single screen Weergeven bij enkel scherm - + Application Startup Programma start - + Show blank screen warning Toon zwart scherm waarschuwing - + Automatically open the last service Automatisch laatste liturgie openen - + Show the splash screen Toon splash screen - + Application Settings Programma instellingen - + Prompt to save before starting a new service Waarschuw om werk op te slaan bij het beginnen van een nieuwe liturgie - + Automatically preview next item in service Automatisch volgend onderdeel van liturgie tonen - Slide loop delay: - Vertraging bij doorlopende diavoorstelling: - - - sec sec - + CCLI Details CCLI-details - + SongSelect username: SongSelect gebruikersnaam: - + SongSelect password: SongSelect wachtwoord: - + Display Position Weergave positie - + X X - + Y Y - + Height Hoogte - + Width Breedte - + Override display position Overschrijf scherm positie - + Check for updates to OpenLP Controleer op updates voor OpenLP + + + Unblank display when adding new live item + Zwart scherm uitschakelen als er een nieuw live item wordt toegevoegd + + + + Enable slide wrap-around + Doorlopende voorstelling aan + + + + Timed slide interval: + Tijd tussen dia’s: + OpenLP.LanguageManager - + Language Taal - + Please restart OpenLP to use your new language setting. Start OpenLP opnieuw op om de nieuwe taalinstellingen te gebruiken. @@ -1861,7 +2251,7 @@ Om deze assistent over te slaan, klik op klaar. OpenLP.MainDisplay - + OpenLP Display OpenLP Weergave @@ -1869,190 +2259,155 @@ Om deze assistent over te slaan, klik op klaar. OpenLP.MainWindow - + &File &Bestand - + &Import &Importeren - + &Export &Exporteren - + &View &Weergave - + M&ode M&odus - + &Tools &Hulpmiddelen - + &Settings &Instellingen - + &Language Taa&l - + &Help &Help - + Media Manager Mediabeheer - + Service Manager Liturgie beheer - + Theme Manager Thema beheer - + &New &Nieuw - - Ctrl+N - Ctrl+N - - - + &Open &Open - + Open an existing service. Open een bestaande liturgie. - - Ctrl+O - Ctrl+O - - - + &Save Op&slaan - + Save the current service to disk. Deze liturgie opslaan. - - Ctrl+S - Ctrl+S - - - + Save &As... Opslaan &als... - + Save Service As Liturgie opslaan als - + Save the current service under a new name. Deze liturgie onder een andere naam opslaan. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit &Afsluiten - + Quit OpenLP OpenLP afsluiten - - Alt+F4 - Alt+F4 - - - + &Theme &Thema - + &Configure OpenLP... &Instellingen... - + &Media Manager &Media beheer - + Toggle Media Manager Media beheer wel / niet tonen - + Toggle the visibility of the media manager. Media beheer wel / niet tonen. - - F8 - F8 - - - + &Theme Manager &Thema beheer - + Toggle Theme Manager Thema beheer wel / niet tonen - + Toggle the visibility of the theme manager. Thema beheer wel / niet tonen. - - - F10 - F10 - &Service Manager @@ -2070,166 +2425,141 @@ Om deze assistent over te slaan, klik op klaar. - F9 - F9 - - - &Preview Panel &Voorbeeld - + Toggle Preview Panel Voorbeeld wel / niet tonen - + Toggle the visibility of the preview panel. Voorbeeld wel / niet tonen. - - F11 - F11 - - - + &Live Panel &Live venster - + Toggle Live Panel Live venster wel / niet tonen - + Toggle the visibility of the live panel. Live venster wel / niet tonen. - - F12 - F12 - - - + &Plugin List &Plugin Lijst - + List the Plugins Lijst met plugins =uitbreidingen van OpenLP - - Alt+F7 - Alt+F7 - - - + &User Guide Gebr&uikshandleiding - + &About &Over OpenLP - + More information about OpenLP Meer Informatie over OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Online help - + &Web Site &Website - + Use the system language, if available. Gebruik systeem standaardtaal, indien mogelijk. - + Set the interface language to %s %s als taal in OpenLP gebruiken - + Add &Tool... Hulpprogramma &toevoegen... - + Add an application to the list of tools. Voeg een hulpprogramma toe aan de lijst. - + &Default &Standaard - + Set the view mode back to the default. Terug naar de standaard weergave modus. - + &Setup &Setup - + Set the view mode to Setup. Weergave modus naar Setup. - + &Live &Live - + Set the view mode to Live. Weergave modus naar Live. - + OpenLP Version Updated Nieuwe OpenLP versie beschikbaar - + OpenLP Main Display Blanked OpenLP projectie op zwart - + The Main Display has been blanked out Projectie is uitgeschakeld: scherm staat op zwart - + Default Theme: %s Standaardthema: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -2238,61 +2568,66 @@ You can download the latest version from http://openlp.org/. U kunt de laatste versie op http://openlp.org/ downloaden. - + English Please add the name of your language here Nederlands - + Configure &Shortcuts... &Sneltoetsen instellen... - + Close OpenLP OpenLP afsluiten - + Are you sure you want to close OpenLP? OpenLP afsluiten? - - Print the current Service Order. - Druk de huidige liturgie af. - - - - Ctrl+P - Ctrl+P - - - + Open &Data Folder... Open &Data map... - + Open the folder where songs, bibles and other data resides. Open de map waar liederen, bijbels en andere data staat. - + &Configure Display Tags &Configureer Weergave Tags - + &Autodetect &Autodetecteer + + + Update Theme Images + Thema afbeeldingen opwaarderen + + + + Update the preview images for all themes. + Voorbeeld afbeeldingen opwaarderen voor alle thema’s. + + + + Print the current service. + Druk de huidige liturgie af. + OpenLP.MediaManagerItem - + No Items Selected Niets geselecteerd @@ -2302,75 +2637,92 @@ U kunt de laatste versie op http://openlp.org/ downloaden. &Voeg selectie toe aan de liturgie - + You must select one or more items to preview. Selecteer een of meerdere onderdelen om voorbeeld te laten zien. - + You must select one or more items to send live. Selecteer een of meerdere onderdelen om Live te tonen. - + You must select one or more items. Selecteer een of meerdere onderdelen. - + You must select an existing service item to add to. Selecteer een liturgie om deze onderdelen aan toe te voegen. - + Invalid Service Item Ongeldige Liturgie onderdeel - + You must select a %s service item. Selecteer een %s liturgie onderdeel. + + + You must select one or more items to add. + Selecteer een of meerdere onderdelen om toe te voegen. + + + + No Search Results + Niets gevonden + + + + Duplicate filename %s. +This filename is already in the list + Dubbele bestandsnaam %s. +Deze bestandsnaam staat al in de lijst + OpenLP.PluginForm - + Plugin List Plugin Lijst - + Plugin Details Plugin details - + Status: Status: - + Active Actief - + Inactive Inactief - + %s (Inactive) %s (inactief) - + %s (Active) %s (actief) - + %s (Disabled) %s (uitgeschakeld) @@ -2378,12 +2730,12 @@ U kunt de laatste versie op http://openlp.org/ downloaden. OpenLP.PrintServiceDialog - + Fit Page Passend hele pagina - + Fit Width Passend pagina breedte @@ -2391,7 +2743,7 @@ U kunt de laatste versie op http://openlp.org/ downloaden. OpenLP.PrintServiceForm - + Options Opties @@ -2411,55 +2763,60 @@ U kunt de laatste versie op http://openlp.org/ downloaden. Kopieer als HTML - + Zoom In Inzoomen - + Zoom Out Uitzoomen - + Zoom Original Werkelijke grootte - + Other Options Overige opties - + Include slide text if available Inclusief dia tekst indien beschikbaar - + Include service item notes Inclusief liturgie opmerkingen - + Include play length of media items Inclusief afspeellengte van media items - - Service Order Sheet - Orde van dienst afdruk + + Add page break before each text item + Voeg een pagina-einde toe voor elke tekst item + + + + Service Sheet + Liturgie blad OpenLP.ScreenList - + Screen Beeldscherm - + primary primair scherm @@ -2467,7 +2824,7 @@ U kunt de laatste versie op http://openlp.org/ downloaden. OpenLP.ServiceItemEditForm - + Reorder Service Item Liturgie onderdelen herschikken @@ -2475,217 +2832,257 @@ U kunt de laatste versie op http://openlp.org/ downloaden. OpenLP.ServiceManager - - Load an existing service - Laad een bestaande liturgie - - - - Save this service - Deze liturgie opslaan - - - - Select a theme for the service - Selecteer een thema voor de liturgie - - - + Move to &top Bovenaan plaa&tsen - + Move item to the top of the service. Plaats dit onderdeel bovenaan. - + Move &up Naar b&oven - + Move item up one position in the service. Verplaats een plek naar boven. - + Move &down Naar bene&den - + Move item down one position in the service. Verplaats een plek naar beneden. - + Move to &bottom Onderaan &plaatsen - + Move item to the end of the service. Plaats dit onderdeel onderaan. - + &Delete From Service Verwij&deren uit de liturgie - + Delete the selected item from the service. Verwijder dit onderdeel uit de liturgie. - + &Add New Item &Voeg toe - + &Add to Selected Item &Voeg selectie toe - + &Edit Item B&ewerk onderdeel - + &Reorder Item He&rschik onderdeel - + &Notes Aa&ntekeningen - + &Change Item Theme &Wijzig onderdeel thema - + File is not a valid service. The content encoding is not UTF-8. Geen geldig liturgie bestand. Tekst codering is geen UTF-8. - + File is not a valid service. Geen geldig liturgie bestand. - + Missing Display Handler Ontbrekende weergave regelaar - + Your item cannot be displayed as there is no handler to display it Dit onderdeel kan niet weergegeven worden, omdat er een regelaar ontbreekt - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dit onderdeel kan niet weergegeven worden omdat de benodigde plugin ontbreekt of inactief is - + &Expand all Alles &uitklappen - + Expand all the service items. Alle liturgie onderdelen uitklappen. - + &Collapse all Alles &inklappen - + Collapse all the service items. Alle liturgie onderdelen inklappen. - + Open File Open bestand - + OpenLP Service Files (*.osz) OpenLP liturgie bestanden (*.osz) - + Moves the selection up the window. Verplaatst de selectie naar boven. - + Move up Naar boven - + Go Live Ga Live - + Send the selected item to Live. Toon selectie Live. - + Moves the selection down the window. Verplaatst de selectie naar beneden. - + Modified Service Gewijzigde liturgie - - Notes: - Opmerkingen: - - - + &Start Time &Start Tijd - + Show &Preview Toon &Voorbeeld - + Show &Live Toon &Live - + The current service has been modified. Would you like to save this service? De huidige liturgie is gewijzigd. Veranderingen opslaan? + + + File could not be opened because it is corrupt. + Bestand kan niet worden geopend omdat het beschadigd is. + + + + Empty File + Leeg bestand + + + + This service file does not contain any data. + Deze liturgie bevat nog geen gegevens. + + + + Corrupt File + Corrupt bestand + + + + Custom Service Notes: + Aangepaste liturgie kanttekeningen: + + + + Notes: + Aantekeningen: + + + + Playing time: + Speeltijd: + + + + Untitled Service + Liturgie zonder naam + + + + Load an existing service. + Laad een bestaande liturgie. + + + + Save this service. + Deze liturgie opslaan. + + + + Select a theme for the service. + Selecteer een thema voor de liturgie. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + Dit bestand is beschadigd of geen OpenLP 2.0 liturgie bestand. + OpenLP.ServiceNoteForm - + Service Item Notes Liturgische kanttekeningen @@ -2693,7 +3090,7 @@ Tekst codering is geen UTF-8. OpenLP.SettingsForm - + Configure OpenLP Configureer OpenLP @@ -2701,221 +3098,276 @@ Tekst codering is geen UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts Snelkoppelingen aanpassen - + Action Actie - + Shortcut snelkoppeling - - Default: %s - standaard: %s - - - - Custom: - Aangepast: - - - - None - Geen - - - + Duplicate Shortcut Snelkoppelingen dupliceren - + The shortcut "%s" is already assigned to another action, please use a different shortcut. Deze snelkoppeling "%s" wordt al voor iets anders gebruikt. Kies een andere toetscombinatie. - + Alternate Afwisselend + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Selecteer een actie en klik op één van de knoppen hieronder om respectievelijk een primaire of alternatieve sneltoets vast te leggen. + + + + Default + Standaard + + + + Custom + Aangepaste dia + + + + Capture shortcut. + Sneltoets vastleggen. + + + + Restore the default shortcut of this action. + Herstel de standaard sneltoets voor de actie. + + + + Restore Default Shortcuts + Herstel standaard sneltoetsen + + + + Do you want to restore all shortcuts to their defaults? + Weet u zeker dat u alle standaard sneltoetsen wilt herstellen? + OpenLP.SlideController - - Move to previous - Naar vorige - - - - Move to next - Naar volgende - - - + Hide Verbergen - - Move to live - Naar Live - - - - Start continuous loop - Start doorlopende diashow - - - - Stop continuous loop - Stop doorlopende diashow - - - - Delay between slides in seconds - Vertraging tussen dia's in seconden - - - - Start playing media - Start afspelen media - - - + Go To Ga naar - - Edit and reload song preview - Bewerk en lied voorbeeld opnieuw weergeven - - - + Blank Screen Zwart scherm - + Blank to Theme Zwart naar thema - + Show Desktop Toon bureaublad - + Previous Slide Vorige dia - + Next Slide Volgende dia - + Previous Service Vorige liturgie - + Next Service Volgende liturgie - + Escape Item Onderdeel annuleren + + + Move to previous. + Vorige. + + + + Move to next. + Volgende. + + + + Play Slides + Dia’s tonen + + + + Play Slides in Loop + Dia’s doorlopend tonen + + + + Play Slides to End + Dia’s tonen tot eind + + + + Delay between slides in seconds. + Pauze tussen dia’s in seconden. + + + + Move to live. + Toon Live. + + + + Add to Service. + Voeg toe aan Liturgie. + + + + Edit and reload song preview. + Bewerk en herlaad lied voorbeeld. + + + + Start playing media. + Speel media af. + OpenLP.SpellTextEdit - + Spelling Suggestions Spelling suggesties - + Formatting Tags Opmaak tags + + + Language: + Taal: + OpenLP.StartTimeForm - - Item Start Time - Item Start Tijd - - - + Hours: Uren: - - h - h - - - - m - m - - - + Minutes: Minuten: - + Seconds: Seconden: + + + Item Start and Finish Time + Item start en eind tijd + + + + Start + Start + + + + Finish + Eind + + + + Length + Lengte + + + + Time Validation Error + Tijd validatie fout + + + + Finish time is set after the end of the media item + Eind tijd is ingesteld tot na het eind van het media item + + + + Start time is after the finish time of the media item + Start tijd is ingesteld tot na het eind van het media item + OpenLP.ThemeForm - + Select Image Selecteer afbeelding - + Theme Name Missing Thema naam ontbreekt - + There is no name for this theme. Please enter one. Dit thema heeft nog geen naam. Geef een naam voor dit thema. - + Theme Name Invalid Ongeldige naam - + Invalid theme name. Please enter one. Deze naam kan niet worden gebruikt als thema naam. Kies een andere naam. - - (%d lines per slide) - (%d regels per dia) + + (approximately %d lines per slide) + (ongeveer %d regels per dia) @@ -2981,69 +3433,69 @@ Tekst codering is geen UTF-8. Instellen als al&gemene standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Selecteer een thema om te bewerken. - + You are unable to delete the default theme. Het standaard thema kan niet worden verwijderd. - + You have not selected a theme. Selecteer een thema. - + Save Theme - (%s) Thema opslaan - (%s) - + Theme Exported Thema geëxporteerd - + Your theme has been successfully exported. Exporteren thema is gelukt. - + Theme Export Failed Exporteren thema is mislukt - + Your theme could not be exported due to an error. Thema kan niet worden geëxporteerd als gevolg van een fout. - + Select Theme Import File Selecteer te importeren thema bestand - + File is not a valid theme. The content encoding is not UTF-8. Geen geldig thema bestand. Tekst codering is geen UTF-8. - + File is not a valid theme. Geen geldig thema bestand. - + Theme %s is used in the %s plugin. Thema %s wordt gebruikt in de %s plugin. @@ -3063,47 +3515,47 @@ Tekst codering is geen UTF-8. &Exporteer thema - + You must select a theme to rename. Selecteer een thema om te hernoemen. - + Rename Confirmation Bevestig hernoemen - + Rename %s theme? %s thema hernoemen? - + You must select a theme to delete. Selecteer een thema om te verwijderen. - + Delete Confirmation Bevestig verwijderen - + Delete %s theme? %s thema verwijderen? - + Validation Error Validatie fout - + A theme with this name already exists. Er bestaat al een thema met deze naam. - + OpenLP Themes (*.theme *.otz) OpenLP Thema's (*.theme *.otz) @@ -3111,242 +3563,242 @@ Tekst codering is geen UTF-8. OpenLP.ThemeWizard - + Theme Wizard Thema assistent - + Welcome to the Theme Wizard Welkom bij de thema assistent - + Set Up Background Achtergrond instellen - + Set up your theme's background according to the parameters below. Thema achtergrond instellen met onderstaande parameters. - + Background type: Achtergrond type: - + Solid Color Vaste kleur - + Gradient Kleurverloop - + Color: Kleur: - + Gradient: Kleurverloop: - + Horizontal Horizontaal - + Vertical Verticaal - + Circular Radiaal - + Top Left - Bottom Right Links boven - rechts onder - + Bottom Left - Top Right Links onder - Rechts boven - + Main Area Font Details Font instellingen algemeen - + Define the font and display characteristics for the Display text Stel de eigenschappen voor de tekst weergave in - + Font: Font: - + Size: Grootte: - + Line Spacing: Interlinie: - + &Outline: &Omtrek: - + &Shadow: &Schaduw: - + Bold Vet - + Italic Cursief - + Footer Area Font Details Eigenschappen voettekst - + Define the font and display characteristics for the Footer text Stel de eigenschappen voor de voettekst weergave in - + Text Formatting Details Tekst opmaak eigenschappen - + Allows additional display formatting information to be defined Toestaan dat er afwijkende opmaak kan worden bepaald - + Horizontal Align: Horizontaal uitlijnen: - + Left links - + Right rechts - + Center Centreren - + Output Area Locations Uitvoer gebied locaties - + Allows you to change and move the main and footer areas. Toestaan dat tekstvelden gewijzigd en verplaatst worden. - + &Main Area &Hoofdgebied - + &Use default location Gebr&uik standaard locatie - + X position: X positie: - + px px - + Y position: Y positie: - + Width: Breedte: - + Height: Hoogte: - + Use default location Gebruik standaard locatie - + Save and Preview Opslaan en voorbeeld - + View the theme and save it replacing the current one or change the name to create a new theme Thema bekijken en sla het op onder dezelfde naam om te vervangen of onder een andere naam om een nieuw thema te maken - + Theme name: Thema naam: - + 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. Deze assistent helpt bij het maken en bewerken van thema's. Klik op volgende om als eerste een achtergrond in te stellen. - + Transitions: Overgangen: - + &Footer Area &Voettekst gebied - + Edit Theme - %s Bewerk thema - %s @@ -3354,42 +3806,42 @@ Tekst codering is geen UTF-8. OpenLP.ThemesTab - + Global Theme Globaal thema - + Theme Level Thema niveau - + S&ong Level &Lied niveau - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Gebruik het thema bij elk lied in de database. Als een lied geen eigen thema heeft, gebruik dan het thema van de liturgie. Als de liturgie geen eigen thema heeft, gebruik dan het globale thema. - + &Service Level &Liturgie niveau - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Gebruik het thema van de liturgie en negeer de thema's van elk lied afzonderlijk. Als de liturgie geen eigen thema heeft, gebruik dan het globale thema. - + &Global Level &Globaal niveau - + Use the global theme, overriding any themes associated with either the service or the songs. Gebruik het globale thema en negeer alle thema's van de liturgie of de afzonderlijke liederen. @@ -3397,421 +3849,528 @@ Tekst codering is geen UTF-8. OpenLP.Ui - + Error Fout - + &Delete Verwij&deren - + Delete the selected item. Verwijder het geselecteerde item. - + Move selection up one position. Verplaats selectie een plek naar boven. - + Move selection down one position. Verplaats selectie een plek naar beneden. - + &Add &Toevoegen - + Advanced Geavanceerd - + All Files Alle bestanden - + Create a new service. Maak nieuwe liturgie. - + &Edit &Bewerken - + Import Importeren - + Length %s Lengte %s - + Live Live - + Load Laad - + New Nieuw - + New Service Nieuwe liturgie - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Open liturgie - - - + Preview Voorbeeld - + Replace Background Vervang achtergrond - - Replace Live Background - Vervang Live achtergrond - - - + Reset Background Herstel achtergrond - - Reset Live Background - Herstel Live achtergrond - - - + Save Service Liturgie opslaan - + Service Liturgie - + Start %s Start %s - + &Vertical Align: &Verticaal uitlijnen: - + Top Boven - + Middle Midden - + Bottom Onder - + About Over - + Browse... Bladeren... - + Cancel Annuleren - + CCLI number: CCLI nummer: - + Empty Field Wis veld - + Export Exporteren - + pt Abbreviated font pointsize unit pt - + Image Afbeelding - + Live Background Error Live achtergrond fout - - Live Panel - Live Panel - - - + New Theme Nieuw thema - + No File Selected Singular Geen bestand geselecteerd - + No Files Selected Plural Geen bestanden geselecteerd - + No Item Selected Singular Geen item geselecteerd - + No Items Selected Plural Geen items geselecteerd - + openlp.org 1.x openlp.org 1.x - - Preview Panel - Voorbeeld Panel - - - - Print Service Order - Liturgie afdrukken - - - + s The abbreviated unit for seconds s - + Save && Preview Opslaan && voorbeeld bekijken - + Search Zoek - + You must select an item to delete. Selecteer een item om te verwijderen. - + You must select an item to edit. Selecteer iets om te bewerken. - + Theme Singular Thema - + Themes Plural Thema's - + Version Versie - + Finished import. Importeren beëindigd. - + Format: Formaat: - + Importing Importeren - + Importing "%s"... Importeren "%s"... - + Select Import Source Selecteer te importeren bestand - + Select the import format and the location to import from. Selecteer te importeren bestand en het bestandsformaat. - + The openlp.org 1.x 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. The openlp.org 1.x 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. - + Open %s File Open %s bestand - + %p% %p% - + Ready. Klaar. - + Starting import... Start importeren... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Selecteer minstens een %s bestand om te importeren. - + Welcome to the Bible Import Wizard Welkom bij de Bijbel Import Assistent - + Welcome to the Song Export Wizard Welkom bij de lied export assistent - + Welcome to the Song Import Wizard Welkom bij de lied import assistent - + Author Singular Auteur - + Authors Plural Auteurs - + © Copyright symbol. © - + Song Book Singular Liedbundel - + Song Books Plural Liedboeken - + Song Maintenance Liederen beheer - + Topic Singular Onderwerp - + Topics Plural Onderwerpen + + + Continuous + Doorlopend + + + + Default + Standaard + + + + Display style: + Weergave stijl: + + + + File + Bestand + + + + Help + Help + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Paginaformaat: + + + + Live Toolbar + Live Werkbalk + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP is reeds gestart. Weet u zeker dat u wilt doorgaan? + + + + Settings + Instellingen + + + + Tools + Hulpmiddelen + + + + Verse Per Slide + Bijbelvers per dia + + + + Verse Per Line + Bijbelvers per regel + + + + View + Weergave + + + + Duplicate Error + Dupliceer fout + + + + Unsupported File + Niet ondersteund bestandsformaat + + + + Title and/or verses not found + Titel en/of verzen niet gevonden + + + + XML syntax error + XML syntax fout + + + + View Mode + Weergave modus + + + + Welcome to the Bible Upgrade Wizard + Welkom bij de Bijbel Opwaardeer Assistent + + + + Open service. + Open liturgie. + + + + Print Service + Liturgie afdrukken + + + + Replace live background. + Vervang Live achtergrond. + + + + Reset live background. + Herstel Live achtergrond. + + + + &Split + &Splitsen + + + + Split a slide into two only if it does not fit on the screen as one slide. + Dia opdelen als de inhoud niet op een dia past. + OpenLP.displayTagDialog - + Configure Display Tags Configureer Weergave Tags @@ -3823,31 +4382,6 @@ Tekst codering is geen UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. <strong>Presentatie plugin</strong><br />De presentatie plugin voorziet in de mogelijkheid om verschillende soorten presentaties weer te geven. De keuze van beschikbare presentatie software staat in een uitklapmenu. - - - Load a new Presentation - Laad nieuwe presentatie - - - - Delete the selected Presentation - Geselecteerde presentatie verwijderen - - - - Preview the selected Presentation - Geef van geselecteerde presentatie voorbeeld weer - - - - Send the selected Presentation live - Geselecteerde presentatie Live - - - - Add the selected Presentation to the service - Voeg geselecteerde presentatie toe aan de liturgie - Presentation @@ -3866,61 +4400,81 @@ Tekst codering is geen UTF-8. container title Presentaties + + + Load a new presentation. + Laad nieuwe presentatie. + + + + Delete the selected presentation. + Geselecteerde presentatie verwijderen. + + + + Preview the selected presentation. + Geef van geselecteerde presentatie voorbeeld weer. + + + + Send the selected presentation live. + Geselecteerde presentatie Live. + + + + Add the selected presentation to the service. + Voeg geselecteerde presentatie toe aan de liturgie. + PresentationPlugin.MediaItem - + Select Presentation(s) Selecteer presentatie(s) - + Automatic automatisch - + Present using: Presenteren met: - + A presentation with that filename already exists. Er bestaat al een presentatie met die naam. - + File Exists Bestand bestaat - - Unsupported File - Niet ondersteund bestandsformaat - - - + This type of presentation is not supported. Dit soort presentatie wordt niet ondersteund. - + Presentations (%s) Presentaties (%s) - + Missing Presentation Ontbrekende presentatie - + The Presentation %s no longer exists. De presentatie %s bestaat niet meer. - + The Presentation %s is incomplete, please reload. De presentatie %s is niet compleet, herladen aub. @@ -3928,17 +4482,17 @@ Tekst codering is geen UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Beschikbare regelaars - + Allow presentation application to be overriden Presentatieprogramma kan overschreven worden - + %s (unavailable) %s (niet beschikbaar) @@ -3946,71 +4500,174 @@ Tekst codering is geen UTF-8. RemotePlugin - + <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. <strong>Remote Plugin</strong><br />The remote plugin voorziet in de mogelijkheid berichten te sturen naar een andere (draaiende) versie van OpenLP op een andere computer via een web-browser of via de remote API. - + Remote name singular Remote - + Remotes name plural Remotes - + Remote container title Remote + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Remote + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Podium Weergave + + + + Service Manager + Liturgie beheer + + + + Slide Controller + Dia regelaar + + + + Alerts + Waarschuwingen + + + + Search + Zoek + + + + Back + Terug + + + + Refresh + Vernieuwen + + + + Blank + Leeg + + + + Show + Toon + + + + Prev + Vorige + + + + Next + Volgende + + + + Text + Tekst + + + + Show Alert + Toon waarschuwingen + + + + Go Live + Ga Live + + + + Add To Service + Voeg toe aan Liturgie + + + + No Results + Niets gevonden + + + + Options + Opties + + RemotePlugin.RemoteTab - + Serve on IP address: Beschikbaar via IP-adres: - + Port number: Poort nummer: - + Server Settings Server instellingen + + + Remote URL: + Remote URL: + + + + Stage view URL: + Podium weergave URL: + SongUsagePlugin - + &Song Usage Tracking &Lied gebruik bijhouden - + &Delete Tracking Data Verwij&der gegevens liedgebruik - + Delete song usage data up to a specified date. Verwijder alle gegevens over lied gebruik tot een bepaalde datum. - + &Extract Tracking Data &Extraheer gegevens liedgebruik - + Generate a report on song usage. Geneer rapportage liedgebruik. @@ -4025,53 +4682,58 @@ Tekst codering is geen UTF-8. Gegevens liedgebruik bijhouden aan of uit zetten. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Liedgebruik plugin</strong><br />Met deze plugin kunt u bijhouden welke liederen tijdens de vieringen gezongen worden. - + SongUsage name singular Liedprotokollierung - + SongUsage name plural Liedprotokollierung - + SongUsage container title Liedgebruik + + + Song Usage + Liedgebruik + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Gegevens liedgebruik verwijderen - + Delete Selected Song Usage Events? Wilt u de gegevens liedgebruik verwijderen? - + Are you sure you want to delete selected Song Usage data? Weet u zeker dat u de gegevens liedgebruik wilt verwijderen? - + Deletion Successful Succesvol verwijderd - + All requested data has been deleted successfully. Alle opgegeven data is verwijderd. @@ -4079,42 +4741,42 @@ Tekst codering is geen UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Gegevens liedgebruik extraheren - + Select Date Range Selecteer periode - + to tot - + Report Location Locatie rapport - + Output File Location Bestandslocatie - + usage_detail_%s_%s.txt liedgebruik_details_%s_%s.txt - + Report Creation Maak rapportage - + Report %s has been successfully created. @@ -4123,12 +4785,12 @@ has been successfully created. is gemaakt. - + Output Path Not Selected Uitvoer pad niet geselecteerd - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. Geen geldige bestandslocatie opgegeven om de rapportage liedgebruik op te slaan. Kies een bestaande map op uw computer. @@ -4136,167 +4798,137 @@ is gemaakt. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Importeer liederen met de lied assistent. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Lied plugin</strong><br />De lied plugin regelt de weergave en het beheer van liederen. - + &Re-index Songs He&r-indexeer liederen - + Re-index the songs database to improve searching and ordering. Her-indexxer de liederen in de database om het zoeken en ordenen te verbeteren. - + Reindexing songs... Liederen her-indexeren... - - Add a new Song - Voeg nieuw lied toe - - - - Edit the selected Song - Bewerk geselecteerde lied - - - - Delete the selected Song - Verwijder geselecteerde lied - - - - Preview the selected Song - Toon voorbeeld geselecteerd lied - - - - Send the selected Song live - Toon lied Live - - - - Add the selected Song to the service - Voeg geselecteerde lied toe aan de liturgie - - - + Song name singular Lied - + Songs name plural Lieder - + Songs container title Liederen - + Arabic (CP-1256) Arabisch (CP-1256) - + Baltic (CP-1257) Baltisch (CP-1257) - + Central European (CP-1250) Centraal Europees (CP-1250) - + Cyrillic (CP-1251) Cyrillisch (CP-1251) - + Greek (CP-1253) Grieks (CP-1253) - + Hebrew (CP-1255) Hebreeuws (CP-1255) - + Japanese (CP-932) Japans (CP-932) - + Korean (CP-949) Koreaans (CP-949) - + Simplified Chinese (CP-936) Chinees, eenvoudig (CP-936) - + Thai (CP-874) Thais (CP-874) - + Traditional Chinese (CP-950) Traditioneel Chinees (CP-950) - + Turkish (CP-1254) Turks (CP-1254) - + Vietnam (CP-1258) Vietnamees (CP-1258) - + Western European (CP-1252) Westeuropees (CP-1252) - + Character Encoding Tekst codering - + Please choose the character encoding. The encoding is responsible for the correct character representation. Kies een tekstcodering (codepage). De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens. - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4305,45 +4937,75 @@ een correcte weergave van lettertekens. Meestal voldoet de suggestie van OpenLP. - + Exports songs using the export wizard. Exporteer liederen met de export assistent. + + + Add a new song. + Voeg nieuw lied toe. + + + + Edit the selected song. + Bewerk geselecteerde lied. + + + + Delete the selected song. + Verwijder geselecteerde lied. + + + + Preview the selected song. + Toon voorbeeld geselecteerd lied. + + + + Send the selected song live. + Toon lied Live. + + + + Add the selected song to the service. + Voeg geselecteerde lied toe aan de liturgie. + SongsPlugin.AuthorsForm - + Author Maintenance Auteur hebeer - + Display name: Weergave naam: - + First name: Voornaam: - + Last name: Achternaam: - + You need to type in the first name of the author. De voornaam van de auteur moet worden opgegeven. - + You need to type in the last name of the author. De achternaam van de auteur moet worden opgegeven. - + You have not set a display name for the author, combine the first and last names? Geen weergave naam opgegeven. Moeten de voor- en achternaam gecombineerd worden? @@ -4351,190 +5013,198 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Lied %d van %d wordt geïmporteerd... + + The file does not have a valid extension. + Dit bestand heeft geen geldige extensie. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Beheerd door %s SongsPlugin.EditSongForm - + Song Editor Lied bewerker - + &Title: &Titel: - + &Lyrics: Lied&tekst: - + Ed&it All &Alles bewerken - + Title && Lyrics Titel && Liedtekst - + &Add to Song Voeg toe &aan lied - + &Remove Ve&rwijderen - + A&dd to Song Voeg toe &aan lied - + R&emove V&erwijderen - + New &Theme Nieuw &Thema - + Copyright Information Copyright - + Comments Commentaren - + Theme, Copyright Info && Comments Thema, Copyright && Commentaren - + Add Author Voeg auteur toe - + This author does not exist, do you want to add them? Deze auteur bestaat nog niet, toevoegen? - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Geen auteur geselecteerd. Kies een auteur uit de lijst of voeg er een toe door de naam in te typen en op de knop "Voeg auteur toe" te klikken. - + Add Topic Voeg onderwerp toe - + This topic does not exist, do you want to add it? Dit onderwerp bestaat nog niet, toevoegen? - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Geen geldig onderwerp geselecteerd. Kies een onderwerp uit de lijst of type een nieuw onderwerp en klik op "Nieuw onderwerp toevoegen". - + Add Book Voeg boek toe - + This song book does not exist, do you want to add it? Dit liedboek bestaat nog niet, toevoegen? - + You need to type in a song title. Vul de titel van het lied in. - + You need to type in at least one verse. Vul minstens de tekst van één couplet in. - + Warning Waarschuwing - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. De volgorde van de coupletten klopt niet. Er is geen couplet dat overeenkomt met %s. Wel zijn %s beschikbaar. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? U heeft %s nergens in de vers volgorde gebruikt. Weet u zeker dat u dit lied zo wilt opslaan? - + Alt&ernate title: Afwiss&elende titel: - + &Verse order: &Vers volgorde: - + &Manage Authors, Topics, Song Books &Beheer auteurs, onderwerpen, liedboeken - + Authors, Topics && Song Book Auteurs, onderwerpen && liedboeken - + This author is already in the list. Deze auteur staat al in de lijst. - + This topic is already in the list. Dit onderwerp staat al in de lijst. - + Book: Boek: - + Number: Nummer: - + You need to have an author for this song. Iemand heeft dit lied geschreven. - + You need to type some text in to the verse. Er moet toch een tekst zijn om te zingen. @@ -4542,260 +5212,278 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.EditVerseForm - + Edit Verse Couplet bewerken - + &Verse type: Co&uplet type: - + &Insert &Invoegen + + + Split a slide into two by inserting a verse splitter. + Dia doormidden delen door een dia 'splitter' in te voegen. + SongsPlugin.ExportWizardForm - + Song Export Wizard Lied Exporteer Assistent - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. Deze assistent helpt u uw liederen te exporteren naar het openen vrije OpenLyrics worship lied bestand formaat. - + Select Songs Selecteer liederen - + Uncheck All Deselecteer alles - + Check All Selecteer alles - + Select Directory Selecteer map - - Select the directory you want the songs to be saved. - Selecteer de map waar de liederen moet worden bewaard. - - - + Directory: Map: - + Exporting Exporteren - + Please wait while your songs are exported. Even wachten terwijl de liederen worden geëxporteerd. - + You need to add at least one Song to export. Kies minstens een lied om te exporteren. - + No Save Location specified Niet opgegeven waar bestand moet worden bewaard - + Starting export... Start exporteren... - + Check the songs you want to export. Selecteer de liederen die u wilt exporteren. - + You need to specify a directory. Geef aan waar het bestand moet worden opgeslagen. - + Select Destination Folder Selecteer een doelmap + + + Select the directory where you want the songs to be saved. + Selecteer een map waarin de liederen moeten worden bewaard. + SongsPlugin.ImportWizardForm - + Song Import Wizard Lied importeer assistent - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. Deze assistent helpt liederen in verschillende bestandsformaten te importeren in OpenLP. Klik op volgende en kies daarna het bestandsformaat van het te importeren lied. - + Add Files... Toevoegen... - + Remove File(s) Verwijder bestand(en) - + Filename: Bestandsnaam: - + Please wait while your songs are imported. Even geduld tijdens het importeren. - + Select Document/Presentation Files Selecteer Documenten/Presentatie bestanden - + Generic Document/Presentation Algemeen Document/Presentatie - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Songs of Fellowship import is uitgeschakeld omdat OpenLP OpenOffice.org niet kan vinden op deze computer. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Algemeen document/presentatie import is uitgeschakeld omdat OpenLP OpenOffice.org niet kan vinden op deze computer. - - - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. OpenLyrics import is nog niet gemaakt, maar we hebben het voornemen dit te doen. Hopelijk lukt dit in een volgende versie. - - Administered by %s - Beheerd door %s - - - + OpenLP 2.0 Databases OpenLP 2.0 Databases - + openlp.org v1.x Databases openlp.org v1.x Databases - + Words Of Worship Song Files Words Of Worship Lied bestanden - + Songs Of Fellowship Song Files Songs Of Fellowship lied bestanden - + SongBeamer Files SongBeamer bestanden - + SongShow Plus Song Files SongShow Plus lied bestanden - + You need to specify at least one document or presentation file to import from. Selecteer minimaal een document of presentatie om te importeren. - + Foilpresenter Song Files Foilpresenter lied bestanden + + + Copy + Kopieer + + + + Save to File + Opslaan als bestand + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Songs of Fellowship import is uitgeschakeld omdat OpenLP OpenOffice.org niet kan vinden op deze computer. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + Algemeen document/presentatie import is uitgeschakeld omdat OpenLP OpenOffice.org niet kan vinden op deze computer. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Beheer de lijst met auteurs, onderwerpen en liedboeken - - - + Titles Titels - + Lyrics Liedtekst - + Delete Song(s)? Wis lied(eren)? - + CCLI License: CCLI Licentie: - + Entire Song Gehele lied - + Are you sure you want to delete the %n selected song(s)? + Weet u zeker dat u dit %n lied wilt verwijderen? Weet u zeker dat u deze %n lied(eren) wilt verwijderen? - + + + Maintain the lists of authors, topics and books. + Beheer de lijst met auteurs, onderwerpen en liedboeken. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Geen geldige openlp.org v1.x lied database. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Importeer lied %d van %d. + + Not a valid OpenLP 2.0 song database. + Geen geldige OpenLP 2.0 lied database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exporteren "%s"... @@ -4803,22 +5491,22 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.SongBookForm - + &Name: &Naam: - + &Publisher: &Uitgever: - + You need to type in a name for the book. Er moet een naam worden opgegeven. - + Song Book Maintenance Onderhoud Liedboeken @@ -4826,12 +5514,12 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.SongExportForm - + Finished export. Exporteren afgerond. - + Your song export failed. Liederen export is mislukt. @@ -4839,15 +5527,35 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + De volgende liederen konden niet worden geïmporteerd: + + + + Unable to open file + Kan bestand niet openen + + + + File not found + Bestand niet gevonden + + + + Cannot access OpenOffice or LibreOffice + Kan niet bij OpenOffice.org of LibreOffice komen + SongsPlugin.SongImportForm - + Your song import failed. Lied import mislukt. @@ -4855,107 +5563,107 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.SongMaintenanceForm - + Delete Author Auteur verwijderen - + Are you sure you want to delete the selected author? Weet u zeker dat u de auteur wilt verwijderen? - + Delete Topic Onderwerp verwijderen - + Are you sure you want to delete the selected topic? Weet u zeker dat u dit onderwerp wilt verwijderen? - + Delete Book Verwijder boek - + Are you sure you want to delete the selected book? Weet u zeker dat u dit boek wilt verwijderen? - + Could not add your author. Kon de auteur niet toevoegen. - + This author already exists. Deze auteur bestaat al. - + Could not add your topic. Kon dit onderwerp niet toevoegen. - + This topic already exists. Dit onderwerp bestaat al. - + Could not add your book. Kon dit boek niet toevoegen. - + This book already exists. Dit boek bestaat al. - + Could not save your changes. De wijzigingen kunnen niet opgeslagen worden. - + Could not save your modified topic, because it already exists. Kan dit onderwerp niet opslaan, omdat het reeds bestaat. - + This author cannot be deleted, they are currently assigned to at least one song. Deze auteur kan niet worden verwijderd, omdat er nog een lied aan is gekoppeld. - + This topic cannot be deleted, it is currently assigned to at least one song. Dit onderwerp kan niet worden verwijderd, omdat er nog een lied aan is gekoppeld. - + This book cannot be deleted, it is currently assigned to at least one song. Dit liedboek kan niet worden verwijderd, omdat er nog een lied aan is gekoppeld. - + Could not save your modified author, because the author already exists. Kan de auteur niet opslaan, omdat deze reeds bestaat. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? Deze auteur %s bestaat al. Liederen met auteur %s aan deze auteur %s koppelen? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? Dit onderwerp %s bestaat al. Liederen met onderwerp %s aan %s koppelen? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? Dit liedboek %s bestaat al. Liederen uit het Liedboek %s aan het liedboek %s koppelen? @@ -4963,27 +5671,27 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.SongsTab - + Songs Mode Lied instellingen - + Enable search as you type Zoeken tijdens het typen - + Display verses on live tool bar Coupletten weergeven op live werkbalk - + Update service from song edit Liturgie bijwerken met bewerkt lied - + Add missing songs when opening service Ontbrekende liederen toevoegen bij het openen van de liturgie @@ -4991,17 +5699,17 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.TopicsForm - + Topic Maintenance Onderwerp onderhoud - + Topic name: Onderwerp naam: - + You need to type in a topic name. U moet een onderwerp invullen. @@ -5009,39 +5717,47 @@ Meestal voldoet de suggestie van OpenLP. SongsPlugin.VerseType - + Verse Couplet - + Chorus Refrein - + Bridge Bridge - + Pre-Chorus Tussenspel - + Intro Intro - + Ending Eind - + Other Overig + + ThemeTab + + + Themes + Thema’s + + diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index a3905117e..1e5dc28ce 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -3,61 +3,61 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Você não entrou com um parâmetro para ser substituído. -Ainda deseja continuar? +Deseja continuar mesmo assim? - + No Parameter Found Nenhum Parâmetro Encontrado - + No Placeholder Found Nenhum Marcador de Posição Encontrado - + The alert text does not contain '<>'. Do you want to continue anyway? O texto de alerta não contém '<>'. -Você gostaria de continuar de qualquer maneira? +Deseja continuar mesmo assim? AlertsPlugin - + &Alert &Alerta - + Show an alert message. Exibir uma mensagem de alerta. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Plugin de Alertas</strong><br />O plugin de alertas controla a exibição de alertas de berçário na tela de apresentação + <strong>Plugin de Alerta</strong><br />O plugin de alerta controla a exibição de alertas de berçário na tela de apresentação - + Alert name singular Alerta - + Alerts name plural Alertas - + Alerts container title Alertas @@ -66,47 +66,47 @@ Você gostaria de continuar de qualquer maneira? AlertsPlugin.AlertForm - + Alert Message Mensagem de Alerta - + Alert &text: &Texto de Alerta: - + &New &Novo - + &Save &Salvar - + Displ&ay &Exibir - + Display && Cl&ose Exibir && &Fechar - + New Alert Novo Alerta - + You haven't specified any text for your alert. Please type in some text before clicking New. Você não digitou nenhum texto para o seu alerta. Por favor digite algum texto antes de clicar em Novo. - + &Parameter: &Parâmetro: @@ -122,32 +122,32 @@ Você gostaria de continuar de qualquer maneira? AlertsPlugin.AlertsTab - + Font Fonte - + Font name: Nome da fonte: - + Font color: Cor da fonte: - + Background color: - Cor do plano de fundo: + Cor de fundo: - + Font size: Tamanho da fonte: - + Alert timeout: Tempo limite para o Alerta: @@ -155,175 +155,188 @@ Você gostaria de continuar de qualquer maneira? BibleDB.Wizard - - Importing testaments... %s - Importando testamentos... %s - - - - Importing testaments... done. - Importando testamentos... concluído. - - - + Importing books... %s Importando livros... %s - + Importing verses from %s... Importing verses from <book name>... Importando versículos de %s... - + Importing verses... done. Importando versículos... concluído. + + BiblePlugin + + + &Upgrade older Bibles + &Atualizar Bíblias antigas + + + + Upgrade the Bible databases to the latest format. + Atualizar o banco de dados de Bíblias para o formato atual. + + BiblePlugin.HTTPBible - + Download Error - Erro no Download + Erro na Transferência - + Parse Error - Erro na Leitura + Erro de Interpretação - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Ocorreu um problema ao baixar os versículos selecionados. Verifique sua conexão com a Internet, e se este erro continuar ocorrendo, por favor considere relatar um bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - Houve um problema extraindo os versículos selecionados. Se este erro continuar ocorrendo, por favor considere relatar um bug. + Ocorreu um problema extraindo os versículos selecionados. Se este erro continuar ocorrendo, por favor considere relatar um bug. BiblePlugin.MediaItem - + Bible not fully loaded. - A Bíblia não foi carregada. + Bíblia não carregada completamente. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - Você não pode combinar um versículo simples e um duplo nos resultados das buscas. Você deseja deletar os resultados da sua pesquisa e comecar uma nova? + Você não pode combinar um versículo simples e um duplo nos resultados das buscas. Você deseja deletar os resultados da sua busca e comecar uma nova? + + + + Information + Informações + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + A Bíblia secundária não contém todos os versículos que estão na Bíblia principal. Somente versículos encontrados em ambas as Bíblias serão exibidas. %d versículos não foram inclusos nos resultados. BiblesPlugin - + &Bible &Bíblia - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Plugin da Bíblia</strong><br />Este plugin permite exibir versículos bíblicos de diferentes fontes durante o culto. - - - - Import a Bible - Importar Bíblia - - - - Add a new Bible - Adicionar nova Bíblia - - - - Edit the selected Bible - Editar a Bíblia selecionada - - - - Delete the selected Bible - Excluir a Bíblia selecionada - - - - Preview the selected Bible - Pré-Visualizar a Bíblia selecionada - - - - Send the selected Bible live - Projetar a Bíblia selecionada - - - - Add the selected Bible to the service - Adicione a Bíblia selecionada à Lista de Exibição - - - + Bible name singular Bíblia - + Bibles name plural Bíblias - + Bibles container title Bíblias - + No Book Found Nenhum Livro Encontrado - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Nenhum livro correspondente foi encontrado nesta Bíblia. Verifique se você digitou o nome do livro corretamente. + + + Import a Bible. + Importar uma Bíblia. + + + + Add a new Bible. + Adicionar uma Bíblia nova. + + + + Edit the selected Bible. + Editar a Bíblia selecionada. + + + + Delete the selected Bible. + Excluir a Bíblia selecionada. + + + + Preview the selected Bible. + Pré-visualizar a Bíblia selecionada. + + + + Send the selected Bible live. + Projetar a Bíblia selecionada. + + + + Add the selected Bible to the service. + Adicionar a Bíblia selecionada ao culto. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + <strong>Plugin de Bíblia</strong><br />O plugin de Bíblia permite exibir versículos bíblicos de diferentes origens durante o culto. + BiblesPlugin.BibleManager - + Scripture Reference Error Erro de Referência na Escritura - + Web Bible cannot be used Não é possível usar a Bíblia Online - + Text Search is not available with Web Bibles. A Pesquisa de Texto não está disponível para Bíblias Online. - + 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. Você não digitou uma palavra-chave de pesquisa. Você pode separar diferentes palavras-chave com um espaço para procurar por todas as palavras-chave e pode separá-las com uma vírgula para pesquisar por alguma delas. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - Nenhuma Bíblia instalada atualmente. Por favor, utilize o Assistente de Importação para instalar uma ou mais Bíblias. + Não há Bíblias instaladas atualmente. Por favor, utilize o Assistente de Importação para instalar uma ou mais Bíblias. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -334,15 +347,15 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse A sua referência das escrituras é inválida ou não é suportada pelo OpenLP. Por favor certifique-se que ela está de acordo com um dos seguintes padrões: -Capítulo do Livro -Capítulo do Lívro-Capítulo -Capítulo do Livro:Versículo-Versículo -Capítulo do Livro:Versículo-Versículo,Versículo-Versículo -Capítulo do Livro:Versículo-Versículo,Capítulo:Versículo-Versículo -Capítulo do Livro:Versículo-Capítulo:Versículo +Livro Capítulo +Livro Capítulo-Capítulo +Livro Capítulo:Versículo-Versículo +Livro Capítulo:Versículo-Versículo,Versículo-Versículo +Livro Capítulo:Versículo-Versículo,Capítulo:Versículo-Versículo +Livro Capítulo:Versículo-Capítulo:Versículo - + No Bibles Available Nenhum Bíblia Disponível @@ -350,45 +363,20 @@ Capítulo do Livro:Versículo-Capítulo:Versículo BiblesPlugin.BiblesTab - + Verse Display Exibição do Versículo - + Only show new chapter numbers Somente mostrar números de capítulos novos - - - Layout style: - Estilo do Layout: - - - - Display style: - Estilo de Exibição: - Bible theme: Tema da Bíblia: - - - Verse Per Slide - Versículos por Slide - - - - Verse Per Line - Versículos por Linha - - - - Continuous - Contínuo - No Brackets @@ -413,8 +401,8 @@ Capítulo do Livro:Versículo-Capítulo:Versículo Note: Changes do not affect verses already in the service. - Nota: -Mudanças não afetam os versículos que já estão na lista de exibição. + Observação: +Mudanças não afetam os versículos que já estão no culto. @@ -422,258 +410,334 @@ Mudanças não afetam os versículos que já estão na lista de exibição.Exibir versículos da Bíblia secundária + + BiblesPlugin.BookNameDialog + + + Select Book Name + Selecione o Nome do Livro + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + Não foi encontrado um correspondente para o nome do livro a seguir. Por favor, selecione o nome em Inglês a partir da lista. + + + + Current name: + Nome atual: + + + + Corresponding name: + Nome correspondente: + + + + Show Books From + Mostrar Livros do + + + + Old Testament + Antigo Testamento + + + + New Testament + Novo Testamento + + + + Apocrypha + Apócrifa + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + Você deve selecionar um livro. + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + Registrando Bíblia e carregando livros... + + + + Registering Language... + Registrando Idioma... + + + + Importing %s... + Importing <book name>... + Importando %s... + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Assistente de Importação de Bíblia - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Este assistente irá ajudá-lo a importar Bíblias de uma variedade de formatos. Clique no botão próximo abaixo para começar o processo selecionando o formato a ser importado. + Este assistente irá ajudá-lo a importar Bíblias de uma variedade de formatos. Clique no botão avançar abaixo para começar o processo selecionando o formato a ser importado. - + Web Download Download da Internet - + Location: Localização: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bíblia: - + Download Options - Opções de Download + Opções de Transferência - + Server: Servidor: - + Username: - Nome de Usuário: + Usuário: - + Password: Senha: - + Proxy Server (Optional) Servidor Proxy (Opcional) - + License Details Detalhes da Licença - + Set up the Bible's license details. Configurar detalhes de licença da Bíblia. - + Version name: Nome da Versão: - + Copyright: Direito Autoral: - + Please wait while your Bible is imported. Por favor aguarde enquanto a sua Bíblia é importada. - + You need to specify a file with books of the Bible to use in the import. - Você precisa especificar um arquivo com os livros da Bíblia para usar na importação. + Você deve especificar um arquivo com livros da Bíblia para usar na importação. - + You need to specify a file of Bible verses to import. - Você precisa especificar um arquivo de Versículos da Bíblia para importar. + Você deve especificar um arquivo de versículos da Bíblia para importar. - + You need to specify a version name for your Bible. - Você precisa especificar um nome de versão para a sua Bíblia. + Você deve especificar um nome de versão para a sua Bíblia. - + Bible Exists Bíblia Existe - + Your Bible import failed. - A sua Importação da Bíblia falhou. + A sua Importação de Bíblia falhou. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Você precisa definir os direitos autorais da sua Bíblia. Traduções em Domínio Público devem ser marcadas como tal. - + This Bible already exists. Please import a different Bible or first delete the existing one. - Esta Bíblia já existe. Importe uma Bíblia diferente ou apague a existente primeiro. + Esta Bíblia já existe. Pro favor, importe uma Bíblia diferente ou apague a existente primeiro. - - Starting Registering bible... - Registrando Bíblia... - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - Bíblia registrada. Note que os versos serão baixados de acordo -com o uso, portanto uma conexão com a internet é necessária. - - - + Permissions: Permissões: - + CSV File Arquivo CSV - + Bibleserver Bibleserver - + Bible file: Arquivo de Bíblia: - - Testaments file: - Arquivo de Testamentos - - - + Books file: - Arquivo de Livros + Arquivo de Livros: - + Verses file: - Arquivo de Versículos + Arquivo de Versículos: - - You have not specified a testaments file. Do you want to proceed with the import? - Você não especificou um arquivo de Testamentos. Deseja prosseguir com a importação? - - - + openlp.org 1.x Bible Files - Arquivos do openlp.org 1.x + Arquivos de Bíblia do openlp.org 1.x + + + + Registering Bible... + Registrando Bíblia... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + Bíblia registrada. Por favor, observe que os verísulos serão baixados de acordo +com o usu, portanto uma conexão com a internet é necessária. + + + + BiblesPlugin.LanguageDialog + + + Select Language + Selecione Idioma + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + OpenLP não pôde determinar o idioma desta tradução da Bíblia. Por favor, selecione o idioma na lista abaixo. + + + + Language: + Idioma: + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + Você deve escolher um idioma. BiblesPlugin.MediaItem - + Quick Rápido - + Find: - Buscar: + Localizar: - - Results: - Resultados: - - - + Book: Livro: - + Chapter: Capítulo: - + Verse: Versículo: - + From: De: - + To: - Para: + Até: - + Text Search - Busca por Texto + Pesquisar Texto - - Clear - Limpar - - - - Keep - Manter - - - + Second: Segundo: - + Scripture Reference Referência da Escritura + + + Toggle to keep or clear the previous results. + Alternar entre manter ou limpar resultados anteriores. + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... @@ -682,34 +746,267 @@ com o uso, portanto uma conexão com a internet é necessária. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detectando codificação (isto pode levar alguns minutos)... - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + Selecione um Diretório para Cópia de Segurança + + + + Bible Upgrade Wizard + Assistente de Atualização de Bíblias + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + Este assistente irá ajudá-lo a atualizar suas Bíblias existentes a partir de uma versão anterior do OpenLP 2. Clique no botão avançar abaixo para começar o processo de atualização. + + + + Select Backup Directory + Selecione o Diretório para Cópia de Segurança + + + + Please select a backup directory for your Bibles + Por favor, selecione um diretório para a cópia de segurança das suas Bíblias + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + As versões anteriores do OpenLP 2.0 não conseguem usar as Bíblias atualizadas. Isto irá criar uma cópia de segurança das suas Bíblias atuais para que possa copiar os arquivos de voltar para o diretório de dados do OpenLP caso seja necessário voltar a uma versão anterior do OpenLP. Instruções de como recuperar os arquivos podem ser encontradas no nosso <a href="http://wiki.openlp.org/faq">Perguntas Frequentes</a>. + + + + Please select a backup location for your Bibles. + Por favor, selecione o local da cópia de segurança das suas Bíblias. + + + + Backup Directory: + Diretório de Cópia de Segurança: + + + + There is no need to backup my Bibles + Não é necessário fazer uma cópia de segurança das minhas Bíblias + + + + Select Bibles + Selecione Bíblias + + + + Please select the Bibles to upgrade + Por favor, selecione as Bíblias a atualizar + + + + Version name: + Nome da versão: + + + + This Bible still exists. Please change the name or uncheck it. + Esta Bíblia ainda existe. Por favor, mude o nome ou desmarque-a. + + + + Upgrading + Atualizando + + + + Please wait while your Bibles are upgraded. + Por favor, aguarde enquanto suas Bíblias são atualizadas. + + + + You need to specify a Backup Directory for your Bibles. + Você deve especificar uma Pasta de Cópia de Segurança para suas Bíblias. + + + + You need to specify a version name for your Bible. + Você deve especificar um nome de versão para a sua Bíblia. + + + + Bible Exists + Bíblia Existe + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + Esta Bíblia já existe. Por favor atualizar uma Bíblia diferente, apague o existente ou desmarque-a. + + + + There are no Bibles available to upgrade. + Não há Bíblias disponíveis para atualização. + + + + Upgrading Bible %s of %s: "%s" +Failed + Atualizando Bíblia %s de %s: "%s" +Falhou + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + Atualizando Bíblia %s de %s: "%s" +Atualizando ... + + + + Download Error + Erro na Transferência + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + Atualizando Bíblia %s de %s: "%s" +Atualizando %s ... + + + + , %s failed + . %s falhou + + + + Upgrading Bible(s): %s successful%s + Atualizando Bíblia(s): %s com sucesso%s + + + + Upgrade failed. + A atualização falhou. + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + A cópia de segurança não teve êxito. +Para fazer uma cópia de segurança das suas Bíblias é necessário permissão de escrita no diretório selecionado. + + + + Starting Bible upgrade... + Iniciando atualização de Bíblia... + + + + To upgrade your Web Bibles an Internet connection is required. + Para atualizar suas Bíblias Internet é necessária uma conexão com a internet. + + + + Upgrading Bible %s of %s: "%s" +Complete + Atualizando Bíblia %s de %s: "%s" +Finalizado + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + Atualizando Bíblia(s): %s com sucesso%s +Observe, que versículos das Bíblias Internet serão transferidos sob demanda então é necessária uma conexão com a internet. + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Plugin Personalizado</strong><br />O plugin personalizado permite criar slides de texto que são apresentados da mesma maneira que as músicas. Este plugin permite mais liberdade do que o plugin de músicas. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + <strong>Plugin de Slide Personalizado</strong><br />O plugin de slide personalizado permite criar slides de texto personalizados que são apresentados da mesma maneira que as músicas. Este plugin permite mais liberdade do que o plugin de músicas. + + + + Custom Slide + name singular + Slide Personalizado + + + + Custom Slides + name plural + Slides Personalizados + + + + Custom Slides + container title + Slides Personalizados + + + + Load a new custom slide. + Carregar um novo slide personalizado. + + + + Import a custom slide. + Importar um slide personalizado. + + + + Add a new custom slide. + Adicionar um novo slide personalizado. + + + + Edit the selected custom slide. + Editar o slide personalizado selecionado. + + + + Delete the selected custom slide. + Excluir o slide personalizado selecionado. + + + + Preview the selected custom slide. + Pré-visualizar o slide personalizado atual. + + + + Send the selected custom slide live. + Enviar o slide personalizado selecionado para a projeção. + + + + Add the selected custom slide to the service. + Adicionar o slide personalizado selecionado ao culto. CustomPlugin.CustomTab - + Custom Display - Exibição Personalizada + Exibir Personalizado - + Display footer Exibir rodapé @@ -717,192 +1014,139 @@ com o uso, portanto uma conexão com a internet é necessária. CustomPlugin.EditCustomForm - + Edit Custom Slides Editar Slides Personalizados - + &Title: &Título: - + Add a new slide at bottom. Adicionar um novo slide no final. - + Edit the selected slide. Editar o slide selecionado. - + Edit all the slides at once. Editar todos os slides de uma vez. - - Split Slide - Dividir Slide - - - + Split a slide into two by inserting a slide splitter. Dividir um slide em dois, inserindo um divisor de slides. - + The&me: - The&ma: + Te&ma: - + &Credits: &Créditos: - + You need to type in a title. - Você precisa digitar um título. + Você deve digitar um título. - + You need to add at least one slide - Você precisa adicionar pelo menos um slide + Você deve adicionar pelo menos um slide - + Ed&it All &Editar Todos + + + Insert Slide + Inserir Slide + - CustomsPlugin + GeneralTab - - Import a Custom - Importar um Slide Personalizado - - - - Load a new Custom - Abrir um novo Slide Personalizado - - - - Add a new Custom - Adicionar um novo Slide Personalizado - - - - Edit the selected Custom - Editar o Slide selecionado - - - - Delete the selected Custom - Apagar o Slide selecionado - - - - Preview the selected Custom - Pré-visualizar o Slide selecionado - - - - Send the selected Custom live - Projetar o Slide selecionado - - - - Add the selected Custom to the service - Adicionar o Slide selecionado à Lista de Exibição - - - - Custom - name singular - Customizado - - - - Customs - name plural - Customizados - - - - Custom - container title - Customizado + + General + Geral ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - <strong>Plugin de Imagens</strong><br />O plugin de imagens fornece a exibição de imagens.<br />Uma das funcionalidades importantes deste plugin é a habilidade de agrupar várias imagens na Lista de Exibição, facilitando a exibição de várias imagens. Este plugin também pode usar a funcionalidade de "loop temporizado" do OpenLP para criar uma apresentação de slides que é executada automaticamente. Além disso, imagens do plugin podem ser usadas em sobreposição ao plano de fundo do tema atual, exibindo itens baseados em texto como músicas com a imagem selecionada ao fundo ao invés do plano de fundo fornecido pelo tema. + <strong>Plugin de Imagens</strong><br />O plugin de imagens permite a exibição de imagens.<br />Uma das funcionalidades importantes deste plugin é a possibilidade de agrupar várias imagens no culto, facilitando a exibição de várias imagens. Este plugin também pode usar a funcionalidade de "repetição temporizada" do OpenLP para criar uma apresentação de slides que é executada automaticamente. Além disso, imagens do plugin podem ser usadas em sobreposição ao plano de fundo do tema atual, exibindo itens baseados em texto como músicas com a imagem selecionada ao fundo ao invés do plano de fundo fornecido pelo tema. - - Load a new Image - Carregar um nova Imagem - - - - Add a new Image - Adicionar uma nova Imagem - - - - Edit the selected Image - Editar a Imagem selecionada - - - - Delete the selected Image - Excluir a Imagem selecionada - - - - Preview the selected Image - Visualizar a Imagem selecionada - - - - Send the selected Image live - Projetar a Imagem selecionada - - - - Add the selected Image to the service - Adicionar Imagem selecionada à Lista de Exibição - - - + Image name singular Imagem - + Images name plural Imagens - + Images container title Imagens + + + Load a new image. + Carregar uma nova imagem. + + + + Add a new image. + Adicionar uma nova imagem. + + + + Edit the selected image. + Editar a imagem selecionada. + + + + Delete the selected image. + Excluir a imagem selecionada. + + + + Preview the selected image. + Pré-visualizar a imagem selecionada. + + + + Send the selected image live. + Enviar a imagem selecionada para a projeção. + + + + Add the selected image to the service. + Adicionar a imagem selecionada ao culto. + ImagePlugin.ExceptionDialog - + Select Attachment Selecionar Anexo @@ -910,138 +1154,138 @@ com o uso, portanto uma conexão com a internet é necessária. ImagePlugin.MediaItem - + Select Image(s) Selecionar Imagem(s) - + You must select an image to delete. - Você precisa selecionar uma imagem para apagar. + Você precisa selecionar uma imagem para excluir. - + You must select an image to replace the background with. Você precisa selecionar uma imagem para definir como plano de fundo. - + Missing Image(s) Imagem(s) não encontrada(s) - + The following image(s) no longer exist: %s - As seguintes imagens não existem: %s + A(s) seguinte(s) imagem(s) não existe(m) mais: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - As seguintes imagens não existem: %s -Deseja continuar adicionando as outras imagens? + A(s) seguinte(s) imagem(s) não existe(m) mais: %s +Mesmo assim, deseja continuar adicionando as outras imagens? - + There was a problem replacing your background, the image file "%s" no longer exists. - Ocorreu um erro ao substituir o plano de fundo da Projeção. O arquivo de imagem "%s" não existe. + Ocorreu um erro ao substituir o plano de fundo, o arquivo de imagem "%s" não existe. MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - <strong>Plugin de Mídia</strong><br />O plugin de mídia faz a reprodução de áudio e vídeo. + <strong>Plugin de Mídia</strong><br />O plugin de mídia permite a reprodução de áudio e vídeo. - - Load a new Media - Carregar nova Mídia - - - - Add a new Media - Adicionar nova Mídia - - - - Edit the selected Media - Editar Mídia selecionada - - - - Delete the selected Media - Excluir a Mídia selecionada - - - - Preview the selected Media - Pré-visualizar a Mídia selecionada - - - - Send the selected Media live - Projetar a Mídia selecionada - - - - Add the selected Media to the service - Adicionar a Mídia selecionada à Lista de Exibição - - - + Media name singular Mídia - + Media name plural Mídia - + Media container title Mídia + + + Load new media. + Carregar nova mídia. + + + + Add new media. + Adicionar nova mídia. + + + + Edit the selected media. + Editar a mídia selecionada. + + + + Delete the selected media. + Excluir a mídia selecionada. + + + + Preview the selected media. + Pré-visualizar a mídia selecionada. + + + + Send the selected media live. + Enviar a mídia selecionada para a projeção. + + + + Add the selected media to the service. + Adicionar a mídia selecionada ao culto. + MediaPlugin.MediaItem - + Select Media Selecionar Mídia - + You must select a media file to delete. Você deve selecionar um arquivo de mídia para apagar. - + Missing Media File Arquivo de Mídia não encontrado - + The file %s no longer exists. O arquivo %s não existe. - + You must select a media file to replace the background with. Você precisa selecionar um arquivo de mídia para substituir o plano de fundo. - + There was a problem replacing your background, the media file "%s" no longer exists. Ocorreu um erro ao substituir o plano de fundo. O arquivo de mídia "%s" não existe. - + Videos (%s);;Audio (%s);;%s (*) Vídeos (%s);;Áudio (%s);;%s (*) @@ -1049,12 +1293,12 @@ Deseja continuar adicionando as outras imagens? MediaPlugin.MediaTab - + Media Display Exibição de Mídia - + Use Phonon for video playback Usar o Phonon para exibição de vídeo @@ -1062,62 +1306,59 @@ Deseja continuar adicionando as outras imagens? OpenLP - + Image Files Arquivos de Imagem + + + Information + Informações + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + O formato de Bíblia foi alterado. +Você deve atualizar suas Bíblias existentes. +OpenLP deve atualizar agora? + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP<version><revision> - Projeção de Letras Open Source - -O OpenLP é um software livre de apresentação em igrejas, ou de projeção de letras, usado para exibir slides de músicas, versículos da Bíblia, vídeos, imagens e até apresentações (se OpenOffice.org, PowerPoint ou Powerpoint Viewer estiver instalado) para louvor na igreja usando um computador e um projetor. - -Conheça mais sobre o OpenLP: http://openlp.org/ - -O OpenLP é escrito e mantido por voluntários. Se você gostaria de contribuir para mais softwares livres Cristãos serem produzidos, considere contribuir usando o botão abaixo. - - - + Credits Créditos - + License Licença - + Contribute Contribuir - + build %s compilação %s - + 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. - Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença. + Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre; na versão 2 da Licença. - + 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 below for more details. Este programa é distribuido na esperança que será útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO PARA UM DETERMINADO FIM. Veja abaixo para maiores detalhes. - + Project Lead %s @@ -1242,214 +1483,343 @@ Créditos Finais pela Graça ele nos libertou. - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 - Direitos Autorais © 2004-2011 Raoul Snyman -Porções de Direitos Autorais © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - Projeção de Letras Código Aberto + +O OpenLP é um software livre de apresentações ou projeções de letras em igrejas, used to exibir slides de músicas, versículos da Bíblia, vídeos, imagens, e até apresentações (se estiver instalado o Impress, PowerPoint ou visualizador PowerPoint) para louvor na igreja usando um computador e um projetor. + +Conheça mais sobre OpenLP: http://openlp.org/ + +O OpenLP é escrito e mantido por voluntários. Se você gostaria de ver mais softwares Cristãos gratuítos sendo escritos, por favor, considere contribuir usando o botão abaixo. + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s + Direitos autorais © 2004-2011 %s +Porções com direitos autorais © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings Configurações da Interface - + Number of recent files to display: Número de arquivos recentes a serem exibidos: - + Remember active media manager tab on startup Lembrar aba ativa do gerenciador de mídia ao iniciar - + Double-click to send items straight to live - Clicar duas vezes para enviar ítens ao vivo + Clicar duas vezes para diretamente projetar itens - + Expand new service items on creation - Expandir novos itens da lista de exibição + Expandir novos itens do culto ao serem criados - + Enable application exit confirmation Habilitar confirmação de saída do programa - + Mouse Cursor Ponteiro do Mouse - + Hide mouse cursor when over display window - Ocultar o cursor do mouse quando estiver sobre a tela de exibição + Ocultar o cursor do mouse quando estiver sobre a tela de projeção - + Default Image Imagem Padrão - + Background color: Cor do plano de fundo: - + Image file: Arquivo de Imagem: - + Open File Abrir Arquivo + + + Preview items when clicked in Media Manager + Pré-visualizar itens quando clicados no Gerenciador de Mídia + + + + Advanced + Avançado + + + + Click to select a color. + Clique para selecionar uma cor. + + + + Browse for an image file to display. + Procurar um arquivo de imagem para exibir. + + + + Revert to the default OpenLP logo. + Reverter ao logotipo padrão OpenLP. + OpenLP.DisplayTagDialog - + Edit Selection Editar Seleção - - Update - Atualizar - - - + Description Descrição - + Tag Etiqueta - + Start tag Etiqueta Inicial - + End tag Etiqueta Final - - Default - Padrão - - - + Tag Id Id da Etiqueta - + Start HTML - Início do HTML + Iniciar HTML - + End HTML - Fim do HTML + Finalizar HTML + + + + Save + Salvar OpenLP.DisplayTagTab - + Update Error Erro no Update - + Tag "n" already defined. Etiqueta "n" já está definida. - + Tag %s already defined. Etiqueta %s já está definida. + + + New Tag + Novo Tag + + + + </and here> + </e aqui> + + + + <HTML here> + <HTML aqui> + + + + OpenLP.DisplayTags + + + Red + Vermelho + + + + Black + Preto + + + + Blue + Azul + + + + Yellow + Amarelo + + + + Green + Verde + + + + Pink + Rosa + + + + Orange + Laranja + + + + Purple + Púrpura + + + + White + Branco + + + + Superscript + Sobrescrito + + + + Subscript + Subscrito + + + + Paragraph + Parágrafo + + + + Bold + Negrito + + + + Italics + Itálico + + + + Underline + Sublinhado + + + + Break + Quebra + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - Ops! O OpenLP encontrou um problema e não pôde recuperar-se. O texto na caixa abaixo contém informações que podem ser úteis para os desenvolvedores do OpenLP. Por favor, envie um e-mail para bugs@openlp.org, junto com uma descrição detalhada daquilo que você estava fazendo quando o problema ocorreu. + Ops! O OpenLP encontrou um problema e não pôde recuperar-se. O texto na caixa abaixo contém informações que podem ser úteis para os desenvolvedores do OpenLP, então, por favor, envie um e-mail para bugs@openlp.org, junto com uma descrição detalhada daquilo que você estava fazendo quando o problema ocorreu. - + Error Occurred Ocorreu um Erro - + Send E-Mail Enviar E-Mail - + Save to File Salvar para um Arquivo - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Por favor, descreva o que você estava fazendo para causar este erro (Mínimo de 20 caracteres) - + Attach File Anexar Arquivo - + Description characters to enter : %s - Caracteres que podem ser escritos na descrição: %s + Caracteres que podem ser digitadas na descrição: %s OpenLP.ExceptionForm - + Platform: %s Plataforma: %s - + Save Crash Report Salvar Relatório de Travamento - + Text files (*.txt *.log *.text) Arquivos de texto (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1480,7 +1850,7 @@ Versão %s - + *OpenLP Bug Report* Version: %s @@ -1516,17 +1886,17 @@ Agradecemos se for possível escrever seu relatório em inglês. OpenLP.FileRenameForm - + File Rename Renomear arquivo - + New File Name: Novo nome de Arquivo: - + File Copy Copiar arquivo @@ -1534,324 +1904,344 @@ Agradecemos se for possível escrever seu relatório em inglês. OpenLP.FirstTimeLanguageForm - + Select Translation - Selecione Tradução + Selecione Idioma - + Choose the translation you'd like to use in OpenLP. - Escolha uma tradução que você gostaria de utilizar no OpenLP. + Escolha o idioma que você gostaria de utilizar no OpenLP. - + Translation: - Tradução: + Idioma: OpenLP.FirstTimeWizard - + Downloading %s... - Baixando %s... + Transferindo %s... - + Download complete. Click the finish button to start OpenLP. - Download finalizado. Clique no botão terminar para iniciar o OpenLP. + Transferência finalizada. Clique no botão terminar para iniciar o OpenLP. - + Enabling selected plugins... Habilitando os plugins selecionados... - + First Time Wizard Assistente de Primeira Utilização - + Welcome to the First Time Wizard Bem vindo ao Assistente de Primeira Utilização - - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - O assistente irá ajudá-lo na configuração do OpenLP para o primeiro uso. Clique no botão "Próximo" abaixo para iniciar a seleção das opções iniciais. - - - - Activate required Plugins - Ativar os Plugins Requeridos - - - - Select the Plugins you wish to use. - Selecione os Plugins aos quais você deseja utilizar. - - - - Songs - Músicas - - Custom Text - Texto Customizado + Activate required Plugins + Ativar os Plugins necessários - Bible - Bíblia + Select the Plugins you wish to use. + Selecione os Plugins que você deseja utilizar. - - Images - Imagens + + Songs + Músicas - Presentations - Apresentações + Custom Text + Texto Personalizado + Bible + Bíblia + + + + Images + Imagens + + + + Presentations + Apresentações + + + Media (Audio and Video) Mídia (Áudio e Vídeo) - + Allow remote access Permitir acesso remoto - + Monitor Song Usage - Monitor de Utilização das Músicas + Monitorar Utilização das Músicas - + Allow Alerts Permitir Alertas - + No Internet Connection Conexão com a Internet Indisponível - + Unable to detect an Internet connection. Não foi possível detectar uma conexão com a Internet. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. To cancel the First Time Wizard completely, press the finish button now. - Nenhuma conexão com a internet foi encontrada. O Assistente de Primeiro Uso necessita uma conexão para baixar músicas, Bíblias e temas de exemplo. + Nenhuma conexão com a internet foi encontrada. O Assistente de Primeiro Uso necessita de uma conexão com a internet para baixar exemplos de músicas, Bíblias e temas. -Para executar o assistente novamente mais tarde e importar os dados de exemplo, clique no botão cancelar, verifique a sua conexão e inicie o OpenLP novamente. +Para executar o assistente novamente mais tarde e importar os dados de exemplo, clique no botão cancelar, verifique a sua conexão com a internet e reinicie o OpenLP. Para cancelar o assistente completamente, clique no botão finalizar. - + Sample Songs Músicas de Exemplo - + Select and download public domain songs. Selecione e baixe músicas de domínio público. - + Sample Bibles Bíblias de Exemplo - + Select and download free Bibles. Selecione e baixe Bíblias gratuitas. - + Sample Themes Temas de Exemplo - + Select and download sample themes. Selecione e baixe temas de exemplo. - + Default Settings - Configurações Padrão + Configurações Padrões - + Set up default settings to be used by OpenLP. - Configure as configurações padrão que serão utilizadas pelo OpenLP. + Configure os ajustes padrões que serão utilizados pelo OpenLP. - - Setting Up And Importing - Configurando e Importando - - - - Please wait while OpenLP is set up and your data is imported. - Por Favor aguarde enquanto o OpenLP é configurado e os seus dados importados. - - - + Default output display: - Painel de Projeção Padrão: + Saída de projeção padrão: - + Select default theme: - Selecione um tema padrão: + Selecione o tema padrão: - + Starting configuration process... Iniciando o processo de configuração... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + Este assistente irá ajudá-lo na configuração do OpenLP para o uso inicial. Clique abaixo no botão avançar para começar. + + + + Setting Up And Downloading + Configurando e Transferindo + + + + Please wait while OpenLP is set up and your data is downloaded. + Por favor, aguarde enquanto o OpenLP é configurado e seus dados são transferidos. + + + + Setting Up + Configurando + + + + Click the finish button to start OpenLP. + Clique o botão finalizar para iniciar o OpenLP. + OpenLP.GeneralTab - + General Geral - + Monitors Monitores - + Select monitor for output display: Selecione um monitor para exibição: - + Display if a single screen Exibir em caso de tela única - + Application Startup - Inicialização da Aplicação + Inicialização do Aplicativo - + Show blank screen warning Exibir alerta de tela em branco - + Automatically open the last service - Abrir a última Lista de Exibição automaticamente + Abrir automaticamente o último culto + + + + Show the splash screen + Exibir a tela de abertura + + + + Application Settings + Configurações do Aplicativo - Show the splash screen - Exibir a tela inicial + Prompt to save before starting a new service + Perguntar sobre salvamento antes de iniciar um novo culto - Application Settings - Configurações da Aplicação - - - - Prompt to save before starting a new service - Perguntar sobre salvamento antes de iniciar uma nova lista - - - Automatically preview next item in service - Pré-visualizar automaticamente o próximo item na Lista de Exibição + Pré-visualizar automaticamente o próximo item no culto - Slide loop delay: - Atraso no loop de slide: - - - sec seg - + CCLI Details Detalhes de CCLI - + SongSelect username: Usuário SongSelect: - + SongSelect password: Senha do SongSelect: - + Display Position Posição do Display - + X X - + Y Y - + Height Altura - + Width Largura - + Override display position Modificar posição do display - + Check for updates to OpenLP - Procurar por updates do OpenLP + Procurar por atualizações do OpenLP + + + + Unblank display when adding new live item + Ativar projeção ao adicionar um item novo + + + + Enable slide wrap-around + Habilitar repetição de slides + + + + Timed slide interval: + Intervalo temporizado de slide: OpenLP.LanguageManager - + Language Idioma - + Please restart OpenLP to use your new language setting. Por favor reinicie o OpenLP para usar a nova configuração de idioma. @@ -1859,516 +2249,478 @@ Para cancelar o assistente completamente, clique no botão finalizar. OpenLP.MainDisplay - + OpenLP Display - Exibição do OpenLP + Saída do OpenLP OpenLP.MainWindow - + &File &Arquivo - + &Import &Importar - + &Export &Exportar - + &View - &Visualizar + &Exibir - + M&ode M&odo - + &Tools &Ferramentas - + &Settings &Configurações - + &Language &Idioma - + &Help - &Ajuda + Aj&uda - + Media Manager Gerenciador de Mídia - + Service Manager - Lista de Exibição + Gerenciador de Culto - + Theme Manager - Gerenciador de Temas + Gerenciador de Tema - + &New &Novo - - Ctrl+N - Ctrl+N - - - + &Open &Abrir - + Open an existing service. - Abrir uma Lista de Exibição existente. + Abrir um culto existente. - - Ctrl+O - Ctrl+O - - - + &Save &Salvar - + Save the current service to disk. - Salvar a Lista de Exibição no disco. + Salvar o culto atual no disco. - - Ctrl+S - Ctrl+S - - - + Save &As... Salvar &Como... - + Save Service As - Salvar Lista de Exibição Como + Salvar Culto Como - + Save the current service under a new name. - Salvar a Lista de Exibição atual com um novo nome. + Salvar o culto atual com um novo nome. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit S&air - + Quit OpenLP Fechar o OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Tema - + &Configure OpenLP... &Configurar o OpenLP... - + &Media Manager &Gerenciador de Mídia - + Toggle Media Manager Alternar Gerenciador de Mídia - + Toggle the visibility of the media manager. Alternar a visibilidade do gerenciador de mídia. - - - F8 - F8 - - - - &Theme Manager - &Gerenciador de Temas - - Toggle Theme Manager - Alternar para Gerenciamento de Temas + &Theme Manager + &Gerenciador de Tema - Toggle the visibility of the theme manager. - Alternar a visibilidade do Gerenciador de Temas. + Toggle Theme Manager + Alternar para Gerenciamento de Tema - F10 - F10 + Toggle the visibility of the theme manager. + Alternar a visibilidade do gerenciador de tema. &Service Manager - &Lista de Exibição + Gerenciador de &Culto Toggle Service Manager - Alternar a Lista de Exibição + Alternar o Gerenciador de Culto Toggle the visibility of the service manager. - Alternar visibilidade da Lista de Exibição. + Alternar visibilidade do gerenciador de culto. - F9 - F9 - - - &Preview Panel &Painel de Pré-Visualização - + Toggle Preview Panel - Alternar para Painel de Pré-Visualização + Alternar o Painel de Pré-Visualização + + + + Toggle the visibility of the preview panel. + Alternar a visibilidade do painel de pré-visualização. - Toggle the visibility of the preview panel. - Alternar a visibilidade da coluna de pré-visualização. + &Live Panel + &Painel de Projeção - F11 - F11 + Toggle Live Panel + Alternar Painel da Projeção - &Live Panel - &Coluna da Projeção + Toggle the visibility of the live panel. + Alternar a visibilidade do painel de projeção. - Toggle Live Panel - Alternar Coluna da Projeção - - - - Toggle the visibility of the live panel. - Alternar a visibilidade da coluna de projeção. - - - - F12 - F12 - - - &Plugin List &Lista de Plugins - + List the Plugins Listar os Plugins - - Alt+F7 - Alt+F7 - - - + &User Guide &Guia do Usuário - + &About &Sobre - + More information about OpenLP Mais informações sobre o OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Ajuda Online - + &Web Site &Web Site - + Use the system language, if available. Usar o idioma do sistema, caso disponível. - + Set the interface language to %s Definir o idioma da interface como %s - + Add &Tool... Adicionar &Ferramenta... - + Add an application to the list of tools. - Adicionar uma aplicação à lista de ferramentas. + Adicionar um aplicativo à lista de ferramentas. - + &Default &Padrão - + Set the view mode back to the default. - Reverter o modo de visualização de volta ao padrão. + Reverter o modo de visualização ao padrão. - + &Setup - &Configurar + &Configuração - + Set the view mode to Setup. - Configurar o modo de visualização para Setup. + Configurar o modo de visualização para Configuração. - + &Live &Ao Vivo - + Set the view mode to Live. - Configurar o modo de visualização como Projeção. + Configurar o modo de visualização como Ao Vivo. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. A versão %s do OpenLP está disponível para download (você está atualmente usando a versão %s). -Voce pode baixar a versão mais nova em http://openlp.org/. +Voce pode baixar a última versão em http://openlp.org/. - + OpenLP Version Updated Versão do OpenLP Atualizada - + OpenLP Main Display Blanked - Tela Principal do OpenLP em Branco + Tela Principal do OpenLP desativada - + The Main Display has been blanked out - A Tela Principal foi apagada + A Tela Principal foi desativada - + Default Theme: %s Tema padrão: %s - + English Please add the name of your language here - Português (Brasil) + Português do Brasil - + Configure &Shortcuts... Configurar &Atalhos... - + Close OpenLP Fechar o OpenLP - + Are you sure you want to close OpenLP? - Você tem certeza de que quer fechar o OpenLP? + Você tem certeza de que deseja fechar o OpenLP? - - Print the current Service Order. - Imprimir a Lista de Exibição atual. - - - - Ctrl+P - Ctrl+P - - - + &Configure Display Tags &Configurar Etiquetas de Exibição - + Open &Data Folder... Abrir Pasta de &Dados... - + Open the folder where songs, bibles and other data resides. - Abrir a pasta na qual músicas, Bíblias e outros arquivos são armazenados. + Abrir a pasta na qual músicas, bíblias e outros arquivos são armazenados. - + &Autodetect &Auto detectar + + + Update Theme Images + Atualizar Imagens de Tema + + + + Update the preview images for all themes. + Atualizar as imagens de pré-visualização de todos os temas. + + + + Print the current service. + Imprimir o culto atual. + OpenLP.MediaManagerItem - + No Items Selected Nenhum Item Selecionado &Add to selected Service Item - &Adicionar à Lista de Exibição selecionada + &Adicionar ao Item de Ordem de Culto selecionado - + You must select one or more items to preview. - Você precisa selecionar um ou mais itens para pré-visualizar. + Você deve selecionar um ou mais itens para pré-visualizar. - + You must select one or more items to send live. - Você precisa selecionar um ou mais itens para projetar. + Você deve selecionar um ou mais itens para projetar. - + You must select one or more items. - Você precisa selecionar um ou mais itens. + Você deve selecionar um ou mais itens. - + You must select an existing service item to add to. - Você precisa selecionar um item da lista ao qual adicionar. + Você deve selecionar um item de culto existente ao qual adicionar. - + Invalid Service Item - Item da Lista de Exibição inválido + Item de Culto inválido - + You must select a %s service item. - Você precisa selecionar um item %s da Lista de Exibição. + Você deve selecionar um item de culto %s. + + + + You must select one or more items to add. + Você deve selecionar um ou mais itens para adicionar. + + + + No Search Results + Nenhum Resultado de Busca + + + + Duplicate filename %s. +This filename is already in the list + Nome de arquivo duplicado %s. +Este nome de arquivo já está na lista OpenLP.PluginForm - + Plugin List Lista de Plugins - + Plugin Details Detalhes do Plugin - + Status: Status: - + Active Ativo - + Inactive Inativo - + %s (Inactive) %s (Inativo) - + %s (Active) %s (Ativo) - + %s (Disabled) %s (Desabilitado) @@ -2376,20 +2728,20 @@ Voce pode baixar a versão mais nova em http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - Ajustar na Página + Ajustar à Página - + Fit Width - Ajustar Largura + Ajustar à Largura OpenLP.PrintServiceForm - + Options Opções @@ -2409,55 +2761,60 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Copiar como HTML - + Zoom In Aumentar o Zoom - + Zoom Out Diminuir o Zoom - + Zoom Original Zoom Original - + Other Options Outras Opções - + Include slide text if available Incluir texto do slide se disponível - + Include service item notes - Incluir notas da lista de exibição + Incluir notas do item de culto - + Include play length of media items Incluir duração dos itens de mídia - - Service Order Sheet - Folha de Ordem de Culto + + Add page break before each text item + Adicionar uma quebra de página antes de cada item de texto + + + + Service Sheet + Folha de Culto OpenLP.ScreenList - + Screen Tela - + primary primário @@ -2465,233 +2822,273 @@ Voce pode baixar a versão mais nova em http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item - Reordenar Item da Lista de Exibição + Reordenar Item de Culto OpenLP.ServiceManager - - Load an existing service - Carregar uma Lista de Exibição existente - - - - Save this service - Salvar esta Lista de Exibição - - - - Select a theme for the service - Selecione um tema para a Lista de Exibição - - - + Move to &top Mover para o &topo - + Move item to the top of the service. - Mover item para o topo da Lista de Exibição. + Mover item para o topo do culto. - + Move &up Mover para &cima - + Move item up one position in the service. - Mover item uma posição acima na Lista de Exibição. + Mover item uma posição para cima no culto. - + Move &down Mover para &baixo - + Move item down one position in the service. - Mover item uma posição abaixo na Lista de Exibição. + Mover item uma posição para baixo no culto. - + Move to &bottom Mover para o &final - + Move item to the end of the service. - Mover item para o final da Lista de Exibição. + Mover item para o final do culto. - + &Delete From Service - &Excluir da Lista de Exibição + &Excluir do Culto - + Delete the selected item from the service. - Excluir o item selecionado da Lista de Exibição. + Excluir o item selecionado do culto. - + &Add New Item &Adicionar um Novo Item - + &Add to Selected Item &Adicionar ao Item Selecionado - + &Edit Item &Editar Item - + &Reorder Item &Reordenar Item - + &Notes - &Notas + &Anotações - + &Change Item Theme &Alterar Tema do Item - + File is not a valid service. The content encoding is not UTF-8. - O arquivo não é uma lista válida. + O arquivo não é um culto válida. A codificação do conteúdo não é UTF-8. - + File is not a valid service. - Arquivo não é uma Lista de Exibição válida. + Arquivo não é uma ordem de culto válida. - + Missing Display Handler - Faltando o Handler de Exibição + Faltando o Manipulador de Exibição - + Your item cannot be displayed as there is no handler to display it - O seu item não pode ser exibido porque não existe um handler para exibí-lo + O seu item não pode ser exibido porque não existe um manipulador para exibí-lo - + Your item cannot be displayed as the plugin required to display it is missing or inactive - O item não pode ser exibido porque o plugin necessário para visualizá-lo está faltando ou está inativo + O item não pode ser exibido porque o plugin necessário para visualizá-lo está ausente ou está desativado - + &Expand all &Expandir todos - + Expand all the service items. - Expandir todos os itens da lista. + Expandir todos os itens do culto. - + &Collapse all &Recolher todos - + Collapse all the service items. - Ocultar todos os subitens da lista. + Recolher todos os itens do culto. - + Open File Abrir Arquivo - + OpenLP Service Files (*.osz) - Listas de Exibição do OpenLP (*.osz) + Arquivos de Culto do OpenLP (*.osz) - + Moves the selection down the window. - Move a seleção para baixo dentro da janela. + Move a seleção para baixo dentro da janela. - + Move up Mover para cima - + Moves the selection up the window. - Move a seleção para cima dentro da janela. + Move a seleção para cima dentro da janela. - + Go Live Projetar - + Send the selected item to Live. Enviar o item selecionado para a Projeção. - + Modified Service - Lista de Exibição Modificada + Culto Modificado - - Notes: - Anotações: - - - + &Start Time &Horário Inicial - + Show &Preview - Exibir &Visualização + Exibir &Pré-visualização - + Show &Live Exibir &Projeção - + The current service has been modified. Would you like to save this service? - A lista de exibição atual foi modificada. Você gostaria de salvá-la? + O culto atual foi modificada. Você gostaria de salvar este culto? + + + + File could not be opened because it is corrupt. + Arquivo não pôde ser aberto porque está corrompido. + + + + Empty File + Arquivo vazio + + + + This service file does not contain any data. + Este arquivo de culto não contém dados. + + + + Corrupt File + Arquivo corrompido + + + + Custom Service Notes: + Anotações de Culto Personalizados: + + + + Notes: + Observações: + + + + Playing time: + Duração: + + + + Untitled Service + Culto Sem Nome + + + + Load an existing service. + Carregar um culto existente. + + + + Save this service. + Salvar este culto. + + + + Select a theme for the service. + Selecionar um tema para o culto. + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + Este arquivo está corrompido ou não é um arquivo de culto do OpenLP 2.0. OpenLP.ServiceNoteForm - + Service Item Notes - Anotações do Item + Anotações do Item de Culto OpenLP.SettingsForm - + Configure OpenLP Configurar o OpenLP @@ -2699,221 +3096,276 @@ A codificação do conteúdo não é UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts Personalizar Atalhos - + Action Ação - + Shortcut Atalho - - Default: %s - Padrão: %s - - - - Custom: - Personalizado: - - - - None - Nenhum - - - + Duplicate Shortcut - Atalho Duplicado + Atalho Repetido - + The shortcut "%s" is already assigned to another action, please use a different shortcut. O atalho "%s" já está designado para outra ação, escolha um atalho diferente. - + Alternate - Alternar + Alternativo + + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + Selecione uma ação e clique em um dos botões abaixo para iniciar a captura de um novo atalho primário ou alternativo, respectivamente. + + + + Default + Padrão + + + + Custom + Personalizado + + + + Capture shortcut. + Capturar atalho. + + + + Restore the default shortcut of this action. + Restaurar o atalho padrão desta ação. + + + + Restore Default Shortcuts + Restaurar Atalhos Padrões + + + + Do you want to restore all shortcuts to their defaults? + Deseja restaurar todos os atalhos ao seus padrões? OpenLP.SlideController - - Move to previous - Mover para o anterior - - - - Move to next - Mover para o próximo - - - + Hide Ocultar - - Move to live - Mover para projeção - - - - Start continuous loop - Iniciar repetição contínua - - - - Stop continuous loop - Parar repetição contínua - - - - Delay between slides in seconds - Intervalo entre slides em segundos - - - - Start playing media - Iniciar a reprodução de mídia - - - + Go To Ir Para - - Edit and reload song preview - Editar e recarregar pré-visualização da música - - - + Blank Screen Apagar Tela - + Blank to Theme - Apagar e deixar Fundo + Apagar e deixar o Tema - + Show Desktop Mostrar a Área de Trabalho - + Previous Slide Slide Anterior - + Next Slide - Próximo Slide + Slide Seguinte - + Previous Service Lista Anterior - + Next Service Próxima Lista - + Escape Item Escapar Item + + + Move to previous. + Mover para o anterior. + + + + Move to next. + Mover para o seguinte. + + + + Play Slides + Exibir Slides + + + + Play Slides in Loop + Exibir Slides com Repetição + + + + Play Slides to End + Exibir Slides até o Fim + + + + Delay between slides in seconds. + Espera entre slides em segundos. + + + + Move to live. + Mover para projeção. + + + + Add to Service. + Adicionar ao Culto. + + + + Edit and reload song preview. + Editar e recarregar pré-visualização da música. + + + + Start playing media. + Começar a reproduzir mídia. + OpenLP.SpellTextEdit - + Spelling Suggestions - Sugestões de Ortografia + Sugestões Ortográficas - + Formatting Tags Tags de Formatação + + + Language: + Idioma: + OpenLP.StartTimeForm - - Item Start Time - Horário Inicial do Item - - - + Hours: Horários: - - h - h - - - - m - m - - - + Minutes: Minutos: - + Seconds: Segundos: + + + Item Start and Finish Time + Tempo de Início e Término do item + + + + Start + Início + + + + Finish + Fim + + + + Length + Duração + + + + Time Validation Error + Erro de Validação de Tempo + + + + Finish time is set after the end of the media item + O tempo final está após o fim do item de mídia + + + + Start time is after the finish time of the media item + O tempo inicial está após o fim do item de mídia + OpenLP.ThemeForm - + Select Image Selecionar Imagem - + Theme Name Missing Faltando Nome do Tema - + There is no name for this theme. Please enter one. - Não há nome neste tema. Por favor forneça um. + Não há nome para este tema. Por favor forneça um. - + Theme Name Invalid Nome do Tema Inválido - + Invalid theme name. Please enter one. O nome do tema é inválido. Por favor forneça um. - - (%d lines per slide) - (%d linhas por slide) + + (approximately %d lines per slide) + (aproximadamente %d linhas por slide) @@ -2979,69 +3431,69 @@ A codificação do conteúdo não é UTF-8. Definir como Padrão &Global - + %s (default) %s (padrão) - + You must select a theme to edit. Você precisa selecionar um tema para editar. - + You are unable to delete the default theme. Você não pode apagar o tema padrão. - + You have not selected a theme. Você não selecionou um tema. - + Save Theme - (%s) Salvar Tema - (%s) - + Theme Exported Tema Exportado - + Your theme has been successfully exported. Seu tema foi exportado com sucesso. - + Theme Export Failed Falha ao Exportar Tema - + Your theme could not be exported due to an error. O tema não pôde ser exportado devido a um erro. - + Select Theme Import File Selecionar Arquivo de Importação de Tema - + File is not a valid theme. The content encoding is not UTF-8. O arquivo não é um tema válido. A codificação do conteúdo não é UTF-8. - + File is not a valid theme. O arquivo não é um tema válido. - + Theme %s is used in the %s plugin. O tema %s é usado no plugin %s. @@ -3061,47 +3513,47 @@ A codificação do conteúdo não é UTF-8. &Exportar Tema - + You must select a theme to rename. Você precisa selecionar um tema para renomear. - + Rename Confirmation Confirmar Renomeação - + Rename %s theme? Renomear o tema %s? - + You must select a theme to delete. - Você precisa selecionar um tema para apagar. + Você precisa selecionar um tema para excluir. - + Delete Confirmation Confirmar Exclusão - + Delete %s theme? Apagar o tema %s? - + Validation Error Erro de Validação - + A theme with this name already exists. Já existe um tema com este nome. - + OpenLP Themes (*.theme *.otz) Temas do OpenLP (*.theme *.otz) @@ -3109,242 +3561,242 @@ A codificação do conteúdo não é UTF-8. OpenLP.ThemeWizard - + Theme Wizard Assistente de Tema - + Welcome to the Theme Wizard Bem-vindo ao Assistente de Tema - + Set Up Background Configurar Plano de Fundo - + Set up your theme's background according to the parameters below. Configure o plano de fundo de seu tema de acordo com os parâmetros abaixo. - + Background type: Tipo de plano de fundo: - + Solid Color Cor Sólida - + Gradient - Gradiente + Degradê - + Color: Cor: - + Gradient: - Gradiente: + Degradê: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Esquerda Superior - Direita Inferior - + Bottom Left - Top Right Esquerda Inferior - Direita Superior - + Main Area Font Details Detalhes da Fonte da Área Principal - + Define the font and display characteristics for the Display text - Definir a fonte de características de exibição para o texto Exibido + Definir a fonte e características de exibição para o texto de Exibição - + Font: Fonte: - + Size: Tamanho: - + Line Spacing: - Espaçamento das linhas: + Espaçamento entre linhas: - + &Outline: &Contorno: - + &Shadow: &Sombra: - + Bold Negrito - + Italic Itálico - + Footer Area Font Details - Detalhes da Área de Rodapé + Detalhes de Fonte da Área de Rodapé - + Define the font and display characteristics for the Footer text - Defina as características do texto do Rodapé + Defina a fone e as características de exibição do texto de Rodapé - + Text Formatting Details - Detalhes da Formatação da Fonte + Detalhes da Formatação de Texto - + Allows additional display formatting information to be defined - Permite que formatações adicionais sejam feitas + Permite que informações adicionais de formatações de exibição sejam definidas - + Horizontal Align: Alinhamento Horizontal: - + Left Esquerda - + Right Direita - + Center Centralizado - + Output Area Locations - Localização da Área de Saída + Posições das Áreas de Saída - + Allows you to change and move the main and footer areas. - Permite mudar e modificar as áreas principal e de rodapé. + Permite modificar e mover as áreas principal e de rodapé. - + &Main Area &Área Principal - + &Use default location - &Usar local padrão + &Usar posição padrão - + X position: Posição X: - + px px - + Y position: Posição Y: - + Width: Largura: - + Height: Altura: - + Use default location - Usar local padrão + Usar posição padrão - + Save and Preview Salvar e pré-visualizar - + View the theme and save it replacing the current one or change the name to create a new theme - Visualizar o tema e salvá-lo, substituindo o atual ou mudar o nome, criando um novo tema + Visualizar o tema e salvá-lo, substituindo o atual ou mudar o nome para criar um novo tema - + Theme name: Nome do tema: - + 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. - Este assistente vai ajudá-lo a criar editar seus temas. Clique no botão Próximo para começar, configurando o plano de fundo. + Este assistente vai ajudá-lo a criar e editar seus temas. Clique no botão avançar abaixo para iniciar o processo, configurando seu plano de fundo. - + Transitions: Transições: - + &Footer Area Área do &Rodapé - + Edit Theme - %s Editar Tema - %s @@ -3352,464 +3804,571 @@ A codificação do conteúdo não é UTF-8. OpenLP.ThemesTab - + Global Theme Tema Global - + Theme Level - Nível dos Temas + Nível do Tema - + S&ong Level Nível de &Música - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - Use o tema de cada música na base de dados. Se uma música não tiver um tema associado com ela, então use o tema da lista de exibição. Se a lista não tiver um tema, então use o tema global. + Use o tema de cada música na base de dados. Se uma música não tiver um tema associado a ela, então usar o tema do culto. Se o culto não tiver um tema, então usar o tema global. - + &Service Level - Nível da &Lista de Exibição + Nível de &Culto - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - Usar o tema da lista de exibição, sobrescrevendo qualquer um dos temas individuais das músicas. Se a lista de exibição não tiver um tema, então use o tema global. + Usar o tema do culto, ignorando qualquer temas das músicas individuais. Se o culto não tiver um tema, então usar o tema global. - + &Global Level Nível &Global - + Use the global theme, overriding any themes associated with either the service or the songs. - Usar o tema global, sobrescrevendo qualquer tema associado às lista de exibição ou músicas. + Usar o tema global, ignorando qualquer tema associado ao culto ou às músicas. OpenLP.Ui - + Error Erro - + &Delete &Excluir - + Delete the selected item. - Apagar o item selecionado. + Excluir o item selecionado. - + Move selection up one position. Mover a seleção para cima em uma posição. - + Move selection down one position. Mover a seleção para baixo em uma posição. - + About Sobre - + &Add &Adicionar - + Advanced Avançado - + All Files Todos os Arquivos - + Bottom Rodapé - + Browse... Procurar... - + Cancel Cancelar - + CCLI number: Número CCLI: - + Create a new service. - Criar uma nova Lista de Exibição. + Criar uma novo culto. - + &Edit &Editar - + Empty Field Campo Vazio - + Export Exportar - + pt Abbreviated font pointsize unit pt - + Image Imagem - + Import Importar - + Length %s Comprimento %s - + Live Projeção - + Live Background Error Erro no Fundo da Projeção - - Live Panel - Painel de Projeção - - - + Load Carregar - + Middle Meio - + New Novo - + New Service - Nova Lista de Exibição + Novo Culto - + New Theme Novo Tema - + No File Selected Singular Nenhum Arquivo Selecionado - + No Files Selected Plural Nenhum Arquivo Selecionado - + No Item Selected Singular Nenhum Item Selecionado - + No Items Selected Plural Nenhum Item Selecionado - + openlp.org 1.x openlp.org 1.x - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Abrir Lista de Exibição - - - + Preview Pré-Visualização - - Preview Panel - Painel de Pré-Visualização - - - - Print Service Order - Imprimir Ordem de Culto - - - + Replace Background Substituir Plano de Fundo - - Replace Live Background - Trocar Plano de Fundo da Projeção - - - + Reset Background Restabelecer o Plano de Fundo - - Reset Live Background - Restabelecer o Plano de Fundo da Projeção - - - + s The abbreviated unit for seconds s - + Save && Preview Salvar && Pré-Visualizar - + Search Pesquisar - + You must select an item to delete. Você precisa selecionar um item para excluir. - + You must select an item to edit. Você precisa selecionar um item para editar. - + Save Service - Salvar Lista de Exibição + Salvar Culto - + Service - Lista de Exibição + Culto - + Start %s Início %s - + Theme Singular Tema - + Themes Plural Temas - + Top Topo - + Version Versão - + &Vertical Align: Alinhamento &Vertical: - + Finished import. Importação concluída. - + Format: Formato: - + Importing Importando - + Importing "%s"... Importando "%s"... - + Select Import Source Selecionar Origem da Importação - + Select the import format and the location to import from. Selecione o formato e a localização para a importação. - + The openlp.org 1.x 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. - O importador do openlp.org 1.x foi desabilitado devido à falta de um módulo Python. Se você deseja utilizar este importador, você precisa instalar o módulo "python-sqlite". + O importador do openlp.org 1.x foi desabilitado devido à falta de um módulo Python. Se você deseja utilizar este importador, você precisará instalar o módulo "python-sqlite". - + Open %s File Abrir o Arquivo %s - + %p% %p% - + Ready. Pronto. - + Starting import... Iniciando importação... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Você precisa especificar pelo menos um arquivo %s para importar. - + Welcome to the Bible Import Wizard Bem Vindo ao Assistente de Importação de Bíblias - + Welcome to the Song Export Wizard Bem Vindo ao Assistente de Exportação de Músicas - + Welcome to the Song Import Wizard Bem-vindo ao Assistente de Importação de Música - + Author Singular Autor - + Authors Plural Autores - + © Copyright symbol. © - + Song Book Singular - Livro de Músicas + Hinário - + Song Books Plural Hinários - + Song Maintenance Gerenciamento de Músicas - + Topic Singular Tópico - + Topics Plural Tópicos + + + Continuous + Contínuo + + + + Default + Padrão + + + + Display style: + Estilo de Exibição: + + + + File + Arquivo + + + + Help + Ajuda + + + + h + The abbreviated unit for hours + h + + + + Layout style: + Estilo do Layout: + + + + Live Toolbar + Barra de Ferramentas de Projeção + + + + m + The abbreviated unit for minutes + m + + + + OpenLP is already running. Do you wish to continue? + OpenLP já está sendo executado. Deseja continuar? + + + + Settings + Configurações + + + + Tools + Ferramentas + + + + Verse Per Slide + Versículos por Slide + + + + Verse Per Line + Versículos por Linha + + + + View + Visualizar + + + + Duplicate Error + Erro de duplicidade + + + + Unsupported File + Arquivo Não Suportado + + + + Title and/or verses not found + Título e/ou estrófes não encontradas + + + + XML syntax error + Erro de sintaxe XML + + + + View Mode + Modo de Visualização + + + + Welcome to the Bible Upgrade Wizard + Bem-vindo ao Assistente de Atualização de Bíblias + + + + Open service. + Abrir culto. + + + + Print Service + Imprimir Culto + + + + Replace live background. + Trocar fundo da projeção. + + + + Reset live background. + Reverter fundo da projeção. + + + + &Split + &Dividir + + + + Split a slide into two only if it does not fit on the screen as one slide. + Dividir um slide em dois somente se não couber na tela em um único slide. + OpenLP.displayTagDialog - + Configure Display Tags Configurar Etiquetas de Exibição @@ -3819,32 +4378,7 @@ A codificação do conteúdo não é UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - <strong>Plugin de Apresentação</strong><br />O plugin de apresentação provê a habilidade de exibir apresentações utilizando um diferente número de programas. Os programas disponíveis são exibidos em uma caixa de seleção. - - - - Load a new Presentation - Carregar uma nova Apresentação - - - - Delete the selected Presentation - Excluir a Apresentação selecionada - - - - Preview the selected Presentation - Pré-visualizar a Apresentação selecionada - - - - Send the selected Presentation live - Projetar a Apresentação selecionada - - - - Add the selected Presentation to the service - Adicionar a Apresentação selecionada à Lista de Exibição + <strong>Plugin de Apresentação</strong><br />O plugin de apresentação permite exibir apresentações utilizando vários programas diferentes. Os programas disponíveis são exibidos em uma caixa de seleção. @@ -3864,61 +4398,81 @@ A codificação do conteúdo não é UTF-8. container title Apresentações + + + Load a new presentation. + Carregar uma nova apresentação. + + + + Delete the selected presentation. + Excluir a apresentação selecionada. + + + + Preview the selected presentation. + Pré-visualizar a apresentação selecionada. + + + + Send the selected presentation live. + Enviar a apresentação selecionada para a projeção. + + + + Add the selected presentation to the service. + Adicionar a apresentação selecionada ao culto. + PresentationPlugin.MediaItem - + Select Presentation(s) Selecionar Apresentação(ões) - + Automatic Automático - + Present using: Apresentar usando: - + File Exists O Arquivo já Existe - + A presentation with that filename already exists. Já existe uma apresentação com este nome. - - Unsupported File - Arquivo Não Suportado - - - + This type of presentation is not supported. Este tipo de apresentação não é suportado. - + Presentations (%s) Apresentações (%s) - + Missing Presentation Apresentação Não Encontrada - + The Presentation %s no longer exists. A Apresentação %s não existe mais. - + The Presentation %s is incomplete, please reload. A Apresentação %s está incompleta, por favor recarregue-a. @@ -3926,17 +4480,17 @@ A codificação do conteúdo não é UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Controladores Disponíveis - + Allow presentation application to be overriden - Permitir que a aplicação de apresentações seja substituída + Permitir que o aplicativo de apresentações seja substituída - + %s (unavailable) %s (indisponivel) @@ -3944,71 +4498,174 @@ A codificação do conteúdo não é UTF-8. RemotePlugin - + <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. - <strong>Plugin Remoto</strong><br />O plugin remoto provê a abilidade de enviar mensagens para uma versão do OpenLP em execução em um computador diferente através de um navegador de internet ou através da API remota. + <strong>Plugin Remoto</strong><br />O plugin remoto permite enviar mensagens para uma versão do OpenLP em execução em um computador diferente através de um navegador de internet ou através da API remota. - + Remote name singular Remoto - + Remotes name plural Remotos - + Remote container title Remoto + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + OpenLP 2.0 Remoto + + + + OpenLP 2.0 Stage View + OpenLP 2.0 Visão de Palco + + + + Service Manager + Gerenciador de Culto + + + + Slide Controller + Controlador de Slide + + + + Alerts + Alertas + + + + Search + Pesquisar + + + + Back + Voltar + + + + Refresh + Atualizar + + + + Blank + Desativar + + + + Show + Exibir + + + + Prev + Ant + + + + Next + Seg + + + + Text + Texto + + + + Show Alert + Mostrar Alerta + + + + Go Live + Projetar + + + + Add To Service + Adicionar ao Culto + + + + No Results + Nenhum Resultado + + + + Options + Opções + + RemotePlugin.RemoteTab - + Serve on IP address: Endereço IP do servidor: - + Port number: Número de porta: - + Server Settings Configurações do Servidor + + + Remote URL: + URL Remoto: + + + + Stage view URL: + URL de Visualização de Palco: + SongUsagePlugin - + &Song Usage Tracking &Registro de Uso de Músicas - + &Delete Tracking Data &Excluir Dados de Registro - + Delete song usage data up to a specified date. Excluir registros de uso até uma data específica. - + &Extract Tracking Data &Extrair Dados de Registro - + Generate a report on song usage. Gerar um relatório sobre o uso das músicas. @@ -4023,53 +4680,58 @@ A codificação do conteúdo não é UTF-8. Alternar o registro de uso das músicas. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Plugin de Uso das Músicas</strong><br />Este plugin registra o uso das músicas nos cultos. - + SongUsage name singular Registro das Músicas - + SongUsage name plural Registro das Músicas - + SongUsage container title - Registro das Músicas + Uso das Músicas + + + + Song Usage + Uso das Músicas SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Excluir Dados de Registro das Músicas - + Delete Selected Song Usage Events? - Deseja Excluir os Eventos de Registro das Músicas? + Deseja Excluir os Eventos de Uso das Músicas? - + Are you sure you want to delete selected Song Usage data? - Você tem certeza que deseja excluir o registro selecionado? + Você tem certeza de que deseja excluir os dados selecionados de Uso das Músicas? - + Deletion Successful Exclusão Bem Sucedida - + All requested data has been deleted successfully. Todos os dados solicitados foram apagados com sucesso. @@ -4077,42 +4739,42 @@ A codificação do conteúdo não é UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Extração de Uso das Músicas - + Select Date Range Selecionar Faixa de Datas - + to - para + até - + Report Location Localização do Relatório - + Output File Location Local do arquivo de saída - + usage_detail_%s_%s.txt detalhe_uso_%s_%s.txt - + Report Creation Criação de Relatório - + Report %s has been successfully created. @@ -4121,227 +4783,227 @@ has been successfully created. foi criado com sucesso. - + Output Path Not Selected Caminho de saída não foi selecionado - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. - Você precisa selecionar uma localização válida para o relatório de uso de músicas. Por favor selecione um caminho existente no seu computador. + Você precisa selecionar uma localização de sapida válida para o relatório de uso de músicas. Por favor selecione um caminho existente no seu computador. SongsPlugin - + &Song &Música - + Import songs using the import wizard. Importar músicas com o assistente de importação. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - <strong>Plugin de Músicas</strong><br />O plugin de músicas provê a habilidade de exibir e gerenciar músicas. + <strong>Plugin de Músicas</strong><br />O plugin de músicas permite exibir e gerenciar músicas. - + &Re-index Songs &Re-indexar Músicas - + Re-index the songs database to improve searching and ordering. Re-indexar o banco de dados de músicas para melhorar a busca e a ordenação. - + Reindexing songs... Reindexando músicas... - - Add a new Song - Adicionar uma nova Música - - - - Edit the selected Song - Editar a Música selecioanda - - - - Delete the selected Song - Apagar a Música selecionada - - - - Preview the selected Song - Pré-visualizar a Música selecionada - - - - Send the selected Song live - Projetar a Música selecionada - - - - Add the selected Song to the service - Adicionar a Música selecionada à Lista de Exibição - - - + Song name singular Música - + Songs name plural Músicas - + Songs container title Músicas - + Arabic (CP-1256) Arábico (CP-1256) - + Baltic (CP-1257) Báltico (CP-1257) - + Central European (CP-1250) Europeu Central (CP-1250) - + Cyrillic (CP-1251) Cirílico (CP-1251) - + Greek (CP-1253) Grego (CP-1253) - + Hebrew (CP-1255) Hebraico (CP-1255) - + Japanese (CP-932) Japonês (CP-932) - + Korean (CP-949) Coreano (CP-949) - + Simplified Chinese (CP-936) Chinês Simplificado (CP-936) - + Thai (CP-874) Tailandês (CP-874) - + Traditional Chinese (CP-950) Chinês Tradicional (CP-950) - + Turkish (CP-1254) Turco (CP-1254) - + Vietnam (CP-1258) Vietnamita (CP-1258) - + Western European (CP-1252) Europeu Ocidental (CP-1252) - + Character Encoding Codificação de Caracteres - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - O Código de páginas é responsável + A configuraçao de página de código é responsável pela correta representação dos caracteres. -Normalmente a opção pré-selecionada é segura. +Normalmente pode usar a opção pré-selecionada. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Escolha a codificação dos caracteres. A codificação é responsável pela correta representação dos caracteres. - + Exports songs using the export wizard. - Exportar músicas utilizando o assistente. + Exporta músicas utilizando o assistente de exportação. + + + + Add a new song. + Adicionar uma nova música. + + + + Edit the selected song. + Editar a música selecionada. + + + + Delete the selected song. + Excluir a música selecionada. + + + + Preview the selected song. + Pré-visualizar a música selecionada. + + + + Send the selected song live. + Enviar a música selecionada para a projeção. + + + + Add the selected song to the service. + Adicionar a música selecionada ao culto. SongsPlugin.AuthorsForm - + Author Maintenance Gerenciamento de Autores - + Display name: - Nome da Tela: + Nome de tela: - + First name: - Primeiro Nome: + Primeiro nome: - + Last name: Sobrenome: - + You need to type in the first name of the author. Você precisa digitar o primeiro nome do autor. - + You need to type in the last name of the author. Você precisa digitar o sobrenome do autor. - + You have not set a display name for the author, combine the first and last names? Você não definiu um nome de tela para o autor, combinar o nome e o sobrenome? @@ -4349,190 +5011,198 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Importando música %d de %d + + The file does not have a valid extension. + O arquivo não possui uma extensão válida. + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Administrado por %s SongsPlugin.EditSongForm - + Song Editor Editor de Músicas - + &Title: &Título: - + Alt&ernate title: Título &Alternativo: - + &Lyrics: - &Letras: + &Letra: - + &Verse order: Ordem das &estrofes: - + Ed&it All &Editar Todos - + Title && Lyrics - Título && Letras + Título && Letra - + &Add to Song &Adicionar à Música - + &Remove &Remover - + &Manage Authors, Topics, Song Books &Gerenciar Autores, Assuntos, Hinários - + A&dd to Song A&dicionar uma Música - + R&emove R&emover - + Book: - Livro: + Hinário: - + Number: Número: - + Authors, Topics && Song Book Autores, Assuntos && Hinários - + New &Theme Novo &Tema - + Copyright Information Direitos Autorais - + Comments Comentários - + Theme, Copyright Info && Comments Tema, Direitos Autorais && Comentários - + Add Author Adicionar Autor - + This author does not exist, do you want to add them? Este autor não existe, deseja adicioná-lo? - + This author is already in the list. Este autor já está na lista. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Você não selecionou um autor válido. Selecione um autor da lista, ou digite um novo autor e clique em "Adicionar Autor à Música" para adicioná-lo. - + Add Topic Adicionar Assunto - + This topic does not exist, do you want to add it? - Este tópico não existe, deseja adicioná-lo? + Este assunto não existe, deseja adicioná-lo? - + This topic is already in the list. - Este tópico já está na lista. + Este assunto já está na lista. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - Não há nenhum tópico válido selecionado. Selecione um tópico da lista ou digite um novo tópico e clique em "Adicionar Tópico à Música" para adicionar o novo tópico. + Você não selecionou um assunto válido. Selecione um assunto da lista ou digite um novo assunto e clique em "Adicionar Assunto à Música" para adicioná-lo. - + You need to type in a song title. - Você precisa digitar um título para a música. + Você deve digitar um título para a música. - + You need to type in at least one verse. - Você precisa digitar ao menos um verso. + Você deve digitar ao menos um verso. - + Warning Aviso - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. A ordem das estrofes é inválida. Não há estrofe correspondente a %s. Valores válidos são %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? Você não usou %s em nenhum lugar na ordem das estrofes. Deseja mesmo salvar a música assim? - + Add Book - Adicionar Livro + Adicionar Hinário - + This song book does not exist, do you want to add it? Este hinário não existe, deseja adicioná-lo? - + You need to have an author for this song. - Você precisa de um autor para esta música. + Você precisa ter um autor para esta música. - + You need to type some text in to the verse. Você precisa digitar algum texto na estrofe. @@ -4540,260 +5210,278 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.EditVerseForm - + Edit Verse Editar Estrofe - + &Verse type: Tipo de &Estrofe: - + &Insert &Inserir + + + Split a slide into two by inserting a verse splitter. + Dividir um slide em dois, inserindo um divisor de estrófes. + SongsPlugin.ExportWizardForm - + Song Export Wizard Assistente de Exportação de Músicas - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Este assistente irá ajudá-lo a exportar as suas músicas para o formato aberto e gratuito OpenLyrics. + Este assistente irá ajudá-lo a exportar as suas músicas para o formato de músicas de louvor aberto e gratuito OpenLyrics. - + Select Songs Selecionar Músicas - + Check the songs you want to export. - Selecione as músicas que você deseja exportar. + Marque as músicas que você deseja exportar. - + Uncheck All Desmarcar Todas - + Check All - Selecionar Todas + Marcar Todas - + Select Directory Selecionar Diretório - - Select the directory you want the songs to be saved. - Selecionar o diretório que você deseja salvar as músicas. - - - + Directory: Diretório: - + Exporting Exportando - + Please wait while your songs are exported. Por favor aguarde enquanto as suas músicas são exportadas. - + You need to add at least one Song to export. Você precisa adicionar pelo menos uma Música para exportar. - + No Save Location specified - Nenhum local para Salvar foi especificado + Nenhum Localização para Salvar foi especificado - + Starting export... Iniciando a exportação... - + You need to specify a directory. Você precisa especificar um diretório. - + Select Destination Folder - Selecione uma Pasta de Destino + Selecione a Pasta de Destino + + + + Select the directory where you want the songs to be saved. + Selecionar o diretório onde deseja salvar as músicas. SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - Selecione Documentos/Apresentações + Selecione Arquivos de Documentos/Apresentações - + Song Import Wizard Assistente de Importação de Música - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - Este assistente irá ajudá-lo a importar músicas de uma variedade de formatos. Clique no botão Próximo para iniciar o processo, escolhendo um desses formatos. + Este assistente irá ajudá-lo a importar músicas de uma variedade de formatos. Clique no abaixo no botão Próximo para iniciar o processo, escolhendo um desses formatos. - + Generic Document/Presentation Documento/Apresentação Genérica - + Filename: Nome do arquivo: - + Add Files... Adicionar Arquivos... - + Remove File(s) Remover Arquivos(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - O importador do Songs of Fellowship foi desabilitado porque o OpenOffice.org não foi encontrado. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - O importador de documento/apresentação foi desabilitado porque o OpenOffice.org não foi encontrado no seu computador. - - - + Please wait while your songs are imported. Por favor espere enquanto as suas músicas são importadas. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. O importador para o formato OpenLyrics ainda não foi desenvolvido, mas como você pode ver, nós ainda pretendemos desenvolvê-lo. Possivelmente ele estará disponível na próxima versão. - - Administered by %s - Administrado por %s - - - + OpenLP 2.0 Databases Bancos de Dados do OpenLP 2.0 - + openlp.org v1.x Databases Bancos de Dados do openlp.org v1.x - + Words Of Worship Song Files Arquivos de Música do Words Of Worship - + You need to specify at least one document or presentation file to import from. Você precisa especificar pelo menos um documento ou apresentação para importar. - + Songs Of Fellowship Song Files Arquivos do Songs Of Fellowship - + SongBeamer Files Arquivos do SongBeamer - + SongShow Plus Song Files Arquivos do SongShow Plus - + Foilpresenter Song Files Arquivos do Folipresenter + + + Copy + Copiar + + + + Save to File + Salvar em Arquivo + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + A importação Songs of Fellowship foi desabilitada porque OpenLP não consegue acessar OpenOffice ou LibreOffice. + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + A importação de documentos/apresentações genéricos foi desabilitada porque OpenLP não consegue acessar OpenOffice ou LibreOffice. + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Gerenciar a lista de autores, tópicos e livros - - - + Titles Títulos - + Lyrics - Letra + Letras - + Delete Song(s)? - Apagar Música(s)? + Excluir Música(s)? - + CCLI License: - Licença CCLI: + Licença CCLI: - + Entire Song Música Inteira - + Are you sure you want to delete the %n selected song(s)? - Tem certeza de que quer apagar as %n música(s) selecionadas? + Tem certeza de que quer excluir a(s) %n música(s) selecionada(s)? + + + Maintain the lists of authors, topics and books. + Gerencia a lista de autores, tópicos e hinários. + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + Não é uma base de dados de músicas válida do openlp.org 1.x. + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Importando música %d de %d. + + Not a valid OpenLP 2.0 song database. + Não é uma base de dados de músicas válida do OpenLP 2.0. SongsPlugin.OpenLyricsExport - + Exporting "%s"... Exportando "%s"... @@ -4801,22 +5489,22 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.SongBookForm - + Song Book Maintenance Gerenciamento de Hinários - + &Name: &Nome: - + &Publisher: &Editora: - + You need to type in a name for the book. Você precisa digitar um nome para o livro. @@ -4824,28 +5512,48 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.SongExportForm - + Finished export. - Exportação Finalizada. + Exportação finalizada. - + Your song export failed. - A sua exportação falhou. + A sua exportação de músicas falhou. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + As seguintes músicas não puderam ser importadas: + + + + Unable to open file + Não foi possível abrir o arquivo + + + + File not found + Arquivo não encontrado + + + + Cannot access OpenOffice or LibreOffice + Não foi possível acessar OpenOffice ou LibreOffice + SongsPlugin.SongImportForm - + Your song import failed. Sua importação de música falhou. @@ -4853,107 +5561,107 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.SongMaintenanceForm - + Could not add your author. - Não foi possível adicionar o autor. + Não foi possível adicionar seu autor. - + This author already exists. Este autor já existe. - + Could not add your topic. - Não foi possível adicionar o tópico. + Não foi possível adicionar seu assunto. - + This topic already exists. - Este tópico já existe. + Este assunto já existe. - + Could not add your book. - Não foi possível adicionar o livro. + Não foi possível adicionar seu livro. - + This book already exists. Este livro já existe. - + Could not save your changes. - Não foi possível salvar as alterações. + Não foi possível salvar suas alterações. - + Could not save your modified topic, because it already exists. - O tópico modificado não pode ser salvo porque já existe. + O assunto modificado não pode ser salvo porque já existe. - + Delete Author Excluir Autor - + Are you sure you want to delete the selected author? Você tem certeza de que deseja excluir o autor selecionado? - + This author cannot be deleted, they are currently assigned to at least one song. - Este autor não pode ser apagado, pois está associado a ao menos uma música. + Este autor não pode ser apagado, pois está associado a pelo menos uma música. - + Delete Topic - Apagar Assunto + Excluir Assunto - + Are you sure you want to delete the selected topic? Tem certeza de que quer apagar o assunto selecionado? - + This topic cannot be deleted, it is currently assigned to at least one song. - Este assunto não pode ser apagado, pois está associado a ao menos uma música. + Este assunto não pode ser apagado, pois está associado a pelo menos uma música. - + Delete Book - Apagar Hinário + Excluir Hinário - + Are you sure you want to delete the selected book? Tem certeza de que quer excluir o hinário selecionado? - + This book cannot be deleted, it is currently assigned to at least one song. Este hinário não pode ser excluido, pois está associado a ao menos uma música. - + Could not save your modified author, because the author already exists. - Não foi possível salvar alteração no autor, porque o autor já existe. + Não foi possível salvar sue autor modificado, pois o autor já existe. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? O autor %s já existe. Deseja que as músicas com o autor %s usem o autor %s existente? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - O tópico %s já existe. Deseja que as músicas com o tópico %s usem o tópico %s existente? + O assunto %s já existe. Deseja que as músicas com o assunto %s usem o assunto %s existente? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? O hinário %s já existe. Deseja que as músicas com o hinário %s usem o hinário %s existente? @@ -4961,45 +5669,45 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.SongsTab - + Songs Mode Modo de Música - + Enable search as you type - Habilitar preenchimento automático + Habilitar busca ao digitar - + Display verses on live tool bar - Exibir versículos na barra de projeção + Exibir versículos na barra de ferramentas de projeção - + Update service from song edit - Atualizar Lista de Exibição após editar música + Atualizar culto após editar música - + Add missing songs when opening service - Adicionar músicas não existantes ao abrir lista + Adicionar músicas ausentes ao abrir culto SongsPlugin.TopicsForm - + Topic Maintenance Gerenciamento de Assuntos - + Topic name: Nome do assunto: - + You need to type in a topic name. Você precisa digitar um nome para o assunto. @@ -5007,39 +5715,47 @@ A codificação é responsável pela correta representação dos caracteres. SongsPlugin.VerseType - + Verse Estrofe - + Chorus Refrão - + Bridge Ponte - + Pre-Chorus Pré-Estrofe - + Intro Introdução - + Ending Final - + Other Outra + + ThemeTab + + + Themes + Temas + + diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index a62fdebed..f9f7ed7eb 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -3,24 +3,24 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Вы не указали параметры для замены. Все равно продолжить? - + No Parameter Found Параметр не найден - + No Placeholder Found Заполнитель не найден - + The alert text does not contain '<>'. Do you want to continue anyway? Текст оповещения не содержит '<>. @@ -30,34 +30,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert О&повещение - + Show an alert message. Показать текст оповещения. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Плагин оповещений</strong><br />Плагин оповещений управляет отображением срочных сообщений на экране - + Alert name singular Оповещение - + Alerts name plural Оповещения - + Alerts container title Оповещения @@ -66,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message Сообщение оповещения - + Alert &text: Текст &оповещения: - + &Parameter: П&араметр: - + &New &Новый - + &Save &Сохранить - + Displ&ay Показ&ать - + Display && Cl&ose Показать и за&крыть - + New Alert Новое оповещение - + You haven't specified any text for your alert. Please type in some text before clicking New. Ві не указали текста для вашего оповещения. Пожалуйста введите текст. @@ -122,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Шрифт - + Font name: Шрифт: - + Font color: Цвет: - + Background color: Цвет фона: - + Font size: Размер: - + Alert timeout: Таймаут оповещения: @@ -155,51 +155,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - Импорт заветов... %s - - - - Importing testaments... done. - Импорт заветов... завершен. - - - + Importing books... %s Импорт книг... %s - + Importing verses from %s... Importing verses from <book name>... Импорт стихов из %s... - + Importing verses... done. Импорт стихов... завершен. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error Ошибка загрузки - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Возникла проблема при загрузке секции стихов. Пожалуйста, проверьте параметры Интернет соединения. В случае если ошибка происходит при нормальном Интернет соединении, сообщите о ней на сайте разработчика в разделе "Ошибки". - + Parse Error Обработка ошибки - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. Возникла проблема при распковкие раздела стихов. Если это ошибка будет повторяться, пожалуйста сообщите о ней. @@ -207,123 +210,133 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. Библия загружена не полностью. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Вы не можете комбинировать результат поиска для одной и двух Библий. Желаете удалить результаты поиска и начать новый поиск? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible &Библия - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Плагин Библия</strong><br />Плагин "Библия" обеспечивает возможность показаза мест писания во время служения. - - - + Bible name singular Библия - + Bibles name plural Священное Писание - + Bibles container title Священное Писание - - Import a Bible - Импорт Библии - - - - Add a new Bible - Добавить новую Библию - - - - Edit the selected Bible - Редактировать выбранную Библию - - - - Delete the selected Bible - Удалить выбранную Библию - - - - Preview the selected Bible - Предпросмотр выбранной Библии - - - - Send the selected Bible live - Вывести выбранный Библию на проектор - - - - Add the selected Bible to the service - Добавить выбранную Библию к служению - - - + No Book Found Книги не найдены - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Не было найдено подходящей книги в этой Библии. Проверьте что вы правильно указали название книги. + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. В настоящее время ни одна Библия не установлена. Пожалуйста, воспользуйтесь Мастером Импорта чтобы установить одну или более Библий. - + Scripture Reference Error Ошибка ссылки на Писание - + Web Bible cannot be used Веб-Библия не может быть использована - + Text Search is not available with Web Bibles. Текстовый поиск не доступен для Веб-Библий. - + 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. Вы не указали ключевое слово для поиска. Вы можете разделить разичные ключевые слова пробелами чтобы осуществить поиск по фразе, а также можете использовать запятые, чтобы искать по каждому из указанных ключевых слов. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -342,7 +355,7 @@ Book Chapter:Verse-Chapter:Verse Книга Глава:Стих-Глава:Стих - + No Bibles Available Библии отсутствуют @@ -350,45 +363,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display - + Only show new chapter numbers - - - Layout style: - - - - - Display style: - - Bible theme: - - - Verse Per Slide - - - - - Verse Per Line - - - - - Continuous - - No Brackets @@ -421,257 +409,333 @@ Changes do not affect verses already in the service. + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Web Download - + Location: Расположение: - + Crosswalk - + BibleGateway - + Bibleserver - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Permissions: - + Please wait while your Bible is imported. - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + CSV File - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Your Bible import failed. - + Bible file: - - Testaments file: - - - - + Books file: - + Verses file: - + openlp.org 1.x Bible Files + + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. + + BiblesPlugin.MediaItem - + Quick - + Second: - + Find: - - Results: - - - - + Book: Сборник: - + Chapter: - + Verse: - + From: - + To: - + Text Search - - Clear - - - - - Keep - - - - + Scripture Reference + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -680,34 +744,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + + + + + Bible Exists + + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Ошибка загрузки + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - + Display footer @@ -715,192 +1006,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: &Название: - + Add a new slide at bottom. - + Edit the selected slide. - + Ed&it All Редактировать &все - + Edit all the slides at once. - + The&me: - + &Credits: - + You need to type in a title. - + You need to add at least one slide - - Split Slide + + Split a slide into two by inserting a slide splitter. - - Split a slide into two by inserting a slide splitter. + + Insert Slide - CustomsPlugin + GeneralTab - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title - - - - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service + + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. <strong>Плагин Изображений</strong><br />Плагин изображений позволяет отображать изображения.<br />Одной из отличительных возможностей этого плагина является возможность группировать выбранные изображение в менеджере служения, что делает работу с большим количеством изображений более легкой. Этот плагин также позволяет использовать возможности "временной петли" OpenLP, чтобы создавать слайд-шоу, которые выполняются автоматически. В дополнение к этому, изображения из плагина могут быть использованы, чтобы заменить текущий фон, что позволяет отображать текстовые элементы, такие как песни, с выбранным изображением в качестве фона, вместо фона, который указан в теме. - + Image name singular Изображение - + Images name plural Изображения - + Images container title Изображения - - Load a new Image - Загрузить новое Изображение - - - - Add a new Image - Добавить новое Изображение + + Load a new image. + - Edit the selected Image - Изменить выбранное изображение + Add a new image. + - Delete the selected Image - Удалить выбранное изображение + Edit the selected image. + - Preview the selected Image - Просмотреть выбранное Изображение + Delete the selected image. + - Send the selected Image live - Послать выбранное Изображение на проектор + Preview the selected image. + - Add the selected Image to the service - Добавить выбранное изображение к Служению + Send the selected image live. + + + + + Add the selected image to the service. + ImagePlugin.ExceptionDialog - + Select Attachment Выбрать Вложение @@ -908,39 +1146,39 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) Выбрать Изображение(я) - + You must select an image to delete. Вы должны выбрать изображение для удаления. - + Missing Image(s) Отсутствующие Изображения - + The following image(s) no longer exist: %s Следующие изображения больше не существуют: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Следующие изображения больше не существуют: %s Добавить остальные изображения? - + You must select an image to replace the background with. Вы должны выбрать изображения, которым следует заменить фон. - + There was a problem replacing your background, the image file "%s" no longer exists. Возникла проблема при замене Фона проектора, файл "%s" больше не существует. @@ -948,98 +1186,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. <strong>Плагин Медиа</strong><br />Плагин Медиа обеспечивает проигрывание аудио и видео файлов. - + Media name singular Медиа - + Media name plural Медиа - + Media container title Медиа - - Load a new Media - Открыть новый медиафайл - - - - Add a new Media - Добавить новый медиафайл + + Load new media. + - Edit the selected Media - Редактировать выбранный медиафайл + Add new media. + - Delete the selected Media - Удалить выбранный медиафайл + Edit the selected media. + - Preview the selected Media - Предпросмотр выбранного медиафайла + Delete the selected media. + - Send the selected Media live - Отправить выбранный медиафайл на проектор + Preview the selected media. + - Add the selected Media to the service - Добавить выбранный медиафайл к служению + Send the selected media live. + + + + + Add the selected media to the service. + MediaPlugin.MediaItem - + Select Media Выбрать медиафайл - + You must select a media file to replace the background with. Для замены фона вы должны выбрать видеофайл. - + There was a problem replacing your background, the media file "%s" no longer exists. Возникла проблема замены фона, поскольку файл "%s" не найден. - + Missing Media File Отсутствует медиафайл - + The file %s no longer exists. Файл %s не существует. - + You must select a media file to delete. Вы должны выбрать медиафайл для удаления. - + Videos (%s);;Audio (%s);;%s (*) Videos (%s);;Audio (%s);;%s (*) @@ -1047,12 +1285,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display Отображение Медиа - + Use Phonon for video playback Использовать Phonon для проигрывания видео @@ -1060,56 +1298,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files Файлы изображений + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + License Лицензия - + Contribute - + build %s Билд %s - + 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 below for more details. - + Project Lead %s @@ -1174,184 +1413,310 @@ Final Credit - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: Цвет фона: - + Image file: - + Open File + + + Preview items when clicked in Media Manager + + + + + Advanced + Дополнительно + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Error Occurred - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1359,24 +1724,24 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s Платформа: %s - + Save Crash Report Сохранить отчет об ошибке - + Text files (*.txt *.log *.text) Текстовый файл (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1407,7 +1772,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1442,17 +1807,17 @@ Version: %s OpenLP.FileRenameForm - + New File Name: - + File Copy - + File Rename @@ -1460,17 +1825,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1478,102 +1843,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - + First Time Wizard - + Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + Activate required Plugins - + Select the Plugins you wish to use. - + Songs Псалмы - + Custom Text - + Bible Библия - + Images Изображения - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1582,198 +1942,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Default Settings - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Check for updates to OpenLP - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - Slide loop delay: - - - - sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1781,7 +2166,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display Дисплей OpenLP @@ -1789,205 +2174,160 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Файл - + &Import &Импорт - + &Export &Экспорт - + &View &Вид - + M&ode Р&ежим - + &Tools &Инструменты - + &Settings &Настройки - + &Language &Язык - + &Help &Помощь - + Media Manager Управление Материалами - + Service Manager Управление Служением - + Theme Manager Управление Темами - + &New &Новая - - Ctrl+N - Ctrl+N - - - + &Open &Открыть - + Open an existing service. Открыть существующее служение. - - Ctrl+O - Ctrl+O - - - + &Save &Сохранить - + Save the current service to disk. Сохранить текущее служение на диск. - - Ctrl+S - Ctrl+S - - - + Save &As... Сохранить к&ак... - + Save Service As Сохранить служение как - + Save the current service under a new name. Сохранить текущее служение под новым именем. - - Ctrl+Shift+S - Ctrl+Shift+S - - - - Print the current Service Order. - Распечатать текущий Порядок Служения - - - - Ctrl+P - Ctrl+P - - - + E&xit Вы&ход - + Quit OpenLP Завершить работу OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme Т&ема - + Configure &Shortcuts... Настройки и б&ыстрые клавиши... - + &Configure OpenLP... &Настроить OpenLP... - + &Media Manager Управление &Материалами - + Toggle Media Manager Свернуть Менеджер Медиа - + Toggle the visibility of the media manager. Свернуть видимость Менеджера Медиа. - - F8 - F8 - - - + &Theme Manager Управление &темами - + Toggle Theme Manager Свернуть Менеджер Тем - + Toggle the visibility of the theme manager. Свернуть видимость Менеджера Тем. - - - F10 - F10 - &Service Manager @@ -2005,212 +2345,202 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - F9 - - - &Preview Panel Пан&ель предпросмотра - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - - F11 - F11 - - - + &Live Panel &Панель проектора - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - - F12 - F12 - - - + &Plugin List &Список плагинов - + List the Plugins Выводит список плагинов - - Alt+F7 - Alt+F7 - - - + &User Guide &Руководство пользователя - + &About &О программе - + More information about OpenLP Больше информации про OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Помощь онлайн - + &Web Site &Веб-сайт - + Use the system language, if available. Использовать системный язык, если доступно. - + Set the interface language to %s Изменить язык интерфеса на %s - + Add &Tool... Добавить &Инструмент... - + Add an application to the list of tools. Добавить приложение к списку инструментов - + &Default &По умолчанию - + Set the view mode back to the default. Установить вид в режим по умолчанию. - + &Setup &Настройка - + Set the view mode to Setup. - + &Live - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Close OpenLP - + Are you sure you want to close OpenLP? - + Default Theme: %s - + English Please add the name of your language here Английский - + &Configure Display Tags - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected Объекты не выбраны @@ -2220,75 +2550,91 @@ You can download the latest version from http://openlp.org/. - + You must select one or more items to preview. - + You must select one or more items to send live. - + You must select one or more items. - + You must select an existing service item to add to. - + Invalid Service Item - + You must select a %s service item. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive - + %s (Disabled) - + %s (Active) - + %s (Inactive) @@ -2296,12 +2642,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -2309,7 +2655,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options @@ -2329,55 +2675,60 @@ You can download the latest version from http://openlp.org/. - + Zoom In - + Zoom Out - + Zoom Original - + Other Options - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2385,7 +2736,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item Изменить порядок служения @@ -2393,216 +2744,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + Move item to the top of the service. - + Move &up - + Move item up one position in the service. - + Move &down - + Move item down one position in the service. - + Move to &bottom - + Move item to the end of the service. - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + &Delete From Service - + Delete the selected item from the service. - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Go Live - + Send the selected item to Live. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + Open File - + OpenLP Service Files (*.osz) - + Modified Service - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - - Notes: - - - - + &Start Time - + Show &Preview - + Show &Live - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes Заметки к элементам служения @@ -2610,7 +3001,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP Настроить OpenLP @@ -2618,222 +3009,277 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - + Previous Slide - - Move to previous - - - - + Next Slide - - Move to next - - - - + Hide - + Blank Screen - + Blank to Theme - + Show Desktop - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Move to live - - - - - Edit and reload song preview - - - - - Start playing media - - - - + Go To - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - - (%d lines per slide) - - - - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. + + + (approximately %d lines per slide) + + OpenLP.ThemeManager @@ -2913,113 +3359,113 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to edit. - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + Validation Error - + File is not a valid theme. - + A theme with this name already exists. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + OpenLP Themes (*.theme *.otz) @@ -3027,242 +3473,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Edit Theme - %s - + Theme Wizard - + Welcome to the Theme Wizard - + 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. - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Transitions: - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + &Footer Area - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: @@ -3270,42 +3716,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3313,421 +3759,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error Ошибка - + &Delete У&далить - + Delete the selected item. Удалить выбранный элемент. - + Move selection up one position. Переместить выше. - + Move selection down one position. Переместить ниже. - + About О программе - + &Add &Добавить - + Advanced Дополнительно - + All Files Все файлы - + Bottom Вверху - + Browse... Обзор... - + Cancel Отмена - + CCLI number: Номер CCLI: - + Create a new service. Создать новый порядок служения. - + &Edit &Изменить - + Empty Field Пустое поле - + Export Экспорт - + pt Abbreviated font pointsize unit пт - + Image Изображение - + Import Импорт - + Length %s Длина %s - + Live На проектор - + Live Background Error Ошибка Фона Проектора - - Live Panel - Панель проектора - - - + Load Загрузить - + Middle - + New Новое - + New Service Новый порядок служения - + New Theme Новая тема - + No File Selected Singular Файл не выбран - + No Files Selected Plural Файлы не выбраны - + No Item Selected Singular Объект не выбран - + No Items Selected Plural Объекты не выбраны - + openlp.org 1.x openlp.org 1.x - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Открыть порядок служения - - - + Preview Предпросмотр - - Preview Panel - Панель предпросмотра - - - - Print Service Order - Распечатать порядок Служения - - - + Replace Background Заменить Фон - - Replace Live Background - Заменить фон проектора - - - + Reset Background Сбросить Фон - - Reset Live Background - Сбросить Фон проектора - - - + s The abbreviated unit for seconds сек - + Save && Preview Сохранить и просмотреть - + Search Поиск - + You must select an item to delete. Вы должны выбрать объект для удаления. - + You must select an item to edit. Вы должны выбрать объект для изменения. - + Save Service Сохранить порядок служения - + Service Служение - + Start %s Начало %s - + Theme Singular Тема - + Themes Plural Темы - + Top - + Version Версия - + &Vertical Align: &Вертикальная привязка: - + Finished import. Импорт завершен. - + Format: Формат: - + Importing Импортр - + Importing "%s"... Импортируется "%s"... - + Select Import Source ВЫберите источник импорта - + Select the import format and the location to import from. Выберите формат импорта и укажите откуда его следует произвести. - + The openlp.org 1.x 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. Импорт из openlp.org 1.x был запрещен из-за отсутствующего модуля Питона. Если вы хотите испольовать этот модуль, вы должны установить модуль "python-sqlite". - + Open %s File Отрырь %s Файл - + %p% %p% - + Ready. Готов. - + Starting import... Начинаю импорт... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong Вы должны указатть по крайней мере %s файл для импорта из него. - + Welcome to the Bible Import Wizard Добро пожаловать в Мастер импорта Библий - + Welcome to the Song Export Wizard Добро пожаловать в Мастер экспорта песен - + Welcome to the Song Import Wizard Добро пожалоДобро пожаловать в Мастер Импорта Песен - + Author Singular Автор - + Authors Plural Авторы - + © Copyright symbol. © - + Song Book Singular Сборник песен - + Song Books Plural Сборники песен - + Song Maintenance - + Topic Singular Тема - + Topics Plural + + + Continuous + + + + + Default + + + + + Display style: + + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + + + + + Verse Per Line + + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3759,84 +4312,79 @@ The content encoding is not UTF-8. - Load a new Presentation + Load a new presentation. - - Delete the selected Presentation + + Delete the selected presentation. - - Preview the selected Presentation + + Preview the selected presentation. - - Send the selected Presentation live + + Send the selected presentation live. - - Add the selected Presentation to the service + + Add the selected presentation to the service. PresentationPlugin.MediaItem - + Select Presentation(s) - + Automatic - + Present using: - + Presentations (%s) - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Missing Presentation - + The Presentation %s is incomplete, please reload. - + The Presentation %s no longer exists. @@ -3844,17 +4392,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3862,71 +4410,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + Управление Служением + + + + Slide Controller + + + + + Alerts + Оповещения + + + + Search + Поиск + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + + + RemotePlugin.RemoteTab - + Server Settings - + Serve on IP address: - + Port number: + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking &Отслеживание использования песен - + &Delete Tracking Data &Удалить данные отслеживания - + Delete song usage data up to a specified date. Удалить данные использования песен до указанной даты. - + &Extract Tracking Data &Извлечь данные использования - + Generate a report on song usage. Отчет по использованию песен. @@ -3941,53 +4592,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Плагин Использования песен</strong><br />Этот плагин отслеживает использование песен в служениях. - + SongUsage name singular Использование песен - + SongUsage name plural Использование песен - + SongUsage container title Использование песен + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Удалить данные использования песен - + Delete Selected Song Usage Events? Удалить выбранное событие использования песни? - + Are you sure you want to delete selected Song Usage data? Вы уверены, что хотите удалить выбранные данные использования песен? - + Deletion Successful Успешно удалено - + All requested data has been deleted successfully. Все запросы были успешно удалены. @@ -3995,54 +4651,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4050,82 +4706,82 @@ has been successfully created. SongsPlugin - + Arabic (CP-1256) Arabic (CP-1256) - + Baltic (CP-1257) Baltic (CP-1257) - + Central European (CP-1250) Central European (CP-1250) - + Cyrillic (CP-1251) Cyrillic (CP-1251) - + Greek (CP-1253) Greek (CP-1253) - + Hebrew (CP-1255) Hebrew (CP-1255) - + Japanese (CP-932) Japanese (CP-932) - + Korean (CP-949) Korean (CP-949) - + Simplified Chinese (CP-936) Simplified Chinese (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Traditional Chinese (CP-950) - + Turkish (CP-1254) Turkish (CP-1254) - + Vietnam (CP-1258) Vietnam (CP-1258) - + Western European (CP-1252) Western European (CP-1252) - + Character Encoding Кодировка символов - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -4135,130 +4791,130 @@ Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Пожалуйста, выберите кодировку символов. Кодировка ответственна за корректное отображение символов. - + &Song &Песня - + Import songs using the import wizard. Импортировать песни используя мастер импорта. - + &Re-index Songs &Переиндексировать песни - + Re-index the songs database to improve searching and ordering. Переиндексировать песни, чтобы улучшить поиск и сортировку. - + Reindexing songs... Индексация песен... - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Плагин Песен</strong><br />Плагин песен обеспечивает возможность отображения и управления песнями. - + Song name singular Песня - + Songs name plural ПесниПсалмы - + Songs container title Псалмы - - Add a new Song - Добавить новый Псалом + + Exports songs using the export wizard. + Экспортировать песни используя мастер экспорта. - Edit the selected Song - Редактировать выбранный Псалом + Add a new song. + - Delete the selected Song - Удалить выбранный Псалом + Edit the selected song. + - Preview the selected Song - Прсомотреть выбранный Псалом + Delete the selected song. + - Send the selected Song live - Вывести выбранный псалом на Проектор + Preview the selected song. + - Add the selected Song to the service - Добавить выбранный Псалом к служению + Send the selected song live. + - - Exports songs using the export wizard. - Экспортировать песни используя мастер экспорта. + + Add the selected song to the service. + SongsPlugin.AuthorsForm - + Author Maintenance Обслуживание Авторов - + Display name: Отображаемое имя: - + First name: Имя: - + Last name: Фамилия: - + You need to type in the first name of the author. Вы должны указать имя автора. - + You need to type in the last name of the author. Вы должны указать фамилию автора. - + You have not set a display name for the author, combine the first and last names? Вы не указали отображаемое имя автора. Использовать комбинацию имени и фамилии? @@ -4266,190 +4922,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d - Импортирую песни %d из %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s + Администрируется %s SongsPlugin.EditSongForm - + Song Editor Редактор Песен - + &Title: &Название: - + Alt&ernate title: До&полнительное название: - + &Lyrics: &Слова: - + &Verse order: П&орядок куплтов: - + Ed&it All Редактировать &все - + Title && Lyrics Название и слова - + &Add to Song Д&обавить к песне - + &Remove Уда&лить - + &Manage Authors, Topics, Song Books &Управление Авторами, Темами и Сборниками песен - + A&dd to Song Д&обавить к песне - + R&emove Уда&лить - + Book: Сборник: - + Number: Номер: - + Authors, Topics && Song Book Авторы, Темы и Сборники песен - + New &Theme Новая &Тема - + Copyright Information Информация об авторских правах - + Comments Комментарии - + Theme, Copyright Info && Comments Тема, информация об авторских правах и комментарии - + Add Author Добавить Автора - + This author does not exist, do you want to add them? Этот автор не существует. Хотите добавить его? - + This author is already in the list. Такой автор уже присутсвует в списке. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Вы не выбрали подходящего автора. Выберите автора из списка, или введите нового автора и выберите "Добавить Автора к Песне", чтобы добавить нового автора. - + Add Topic Добавить Тему - + This topic does not exist, do you want to add it? Эта тема не существует. Хотите добавить её? - + This topic is already in the list. Такая тема уже присутсвует в списке. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Вы не выбрали подходящую тему. Выберите тему из списка, или введите новую тему и выберите "Добавить Тему к Песне", чтобы добавить новую тему. - + You need to type in a song title. Вы должны указать название песни. - + You need to type in at least one verse. Вы должны ввести по крайней мере один куплет. - + You need to have an author for this song. Вы должны добавить автора к этой песне. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Порядок куплетов указан неверно. Нет куплета, который бы соответсвовал %s. Правильными записями являютеся %s. - + Warning Предупреждение - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? Вы не используете %s нигде в порядке куплетов. Вы уверены, что хотите сохранить песню в таком виде? - + Add Book Добавить Книгу - + This song book does not exist, do you want to add it? Этот сборник песен не существует. Хотите добавить его? - + You need to type some text in to the verse. Вы должны указать какой-то текст в этом куплете. @@ -4457,236 +5121,241 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse Изменить стих - + &Verse type: &Тип стиха: - + &Insert &Вставить + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard Мастер экспорта песен - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. Этот мастер поможет вам экспортировать песни в открытый и свободный формат OpenLyrics. - + Select Songs Выберите песни - + Check the songs you want to export. Выберите песни, который вы хотите экспортировать. - + Uncheck All Сбросить все - + Check All Выбрать все - + Select Directory Выбрать словарь - - Select the directory you want the songs to be saved. - Выберите папку, в которую вы хотите сохранить песни. - - - + Directory: Папка: - + Exporting Экспортирую - + Please wait while your songs are exported. Пожалуйста дождитесь пока экспорт песен будет завершен. - + You need to add at least one Song to export. Вы должны добавить по крайней мере одну песню для экспорта. - + No Save Location specified Не выбрано место сохранения - + Starting export... Начинаю экспорт... - + You need to specify a directory. Вы должны указать папку. - + Select Destination Folder Выберите целевую папку + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Song Import Wizard Мастер Импорта Песен - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. Этот Мастер поможет Вам импортировать песни из различных форматов. Выберите кнопку Далее чтобы начать процесс выбора формата для импорта. - + Generic Document/Presentation Общий формат или презентация - + Filename: Имя файла: - + Add Files... Добавить файлы... - + Remove File(s) Удалить Файл(ы) - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Импорт из общего формата/презентации был запрещен, поскольку OpenLP не обнаружило OpenOffice на вашем компьютере. - - - + Please wait while your songs are imported. Дождитесь, пока песни будут импортированы. - + OpenLP 2.0 Databases База данных OpenLP 2.0 - + openlp.org v1.x Databases База данных openlp.org v1.x - + Words Of Worship Song Files - + Select Document/Presentation Files Выберите файл документа или презентации - - Administered by %s - Администрируется %s - - - + You need to specify at least one document or presentation file to import from. Вы должны указать по крайней мере один документ или презентацию, чтобы осуществить импорт из них. - + Songs Of Fellowship Song Files Файлы песен Songs Of Fellowship - + SongBeamer Files Файлы SongBeamer - + SongShow Plus Song Files Файлы SongShow Plus - + Foilpresenter Song Files Foilpresenter Song Files + + + Copy + + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Обслуживание списка авторов, тем и песенников - - - + Entire Song Всю песню - + Titles Название - + Lyrics Слова - + Delete Song(s)? Удалить песню(и)? - + Are you sure you want to delete the %n selected song(s)? Вы уверены, что хотите удалить %n выбранную песню? @@ -4695,23 +5364,36 @@ The encoding is responsible for the correct character representation. - + CCLI License: Лицензия CCLI: + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. - Импортирую песни %d из %d. + + Not a valid OpenLP 2.0 song database. + SongsPlugin.OpenLyricsExport - + Exporting "%s"... Экспортирую "%s"... @@ -4719,22 +5401,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance Обслуживание сборника песен - + &Name: &Название: - + &Publisher: &Опубликован: - + You need to type in a name for the book. Вы далжны ввести название сборника @@ -4742,12 +5424,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4755,15 +5437,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4771,107 +5473,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + Could not save your modified author, because the author already exists. - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + Could not save your modified topic, because it already exists. - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + Delete Author - + Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book - + Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. @@ -4879,27 +5581,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4907,17 +5609,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: - + You need to type in a topic name. @@ -4925,39 +5627,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse - + Chorus - + Bridge - + Pre-Chorus - + Intro - + Ending - + Other + + ThemeTab + + + Themes + Темы + + diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 0aa4011c3..0751661ee 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -3,60 +3,61 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? Du har inte angivit någon parameter som kan ersättas. Vill du fortsätta ändå? - + No Parameter Found Inga parametrar hittades - + No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? - + Larmmeddelandet innehåller inte '<>'. +Vill du fortsätta ändå? AlertsPlugin - + &Alert &Larm - + Show an alert message. Visa ett larmmeddelande. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen <strong>Larmplugin</strong><br />Larmpluginen kontrollerar visningen av larmmeddelande på visningsskärmen - + Alert name singular Larm - + Alerts name plural Alarm - + Alerts container title Larm @@ -65,47 +66,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message Larmmeddelande - + Alert &text: - Larm&text: + Larm & text: - + &New &Ny - + &Save &Spara - + Displ&ay &Visa - + Display && Cl&ose Visa && stän&g - + New Alert Nytt larm - + You haven't specified any text for your alert. Please type in some text before clicking New. Du har inte angivit någon text för ditt larm. Ange en text innan du klickar på Nytt. - + &Parameter: &Parameter: @@ -121,32 +122,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Teckensnitt - + Font name: Teckensnittsnamn: - + Font color: Teckenfärg: - + Background color: Bakgrundsfärg: - + Font size: Teckenstorlek: - + Alert timeout: Visningstid: @@ -154,175 +155,188 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importerar böcker... %s - + Importing verses from %s... Importing verses from <book name>... Importerar verser från %s... - + Importing verses... done. Importerar verser... klart. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error Fel vid nerladdning - + Parse Error Fel vid analys - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. Det var problem med nerladdningen av versurvalet. Kontrollera internetuppkopplingen och om problemet återkommer fundera på att rapportera det som en bugg. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - + Det var ett problem att extrahera ditt vers-val. Om problemet uppstår igen, överväg att rapportera en bugg. BiblePlugin.MediaItem - + Bible not fully loaded. + Bibeln är inte helt laddad. + + + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + Du kan inte kombinera sökresultat från en bibel och två biblar. Vill du ta bort dina sökresultat och starta en ny sökning? + + + + Information - - You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. BiblesPlugin - + &Bible &Bibel - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>Bibelplugin</strong><br />Bibelpluginen tillhandahåller möjligheten att visa bibelverser från olika källor under gudstjänsten. - - - - Import a Bible - Importera en bibel - - - - Add a new Bible - Lägg till en bibel - - - - Edit the selected Bible - Redigera vald bibel - - - - Delete the selected Bible - Ta bort vald bibel - - - - Preview the selected Bible - Förhandsgranska vald bibeln - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - Lägg till vald bibel till gudstjänstordningen - - - + Bible name singular Bibel - + Bibles name plural Biblar - + Bibles container title Biblar - + No Book Found Ingen bok hittades - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. Ingen bok hittades i vald bibel. Kontrollera stavningen på bokens namn. + + + Import a Bible. + Importera en bibel. + + + + Add a new Bible. + Lägg till en ny bibel. + + + + Edit the selected Bible. + Ändra i vald bibel. + + + + Delete the selected Bible. + Ta bort vald bibel. + + + + Preview the selected Bible. + Förhandsgranska vald bibel. + + + + Send the selected Bible live. + Skicka vald bibel. + + + + Add the selected Bible to the service. + Lägg till vald bibel till gudstjänsten. + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error Felaktigt bibelställe - + Web Bible cannot be used Bibel på webben kan inte användas - + Text Search is not available with Web Bibles. Textsökning är inte tillgänglig för bibel på webben. - + 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. Du angav inget sökord. Du kan ange flera sökord avskilda med mellanslag för att söka på alla sökord och du kan avskilja sökorden med kommatecken för att söka efter ett av sökorden. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Det finns ingen bibel installerad. Använd guiden för bibelimport och installera en eller flera biblar. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -334,53 +348,28 @@ Book Chapter:Verse-Chapter:Verse - + No Bibles Available - + Inga biblar tillgängliga. BiblesPlugin.BiblesTab - + Verse Display Visning av verser - + Only show new chapter numbers - Visa bara nya kapitelnummer - - - - Layout style: - Layout: - - - - Display style: - Display stil: + Visa bara nummer för nya kapitel Bible theme: Bibeltema: - - - Verse Per Slide - Verser per sida - - - - Verse Per Line - Verser per rad - - - - Continuous - Kontinuerlig - No Brackets @@ -414,257 +403,333 @@ Changes do not affect verses already in the service. Visa andra bibelns verser + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard Guiden för bibelimport - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. Den här guiden hjälper dig importera biblar från en mängd olika format. Klicka på Nästa för att fortsätta med importen. - + Web Download Nedladdning från internet - + Location: Placering: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bibel: - + Download Options Alternativ för nedladdning - + Server: Server: - + Username: Användarnamn: - + Password: Lösenord: - + Proxy Server (Optional) Proxyserver (Frivilligt) - + License Details Licensuppgifter - + Set up the Bible's license details. Skriv in bibelns licensuppgifter. - + Version name: Versionsnamn: - + Copyright: Copyright: - + Please wait while your Bible is imported. Vänta medan din bibel importeras. - + You need to specify a file with books of the Bible to use in the import. - Du måste välja en fil med Bibelböcker att använda i importen. + Du måste välja en fil med bibelböcker att använda i importen. - + You need to specify a file of Bible verses to import. - Du måste specificera en fil med Bibelverser att importera. + Du måste specificera en fil med bibelverser att importera. - + You need to specify a version name for your Bible. - Du måste ange ett versionsnamn för din Bibel. + Du måste ange ett versionsnamn för din bibel. - + Bible Exists Bibeln finns redan - + Your Bible import failed. Din bibelimport misslyckades. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Denna Bibeln finns redan. Importera en annan Bibel eller radera den nuvarande. - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Permissions: Tillstånd: - + CSV File CSV-fil - + Bibleserver Bibelserver - + Bible file: - + Bibelfil: + + + + Books file: + Bokfil: - Testaments file: - - - - - Books file: - - - - Verses file: - + Versfil: - - You have not specified a testaments file. Do you want to proceed with the import? - - - - + openlp.org 1.x Bible Files + openlp.org 1.x bibelfiler + + + + Registering Bible... + Registrerar bibel... + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick Snabb - + Find: Hitta: - - Results: - Resultat: - - - + Book: Bok: - + Chapter: Kapitel: - + Verse: Vers: - + From: Från: - + To: Till: - + Text Search Textsökning - - Clear - Rensa vid ny sökning - - - - Keep - Behåll vid ny sökning - - - + Second: + Andra: + + + + Scripture Reference - - Scripture Reference + + Toggle to keep or clear the previous results. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importerar %s %s... @@ -673,34 +738,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Analyserar kodning (detta kan ta några minuter)... - + Importing %s %s... Importing <book name> <chapter>... Importerar %s %s... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + Versionsnamn: + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + Du måste ange ett versionsnamn för din bibel. + + + + Bible Exists + Bibeln finns redan + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Fel vid nerladdning + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display Anpassad visning - + Display footer @@ -708,192 +1000,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides Redigera anpassade diabilder - + &Title: &Titel: - + Add a new slide at bottom. Lägg till en ny diabild sist. - + Edit the selected slide. Redigera vald diabild. - + Edit all the slides at once. Redigera alla diabilder på en gång. - - Split Slide - Dela diabilden - - - + Split a slide into two by inserting a slide splitter. Dela diabilden i två genom att lägga till en diabild delare. - + The&me: Te&ma: - + &Credits: - + You need to type in a title. Du måste ange en titel. - + You need to add at least one slide Du måste lägga till minst en diabild - + Ed&it All Red&igera alla + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom + + General - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - Anpassad - - - - Customs - name plural - - - - - Custom - container title - Anpassad - ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - Ladda en ny bild - - - - Add a new Image - Lägg till en ny bild - - - - Edit the selected Image - Redigera vald bild - - - - Delete the selected Image - Ta bort vald bild - - - - Preview the selected Image - Förhandsgranska vald bild - - - - Send the selected Image live - - - - - Add the selected Image to the service - - - - + Image name singular Bild - + Images name plural Bilder - + Images container title Bilder + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment @@ -901,138 +1140,138 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) Välj bild(er) - + You must select an image to delete. Du måste välja en bild som skall tas bort. - + You must select an image to replace the background with. Du måste välja en bild att ersätta bakgrundsbilden med. - + Missing Image(s) Bild(er) saknas - + The following image(s) no longer exist: %s Följande bild(er) finns inte längre: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Följande bild(er) finns inte längre: %s Vill du lägga till dom andra bilderna ändå? - + There was a problem replacing your background, the image file "%s" no longer exists. - + Det uppstod ett problem med att ersätta din bakgrund, bildfilen "%s" finns inte längre. MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - + Media name singular Media - + Media name plural Media - + Media container title Media + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media Välj media - + You must select a media file to delete. Du måste välja en mediafil för borttagning. - + Missing Media File - + The file %s no longer exists. - + Filen %s finns inte längre. - + You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Videos (%s);;Audio (%s);;%s (*) @@ -1040,12 +1279,12 @@ Vill du lägga till dom andra bilderna ändå? MediaPlugin.MediaTab - + Media Display - + Use Phonon for video playback @@ -1053,56 +1292,57 @@ Vill du lägga till dom andra bilderna ändå? OpenLP - + Image Files Bildfiler + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits Lista över medverkande - + License Licens - + Contribute Bidra - + build %s - + 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 below for more details. - + Project Lead %s @@ -1167,184 +1407,310 @@ Final Credit - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: Bakgrundsfärg: - + Image file: Bildfil: - + Open File + + + Preview items when clicked in Media Manager + + + + + Advanced + + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Error Occurred Fel uppstod - + Send E-Mail Skicka e-post - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1352,23 +1718,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report - + Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1386,7 +1752,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1408,17 +1774,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename - + New File Name: - + File Copy @@ -1426,17 +1792,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1444,102 +1810,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - + First Time Wizard - + Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + Activate required Plugins - + Select the Plugins you wish to use. - + Songs - + Custom Text - + Bible Bibel - + Images Bilder - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1548,198 +1909,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Default Settings - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General Allmänt - + Monitors Skärmar - + Select monitor for output display: Välj skärm för utsignal: - + Display if a single screen Visa även på enkel skärm - + Application Startup Programstart - + Show blank screen warning Visa varning vid tom skärm - + Automatically open the last service Öppna automatiskt den senaste planeringen - + Show the splash screen Visa startbilden - + Application Settings Programinställningar - + Prompt to save before starting a new service - + Automatically preview next item in service Automatiskt förhandsgranska nästa post i planeringen - Slide loop delay: - - - - sec sekunder - + CCLI Details CCLI-detaljer - + SongSelect username: SongSelect användarnamn: - + SongSelect password: SongSelect lösenord: - + Display Position - + X X - + Y Y - + Height Höjd - + Width Bredd - + Override display position - + Check for updates to OpenLP + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language Språk - + Please restart OpenLP to use your new language setting. Vänligen starta om OpenLP för att aktivera dina nya språkinställningar. @@ -1747,7 +2133,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display @@ -1755,190 +2141,155 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Fil - + &Import &Importera - + &Export &Exportera - + &View &Visa - + M&ode &Läge - + &Tools &Verktyg - + &Settings &Inställningar - + &Language &Språk - + &Help &Hjälp - + Media Manager Mediahanterare - + Service Manager Planeringshanterare - + Theme Manager Temahanterare - + &New &Ny - - Ctrl+N - Ctrl+N - - - + &Open &Öppna - + Open an existing service. Öppna en befintlig planering. - - Ctrl+O - Ctrl+O - - - + &Save &Spara - + Save the current service to disk. Spara den aktuella planeringen till disk. - - Ctrl+S - Ctrl+S - - - + Save &As... S&para som... - + Save Service As Spara planering som - + Save the current service under a new name. Spara den aktuella planeringen under ett nytt namn. - - Ctrl+Shift+S - Ctrl+Shift+S - - - + E&xit &Avsluta - + Quit OpenLP Avsluta OpenLP - - Alt+F4 - Alt+F4 - - - + &Theme &Tema - + &Configure OpenLP... &Konfigurera OpenLP... - + &Media Manager &Mediahanterare - + Toggle Media Manager Växla mediahanterare - + Toggle the visibility of the media manager. Växla synligheten för mediahanteraren. - - F8 - F8 - - - + &Theme Manager &Temahanterare - + Toggle Theme Manager Växla temahanteraren - + Toggle the visibility of the theme manager. Växla synligheten för temahanteraren. - - - F10 - F10 - &Service Manager @@ -1956,227 +2307,207 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - F9 - - - &Preview Panel &Förhandsgranskningpanel - + Toggle Preview Panel Växla förhandsgranskningspanel - + Toggle the visibility of the preview panel. Växla synligheten för förhandsgranskningspanelen. - - F11 - F11 - - - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - - F12 - F12 - - - + &Plugin List &Pluginlista - + List the Plugins Lista pluginen - - Alt+F7 - Alt+F7 - - - + &User Guide &Användarguide - + &About &Om - + More information about OpenLP Mer information om OpenLP - - Ctrl+F1 - Ctrl+F1 - - - + &Online Help &Hjälp online - + &Web Site &Webbsida - + Use the system language, if available. Använd systemspråket om möjligt. - + Set the interface language to %s Sätt användargränssnittets språk till %s - + Add &Tool... Lägg till &verktyg... - + Add an application to the list of tools. Lägg till en applikation i verktygslistan. - + &Default &Standard - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live &Live - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP-versionen uppdaterad - + OpenLP Main Display Blanked OpenLPs huvuddisplay rensad - + The Main Display has been blanked out Huvuddisplayen har rensats - + Default Theme: %s Standardtema: %s - + English Please add the name of your language here Svenska - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - - Print the current Service Order. - - - - - Ctrl+P - - - - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Configure Display Tags - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected Inget objekt valt @@ -2186,75 +2517,91 @@ You can download the latest version from http://openlp.org/. &Lägg till vald planeringsobjekt - + You must select one or more items to preview. Du måste välja ett eller flera objekt att förhandsgranska. - + You must select one or more items to send live. - + You must select one or more items. Du måste välja ett eller flera objekt. - + You must select an existing service item to add to. Du måste välja en befintligt planeringsobjekt att lägga till till. - + Invalid Service Item Felaktigt planeringsobjekt - + You must select a %s service item. Du måste välja ett %s planeringsobjekt. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List Pluginlista - + Plugin Details Plugindetaljer - + Status: Status: - + Active Aktiv - + Inactive Inaktiv - + %s (Inactive) %s (Inaktiv) - + %s (Active) %s (Aktiv) - + %s (Disabled) %s (Ej valbar) @@ -2262,12 +2609,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page Passa sidan - + Fit Width Passa bredden @@ -2275,7 +2622,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options Alternativ @@ -2295,55 +2642,60 @@ You can download the latest version from http://openlp.org/. Kopiera som HTML - + Zoom In Zooma in - + Zoom Out Zooma ut - + Zoom Original Zooma original - + Other Options Andra alternativ - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2351,7 +2703,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -2359,216 +2711,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - Ladda en planering - - - - Save this service - Spara denna planering - - - - Select a theme for the service - Välj ett tema för planeringen - - - + Move to &top Flytta högst &upp - + Move item to the top of the service. - + Move &up Flytta &upp - + Move item up one position in the service. - + Move &down Flytta &ner - + Move item down one position in the service. - + Move to &bottom Flytta längst &ner - + Move item to the end of the service. - + &Delete From Service &Ta bort från planeringen - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item &Redigera objekt - + &Reorder Item - + &Notes &Anteckningar - + &Change Item Theme &Byt objektets tema - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + OpenLP Service Files (*.osz) - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + Modified Service - - Notes: - - - - + &Start Time - + Show &Preview - + Show &Live - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes Mötesanteckningar @@ -2576,7 +2968,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2584,220 +2976,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + Anpassad + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - Flytta till föregående - - - - Move to next - Flytta till nästa - - - + Hide - - Move to live - Flytta till live - - - - Start continuous loop - Börja oändlig loop - - - - Stop continuous loop - Stoppa upprepad loop - - - - Delay between slides in seconds - Fördröjning mellan bilder, i sekunder - - - - Start playing media - Börja spela media - - - + Go To - - Edit and reload song preview - - - - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image Välj bild - + Theme Name Missing Temanamn saknas - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2864,68 +3311,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. Du kan inte ta bort standardtemat. - + You have not selected a theme. Du har inte valt ett tema. - + Save Theme - (%s) Spara tema - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File Välj tema importfil - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. Filen är inte ett giltigt tema. - + Theme %s is used in the %s plugin. @@ -2945,47 +3392,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -2993,242 +3440,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color Solid färg - + Gradient Stegvis - + Color: Färg: - + Gradient: Stegvis: - + Horizontal Horisontal - + Vertical Vertikal - + Circular Cirkulär - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: Typsnitt: - + Size: Storlek: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold Fetstil - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left Vänster - + Right Höger - + Center Centrera - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: X-position: - + px px - + Y position: Y-position: - + Width: Bredd: - + Height: Höjd: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s @@ -3236,42 +3683,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Använd temat för varje sång i databasen indviduellt. Om en sång inte har ett associerat tema, använd planeringens schema. Om planeringen inte har ett tema, använd globala temat. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Använd temat för mötesplaneringen, och ignorera sångernas individuella teman. Om mötesplaneringen inte har ett tema använd då det globala temat. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Använd det globala temat, ignorerar teman associerade med mötesplaneringen eller sångerna. @@ -3279,421 +3726,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error Fel - + &Delete &Ta bort - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Add &Lägg till - + Advanced Avancerat - + All Files Alla filer - + Create a new service. Skapa en ny planering. - + &Edit &Redigera - + Import Importera - + Length %s - + Live - + Load Ladda - + New - + New Service Ny planering - + OpenLP 2.0 OpenLP 2.0 - - Open Service - Öppna planering - - - + Preview Förhandsgranska - + Replace Background Ersätt bakgrund - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + Save Service Spara planering - + Service Gudstjänst - + Start %s - + &Vertical Align: - + Top Toppen - + Middle Mitten - + Bottom Botten - + About Om - + Browse... - + Cancel - + CCLI number: - + Empty Field - + Export - + pt Abbreviated font pointsize unit - + Image Bild - + Live Background Error - - Live Panel - - - - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural Inget objekt valt - + openlp.org 1.x openlp.org 1.x - - Preview Panel - - - - - Print Service Order - - - - + s The abbreviated unit for seconds - + Save && Preview Spara && förhandsgranska - + Search Sök - + You must select an item to delete. - + You must select an item to edit. - + Theme Singular Tema - + Themes Plural - + Version - + Finished import. Importen är färdig. - + Format: - + Importing Importerar - + Importing "%s"... Importerar "%s"... - + Select Import Source Välj importkälla - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% %p% - + Ready. - + Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard Välkommen till guiden för bibelimport - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural Författare - + © Copyright symbol. © - + Song Book Singular Sångbok - + Song Books Plural - + Song Maintenance Sångunderhåll - + Topic Singular Ämne - + Topics Plural Ämnen + + + Continuous + Kontinuerlig + + + + Default + + + + + Display style: + Display stil: + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + Layout: + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + Verser per sida + + + + Verse Per Line + Verser per rad + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3705,31 +4259,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3748,61 +4277,81 @@ The content encoding is not UTF-8. container title Presentationer + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) Välj presentation(er) - + Automatic Automatisk - + Present using: Presentera genom: - + File Exists - + A presentation with that filename already exists. En presentation med det namnet finns redan. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3810,17 +4359,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers Tillgängliga Presentationsprogram - + Allow presentation application to be overriden - + %s (unavailable) @@ -3828,71 +4377,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural Fjärrstyrningar - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + Planeringshanterare + + + + Slide Controller + + + + + Alerts + Larm + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + Alternativ + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3907,53 +4559,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? Ta bort valda sånganvändningsdata? - + Are you sure you want to delete selected Song Usage data? Vill du verkligen ta bort vald sånganvändningsdata? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3961,54 +4618,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Sånganvändningsutdrag - + Select Date Range Välj datumspann - + to till - + Report Location Rapportera placering - + Output File Location Utfil sökväg - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4016,211 +4673,211 @@ has been successfully created. SongsPlugin - + &Song &Sång - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Song name singular Sång - + Songs name plural Sånger - + Songs container title Sånger - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Exports songs using the export wizard. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance Författare underhåll - + Display name: Visningsnamn: - + First name: Förnamn: - + Last name: Efternamn: - + You need to type in the first name of the author. Du måste ange låtskrivarens förnamn. - + You need to type in the last name of the author. Du måste ange författarens efternamn. - + You have not set a display name for the author, combine the first and last names? @@ -4228,190 +4885,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor Sångredigerare - + &Title: &Titel: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All Red&igera alla - + Title && Lyrics Titel && Sångtexter - + &Add to Song &Lägg till i sång - + &Remove &Ta bort - + &Manage Authors, Topics, Song Books - + A&dd to Song Lä&gg till i sång - + R&emove Ta &bort - + Book: Bok: - + Number: Nummer: - + Authors, Topics && Song Book - + New &Theme Nytt &tema - + Copyright Information Copyrightinformation - + Comments Kommentarer - + Theme, Copyright Info && Comments Tema, copyrightinfo && kommentarer - + Add Author Lägg till föfattare - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4419,260 +5084,278 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse Redigera vers - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + Check the songs you want to export. - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + You need to specify at least one document or presentation file to import from. - + Foilpresenter Song Files + + + Copy + Kopiera + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - Hantera listorna över författare, ämnen och böcker - - - + Titles Titlar - + Lyrics Sångtexter - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4680,22 +5363,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: &Namn: - + &Publisher: - + You need to type in a name for the book. @@ -4703,12 +5386,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4716,15 +5399,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4732,107 +5435,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified topic, because it already exists. - + Delete Author Ta bort författare - + Are you sure you want to delete the selected author? Är du säker på att du vill ta bort den valda författare? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic Ta bort ämne - + Are you sure you want to delete the selected topic? Är du säker på att du vill ta bort valt ämne? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book Ta bort bok - + Are you sure you want to delete the selected book? Är du säker på att du vill ta bort vald bok? - + This book cannot be deleted, it is currently assigned to at least one song. - + Could not save your modified author, because the author already exists. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4840,27 +5543,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode Sångläge - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4868,17 +5571,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance Ämnesunderhåll - + Topic name: Ämnesnamn: - + You need to type in a topic name. @@ -4886,39 +5589,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse Vers - + Chorus Refräng - + Bridge Brygga - + Pre-Chorus Brygga - + Intro Intro - + Ending Ending - + Other Övrigt + + ThemeTab + + + Themes + + + diff --git a/resources/i18n/zh_CN.ts b/resources/i18n/zh_CN.ts index d2824b41a..77bb39942 100644 --- a/resources/i18n/zh_CN.ts +++ b/resources/i18n/zh_CN.ts @@ -3,23 +3,23 @@ AlertPlugin.AlertForm - + You have not entered a parameter to be replaced. Do you want to continue anyway? - + No Parameter Found - + No Placeholder Found - + The alert text does not contain '<>'. Do you want to continue anyway? @@ -28,34 +28,34 @@ Do you want to continue anyway? AlertsPlugin - + &Alert - + Show an alert message. - + <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - + Alert name singular - + Alerts name plural - + Alerts container title @@ -64,47 +64,47 @@ Do you want to continue anyway? AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose - + New Alert - + You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: @@ -120,32 +120,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -153,51 +153,54 @@ Do you want to continue anyway? BibleDB.Wizard - - Importing testaments... %s - - - - - Importing testaments... done. - - - - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. + + BiblePlugin + + + &Upgrade older Bibles + + + + + Upgrade the Bible databases to the latest format. + + + BiblePlugin.HTTPBible - + Download Error - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Parse Error - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. @@ -205,122 +208,132 @@ Do you want to continue anyway? BiblePlugin.MediaItem - + Bible not fully loaded. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + + + Information + + + + + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. + + BiblesPlugin - + &Bible - - <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - - - - - Import a Bible - - - - - Add a new Bible - - - - - Edit the selected Bible - - - - - Delete the selected Bible - - - - - Preview the selected Bible - - - - - Send the selected Bible live - - - - - Add the selected Bible to the service - - - - + Bible name singular - + Bibles name plural - + Bibles container title - + No Book Found - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. + + + Import a Bible. + + + + + Add a new Bible. + + + + + Edit the selected Bible. + + + + + Delete the selected Bible. + + + + + Preview the selected Bible. + + + + + Send the selected Bible live. + + + + + Add the selected Bible to the service. + + + + + <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: Book Chapter @@ -332,7 +345,7 @@ Book Chapter:Verse-Chapter:Verse - + No Bibles Available @@ -340,45 +353,20 @@ Book Chapter:Verse-Chapter:Verse BiblesPlugin.BiblesTab - + Verse Display - + Only show new chapter numbers - - - Layout style: - - - - - Display style: - - Bible theme: - - - Verse Per Slide - - - - - Verse Per Line - - - - - Continuous - - No Brackets @@ -411,257 +399,333 @@ Changes do not affect verses already in the service. + + BiblesPlugin.BookNameDialog + + + Select Book Name + + + + + The following book name cannot be matched up internally. Please select the corresponding English name from the list. + + + + + Current name: + + + + + Corresponding name: + + + + + Show Books From + + + + + Old Testament + + + + + New Testament + + + + + Apocrypha + + + + + BiblesPlugin.BookNameForm + + + You need to select a book. + + + + + BiblesPlugin.HTTPBible + + + Registering Bible and loading books... + + + + + Registering Language... + + + + + Importing %s... + Importing <book name>... + + + BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - - Starting Registering bible... - - - - - Registered bible. Please note, that verses will be downloaded on -demand and thus an internet connection is required. - - - - + Bibleserver - + Permissions: - + Bible file: - - Testaments file: - - - - + Books file: - + Verses file: - - You have not specified a testaments file. Do you want to proceed with the import? + + openlp.org 1.x Bible Files - - openlp.org 1.x Bible Files + + Registering Bible... + + + + + Registered Bible. Please note, that verses will be downloaded on +demand and thus an internet connection is required. + + + + + BiblesPlugin.LanguageDialog + + + Select Language + + + + + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. + + + + + Language: + + + + + BiblesPlugin.LanguageForm + + + You need to choose a language. BiblesPlugin.MediaItem - + Quick - + Find: - - Results: - - - - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - - Clear - - - - - Keep - - - - + Second: - + Scripture Reference + + + Toggle to keep or clear the previous results. + + BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -670,34 +734,261 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... + + BiblesPlugin.UpgradeWizardForm + + + Select a Backup Directory + + + + + Bible Upgrade Wizard + + + + + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. + + + + + Select Backup Directory + + + + + Please select a backup directory for your Bibles + + + + + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. + + + + + Please select a backup location for your Bibles. + + + + + Backup Directory: + + + + + There is no need to backup my Bibles + + + + + Select Bibles + + + + + Please select the Bibles to upgrade + + + + + Version name: + + + + + This Bible still exists. Please change the name or uncheck it. + + + + + Upgrading + + + + + Please wait while your Bibles are upgraded. + + + + + You need to specify a Backup Directory for your Bibles. + + + + + You need to specify a version name for your Bible. + + + + + Bible Exists + + + + + This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. + + + + + There are no Bibles available to upgrade. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + + + + The backup was not successful. +To backup your Bibles you need permission to write to the given directory. + + + + + Starting Bible upgrade... + + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + CustomPlugin - - <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + <strong>Custom Slide Plugin</strong><br />The custom slide plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. + + + + + Custom Slide + name singular + + + + + Custom Slides + name plural + + + + + Custom Slides + container title + + + + + Load a new custom slide. + + + + + Import a custom slide. + + + + + Add a new custom slide. + + + + + Edit the selected custom slide. + + + + + Delete the selected custom slide. + + + + + Preview the selected custom slide. + + + + + Send the selected custom slide live. + + + + + Add the selected custom slide to the service. CustomPlugin.CustomTab - + Custom Display - + Display footer @@ -705,192 +996,139 @@ demand and thus an internet connection is required. CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - - Split Slide - - - - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: - + You need to type in a title. - + You need to add at least one slide - + Ed&it All + + + Insert Slide + + - CustomsPlugin + GeneralTab - - Import a Custom - - - - - Load a new Custom - - - - - Add a new Custom - - - - - Edit the selected Custom - - - - - Delete the selected Custom - - - - - Preview the selected Custom - - - - - Send the selected Custom live - - - - - Add the selected Custom to the service - - - - - Custom - name singular - - - - - Customs - name plural - - - - - Custom - container title + + General ImagePlugin - + <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - - Load a new Image - - - - - Add a new Image - - - - - Edit the selected Image - - - - - Delete the selected Image - - - - - Preview the selected Image - - - - - Send the selected Image live - - - - - Add the selected Image to the service - - - - + Image name singular - + Images name plural - + Images container title + + + Load a new image. + + + + + Add a new image. + + + + + Edit the selected image. + + + + + Delete the selected image. + + + + + Preview the selected image. + + + + + Send the selected image live. + + + + + Add the selected image to the service. + + ImagePlugin.ExceptionDialog - + Select Attachment @@ -898,38 +1136,38 @@ demand and thus an internet connection is required. ImagePlugin.MediaItem - + Select Image(s) - + You must select an image to delete. - + You must select an image to replace the background with. - + Missing Image(s) - + The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - + There was a problem replacing your background, the image file "%s" no longer exists. @@ -937,98 +1175,98 @@ Do you want to add the other images anyway? MediaPlugin - + <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - - - Load a new Media - - - - - Add a new Media - - - - - Edit the selected Media - - - - - Delete the selected Media - - - - - Preview the selected Media - - - - - Send the selected Media live - - - - - Add the selected Media to the service - - - - - Media - name singular - - Media + name singular + + + + + Media name plural - + Media container title + + + Load new media. + + + + + Add new media. + + + + + Edit the selected media. + + + + + Delete the selected media. + + + + + Preview the selected media. + + + + + Send the selected media live. + + + + + Add the selected media to the service. + + MediaPlugin.MediaItem - + Select Media - + You must select a media file to delete. - + You must select a media file to replace the background with. - + There was a problem replacing your background, the media file "%s" no longer exists. - + Missing Media File - + The file %s no longer exists. - + Videos (%s);;Audio (%s);;%s (*) @@ -1036,12 +1274,12 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Media Display - + Use Phonon for video playback @@ -1049,56 +1287,57 @@ Do you want to add the other images anyway? OpenLP - + Image Files + + + Information + + + + + Bible format has changed. +You have to upgrade your existing Bibles. +Should OpenLP upgrade now? + + OpenLP.AboutForm - - OpenLP <version><revision> - Open Source Lyrics Projection - -OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. - -Find out more about OpenLP: http://openlp.org/ - -OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - - - - + Credits - + License - + Contribute - + build %s - + 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 below for more details. - + Project Lead %s @@ -1163,184 +1402,310 @@ Final Credit - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-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 + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + + + + + Copyright © 2004-2011 %s +Portions copyright © 2004-2011 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File + + + Preview items when clicked in Media Manager + + + + + Advanced + + + + + Click to select a color. + + + + + Browse for an image file to display. + + + + + Revert to the default OpenLP logo. + + OpenLP.DisplayTagDialog - + Edit Selection - - Update - - - - + Description - + Tag - + Start tag - + End tag - - Default - - - - + Tag Id - + Start HTML - + End HTML + + + Save + + OpenLP.DisplayTagTab - + Update Error - + Tag "n" already defined. - + Tag %s already defined. + + + New Tag + + + + + </and here> + + + + + <HTML here> + + + + + OpenLP.DisplayTags + + + Red + + + + + Black + + + + + Blue + + + + + Yellow + + + + + Green + + + + + Pink + + + + + Orange + + + + + Purple + + + + + White + + + + + Superscript + + + + + Subscript + + + + + Paragraph + + + + + Bold + + + + + Italics + + + + + Underline + + + + + Break + + OpenLP.ExceptionDialog - + Error Occurred - + Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File - + Description characters to enter : %s @@ -1348,23 +1713,23 @@ Tinggaard, Frode Woldsund OpenLP.ExceptionForm - + Platform: %s - + Save Crash Report - + Text files (*.txt *.log *.text) - + **OpenLP Bug Report** Version: %s @@ -1382,7 +1747,7 @@ Version: %s - + *OpenLP Bug Report* Version: %s @@ -1404,17 +1769,17 @@ Version: %s OpenLP.FileRenameForm - + File Rename - + New File Name: - + File Copy @@ -1422,17 +1787,17 @@ Version: %s OpenLP.FirstTimeLanguageForm - + Select Translation - + Choose the translation you'd like to use in OpenLP. - + Translation: @@ -1440,102 +1805,97 @@ Version: %s OpenLP.FirstTimeWizard - + Downloading %s... - + Download complete. Click the finish button to start OpenLP. - + Enabling selected plugins... - + First Time Wizard - + Welcome to the First Time Wizard - - This wizard will help you to configure OpenLP for initial use. Click the next button below to start the process of selection your initial options. - - - - + Activate required Plugins - + Select the Plugins you wish to use. - + Songs - + Custom Text - + Bible - + Images - + Presentations - + Media (Audio and Video) - + Allow remote access - + Monitor Song Usage - + Allow Alerts - + No Internet Connection - + Unable to detect an Internet connection. - + No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able to download sample songs, Bibles and themes. To re-run the First Time Wizard and import this sample data at a later stage, press the cancel button now, check your Internet connection, and restart OpenLP. @@ -1544,198 +1904,223 @@ To cancel the First Time Wizard completely, press the finish button now. - + Sample Songs - + Select and download public domain songs. - + Sample Bibles - + Select and download free Bibles. - + Sample Themes - + Select and download sample themes. - + Default Settings - + Set up default settings to be used by OpenLP. - - Setting Up And Importing - - - - - Please wait while OpenLP is set up and your data is imported. - - - - + Default output display: - + Select default theme: - + Starting configuration process... + + + This wizard will help you to configure OpenLP for initial use. Click the next button below to start. + + + + + Setting Up And Downloading + + + + + Please wait while OpenLP is set up and your data is downloaded. + + + + + Setting Up + + + + + Click the finish button to start OpenLP. + + OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - Slide loop delay: - - - - sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - + Check for updates to OpenLP + + + Unblank display when adding new live item + + + + + Enable slide wrap-around + + + + + Timed slide interval: + + OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1743,7 +2128,7 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainDisplay - + OpenLP Display @@ -1751,188 +2136,153 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New - - Ctrl+N - - - - + &Open - + Open an existing service. - - Ctrl+O - - - - + &Save - + Save the current service to disk. - - Ctrl+S - - - - + Save &As... - + Save Service As - + Save the current service under a new name. - - Ctrl+Shift+S - - - - + E&xit - + Quit OpenLP - - Alt+F4 - - - - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - - F8 - - - - + &Theme Manager - + Toggle Theme Manager - - - Toggle the visibility of the theme manager. - - - F10 + Toggle the visibility of the theme manager. @@ -1952,227 +2302,207 @@ To cancel the First Time Wizard completely, press the finish button now. - F9 - - - - &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - - F11 - - - - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - - F12 - - - - + &Plugin List - + List the Plugins - - Alt+F7 - - - - + &User Guide - + &About - + More information about OpenLP - - Ctrl+F1 - - - - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s - + English Please add the name of your language here - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - - Print the current Service Order. - - - - - Ctrl+P - - - - + &Configure Display Tags - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect + + + Update Theme Images + + + + + Update the preview images for all themes. + + + + + Print the current service. + + OpenLP.MediaManagerItem - + No Items Selected @@ -2182,75 +2512,91 @@ You can download the latest version from http://openlp.org/. - + You must select one or more items to preview. - + You must select one or more items to send live. - + You must select one or more items. - + You must select an existing service item to add to. - + Invalid Service Item - + You must select a %s service item. + + + You must select one or more items to add. + + + + + No Search Results + + + + + Duplicate filename %s. +This filename is already in the list + + OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive - + %s (Inactive) - + %s (Active) - + %s (Disabled) @@ -2258,12 +2604,12 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -2271,7 +2617,7 @@ You can download the latest version from http://openlp.org/. OpenLP.PrintServiceForm - + Options @@ -2291,55 +2637,60 @@ You can download the latest version from http://openlp.org/. - + Zoom In - + Zoom Out - + Zoom Original - + Other Options - + Include slide text if available - + Include service item notes - + Include play length of media items - - Service Order Sheet + + Add page break before each text item + + + + + Service Sheet OpenLP.ScreenList - + Screen - + primary @@ -2347,7 +2698,7 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -2355,216 +2706,256 @@ You can download the latest version from http://openlp.org/. OpenLP.ServiceManager - - Load an existing service - - - - - Save this service - - - - - Select a theme for the service - - - - + Move to &top - + Move item to the top of the service. - + Move &up - + Move item up one position in the service. - + Move &down - + Move item down one position in the service. - + Move to &bottom - + Move item to the end of the service. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - - Notes: - - - - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? + + + File could not be opened because it is corrupt. + + + + + Empty File + + + + + This service file does not contain any data. + + + + + Corrupt File + + + + + Custom Service Notes: + + + + + Notes: + + + + + Playing time: + + + + + Untitled Service + + + + + Load an existing service. + + + + + Save this service. + + + + + Select a theme for the service. + + + + + This file is either corrupt or it is not an OpenLP 2.0 service file. + + OpenLP.ServiceNoteForm - + Service Item Notes @@ -2572,7 +2963,7 @@ The content encoding is not UTF-8. OpenLP.SettingsForm - + Configure OpenLP @@ -2580,220 +2971,275 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Customize Shortcuts - + Action - + Shortcut - - Default: %s - - - - - Custom: - - - - - None - - - - + Duplicate Shortcut - + The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate + + + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. + + + + + Default + + + + + Custom + + + + + Capture shortcut. + + + + + Restore the default shortcut of this action. + + + + + Restore Default Shortcuts + + + + + Do you want to restore all shortcuts to their defaults? + + OpenLP.SlideController - - Move to previous - - - - - Move to next - - - - + Hide - - Move to live - - - - - Edit and reload song preview - - - - - Start continuous loop - - - - - Stop continuous loop - - - - - Delay between slides in seconds - - - - - Start playing media - - - - + Go To - + Blank Screen - + Blank to Theme - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item + + + Move to previous. + + + + + Move to next. + + + + + Play Slides + + + + + Play Slides in Loop + + + + + Play Slides to End + + + + + Delay between slides in seconds. + + + + + Move to live. + + + + + Add to Service. + + + + + Edit and reload song preview. + + + + + Start playing media. + + OpenLP.SpellTextEdit - + Spelling Suggestions - + Formatting Tags + + + Language: + + OpenLP.StartTimeForm - - Item Start Time - - - - + Hours: - - h - - - - - m - - - - + Minutes: - + Seconds: + + + Item Start and Finish Time + + + + + Start + + + + + Finish + + + + + Length + + + + + Time Validation Error + + + + + Finish time is set after the end of the media item + + + + + Start time is after the finish time of the media item + + OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - - (%d lines per slide) + + (approximately %d lines per slide) @@ -2860,68 +3306,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. @@ -2941,47 +3387,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -2989,242 +3435,242 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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. - + Transitions: - + &Footer Area @@ -3232,42 +3678,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3275,421 +3721,528 @@ The content encoding is not UTF-8. OpenLP.Ui - + Error - + About - + &Add - + Advanced - + All Files - + Bottom - + Browse... - + Cancel - + CCLI number: - + Create a new service. - + &Delete - + &Edit - + Empty Field - + Export - + pt Abbreviated font pointsize unit - + Image - + Import - + Length %s - + Live - + Live Background Error - - Live Panel - - - - + Load - + Middle - + New - + New Service - + New Theme - + No File Selected Singular - + No Files Selected Plural - + No Item Selected Singular - + No Items Selected Plural - + openlp.org 1.x - + OpenLP 2.0 - - Open Service - - - - + Preview - - Preview Panel - - - - - Print Service Order - - - - + Replace Background - - Replace Live Background - - - - + Reset Background - - Reset Live Background - - - - + s The abbreviated unit for seconds - + Save && Preview - + Search - + You must select an item to delete. - + You must select an item to edit. - + Save Service - + Service - + Start %s - + Theme Singular - + Themes Plural - + Top - + Version - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: - + Finished import. - + Format: - + Importing - + Importing "%s"... - + Select Import Source - + Select the import format and the location to import from. - + The openlp.org 1.x 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. - + Open %s File - + %p% - + Ready. - + Starting import... - + You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Welcome to the Bible Import Wizard - + Welcome to the Song Export Wizard - + Welcome to the Song Import Wizard - + Author Singular - + Authors Plural - + © Copyright symbol. - + Song Book Singular - + Song Books Plural - + Song Maintenance - + Topic Singular - + Topics Plural + + + Continuous + + + + + Default + + + + + Display style: + + + + + File + + + + + Help + + + + + h + The abbreviated unit for hours + + + + + Layout style: + + + + + Live Toolbar + + + + + m + The abbreviated unit for minutes + + + + + OpenLP is already running. Do you wish to continue? + + + + + Settings + + + + + Tools + + + + + Verse Per Slide + + + + + Verse Per Line + + + + + View + + + + + Duplicate Error + + + + + Unsupported File + + + + + Title and/or verses not found + + + + + XML syntax error + + + + + View Mode + + + + + Welcome to the Bible Upgrade Wizard + + + + + Open service. + + + + + Print Service + + + + + Replace live background. + + + + + Reset live background. + + + + + &Split + + + + + Split a slide into two only if it does not fit on the screen as one slide. + + OpenLP.displayTagDialog - + Configure Display Tags @@ -3701,31 +4254,6 @@ The content encoding is not UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - - - Load a new Presentation - - - - - Delete the selected Presentation - - - - - Preview the selected Presentation - - - - - Send the selected Presentation live - - - - - Add the selected Presentation to the service - - Presentation @@ -3744,61 +4272,81 @@ The content encoding is not UTF-8. container title + + + Load a new presentation. + + + + + Delete the selected presentation. + + + + + Preview the selected presentation. + + + + + Send the selected presentation live. + + + + + Add the selected presentation to the service. + + PresentationPlugin.MediaItem - + Select Presentation(s) - + Automatic - + Present using: - + File Exists - + A presentation with that filename already exists. - - Unsupported File - - - - + This type of presentation is not supported. - + Presentations (%s) - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -3806,17 +4354,17 @@ The content encoding is not UTF-8. PresentationPlugin.PresentationTab - + Available Controllers - + Allow presentation application to be overriden - + %s (unavailable) @@ -3824,71 +4372,174 @@ The content encoding is not UTF-8. RemotePlugin - + <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. - + Remote name singular - + Remotes name plural - + Remote container title + + RemotePlugin.Mobile + + + OpenLP 2.0 Remote + + + + + OpenLP 2.0 Stage View + + + + + Service Manager + + + + + Slide Controller + + + + + Alerts + + + + + Search + + + + + Back + + + + + Refresh + + + + + Blank + + + + + Show + + + + + Prev + + + + + Next + + + + + Text + + + + + Show Alert + + + + + Go Live + + + + + Add To Service + + + + + No Results + + + + + Options + + + RemotePlugin.RemoteTab - + Serve on IP address: - + Port number: - + Server Settings + + + Remote URL: + + + + + Stage view URL: + + SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. @@ -3903,53 +4554,58 @@ The content encoding is not UTF-8. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - - - SongUsage - name singular - - - - - SongUsage - name plural - - SongUsage + name singular + + + + + SongUsage + name plural + + + + + SongUsage container title + + + Song Usage + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. @@ -3957,54 +4613,54 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location - + Output File Location - + usage_detail_%s_%s.txt - + Report Creation - + Report %s has been successfully created. - + Output Path Not Selected - + You have not set a valid output location for your song usage report. Please select an existing path on your computer. @@ -4012,211 +4668,211 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - - Add a new Song - - - - - Edit the selected Song - - - - - Delete the selected Song - - - - - Preview the selected Song - - - - - Send the selected Song live - - - - - Add the selected Song to the service - - - - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. - + Song name singular - + Songs name plural - + Songs container title - + Exports songs using the export wizard. + + + Add a new song. + + + + + Edit the selected song. + + + + + Delete the selected song. + + + + + Preview the selected song. + + + + + Send the selected song live. + + + + + Add the selected song to the service. + + SongsPlugin.AuthorsForm - + Author Maintenance - + Display name: - + First name: - + Last name: - + You need to type in the first name of the author. - + You need to type in the last name of the author. - + You have not set a display name for the author, combine the first and last names? @@ -4224,190 +4880,198 @@ The encoding is responsible for the correct character representation. SongsPlugin.CCLIFileImport - - Importing song %d of %d + + The file does not have a valid extension. + + + + + SongsPlugin.EasyWorshipSongImport + + + Administered by %s SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + Warning - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. @@ -4415,259 +5079,277 @@ The encoding is responsible for the correct character representation. SongsPlugin.EditVerseForm - + Edit Verse - + &Verse type: - + &Insert + + + Split a slide into two by inserting a verse splitter. + + SongsPlugin.ExportWizardForm - + Song Export Wizard - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Select Songs - + Check the songs you want to export. - + Uncheck All - + Check All - + Select Directory - - Select the directory you want the songs to be saved. - - - - + Directory: - + Exporting - + Please wait while your songs are exported. - + You need to add at least one Song to export. - + No Save Location specified - + Starting export... - + You need to specify a directory. - + Select Destination Folder + + + Select the directory where you want the songs to be saved. + + SongsPlugin.ImportWizardForm - + Select Document/Presentation Files - + Song Import Wizard - + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - + Generic Document/Presentation - + Filename: - + The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + Add Files... - + Remove File(s) - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - - - - + Please wait while your songs are imported. - - Administered by %s - - - - + OpenLP 2.0 Databases - + openlp.org v1.x Databases - + Words Of Worship Song Files - + You need to specify at least one document or presentation file to import from. - + Songs Of Fellowship Song Files - + SongBeamer Files - + SongShow Plus Song Files - + Foilpresenter Song Files + + + Copy + + + + + Save to File + + + + + The Songs of Fellowship importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + + + + The generic document/presentation importer has been disabled because OpenLP cannot access OpenOffice or LibreOffice. + + SongsPlugin.MediaItem - - Maintain the lists of authors, topics and books - - - - + Titles - + Lyrics - + Delete Song(s)? - + CCLI License: - + Entire Song - + Are you sure you want to delete the %n selected song(s)? + + + Maintain the lists of authors, topics and books. + + + + + SongsPlugin.OpenLP1SongImport + + + Not a valid openlp.org 1.x song database. + + SongsPlugin.OpenLPSongImport - - Importing song %d of %d. + + Not a valid OpenLP 2.0 song database. SongsPlugin.OpenLyricsExport - + Exporting "%s"... @@ -4675,22 +5357,22 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongBookForm - + Song Book Maintenance - + &Name: - + &Publisher: - + You need to type in a name for the book. @@ -4698,12 +5380,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - + Finished export. - + Your song export failed. @@ -4711,15 +5393,35 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright + + + The following songs could not be imported: + + + + + Unable to open file + + + + + File not found + + + + + Cannot access OpenOffice or LibreOffice + + SongsPlugin.SongImportForm - + Your song import failed. @@ -4727,107 +5429,107 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongMaintenanceForm - + Could not add your author. - + This author already exists. - + Could not add your topic. - + This topic already exists. - + Could not add your book. - + This book already exists. - + Could not save your changes. - + Could not save your modified author, because the author already exists. - + Could not save your modified topic, because it already exists. - + Delete Author - + Are you sure you want to delete the selected author? - + This author cannot be deleted, they are currently assigned to at least one song. - + Delete Topic - + Are you sure you want to delete the selected topic? - + This topic cannot be deleted, it is currently assigned to at least one song. - + Delete Book - + Are you sure you want to delete the selected book? - + This book cannot be deleted, it is currently assigned to at least one song. - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4835,27 +5537,27 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongsTab - + Songs Mode - + Enable search as you type - + Display verses on live tool bar - + Update service from song edit - + Add missing songs when opening service @@ -4863,17 +5565,17 @@ The encoding is responsible for the correct character representation. SongsPlugin.TopicsForm - + Topic Maintenance - + Topic name: - + You need to type in a topic name. @@ -4881,39 +5583,47 @@ The encoding is responsible for the correct character representation. SongsPlugin.VerseType - + Verse - + Chorus - + Bridge - + Pre-Chorus - + Intro - + Ending - + Other + + ThemeTab + + + Themes + + + diff --git a/resources/images/OpenLP.ico b/resources/images/OpenLP.ico index b275542c3..c4aa7c41e 100644 Binary files a/resources/images/OpenLP.ico and b/resources/images/OpenLP.ico differ diff --git a/resources/images/README.txt b/resources/images/README.txt new file mode 100644 index 000000000..1ec31b48b --- /dev/null +++ b/resources/images/README.txt @@ -0,0 +1,6 @@ +OpenLP.ico + +This Windows icon contains several images with different resolution. +It can be recreated by command: + +icotool -c -o OpenLP.ico openlp-logo-16x16.png openlp-logo-32x32.png openlp-logo-48x48.png openlp-logo-64x64.png openlp-logo-128x128.png diff --git a/resources/images/bibles_search_lock.png b/resources/images/bibles_search_lock.png new file mode 100644 index 000000000..ac2fd6f90 Binary files /dev/null and b/resources/images/bibles_search_lock.png differ diff --git a/resources/images/bibles_search_unlock.png b/resources/images/bibles_search_unlock.png new file mode 100644 index 000000000..d03a1f415 Binary files /dev/null and b/resources/images/bibles_search_unlock.png differ diff --git a/resources/images/bibles_upgrade_alert.png b/resources/images/bibles_upgrade_alert.png new file mode 100644 index 000000000..331aa2687 Binary files /dev/null and b/resources/images/bibles_upgrade_alert.png differ diff --git a/resources/images/general_clone.png b/resources/images/general_clone.png new file mode 100644 index 000000000..db1d9fbaf Binary files /dev/null and b/resources/images/general_clone.png differ diff --git a/resources/images/general_revert.png b/resources/images/general_revert.png new file mode 100644 index 000000000..47d7415e2 Binary files /dev/null and b/resources/images/general_revert.png differ diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index 0d3191eff..fff1f75b8 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -24,6 +24,9 @@ bibles_search_text.png bibles_search_reference.png + bibles_upgrade_alert.png + bibles_search_unlock.png + bibles_search_lock.png plugin_alerts.png @@ -52,6 +55,8 @@ general_open.png general_save.png general_email.png + general_revert.png + general_clone.png slide_close.png @@ -110,6 +115,7 @@ clear_shortcut.png system_about.png system_help_contents.png + system_online_help.png system_mediamanager.png system_contribute.png system_servicemanager.png @@ -132,6 +138,10 @@ messagebox_info.png messagebox_warning.png + + song_usage_active.png + song_usage_inactive.png + tools_add.png tools_alert.png diff --git a/resources/images/song_usage_active.png b/resources/images/song_usage_active.png new file mode 100644 index 000000000..1221e1310 Binary files /dev/null and b/resources/images/song_usage_active.png differ diff --git a/resources/images/song_usage_inactive.png b/resources/images/song_usage_inactive.png new file mode 100644 index 000000000..cdcf944ee Binary files /dev/null and b/resources/images/song_usage_inactive.png differ diff --git a/resources/images/system_online_help.png b/resources/images/system_online_help.png new file mode 100644 index 000000000..670c0716f Binary files /dev/null and b/resources/images/system_online_help.png differ diff --git a/resources/openlp.desktop b/resources/openlp.desktop index 07398ede8..b17cbaf96 100755 --- a/resources/openlp.desktop +++ b/resources/openlp.desktop @@ -2,7 +2,6 @@ Categories=AudioVideo; Comment[de]= Comment= -Encoding=UTF-8 Exec=openlp %F GenericName[de]=Church lyrics projection GenericName=Church lyrics projection @@ -13,7 +12,6 @@ Name=OpenLP Path= StartupNotify=true Terminal=false -TerminalOptions= Type=Application X-DBUS-ServiceName= X-DBUS-StartupType= diff --git a/resources/osx/Info.plist.master b/resources/osx/Info.plist.master index 45aab92a5..5fc3aa48f 100755 --- a/resources/osx/Info.plist.master +++ b/resources/osx/Info.plist.master @@ -2,6 +2,99 @@ + + CFBundleDocumentTypes + + + CFBundleTypeExtension + + osz + + CFBundleTypeIconFiles + + openlp-logo-with-text.icns + + CFBundleTypeName + OpenLP Service + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.openlp.osz + + + + CFBundleTypeExtension + + otz + + CFBundleTypeIconFiles + + openlp-logo-with-text.icns + + CFBundleTypeName + OpenLP Theme + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.openlp.otz + + + + + UTExportedTypeDeclarations + + + UTTypeIdentifier + org.openlp.osz + UTTypeDescription + OpenLP Service + UTTypeConformsTo + + public.data + public.content + + UTTypeTagSpecification + + public.filename-extension + + osz + + public.mime-type + + application/x-openlp-service + + + + + UTTypeIdentifier + org.openlp.otz + UTTypeDescription + OpenLP Theme + UTTypeConformsTo + + public.data + public.content + + UTTypeTagSpecification + + public.filename-extension + + otz + + public.mime-type + + application/x-openlp-theme + + + + + CFBundleIdentifier org.openlp CFBundleShortVersionString diff --git a/resources/osx/applescript-adjustview-10-5.master b/resources/osx/applescript-adjustview-10-5.master index abc0e5a8d..19be239d0 100755 --- a/resources/osx/applescript-adjustview-10-5.master +++ b/resources/osx/applescript-adjustview-10-5.master @@ -48,7 +48,7 @@ on run set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 128 - set background picture of theViewOptions to file ".installer-background.png" + set background picture of theViewOptions to file ".background:installer-background.png" if not exists file "Applications" then make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} end if diff --git a/resources/osx/applescript-adjustview-10-6.master b/resources/osx/applescript-adjustview-10-6.master index 2b5a0c000..170842564 100755 --- a/resources/osx/applescript-adjustview-10-6.master +++ b/resources/osx/applescript-adjustview-10-6.master @@ -49,15 +49,19 @@ on run set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 128 - set background picture of theViewOptions to file ".installer-background.png" - make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} - delay 5 + set background picture of theViewOptions to file ".background:installer-background.png" + if not exists file "Applications" then + make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} + end if + delay 1 set position of item "%s" of container window to {160, 200} set position of item ".Trashes" of container window to {100, 500} - set position of item ".installer-background.png" of container window to {200, 500} + set position of item ".background" of container window to {200, 500} set position of item ".DS_Store" of container window to {400, 500} set position of item "Applications" of container window to {550, 200} - set position of item ".VolumeIcon.icns" of container window to {500, 500} + if exists file ".VolumeIcon.icns" then + set position of item ".VolumeIcon.icns" of container window to {500, 500} + end if set position of item ".fseventsd" of container window to {300, 500} if exists POSIX file ".SymAVx86QSFile" then set position of item ".SymAVx86QSFile" of container window to {600, 500} diff --git a/resources/osx/build.py b/resources/osx/build.py index ff7f6bdfd..38e56e42a 100644 --- a/resources/osx/build.py +++ b/resources/osx/build.py @@ -93,8 +93,12 @@ script_name = "build" def build_application(settings, app_name_lower, app_dir): logging.info('[%s] now building the app with pyinstaller at "%s"...', script_name, settings['pyinstaller_basedir']) - result = os.system('python %s/pyinstaller.py openlp.spec' \ - % settings['pyinstaller_basedir']) + full_python_dir = os.path.join('/opt/local/Library/Frameworks', + 'Python.framework/Versions/2.6/Resources/', + 'Python.app/Contents/MacOS/Python') + result = os.system('arch -i386 %s %s/pyinstaller.py openlp.spec' \ + % ( full_python_dir, + settings['pyinstaller_basedir']) ) if (result != 0): logging.error('[%s] The pyinstaller build reported an error, cannot \ continue!', script_name) @@ -219,10 +223,10 @@ def create_dmg(settings): sys.exit(1) logging.info('[%s] copying the background image...', script_name) - # os.mkdir(volume_basedir + '/.background') + os.mkdir(volume_basedir + '/.background') result = os.system('CpMac %s %s' % (settings['installer_backgroundimage_file'], - volume_basedir + '/.installer-background.png')) + volume_basedir + '/.background/installer-background.png')) if (result != 0): logging.error('[%s] could not copy the background image, dmg creation\ failed!', script_name) diff --git a/resources/osx/expander.py b/resources/osx/expander.py index 4319f9178..b4911ff75 100755 --- a/resources/osx/expander.py +++ b/resources/osx/expander.py @@ -9,7 +9,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/resources/osx/get_version.py b/resources/osx/get_version.py index 30ebd7886..7be4678b8 100644 --- a/resources/osx/get_version.py +++ b/resources/osx/get_version.py @@ -1,9 +1,34 @@ #!/usr/bin/env python # -*- 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, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 sys import os from bzrlib.branch import Branch - + def get_version(path): b = Branch.open_containing(path)[0] b.lock_read() @@ -23,13 +48,13 @@ def get_version(path): finally: b.unlock() return result - + def get_path(): if len(sys.argv) > 1: return os.path.abspath(sys.argv[1]) else: return os.path.abspath('.') - + if __name__ == u'__main__': path = get_path() print get_version(path) diff --git a/resources/osx/openlp-logo-with-text.icns b/resources/osx/openlp-logo-with-text.icns old mode 100755 new mode 100644 diff --git a/resources/osx/openlp.cfg b/resources/osx/openlp.cfg.sample similarity index 81% rename from resources/osx/openlp.cfg rename to resources/osx/openlp.cfg.sample index 3be085dc0..f72a8fca1 100755 --- a/resources/osx/openlp.cfg +++ b/resources/osx/openlp.cfg.sample @@ -1,8 +1,8 @@ [openlp] openlp_appname = OpenLP -openlp_dmgname = OpenLP-1.9.4-bzrXXXX +openlp_dmgname = OpenLP-1.9.6-bzrXXXX openlp_version = XXXX -openlp_basedir = /Users/openlp/trunk +openlp_basedir = /Users/openlp/repo/trunk openlp_icon_file = openlp-logo-with-text.icns openlp_dmg_icon_file = openlp-logo-420x420.png installer_backgroundimage_file = installation-background.png diff --git a/resources/osx/openlp.spec.master b/resources/osx/openlp.spec.master index 94aec2a60..eb743c40b 100755 --- a/resources/osx/openlp.spec.master +++ b/resources/osx/openlp.spec.master @@ -1,5 +1,5 @@ # -*- mode: python -*- -a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), '%(openlp_basedir)s/openlp.pyw'], +a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(CONFIGDIR,'support/useUnicode.py'), '%(openlp_basedir)s/openlp.pyw'], pathex=['%(pyinstaller_basedir)s'], hookspath=['%(openlp_basedir)s/resources/pyinstaller']) pyz = PYZ(a.pure) exe = EXE(pyz, diff --git a/resources/pyinstaller/hook-openlp.plugins.presentations.presentationplugin.py b/resources/pyinstaller/hook-openlp.plugins.presentations.presentationplugin.py index bf2f0ad07..2dfcb2fa9 100644 --- a/resources/pyinstaller/hook-openlp.plugins.presentations.presentationplugin.py +++ b/resources/pyinstaller/hook-openlp.plugins.presentations.presentationplugin.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/resources/pyinstaller/hook-openlp.py b/resources/pyinstaller/hook-openlp.py index e282f2cf0..f3414cd60 100644 --- a/resources/pyinstaller/hook-openlp.py +++ b/resources/pyinstaller/hook-openlp.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/resources/windows/OpenLP-2.0.iss b/resources/windows/OpenLP-2.0.iss index 7332aab6d..9d2e6bfaa 100644 --- a/resources/windows/OpenLP-2.0.iss +++ b/resources/windows/OpenLP-2.0.iss @@ -16,7 +16,7 @@ ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{AA7699FA-B2D2-43F4-8A70-D497D03C9485} +AppID={{AA7699FA-B2D2-43F4-8A70-D497D03C9485} AppName={#AppName} AppVerName={#AppVerName} AppPublisher={#AppPublisher} @@ -29,11 +29,12 @@ AllowNoIcons=true LicenseFile=LICENSE.txt OutputDir=..\..\dist OutputBaseFilename=OpenLP-{#RealVersion}-setup -Compression=lzma +Compression=lzma/Max SolidCompression=true SetupIconFile=OpenLP.ico WizardImageFile=WizImageBig.bmp WizardSmallImageFile=WizImageSmall.bmp +ChangesAssociations=true [Languages] Name: english; MessagesFile: compiler:Default.isl @@ -60,15 +61,17 @@ Name: spanish; MessagesFile: compiler:Languages\Spanish.isl [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons} -Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons} +Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0, 6.1 [Files] Source: ..\..\dist\OpenLP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs +Source: psvince.dll; Flags: dontcopy ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: {group}\{#AppName}; Filename: {app}\{#AppExeName} Name: {group}\{#AppName} (Debug); Filename: {app}\{#AppExeName}; Parameters: -l debug +Name: {group}\{#AppName} Help; Filename: {app}\{#AppName}.chm; Check: FileExists(ExpandConstant('{app}\{#AppName}.chm')) Name: {group}\{cm:ProgramOnTheWeb,{#AppName}}; Filename: {#AppURL} Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe} Name: {commondesktop}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: desktopicon @@ -78,8 +81,15 @@ Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filenam Filename: {app}\{#AppExeName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent [Registry] +Root: HKCR; Subkey: ".osz"; ValueType: string; ValueName: ""; ValueData: "OpenLP"; Flags: uninsdeletevalue +Root: HKCR; Subkey: "OpenLP"; ValueType: string; ValueName: ""; ValueData: "OpenLP Service"; Flags: uninsdeletekey +Root: HKCR; Subkey: "OpenLP\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\OpenLP.exe,0" +Root: HKCR; Subkey: "OpenLP\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\OpenLP.exe"" ""%1""" [Code] +function IsModuleLoaded(modulename: String ): Boolean; +external 'IsModuleLoaded@files:psvince.dll stdcall'; + function GetUninstallString(): String; var sUnInstPath: String; @@ -120,6 +130,19 @@ begin Result := 1; end; +function InitializeSetup(): Boolean; +begin + Result := true; + while IsModuleLoaded( 'OpenLP.exe' ) and Result do + begin + if MsgBox( 'Openlp is currently running, please close it to continue the install.', + mbError, MB_OKCANCEL ) = IDCANCEL then + begin + Result := false; + end; + end; +end; + procedure CurStepChanged(CurStep: TSetupStep); begin if (CurStep=ssInstall) then diff --git a/resources/windows/OpenLP.spec b/resources/windows/OpenLP.spec deleted file mode 100644 index 47a1952f3..000000000 --- a/resources/windows/OpenLP.spec +++ /dev/null @@ -1,14 +0,0 @@ -# -*- mode: python -*- -a = Analysis([ - os.path.join(HOMEPATH, 'support\\_mountzlib.py'), - os.path.join(HOMEPATH, 'support\\useUnicode.py'), - os.path.abspath('openlp.pyw')], - pathex=[os.path.abspath('.')]) -pyz = PYZ(a.pure) -exe = EXE(pyz, a.scripts, exclude_binaries=1, - name=os.path.abspath(os.path.join('build', 'pyi.win32', 'OpenLP', - 'OpenLP.exe')), - debug=False, strip=False, upx=True, console=False, - icon=os.path.abspath(os.path.join('resources', 'images', 'OpenLP.ico'))) -coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, - name=os.path.abspath(os.path.join('dist', 'OpenLP'))) diff --git a/resources/windows/WizImageBig.bmp b/resources/windows/WizImageBig.bmp index 8fc9e2091..32b2ca092 100644 Binary files a/resources/windows/WizImageBig.bmp and b/resources/windows/WizImageBig.bmp differ diff --git a/resources/windows/WizImageSmall.bmp b/resources/windows/WizImageSmall.bmp index b8685c808..58c716fdf 100644 Binary files a/resources/windows/WizImageSmall.bmp and b/resources/windows/WizImageSmall.bmp differ diff --git a/resources/windows/psvince.dll b/resources/windows/psvince.dll new file mode 100644 index 000000000..e910509d0 Binary files /dev/null and b/resources/windows/psvince.dll differ diff --git a/scripts/check_dependencies.py b/scripts/check_dependencies.py new file mode 100755 index 000000000..7048ceeab --- /dev/null +++ b/scripts/check_dependencies.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### + +""" +This script is used to check dependencies of OpenLP. It checks availability +of required python modules and their version. To verify availability of Python +modules, simply run this script:: + + @:~$ ./check_dependencies.py + +""" +import os +import sys + +is_win = sys.platform.startswith('win') + +VERS = { + 'Python': '2.6', + 'PyQt4': '4.6', + 'Qt4': '4.6', + 'sqlalchemy': '0.5', + # pyenchant 1.6 required on Windows + 'enchant': '1.6' if is_win else '1.3' + } + +# pywin32 +WIN32_MODULES = [ + 'win32com', + 'win32ui', + 'pywintypes', + ] + +MODULES = [ + 'PyQt4', + 'PyQt4.QtCore', + 'PyQt4.QtGui', + 'PyQt4.QtNetwork', + 'PyQt4.QtOpenGL', + 'PyQt4.QtSvg', + 'PyQt4.QtTest', + 'PyQt4.QtWebKit', + 'PyQt4.phonon', + 'sqlalchemy', + 'sqlite3', + 'lxml', + 'chardet', + 'enchant', + 'BeautifulSoup', + 'mako', + ] + + +OPTIONAL_MODULES = [ + ('sqlite', ' (SQLite 2 support)'), + ('MySQLdb', ' (MySQL support)'), + ('psycopg2', ' (PostgreSQL support)'), +] + +w = sys.stdout.write + +def check_vers(version, required, text): + if type(version) is str: + version = version.split('.') + version = map(int, version) + if type(required) is str: + required = required.split('.') + required = map(int, required) + w(' %s >= %s ... ' % (text, '.'.join(map(str, required)))) + if version >= required: + w('.'.join(map(str, version)) + os.linesep) + return True + else: + w('FAIL' + os.linesep) + return False + +def print_vers_fail(required, text): + print(' %s >= %s ... FAIL' % (text, required)) + +def verify_python(): + if not check_vers(list(sys.version_info), VERS['Python'], text='Python'): + exit(1) + +def verify_versions(): + print('Verifying version of modules...') + try: + from PyQt4 import QtCore + check_vers(QtCore.PYQT_VERSION_STR, VERS['PyQt4'], 'PyQt4') + check_vers(QtCore.qVersion(), VERS['Qt4'], 'Qt4') + except ImportError: + print_vers_fail(VERS['PyQt4'], 'PyQt4') + print_vers_fail(VERS['Qt4'], 'Qt4') + try: + import sqlalchemy + check_vers(sqlalchemy.__version__, VERS['sqlalchemy'], 'sqlalchemy') + except ImportError: + print_vers_fail(VERS['sqlalchemy'], 'sqlalchemy') + try: + import enchant + check_vers(enchant.__version__, VERS['enchant'], 'enchant') + except ImportError: + print_vers_fail(VERS['enchant'], 'enchant') + +def check_module(mod, text='', indent=' '): + space = (30 - len(mod) - len(text)) * ' ' + w(indent + '%s%s... ' % (mod, text) + space) + try: + __import__(mod) + w('OK') + except ImportError: + w('FAIL') + w(os.linesep) + +def verify_pyenchant(): + w('Enchant (spell checker)... ') + try: + import enchant + w(os.linesep) + backends = ', '.join([x.name for x in enchant.Broker().describe()]) + print(' available backends: %s' % backends) + langs = ', '.join(enchant.list_languages()) + print(' available languages: %s' % langs) + except ImportError: + w('FAIL' + os.linesep) + +def verify_pyqt(): + w('Qt4 image formats... ') + try: + from PyQt4 import QtGui + read_f = ', '.join([unicode(format).lower() + for format in QtGui.QImageReader.supportedImageFormats()]) + write_f = ', '.join([unicode(format).lower() + for format in QtGui.QImageWriter.supportedImageFormats()]) + w(os.linesep) + print(' read: %s' % read_f) + print(' write: %s' % write_f) + except ImportError: + w('FAIL' + os.linesep) + +def main(): + verify_python() + + print('Checking for modules...') + for m in MODULES: + check_module(m) + + print('Checking for optional modules...') + for m in OPTIONAL_MODULES: + check_module(m[0], text=m[1]) + + if is_win: + print('Checking for Windows specific modules...') + for m in WIN32_MODULES: + check_module(m) + + verify_versions() + verify_pyqt() + verify_pyenchant() + +if __name__ == u'__main__': + main() diff --git a/scripts/generate_resources.sh b/scripts/generate_resources.sh index b363e58b6..cf6f8f2f8 100755 --- a/scripts/generate_resources.sh +++ b/scripts/generate_resources.sh @@ -6,9 +6,10 @@ # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Meinert Jordan, Armin Köhler, Andreas Preikschat, # -# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # -# Tibble, Carsten Tinggaard, Frode Woldsund # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/scripts/openlp-remoteclient.py b/scripts/openlp-remoteclient.py index f50a34380..57928919b 100644 --- a/scripts/openlp-remoteclient.py +++ b/scripts/openlp-remoteclient.py @@ -9,7 +9,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/scripts/resources.patch b/scripts/resources.patch index 8a1b6fefd..3697a705a 100644 --- a/scripts/resources.patch +++ b/scripts/resources.patch @@ -1,6 +1,6 @@ --- openlp/core/resources.py.old Mon Jun 21 23:16:19 2010 +++ openlp/core/resources.py Mon Jun 21 23:27:48 2010 -@@ -1,10 +1,32 @@ +@@ -1,10 +1,33 @@ # -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 @@ -16,7 +16,8 @@ +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # ++# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # diff --git a/scripts/translation_utils.py b/scripts/translation_utils.py index a12ee39d7..db1788aba 100755 --- a/scripts/translation_utils.py +++ b/scripts/translation_utils.py @@ -9,7 +9,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # @@ -289,16 +290,6 @@ def generate_binaries(): else: os.chdir(os.path.abspath(u'..')) run(u'lrelease openlp.pro') - os.chdir(os.path.abspath(u'scripts')) - src_path = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n') - dest_path = os.path.join(os.path.abspath(u'..'), u'openlp', u'i18n') - if not os.path.exists(dest_path): - os.makedirs(dest_path) - src_list = os.listdir(src_path) - for file in src_list: - if re.search('.qm$', file): - copy(os.path.join(src_path, u'%s' % file), - os.path.join(dest_path, u'%s' % file)) print_quiet(u' Done.') diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 0bfd0862c..b7bf70472 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -8,7 +8,8 @@ # Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # # Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # # Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # @@ -31,8 +32,7 @@ Windows Build Script This script is used to build the Windows binary and the accompanying installer. For this script to work out of the box, it depends on a number of things: -Python 2.6 - This build script only works with Python 2.6. +Python 2.6/2.7 PyQt4 You should already have this installed, OpenLP doesn't work without it. The @@ -46,14 +46,15 @@ PyEnchant Inno Setup 5 Inno Setup should be installed into "C:\%PROGRAMFILES%\Inno Setup 5" -UPX - This is used to compress DLLs and EXEs so that they take up less space, but - still function exactly the same. To install UPS, download it from - http://upx.sourceforge.net/, extract it into C:\%PROGRAMFILES%\UPX, and then - add that directory to your PATH environment variable. +Sphinx + This is used to build the documentation. The documentation trunk must be at + the same directory level as Openlp trunk and named "documentation" + +HTML Help Workshop + This is used to create the help file PyInstaller - PyInstaller should be a checkout of revision 844 of trunk, and in a + PyInstaller should be a checkout of revision 1470 of trunk, and in a directory called, "pyinstaller" on the same level as OpenLP's Bazaar shared repository directory. The revision is very important as there is currently a major regression in HEAD. @@ -65,13 +66,8 @@ PyInstaller http://svn.pyinstaller.org/trunk Then you need to copy the two hook-*.py files from the "pyinstaller" - subdirectory in OpenLP's "resources" directory into PyInstaller's "hooks" - directory. - - Once you've done that, open a command prompt (DOS shell), navigate to the - PyInstaller directory and run:: - - C:\Projects\pyinstaller>python Configure.py + subdirectory in OpenLP's "resources" directory into PyInstaller's + "PyInstaller/hooks" directory. Bazaar You need the command line "bzr" client installed. @@ -81,39 +77,78 @@ OpenLP shared repository directory. This means your code should be in a directory structure like this: "openlp\branch-name". +Visual C++ 2008 Express Edition + This is to build pptviewlib.dll, the library for controlling the + PowerPointViewer + windows-builder.py This script, of course. It should be in the "scripts" directory of OpenLP. +psvince.dll + This dll is used during the actual install of OpenLP to check if OpenLP is + running on the users machine prior to the setup. If OpenLP is running, + the install will fail. The dll can be obtained from here: + http://www.vincenzo.net/isxkb/index.php?title=PSVince) + +Mako + Mako Templates for Python. This package is required for building the + remote plugin. It can be installed by going to your + python_directory\scripts\.. and running "easy_install Mako". If you do not + have easy_install, the Mako package can be obtained here: + http://www.makotemplates.org/download.html + """ import os import sys from shutil import copy +from shutil import rmtree from subprocess import Popen, PIPE python_exe = sys.executable innosetup_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'Inno Setup 5', u'ISCC.exe') +sphinx_exe = os.path.join(os.path.split(python_exe)[0], u'Scripts', + u'sphinx-build.exe') +hhc_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'HTML Help Workshop', + u'hhc.exe') +vcbuild_exe = os.path.join(os.getenv(u'PROGRAMFILES'), + u'Microsoft Visual Studio 9.0', u'VC', u'vcpackages', u'vcbuild.exe') # Base paths script_path = os.path.split(os.path.abspath(__file__))[0] branch_path = os.path.abspath(os.path.join(script_path, u'..')) +doc_branch_path = os.path.abspath(os.path.join(script_path, u'..', + u'..', u'documentation')) site_packages = os.path.join(os.path.split(python_exe)[0], u'Lib', u'site-packages') # Files and executables pyi_build = os.path.abspath(os.path.join(branch_path, u'..', u'..', - u'pyinstaller', u'Build.py')) -lrelease_exe = os.path.join(site_packages, u'PyQt4', u'bin', u'lrelease.exe') + u'pyinstaller', u'pyinstaller.py')) +openlp_main_script = os.path.abspath(os.path.join(branch_path, 'openlp.pyw')) +if os.path.exists(os.path.join(site_packages, u'PyQt4', u'bin')): + # Older versions of the PyQt4 Windows installer put their binaries in the + # "bin" directory + lrelease_exe = os.path.join(site_packages, u'PyQt4', u'bin', u'lrelease.exe') +else: + # Newer versions of the PyQt4 Windows installer put their binaries in the + # base directory of the installation + lrelease_exe = os.path.join(site_packages, u'PyQt4', u'lrelease.exe') i18n_utils = os.path.join(script_path, u'translation_utils.py') +win32_icon = os.path.join(branch_path, u'resources', u'images', 'OpenLP.ico') # Paths source_path = os.path.join(branch_path, u'openlp') +manual_path = os.path.join(doc_branch_path, u'manual') +manual_build_path = os.path.join(manual_path, u'build') +helpfile_path = os.path.join(manual_build_path, u'htmlhelp') i18n_path = os.path.join(branch_path, u'resources', u'i18n') winres_path = os.path.join(branch_path, u'resources', u'windows') -build_path = os.path.join(branch_path, u'build', u'pyi.win32', u'OpenLP') +build_path = os.path.join(branch_path, u'build') dist_path = os.path.join(branch_path, u'dist', u'OpenLP') -enchant_path = os.path.join(site_packages, u'enchant') +pptviewlib_path = os.path.join(source_path, u'plugins', u'presentations', + u'lib', u'pptviewlib') def update_code(): os.chdir(branch_path) @@ -132,26 +167,19 @@ def update_code(): print output raise Exception(u'Error updating the code') -def clean_build_directories(): - 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...' os.chdir(branch_path) - pyinstaller = Popen((python_exe, pyi_build, u'-y', u'-o', build_path, - os.path.join(winres_path, u'OpenLP.spec')), stdout=PIPE) + pyinstaller = Popen((python_exe, pyi_build, + u'--noconfirm', + u'--windowed', + u'--noupx', + u'-o', branch_path, + u'-i', win32_icon, + u'-p', branch_path, + u'-n', 'OpenLP', + openlp_main_script), + stdout=PIPE) output, error = pyinstaller.communicate() code = pyinstaller.wait() if code != 0: @@ -177,25 +205,13 @@ def write_version_file(): code = bzr.wait() if code != 0: raise Exception(u'Error running bzr log') - latest = output.split(u':')[0] + outputAscii = unicode(output, errors='ignore') + latest = outputAscii.split(u':')[0] versionstring = latest == revision and tag or u'%s-bzr%s' % (tag, latest) f = open(os.path.join(dist_path, u'.version'), u'w') f.write(versionstring) f.close() -def copy_enchant(): - print u'Copying enchant/pyenchant...' - source = enchant_path - dest = os.path.join(dist_path, u'enchant') - for root, dirs, files in os.walk(source): - for filename in files: - if not filename.endswith(u'.pyc') and not filename.endswith(u'.pyo'): - dest_path = os.path.join(dest, root[len(source) + 1:]) - if not os.path.exists(dest_path): - os.makedirs(dest_path) - copy(os.path.join(root, filename), - os.path.join(dest_path, filename)) - def copy_plugins(): print u'Copying plugins...' source = os.path.join(source_path, u'plugins') @@ -215,6 +231,14 @@ def copy_windows_files(): os.path.join(dist_path, u'OpenLP.ico')) copy(os.path.join(winres_path, u'LICENSE.txt'), os.path.join(dist_path, u'LICENSE.txt')) + copy(os.path.join(winres_path, u'psvince.dll'), + os.path.join(dist_path, u'psvince.dll')) + if os.path.isfile(os.path.join(helpfile_path, u'OpenLP.chm')): + print u' Windows help file found' + copy(os.path.join(helpfile_path, u'OpenLP.chm'), + os.path.join(dist_path, u'OpenLP.chm')) + else: + print u' WARNING ---- Windows help file not found ---- WARNING' def update_translations(): print u'Updating translations...' @@ -239,6 +263,39 @@ def compile_translations(): code = lconvert.wait() if code != 0: raise Exception('Error running lconvert on %s' % source_path) + print u'Copying qm files...' + source = os.path.join(site_packages, u'PyQt4', u'translations') + files = os.listdir(source) + for filename in files: + if filename.startswith(u'qt_') and filename.endswith(u'.qm') and \ + len(filename) == 8: + copy(os.path.join(source, filename), + os.path.join(dist_path, u'i18n', filename)) + +def run_sphinx(): + print u'Deleting previous manual build...', manual_build_path + if os.path.exists(manual_build_path): + rmtree(manual_build_path) + print u'Running Sphinx...' + os.chdir(manual_path) + sphinx = Popen((sphinx_exe, u'-b', u'htmlhelp', u'-d', u'build/doctrees', + u'source', u'build/htmlhelp'), stdout=PIPE) + output, error = sphinx.communicate() + code = sphinx.wait() + if code != 0: + print output + raise Exception(u'Error running Sphinx') + +def run_htmlhelp(): + print u'Running HTML Help Workshop...' + os.chdir(os.path.join(manual_build_path, u'htmlhelp')) + hhc = Popen((hhc_exe, u'OpenLP.chm'), stdout=PIPE) + output, error = hhc.communicate() + code = hhc.wait() + if code != 1: + print u'Exit code:', code + print output + raise Exception(u'Error running HTML Help Workshop') def run_innosetup(): print u'Running Inno Setup...' @@ -249,22 +306,55 @@ def run_innosetup(): if code != 0: raise Exception(u'Error running Inno Setup') +def build_pptviewlib(): + print u'Building PPTVIEWLIB.DLL...' + vcbuild = Popen((vcbuild_exe, u'/rebuild', + os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), u'Release|Win32')) + code = vcbuild.wait() + if code != 0: + raise Exception(u'Error building pptviewlib.dll') + copy(os.path.join(pptviewlib_path, u'Release', u'pptviewlib.dll'), + pptviewlib_path) + def main(): + skip_update = False import sys - if len(sys.argv) > 1 and (sys.argv[1] == u'-v' or sys.argv[1] == u'--verbose'): - print "Script path:", script_path - print "Branch path:", branch_path - print "Source path:", source_path - print "\"dist\" path:", dist_path - print "PyInstaller:", pyi_build - print "Inno Setup path:", innosetup_path - print "Windows resources:", winres_path - update_code() - #clean_build_directories() + for arg in sys.argv: + if arg == u'-v' or arg == u'--verbose': + print "OpenLP main script: ......", openlp_main_script + print "Script path: .............", script_path + print "Branch path: .............", branch_path + print "Source path: .............", source_path + print "\"dist\" path: .............", dist_path + print "PyInstaller: .............", pyi_build + print "Documentation branch path:", doc_branch_path + print "Help file build path: ....", helpfile_path + print "Inno Setup path: .........", innosetup_exe + print "Windows resources: .......", winres_path + print "VCBuild path: ............", vcbuild_exe + print "PPTVIEWLIB path: .........", pptviewlib_path + print "" + elif arg == u'--skip-update': + skip_update = True + elif arg == u'/?' or arg == u'-h' or arg == u'--help': + print u'Command options:' + print u' -v --verbose : More verbose output' + print u' --skip-update : Do not update or revert current branch' + exit() + if not skip_update: + update_code() + build_pptviewlib() run_pyinstaller() write_version_file() - copy_enchant() copy_plugins() + if os.path.exists(manual_path): + run_sphinx() + run_htmlhelp() + else: + print u' ' + print u' WARNING ---- Documentation Trunk not found ---- WARNING' + print u' --- Windows Help file will not be included in build ---' + print u' ' copy_windows_files() update_translations() compile_translations() diff --git a/setup.py b/setup.py index dfe907efd..0d9562197 100755 --- a/setup.py +++ b/setup.py @@ -6,9 +6,10 @@ # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # # Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it #