Head r1441

This commit is contained in:
Jon Tibble 2011-03-31 22:11:17 +01:00
commit c2518565de
37 changed files with 779 additions and 392 deletions

View File

@ -1,112 +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 ^<target^>` where ^<target^> 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
@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 ^<target^>` where ^<target^> 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

View File

@ -42,7 +42,7 @@ master_doc = 'index'
# General information about the project.
project = u'OpenLP'
copyright = u'2010, Raoul Snyman'
copyright = u'2004 - 2011, Raoul Snyman'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@ -92,19 +92,30 @@ pygments_style = 'sphinx'
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
if sys.argv[2] == 'qthelp' or sys.argv[2] == 'htmlhelp':
html_theme = 'openlp_qthelp'
else:
html_theme = 'default'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
if sys.argv[2] == 'html':
html_theme_options = {
'sidebarbgcolor': '#3a60a9',
'relbarbgcolor': '#203b6f',
'footerbgcolor': '#26437c',
'headtextcolor': '#203b6f',
'linkcolor': '#26437c',
'sidebarlinkcolor': '#ceceff'
}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
html_theme_path = [os.path.join(os.path.abspath('..'), 'themes')]
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
html_title = u'OpenLP 2.0 Reference Manual'
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
@ -125,7 +136,7 @@ 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'
html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
@ -165,7 +176,7 @@ html_static_path = ['_static']
#html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'OpenLPdoc'
htmlhelp_basename = 'OpenLP'
# -- Options for LaTeX output --------------------------------------------------
@ -179,7 +190,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 Reference Manual',
u'Wesley Stout', 'manual'),
]
@ -212,6 +223,6 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'openlp', u'OpenLP Documentation',
('index', 'openlp', u'OpenLP Reference Manual',
[u'Wesley Stout'], 1)
]

View File

@ -18,4 +18,5 @@ Contents:
bibles
themes
mediamanager
songs
songs
troubleshooting

View File

@ -5,33 +5,31 @@ Introduction
About
-----
OpenLP is an open source lyrics projection application developed specifically
for churches. It is licensed under the GNU Generic Public License, which means
that it is free to use and distribute, and it stays free.
OpenLP stands for "Open Source Lyrics Projection" and is presentation software
developed for churches to provide a single easy to use interface for the
projection needs of a typical worship service. First created in 2004, it has
steadily grown in features and maturity such that is it now a mainstay in
hundreds of churches around the world.
Lyrics Projection
-----------------
OpenLP has searchable databases of songs and Bible verses allowing them to be
projected instantly or saved in a pre-prepared order of service file. Themes
allow for a variety of presentation options and allow you to add attractive
visuals to enhance your presentations. PowerPoint and OpenOffice presentations,
videos and audio files can be run from within the program removing the need to
switch between different programs. Alert messages can be displayed so the
nursery or car park stewards can notify the congregation easily. Remote
capability allows the worship leader to change songs, or for alert messages to
be sent from anywhere on the network, even via a smart phone or tablet.
OpenLP's purpose is to project the lyrics of songs and Bible verses using a
computer and a data projector. OpenLP also has the ability to project videos,
images, and also play audio. OpenLP also is highly customizable providing users
with the ability to set up a wide variety of themes, including themes with
video backgrounds.
Being free, this software can be installed on as many PCs as required,
including the home PCs of worship leader(s) at no additional cost. Compared to
the expensive site licenses and restrictions of commercial software we believe
OpenLP is the perfect choice for quality and value. Still in active development
by a growing team of enthusiastic developers, features are being added all the
time resulting in continual improvement of the software.
Open Source
-----------
OpenLP is open source software. This means that the source code (the
programming instructions the developers write) is open to anyone who wants to
look at it. This gives you, the end user, a few freedoms.
From a developer's perspective, it gives you the freedom to inspect the code
and make sure that it is not malicious. Also, it gives you the freedom to
change the code and the freedom to "fork" the project and make it your own.
For end users open source software gives you the freedom to use software as
you wish. You are not required to pay for the software and you are free to
make copies and distribute it to anyone you want.
OpenLP is licensed under the GNU Generic Public License, which means
that it is free to use, distribute, modify, and it stays free.
GNU General Public License
--------------------------
@ -42,5 +40,5 @@ to charge for the software, and that you have to distribute the source code as
well.
You can find a copy of the GNU General Public License from the Help menu
selecting about OpenLP or on-line
at: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
selecting about OpenLP or on-line at:
`<http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>`_.

View File

@ -16,8 +16,8 @@ this is what the `Media Manager` looks like with all the plugins enabled.
.. image:: pics/mediamanager.png
To enable the plugins navigate to :menuselection:`Settings --> Plugins` or
press `F7`. You will want to click on the plugin to the left that you want to
enable and select **active** from the drop down box to the right.
press :kbd:`Alt+F7`. You will want to click on the plugin to the left that you
would like to enable and select **active** from the drop down box to the right.
.. image:: pics/plugins.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,132 @@
===============
Troubleshooting
===============
I can not play videos or other media
====================================
If you can not play video or audio through openlp, there are several areas that
could be an issue. First thing is to make sure you can play the media file
through your default media player. OpenLP should be able to play any file that
you can play through your default media player.
If you can play a file through your media player but not on OpenLP it may help
to enable Phonon for multimedia playback. Go to the OpenLP configuration
:menuselection:`Settings --> Configure OpenLP...` and select the Media tab.
Make sure the check box for `Use Phonon for video playback` is checked.
.. image:: pics/phononcheckbox.png
Codecs
------
You may need to install codecs for certain files to play. Most newer versions
of Windows and OS X will support most media types. Most Linux distributions
will require a little more help to get certain media types to play.
Microsoft Windows
^^^^^^^^^^^^^^^^^
Later versions of Microsoft Windows (Vista, Windows 7) generally come with
everything you need to play most media formats. If for some reason you need
additional codecs we have seen success from the Combined Community Codec Pack
(CCCP): `<http://www.cccp-project.net/>`_. You might also wish to check out the
K-Lite Codec Pack. If you are having issues, results do seem to vary with the
different options. What works for some may not for others, so some trial and
error may be required.
Mac
^^^
If you are using a Mac. You may wish to play Windows formats. flip4mac enables
you to use popular Windows formats such as .wmv on your Mac. You can get it
here `<http://dynamic.telestream.net/downloads/download-flip4macwmv.htm>`_.
Ubuntu Linux (and variants)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you are using Ubuntu Linux, or one of its variants (Kubuntu, Edubuntu, etc...)
it is a fairly quick and easy process to get all the codecs you need to make
things work. You will need to install two meta-packages that contain all the
multimedia codecs that you will generally need. From the Software Center install
ubuntu-restricted-extras and Kubuntu-restricted-extras, or from the terminal::
user@linux:~ $ sudo apt-get install ubuntu-restricted-extras kubuntu-restricted-extras
**Note** if you are running Kubuntu there is no need to install the
ubuntu-restricted-extras meta-package
For more information on Ubuntu and multimedia issues please check out
`<https://help.ubuntu.com/community/RestrictedFormats/>`_.
Arch Linux
^^^^^^^^^^
The following command provides the most complete solution for codecs on Arch
Linux::
root@linux:~ # pacman -S gstreamer0.10-{base,good,bad,ugly}-plugins gstreamer0.10-ffmpeg
If you need more help with Arch Linux and multimedia please see the Arch Linux
documentation at `<https://wiki.archlinux.org/index.php/Codecs>`_.
Debian Linux
^^^^^^^^^^^^
You will need to add the Debian Multimedia Repository. So add the folowing to
/etc/apt/sources.list::
deb http://www.debian-multimedia.org testing main non-free
Then update the repository info::
root@linux:~ # apt-get update
Then install the following packages::
root@linux:~ # apt-get install gstreamer0.10-ffmpeg gstreamer0.10-lame gstreamer0.10-plugins-really-bad gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-plugins-good gstreamer0.10-x264
Fedora Linux
^^^^^^^^^^^^
You will need to set up Fedora to play most media formats. This is relatively
simple using the rpmfusion repository.
**Note** the following commands will enable a third party repository to your
system. Please check out `<http://rpmfusion.org>`_. for more information.
To enable both the free and nonfree components for any Fedora official release
enter the following commands::
su -c 'yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm'
After enabling the rpmfusion repository you will want to refresh your package
list, perform any updates and search for gstreamer-good, bad, and ugly and
install.
Here is a good tutorial video on the rpmfusion repository
`<http://www.linuxjournal.com/video/getting-mp3-support-fedora-using-rpmfusion-repositories>`_.
The Media Manager appears to be missing some features
=====================================================
If you do not see all the features listed in the Media Manager, you may need
to enable them.
To enable the plugins navigate to :menuselection:`Settings --> Plugins` or
press :kbd:`Alt+F7`. You will want to click on the plugin to the left that you
would like to enable and select **active** from the drop down box to the right.
.. image:: pics/plugins.png
By default all plugins should be enabled during the first run wizard except the
remotes plugin, unless you specify differently.
I can not see the book, chapter, and verse when I display scripture
===================================================================
The book, chapter, and verse should be displayed when you display scripture. If
you can not see this your theme probably has the text size too small for the
info to be seen. See the section of the manual on themes if you need more info
on text sizes in themes.

View File

