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 100% rename from documentation/source/core/index.rst rename to documentation/api/source/core/index.rst diff --git a/documentation/source/core/lib.rst b/documentation/api/source/core/lib.rst similarity index 100% rename from documentation/source/core/lib.rst rename to documentation/api/source/core/lib.rst 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/source/index.rst b/documentation/api/source/index.rst similarity index 100% rename from documentation/source/index.rst rename to documentation/api/source/index.rst 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/source/plugins/bibles.rst b/documentation/api/source/plugins/bibles.rst similarity index 100% rename from documentation/source/plugins/bibles.rst rename to documentation/api/source/plugins/bibles.rst diff --git a/documentation/api/source/plugins/images.rst b/documentation/api/source/plugins/images.rst new file mode 100644 index 000000000..3caa7255b --- /dev/null +++ b/documentation/api/source/plugins/images.rst @@ -0,0 +1,19 @@ +.. _plugins-images: + +Images Plugin +============= + +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/source/plugins/index.rst b/documentation/api/source/plugins/index.rst similarity index 100% rename from documentation/source/plugins/index.rst rename to documentation/api/source/plugins/index.rst diff --git a/documentation/source/plugins/media.rst b/documentation/api/source/plugins/media.rst similarity index 100% rename from documentation/source/plugins/media.rst rename to documentation/api/source/plugins/media.rst 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/source/plugins/songs.rst b/documentation/api/source/plugins/songs.rst similarity index 100% rename from documentation/source/plugins/songs.rst rename to documentation/api/source/plugins/songs.rst 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..7b8a12e8b --- /dev/null +++ b/documentation/manual/source/conf.py @@ -0,0 +1,202 @@ +# -*- 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 diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst new file mode 100644 index 000000000..353d7482b --- /dev/null +++ b/documentation/manual/source/dualmonitors.rst @@ -0,0 +1,127 @@ +================== +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 FN +key and another key is required to enable the second monitor on laptops. + +Some computers also incorporate the use of S-Video or HDMI 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 the **Windows key and tap P**. + +The more traditional way is also fairly straight forward. Go to the control +panel and click on display. This will open up the Display options. You can +also bypass this step by right click on a blank area on your desktop and +selecting **resolution**. + +.. image:: pics/winsevendisplay.png + +Then click on the Screen Resolution from the left pane. + +.. image:: pics/winsevenresolution.png + +Then enable your projector and ensure your desktop is extended. + +Windows Vista +^^^^^^^^^^^^^ + +From the control panel click on personalize, or right click a blank place on +the desktop and click personalization. + +.. image:: pics/vistapersonalize.png + +From the **Personalization** window click on Display Settings. + +.. image:: pics/vistadisplaysettings.png + +Then enable the montior that represents your projector an make sure your +you have checked Extend the desktop. + +Windows XP +^^^^^^^^^^ + +From the control panel select Display, or right click on a blank area of the +desktop and select properties. From the properties window click on the settings +tab. + +.. image:: pics/xpdisplaysettings.png + +Then enable the monitor that represents your projector an make sure your +you have checked Extend the desktop. + +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 System --> Preferences --> Display Settings (Monitors) + +.. image:: pics/gnome.png + +Setup your projector with the correct resolution and make sure you do **not** +have mirrored desktop enabled (same image on all monitors). + +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 **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. + + + + + + + + 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/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/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/xpdisplaysettings.png b/documentation/manual/source/pics/xpdisplaysettings.png new file mode 100644 index 000000000..e1ec66c6f 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/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/serviceitem.py b/openlp/core/lib/serviceitem.py index 7d63115bf..a5417916e 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -399,6 +399,6 @@ class ServiceItem(object): def get_frame_path(self, row=0): """ - Returns the title of the raw frame + Returns the path of the raw frame """ return self._raw_frames[row][u'path'] diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 96764b7fe..0c9d8734f 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -184,7 +184,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 +199,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 +219,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,7 +230,7 @@ class MainDisplay(DisplayWidget): `Image` The Image to be displayed can be QImage or QPixmap """ - log.debug(u'image') + log.debug(u'image to display') image = resize_image(image, self.screen[u'size'].width(), self.screen[u'size'].height()) self.resetVideo() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b7be980cc..3cbe947f1 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,8 @@ 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)) + label.setPixmap(QtGui.QPixmap.fromImage(frame[u'image'])) self.PreviewListWidget.setCellWidget(framenumber, 0, label) slideHeight = width * self.parent.RenderManager.screen_ratio row += 1 @@ -985,7 +982,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 @@ -999,4 +996,3 @@ class SlideController(QtGui.QWidget): self.video.hide() self.SlidePreview.clear() self.SlidePreview.show() - 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/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/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index e995407a3..b32712d8d 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -53,6 +53,9 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): 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'---\[([-\w]+):([\d]+)\]---') def contextMenu(self, point): @@ -71,6 +74,33 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): self.insertVerse(VerseType.to_string(verse_type), self.verseNumberBox.value()) + def onVerseTypeComboBoxChanged(self): + """ + Adjusts the verse number SpinBox in regard to the selected verse type + and the cursor's position. + """ + position = self.verseTextEdit.textCursor().position() + text = unicode(self.verseTextEdit.toPlainText()) + verse_type = VerseType.to_string(self.verseTypeComboBox.currentIndex()) + if not text: + return + position = text.rfind(u'---[%s' % verse_type, 0, position) + if position == -1: + self.verseNumberBox.setValue(1) + return + text = text[position:] + position = text.find(u']---') + if position == -1: + return + text = text[:position + 4] + match = self.verse_regex.match(text) + if match: + verse_type = match.group(1) + verse_number = int(match.group(2)) + verse_type_index = VerseType.from_string(verse_type) + if verse_type_index is not None: + self.verseNumberBox.setValue(verse_number) + def onCursorPositionChanged(self): """ Determines the previous verse type and number in regard to the cursor's diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 2db1df375..4188304cd 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -35,7 +35,7 @@ import struct from openlp.core.lib import translate from songimport import SongImport -def strip_rtf(blob): +def strip_rtf(blob, encoding): depth = 0 control = False clear_text = [] @@ -69,12 +69,42 @@ def strip_rtf(blob): if control_str == 'par' or control_str == 'line': clear_text.append(u'\n') elif control_str == 'tab': - clear_text.append(u'\n') + clear_text.append(u'\t') + # Prefer the encoding specified by the RTF data to that + # specified by the Paradox table header + # West European encoding + elif control_str == 'fcharset0': + encoding = u'cp1252' + # Greek encoding + elif control_str == 'fcharset161': + encoding = u'cp1253' + # Turkish encoding + elif control_str == 'fcharset162': + encoding = u'cp1254' + # Vietnamese encoding + elif control_str == 'fcharset163': + encoding = u'cp1258' + # Hebrew encoding + elif control_str == 'fcharset177': + encoding = u'cp1255' + # Arabic encoding + elif control_str == 'fcharset178': + encoding = u'cp1256' + # Baltic encoding + elif control_str == 'fcharset186': + encoding = u'cp1257' + # Cyrillic encoding + elif control_str == 'fcharset204': + encoding = u'cp1251' + # Thai encoding + elif control_str == 'fcharset222': + encoding = u'cp874' + # Central+East European encoding + elif control_str == 'fcharset238': + encoding = u'cp1250' elif control_str[0] == '\'': - # Really should take RTF character set into account but - # for now assume ANSI (Windows-1252) and call it good s = chr(int(control_str[1:3], 16)) - clear_text.append(s.decode(u'windows-1252')) + clear_text.append(s.decode(encoding)) del control_word[:] if c == '\\' and new_control: control = True @@ -126,6 +156,30 @@ class EasyWorshipSongImport(SongImport): db_file.close() self.memo_file.close() return False + # Take a stab at how text is encoded + self.encoding = u'cp1252' + db_file.seek(106) + code_page, = struct.unpack('