diff --git a/documentation/Makefile b/documentation/api/Makefile similarity index 100% rename from documentation/Makefile rename to documentation/api/Makefile diff --git a/documentation/make.bat b/documentation/api/make.bat similarity index 100% rename from documentation/make.bat rename to documentation/api/make.bat diff --git a/documentation/source/conf.py b/documentation/api/source/conf.py similarity index 96% rename from documentation/source/conf.py rename to documentation/api/source/conf.py index 248c83e56..51ecfee0c 100644 --- a/documentation/source/conf.py +++ b/documentation/api/source/conf.py @@ -17,7 +17,7 @@ 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('..', '..'))) +sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..'))) # -- General configuration ----------------------------------------------------- @@ -39,7 +39,7 @@ master_doc = 'index' # General information about the project. project = u'OpenLP' -copyright = u'2009, Raoul Snyman' +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 @@ -48,7 +48,7 @@ copyright = u'2009, Raoul Snyman' # The short X.Y version. version = '2.0' # The full version, including alpha/beta/rc tags. -release = '2.0.pre' +release = '1.9.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -111,7 +111,7 @@ html_theme_options = { # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -#html_title = None +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 @@ -166,7 +166,7 @@ html_static_path = ['_static'] #html_file_suffix = '' # Output file base name for HTML help builder. -htmlhelp_basename = 'OpenLPdoc' +htmlhelp_basename = 'OpenLP-2.0-api' # -- Options for LaTeX output -------------------------------------------------- @@ -180,7 +180,7 @@ htmlhelp_basename = 'OpenLPdoc' # 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 Documentation', + ('index', 'OpenLP.tex', u'OpenLP 2.0 Developer API', u'Raoul Snyman', 'manual'), ] diff --git a/documentation/source/core/index.rst b/documentation/api/source/core/index.rst similarity index 65% rename from documentation/source/core/index.rst rename to documentation/api/source/core/index.rst index 38a98ab97..8555e1ebe 100644 --- a/documentation/source/core/index.rst +++ b/documentation/api/source/core/index.rst @@ -3,9 +3,13 @@ :mod:`core` Module ================== +.. automodule:: openlp.core + :members: + .. toctree:: :maxdepth: 2 lib theme - + ui + utils \ No newline at end of file diff --git a/documentation/source/core/lib.rst b/documentation/api/source/core/lib.rst similarity index 97% rename from documentation/source/core/lib.rst rename to documentation/api/source/core/lib.rst index 5fc66200d..6ca952d7d 100644 --- a/documentation/source/core/lib.rst +++ b/documentation/api/source/core/lib.rst @@ -1,7 +1,7 @@ .. _core-lib: -:mod:`lib` Module -================= +Object Library +============== .. automodule:: openlp.core.lib :members: diff --git a/documentation/source/core/theme.rst b/documentation/api/source/core/theme.rst similarity index 100% rename from documentation/source/core/theme.rst rename to documentation/api/source/core/theme.rst diff --git a/documentation/api/source/core/ui.rst b/documentation/api/source/core/ui.rst new file mode 100644 index 000000000..63db7478e --- /dev/null +++ b/documentation/api/source/core/ui.rst @@ -0,0 +1,27 @@ +.. _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 new file mode 100644 index 000000000..d0c6a672b --- /dev/null +++ b/documentation/api/source/core/utils.rst @@ -0,0 +1,7 @@ +.. _core-utils: + +Utilities +========= + +.. automodule:: openlp.core.utils + :members: diff --git a/documentation/source/index.rst b/documentation/api/source/index.rst similarity index 98% rename from documentation/source/index.rst rename to documentation/api/source/index.rst index cd64b13a1..e1aeebbab 100644 --- a/documentation/source/index.rst +++ b/documentation/api/source/index.rst @@ -15,7 +15,6 @@ Contents: .. toctree:: :maxdepth: 2 - openlp core/index plugins/index diff --git a/documentation/source/openlp.rst b/documentation/api/source/openlp.rst similarity index 100% rename from documentation/source/openlp.rst rename to documentation/api/source/openlp.rst diff --git a/documentation/api/source/plugins/alerts.rst b/documentation/api/source/plugins/alerts.rst new file mode 100644 index 000000000..e7cf33d63 --- /dev/null +++ b/documentation/api/source/plugins/alerts.rst @@ -0,0 +1,31 @@ +.. _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/source/plugins/bibles.rst b/documentation/api/source/plugins/bibles.rst similarity index 50% rename from documentation/source/plugins/bibles.rst rename to documentation/api/source/plugins/bibles.rst index 5f2c688d5..67162d414 100644 --- a/documentation/source/plugins/bibles.rst +++ b/documentation/api/source/plugins/bibles.rst @@ -6,93 +6,50 @@ Bibles Plugin .. automodule:: openlp.plugins.bibles :members: -:mod:`BiblePlugin` Class -------------------------- +Plugin Class +------------ .. autoclass:: openlp.plugins.bibles.bibleplugin.BiblePlugin :members: -:mod:`forms` Submodule ----------------------- +Forms +----- .. automodule:: openlp.plugins.bibles.forms :members: -:mod:`BibleImportWizard` -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.bibles.forms.bibleimportwizard.Ui_BibleImportWizard - :members: - .. autoclass:: openlp.plugins.bibles.forms.importwizardform.ImportWizardForm :members: -:mod:`lib` Submodule --------------------- +Helper Classes & Functions +-------------------------- .. automodule:: openlp.plugins.bibles.lib :members: -:mod:`db` -^^^^^^^^^ - .. automodule:: openlp.plugins.bibles.lib.db :members: -.. autoclass:: openlp.plugins.bibles.lib.db.BibleDB - :members: - -:mod:`csv` -^^^^^^^^^^ - -.. automodule:: openlp.plugins.bibles.lib.csvbible - :members: - -.. autoclass:: openlp.plugins.bibles.lib.csvbible.CSVBible - :members: - -:mod:`http` -^^^^^^^^^^^ - -.. automodule:: openlp.plugins.bibles.lib.http - :members: - -.. autoclass:: openlp.plugins.bibles.lib.http.HTTPBible - :members: - -:mod:`osis` -^^^^^^^^^^^ - -.. automodule:: openlp.plugins.bibles.lib.osis - :members: - -.. autoclass:: openlp.plugins.bibles.lib.osis.OSISBible - :members: - -:mod:`opensong` -^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.bibles.lib.opensong - :members: - -.. autoclass:: openlp.plugins.bibles.lib.opensong.OpenSongBible - :members: - -:mod:`biblestab` -^^^^^^^^^^^^^^^^ - .. automodule:: openlp.plugins.bibles.lib.biblestab :members: -:mod:`manager` -^^^^^^^^^^^^^^ - .. automodule:: openlp.plugins.bibles.lib.manager :members: -:mod:`mediaitem` -^^^^^^^^^^^^^^^^ - .. 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 new file mode 100644 index 000000000..f50b86d41 --- /dev/null +++ b/documentation/api/source/plugins/custom.rst @@ -0,0 +1,34 @@ +.. _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 new file mode 100644 index 000000000..1007fc64c --- /dev/null +++ b/documentation/api/source/plugins/images.rst @@ -0,0 +1,22 @@ +.. _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 new file mode 100644 index 000000000..78126ff9e --- /dev/null +++ b/documentation/api/source/plugins/index.rst @@ -0,0 +1,20 @@ +.. _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 new file mode 100644 index 000000000..a8486c9b4 --- /dev/null +++ b/documentation/api/source/plugins/media.rst @@ -0,0 +1,22 @@ +.. _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/source/plugins/presentations.rst b/documentation/api/source/plugins/presentations.rst similarity index 100% rename from documentation/source/plugins/presentations.rst rename to documentation/api/source/plugins/presentations.rst diff --git a/documentation/api/source/plugins/remotes.rst b/documentation/api/source/plugins/remotes.rst new file mode 100644 index 000000000..0bcd37119 --- /dev/null +++ b/documentation/api/source/plugins/remotes.rst @@ -0,0 +1,19 @@ +.. _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: diff --git a/documentation/api/source/plugins/songs.rst b/documentation/api/source/plugins/songs.rst new file mode 100644 index 000000000..fed9907a2 --- /dev/null +++ b/documentation/api/source/plugins/songs.rst @@ -0,0 +1,103 @@ +.. _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: + +.. autoclass:: openlp.plugins.songs.lib.mediaitem.SongListView + :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: + +.. autoclass:: openlp.plugins.songs.lib.cclifileimport.CCLIFileImportError + :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 new file mode 100644 index 000000000..e4804ea34 --- /dev/null +++ b/documentation/api/source/plugins/songusage.rst @@ -0,0 +1,34 @@ +.. _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/Makefile b/documentation/manual/Makefile new file mode 100644 index 000000000..70c821142 --- /dev/null +++ b/documentation/manual/Makefile @@ -0,0 +1,88 @@ +# 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 new file mode 100644 index 000000000..8d21b45ce --- /dev/null +++ b/documentation/manual/make.bat @@ -0,0 +1,112 @@ +@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/conf.py b/documentation/manual/source/conf.py new file mode 100644 index 000000000..517fc2f44 --- /dev/null +++ b/documentation/manual/source/conf.py @@ -0,0 +1,208 @@ +# -*- 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 = u'OpenLP 2.0 User 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 = 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-manual' + + +# -- 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 User Manual', + 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 + +# A dictionary that contains LaTeX snippets that override those Sphinx usually +# puts into the generated .tex files. +latex_elements = { + 'fontpkg': '\\usepackage{helvet}' +} diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst new file mode 100644 index 000000000..7e5fdc19b --- /dev/null +++ b/documentation/manual/source/dualmonitors.rst @@ -0,0 +1,180 @@ +================== +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 +do vary depending on operating system. + +Most modern computers do 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 outputs pictured above since your laptops 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 set up consist of your normal single monitor setup, with your +projector setup 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 can also bypass this step by 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`. Then enable the montior 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. +Then 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 that 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 (``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 + +Then 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 + +Then 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. diff --git a/documentation/manual/source/glossary.rst b/documentation/manual/source/glossary.rst new file mode 100644 index 000000000..41a8f4ac6 --- /dev/null +++ b/documentation/manual/source/glossary.rst @@ -0,0 +1,70 @@ +======== +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 that 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. + +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 work on OpenLP. +The service file consist of **Service Items** + +Service Item +------------ + +A service item 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 from wich your media items go live, and you can also save, open, and edit +services files. + +.. 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 backgrounds that you use to personalize your services. + +.. image:: pics/thememanager.png diff --git a/documentation/source/manual/index.rst b/documentation/manual/source/index.rst similarity index 77% rename from documentation/source/manual/index.rst rename to documentation/manual/source/index.rst index 2ed7824fe..ac29c4360 100644 --- a/documentation/source/manual/index.rst +++ b/documentation/manual/source/index.rst @@ -3,8 +3,8 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to OpenLP's documentation -================================== +Welcome to the OpenLP 2.0 User Manual +===================================== Contents: @@ -12,6 +12,8 @@ Contents: :maxdepth: 2 introduction + glossary + dualmonitors Indices and tables ================== diff --git a/documentation/source/manual/introduction.rst b/documentation/manual/source/introduction.rst similarity index 100% rename from documentation/source/manual/introduction.rst rename to documentation/manual/source/introduction.rst diff --git a/documentation/manual/source/pics/dvi.png b/documentation/manual/source/pics/dvi.png new file mode 100644 index 000000000..bc9e345b3 Binary files /dev/null and b/documentation/manual/source/pics/dvi.png differ diff --git a/documentation/manual/source/pics/gnome.png b/documentation/manual/source/pics/gnome.png new file mode 100644 index 000000000..1ea060b7a Binary files /dev/null and b/documentation/manual/source/pics/gnome.png differ diff --git a/documentation/manual/source/pics/kdedisplay.png b/documentation/manual/source/pics/kdedisplay.png new file mode 100644 index 000000000..ddbbae028 Binary files /dev/null and b/documentation/manual/source/pics/kdedisplay.png differ diff --git a/documentation/manual/source/pics/kdesystemsettings.png b/documentation/manual/source/pics/kdesystemsettings.png new file mode 100644 index 000000000..7d7ac1f76 Binary files /dev/null and b/documentation/manual/source/pics/kdesystemsettings.png differ diff --git a/documentation/manual/source/pics/mainwindow.png b/documentation/manual/source/pics/mainwindow.png new file mode 100644 index 000000000..217751062 Binary files /dev/null and b/documentation/manual/source/pics/mainwindow.png differ diff --git a/documentation/manual/source/pics/mediamanager.png b/documentation/manual/source/pics/mediamanager.png new file mode 100644 index 000000000..245f2469b Binary files /dev/null and b/documentation/manual/source/pics/mediamanager.png differ diff --git a/documentation/manual/source/pics/nvlinux1.png b/documentation/manual/source/pics/nvlinux1.png new file mode 100644 index 000000000..6c585bae4 Binary files /dev/null and b/documentation/manual/source/pics/nvlinux1.png differ diff --git a/documentation/manual/source/pics/preview.png b/documentation/manual/source/pics/preview.png new file mode 100644 index 000000000..f3041726b Binary files /dev/null and b/documentation/manual/source/pics/preview.png differ diff --git a/documentation/manual/source/pics/servicemanager.png b/documentation/manual/source/pics/servicemanager.png new file mode 100644 index 000000000..8e2842eb5 Binary files /dev/null and b/documentation/manual/source/pics/servicemanager.png differ diff --git a/documentation/manual/source/pics/slidecontroller.png b/documentation/manual/source/pics/slidecontroller.png new file mode 100644 index 000000000..01e5c86d0 Binary files /dev/null and b/documentation/manual/source/pics/slidecontroller.png differ diff --git a/documentation/manual/source/pics/thememanager.png b/documentation/manual/source/pics/thememanager.png new file mode 100644 index 000000000..be35cadc1 Binary files /dev/null and b/documentation/manual/source/pics/thememanager.png differ diff --git a/documentation/manual/source/pics/twinview.png b/documentation/manual/source/pics/twinview.png new file mode 100644 index 000000000..d8a659f53 Binary files /dev/null and b/documentation/manual/source/pics/twinview.png differ diff --git a/documentation/manual/source/pics/vga.png b/documentation/manual/source/pics/vga.png new file mode 100644 index 000000000..3e02726a8 Binary files /dev/null and b/documentation/manual/source/pics/vga.png differ diff --git a/documentation/manual/source/pics/vistadisplaysettings.png b/documentation/manual/source/pics/vistadisplaysettings.png new file mode 100755 index 000000000..1fd2c8b16 Binary files /dev/null and b/documentation/manual/source/pics/vistadisplaysettings.png differ diff --git a/documentation/manual/source/pics/vistapersonalize.png b/documentation/manual/source/pics/vistapersonalize.png new file mode 100755 index 000000000..c24cc15dd Binary files /dev/null and b/documentation/manual/source/pics/vistapersonalize.png differ diff --git a/documentation/manual/source/pics/winsevendisplay.png b/documentation/manual/source/pics/winsevendisplay.png new file mode 100755 index 000000000..deea325b5 Binary files /dev/null and b/documentation/manual/source/pics/winsevendisplay.png differ diff --git a/documentation/manual/source/pics/winsevenresolution.png b/documentation/manual/source/pics/winsevenresolution.png new file mode 100755 index 000000000..c60bf4c0c Binary files /dev/null and b/documentation/manual/source/pics/winsevenresolution.png differ diff --git a/documentation/manual/source/pics/xorgwrite.png b/documentation/manual/source/pics/xorgwrite.png new file mode 100644 index 000000000..812b9e0ae Binary files /dev/null and b/documentation/manual/source/pics/xorgwrite.png differ diff --git a/documentation/manual/source/pics/xpdisplaysettings.png b/documentation/manual/source/pics/xpdisplaysettings.png new file mode 100644 index 000000000..eb7a8921c Binary files /dev/null and b/documentation/manual/source/pics/xpdisplaysettings.png differ diff --git a/documentation/source/plugins/images.rst b/documentation/source/plugins/images.rst deleted file mode 100644 index d4d6fa265..000000000 --- a/documentation/source/plugins/images.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _plugins-images: - -Images Plugin -============= - -.. automodule:: openlp.plugins.images - :members: - diff --git a/documentation/source/plugins/index.rst b/documentation/source/plugins/index.rst deleted file mode 100644 index 6c5b139d5..000000000 --- a/documentation/source/plugins/index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. _plugins-index: - -:mod:`plugins` Module -===================== - -.. automodule:: openlp.plugins - :members: - -.. toctree:: - :maxdepth: 2 - - songs - bibles - presentations - media - images - -:mod:`custom` Plugin --------------------- - -.. automodule:: openlp.plugins.custom - :members: - -:mod:`songusage` Plugin ------------------------ - -.. automodule:: openlp.plugins.songusage - :members: diff --git a/documentation/source/plugins/media.rst b/documentation/source/plugins/media.rst deleted file mode 100644 index 637fec634..000000000 --- a/documentation/source/plugins/media.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _plugins-media: - -Media Plugin -============ - -.. automodule:: openlp.plugins.media - :members: - diff --git a/documentation/source/plugins/songs.rst b/documentation/source/plugins/songs.rst deleted file mode 100644 index 5378ba7d7..000000000 --- a/documentation/source/plugins/songs.rst +++ /dev/null @@ -1,193 +0,0 @@ -.. _plugins-songs: - -Songs Plugin -============ - -.. automodule:: openlp.plugins.songs - :members: - -:class:`SongsPlugin` Class --------------------------- - -.. autoclass:: openlp.plugins.songs.songsplugin.SongsPlugin - :members: - -:mod:`forms` Submodule ----------------------- - -.. automodule:: openlp.plugins.songs.forms - :members: - -:class:`AuthorsForm` -^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.authorsdialog.Ui_AuthorsDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.authorsform.AuthorsForm - :members: - -:class:`EditSongForm` -^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.editsongdialog.Ui_EditSongDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.editsongform.EditSongForm - :members: - -:class:`EditVerseForm` -^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.editversedialog.Ui_EditVerseDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.editverseform.EditVerseForm - :members: - -:class:`SongBookForm` -^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.songbookdialog.Ui_SongBookDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.songbookform.SongBookForm - :members: - -:class:`SongImportForm` -^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.songimportwizard.Ui_SongImportWizard - :members: - -.. autoclass:: openlp.plugins.songs.forms.songimportform.ImportWizardForm - :members: - -:class:`SongMaintenanceForm` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.songmaintenancedialog.Ui_SongMaintenanceDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.songmaintenanceform.SongMaintenanceForm - :members: - -:class:`TopicsForm` -^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: openlp.plugins.songs.forms.topicsdialog.Ui_TopicsDialog - :members: - -.. autoclass:: openlp.plugins.songs.forms.topicsform.TopicsForm - :members: - -:mod:`lib` Submodule --------------------- - -.. automodule:: openlp.plugins.songs.lib - :members: - -:mod:`cclifileimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.cclifileimport - :members: - -.. autoclass:: openlp.plugins.songs.lib.cclifileimport.CCLIFileImportError - :members: - -:mod:`db` Submodule -^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.db - :members: - -:mod:`ewimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.ewimport - :members: - -.. autoclass:: openlp.plugins.songs.lib.ewimport.FieldDescEntry - :members: - -:mod:`importer` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.importer - :members: - -:mod:`mediaitem` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.mediaitem - :members: - -.. autoclass:: openlp.plugins.songs.lib.mediaitem.SongListView - :members: - -:mod:`olp1import` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.olp1import - :members: - -:mod:`olpimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.olpimport - :members: - -:mod:`oooimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.oooimport - :members: - -:mod:`opensongimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.opensongimport - :members: - -:mod:`sofimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.sofimport - :members: - -:mod:`songbeamerimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.songbeamerimport - :members: - -:mod:`songimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.songimport - :members: - -:mod:`songstab` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.songstab - :members: - -:mod:`wowimport` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.wowimport - :members: - -:mod:`songxml` Submodule -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.songxml - :members: - -:mod:`xml` Submodule -^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: openlp.plugins.songs.lib.xml - :members: diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 52ebe99c8..b43c491ff 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -223,16 +223,13 @@ def image_to_byte(image): ``image`` The image to converted. """ - log.debug(u'image_to_byte') + log.debug(u'image_to_byte - start') byte_array = QtCore.QByteArray() # use buffer to store pixmap into byteArray buffie = QtCore.QBuffer(byte_array) buffie.open(QtCore.QIODevice.WriteOnly) - if isinstance(image, QtGui.QImage): - pixmap = QtGui.QPixmap.fromImage(image) - else: - pixmap = QtGui.QPixmap(image) - pixmap.save(buffie, "PNG") + image.save(buffie, "PNG") + log.debug(u'image_to_byte - end') # convert to base64 encoding so does not get missed! return byte_array.toBase64() @@ -253,8 +250,11 @@ def resize_image(image, width, height, background=QtCore.Qt.black): The background colour defaults to black. """ - log.debug(u'resize_image') - preview = QtGui.QImage(image) + log.debug(u'resize_image - start') + if isinstance(image, QtGui.QImage): + preview = image + else: + preview = QtGui.QImage(image) if not preview.isNull(): # Only resize if different size if preview.width() == width and preview.height == height: @@ -263,6 +263,7 @@ def resize_image(image, width, height, background=QtCore.Qt.black): QtCore.Qt.SmoothTransformation) image_cache_key = u'%s%s%s' % (image, unicode(width), unicode(height)) if image_cache_key in image_cache: + log.debug(u'resize_image - end cache') return image_cache[image_cache_key] realw = preview.width() realh = preview.height() @@ -273,6 +274,7 @@ def resize_image(image, width, height, background=QtCore.Qt.black): painter = QtGui.QPainter(new_image) painter.drawImage((width - realw) / 2, (height - realh) / 2, preview) image_cache[image_cache_key] = new_image + log.debug(u'resize_image - end') return new_image def check_item_selected(list_widget, message): diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 07e8ad728..603197c07 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -25,7 +25,6 @@ ############################################################################### import re -import sys try: import enchant from enchant import DictNotFoundError @@ -37,7 +36,7 @@ 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 html_expands, translate, context_menu_action +from openlp.core.lib import html_expands, translate class SpellTextEdit(QtGui.QPlainTextEdit): def __init__(self, *args): diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index def6f01cc..ad6ca0f5b 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -87,12 +87,12 @@ class ThemeLevel(object): Service = 2 Song = 3 -boolean_list = [u'italics', u'override', u'outline', u'shadow', \ -u'slide_transition'] +boolean_list = [u'italics', u'override', u'outline', u'shadow', + u'slide_transition'] -integer_list =[u'proportion', u'line_adjustment', u'x', u'height', u'y', \ -u'width', u'shadow_size', u'outline_size', u'horizontal_align', \ -u'vertical_align', u'wrap_style' ] +integer_list = [u'proportion', u'line_adjustment', u'x', u'height', u'y', + u'width', u'shadow_size', u'outline_size', u'horizontal_align', + u'vertical_align', u'wrap_style'] class ThemeXML(object): """ diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 80d677386..fa704752e 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -39,7 +39,6 @@ class HideMode(object): from filerenameform import FileRenameForm from maindisplay import MainDisplay -from slidecontroller import HideMode from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm from screen import ScreenList diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 8c344e662..b40c9e063 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -24,7 +24,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from PyQt4 import QtCore, QtGui +from PyQt4 import QtGui from exceptiondialog import Ui_ExceptionDialog diff --git a/openlp/core/ui/filerenameform.py b/openlp/core/ui/filerenameform.py index d1c339811..2a7f7bd7d 100644 --- a/openlp/core/ui/filerenameform.py +++ b/openlp/core/ui/filerenameform.py @@ -27,7 +27,6 @@ from PyQt4 import QtCore, QtGui from filerenamedialog import Ui_FileRenameDialog -from openlp.core.lib import translate class FileRenameForm(QtGui.QDialog, Ui_FileRenameDialog): """ diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 96764b7fe..6592f9e03 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -90,6 +90,9 @@ class DisplayWidget(QtGui.QGraphicsView): event.ignore() class MainDisplay(DisplayWidget): + """ + This is the display screen. + """ def __init__(self, parent, screens, live): DisplayWidget.__init__(self, live, parent=None) @@ -184,7 +187,7 @@ class MainDisplay(DisplayWidget): `slide` The slide text to be displayed """ - log.debug(u'text') + log.debug(u'text to display') # Wait for the webview to update before displayiong text. while not self.loaded: Receiver.send_message(u'openlp_process_events') @@ -199,7 +202,7 @@ class MainDisplay(DisplayWidget): `slide` The slide text to be displayed """ - log.debug(u'alert') + log.debug(u'alert to display') if self.height() != self.screen[u'size'].height() \ or not self.isVisible() or self.videoWidget.isVisible(): shrink = True @@ -219,7 +222,7 @@ class MainDisplay(DisplayWidget): shrinkItem.setVisible(True) else: shrinkItem.setVisible(False) - shrinkItem.resize(self.screen[u'size'].width(), + shrinkItem.resize(self.screen[u'size'].width(), self.screen[u'size'].height()) def image(self, image): @@ -230,9 +233,10 @@ class MainDisplay(DisplayWidget): `Image` The Image to be displayed can be QImage or QPixmap """ - log.debug(u'image') - image = resize_image(image, self.screen[u'size'].width(), - self.screen[u'size'].height()) + log.debug(u'image to display') + if not isinstance(image, QtGui.QImage): + image = resize_image(image, self.screen[u'size'].width(), + self.screen[u'size'].height()) self.resetVideo() self.displayImage(image) # show screen diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index acc170ea9..78ac70b86 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -179,23 +179,23 @@ class SlideController(QtGui.QWidget): self.HideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.Toolbar)) self.BlankScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_blank.png'), - translate('OpenLP.SlideController', + u':/slides/slide_blank.png'), + translate('OpenLP.SlideController', 'Blank Screen'), self.HideMenu) self.BlankScreen.setCheckable(True) QtCore.QObject.connect(self.BlankScreen, QtCore.SIGNAL("triggered(bool)"), self.onBlankDisplay) self.ThemeScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_theme.png'), - translate('OpenLP.SlideController', + u':/slides/slide_theme.png'), + translate('OpenLP.SlideController', 'Blank to Theme'), self.HideMenu) self.ThemeScreen.setCheckable(True) QtCore.QObject.connect(self.ThemeScreen, QtCore.SIGNAL("triggered(bool)"), self.onThemeDisplay) if self.screens.display_count > 1: self.DesktopScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_desktop.png'), - translate('OpenLP.SlideController', + u':/slides/slide_desktop.png'), + translate('OpenLP.SlideController', 'Show Desktop'), self.HideMenu) self.DesktopScreen.setCheckable(True) QtCore.QObject.connect(self.DesktopScreen, @@ -214,7 +214,7 @@ class SlideController(QtGui.QWidget): self.Toolbar.addToolbarSeparator(u'Close Separator') self.Toolbar.addToolbarButton( u'Edit Song', u':/general/general_edit.png', - translate('OpenLP.SlideController', + translate('OpenLP.SlideController', 'Edit and reload song preview'), self.onEditSong) if isLive: @@ -584,11 +584,14 @@ class SlideController(QtGui.QWidget): else: label = QtGui.QLabel() label.setMargin(4) - pixmap = resize_image(frame[u'image'], - self.parent.RenderManager.width, - self.parent.RenderManager.height) label.setScaledContents(True) - label.setPixmap(QtGui.QPixmap.fromImage(pixmap)) + if isinstance(frame[u'image'], QtGui.QImage): + label.setPixmap(QtGui.QPixmap.fromImage(frame[u'image'])) + else: + pixmap = resize_image(frame[u'image'], + self.parent.RenderManager.width, + self.parent.RenderManager.height) + label.setPixmap(QtGui.QPixmap.fromImage(pixmap)) self.PreviewListWidget.setCellWidget(framenumber, 0, label) slideHeight = width * self.parent.RenderManager.screen_ratio row += 1 @@ -985,7 +988,7 @@ class SlideController(QtGui.QWidget): self.video.hide() self.SlidePreview.clear() self.SlidePreview.show() - + def onMediaClose(self): """ Respond to a request to close the Video diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index ff61b05e8..2f060b12f 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -34,9 +34,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import AmendThemeForm, FileRenameForm from openlp.core.theme import Theme -from openlp.core.lib import OpenLPToolbar, context_menu_action, \ - ThemeXML, str_to_bool, get_text_file_string, build_icon, Receiver, \ - context_menu_separator, SettingsManager, translate, check_item_selected +from openlp.core.lib import OpenLPToolbar, ThemeXML, get_text_file_string, \ + build_icon, Receiver, SettingsManager, translate, check_item_selected from openlp.core.utils import AppLocation, get_filesystem_encoding log = logging.getLogger(__name__) @@ -267,7 +266,7 @@ class ThemeManager(QtGui.QWidget): filename = \ os.path.split(unicode(oldThemeData.background_filename))[1] new_theme.add_background_image(filename) - save_to = os.path.join(self.path, theme_name, filename) + save_to = os.path.join(self.path, newThemeName, filename) save_from = oldThemeData.background_filename new_theme.add_font(unicode(oldThemeData.font_main_name), unicode(oldThemeData.font_main_color), diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 000328d50..187834beb 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -28,7 +28,6 @@ The :mod:`languagemanager` module provides all the translation settings and language file loading for OpenLP. """ import logging -import os from PyQt4 import QtCore, QtGui diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 878185808..b48ff4efd 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -45,13 +45,15 @@ class AlertsPlugin(Plugin): self.icon = build_icon(u':/plugins/plugin_alerts.png') self.alertsmanager = AlertsManager(self) self.manager = Manager(u'alerts', init_schema) - self.alertForm = AlertForm(self) + visible_name = self.getString(StringContent.VisibleName) + self.alertForm = AlertForm(self, visible_name[u'title']) def getSettingsTab(self): """ Return the settings tab for the Alerts plugin """ - self.alertsTab = AlertsTab(self) + visible_name = self.getString(StringContent.VisibleName) + self.alertsTab = AlertsTab(self, visible_name[u'title']) return self.alertsTab def addToolsMenuItem(self, tools_menu): @@ -115,4 +117,3 @@ class AlertsPlugin(Plugin): self.textStrings[StringContent.VisibleName] = { u'title': translate('AlertsPlugin', 'Alerts') } - \ No newline at end of file diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 7859417f7..377a43f6c 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -35,7 +35,7 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): """ Provide UI for the alert system """ - def __init__(self, title, visible_title): + def __init__(self, plugin, visible_title): """ Initialise the alert form """ diff --git a/openlp/plugins/bibles/forms/__init__.py b/openlp/plugins/bibles/forms/__init__.py index a0a47f634..e5d0317c5 100644 --- a/openlp/plugins/bibles/forms/__init__.py +++ b/openlp/plugins/bibles/forms/__init__.py @@ -24,6 +24,33 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from importwizardform import ImportWizardForm +""" +Forms in OpenLP are made up of two classes. One class holds all the graphical +elements, like buttons and lists, and the other class holds all the functional +code, like slots and loading and saving. -__all__ = ['ImportWizardForm'] +The first class, commonly known as the **Dialog** class, is typically named +``Ui_Dialog``. It is a slightly modified version of the class that the +``pyuic4`` command produces from Qt4's .ui file. Typical modifications will be +converting most strings from "" to u'' and using OpenLP's ``translate()`` +function for translating strings. + +The second class, commonly known as the **Form** class, is typically named +``Form``. This class is the one which is instantiated and used. It uses +dual inheritance to inherit from (usually) QtGui.QDialog and the Ui class +mentioned above, like so:: + + class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): + + def __init__(self, parent, manager, bibleplugin): + QtGui.QWizard.__init__(self, parent) + self.setupUi(self) + +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 bibleimportform import BibleImportForm + +__all__ = ['BibleImportForm'] diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/bibleimportform.py similarity index 99% rename from openlp/plugins/bibles/forms/importwizardform.py rename to openlp/plugins/bibles/forms/bibleimportform.py index 3a20130eb..2e11c30ad 100644 --- a/openlp/plugins/bibles/forms/importwizardform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -54,7 +54,7 @@ class WebDownload(object): return cls.Names[name] -class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): +class BibleImportForm(QtGui.QWizard, Ui_BibleImportWizard): """ This is the Bible Import Wizard, which allows easy importing of Bibles into OpenLP from other formats like OSIS, CSV and OpenSong. diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index f985c7471..bb3c1b26d 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -31,8 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \ ItemCapabilities, translate -from openlp.plugins.bibles.forms import ImportWizardForm -from openlp.plugins.bibles.lib.db import BibleDB +from openlp.plugins.bibles.forms import BibleImportForm log = logging.getLogger(__name__) @@ -362,7 +361,7 @@ class BibleMediaItem(MediaManagerItem): def onImportClick(self): if not hasattr(self, u'import_wizard'): - self.import_wizard = ImportWizardForm(self, self.parent.manager, + self.import_wizard = BibleImportForm(self, self.parent.manager, self.parent) self.import_wizard.exec_() self.reloadBibles() diff --git a/openlp/plugins/bibles/resources/osisbooks.csv b/openlp/plugins/bibles/resources/osisbooks.csv index 2207ee553..d65e89297 100644 --- a/openlp/plugins/bibles/resources/osisbooks.csv +++ b/openlp/plugins/bibles/resources/osisbooks.csv @@ -6,8 +6,8 @@ Deut,Deuteronomy,Deut Josh,Joshua,Josh Judg,Judges,Judg Ruth,Ruth,Ruth -1Sam,1 Samual,1Sam -2Sam,2 Samual,2Sam +1Sam,1 Samuel,1Sam +2Sam,2 Samuel,2Sam 1Kgs,1 Kings,1Kgs 2Kgs,2 Kings,2Kgs 1Chr,1 Chronicles,1Chr diff --git a/openlp/plugins/custom/forms/editcustomslideform.py b/openlp/plugins/custom/forms/editcustomslideform.py index ff396658f..5f535c8bc 100644 --- a/openlp/plugins/custom/forms/editcustomslideform.py +++ b/openlp/plugins/custom/forms/editcustomslideform.py @@ -28,7 +28,6 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate from editcustomslidedialog import Ui_CustomSlideEditDialog log = logging.getLogger(__name__) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index d054c3e9c..69c9347f9 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -169,7 +169,8 @@ 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 def kill(self): diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index a747aa26d..511d82747 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -24,10 +24,37 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +""" +Forms in OpenLP are made up of two classes. One class holds all the graphical +elements, like buttons and lists, and the other class holds all the functional +code, like slots and loading and saving. + +The first class, commonly known as the **Dialog** class, is typically named +``Ui_Dialog``. It is a slightly modified version of the class that the +``pyuic4`` command produces from Qt4's .ui file. Typical modifications will be +converting most strings from "" to u'' and using OpenLP's ``translate()`` +function for translating strings. + +The second class, commonly known as the **Form** class, is typically named +``Form``. This class is the one which is instantiated and used. It uses +dual inheritance to inherit from (usually) QtGui.QDialog and the Ui class +mentioned above, like so:: + + class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): + + def __init__(self, parent=None): + QtGui.QDialog.__init__(self, parent) + self.setupUi(self) + +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 authorsform import AuthorsForm from topicsform import TopicsForm from songbookform import SongBookForm from editverseform import EditVerseForm from editsongform import EditSongForm from songmaintenanceform import SongMaintenanceForm -from songimportform import ImportWizardForm +from songimportform import SongImportForm diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 3e5b41e46..014c66a51 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -35,7 +35,7 @@ from openlp.plugins.songs.lib.importer import SongFormat log = logging.getLogger(__name__) -class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): +class SongImportForm(QtGui.QWizard, Ui_SongImportWizard): """ This is the Song Import Wizard, which allows easy importing of Songs into OpenLP from other formats like OpenLyrics, OpenSong and CCLI. @@ -248,7 +248,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): # Progress page return True - def getFileName(self, title, editbox, + def getFileName(self, title, editbox, filters = '%s (*)' % translate('SongsPlugin.ImportWizardForm', 'All Files')): filename = QtGui.QFileDialog.getOpenFileName(self, title, @@ -260,7 +260,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.plugin.settingsSection, os.path.split(unicode(filename))[0], 1) - def getFiles(self, title, listbox, + def getFiles(self, title, listbox, filters = u'%s (*)' % translate('SongsPlugin.ImportWizardForm', 'All Files')): filenames = QtGui.QFileDialog.getOpenFileNames(self, title, @@ -290,7 +290,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.openLP2FilenameEdit, u'%s (*.sqlite);;%s (*)' % (translate('SongsPlugin.ImportWizardForm', - 'OpenLP 2.0 Databases'), + 'OpenLP 2.0 Databases'), translate('SongsPlugin.ImportWizardForm', 'All Files')) ) @@ -299,10 +299,10 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.getFileName( translate('SongsPlugin.ImportWizardForm', 'Select openlp.org 1.x Database File'), - self.openLP1FilenameEdit, + self.openLP1FilenameEdit, u'%s (*.olp);;%s (*)' % (translate('SongsPlugin.ImportWizardForm', - 'openlp.org v1.x Databases'), + 'openlp.org v1.x Databases'), translate('SongsPlugin.ImportWizardForm', 'All Files')) ) @@ -331,10 +331,10 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.getFiles( translate('SongsPlugin.ImportWizardForm', 'Select Words of Worship Files'), - self.wordsOfWorshipFileListWidget, + self.wordsOfWorshipFileListWidget, u'%s (*.wsg *.wow-song);;%s (*)' % (translate('SongsPlugin.ImportWizardForm', - 'Words Of Worship Song Files'), + 'Words Of Worship Song Files'), translate('SongsPlugin.ImportWizardForm', 'All Files')) ) @@ -356,10 +356,10 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.getFiles( translate('SongsPlugin.ImportWizardForm', 'Select Songs of Fellowship Files'), - self.songsOfFellowshipFileListWidget, + self.songsOfFellowshipFileListWidget, u'%s (*.rtf);;%s (*)' % (translate('SongsPlugin.ImportWizardForm', - 'Songs Of Felloship Song Files'), + 'Songs Of Felloship Song Files'), translate('SongsPlugin.ImportWizardForm', 'All Files')) ) diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 4188304cd..cb360cf59 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -28,7 +28,6 @@ The :mod:`ewimport` module provides the functionality for importing EasyWorship song databases into the current installation database. """ -import sys import os import struct @@ -192,8 +191,9 @@ class EasyWorshipSongImport(SongImport): num_fields) field_names.pop() field_descs = [] - for i,field_name in enumerate(field_names): - field_type, field_size = struct.unpack_from('BB', field_info, i * 2) + for i, field_name in enumerate(field_names): + field_type, field_size = struct.unpack_from('BB', + field_info, i * 2) field_descs.append(FieldDescEntry(field_name, field_type, field_size)) self.set_record_struct(field_descs) @@ -272,7 +272,7 @@ class EasyWorshipSongImport(SongImport): 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): @@ -331,7 +331,7 @@ class EasyWorshipSongImport(SongImport): # Memo or Blob block_start, blob_size = \ struct.unpack_from(' 63: - return u''; + return u'' self.memo_file.seek(11 + (5 * sub_block), os.SEEK_CUR) sub_block_start, = struct.unpack('B', self.memo_file.read(1)) self.memo_file.seek(block_start + (sub_block_start * 16)) else: - return u''; + return u'' return self.memo_file.read(blob_size) else: return 0 diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index b50005486..a211344c2 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, BaseListWithDnD, Receiver, \ ItemCapabilities, translate, check_item_selected from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ - ImportWizardForm + SongImportForm from openlp.plugins.songs.lib import SongXMLParser from openlp.plugins.songs.lib.db import Author, Song @@ -254,7 +254,7 @@ class SongMediaItem(MediaManagerItem): def onImportClick(self): if not hasattr(self, u'import_wizard'): - self.import_wizard = ImportWizardForm(self, self.parent) + self.import_wizard = SongImportForm(self, self.parent) self.import_wizard.exec_() Receiver.send_message(u'songs_load_list') diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 505e99a46..8b07d2b32 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -29,7 +29,6 @@ The :mod:`songbeamerimport` module provides the functionality for importing """ import logging import os -import re import chardet import codecs diff --git a/openlp/plugins/songs/lib/songxml.py b/openlp/plugins/songs/lib/songxml.py deleted file mode 100644 index 6818218c5..000000000 --- a/openlp/plugins/songs/lib/songxml.py +++ /dev/null @@ -1,423 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # -# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # -# Carsten Tinggaard, Frode Woldsund # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import logging - -from types import ListType - -log = logging.getLogger(__name__) - -class SongException(Exception): - pass - -class SongTitleError(SongException): - pass - -class SongTypeError(SongException): - pass - -class SongSlideError(SongException): - pass - -class SongFeatureError(SongException): - pass - -# TODO: Song: Logging - not all, but enough -# TODO: Song: Handle OpenLP2 format -# TODO: Song: Import OpenLP1 -# TODO: Song: Export OpenLP1 -# TODO: Song: Export Song to CCLI -# TODO: Song: Export Song to OpenSong -# TODO: Song: Import ChangingSong -# TODO: Song: Export ChangingSong - -class Song(object): - """Handling song properties and methods - - handles all conversions between various input and output formats - - CCLI: - from_ccli_text_file - to_ccli_text_file - from_ccli_text_buffer - to_ccli_text_buffer - - presentation (screen): - get_preview_slide - get_render_slide - - openlp1: - from_openlp1_lyrics_buffer - to_openlp1_lyrics_buffer - set_author_list - get_author_list - - editing and openlp2: - set_* - get_* - """ - - def __init__(self, songid = 0): - """Initialize song object - - songid -- database id for this song - title -- title of the song - search_title -- title without punctuation chars - author_list -- list of authors - song_cclino -- CCLI number for this song - copyright -- copyright string - show_title -- 0: no show, 1: show - show_author_list -- 0: no show, 1: show - show_copyright -- 0: no show, 1: show - show_song_cclino -- 0: no show, 1: show - theme_name -- name of theme or blank - category_array -- list of user defined properties (hymn, gospel) - song_book -- name of originating book - song_number -- number of the song, related to a songbook - comments -- free comment - verse_order -- presentation order of the slides - lyrics -- text format - search_lyrics -- lowercase lyrics without punctuation - """ - self.songid = songid - self._reset() - - def _reset(self): - """Reset all song attributes""" - self.slideList = [] - self.set_title(u'BlankSong') - self.author_list = None - self.song_cclino = "" - self.copyright = "" - self.show_author_list = 1 - self.show_copyright = 1 - self.show_song_cclino = 1 - self.show_title = 1 - self.theme_name = "" - self.category_array = None - self.song_book = "" - self.song_number = "" - self.comments = "" - self.verse_order = "" - self.set_lyrics(u'') - return - - def _remove_punctuation(self, title): - """Remove the puntuation chars from title - - chars are: .,:;!?&%#/\@`$'|"^~*- - """ - punctuation = ".,:;!?&%#'\"/\\@`$|^~*-" - string = title - for char in punctuation: - string = string.replace(char, '') - return string - - def set_title(self, title): - """Set the song title - - title (string) - raises SongTitleError if the title is empty - raises SongTitleError if the seach_title is empty - """ - self.title = title.strip() - self.search_title = self._remove_punctuation(title).strip() - if len(self.title) < 1: - raise SongTitleError(u'The title is empty') - if len(self.search_title) < 1: - raise SongTitleError(u'The searchable title is empty') - - def from_ccli_text_buffer(self, textList): - """ - Create song from a list of texts (strings) - CCLI text format expected - - textList (list of strings) -- the song - """ - self._reset() - # extract the following fields - # - name - # - author - # - CCLI no - sName = "" - sAuthor = "" - sCopyright = "" - sCcli = "" - lastpart = 0 - lineCount = 0 - metMisc = False - lyrics = [] - for line in textList: - lineCount += 1 - if lastpart > 0: - lastpart += 1 - if lastpart == 2: - sCopyright = line[1:].strip() - if lastpart == 3: - sAuthor = line - elif line.startswith(u'CCLI Song'): - sCcli = line[13:].strip() - lastpart = 1 - else: - if metMisc: - metMisc = False - if line.upper().startswith(u'(BRIDGE)'): - lyrics.append(u'# Bridge') - # otherwise unknown misc keyword - elif line.startswith(u'Misc'): - metMisc = True - elif line.startswith(u'Verse') or line.startswith(u'Chorus'): - lyrics.append(u'# %s' % line) - else: - # should we remove multiple blank lines? - if lineCount == 1: - sName = line - else: - lyrics.append(line) - # split on known separators - lst = sAuthor.split(u'/') - if len(lst) < 2: - lst = sAuthor.split(u'|') - author_list = u', '.join(lst) - self.set_title(sName) - self.set_author_list(author_list) - self.copyright = sCopyright - self.ccli_number = sCcli - self.set_lyrics(lyrics) - - def from_ccli_text_file(self, textFileName): - """ - Create song from a list of texts read from given file - textFileName -- path to text file - """ - ccli_file = None - try: - ccli_file = open(textFileName, 'r') - lines = [orgline.rstrip() for orgline in ccli_file] - self.from_ccli_text_buffer(lines) - except IOError: - log.exception(u'Failed to load CCLI text file') - finally: - if ccli_file: - ccli_file.close() - - def _assure_string(self, string_in): - """Force a string is returned""" - if string_in is None: - string_out = "" - else: - string_out = unicode(string_in) - return string_out - - def _split_to_list(self, aString): - """Split a string into a list - comma separated""" - if aString: - list = aString.split(u',') - res = [item.strip() for item in list] - return res - - def _list_to_string(self, strOrList): - """Force a possibly list into a string""" - if isinstance(strOrList, basestring): - lst = self._split_to_list(strOrList) - elif isinstance(strOrList, ListType): - lst = strOrList - elif strOrList is None: - lst = [] - else: - raise SongTypeError(u'Variable not String or List') - string = u', '.join(lst) - return string - - def get_copyright(self): - """Return copyright info string""" - return self._assure_string(self.copyright) - - def get_ccli_number(self): - """Return the songCclino""" - return self._assure_string(self.ccli_number) - - def get_theme_name(self): - """Return the theme name for the song""" - return self._assure_string(self.theme_name) - - def get_song_book(self): - """Return the song_book (string)""" - return self._assure_string(self.song_book) - - def get_song_number(self): - """Return the song_number (string)""" - return self._assure_string(self.song_number) - - def get_comments(self): - """Return the comments (string)""" - return self._assure_string(self.comments) - - def get_verse_order(self): - """Get the verseOrder (string) - preferably space delimited""" - return self._assure_string(self.verse_order) - - def get_author_list(self, asOneString = True): - """Return the list of authors as a string - - ``asOneString`` - If ``True``, returns 'John Newton, A Parker'. If ``False``, returns - [u'John Newton', u'A Parker'] - """ - if asOneString: - res = self._assure_string(self.author_list) - else: - res = self._split_to_list(self.author_list) - return res - - def set_author_list(self, author_list): - """Set the author_list - - ``author_list`` - a string or list of strings - """ - if author_list is None: - self.author_list = None - else: - self.author_list = self._list_to_string(author_list) - - def get_category_array(self, asOneString = True): - """Return the list of categories as a string - - ``asOneString`` - If ``True``, returns 'Hymn, Gospel'. If ``False``, returns - [u'Hymn', u'Gospel'] - """ - if asOneString: - res = self._assure_string(self.category_array) - else: - res = self._split_to_list(self.category_array) - return res - - def set_category_array(self, category_array): - """Set the category_array - - category_array -- a string or list of strings - """ - if category_array is None: - self.category_array = None - else: - self.category_array = self._list_to_string(category_array) - - def set_lyrics(self, lyrics): - """Set the lyrics as a list of strings""" - self.lyrics = lyrics - self._parse_lyrics() - - def _parse_lyrics(self): - """Parse lyrics into the slidelist""" - # TODO: check font formatting - self.slideList = [] - tmpSlide = [] - metContent = False - for lyric in self.lyrics: - if lyric: - metContent = True - tmpSlide.append(lyric) - else: - if metContent: - metContent = False - self.slideList.append(tmpSlide) - tmpSlide = [] - if tmpSlide: - self.slideList.append(tmpSlide) - - def get_preview_slide(self, slideNumber): - """Return the preview text for specified slide number - - slideNumber -- 0: all slides, 1..n: specific slide - a list of strings are returned - """ - num = len(self.slideList) - if num < 1: - raise SongSlideError(u'No slides in this song') - elif slideNumber > num: - raise SongSlideError(u'Slide number too high') - if slideNumber > 0: - # return this slide - res = self.slideList[slideNumber-1] - # find theme in this slide - else: - res = [] - for i in range(num): - if i > 0: - res.append(u'') - res.extend() - # remove formattingincluding themes - return res - - def get_render_slide(self, slideNumber): - """Return the slide to be rendered including the additional - properties - - slideNumber -- 1 .. numberOfSlides - - Returns a list as: - [theme_name (string), - title (string), - authorlist (string), - copyright (string), - cclino (string), - lyric-part as a list of strings] - """ - num = len(self.slideList) - if num < 1: - raise SongSlideError(u'No slides in this song') - elif slideNumber > num: - raise SongSlideError(u'Slide number too high') - res = [] - if self.show_title: - title = self.title - else: - title = "" - if self.show_author_list: - author = self.get_author_list(True) - else: - author = "" - if self.show_copyright: - cpright = self.get_copyright() - else: - cpright = "" - if self.show_ccli_number: - ccli = self.get_ccli_number() - else: - ccli = "" - theme_name = self.get_theme_name() - # examine the slide for a theme - res.append(theme_name) - res.append(title) - res.append(author) - res.append(cpright) - res.append(ccli) - # append the correct slide - return res - -__all__ = ['SongException', 'SongTitleError', 'SongSlideError', 'SongTypeError', - 'SongFeatureError', 'Song'] diff --git a/resources/bibles/osisbooks_en.txt b/resources/bibles/osisbooks_en.txt index 2207ee553..d65e89297 100644 --- a/resources/bibles/osisbooks_en.txt +++ b/resources/bibles/osisbooks_en.txt @@ -6,8 +6,8 @@ Deut,Deuteronomy,Deut Josh,Joshua,Josh Judg,Judges,Judg Ruth,Ruth,Ruth -1Sam,1 Samual,1Sam -2Sam,2 Samual,2Sam +1Sam,1 Samuel,1Sam +2Sam,2 Samuel,2Sam 1Kgs,1 Kings,1Kgs 2Kgs,2 Kings,2Kgs 1Chr,1 Chronicles,1Chr