@ -38,6 +38,7 @@ from traceback import format_exception
from PyQt4 import QtCore, QtGui
from openlp.core.lib import Receiver, check_directory_exists
from openlp.core.lib.ui import UiStrings
from openlp.core.resources import qInitResources
from openlp.core.ui.mainwindow import MainWindow
from openlp.core.ui.firsttimelanguageform import FirstTimeLanguageForm
@ -77,6 +78,13 @@ class OpenLP(QtGui.QApplication):
class in order to provide the core of the application.
"""
def exec_(self):
"""
Override exec method to allow the shared memory to be released on exit
"""
QtGui.QApplication.exec_()
self.sharedMemory.detach()
def run(self):
"""
Run the OpenLP application.
@ -107,7 +115,8 @@ class OpenLP(QtGui.QApplication):
# make sure Qt really display the splash screen
self.processEvents()
# start the main app window
self.mainWindow = MainWindow(screens, self.clipboard())
self.mainWindow = MainWindow(screens, self.clipboard(),
self.arguments())
self.mainWindow.show()
if show_splash:
# now kill the splashscreen
@ -122,6 +131,24 @@ class OpenLP(QtGui.QApplication):
VersionThread(self.mainWindow).start()
return self.exec_()
def isAlreadyRunning(self):
"""
Look to see if OpenLP is already running and ask if a 2nd copy
is to be started.
"""
self.sharedMemory = QtCore.QSharedMemory('OpenLP')
if self.sharedMemory.attach():
status = QtGui.QMessageBox.critical(None,
UiStrings.Error, UiStrings.OpenLPStart,
QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No))
if status == QtGui.QMessageBox.No:
return True
return False
else:
self.sharedMemory.create(1)
return False
def hookException(self, exctype, value, traceback):
if not hasattr(self, u'mainWindow'):
log.exception(''.join(format_exception(exctype, value, traceback)))
@ -194,6 +221,9 @@ def main():
qInitResources()
# Now create and actually run the application.
app = OpenLP(qt_args)
# Instance check
if app.isAlreadyRunning():
sys.exit()
app.setOrganizationName(u'OpenLP')
app.setOrganizationDomain(u'openlp.org')
app.setApplicationName(u'OpenLP')

View File

@ -101,6 +101,10 @@ class EventReceiver(QtCore.QObject):
``servicemanager_previous_item``
Display the previous item in the service
``servicemanager_preview_live``
Requests a Preview item from the Service Manager to update live and
add a new item to the preview panel
``servicemanager_next_item``
Display the next item in the service

View File

@ -85,7 +85,12 @@ body {
}
/* lyric css */
%s
sup {
font-size:0.6em;
vertical-align:top;
position:relative;
top:-0.3em;
}
</style>
<script language="javascript">
var timer = null;

View File

@ -145,7 +145,8 @@ class RenderManager(object):
else:
self.theme = self.service_theme
else:
if theme:
# Images have a theme of -1
if theme and theme != -1:
self.theme = theme
elif theme_level == ThemeLevel.Song or \
theme_level == ThemeLevel.Service:

View File

@ -109,7 +109,9 @@ class ServiceItem(object):
self.edit_id = None
self.xml_version = None
self.start_time = 0
self.end_time = 0
self.media_length = 0
self.from_service = False
self._new_item()
def _new_item(self):
@ -261,6 +263,7 @@ class ServiceItem(object):
u'data': self.data_string,
u'xml_version': self.xml_version,
u'start_time': self.start_time,
u'end_time': self.end_time,
u'media_length': self.media_length
}
service_data = []
@ -307,6 +310,8 @@ class ServiceItem(object):
self.xml_version = header[u'xml_version']
if u'start_time' in header:
self.start_time = header[u'start_time']
if u'end_time' in header:
self.end_time = header[u'end_time']
if u'media_length' in header:
self.media_length = header[u'media_length']
if self.service_item_type == ServiceItemType.Text:
@ -449,4 +454,3 @@ class ServiceItem(object):
return end
else:
return u'%s : %s' % (start, end)

View File

@ -57,6 +57,7 @@ class UiStrings(object):
Export = translate('OpenLP.Ui', 'Export')
FontSizePtUnit = translate('OpenLP.Ui', 'pt',
'Abbreviated font pointsize unit')
Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours')
Image = translate('OpenLP.Ui', 'Image')
Import = translate('OpenLP.Ui', 'Import')
LengthTime = unicode(translate('OpenLP.Ui', 'Length %s'))
@ -64,6 +65,7 @@ class UiStrings(object):
LiveBGError = translate('OpenLP.Ui', 'Live Background Error')
LivePanel = translate('OpenLP.Ui', 'Live Panel')
Load = translate('OpenLP.Ui', 'Load')
Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes')
Middle = translate('OpenLP.Ui', 'Middle')
New = translate('OpenLP.Ui', 'New')
NewService = translate('OpenLP.Ui', 'New Service')
@ -75,6 +77,8 @@ class UiStrings(object):
OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x')
OLPV2 = translate('OpenLP.Ui', 'OpenLP 2.0')
OpenFile = translate('OpenLP.Ui', 'Open File')
OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you '
'wish to continue?')
OpenService = translate('OpenLP.Ui', 'Open Service')
Preview = translate('OpenLP.Ui', 'Preview')
PreviewPanel = translate('OpenLP.Ui', 'Preview Panel')
@ -83,7 +87,7 @@ class UiStrings(object):
ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background')
ResetBG = translate('OpenLP.Ui', 'Reset Background')
ResetLiveBG = translate('OpenLP.Ui', 'Reset Live Background')
S = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds')
Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds')
SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview')
Search = translate('OpenLP.Ui', 'Search')
SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.')

View File

@ -133,7 +133,7 @@ class Ui_AboutDialog(object):
u'en_ZA': [u'Raoul "superfly" Snyman'],
u'et': [u'Mattias "mahfiaz" P\xf5ldaru'],
u'fr': [u'Stephan\xe9 "stbrunner" Brunner'],
u'hu': [u'Gyuris Gell\xe9t'],
u'hu': [u'Gyuris Gell\xe9rt'],
u'ja': [u'Kunio "Kunio" Nakamaru'],
u'nb': [u'Atle "pendlaren" Weibell', u'Frode "frodus" Woldsund'],
u'nl': [u'Arjen "typovar" van Voorst'],

View File

@ -57,6 +57,7 @@ except ImportError:
from openlp.core.lib import translate, SettingsManager
from openlp.core.lib.mailto import mailto
from openlp.core.lib.ui import UiStrings
from openlp.core.utils import get_application_version
from exceptiondialog import Ui_ExceptionDialog
@ -78,7 +79,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
return QtGui.QDialog.exec_(self)
def _createReport(self):
openlp_version = self.parent().applicationVersion[u'full']
openlp_version = get_application_version()
description = unicode(self.descriptionTextEdit.toPlainText())
traceback = unicode(self.exceptionTextEdit.toPlainText())
system = unicode(translate('OpenLP.ExceptionForm',

View File

@ -105,6 +105,9 @@ class GeneralTab(SettingsTab):
self.saveCheckServiceCheckBox = QtGui.QCheckBox(self.settingsGroupBox)
self.saveCheckServiceCheckBox.setObjectName(u'saveCheckServiceCheckBox')
self.settingsLayout.addRow(self.saveCheckServiceCheckBox)
self.autoUnblankCheckBox = QtGui.QCheckBox(self.settingsGroupBox)
self.autoUnblankCheckBox.setObjectName(u'autoUnblankCheckBox')
self.settingsLayout.addRow(self.autoUnblankCheckBox)
self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox)
self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox')
self.settingsLayout.addRow(self.autoPreviewCheckBox)
@ -224,6 +227,8 @@ class GeneralTab(SettingsTab):
translate('OpenLP.GeneralTab', 'Application Settings'))
self.saveCheckServiceCheckBox.setText(translate('OpenLP.GeneralTab',
'Prompt to save before starting a new service'))
self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab',
'Unblank display when adding new live item'))
self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab',
'Automatically preview next item in service'))
self.timeoutLabel.setText(translate('OpenLP.GeneralTab',
@ -262,6 +267,8 @@ class GeneralTab(SettingsTab):
u'songselect password', QtCore.QVariant(u'')).toString()))
self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt',
QtCore.QVariant(False)).toBool())
self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank',
QtCore.QVariant(False)).toBool())
self.monitorComboBox.setCurrentIndex(self.monitorNumber)
self.displayOnMonitorCheck.setChecked(self.screens.display)
self.warningCheckBox.setChecked(settings.value(u'blank warning',
@ -312,6 +319,8 @@ class GeneralTab(SettingsTab):
QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked()))
settings.setValue(u'save prompt',
QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked()))
settings.setValue(u'auto unblank',
QtCore.QVariant(self.autoUnblankCheckBox.isChecked()))
settings.setValue(u'auto preview',
QtCore.QVariant(self.autoPreviewCheckBox.isChecked()))
settings.setValue(u'loop delay',

View File

@ -367,7 +367,7 @@ class MainDisplay(DisplayWidget):
self.mediaObject.setCurrentSource(Phonon.MediaSource(videoPath))
# Need the timer to trigger set the trigger to 200ms
# Value taken from web documentation.
if self.serviceItem.start_time != 0:
if self.serviceItem.end_time != 0:
self.mediaObject.setTickInterval(200)
self.mediaObject.play()
self.webView.setVisible(False)
@ -401,9 +401,9 @@ class MainDisplay(DisplayWidget):
def videoTick(self, tick):
"""
Triggered on video tick every 200 milli seconds
Will be used to manage stop time later
"""
pass
if tick > self.serviceItem.end_time * 1000:
self.videoFinished()
def isWebLoaded(self):
"""
@ -489,7 +489,11 @@ class MainDisplay(DisplayWidget):
self.footer(serviceItem.foot_text)
# if was hidden keep it hidden
if self.hideMode and self.isLive:
self.hideDisplay(self.hideMode)
if QtCore.QSettings().value(u'general/auto unblank',
QtCore.QVariant(False)).toBool():
Receiver.send_message(u'slidecontroller_live_unblank')
else:
self.hideDisplay(self.hideMode)
# display hidden for video end we have a new item so must be shown
if self.videoHide and self.isLive:
self.videoHide = False

View File

@ -469,7 +469,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
actionList = ActionList()
def __init__(self, screens, clipboard):
def __init__(self, screens, clipboard, arguments):
"""
This constructor sets up the interface, the various managers, and the
plugins.
@ -477,6 +477,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtGui.QMainWindow.__init__(self)
self.screens = screens
self.clipboard = clipboard
self.arguments = arguments
# Set up settings sections for the main application
# (not for use by plugins)
self.uiSettingsSection = u'user interface'
@ -660,7 +661,16 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
if self.liveController.display.isVisible():
self.liveController.display.setFocus()
self.activateWindow()
if QtCore.QSettings().value(
# On Windows, arguments contains the entire commandline
# So args[0]=='python' args[1]=='openlp.pyw'
# Therefore this approach is not going to work
# Bypass for now.
if len(self.arguments) and os.name != u'nt':
args = []
for a in self.arguments:
args.extend([a])
self.ServiceManagerContents.loadFile(unicode(args[0]))
elif QtCore.QSettings().value(
self.generalSettingsSection + u'/auto open',
QtCore.QVariant(False)).toBool():
self.ServiceManagerContents.loadLastFile()

View File

@ -33,12 +33,12 @@ from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize
class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
def __init__(self, parent, serviceManager):
def __init__(self, mainWindow, serviceManager):
"""
Constructor
"""
QtGui.QDialog.__init__(self, parent)
self.parent = parent
QtGui.QDialog.__init__(self, mainWindow)
self.mainWindow = mainWindow
self.serviceManager = serviceManager
self.printer = QtGui.QPrinter()
self.printDialog = QtGui.QPrintDialog(self.printer, self)
@ -134,9 +134,12 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
item.notes.replace(u'\n', u'<br />'))
# Add play length of media files.
if item.is_media() and self.metaDataCheckBox.isChecked():
tme = item.media_length
if item.end_time > 0:
tme = item.end_time - item.start_time
text += u'<p><strong>%s</strong> %s</p>' % (translate(
'OpenLP.ServiceManager', u'Playing time:'),
unicode(datetime.timedelta(seconds=item.media_length)))
unicode(datetime.timedelta(seconds=tme)))
if self.footerTextEdit.toPlainText():
text += u'<h4>%s</h4>%s' % (translate('OpenLP.ServiceManager',
u'Custom Service Notes:'), self.footerTextEdit.toPlainText())
@ -181,13 +184,14 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
"""
Copies the display text to the clipboard as plain text
"""
self.parent.clipboard.setText(self.document.toPlainText())
self.mainWindow.clipboard.setText(
self.document.toPlainText())
def copyHtmlText(self):
"""
Copies the display text to the clipboard as Html
"""
self.parent.clipboard.setText(self.document.toHtml())
self.mainWindow.clipboard.setText(self.document.toHtml())
def printServiceOrder(self):
"""

View File

@ -141,4 +141,3 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog):
else:
self.upButton.setEnabled(True)
self.deleteButton.setEnabled(True)

View File

@ -231,13 +231,15 @@ class ServiceManager(QtGui.QWidget):
QtCore.QObject.connect(self.themeComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive)
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onMakeLive)
QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed)
QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'servicemanager_preview_live'), self.previewLive)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'servicemanager_next_item'), self.nextItem)
QtCore.QObject.connect(Receiver.get_receiver(),
@ -561,6 +563,7 @@ class ServiceManager(QtGui.QWidget):
self.newFile()
for item in items:
serviceItem = ServiceItem()
serviceItem.from_service = True
serviceItem.render_manager = self.mainwindow.renderManager
serviceItem.set_from_service(item, self.servicePath)
self.validateItem(serviceItem)
@ -585,6 +588,21 @@ class ServiceManager(QtGui.QWidget):
message=translate('OpenLP.ServiceManager',
'File could not be opened because it is corrupt.'))
log.exception(u'Problem loading service file %s' % fileName)
except zipfile.BadZipfile:
if os.path.getsize(fileName) == 0:
log.exception(u'Service file is zero sized: %s' % fileName)
QtGui.QMessageBox.information(self,
translate('OpenLP.ServiceManager', 'Empty File'),
translate('OpenLP.ServiceManager', 'This service file '
'does not contain any data.'))
else:
log.exception(u'Service file is cannot be extracted as zip: '
u'%s' % fileName)
QtGui.QMessageBox.information(self,
translate('OpenLP.ServiceManager', 'Corrupt File'),
translate('OpenLP.ServiceManager', 'This file is either'
'corrupt or not an OpenLP 2.0 service file.'))
return
finally:
if fileTo:
fileTo.close()
@ -658,10 +676,6 @@ class ServiceManager(QtGui.QWidget):
item = self.findServiceItem()[0]
self.startTimeForm.item = self.serviceItems[item]
if self.startTimeForm.exec_():
self.serviceItems[item][u'service_item'].start_time = \
self.startTimeForm.hourSpinBox.value() * 3600 + \
self.startTimeForm.minuteSpinBox.value() * 60 + \
self.startTimeForm.secondSpinBox.value()
self.repaintServiceList(item, -1)
def onServiceItemEditForm(self):
@ -672,6 +686,19 @@ class ServiceManager(QtGui.QWidget):
self.addServiceItem(self.serviceItemEditForm.getServiceItem(),
replace=True, expand=self.serviceItems[item][u'expanded'])
def previewLive(self, message):
"""
Called by the SlideController to request a preview item be made live
and allows the next preview to be updated if relevent.
"""
id, row = message.split(u':')
for sitem in self.serviceItems:
if sitem[u'service_item']._uuid == id:
item = self.serviceManagerList.topLevelItem(sitem[u'order'] - 1)
self.serviceManagerList.setCurrentItem(item)
self.makeLive(int(row))
return
def nextItem(self):
"""
Called by the SlideController to select the next service item.
@ -1027,6 +1054,7 @@ class ServiceManager(QtGui.QWidget):
if expand is None:
expand = self.expandTabs
item.render()
item.from_service = True
if replace:
sitem, child = self.findServiceItem()
item.merge(self.serviceItems[sitem][u'service_item'])
@ -1081,11 +1109,24 @@ class ServiceManager(QtGui.QWidget):
else:
return self.serviceItems[item][u'service_item']
def makeLive(self):
def onMakeLive(self):
"""
Send the current item to the Live slide controller but triggered
by a tablewidget click event.
"""
self.makeLive()
def makeLive(self, row=-1):
"""
Send the current item to the Live slide controller
``row``
Row number to be displayed if from preview.
-1 is passed if the value is not set
"""
item, child = self.findServiceItem()
if row != -1:
child = row
if self.serviceItems[item][u'service_item'].is_valid:
self.mainwindow.liveController.addServiceManagerItem(
self.serviceItems[item][u'service_item'], child)

View File

@ -185,7 +185,7 @@ class SlideController(QtGui.QWidget):
self.delaySpinBox.setMinimum(1)
self.delaySpinBox.setMaximum(180)
self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox)
self.delaySpinBox.setSuffix(UiStrings.S)
self.delaySpinBox.setSuffix(UiStrings.Seconds)
self.delaySpinBox.setToolTip(translate('OpenLP.SlideController',
'Delay between slides in seconds'))
else:
@ -1014,8 +1014,12 @@ class SlideController(QtGui.QWidget):
"""
row = self.previewListWidget.currentRow()
if row > -1 and row < self.previewListWidget.rowCount():
self.parent.liveController.addServiceManagerItem(
self.serviceItem, row)
if self.serviceItem.from_service:
Receiver.send_message('servicemanager_preview_live',
u'%s:%s' % (self.serviceItem._uuid, row))
else:
self.parent.liveController.addServiceManagerItem(
self.serviceItem, row)
def onMediaStart(self, item):
"""

View File

@ -32,39 +32,90 @@ from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box
class Ui_StartTimeDialog(object):
def setupUi(self, StartTimeDialog):
StartTimeDialog.setObjectName(u'StartTimeDialog')
StartTimeDialog.resize(300, 10)
StartTimeDialog.resize(350, 10)
self.dialogLayout = QtGui.QGridLayout(StartTimeDialog)
self.dialogLayout.setObjectName(u'dialogLayout')
self.startLabel = QtGui.QLabel(StartTimeDialog)
self.startLabel.setObjectName(u'startLabel')
self.startLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.startLabel, 0, 1, 1, 1)
self.finishLabel = QtGui.QLabel(StartTimeDialog)
self.finishLabel.setObjectName(u'finishLabel')
self.finishLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.finishLabel, 0, 2, 1, 1)
self.lengthLabel = QtGui.QLabel(StartTimeDialog)
self.lengthLabel.setObjectName(u'startLabel')
self.lengthLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.lengthLabel, 0, 3, 1, 1)
self.hourLabel = QtGui.QLabel(StartTimeDialog)
self.hourLabel.setObjectName("hourLabel")
self.dialogLayout.addWidget(self.hourLabel, 0, 0, 1, 1)
self.hourLabel.setObjectName(u'hourLabel')
self.dialogLayout.addWidget(self.hourLabel, 1, 0, 1, 1)
self.hourSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.hourSpinBox.setObjectName("hourSpinBox")
self.dialogLayout.addWidget(self.hourSpinBox, 0, 1, 1, 1)
self.hourSpinBox.setObjectName(u'hourSpinBox')
self.hourSpinBox.setMinimum(0)
self.hourSpinBox.setMaximum(4)
self.dialogLayout.addWidget(self.hourSpinBox, 1, 1, 1, 1)
self.hourFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.hourFinishSpinBox.setObjectName(u'hourFinishSpinBox')
self.hourFinishSpinBox.setMinimum(0)
self.hourFinishSpinBox.setMaximum(4)
self.dialogLayout.addWidget(self.hourFinishSpinBox, 1, 2, 1, 1)
self.hourFinishLabel = QtGui.QLabel(StartTimeDialog)
self.hourFinishLabel.setObjectName(u'hourLabel')
self.hourFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.hourFinishLabel, 1, 3, 1, 1)
self.minuteLabel = QtGui.QLabel(StartTimeDialog)
self.minuteLabel.setObjectName("minuteLabel")
self.dialogLayout.addWidget(self.minuteLabel, 1, 0, 1, 1)
self.minuteLabel.setObjectName(u'minuteLabel')
self.dialogLayout.addWidget(self.minuteLabel, 2, 0, 1, 1)
self.minuteSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.minuteSpinBox.setObjectName("minuteSpinBox")
self.dialogLayout.addWidget(self.minuteSpinBox, 1, 1, 1, 1)
self.minuteSpinBox.setObjectName(u'minuteSpinBox')
self.minuteSpinBox.setMinimum(0)
self.minuteSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.minuteSpinBox, 2, 1, 1, 1)
self.minuteFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.minuteFinishSpinBox.setObjectName(u'minuteFinishSpinBox')
self.minuteFinishSpinBox.setMinimum(0)
self.minuteFinishSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.minuteFinishSpinBox, 2, 2, 1, 1)
self.minuteFinishLabel = QtGui.QLabel(StartTimeDialog)
self.minuteFinishLabel.setObjectName(u'minuteLabel')
self.minuteFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.minuteFinishLabel, 2, 3, 1, 1)
self.secondLabel = QtGui.QLabel(StartTimeDialog)
self.secondLabel.setObjectName("secondLabel")
self.dialogLayout.addWidget(self.secondLabel, 2, 0, 1, 1)
self.secondLabel.setObjectName(u'secondLabel')
self.dialogLayout.addWidget(self.secondLabel, 3, 0, 1, 1)
self.secondSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.secondSpinBox.setObjectName("secondSpinBox")
self.dialogLayout.addWidget(self.secondSpinBox, 2, 1, 1, 1)
self.secondSpinBox.setObjectName(u'secondSpinBox')
self.secondSpinBox.setMinimum(0)
self.secondSpinBox.setMaximum(59)
self.secondFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.secondFinishSpinBox.setObjectName(u'secondFinishSpinBox')
self.secondFinishSpinBox.setMinimum(0)
self.secondFinishSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.secondFinishSpinBox, 3, 2, 1, 1)
self.secondFinishLabel = QtGui.QLabel(StartTimeDialog)
self.secondFinishLabel.setObjectName(u'secondLabel')
self.secondFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.secondFinishLabel, 3, 3, 1, 1)
self.dialogLayout.addWidget(self.secondSpinBox, 3, 1, 1, 1)
self.buttonBox = create_accept_reject_button_box(StartTimeDialog, True)
self.dialogLayout.addWidget(self.buttonBox, 4, 0, 1, 2)
self.dialogLayout.addWidget(self.buttonBox, 5, 2, 1, 2)
self.retranslateUi(StartTimeDialog)
self.setMaximumHeight(self.sizeHint().height())
QtCore.QMetaObject.connectSlotsByName(StartTimeDialog)
def retranslateUi(self, StartTimeDialog):
self.setWindowTitle(translate('OpenLP.StartTimeForm',
'Item Start Time'))
'Item Start and Finish Time'))
self.hourSpinBox.setSuffix(UiStrings.Hours)
self.minuteSpinBox.setSuffix(UiStrings.Minutes)
self.secondSpinBox.setSuffix(UiStrings.Seconds)
self.hourFinishSpinBox.setSuffix(UiStrings.Hours)
self.minuteFinishSpinBox.setSuffix(UiStrings.Minutes)
self.secondFinishSpinBox.setSuffix(UiStrings.Seconds)
self.hourLabel.setText(translate('OpenLP.StartTimeForm', 'Hours:'))
self.hourSpinBox.setSuffix(translate('OpenLP.StartTimeForm', 'h'))
self.minuteSpinBox.setSuffix(translate('OpenLP.StartTimeForm', 'm'))
self.secondSpinBox.setSuffix(UiStrings.S)
self.minuteLabel.setText(translate('OpenLP.StartTimeForm', 'Minutes:'))
self.secondLabel.setText(translate('OpenLP.StartTimeForm', 'Seconds:'))
self.startLabel.setText(translate('OpenLP.StartTimeForm', 'Start'))
self.finishLabel.setText(translate('OpenLP.StartTimeForm', 'Finish'))
self.lengthLabel.setText(translate('OpenLP.StartTimeForm', 'Length'))

View File

@ -28,6 +28,9 @@ from PyQt4 import QtGui
from starttimedialog import Ui_StartTimeDialog
from openlp.core.lib import translate
from openlp.core.lib.ui import UiStrings, critical_error_message_box
class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog):
"""
The exception dialog
@ -40,13 +43,51 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog):
"""
Run the Dialog with correct heading.
"""
seconds = self.item[u'service_item'].start_time
hour, minutes, seconds = self._time_split(
self.item[u'service_item'].start_time)
self.hourSpinBox.setValue(hour)
self.minuteSpinBox.setValue(minutes)
self.secondSpinBox.setValue(seconds)
hours, minutes, seconds = self._time_split(
self.item[u'service_item'].media_length)
self.hourFinishSpinBox.setValue(hours)
self.minuteFinishSpinBox.setValue(minutes)
self.secondFinishSpinBox.setValue(seconds)
self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), UiStrings.Hours))
self.minuteFinishLabel.setText(u'%s%s' %
(unicode(minutes), UiStrings.Minutes))
self.secondFinishLabel.setText(u'%s%s' %
(unicode(seconds), UiStrings.Seconds))
return QtGui.QDialog.exec_(self)
def accept(self):
start = self.hourSpinBox.value() * 3600 + \
self.minuteSpinBox.value() * 60 + \
self.secondSpinBox.value()
end = self.hourFinishSpinBox.value() * 3600 + \
self.minuteFinishSpinBox.value() * 60 + \
self.secondFinishSpinBox.value()
if end > self.item[u'service_item'].media_length:
critical_error_message_box(
title=translate('OpenLP.StartTimeForm',
'Time Validation Error'),
message=translate('OpenLP.StartTimeForm',
'End time is set after the end of the media item'))
return
elif start > end:
critical_error_message_box(
title=translate('OpenLP.StartTimeForm',
'Time Validation Error'),
message=translate('OpenLP.StartTimeForm',
'Start time is after the End Time of the media item'))
return
self.item[u'service_item'].start_time = start
self.item[u'service_item'].end_time = end
return QtGui.QDialog.accept(self)
def _time_split(self, seconds):
hours = seconds / 3600
seconds -= 3600 * hours
minutes = seconds / 60
seconds -= 60 * minutes
self.hourSpinBox.setValue(hours)
self.minuteSpinBox.setValue(minutes)
self.secondSpinBox.setValue(seconds)
return QtGui.QDialog.exec_(self)
return hours, minutes, seconds

View File

@ -91,7 +91,7 @@ class LanguageManager(object):
"""
Retrieve a saved language to use from settings
"""
settings = QtCore.QSettings(u'OpenLP', u'OpenLP')
settings = QtCore.QSettings()
language = unicode(settings.value(
u'general/language', QtCore.QVariant(u'[en]')).toString())
log.info(u'Language file: \'%s\' Loaded from conf file' % language)

View File

@ -112,7 +112,7 @@ class AlertsTab(SettingsTab):
self.FontSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit)
self.TimeoutLabel.setText(
translate('AlertsPlugin.AlertsTab', 'Alert timeout:'))
self.TimeoutSpinBox.setSuffix(UiStrings.S)
self.TimeoutSpinBox.setSuffix(UiStrings.Seconds)
self.PreviewGroupBox.setTitle(UiStrings.Preview)
self.FontPreview.setText(UiStrings.OLPV2)

View File

@ -45,7 +45,7 @@ class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog):
self.setupUi(self)
# Connecting signals and slots
QtCore.QObject.connect(self.splitButton,
QtCore.SIGNAL(u'pressed()'), self.onSplitButtonPressed)
QtCore.SIGNAL(u'clicked()'), self.onSplitButtonPressed)
def setText(self, text):
"""

View File

@ -93,7 +93,6 @@ window.OpenLP = {
},
setSlide: function (event) {
var slide = OpenLP.getElement(event);
console.log(slide);
var id = slide.attr("value");
var text = JSON.stringify({"request": {"id": id}});
$.getJSON(

View File

@ -269,6 +269,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if index is None:
index = VerseType.Other
verse[0][u'type'] = VerseType.Tags[index]
if verse[0][u'label'] == u'':
verse[0][u'label'] = u'1'
verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label'])
item = QtGui.QTableWidgetItem(verse[1])
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))

View File

@ -30,15 +30,16 @@ import chardet
import codecs
from openlp.core.lib import translate
from openlp.plugins.songs.lib import VerseType
from songimport import SongImport
log = logging.getLogger(__name__)
class CCLIFileImport(SongImport):
"""
The :class:`CCLIFileImport` class provides OpenLP with the ability to
import CCLI SongSelect song files in both .txt and .usr formats.
See http://www.ccli.com/ for more details.
The :class:`CCLIFileImport` class provides OpenLP with the ability to import
CCLI SongSelect song files in both .txt and .usr formats. See
`<http://www.ccli.com/>`_ for more details.
"""
def __init__(self, manager, **kwargs):
@ -55,7 +56,7 @@ class CCLIFileImport(SongImport):
def do_import(self):
"""
Import either a .usr or a .txt SongSelect file
Import either a ``.usr`` or a ``.txt`` SongSelect file.
"""
log.debug(u'Starting CCLI File Import')
song_total = len(self.import_source)
@ -67,6 +68,7 @@ class CCLIFileImport(SongImport):
(song_count, song_total))
filename = unicode(filename)
log.debug(u'Importing CCLI File: %s', filename)
self.set_defaults()
lines = []
if os.path.isfile(filename):
detect_file = open(filename, u'r')
@ -81,12 +83,10 @@ class CCLIFileImport(SongImport):
lines = infile.readlines()
ext = os.path.splitext(filename)[1]
if ext.lower() == u'.usr':
log.info(u'SongSelect .usr format file found %s: ',
filename)
log.info(u'SongSelect .usr format file found: %s', filename)
self.do_import_usr_file(lines)
elif ext.lower() == u'.txt':
log.info(u'SongSelect .txt format file found %s: ',
filename)
log.info(u'SongSelect .txt format file found: %s', filename)
self.do_import_txt_file(lines)
else:
log.info(u'Extension %s is not valid', filename)
@ -97,9 +97,8 @@ class CCLIFileImport(SongImport):
def do_import_usr_file(self, textList):
"""
The :func:`do_import_usr_file` method provides OpenLP
with the ability to import CCLI SongSelect songs in
*USR* file format
The :func:`do_import_usr_file` method provides OpenLP with the ability
to import CCLI SongSelect songs in *USR* file format.
``textList``
An array of strings containing the usr file content.
@ -108,35 +107,46 @@ class CCLIFileImport(SongImport):
``[File]``
USR file format first line
``Type=``
Indicates the file type
e.g. *Type=SongSelect Import File*
``Version=3.0``
File format version
``[S A2672885]``
Contains the CCLI Song number e.g. *2672885*
``Title=``
Contains the song title (e.g. *Title=Above All*)
``Author=``
Contains a | delimited list of the song authors
e.g. *Author=LeBlanc, Lenny | Baloche, Paul*
``Copyright=``
Contains a | delimited list of the song copyrights
e.g. Copyright=1999 Integrity's Hosanna! Music |
LenSongs Publishing (Verwaltet von Gerth Medien
Musikverlag)
``Admin=``
Contains the song administrator
e.g. *Admin=Gerth Medien Musikverlag*
``Themes=``
Contains a /t delimited list of the song themes
e.g. *Themes=Cross/tKingship/tMajesty/tRedeemer*
``Keys=``
Contains the keys in which the music is played??
e.g. *Keys=A*
``Fields=``
Contains a list of the songs fields in order /t delimited
e.g. *Fields=Vers 1/tVers 2/tChorus 1/tAndere 1*
``Words=``
Contains the songs various lyrics in order as shown by the
*Fields* description
@ -144,57 +154,60 @@ class CCLIFileImport(SongImport):
"""
log.debug(u'USR file text: %s', textList)
self.set_defaults()
song_author = u''
song_topics = u''
for line in textList:
if line.startswith(u'Title='):
song_name = line[6:].strip()
self.title = line[6:].strip()
elif line.startswith(u'Author='):
song_author = line[7:].strip()
elif line.startswith(u'Copyright='):
song_copyright = line[10:].strip()
self.copyright = line[10:].strip()
elif line.startswith(u'Themes='):
song_topics = line[7:].strip()
elif line.startswith(u'[S A'):
song_ccli = line[4:-3].strip()
self.ccli_number = line[4:-3].strip()
elif line.startswith(u'Fields='):
#Fields contain single line indicating verse, chorus, etc,
#/t delimited, same as with words field. store seperately
#and process at end.
# Fields contain single line indicating verse, chorus, etc,
# /t delimited, same as with words field. store seperately
# and process at end.
song_fields = line[7:].strip()
elif line.startswith(u'Words='):
song_words = line[6:].strip()
#Unhandled usr keywords:Type,Version,Admin,Themes,Keys
#Process Fields and words sections
# Unhandled usr keywords: Type, Version, Admin, Keys
# Process Fields and words sections.
check_first_verse_line = False
field_list = song_fields.split(u'/t')
words_list = song_words.split(u'/t')
for counter in range(0, len(field_list)):
if field_list[counter].startswith(u'Ver'):
verse_type = u'V'
verse_type = VerseType.Tags[VerseType.Verse]
elif field_list[counter].startswith(u'Ch'):
verse_type = u'C'
verse_type = VerseType.Tags[VerseType.Chorus]
elif field_list[counter].startswith(u'Br'):
verse_type = u'B'
else: #Other
verse_type = u'O'
verse_type = VerseType.Tags[VerseType.Bridge]
else:
verse_type = VerseType.Tags[VerseType.Other]
check_first_verse_line = True
verse_text = unicode(words_list[counter])
verse_text = verse_text.replace(u'/n', u'\n')
verse_lines = verse_text.split(u'\n', 1)
if check_first_verse_line:
if verse_lines[0].startswith(u'(PRE-CHORUS'):
verse_type = u'P'
verse_type = VerseType.Tags[VerseType.PreChorus]
log.debug(u'USR verse PRE-CHORUS: %s', verse_lines[0])
verse_text = verse_lines[1]
elif verse_lines[0].startswith(u'(BRIDGE'):
verse_type = u'B'
verse_type = VerseType.Tags[VerseType.Bridge]
log.debug(u'USR verse BRIDGE')
verse_text = verse_lines[1]
elif verse_lines[0].startswith(u'('):
verse_type = u'O'
verse_type = VerseType.Tags[VerseType.Other]
verse_text = verse_lines[1]
if len(verse_text) > 0:
self.add_verse(verse_text, verse_type)
check_first_verse_line = False
#Handle multiple authors
# Handle multiple authors
author_list = song_author.split(u'/')
if len(author_list) < 2:
author_list = song_author.split(u'|')
@ -204,16 +217,13 @@ class CCLIFileImport(SongImport):
self.add_author(u' '.join(reversed(separated)))
else:
self.add_author(author)
self.title = song_name
self.copyright = song_copyright
self.ccli_number = song_ccli
self.topics = [topic.strip() for topic in song_topics.split(u'/t')]
self.finish()
def do_import_txt_file(self, textList):
"""
The :func:`do_import_txt_file` method provides OpenLP
with the ability to import CCLI SongSelect songs in
*TXT* file format
The :func:`do_import_txt_file` method provides OpenLP with the ability
to import CCLI SongSelect songs in *TXT* file format.
``textList``
An array of strings containing the txt file content.
@ -243,12 +253,10 @@ class CCLIFileImport(SongImport):
"""
log.debug(u'TXT file text: %s', textList)
self.set_defaults()
line_number = 0
check_first_verse_line = False
verse_text = u''
song_comments = u''
song_copyright = u''
song_author = u''
verse_start = False
for line in textList:
clean_line = line.strip()
@ -258,12 +266,12 @@ class CCLIFileImport(SongImport):
elif verse_start:
if verse_text:
self.add_verse(verse_text, verse_type)
verse_text = ''
verse_text = u''
verse_start = False
else:
#line_number=0, song title
if line_number == 0:
song_name = clean_line
self.title = clean_line
line_number += 1
#line_number=1, verses
elif line_number == 1:
@ -271,37 +279,37 @@ class CCLIFileImport(SongImport):
if clean_line.startswith(u'CCLI'):
line_number += 1
ccli_parts = clean_line.split(' ')
song_ccli = ccli_parts[len(ccli_parts)-1]
self.ccli_number = ccli_parts[len(ccli_parts) - 1]
elif not verse_start:
# We have the verse descriptor
verse_desc_parts = clean_line.split(' ')
verse_desc_parts = clean_line.split(u' ')
if len(verse_desc_parts) == 2:
if verse_desc_parts[0].startswith(u'Ver'):
verse_type = u'V'
verse_type = VerseType.Tags[VerseType.Verse]
elif verse_desc_parts[0].startswith(u'Ch'):
verse_type = u'C'
verse_type = VerseType.Tags[VerseType.Chorus]
elif verse_desc_parts[0].startswith(u'Br'):
verse_type = u'B'
verse_type = VerseType.Tags[VerseType.Bridge]
else:
#we need to analyse the next line for
#verse type, so set flag
verse_type = u'O'
# we need to analyse the next line for
# verse type, so set flag
verse_type = VerseType.Tags[VerseType.Other]
check_first_verse_line = True
verse_number = verse_desc_parts[1]
else:
verse_type = u'O'
verse_type = VerseType.Tags[VerseType.Other]
verse_number = 1
verse_start = True
else:
#check first line for verse type
# check first line for verse type
if check_first_verse_line:
if line.startswith(u'(PRE-CHORUS'):
verse_type = u'P'
verse_type = VerseType.Tags[VerseType.PreChorus]
elif line.startswith(u'(BRIDGE'):
verse_type = u'B'
verse_type = VerseType.Tags[VerseType.Bridge]
# Handle all other misc types
elif line.startswith(u'('):
verse_type = u'O'
verse_type = VerseType.Tags[VerseType.Other]
else:
verse_text = verse_text + line
check_first_verse_line = False
@ -313,24 +321,19 @@ class CCLIFileImport(SongImport):
#line_number=2, copyright
if line_number == 2:
line_number += 1
song_copyright = clean_line
self.copyright = clean_line
#n=3, authors
elif line_number == 3:
line_number += 1
song_author = clean_line
#line_number=4, comments lines before last line
elif (line_number == 4) and \
(not clean_line.startswith(u'CCL')):
song_comments = song_comments + clean_line
elif line_number == 4 and not clean_line.startswith(u'CCL'):
self.comments += clean_line
# split on known separators
author_list = song_author.split(u'/')
if len(author_list) < 2:
author_list = song_author.split(u'|')
#Clean spaces before and after author names
# Clean spaces before and after author names.
for author_name in author_list:
self.add_author(author_name.strip())
self.title = song_name
self.copyright = song_copyright
self.ccli_number = song_ccli
self.comments = song_comments
self.finish()

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="hu_HU">
<!DOCTYPE TS>
<TS version="2.0" language="hu_HU">
<context>
<name>AlertPlugin.AlertForm</name>
<message>
@ -696,7 +697,7 @@ demand and thus an internet connection is required.</source>
<message>
<location filename="openlp/plugins/custom/customplugin.py" line="59"/>
<source>&lt;strong&gt;Custom Plugin&lt;/strong&gt;&lt;br /&gt;The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin.</source>
<translation>&lt;strong&gt;Speciális bővítmény&lt;/strong&gt;&lt;br /&gt;Az speciális bővítmény dalokhoz hasonló egyéni diák vetítését teszi lehetővé. Ugyanakkor több szabadságot enged meg, mint a dalok bővítmény.</translation>
<translation>&lt;strong&gt;Speciális bővítmény&lt;/strong&gt;&lt;br /&gt;Az speciális bővítmény dalokhoz hasonló egyéni diasor vetítését teszi lehetővé. Ugyanakkor több szabadságot enged meg, mint a dalok bővítmény.</translation>
</message>
</context>
<context>
@ -717,7 +718,7 @@ demand and thus an internet connection is required.</source>
<message>
<location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="106"/>
<source>Edit Custom Slides</source>
<translation>Speciális diák szerkesztése</translation>
<translation>Speciális diasor szerkesztése</translation>
</message>
<message>
<location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="108"/>
@ -841,7 +842,7 @@ demand and thus an internet connection is required.</source>
<message>
<location filename="openlp/plugins/images/imageplugin.py" line="44"/>
<source>&lt;strong&gt;Image Plugin&lt;/strong&gt;&lt;br /&gt;The image plugin provides displaying of images.&lt;br /&gt;One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP&apos;s &quot;timed looping&quot; feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme&apos;s background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme.</source>
<translation>&lt;strong&gt;Kép bővítmény&lt;/strong&gt;&lt;br /&gt;A kép a bővítmény különféle képek vetítését teszi lehetővé.&lt;br /&gt;A bővítmény egyik különös figyelmet érdemlő képessége az, hogy képes a sorrendkezelőn csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A bővítmény képes az OpenLP időzített körkörös lejátszásra is, amivel a diákat automatikusan tudjuk léptetni. Továbbá, a bővítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett.</translation>
<translation>&lt;strong&gt;Kép bővítmény&lt;/strong&gt;&lt;br /&gt;A kép a bővítmény különféle képek vetítését teszi lehetővé.&lt;br /&gt;A bővítmény egyik különös figyelmet érdemlő képessége az, hogy képes a sorrendkezelőn csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A bővítmény képes az OpenLP időzített körkörös lejátszásra is, amivel a diasort automatikusan tudjuk léptetni. Továbbá, a bővítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett.</translation>
</message>
<message>
<location filename="openlp/plugins/images/imageplugin.py" line="72"/>
@ -1078,7 +1079,7 @@ Find out more about OpenLP: http://openlp.org/
OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below.</source>
<translation>OpenLP &lt;version&gt; &lt;revision&gt; Nyílt forrású dalszöveg vetítő
Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetítő szabad szoftver, mely használható énekek, bibliai versek, videók, képek és bemutatók (ha az OpenOffice.org, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére a gyülekezeti dicsőítés alatt egy számítógép és egy projektor segítségével.
Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetítő szabad szoftver, mely énekek, bibliai versek, videók, képek és bemutatók (ha az OpenOffice.org, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére használható a gyülekezeti dicsőítés alatt egy számítógép és egy projektor segítségével.
Többet az OpenLP-ről: http://openlp.org/
@ -1221,12 +1222,12 @@ Végső köszönet
Úgy szerette Isten a világot, hogy
egyszülött Fiát adta oda, hogy egyetlen
benne hívő se vesszen el, hanem
örök élete legyen.&quot; János 3,16
örök élete legyen. (Jn 3,16)
És végül, de nem utolsósorban, a végső köszönet
Istené, Atyánké, mert elküldte a Fiát, hogy meghaljon
a kereszten, megszabadítva bennünket a bűntől. Ezért
ezt a programot ingyen készítettük neked, mert Ő
ezt a programot szabadnak és ingyenesnek készítettük, mert Ő
tett minket szabaddá.</translation>
</message>
<message>
@ -1245,14 +1246,12 @@ Tinggaard, Frode Woldsund</translation>
<message>
<location filename="openlp/core/ui/aboutdialog.py" line="231"/>
<source>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.</source>
<translation>Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint -- 2. verzió --, melyet a Szabad Szoftver Alapítvány ad ki.
</translation>
<translation>Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki.</translation>
</message>
<message>
<location filename="openlp/core/ui/aboutdialog.py" line="236"/>
<source>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details.</source>
<translation>Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részletekért lásd a alább.
</translation>
<translation>Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részletekért lásd a alább.</translation>
</message>
</context>
<context>
@ -1343,7 +1342,7 @@ Tinggaard, Frode Woldsund</translation>
<message>
<location filename="openlp/core/ui/displaytagdialog.py" line="135"/>
<source>Start tag</source>
<translation>Kezdő címke</translation>
<translation>Nyitó címke</translation>
</message>
<message>
<location filename="openlp/core/ui/displaytagdialog.py" line="137"/>
@ -1358,12 +1357,12 @@ Tinggaard, Frode Woldsund</translation>
<message>
<location filename="openlp/core/ui/displaytagdialog.py" line="145"/>
<source>Tag Id</source>
<translation>Címke ID</translation>
<translation>ID</translation>
</message>
<message>
<location filename="openlp/core/ui/displaytagdialog.py" line="147"/>
<source>Start HTML</source>
<translation>Kezdő HTML</translation>
<translation>Nyitó HTML</translation>
</message>
<message>
<location filename="openlp/core/ui/displaytagdialog.py" line="149"/>
@ -1394,7 +1393,7 @@ Tinggaard, Frode Woldsund</translation>
<message>
<location filename="openlp/core/ui/exceptiondialog.py" line="102"/>
<source>Oops! OpenLP hit a problem, and couldn&apos;t recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred.</source>
<translation>Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alábbi dobozban található szöveg olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejlesztői számára, tehát kérjük, küld el bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen merre és mit tettél, amikor a hiba történt.</translation>
<translation>Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alszövegdoboz olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejlesztői számára, tehát kérjük, küld el a bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen hol és mit tettél, amikor a hiba történt.</translation>
</message>
<message>
<location filename="openlp/core/ui/exceptiondialog.py" line="97"/>
@ -1415,13 +1414,12 @@ Tinggaard, Frode Woldsund</translation>
<location filename="openlp/core/ui/exceptiondialog.py" line="99"/>
<source>Please enter a description of what you were doing to cause this error
(Minimum 20 characters)</source>
<translation>Írd le mit tettél, ami a hibát okozta
(minimum 20 karakter)</translation>
<translation>Írd le mit tettél, ami a hibához vezetett (minimum 20 karakter)</translation>
</message>
<message>
<location filename="openlp/core/ui/exceptiondialog.py" line="112"/>
<source>Attach File</source>
<translation>Csatolt fájl</translation>
<translation>Fájl csatolása</translation>
</message>
<message>
<location filename="openlp/core/ui/exceptionform.py" line="171"/>
@ -1536,7 +1534,7 @@ Version: %s
<message>
<location filename="openlp/core/ui/firsttimeform.py" line="252"/>
<source>Enabling selected plugins...</source>
<translation>Kijelölt beépülők engedélyezése</translation>
<translation>Kijelölt bővítmények engedélyezése</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="191"/>
@ -1556,12 +1554,12 @@ Version: %s
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="201"/>
<source>Activate required Plugins</source>
<translation>Szükséges beépülők aktiválása</translation>
<translation>Igényelt bővítmények aktiválása</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="203"/>
<source>Select the Plugins you wish to use. </source>
<translation>Jelöld ki az alkalmazni kívánt beépülőket.</translation>
<translation>Jelöld ki az alkalmazni kívánt bővítményeket.</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="205"/>
@ -1571,7 +1569,7 @@ Version: %s
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="206"/>
<source>Custom Text</source>
<translation>Egyedi szöveg</translation>
<translation>Speciális</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="208"/>
@ -1596,17 +1594,17 @@ Version: %s
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="215"/>
<source>Allow remote access</source>
<translation>Távvezérlés engedélyezése</translation>
<translation>Távvezérlő</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="217"/>
<source>Monitor Song Usage</source>
<translation>Dalstatisztika monitorozása</translation>
<translation>Dalstatisztika</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="219"/>
<source>Allow Alerts</source>
<translation>Értesítések engedélyezése</translation>
<translation>Értesítések</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="221"/>
@ -1679,7 +1677,7 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="252"/>
<source>Please wait while OpenLP is set up and your data is imported.</source>
<translation>Várj, amíg az OpenLP beállítások érvényre jutnak és míg at adatok importálódnak.</translation>
<translation>Várj, amíg az OpenLP beállítások érvényre jutnak és míg az adatok importálódnak.</translation>
</message>
<message>
<location filename="openlp/core/ui/firsttimewizard.py" line="254"/>
@ -1757,7 +1755,7 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go
<message>
<location filename="openlp/core/ui/generaltab.py" line="229"/>
<source>Slide loop delay:</source>
<translation>Időzített diák késleltetése:</translation>
<translation>Időzített dia késleltetése:</translation>
</message>
<message>
<location filename="openlp/core/ui/generaltab.py" line="231"/>
@ -1818,12 +1816,12 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go
<context>
<name>OpenLP.LanguageManager</name>
<message>
<location filename="openlp/core/utils/languagemanager.py" line="130"/>
<location filename="openlp/core/utils/languagemanager.py" line="132"/>
<source>Language</source>
<translation>Nyelv</translation>
</message>
<message>
<location filename="openlp/core/utils/languagemanager.py" line="130"/>
<location filename="openlp/core/utils/languagemanager.py" line="132"/>
<source>Please restart OpenLP to use your new language setting.</source>
<translation>A nyelvi beállítások az OpenLP újraindítása után lépnek érvénybe.</translation>
</message>
@ -1839,347 +1837,347 @@ Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés go
<context>
<name>OpenLP.MainWindow</name>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="313"/>
<location filename="openlp/core/ui/mainwindow.py" line="315"/>
<source>&amp;File</source>
<translation>&amp;Fájl</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="314"/>
<location filename="openlp/core/ui/mainwindow.py" line="316"/>
<source>&amp;Import</source>
<translation>&amp;Importálás</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="315"/>
<location filename="openlp/core/ui/mainwindow.py" line="317"/>
<source>&amp;Export</source>
<translation>&amp;Exportálás</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="316"/>
<location filename="openlp/core/ui/mainwindow.py" line="318"/>
<source>&amp;View</source>
<translation>&amp;Nézet</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="317"/>
<location filename="openlp/core/ui/mainwindow.py" line="319"/>
<source>M&amp;ode</source>
<translation>&amp;Mód</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="318"/>
<location filename="openlp/core/ui/mainwindow.py" line="320"/>
<source>&amp;Tools</source>
<translation>&amp;Eszközök</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="319"/>
<location filename="openlp/core/ui/mainwindow.py" line="321"/>
<source>&amp;Settings</source>
<translation>&amp;Beállítások</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="368"/>
<location filename="openlp/core/ui/mainwindow.py" line="370"/>
<source>&amp;Language</source>
<translation>&amp;Nyelv</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="322"/>
<location filename="openlp/core/ui/mainwindow.py" line="324"/>
<source>&amp;Help</source>
<translation>&amp;Súgó</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="323"/>
<location filename="openlp/core/ui/mainwindow.py" line="325"/>
<source>Media Manager</source>
<translation>Médiakezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="325"/>
<location filename="openlp/core/ui/mainwindow.py" line="327"/>
<source>Service Manager</source>
<translation>Sorrendkezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="327"/>
<location filename="openlp/core/ui/mainwindow.py" line="329"/>
<source>Theme Manager</source>
<translation>Témakezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="329"/>
<location filename="openlp/core/ui/mainwindow.py" line="331"/>
<source>&amp;New</source>
<translation>&amp;Új</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="332"/>
<location filename="openlp/core/ui/mainwindow.py" line="334"/>
<source>Ctrl+N</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="333"/>
<location filename="openlp/core/ui/mainwindow.py" line="335"/>
<source>&amp;Open</source>
<translation>Meg&amp;nyitás</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="335"/>
<location filename="openlp/core/ui/mainwindow.py" line="337"/>
<source>Open an existing service.</source>
<translation>Meglévő sorrend megnyitása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="337"/>
<location filename="openlp/core/ui/mainwindow.py" line="339"/>
<source>Ctrl+O</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="338"/>
<location filename="openlp/core/ui/mainwindow.py" line="340"/>
<source>&amp;Save</source>
<translation>&amp;Mentés</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="340"/>
<location filename="openlp/core/ui/mainwindow.py" line="342"/>
<source>Save the current service to disk.</source>
<translation>Aktuális sorrend mentése lemezre.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="342"/>
<location filename="openlp/core/ui/mainwindow.py" line="344"/>
<source>Ctrl+S</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="343"/>
<location filename="openlp/core/ui/mainwindow.py" line="345"/>
<source>Save &amp;As...</source>
<translation>Mentés &amp;sként</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="345"/>
<location filename="openlp/core/ui/mainwindow.py" line="347"/>
<source>Save Service As</source>
<translation>Sorrend mentése másként</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="347"/>
<location filename="openlp/core/ui/mainwindow.py" line="349"/>
<source>Save the current service under a new name.</source>
<translation>Az aktuális sorrend más néven való mentése.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="349"/>
<location filename="openlp/core/ui/mainwindow.py" line="351"/>
<source>Ctrl+Shift+S</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="356"/>
<location filename="openlp/core/ui/mainwindow.py" line="358"/>
<source>E&amp;xit</source>
<translation>&amp;Kilépés</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="358"/>
<location filename="openlp/core/ui/mainwindow.py" line="360"/>
<source>Quit OpenLP</source>
<translation>OpenLP bezárása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="360"/>
<location filename="openlp/core/ui/mainwindow.py" line="362"/>
<source>Alt+F4</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="366"/>
<location filename="openlp/core/ui/mainwindow.py" line="368"/>
<source>&amp;Theme</source>
<translation>&amp;Téma</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="374"/>
<location filename="openlp/core/ui/mainwindow.py" line="376"/>
<source>&amp;Configure OpenLP...</source>
<translation>OpenLP &amp;beállítása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="376"/>
<location filename="openlp/core/ui/mainwindow.py" line="378"/>
<source>&amp;Media Manager</source>
<translation>&amp;Médiakezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="378"/>
<location filename="openlp/core/ui/mainwindow.py" line="380"/>
<source>Toggle Media Manager</source>
<translation>Médiakezelő átváltása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="380"/>
<location filename="openlp/core/ui/mainwindow.py" line="382"/>
<source>Toggle the visibility of the media manager.</source>
<translation>A médiakezelő láthatóságának átváltása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="382"/>
<location filename="openlp/core/ui/mainwindow.py" line="384"/>
<source>F8</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="384"/>
<location filename="openlp/core/ui/mainwindow.py" line="386"/>
<source>&amp;Theme Manager</source>
<translation>&amp;Témakezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="386"/>
<location filename="openlp/core/ui/mainwindow.py" line="388"/>
<source>Toggle Theme Manager</source>
<translation>Témakezelő átváltása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="388"/>
<location filename="openlp/core/ui/mainwindow.py" line="390"/>
<source>Toggle the visibility of the theme manager.</source>
<translation>A témakezelő láthatóságának átváltása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="390"/>
<location filename="openlp/core/ui/mainwindow.py" line="392"/>
<source>F10</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="392"/>
<location filename="openlp/core/ui/mainwindow.py" line="394"/>
<source>&amp;Service Manager</source>
<translation>&amp;Sorrendkezelő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="394"/>
<location filename="openlp/core/ui/mainwindow.py" line="396"/>
<source>Toggle Service Manager</source>
<translation>Sorrendkezelő átváltása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="396"/>
<location filename="openlp/core/ui/mainwindow.py" line="398"/>
<source>Toggle the visibility of the service manager.</source>
<translation>A sorrendkezelő láthatóságának átváltása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="398"/>
<location filename="openlp/core/ui/mainwindow.py" line="400"/>
<source>F9</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="400"/>
<location filename="openlp/core/ui/mainwindow.py" line="402"/>
<source>&amp;Preview Panel</source>
<translation>&amp;Előnézet panel</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="402"/>
<location filename="openlp/core/ui/mainwindow.py" line="404"/>
<source>Toggle Preview Panel</source>
<translation>Előnézet panel átváltása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="404"/>
<location filename="openlp/core/ui/mainwindow.py" line="406"/>
<source>Toggle the visibility of the preview panel.</source>
<translation>Az előnézet panel láthatóságának átváltása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="406"/>
<location filename="openlp/core/ui/mainwindow.py" line="408"/>
<source>F11</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="408"/>
<location filename="openlp/core/ui/mainwindow.py" line="410"/>
<source>&amp;Live Panel</source>
<translation>&amp;É adás panel</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="410"/>
<location filename="openlp/core/ui/mainwindow.py" line="412"/>
<source>Toggle Live Panel</source>
<translation>É adás panel átváltása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="412"/>
<location filename="openlp/core/ui/mainwindow.py" line="414"/>
<source>Toggle the visibility of the live panel.</source>
<translation>Az é adás panel láthatóságának átváltása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="414"/>
<location filename="openlp/core/ui/mainwindow.py" line="416"/>
<source>F12</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="416"/>
<location filename="openlp/core/ui/mainwindow.py" line="418"/>
<source>&amp;Plugin List</source>
<translation>&amp;Bővítménylista</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="418"/>
<location filename="openlp/core/ui/mainwindow.py" line="420"/>
<source>List the Plugins</source>
<translation>Bővítmények listája</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="420"/>
<location filename="openlp/core/ui/mainwindow.py" line="422"/>
<source>Alt+F7</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="422"/>
<location filename="openlp/core/ui/mainwindow.py" line="424"/>
<source>&amp;User Guide</source>
<translation>&amp;Felhasználói kézikönyv</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="424"/>
<location filename="openlp/core/ui/mainwindow.py" line="426"/>
<source>&amp;About</source>
<translation>&amp;Névjegy</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="425"/>
<location filename="openlp/core/ui/mainwindow.py" line="427"/>
<source>More information about OpenLP</source>
<translation>További információ az OpenLP-ről</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="427"/>
<location filename="openlp/core/ui/mainwindow.py" line="429"/>
<source>Ctrl+F1</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="429"/>
<location filename="openlp/core/ui/mainwindow.py" line="431"/>
<source>&amp;Online Help</source>
<translation>&amp;Online súgó</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="434"/>
<location filename="openlp/core/ui/mainwindow.py" line="433"/>
<source>&amp;Web Site</source>
<translation>&amp;Weboldal</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="442"/>
<location filename="openlp/core/ui/mainwindow.py" line="441"/>
<source>Use the system language, if available.</source>
<translation>Rendszernyelv használata, ha elérhető.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="438"/>
<location filename="openlp/core/ui/mainwindow.py" line="437"/>
<source>Set the interface language to %s</source>
<translation>A felhasználói felület nyelvének átváltása erre: %s</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="444"/>
<location filename="openlp/core/ui/mainwindow.py" line="443"/>
<source>Add &amp;Tool...</source>
<translation>&amp;Eszköz hozzáadása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="446"/>
<location filename="openlp/core/ui/mainwindow.py" line="445"/>
<source>Add an application to the list of tools.</source>
<translation>Egy alkalmazás hozzáadása az eszközök listához.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="452"/>
<location filename="openlp/core/ui/mainwindow.py" line="451"/>
<source>&amp;Default</source>
<translation>&amp;Alapértelmezett</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="454"/>
<location filename="openlp/core/ui/mainwindow.py" line="453"/>
<source>Set the view mode back to the default.</source>
<translation>Nézetmód visszaállítása az alapértelmezettre.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="456"/>
<location filename="openlp/core/ui/mainwindow.py" line="455"/>
<source>&amp;Setup</source>
<translation>&amp;Szerkesztés</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="457"/>
<location filename="openlp/core/ui/mainwindow.py" line="456"/>
<source>Set the view mode to Setup.</source>
<translation>Nézetmód váltása a Beállítás módra.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="459"/>
<location filename="openlp/core/ui/mainwindow.py" line="458"/>
<source>&amp;Live</source>
<translation>&amp;É adás</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="460"/>
<location filename="openlp/core/ui/mainwindow.py" line="459"/>
<source>Set the view mode to Live.</source>
<translation>Nézetmód váltása a É módra.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="648"/>
<location filename="openlp/core/ui/mainwindow.py" line="645"/>
<source>Version %s of OpenLP is now available for download (you are currently running version %s).
You can download the latest version from http://openlp.org/.</source>
@ -2188,27 +2186,27 @@ You can download the latest version from http://openlp.org/.</source>
A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="652"/>
<location filename="openlp/core/ui/mainwindow.py" line="649"/>
<source>OpenLP Version Updated</source>
<translation>OpenLP verziófrissítés</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="704"/>
<location filename="openlp/core/ui/mainwindow.py" line="701"/>
<source>OpenLP Main Display Blanked</source>
<translation>Sötét OpenLP képernyő</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="704"/>
<location filename="openlp/core/ui/mainwindow.py" line="701"/>
<source>The Main Display has been blanked out</source>
<translation>A képernyő el lett sötétítve</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="920"/>
<location filename="openlp/core/ui/mainwindow.py" line="910"/>
<source>Default Theme: %s</source>
<translation>Alapértelmezett téma: %s</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="370"/>
<location filename="openlp/core/ui/mainwindow.py" line="372"/>
<source>Configure &amp;Shortcuts...</source>
<translation>&amp;Gyorsbillentyűk beállítása</translation>
</message>
@ -2219,42 +2217,42 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.</translatio
<translation>Magyar</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="352"/>
<location filename="openlp/core/ui/mainwindow.py" line="354"/>
<source>Print the current Service Order.</source>
<translation>Az aktuális sorrend nyomtatása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="354"/>
<location filename="openlp/core/ui/mainwindow.py" line="356"/>
<source>Ctrl+P</source>
<translation></translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="372"/>
<location filename="openlp/core/ui/mainwindow.py" line="374"/>
<source>&amp;Configure Display Tags</source>
<translation>Megjelenítési &amp;címkek beállítása</translation>
<translation>Megjelenítési &amp;címkék beállítása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="440"/>
<location filename="openlp/core/ui/mainwindow.py" line="439"/>
<source>&amp;Autodetect</source>
<translation>&amp;Automatikus felismerés</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="448"/>
<location filename="openlp/core/ui/mainwindow.py" line="447"/>
<source>Open &amp;Data Folder...</source>
<translation>&amp;Adatmappa megnyitása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="450"/>
<location filename="openlp/core/ui/mainwindow.py" line="449"/>
<source>Open the folder where songs, bibles and other data resides.</source>
<translation>A dalokat, Bibliákat és egyéb adatokat tartalmazó mappa megnyitása.</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="842"/>
<location filename="openlp/core/ui/mainwindow.py" line="832"/>
<source>Close OpenLP</source>
<translation>OpenLP bezárása</translation>
</message>
<message>
<location filename="openlp/core/ui/mainwindow.py" line="842"/>
<location filename="openlp/core/ui/mainwindow.py" line="832"/>
<source>Are you sure you want to close OpenLP?</source>
<translation>Biztosan bezárható az OpenLP?</translation>
</message>
@ -3158,7 +3156,7 @@ A tartalom kódolása nem UTF-8.</translation>
<message>
<location filename="openlp/core/ui/themewizard.py" line="448"/>
<source>Define the font and display characteristics for the Display text</source>
<translation>A szöveg betűkészlete és a megjelenési tulajdonságai</translation>
<translation>A szöveg betűkészlete és megjelenési tulajdonságai</translation>
</message>
<message>
<location filename="openlp/core/ui/themewizard.py" line="473"/>
@ -3203,7 +3201,7 @@ A tartalom kódolása nem UTF-8.</translation>
<message>
<location filename="openlp/core/ui/themewizard.py" line="470"/>
<source>Define the font and display characteristics for the Footer text</source>
<translation>A lábléc szöveg betűkészlete és a megjelenési tulajdonságai</translation>
<translation>A lábléc szöveg betűkészlete és megjelenési tulajdonságai</translation>
</message>
<message>
<location filename="openlp/core/ui/themewizard.py" line="477"/>
@ -3293,7 +3291,7 @@ A tartalom kódolása nem UTF-8.</translation>
<message>
<location filename="openlp/core/ui/themewizard.py" line="530"/>
<source>View the theme and save it replacing the current one or change the name to create a new theme</source>
<translation>A téma előnézete és mentése. Felülírható már egy meglévő vagy egy új név megadásával új téma hozható létre</translation>
<translation>A téma előnézete és mentése: egy már meglévő téma felülírható vagy egy új név megadásával új téma hozható létre</translation>
</message>
<message>
<location filename="openlp/core/ui/themewizard.py" line="534"/>
@ -4439,7 +4437,7 @@ A kódlap felelős a karakterek helyes megjelenítéséért.</translation>
<message>
<location filename="openlp/plugins/songs/forms/editsongform.py" line="367"/>
<source>You have not selected a valid author. Either select an author from the list, or type in a new author and click the &quot;Add Author to Song&quot; button to add the new author.</source>
<translation>Nincs kijelölve egyetlen szerző sem. Vagy válassz egy szerzőt a listából, vagy írj az új szerző mezőbe és kattints az Szerző hozzáadása a dalhoz gombon a szerző megjelöléséhez.</translation>
<translation>Nincs kijelölve egyetlen szerző sem. Vagy válassz egy szerzőt a listából, vagy írj az új szerző mezőbe és kattints a Hozzáadás gombra a szerző megjelöléséhez.</translation>
</message>
<message>
<location filename="openlp/plugins/songs/forms/editsongform.py" line="395"/>
@ -4459,7 +4457,7 @@ A kódlap felelős a karakterek helyes megjelenítéséért.</translation>
<message>
<location filename="openlp/plugins/songs/forms/editsongform.py" line="426"/>
<source>You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the &quot;Add Topic to Song&quot; button to add the new topic.</source>
<translation>Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mezőbe és kattints a Témakör hozzáadása a dalhoz gombon a témakör megjelöléséhez.</translation>
<translation>Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mezőbe és kattints a Hozzáadás gombraa témakör megjelöléséhez.</translation>
</message>
<message>
<location filename="openlp/plugins/songs/forms/editsongform.py" line="561"/>

View File

@ -394,10 +394,7 @@ if __name__ == '__main__':
--template Info.plist.master \
--expandto %(target_directory)s/Info.plist' \
% { 'config_file' : options.config, 'target_directory' : os.getcwd() })
os.system('python expander.py --config %(config_file)s \
--template version.master \
--expandto %(target_directory)s/.version' \
% { 'config_file' : options.config, 'target_directory' : os.getcwd() })
os.system('python get_version.py > .version')
# prepare variables
app_name_lower = settings['openlp_appname'].lower()

View File

@ -0,0 +1,36 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
from bzrlib.branch import Branch
def get_version(path):
b = Branch.open_containing(path)[0]
b.lock_read()
result = '0.0.0'
try:
# Get the branch's latest revision number.
revno = b.revno()
# Convert said revision number into a bzr revision id.
revision_id = b.dotted_revno_to_revision_id((revno,))
# Get a dict of tags, with the revision id as the key.
tags = b.tags.get_reverse_tag_dict()
# Check if the latest
if revision_id in tags:
result = tags[revision_id][0]
else:
result = '%s-bzr%s' % (sorted(b.tags.get_tag_dict().keys())[-1], revno)
finally:
b.unlock()
return result
def get_path():
if len(sys.argv) > 1:
return os.path.abspath(sys.argv[1])
else:
return os.path.abspath('.')
if __name__ == u'__main__':
path = get_path()
print get_version(path)

View File

@ -2,7 +2,6 @@
openlp_appname = OpenLP
openlp_dmgname = OpenLP-1.9.4-bzrXXXX
openlp_version = XXXX
openlp_full_version = 1.9.4-latest
openlp_basedir = /Users/openlp/trunk
openlp_icon_file = openlp-logo-with-text.icns
openlp_dmg_icon_file = openlp-logo-420x420.png

View File

@ -1 +0,0 @@
%(openlp_full_version)s