This commit is contained in:
Tim Bentley 2016-12-22 15:12:03 +00:00
commit 126c5462a0
136 changed files with 2101 additions and 1925 deletions

View File

@ -1 +1 @@
2.4
2.5.0

View File

@ -129,21 +129,21 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication):
application_stylesheet += WIN_REPAIR_STYLESHEET
if application_stylesheet:
self.setStyleSheet(application_stylesheet)
show_splash = Settings().value('core/show splash')
if show_splash:
can_show_splash = Settings().value('core/show splash')
if can_show_splash:
self.splash = SplashScreen()
self.splash.show()
# make sure Qt really display the splash screen
self.processEvents()
# Check if OpenLP has been upgrade and if a backup of data should be created
self.backup_on_upgrade(has_run_wizard)
self.backup_on_upgrade(has_run_wizard, can_show_splash)
# start the main app window
self.main_window = MainWindow()
Registry().execute('bootstrap_initialise')
Registry().execute('bootstrap_post_set_up')
Registry().initialise = False
self.main_window.show()
if show_splash:
if can_show_splash:
# now kill the splashscreen
self.splash.finish(self.main_window)
log.debug('Splashscreen closed')
@ -177,6 +177,38 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication):
self.shared_memory.create(1)
return False
def is_data_path_missing(self):
"""
Check if the data folder path exists.
"""
data_folder_path = AppLocation.get_data_path()
if not os.path.exists(data_folder_path):
log.critical('Database was not found in: ' + data_folder_path)
status = QtWidgets.QMessageBox.critical(None, translate('OpenLP', 'Data Directory Error'),
translate('OpenLP', 'OpenLP data folder was not found in:\n\n{path}'
'\n\nThe location of the data folder was '
'previously changed from the OpenLP\'s '
'default location. If the data was stored on '
'removable device, that device needs to be '
'made available.\n\nYou may reset the data '
'location back to the default location, '
'or you can try to make the current location '
'available.\n\nDo you want to reset to the '
'default data location? If not, OpenLP will be '
'closed so you can try to fix the the problem.')
.format(path=data_folder_path),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes |
QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No)
if status == QtWidgets.QMessageBox.No:
# If answer was "No", return "True", it will shutdown OpenLP in def main
log.info('User requested termination')
return True
# If answer was "Yes", remove the custom data path thus resetting the default location.
Settings().remove('advanced/data path')
log.info('Database location has been reset to the default settings.')
return False
def hook_exception(self, exc_type, value, traceback):
"""
Add an exception hook so that any uncaught exceptions are displayed in this window rather than somewhere where
@ -192,13 +224,20 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication):
self.exception_form = ExceptionForm()
self.exception_form.exception_text_edit.setPlainText(''.join(format_exception(exc_type, value, traceback)))
self.set_normal_cursor()
is_splash_visible = False
if hasattr(self, 'splash') and self.splash.isVisible():
is_splash_visible = True
self.splash.hide()
self.exception_form.exec()
if is_splash_visible:
self.splash.show()
def backup_on_upgrade(self, has_run_wizard):
def backup_on_upgrade(self, has_run_wizard, can_show_splash):
"""
Check if OpenLP has been upgraded, and ask if a backup of data should be made
:param has_run_wizard: OpenLP has been run before
:param can_show_splash: Should OpenLP show the splash screen
"""
data_version = Settings().value('core/application version')
openlp_version = get_application_version()['version']
@ -207,9 +246,11 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication):
Settings().setValue('core/application version', openlp_version)
# If data_version is different from the current version ask if we should backup the data folder
elif data_version != openlp_version:
if self.splash.isVisible():
self.splash.hide()
if QtWidgets.QMessageBox.question(None, translate('OpenLP', 'Backup'),
translate('OpenLP', 'OpenLP has been upgraded, do you want to create '
'a backup of OpenLPs data folder?'),
translate('OpenLP', 'OpenLP has been upgraded, do you want to create\n'
'a backup of the old data folder?'),
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes:
# Create copy of data folder
@ -223,12 +264,14 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication):
translate('OpenLP', 'Backup of the data folder failed!'))
return
message = translate('OpenLP',
'A backup of the data folder has been created'
'at {text}').format(text=data_folder_backup_path)
'A backup of the data folder has been created at:\n\n'
'{text}').format(text=data_folder_backup_path)
QtWidgets.QMessageBox.information(None, translate('OpenLP', 'Backup'), message)
# Update the version in the settings
Settings().setValue('core/application version', openlp_version)
if can_show_splash:
self.splash.show()
def process_events(self):
"""
@ -343,6 +386,7 @@ def main(args=None):
application.setOrganizationName('OpenLP')
application.setOrganizationDomain('openlp.org')
application.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
application.setAttribute(QtCore.Qt.AA_DontCreateNativeWidgetSiblings, True)
if args and args.portable:
application.setApplicationName('OpenLPPortable')
Settings.setDefaultFormat(Settings.IniFormat)
@ -368,9 +412,13 @@ def main(args=None):
Registry.create()
Registry().register('application', application)
application.setApplicationVersion(get_application_version()['version'])
# Instance check
# Check if an instance of OpenLP is already running. Quit if there is a running instance and the user only wants one
if application.is_already_running():
sys.exit()
# If the custom data path is missing and the user wants to restore the data path, quit OpenLP.
if application.is_data_path_missing():
application.shared_memory.detach()
sys.exit()
# Remove/convert obsolete settings.
Settings().remove_obsolete_settings()
# First time checks in settings

View File

@ -22,7 +22,9 @@
"""
The :mod:`openlp.core.utils` module provides the utility libraries for OpenLP.
"""
import hashlib
import logging
import os
import socket
import sys
import time
@ -32,7 +34,7 @@ import urllib.request
from http.client import HTTPException
from random import randint
from openlp.core.common import Registry
from openlp.core.common import Registry, trace_error_handler
log = logging.getLogger(__name__ + '.__init__')
@ -92,7 +94,7 @@ class HTTPRedirectHandlerFixed(urllib.request.HTTPRedirectHandler):
return super(HTTPRedirectHandlerFixed, self).redirect_request(req, fp, code, msg, headers, fixed_url)
def _get_user_agent():
def get_user_agent():
"""
Return a user agent customised for the platform the user is on.
"""
@ -122,7 +124,7 @@ def get_web_page(url, header=None, update_openlp=False):
urllib.request.install_opener(opener)
req = urllib.request.Request(url)
if not header or header[0].lower() != 'user-agent':
user_agent = _get_user_agent()
user_agent = get_user_agent()
req.add_header('User-Agent', user_agent)
if header:
req.add_header(header[0], header[1])
@ -179,4 +181,75 @@ def get_web_page(url, header=None, update_openlp=False):
return page
def get_url_file_size(url):
"""
Get the size of a file.
:param url: The URL of the file we want to download.
"""
retries = 0
while True:
try:
site = urllib.request.urlopen(url, timeout=CONNECTION_TIMEOUT)
meta = site.info()
return int(meta.get("Content-Length"))
except urllib.error.URLError:
if retries > CONNECTION_RETRIES:
raise
else:
retries += 1
time.sleep(0.1)
continue
def url_get_file(callback, url, f_path, sha256=None):
""""
Download a file given a URL. The file is retrieved in chunks, giving the ability to cancel the download at any
point. Returns False on download error.
:param callback: the class which needs to be updated
:param url: URL to download
:param f_path: Destination file
:param sha256: The check sum value to be checked against the download value
"""
block_count = 0
block_size = 4096
retries = 0
while True:
try:
filename = open(f_path, "wb")
url_file = urllib.request.urlopen(url, timeout=CONNECTION_TIMEOUT)
if sha256:
hasher = hashlib.sha256()
# Download until finished or canceled.
while not callback.was_cancelled:
data = url_file.read(block_size)
if not data:
break
filename.write(data)
if sha256:
hasher.update(data)
block_count += 1
callback._download_progress(block_count, block_size)
filename.close()
if sha256 and hasher.hexdigest() != sha256:
log.error('sha256 sums did not match for file: {file}'.format(file=f_path))
os.remove(f_path)
return False
except (urllib.error.URLError, socket.timeout) as err:
trace_error_handler(log)
filename.close()
os.remove(f_path)
if retries > CONNECTION_RETRIES:
return False
else:
retries += 1
time.sleep(0.1)
continue
break
# Delete file if cancelled, it may be a partial file.
if callback.was_cancelled:
os.remove(f_path)
return True
__all__ = ['get_web_page']

View File

@ -235,8 +235,8 @@ class Settings(QtCore.QSettings):
('remotes/thumbnails', 'api/thumbnails', []),
('advanced/default image', 'core/logo file', []), # Default image renamed + moved to general after 2.4.
('shortcuts/escapeItem', 'shortcuts/desktopScreenEnable', []), # Escape item was removed in 2.6.
('shortcuts/offlineHelpItem', 'shortcuts/HelpItem', []), # Online and Offline help were combined in 2.6.
('shortcuts/onlineHelpItem', 'shortcuts/HelpItem', []) # Online and Offline help were combined in 2.6.
('shortcuts/offlineHelpItem', 'shortcuts/userManualItem', []), # Online and Offline help were combined in 2.6.
('shortcuts/onlineHelpItem', 'shortcuts/userManualItem', []) # Online and Offline help were combined in 2.6.
]
@staticmethod
@ -295,7 +295,7 @@ class Settings(QtCore.QSettings):
'shortcuts/fileSaveItem': [QtGui.QKeySequence(QtGui.QKeySequence.Save)],
'shortcuts/fileOpenItem': [QtGui.QKeySequence(QtGui.QKeySequence.Open)],
'shortcuts/goLive': [],
'shortcuts/HelpItem': [QtGui.QKeySequence(QtGui.QKeySequence.HelpContents)],
'shortcuts/userManualItem': [QtGui.QKeySequence(QtGui.QKeySequence.HelpContents)],
'shortcuts/importThemeItem': [],
'shortcuts/importBibleItem': [],
'shortcuts/listViewBiblesDeleteItem': [QtGui.QKeySequence(QtGui.QKeySequence.Delete)],

View File

@ -112,6 +112,7 @@ class UiStrings(object):
self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural')
self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular')
self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural')
self.NoResults = translate('OpenLP.Ui', 'No Search Results')
self.OLP = translate('OpenLP.Ui', 'OpenLP')
self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?')
self.OpenService = translate('OpenLP.Ui', 'Open service.')
@ -137,6 +138,7 @@ class UiStrings(object):
self.Settings = translate('OpenLP.Ui', 'Settings')
self.SaveService = translate('OpenLP.Ui', 'Save Service')
self.Service = translate('OpenLP.Ui', 'Service')
self.ShortResults = translate('OpenLP.Ui', 'Please type more text to use \'Search As You Type\'')
self.Split = translate('OpenLP.Ui', 'Optional &Split')
self.SplitToolTip = translate('OpenLP.Ui',
'Split a slide into two only if it does not fit on the screen as one slide.')

View File

@ -129,16 +129,16 @@ def build_icon(icon):
location like ``/path/to/file.png``. However, the **recommended** way is to specify a resource string.
:return: The build icon.
"""
button_icon = QtGui.QIcon()
if isinstance(icon, QtGui.QIcon):
button_icon = icon
elif isinstance(icon, str):
if icon.startswith(':/'):
button_icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
else:
button_icon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
return icon
pix_map = None
button_icon = QtGui.QIcon()
if isinstance(icon, str):
pix_map = QtGui.QPixmap(icon)
elif isinstance(icon, QtGui.QImage):
button_icon.addPixmap(QtGui.QPixmap.fromImage(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
pix_map = QtGui.QPixmap.fromImage(icon)
if pix_map:
button_icon.addPixmap(pix_map, QtGui.QIcon.Normal, QtGui.QIcon.Off)
return button_icon
@ -310,30 +310,23 @@ def expand_tags(text):
def create_separated_list(string_list):
"""
Returns a string that represents a join of a list of strings with a localized separator. This function corresponds
Returns a string that represents a join of a list of strings with a localized separator.
Localized separation will be done via the translate() function by the translators.
to QLocale::createSeparatedList which was introduced in Qt 4.8 and implements the algorithm from
http://www.unicode.org/reports/tr35/#ListPatterns
:param string_list: List of unicode strings
:param string_list: List of unicode strings
:return: Formatted string
"""
if LooseVersion(Qt.PYQT_VERSION_STR) >= LooseVersion('4.9') and LooseVersion(Qt.qVersion()) >= LooseVersion('4.8'):
return QtCore.QLocale().createSeparatedList(string_list)
if not string_list:
return ''
elif len(string_list) == 1:
return string_list[0]
# TODO: Verify mocking of translate() test before conversion
elif len(string_list) == 2:
return translate('OpenLP.core.lib', '%s and %s',
'Locale list separator: 2 items') % (string_list[0], string_list[1])
list_length = len(string_list)
if list_length == 1:
list_to_string = string_list[0]
elif list_length == 2:
list_to_string = translate('OpenLP.core.lib', '{one} and {two}').format(one=string_list[0], two=string_list[1])
elif list_length > 2:
list_to_string = translate('OpenLP.core.lib', '{first} and {last}').format(first=', '.join(string_list[:-1]),
last=string_list[-1])
else:
merged = translate('OpenLP.core.lib', '%s, and %s',
'Locale list separator: end') % (string_list[-2], string_list[-1])
for index in reversed(list(range(1, len(string_list) - 2))):
merged = translate('OpenLP.core.lib', '%s, %s',
'Locale list separator: middle') % (string_list[index], merged)
return translate('OpenLP.core.lib', '%s, %s', 'Locale list separator: start') % (string_list[0], merged)
list_to_string = ''
return list_to_string
from .exceptions import ValidationError

View File

@ -266,7 +266,7 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties):
self.search_text_layout.setObjectName('search_text_layout')
self.search_text_label = QtWidgets.QLabel(self.search_widget)
self.search_text_label.setObjectName('search_text_label')
self.search_text_edit = SearchEdit(self.search_widget)
self.search_text_edit = SearchEdit(self.search_widget, self.settings_section)
self.search_text_edit.setObjectName('search_text_edit')
self.search_text_label.setBuddy(self.search_text_edit)
self.search_text_layout.addRow(self.search_text_label, self.search_text_edit)
@ -397,8 +397,6 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties):
# Decide if we have to show the context menu or not.
if item is None:
return
if not item.flags() & QtCore.Qt.ItemIsSelectable:
return
self.menu.exec(self.list_view.mapToGlobal(point))
def get_file_list(self):
@ -638,34 +636,6 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties):
"""
return item
def check_search_result(self):
"""
Checks if the list_view is empty and adds a "No Search Results" item.
"""
if self.list_view.count():
return
message = translate('OpenLP.MediaManagerItem', 'No Search Results')
item = QtWidgets.QListWidgetItem(message)
item.setFlags(QtCore.Qt.NoItemFlags)
font = QtGui.QFont()
font.setItalic(True)
item.setFont(font)
self.list_view.addItem(item)
def check_search_result_search_while_typing_short(self):
"""
This is used in Bible "Search while typing" if the search is shorter than the min required len.
"""
if self.list_view.count():
return
message = translate('OpenLP.MediaManagerItem', 'Search is too short to be used in: "Search while typing"')
item = QtWidgets.QListWidgetItem(message)
item.setFlags(QtCore.Qt.NoItemFlags)
font = QtGui.QFont()
font.setItalic(True)
item.setFont(font)
self.list_view.addItem(item)
def _get_id_of_item_to_generate(self, item, remote_item):
"""
Utility method to check items being submitted for slide generation.

View File

@ -26,6 +26,7 @@ from PyQt5 import QtCore, QtWidgets
from openlp.core.lib import build_icon
from openlp.core.lib.ui import create_widget_action
from openlp.core.common import Settings
log = logging.getLogger(__name__)
@ -37,11 +38,12 @@ class SearchEdit(QtWidgets.QLineEdit):
searchTypeChanged = QtCore.pyqtSignal(QtCore.QVariant)
cleared = QtCore.pyqtSignal()
def __init__(self, parent):
def __init__(self, parent, settings_section):
"""
Constructor.
"""
super(SearchEdit, self).__init__(parent)
super().__init__(parent)
self.settings_section = settings_section
self._current_search_type = -1
self.clear_button = QtWidgets.QToolButton(self)
self.clear_button.setIcon(build_icon(':/system/clear_shortcut.png'))
@ -100,14 +102,10 @@ class SearchEdit(QtWidgets.QLineEdit):
menu = self.menu_button.menu()
for action in menu.actions():
if identifier == action.data():
# setPlaceholderText has been implemented in Qt 4.7 and in at least PyQt 4.9 (I am not sure, if it was
# implemented in PyQt 4.8).
try:
self.setPlaceholderText(action.placeholder_text)
except AttributeError:
pass
self.setPlaceholderText(action.placeholder_text)
self.menu_button.setDefaultAction(action)
self._current_search_type = identifier
Settings().setValue('{section}/last search type'.format(section=self.settings_section), identifier)
self.searchTypeChanged.emit(identifier)
return True
@ -130,14 +128,10 @@ class SearchEdit(QtWidgets.QLineEdit):
(2, ":/songs/authors.png", "Authors", "Search Authors...")
"""
menu = QtWidgets.QMenu(self)
first = None
for identifier, icon, title, placeholder in items:
action = create_widget_action(
menu, text=title, icon=icon, data=identifier, triggers=self._on_menu_action_triggered)
action.placeholder_text = placeholder
if first is None:
first = action
self._current_search_type = identifier
if not hasattr(self, 'menu_button'):
self.menu_button = QtWidgets.QToolButton(self)
self.menu_button.setIcon(build_icon(':/system/clear_shortcut.png'))
@ -146,7 +140,8 @@ class SearchEdit(QtWidgets.QLineEdit):
self.menu_button.setStyleSheet('QToolButton { border: none; padding: 0px 10px 0px 0px; }')
self.menu_button.resize(QtCore.QSize(28, 18))
self.menu_button.setMenu(menu)
self.menu_button.setDefaultAction(first)
self.set_current_search_type(
Settings().value('{section}/last search type'.format(section=self.settings_section)))
self.menu_button.show()
self._update_style_sheet()

View File

@ -41,6 +41,7 @@ class UiAboutDialog(object):
about_dialog.setObjectName('about_dialog')
about_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
self.about_dialog_layout = QtWidgets.QVBoxLayout(about_dialog)
self.about_dialog_layout.setContentsMargins(8, 8, 8, 8)
self.about_dialog_layout.setObjectName('about_dialog_layout')
self.logo_label = QtWidgets.QLabel(about_dialog)
self.logo_label.setPixmap(QtGui.QPixmap(':/graphics/openlp-about-logo.png'))

View File

@ -397,27 +397,6 @@ class AdvancedTab(SettingsTab):
self.data_directory_cancel_button.hide()
# Since data location can be changed, make sure the path is present.
self.current_data_path = AppLocation.get_data_path()
if not os.path.exists(self.current_data_path):
log.error('Data path not found {path}'.format(path=self.current_data_path))
answer = QtWidgets.QMessageBox.critical(
self, translate('OpenLP.AdvancedTab', 'Data Directory Error'),
translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n{path}\n\n'
'This data directory was previously changed from the OpenLP '
'default location. If the new location was on removable '
'media, that media needs to be made available.\n\n'
'Click "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n'
'Click "Yes" to reset the data directory to the default '
'location.').format(path=self.current_data_path),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No)
if answer == QtWidgets.QMessageBox.No:
log.info('User requested termination')
self.main_window.clean_up()
sys.exit()
# Set data location to default.
settings.remove('advanced/data path')
self.current_data_path = AppLocation.get_data_path()
log.warning('User requested data path set to default {path}'.format(path=self.current_data_path))
self.data_directory_label.setText(os.path.abspath(self.current_data_path))
# Don't allow data directory move if running portable.
if settings.value('advanced/is portable'):

View File

@ -38,7 +38,7 @@ class Ui_ExceptionDialog(object):
Set up the UI.
"""
exception_dialog.setObjectName('exception_dialog')
exception_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
exception_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
self.exception_layout = QtWidgets.QVBoxLayout(exception_dialog)
self.exception_layout.setObjectName('exception_layout')
self.message_layout = QtWidgets.QHBoxLayout()

View File

@ -37,7 +37,7 @@ class Ui_FileRenameDialog(object):
Set up the UI
"""
file_rename_dialog.setObjectName('file_rename_dialog')
file_rename_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
file_rename_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
file_rename_dialog.resize(300, 10)
self.dialog_layout = QtWidgets.QGridLayout(file_rename_dialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -22,7 +22,6 @@
"""
This module contains the first time wizard.
"""
import hashlib
import logging
import os
import socket
@ -39,7 +38,7 @@ from openlp.core.common import Registry, RegistryProperties, AppLocation, Settin
translate, clean_button_text, trace_error_handler
from openlp.core.lib import PluginStatus, build_icon
from openlp.core.lib.ui import critical_error_message_box
from openlp.core.lib.webpagereader import get_web_page, CONNECTION_RETRIES, CONNECTION_TIMEOUT
from openlp.core.common.httputils import get_web_page, get_url_file_size, url_get_file, CONNECTION_TIMEOUT
from .firsttimewizard import UiFirstTimeWizard, FirstTimePage
log = logging.getLogger(__name__)
@ -394,54 +393,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
self.was_cancelled = True
self.close()
def url_get_file(self, url, f_path, sha256=None):
""""
Download a file given a URL. The file is retrieved in chunks, giving the ability to cancel the download at any
point. Returns False on download error.
:param url: URL to download
:param f_path: Destination file
"""
block_count = 0
block_size = 4096
retries = 0
while True:
try:
filename = open(f_path, "wb")
url_file = urllib.request.urlopen(url, timeout=CONNECTION_TIMEOUT)
if sha256:
hasher = hashlib.sha256()
# Download until finished or canceled.
while not self.was_cancelled:
data = url_file.read(block_size)
if not data:
break
filename.write(data)
if sha256:
hasher.update(data)
block_count += 1
self._download_progress(block_count, block_size)
filename.close()
if sha256 and hasher.hexdigest() != sha256:
log.error('sha256 sums did not match for file: {file}'.format(file=f_path))
os.remove(f_path)
return False
except (urllib.error.URLError, socket.timeout) as err:
trace_error_handler(log)
filename.close()
os.remove(f_path)
if retries > CONNECTION_RETRIES:
return False
else:
retries += 1
time.sleep(0.1)
continue
break
# Delete file if cancelled, it may be a partial file.
if self.was_cancelled:
os.remove(f_path)
return True
def _build_theme_screenshots(self):
"""
This method builds the theme screenshots' icons for all items in the ``self.themes_list_widget``.
@ -454,26 +405,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
if item:
item.setIcon(build_icon(os.path.join(gettempdir(), 'openlp', screenshot)))
def _get_file_size(self, url):
"""
Get the size of a file.
:param url: The URL of the file we want to download.
"""
retries = 0
while True:
try:
site = urllib.request.urlopen(url, timeout=CONNECTION_TIMEOUT)
meta = site.info()
return int(meta.get("Content-Length"))
except urllib.error.URLError:
if retries > CONNECTION_RETRIES:
raise
else:
retries += 1
time.sleep(0.1)
continue
def _download_progress(self, count, block_size):
"""
Calculate and display the download progress.
@ -509,7 +440,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = self.songs_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked:
filename, sha256 = item.data(QtCore.Qt.UserRole)
size = self._get_file_size('{path}{name}'.format(path=self.songs_url, name=filename))
size = get_url_file_size('{path}{name}'.format(path=self.songs_url, name=filename))
self.max_progress += size
# Loop through the Bibles list and increase for each selected item
iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget)
@ -518,7 +449,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = iterator.value()
if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
filename, sha256 = item.data(0, QtCore.Qt.UserRole)
size = self._get_file_size('{path}{name}'.format(path=self.bibles_url, name=filename))
size = get_url_file_size('{path}{name}'.format(path=self.bibles_url, name=filename))
self.max_progress += size
iterator += 1
# Loop through the themes list and increase for each selected item
@ -527,7 +458,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked:
filename, sha256 = item.data(QtCore.Qt.UserRole)
size = self._get_file_size('{path}{name}'.format(path=self.themes_url, name=filename))
size = get_url_file_size('{path}{name}'.format(path=self.themes_url, name=filename))
self.max_progress += size
except urllib.error.URLError:
trace_error_handler(log)
@ -634,8 +565,8 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
self._increment_progress_bar(self.downloading.format(name=filename), 0)
self.previous_size = 0
destination = os.path.join(songs_destination, str(filename))
if not self.url_get_file('{path}{name}'.format(path=self.songs_url, name=filename),
destination, sha256):
if not url_get_file(self, '{path}{name}'.format(path=self.songs_url, name=filename),
destination, sha256):
missed_files.append('Song: {name}'.format(name=filename))
# Download Bibles
bibles_iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget)
@ -646,9 +577,9 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
# TODO: Tested at home
self._increment_progress_bar(self.downloading.format(name=bible), 0)
self.previous_size = 0
if not self.url_get_file('{path}{name}'.format(path=self.bibles_url, name=bible),
os.path.join(bibles_destination, bible),
sha256):
if not url_get_file(self, '{path}{name}'.format(path=self.bibles_url, name=bible),
os.path.join(bibles_destination, bible),
sha256):
missed_files.append('Bible: {name}'.format(name=bible))
bibles_iterator += 1
# Download themes
@ -659,9 +590,9 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
# TODO: Tested at home
self._increment_progress_bar(self.downloading.format(name=theme), 0)
self.previous_size = 0
if not self.url_get_file('{path}{name}'.format(path=self.themes_url, name=theme),
os.path.join(themes_destination, theme),
sha256):
if not url_get_file(self, '{path}{name}'.format(path=self.themes_url, name=theme),
os.path.join(themes_destination, theme),
sha256):
missed_files.append('Theme: {name}'.format(name=theme))
if missed_files:
file_list = ''

View File

@ -38,7 +38,7 @@ class Ui_FirstTimeLanguageDialog(object):
Set up the UI.
"""
language_dialog.setObjectName('language_dialog')
language_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
language_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
language_dialog.resize(300, 50)
self.dialog_layout = QtWidgets.QVBoxLayout(language_dialog)
self.dialog_layout.setContentsMargins(8, 8, 8, 8)

View File

@ -55,7 +55,7 @@ class UiFirstTimeWizard(object):
:param first_time_wizard: The wizard form
"""
first_time_wizard.setObjectName('first_time_wizard')
first_time_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
first_time_wizard.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
first_time_wizard.resize(550, 386)
first_time_wizard.setModal(True)
first_time_wizard.setOptions(QtWidgets.QWizard.IndependentPages | QtWidgets.QWizard.NoBackButtonOnStartPage |

View File

@ -38,7 +38,7 @@ class Ui_FormattingTagDialog(object):
Set up the UI
"""
formatting_tag_dialog.setObjectName('formatting_tag_dialog')
formatting_tag_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
formatting_tag_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
formatting_tag_dialog.resize(725, 548)
self.list_data_grid_layout = QtWidgets.QVBoxLayout(formatting_tag_dialog)
self.list_data_grid_layout.setContentsMargins(8, 8, 8, 8)

View File

@ -44,7 +44,7 @@ class GeneralTab(SettingsTab):
self.logo_file = ':/graphics/openlp-splash-screen.png'
self.logo_background_color = '#ffffff'
self.screens = ScreenList()
self.icon_path = ':/icon/openlp-logo-16x16.png'
self.icon_path = ':/icon/openlp-logo.svg'
general_translated = translate('OpenLP.GeneralTab', 'General')
super(GeneralTab, self).__init__(parent, 'Core', general_translated)

View File

@ -26,7 +26,7 @@ import os
from PyQt5 import QtCore, QtGui, QtWidgets
from openlp.core.common import Registry
from openlp.core.common import Registry, UiStrings
class ListWidgetWithDnD(QtWidgets.QListWidget):
@ -37,8 +37,9 @@ class ListWidgetWithDnD(QtWidgets.QListWidget):
"""
Initialise the list widget
"""
super(ListWidgetWithDnD, self).__init__(parent)
super().__init__(parent)
self.mime_data_text = name
self.no_results_text = UiStrings().NoResults
def activateDnD(self):
"""
@ -48,6 +49,19 @@ class ListWidgetWithDnD(QtWidgets.QListWidget):
self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
Registry().register_function(('%s_dnd' % self.mime_data_text), self.parent().load_file)
def clear(self, search_while_typing=False):
"""
Re-implement clear, so that we can customise feedback when using 'Search as you type'
:param search_while_typing: True if we want to display the customised message
:return: None
"""
if search_while_typing:
self.no_results_text = UiStrings().ShortResults
else:
self.no_results_text = UiStrings().NoResults
super().clear()
def mouseMoveEvent(self, event):
"""
Drag and drop event does not care what data is selected as the recipient will use events to request the data
@ -102,6 +116,24 @@ class ListWidgetWithDnD(QtWidgets.QListWidget):
listing = os.listdir(local_file)
for file in listing:
files.append(os.path.join(local_file, file))
Registry().execute('%s_dnd' % self.mime_data_text, {'files': files, 'target': self.itemAt(event.pos())})
Registry().execute('{mime_data}_dnd'.format(mime_data=self.mime_data_text),
{'files': files, 'target': self.itemAt(event.pos())})
else:
event.ignore()
def paintEvent(self, event):
"""
Re-implement paintEvent so that we can add 'No Results' text when the listWidget is empty.
:param event: A QPaintEvent
:return: None
"""
super().paintEvent(event)
if not self.count():
viewport = self.viewport()
painter = QtGui.QPainter(viewport)
font = QtGui.QFont()
font.setItalic(True)
painter.setFont(font)
painter.drawText(QtCore.QRect(0, 0, viewport.width(), viewport.height()),
(QtCore.Qt.AlignHCenter | QtCore.Qt.TextWordWrap), self.no_results_text)

View File

@ -54,7 +54,7 @@ class MediaDockManager(object):
match = True
break
if not match:
self.media_dock.addItem(media_item, visible_title['title'])
self.media_dock.addItem(media_item, media_item.plugin.icon, visible_title['title'])
def remove_dock(self, media_item):
"""

View File

@ -26,7 +26,7 @@ import os
from PyQt5 import QtCore, QtGui, QtWidgets
from openlp.core.common import Registry
from openlp.core.common import Registry, is_win
class TreeWidgetWithDnD(QtWidgets.QTreeWidget):
@ -108,6 +108,11 @@ class TreeWidgetWithDnD(QtWidgets.QTreeWidget):
:param event: Handle of the event pint passed
"""
# If we are on Windows, OpenLP window will not be set on top. For example, user can drag images to Library and
# the folder stays on top of the group creation box. This piece of code fixes this issue.
if is_win():
self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive)
self.setWindowState(QtCore.Qt.WindowNoState)
if event.mimeData().hasUrls():
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()

View File

@ -46,6 +46,7 @@ class WizardStrings(object):
OSIS = 'OSIS'
ZEF = 'Zefania'
SWORD = 'Sword'
WordProject = 'WordProject'
# These strings should need a good reason to be retranslated elsewhere.
FinishedImport = translate('OpenLP.Ui', 'Finished import.')
FormatLabel = translate('OpenLP.Ui', 'Format:')
@ -95,6 +96,7 @@ class OpenLPWizard(QtWidgets.QWizard, RegistryProperties):
super(OpenLPWizard, self).__init__(parent)
self.plugin = plugin
self.with_progress_page = add_progress_page
self.setFixedWidth(640)
self.setObjectName(name)
self.open_icon = build_icon(':/general/general_open.png')
self.delete_icon = build_icon(':/general/general_delete.png')

View File

@ -55,21 +55,17 @@ from openlp.core.ui.lib.mediadockmanager import MediaDockManager
log = logging.getLogger(__name__)
MEDIA_MANAGER_STYLE = """
QToolBox {
padding-bottom: 2px;
}
QToolBox::tab {
::tab#media_tool_box {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 palette(button), stop: 1.0 palette(mid));
border: 1px solid palette(mid);
border-radius: 3px;
}
QToolBox::tab:selected {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 palette(light), stop: 1.0 palette(button));
border: 1px solid palette(mid);
font-weight: bold;
border: 0;
border-radius: 2px;
margin-top: 0;
margin-bottom: 0;
text-align: left;
}
/* This is here to make the tabs on KDE with the Breeze theme work */
::tab:selected {}
"""
PROGRESSBAR_STYLE = """
@ -315,10 +311,9 @@ class Ui_MainWindow(object):
elif is_macosx():
self.local_help_file = os.path.join(AppLocation.get_directory(AppLocation.AppDir),
'..', 'Resources', 'OpenLP.help')
self.on_help_item = create_action(main_window, 'HelpItem',
icon=':/system/system_help_contents.png',
can_shortcuts=True,
category=UiStrings().Help, triggers=self.on_help_clicked)
self.user_manual_item = create_action(main_window, 'userManualItem', icon=':/system/system_help_contents.png',
can_shortcuts=True, category=UiStrings().Help,
triggers=self.on_help_clicked)
self.web_site_item = create_action(main_window, 'webSiteItem', can_shortcuts=True, category=UiStrings().Help)
# Shortcuts not connected to buttons or menu entries.
self.search_shortcut_action = create_action(main_window,
@ -357,7 +352,7 @@ class Ui_MainWindow(object):
add_actions(self.tools_menu, (self.tools_open_data_folder, None))
add_actions(self.tools_menu, (self.tools_first_time_wizard, None))
add_actions(self.tools_menu, [self.update_theme_images])
add_actions(self.help_menu, (self.on_help_item, None, self.web_site_item, self.about_item))
add_actions(self.help_menu, (self.user_manual_item, None, self.web_site_item, self.about_item))
add_actions(self.menu_bar, (self.file_menu.menuAction(), self.view_menu.menuAction(),
self.tools_menu.menuAction(), self.settings_menu.menuAction(), self.help_menu.menuAction()))
add_actions(self, [self.search_shortcut_action])
@ -453,7 +448,7 @@ class Ui_MainWindow(object):
'from here.'))
self.about_item.setText(translate('OpenLP.MainWindow', '&About'))
self.about_item.setStatusTip(translate('OpenLP.MainWindow', 'More information about OpenLP.'))
self.on_help_item.setText(translate('OpenLP.MainWindow', '&User Manual'))
self.user_manual_item.setText(translate('OpenLP.MainWindow', '&User Manual'))
self.search_shortcut_action.setText(UiStrings().Search)
self.search_shortcut_action.setToolTip(
translate('OpenLP.MainWindow', 'Jump to the search box of the current active plugin.'))

View File

@ -38,7 +38,7 @@ class Ui_PluginViewDialog(object):
Set up the UI
"""
plugin_view_dialog.setObjectName('plugin_view_dialog')
plugin_view_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
plugin_view_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
plugin_view_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
self.plugin_layout = QtWidgets.QVBoxLayout(plugin_view_dialog)
self.plugin_layout.setObjectName('plugin_layout')

View File

@ -50,7 +50,7 @@ class Ui_PrintServiceDialog(object):
Set up the UI
"""
print_service_dialog.setObjectName('print_service_dialog')
print_service_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
print_service_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
print_service_dialog.resize(664, 594)
self.main_layout = QtWidgets.QVBoxLayout(print_service_dialog)
self.main_layout.setSpacing(0)

View File

@ -47,7 +47,7 @@ class Ui_ProjectorEditForm(object):
Create the interface layout.
"""
edit_projector_dialog.setObjectName('edit_projector_dialog')
edit_projector_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo-32x32.png'))
edit_projector_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
edit_projector_dialog.setMinimumWidth(400)
edit_projector_dialog.setModal(True)
# Define the basic layout

View File

@ -243,7 +243,7 @@ class SourceSelectTabs(QtWidgets.QDialog):
title = translate('OpenLP.SourceSelectForm', 'Select Projector Source')
self.setWindowTitle(title)
self.setObjectName('source_select_tabs')
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
self.setWindowIcon(build_icon(':/icon/openlp-log.svg'))
self.setModal(True)
self.layout = QtWidgets.QVBoxLayout()
self.layout.setObjectName('source_select_tabs_layout')
@ -395,7 +395,7 @@ class SourceSelectSingle(QtWidgets.QDialog):
else:
title = translate('OpenLP.SourceSelectForm', 'Select Projector Source')
self.setObjectName('source_select_single')
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
self.setWindowIcon(build_icon(':/icon/openlp-log.svg'))
self.setModal(True)
self.edit = edit

View File

@ -38,7 +38,7 @@ class Ui_ServiceItemEditDialog(object):
Set up the UI
"""
serviceItemEditDialog.setObjectName('serviceItemEditDialog')
serviceItemEditDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
serviceItemEditDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
self.dialog_layout = QtWidgets.QGridLayout(serviceItemEditDialog)
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
self.dialog_layout.setSpacing(8)

View File

@ -38,7 +38,7 @@ class Ui_SettingsDialog(object):
Set up the UI
"""
settings_dialog.setObjectName('settings_dialog')
settings_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
settings_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
settings_dialog.resize(800, 700)
self.dialog_layout = QtWidgets.QGridLayout(settings_dialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -72,7 +72,7 @@ class Ui_ShortcutListDialog(object):
Set up the UI
"""
shortcutListDialog.setObjectName('shortcutListDialog')
shortcutListDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
shortcutListDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
shortcutListDialog.resize(500, 438)
self.shortcut_list_layout = QtWidgets.QVBoxLayout(shortcutListDialog)
self.shortcut_list_layout.setObjectName('shortcut_list_layout')

View File

@ -726,8 +726,10 @@ class SlideController(DisplayController, RegistryProperties):
# Reset the button
self.play_slides_once.setChecked(False)
self.play_slides_once.setIcon(build_icon(':/media/media_time.png'))
self.play_slides_once.setText(UiStrings().PlaySlidesToEnd)
self.play_slides_loop.setChecked(False)
self.play_slides_loop.setIcon(build_icon(':/media/media_time.png'))
self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop)
if item.is_text():
if (Settings().value(self.main_window.songs_settings_section + '/display songbar') and
not self.song_menu.menu().isEmpty()):

View File

@ -38,7 +38,7 @@ class Ui_StartTimeDialog(object):
Set up the UI
"""
StartTimeDialog.setObjectName('StartTimeDialog')
StartTimeDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
StartTimeDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
StartTimeDialog.resize(350, 10)
self.dialog_layout = QtWidgets.QGridLayout(StartTimeDialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -38,7 +38,7 @@ class Ui_ThemeLayoutDialog(object):
Set up the UI
"""
themeLayoutDialog.setObjectName('themeLayoutDialogDialog')
themeLayoutDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
themeLayoutDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
self.preview_layout = QtWidgets.QVBoxLayout(themeLayoutDialog)
self.preview_layout.setObjectName('preview_layout')
self.preview_area = QtWidgets.QWidget(themeLayoutDialog)

View File

@ -40,13 +40,13 @@ class Ui_ThemeWizard(object):
Set up the UI
"""
theme_wizard.setObjectName('OpenLP.ThemeWizard')
theme_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
theme_wizard.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
theme_wizard.setModal(True)
theme_wizard.setOptions(QtWidgets.QWizard.IndependentPages |
QtWidgets.QWizard.NoBackButtonOnStartPage | QtWidgets.QWizard.HaveCustomButton1)
theme_wizard.setFixedWidth(640)
if is_macosx():
theme_wizard.setPixmap(QtWidgets.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png'))
theme_wizard.resize(646, 400)
else:
theme_wizard.setWizardStyle(QtWidgets.QWizard.ModernStyle)
self.spacer = QtWidgets.QSpacerItem(10, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)

View File

@ -39,7 +39,7 @@ class Ui_AlertDialog(object):
"""
alert_dialog.setObjectName('alert_dialog')
alert_dialog.resize(400, 300)
alert_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
alert_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
self.alert_dialog_layout = QtWidgets.QGridLayout(alert_dialog)
self.alert_dialog_layout.setObjectName('alert_dialog_layout')
self.alert_text_layout = QtWidgets.QFormLayout()

View File

@ -125,6 +125,7 @@ class BibleImportForm(OpenLPWizard):
self.csv_verses_button.clicked.connect(self.on_csv_verses_browse_button_clicked)
self.open_song_browse_button.clicked.connect(self.on_open_song_browse_button_clicked)
self.zefania_browse_button.clicked.connect(self.on_zefania_browse_button_clicked)
self.wordproject_browse_button.clicked.connect(self.on_wordproject_browse_button_clicked)
self.web_update_button.clicked.connect(self.on_web_update_button_clicked)
self.sword_browse_button.clicked.connect(self.on_sword_browse_button_clicked)
self.sword_zipbrowse_button.clicked.connect(self.on_sword_zipbrowse_button_clicked)
@ -143,7 +144,7 @@ class BibleImportForm(OpenLPWizard):
self.format_label = QtWidgets.QLabel(self.select_page)
self.format_label.setObjectName('FormatLabel')
self.format_combo_box = QtWidgets.QComboBox(self.select_page)
self.format_combo_box.addItems(['', '', '', '', '', ''])
self.format_combo_box.addItems(['', '', '', '', '', '', ''])
self.format_combo_box.setObjectName('FormatComboBox')
self.format_layout.addRow(self.format_label, self.format_combo_box)
self.spacer = QtWidgets.QSpacerItem(10, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
@ -161,6 +162,7 @@ class BibleImportForm(OpenLPWizard):
self.osis_file_layout = QtWidgets.QHBoxLayout()
self.osis_file_layout.setObjectName('OsisFileLayout')
self.osis_file_edit = QtWidgets.QLineEdit(self.osis_widget)
self.osis_file_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.osis_file_edit.setObjectName('OsisFileEdit')
self.osis_file_layout.addWidget(self.osis_file_edit)
self.osis_browse_button = QtWidgets.QToolButton(self.osis_widget)
@ -180,6 +182,7 @@ class BibleImportForm(OpenLPWizard):
self.csv_books_layout = QtWidgets.QHBoxLayout()
self.csv_books_layout.setObjectName('CsvBooksLayout')
self.csv_books_edit = QtWidgets.QLineEdit(self.csv_widget)
self.csv_books_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.csv_books_edit.setObjectName('CsvBooksEdit')
self.csv_books_layout.addWidget(self.csv_books_edit)
self.csv_books_button = QtWidgets.QToolButton(self.csv_widget)
@ -192,6 +195,7 @@ class BibleImportForm(OpenLPWizard):
self.csv_verses_layout = QtWidgets.QHBoxLayout()
self.csv_verses_layout.setObjectName('CsvVersesLayout')
self.csv_verses_edit = QtWidgets.QLineEdit(self.csv_widget)
self.csv_verses_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.csv_verses_edit.setObjectName('CsvVersesEdit')
self.csv_verses_layout.addWidget(self.csv_verses_edit)
self.csv_verses_button = QtWidgets.QToolButton(self.csv_widget)
@ -211,6 +215,7 @@ class BibleImportForm(OpenLPWizard):
self.open_song_file_layout = QtWidgets.QHBoxLayout()
self.open_song_file_layout.setObjectName('OpenSongFileLayout')
self.open_song_file_edit = QtWidgets.QLineEdit(self.open_song_widget)
self.open_song_file_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.open_song_file_edit.setObjectName('OpenSongFileEdit')
self.open_song_file_layout.addWidget(self.open_song_file_edit)
self.open_song_browse_button = QtWidgets.QToolButton(self.open_song_widget)
@ -300,61 +305,84 @@ class BibleImportForm(OpenLPWizard):
self.sword_widget = QtWidgets.QWidget(self.select_page)
self.sword_widget.setObjectName('SwordWidget')
self.sword_layout = QtWidgets.QVBoxLayout(self.sword_widget)
self.sword_layout.setContentsMargins(0, 0, 0, 0)
self.sword_layout.setObjectName('SwordLayout')
self.sword_tab_widget = QtWidgets.QTabWidget(self.sword_widget)
self.sword_tab_widget.setObjectName('SwordTabWidget')
self.sword_folder_tab = QtWidgets.QWidget(self.sword_tab_widget)
self.sword_folder_tab.setObjectName('SwordFolderTab')
self.sword_folder_tab_layout = QtWidgets.QGridLayout(self.sword_folder_tab)
self.sword_folder_tab_layout = QtWidgets.QFormLayout(self.sword_folder_tab)
self.sword_folder_tab_layout.setObjectName('SwordTabFolderLayout')
self.sword_folder_label = QtWidgets.QLabel(self.sword_folder_tab)
self.sword_folder_label.setObjectName('SwordSourceLabel')
self.sword_folder_tab_layout.addWidget(self.sword_folder_label, 0, 0)
self.sword_folder_label.setObjectName('SwordFolderLabel')
self.sword_folder_edit = QtWidgets.QLineEdit(self.sword_folder_tab)
self.sword_folder_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.sword_folder_edit.setObjectName('SwordFolderEdit')
self.sword_browse_button = QtWidgets.QToolButton(self.sword_folder_tab)
self.sword_browse_button.setIcon(self.open_icon)
self.sword_browse_button.setObjectName('SwordBrowseButton')
self.sword_folder_tab_layout.addWidget(self.sword_folder_edit, 0, 1)
self.sword_folder_tab_layout.addWidget(self.sword_browse_button, 0, 2)
self.sword_folder_layout = QtWidgets.QHBoxLayout()
self.sword_folder_layout.addWidget(self.sword_folder_edit)
self.sword_folder_layout.addWidget(self.sword_browse_button)
self.sword_folder_tab_layout.addRow(self.sword_folder_label, self.sword_folder_layout)
self.sword_bible_label = QtWidgets.QLabel(self.sword_folder_tab)
self.sword_bible_label.setObjectName('SwordBibleLabel')
self.sword_folder_tab_layout.addWidget(self.sword_bible_label, 1, 0)
self.sword_bible_combo_box = QtWidgets.QComboBox(self.sword_folder_tab)
self.sword_bible_combo_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
self.sword_bible_combo_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically)
self.sword_bible_combo_box.setObjectName('SwordBibleComboBox')
self.sword_folder_tab_layout.addWidget(self.sword_bible_combo_box, 1, 1)
self.sword_folder_tab_layout.addRow(self.sword_bible_label, self.sword_bible_combo_box)
self.sword_tab_widget.addTab(self.sword_folder_tab, '')
self.sword_zip_tab = QtWidgets.QWidget(self.sword_tab_widget)
self.sword_zip_tab.setObjectName('SwordZipTab')
self.sword_zip_layout = QtWidgets.QGridLayout(self.sword_zip_tab)
self.sword_zip_layout = QtWidgets.QFormLayout(self.sword_zip_tab)
self.sword_zip_layout.setObjectName('SwordZipLayout')
self.sword_zipfile_label = QtWidgets.QLabel(self.sword_zip_tab)
self.sword_zipfile_label.setObjectName('SwordZipFileLabel')
self.sword_zipfile_edit = QtWidgets.QLineEdit(self.sword_zip_tab)
self.sword_zipfile_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.sword_zipfile_edit.setObjectName('SwordZipFileEdit')
self.sword_zipbrowse_button = QtWidgets.QToolButton(self.sword_zip_tab)
self.sword_zipbrowse_button.setIcon(self.open_icon)
self.sword_zipbrowse_button.setObjectName('SwordZipBrowseButton')
self.sword_zipfile_layout = QtWidgets.QHBoxLayout()
self.sword_zipfile_layout.addWidget(self.sword_zipfile_edit)
self.sword_zipfile_layout.addWidget(self.sword_zipbrowse_button)
self.sword_zip_layout.addRow(self.sword_zipfile_label, self.sword_zipfile_layout)
self.sword_zipbible_label = QtWidgets.QLabel(self.sword_folder_tab)
self.sword_zipbible_label.setObjectName('SwordZipBibleLabel')
self.sword_zipbible_combo_box = QtWidgets.QComboBox(self.sword_zip_tab)
self.sword_zipbible_combo_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
self.sword_zipbible_combo_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically)
self.sword_zipbible_combo_box.setObjectName('SwordZipBibleComboBox')
self.sword_zip_layout.addWidget(self.sword_zipfile_label, 0, 0)
self.sword_zip_layout.addWidget(self.sword_zipfile_edit, 0, 1)
self.sword_zip_layout.addWidget(self.sword_zipbrowse_button, 0, 2)
self.sword_zip_layout.addWidget(self.sword_zipbible_label, 1, 0)
self.sword_zip_layout.addWidget(self.sword_zipbible_combo_box, 1, 1)
self.sword_zip_layout.addRow(self.sword_zipbible_label, self.sword_zipbible_combo_box)
self.sword_tab_widget.addTab(self.sword_zip_tab, '')
self.sword_layout.addWidget(self.sword_tab_widget)
self.sword_disabled_label = QtWidgets.QLabel(self.sword_widget)
self.sword_disabled_label.setObjectName('SwordDisabledLabel')
self.sword_layout.addWidget(self.sword_disabled_label)
self.select_stack.addWidget(self.sword_widget)
self.wordproject_widget = QtWidgets.QWidget(self.select_page)
self.wordproject_widget.setObjectName('WordProjectWidget')
self.wordproject_layout = QtWidgets.QFormLayout(self.wordproject_widget)
self.wordproject_layout.setContentsMargins(0, 0, 0, 0)
self.wordproject_layout.setObjectName('WordProjectLayout')
self.wordproject_file_label = QtWidgets.QLabel(self.wordproject_widget)
self.wordproject_file_label.setObjectName('WordProjectFileLabel')
self.wordproject_file_layout = QtWidgets.QHBoxLayout()
self.wordproject_file_layout.setObjectName('WordProjectFileLayout')
self.wordproject_file_edit = QtWidgets.QLineEdit(self.wordproject_widget)
self.wordproject_file_edit.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
self.wordproject_file_edit.setObjectName('WordProjectFileEdit')
self.wordproject_file_layout.addWidget(self.wordproject_file_edit)
self.wordproject_browse_button = QtWidgets.QToolButton(self.wordproject_widget)
self.wordproject_browse_button.setIcon(self.open_icon)
self.wordproject_browse_button.setObjectName('WordProjectBrowseButton')
self.wordproject_file_layout.addWidget(self.wordproject_browse_button)
self.wordproject_layout.addRow(self.wordproject_file_label, self.wordproject_file_layout)
self.wordproject_layout.setItem(5, QtWidgets.QFormLayout.LabelRole, self.spacer)
self.select_stack.addWidget(self.wordproject_widget)
self.select_page_layout.addLayout(self.select_stack)
self.addPage(self.select_page)
# License Page
@ -400,6 +428,7 @@ class BibleImportForm(OpenLPWizard):
self.format_combo_box.setItemText(BibleFormat.OSIS, WizardStrings.OSIS)
self.format_combo_box.setItemText(BibleFormat.CSV, WizardStrings.CSV)
self.format_combo_box.setItemText(BibleFormat.OpenSong, WizardStrings.OS)
self.format_combo_box.setItemText(BibleFormat.WordProject, WizardStrings.WordProject)
self.format_combo_box.setItemText(BibleFormat.WebDownload, translate('BiblesPlugin.ImportWizardForm',
'Web Download'))
self.format_combo_box.setItemText(BibleFormat.Zefania, WizardStrings.ZEF)
@ -410,6 +439,7 @@ class BibleImportForm(OpenLPWizard):
self.open_song_file_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Bible file:'))
self.web_source_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Location:'))
self.zefania_file_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Bible file:'))
self.wordproject_file_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Bible file:'))
self.web_update_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Click to download bible list'))
self.web_update_button.setText(translate('BiblesPlugin.ImportWizardForm', 'Download bible list'))
self.web_source_combo_box.setItemText(WebDownload.Crosswalk, translate('BiblesPlugin.ImportWizardForm',
@ -468,6 +498,7 @@ class BibleImportForm(OpenLPWizard):
"""
Validate the current page before moving on to the next page.
"""
log.debug(self.size())
if self.currentPage() == self.welcome_page:
return True
elif self.currentPage() == self.select_page:
@ -504,6 +535,12 @@ class BibleImportForm(OpenLPWizard):
critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.ZEF)
self.zefania_file_edit.setFocus()
return False
elif self.field('source_format') == BibleFormat.WordProject:
if not self.field('wordproject_file'):
critical_error_message_box(UiStrings().NFSs,
WizardStrings.YouSpecifyFile % WizardStrings.WordProject)
self.wordproject_file_edit.setFocus()
return False
elif self.field('source_format') == BibleFormat.WebDownload:
# If count is 0 the bible list has not yet been downloaded
if self.web_translation_combo_box.count() == 0:
@ -627,6 +664,14 @@ class BibleImportForm(OpenLPWizard):
self.get_file_name(WizardStrings.OpenTypeFile % WizardStrings.ZEF, self.zefania_file_edit,
'last directory import')
def on_wordproject_browse_button_clicked(self):
"""
Show the file open dialog for the WordProject file.
"""
# TODO: Verify format() with variable template
self.get_file_name(WizardStrings.OpenTypeFile % WizardStrings.WordProject, self.wordproject_file_edit,
'last directory import')
def on_web_update_button_clicked(self):
"""
Download list of bibles from Crosswalk, BibleServer and BibleGateway.
@ -707,6 +752,7 @@ class BibleImportForm(OpenLPWizard):
self.select_page.registerField('csv_versefile', self.csv_verses_edit)
self.select_page.registerField('opensong_file', self.open_song_file_edit)
self.select_page.registerField('zefania_file', self.zefania_file_edit)
self.select_page.registerField('wordproject_file', self.wordproject_file_edit)
self.select_page.registerField('web_location', self.web_source_combo_box)
self.select_page.registerField('web_biblename', self.web_translation_combo_box)
self.select_page.registerField('sword_folder_path', self.sword_folder_edit)
@ -799,6 +845,10 @@ class BibleImportForm(OpenLPWizard):
# Import a Zefania bible.
importer = self.manager.import_bible(BibleFormat.Zefania, name=license_version,
filename=self.field('zefania_file'))
elif bible_type == BibleFormat.WordProject:
# Import a WordProject bible.
importer = self.manager.import_bible(BibleFormat.WordProject, name=license_version,
filename=self.field('wordproject_file'))
elif bible_type == BibleFormat.SWORD:
# Import a SWORD bible.
if self.sword_tab_widget.currentIndex() == self.sword_tab_widget.indexOf(self.sword_folder_tab):

View File

@ -30,7 +30,7 @@ from openlp.core.lib.ui import create_button_box
class Ui_BookNameDialog(object):
def setupUi(self, book_name_dialog):
book_name_dialog.setObjectName('book_name_dialog')
book_name_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
book_name_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
book_name_dialog.resize(400, 271)
self.book_name_layout = QtWidgets.QVBoxLayout(book_name_dialog)
self.book_name_layout.setSpacing(8)

View File

@ -32,7 +32,7 @@ from openlp.plugins.bibles.lib.db import BiblesResourcesDB
class Ui_EditBibleDialog(object):
def setupUi(self, edit_bible_dialog):
edit_bible_dialog.setObjectName('edit_bible_dialog')
edit_bible_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
edit_bible_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
edit_bible_dialog.resize(520, 400)
edit_bible_dialog.setModal(True)
self.dialog_layout = QtWidgets.QVBoxLayout(edit_bible_dialog)

View File

@ -30,7 +30,7 @@ from openlp.core.lib.ui import create_button_box
class Ui_LanguageDialog(object):
def setupUi(self, language_dialog):
language_dialog.setObjectName('language_dialog')
language_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
language_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
language_dialog.resize(400, 165)
self.language_layout = QtWidgets.QVBoxLayout(language_dialog)
self.language_layout.setSpacing(8)

View File

@ -32,7 +32,7 @@ from bs4 import BeautifulSoup, NavigableString, Tag
from openlp.core.common import Registry, RegistryProperties, translate
from openlp.core.lib.ui import critical_error_message_box
from openlp.core.lib.webpagereader import get_web_page
from openlp.core.common.httputils import get_web_page
from openlp.plugins.bibles.lib import SearchResults
from openlp.plugins.bibles.lib.bibleimport import BibleImport
from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB, Book

View File

@ -0,0 +1,169 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2016 OpenLP Developers #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import os
import re
import logging
from codecs import open as copen
from tempfile import TemporaryDirectory
from zipfile import ZipFile
from bs4 import BeautifulSoup, Tag, NavigableString
from openlp.plugins.bibles.lib.bibleimport import BibleImport
BOOK_NUMBER_PATTERN = re.compile(r'\[(\d+)\]')
REPLACE_SPACES = re.compile(r'\s{2,}')
log = logging.getLogger(__name__)
class WordProjectBible(BibleImport):
"""
`WordProject <http://www.wordproaudio.com/>`_ Bible format importer class.
"""
def _cleanup(self):
"""
Clean up after ourselves
"""
self.tmp.cleanup()
def _unzip_file(self):
"""
Unzip the file to a temporary directory
"""
self.tmp = TemporaryDirectory()
zip_file = ZipFile(os.path.abspath(self.filename))
zip_file.extractall(self.tmp.name)
self.base_dir = os.path.join(self.tmp.name, os.path.splitext(os.path.basename(self.filename))[0])
def process_books(self):
"""
Extract and create the bible books from the parsed html
:param bible_data: parsed xml
:return: None
"""
with copen(os.path.join(self.base_dir, 'index.htm'), encoding='utf-8', errors='ignore') as index_file:
page = index_file.read()
soup = BeautifulSoup(page, 'lxml')
bible_books = soup.find('div', 'textOptions').find_all('li')
book_count = len(bible_books)
for li_book in bible_books:
log.debug(li_book)
if self.stop_import_flag:
break
# Sometimes the structure is "[1] <a>Genesis</a>", and sometimes it's "<a>[1] Genesis</a>"
if isinstance(li_book.contents[0], NavigableString) and str(li_book.contents[0]).strip():
book_string = str(li_book.contents[0])
book_name = str(li_book.a.contents[0])
elif li_book.a:
book_string, book_name = str(li_book.a.contents[0]).split(' ', 1)
book_link = li_book.a['href']
book_id = int(BOOK_NUMBER_PATTERN.search(book_string).group(1))
book_name = book_name.strip()
db_book = self.find_and_create_book(book_name, book_count, self.language_id, book_id)
self.process_chapters(db_book, book_id, book_link)
self.session.commit()
def process_chapters(self, db_book, book_id, book_link):
"""
Extract the chapters, and do some initial processing of the verses
:param book: An OpenLP bible database book object
:param chapters: parsed chapters
:return: None
"""
log.debug(book_link)
book_file = os.path.join(self.base_dir, os.path.normpath(book_link))
with copen(book_file, encoding='utf-8', errors='ignore') as f:
page = f.read()
soup = BeautifulSoup(page, 'lxml')
header_div = soup.find('div', 'textHeader')
chapters_p = header_div.find('p')
if not chapters_p:
chapters_p = soup.p
log.debug(chapters_p)
for item in chapters_p.contents:
if self.stop_import_flag:
break
if isinstance(item, Tag) and item.name in ['a', 'span']:
chapter_number = int(item.string.strip())
self.set_current_chapter(db_book.name, chapter_number)
self.process_verses(db_book, book_id, chapter_number)
def process_verses(self, db_book, book_number, chapter_number):
"""
Get the verses for a particular book
"""
chapter_file_name = os.path.join(self.base_dir, '{:02d}'.format(book_number), '{}.htm'.format(chapter_number))
with copen(chapter_file_name, encoding='utf-8', errors='ignore') as chapter_file:
page = chapter_file.read()
soup = BeautifulSoup(page, 'lxml')
text_body = soup.find('div', 'textBody')
if text_body:
verses_p = text_body.find('p')
else:
verses_p = soup.find_all('p')[2]
verse_number = 0
verse_text = ''
for item in verses_p.contents:
if self.stop_import_flag:
break
if isinstance(item, Tag) and 'verse' in item.get('class', []):
if verse_number > 0:
self.process_verse(db_book, chapter_number, verse_number, verse_text.strip())
verse_number = int(item.string.strip())
verse_text = ''
elif isinstance(item, NavigableString):
verse_text += str(item)
elif isinstance(item, Tag) and item.name in ['span', 'a']:
verse_text += str(item.string)
else:
log.warning('Can\'t store %s', item)
self.process_verse(db_book, chapter_number, verse_number, verse_text.strip())
def process_verse(self, db_book, chapter_number, verse_number, verse_text):
"""
Process a verse element
:param book: A database Book object
:param chapter_number: The chapter number to add the verses to (int)
:param element: The verse element to process. (etree element type)
:param use_milestones: set to True to process a 'milestone' verse. Defaults to False
:return: None
"""
if verse_text:
log.debug('%s %s:%s %s', db_book.name, chapter_number, verse_number, verse_text.strip())
self.create_verse(db_book.id, chapter_number, verse_number, verse_text.strip())
def do_import(self, bible_name=None):
"""
Loads a Bible from file.
"""
self.log_debug('Starting WordProject import from "{name}"'.format(name=self.filename))
self._unzip_file()
self.language_id = self.get_language_id(None, bible_name=self.filename)
result = False
if self.language_id:
self.process_books()
result = True
self._cleanup()
return result

View File

@ -31,6 +31,7 @@ from .importers.http import HTTPBible
from .importers.opensong import OpenSongBible
from .importers.osis import OSISBible
from .importers.zefania import ZefaniaBible
from .importers.wordproject import WordProjectBible
try:
from .importers.sword import SwordBible
except:
@ -50,6 +51,7 @@ class BibleFormat(object):
WebDownload = 3
Zefania = 4
SWORD = 5
WordProject = 6
@staticmethod
def get_class(bible_format):
@ -70,6 +72,8 @@ class BibleFormat(object):
return ZefaniaBible
elif bible_format == BibleFormat.SWORD:
return SwordBible
elif bible_format == BibleFormat.WordProject:
return WordProjectBible
else:
return None
@ -84,7 +88,8 @@ class BibleFormat(object):
BibleFormat.OpenSong,
BibleFormat.WebDownload,
BibleFormat.Zefania,
BibleFormat.SWORD
BibleFormat.SWORD,
BibleFormat.WordProject
]
@ -131,7 +136,7 @@ class BibleManager(OpenLPMixin, RegistryProperties):
name = bible.get_name()
# Remove corrupted files.
if name is None:
bible.session.close()
bible.session.close_all()
delete_file(os.path.join(self.path, filename))
continue
log.debug('Bible Name: "{name}"'.format(name=name))
@ -178,7 +183,7 @@ class BibleManager(OpenLPMixin, RegistryProperties):
"""
log.debug('BibleManager.delete_bible("{name}")'.format(name=name))
bible = self.db_cache[name]
bible.session.close()
bible.session.close_all()
bible.session = None
return delete_file(os.path.join(bible.path, bible.file))

View File

@ -75,21 +75,16 @@ class BibleMediaItem(MediaManagerItem):
self.has_search = True
self.search_results = {}
self.second_search_results = {}
self.check_search_result()
Registry().register_function('bibles_load_list', self.reload_bibles)
def __check_second_bible(self, bible, second_bible):
"""
Check if the first item is a second bible item or not.
"""
bitem = self.list_view.item(0)
if not bitem.flags() & QtCore.Qt.ItemIsSelectable:
# The item is the "No Search Results" item.
self.list_view.clear()
if not self.list_view.count():
self.display_results(bible, second_bible)
return
else:
item_second_bible = self._decode_qt_object(bitem, 'second_bible')
item_second_bible = self._decode_qt_object(self.list_view.item(0), 'second_bible')
if item_second_bible and second_bible or not item_second_bible and not second_bible:
self.display_results(bible, second_bible)
elif critical_error_message_box(
@ -199,7 +194,7 @@ class BibleMediaItem(MediaManagerItem):
self.quick_search_label = QtWidgets.QLabel(self.quickTab)
self.quick_search_label.setObjectName('quick_search_label')
self.quickLayout.addWidget(self.quick_search_label, 0, 0, QtCore.Qt.AlignRight)
self.quick_search_edit = SearchEdit(self.quickTab)
self.quick_search_edit = SearchEdit(self.quickTab, self.settings_section)
self.quick_search_edit.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
self.quick_search_edit.setObjectName('quick_search_edit')
self.quick_search_label.setBuddy(self.quick_search_edit)
@ -333,8 +328,8 @@ class BibleMediaItem(MediaManagerItem):
translate('BiblesPlugin.MediaItem', 'Text Search'),
translate('BiblesPlugin.MediaItem', 'Search Text...'))
])
text = self.settings_section
self.quick_search_edit.set_current_search_type(Settings().value('{text}/last search type'.format(text=text)))
if Settings().value(self.settings_section + '/reset to combined quick search'):
self.quick_search_edit.set_current_search_type(BibleSearch.Combined)
self.config_update()
log.debug('bible manager initialise complete')
@ -430,6 +425,7 @@ class BibleMediaItem(MediaManagerItem):
verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible, book_ref_id, 1)
if verse_count == 0:
self.advancedSearchButton.setEnabled(False)
log.warning('Not enough chapters in %s', book_ref_id)
critical_error_message_box(message=translate('BiblesPlugin.MediaItem', 'Bible not fully loaded.'))
else:
self.advancedSearchButton.setEnabled(True)
@ -444,15 +440,6 @@ class BibleMediaItem(MediaManagerItem):
only updated when we are doing reference or combined search, in text search the completion list is removed.
"""
log.debug('update_auto_completer')
# Save the current search type to the configuration. If setting for automatically resetting the search type to
# Combined is enabled, use that otherwise use the currently selected search type.
# Note: This setting requires a restart to take effect.
if Settings().value(self.settings_section + '/reset to combined quick search'):
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
BibleSearch.Combined)
else:
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
self.quick_search_edit.current_search_type())
# Save the current bible to the configuration.
Settings().setValue('{section}/quick bible'.format(section=self.settings_section),
self.quickVersionComboBox.currentText())
@ -551,14 +538,12 @@ class BibleMediaItem(MediaManagerItem):
def on_clear_button_clicked(self):
# Clear the list, then set the "No search Results" message, then clear the text field and give it focus.
self.list_view.clear()
self.check_search_result()
self.quick_search_edit.clear()
self.quick_search_edit.setFocus()
def on_advanced_clear_button_clicked(self):
# The same as the on_clear_button_clicked, but gives focus to Book name field in "Select" (advanced).
self.list_view.clear()
self.check_search_result()
self.advanced_book_combo_box.setFocus()
def on_lock_button_toggled(self, checked):
@ -692,7 +677,6 @@ class BibleMediaItem(MediaManagerItem):
elif self.search_results:
self.display_results(bible, second_bible)
self.advancedSearchButton.setEnabled(True)
self.check_search_result()
self.application.set_normal_cursor()
def on_quick_reference_search(self):
@ -886,7 +870,6 @@ class BibleMediaItem(MediaManagerItem):
elif self.search_results:
self.display_results(bible, second_bible)
self.quickSearchButton.setEnabled(True)
self.check_search_result()
self.application.set_normal_cursor()
def on_quick_search_while_typing(self):
@ -917,7 +900,6 @@ class BibleMediaItem(MediaManagerItem):
self.__check_second_bible(bible, second_bible)
elif self.search_results:
self.display_results(bible, second_bible)
self.check_search_result()
self.application.set_normal_cursor()
def on_search_text_edit_changed(self):
@ -956,17 +938,13 @@ class BibleMediaItem(MediaManagerItem):
if len(text) == 0:
if not self.quickLockButton.isChecked():
self.list_view.clear()
self.check_search_result()
else:
if limit == 3 and (len(text) < limit or len(count_space_digit_reference) == 0):
if not self.quickLockButton.isChecked():
self.list_view.clear()
self.check_search_result()
elif (limit == 8 and (len(text) < limit or len(count_spaces_two_chars_text) == 0 or
len(count_two_chars_text) < 2)):
elif limit == 8 and (len(text) < limit or len(count_two_chars_text) < 2):
if not self.quickLockButton.isChecked():
self.list_view.clear()
self.check_search_result_search_while_typing_short()
self.list_view.clear(search_while_typing=True)
else:
"""
Start search if no chars are entered or deleted for 0.2 s

View File

@ -34,7 +34,7 @@ class Ui_CustomEditDialog(object):
:param custom_edit_dialog: The Dialog
"""
custom_edit_dialog.setObjectName('custom_edit_dialog')
custom_edit_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
custom_edit_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
custom_edit_dialog.resize(450, 350)
self.dialog_layout = QtWidgets.QVBoxLayout(custom_edit_dialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -31,7 +31,7 @@ from openlp.core.ui.lib import SpellTextEdit
class Ui_CustomSlideEditDialog(object):
def setupUi(self, custom_slide_edit_dialog):
custom_slide_edit_dialog.setObjectName('custom_slide_edit_dialog')
custom_slide_edit_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
custom_slide_edit_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
custom_slide_edit_dialog.resize(350, 300)
self.dialog_layout = QtWidgets.QVBoxLayout(custom_slide_edit_dialog)
self.slide_text_edit = SpellTextEdit(self)

View File

@ -105,8 +105,6 @@ class CustomMediaItem(MediaManagerItem):
[(CustomSearch.Titles, ':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles'),
translate('SongsPlugin.MediaItem', 'Search Titles...')),
(CustomSearch.Themes, ':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes)])
text = '{section}/last search type'.format(section=self.settings_section)
self.search_text_edit.set_current_search_type(Settings().value(text))
self.load_list(self.plugin.db_manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
self.config_update()
@ -131,7 +129,6 @@ class CustomMediaItem(MediaManagerItem):
# Called to redisplay the custom list screen edith from a search
# or from the exit of the Custom edit dialog. If remote editing is
# active trigger it and clean up so it will not update again.
self.check_search_result()
def on_new_click(self):
"""
@ -250,9 +247,6 @@ class CustomMediaItem(MediaManagerItem):
"""
Search the plugin database
"""
# Save the current search type to the configuration.
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
self.search_text_edit.current_search_type())
# Reload the list considering the new search type.
search_type = self.search_text_edit.current_search_type()
search_keywords = '%{search}%'.format(search=self.whitespace.sub(' ', self.search_text_edit.displayText()))
@ -268,7 +262,6 @@ class CustomMediaItem(MediaManagerItem):
CustomSlide.theme_name.like(search_keywords),
order_by_ref=CustomSlide.title)
self.load_list(search_results)
self.check_search_result()
def on_search_text_edit_changed(self, text):
"""

View File

@ -150,7 +150,8 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
triggers=self.on_replace_click)
if 'webkit' not in get_media_players()[0]:
self.replace_action.setDisabled(True)
self.replace_action_context.setDisabled(True)
if hasattr(self, 'replace_action_context'):
self.replace_action_context.setDisabled(True)
self.reset_action = self.toolbar.add_toolbar_action('reset_action', icon=':/system/system_close.png',
visible=False, triggers=self.on_reset_click)
self.media_widget = QtWidgets.QWidget(self)

View File

@ -36,7 +36,7 @@ class Ui_AuthorsDialog(object):
Set up the UI for the dialog.
"""
authors_dialog.setObjectName('authors_dialog')
authors_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
authors_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
authors_dialog.resize(300, 10)
authors_dialog.setModal(True)
self.dialog_layout = QtWidgets.QVBoxLayout(authors_dialog)

View File

@ -36,7 +36,7 @@ class Ui_EditSongDialog(object):
"""
def setupUi(self, edit_song_dialog):
edit_song_dialog.setObjectName('edit_song_dialog')
edit_song_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
edit_song_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
edit_song_dialog.resize(900, 600)
edit_song_dialog.setModal(True)
self.dialog_layout = QtWidgets.QVBoxLayout(edit_song_dialog)

View File

@ -118,13 +118,13 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
objects = self.manager.get_all_objects(cls)
objects.sort(key=get_key)
combo.clear()
combo.addItem('')
for obj in objects:
row = combo.count()
combo.addItem(obj.name)
cache.append(obj.name)
combo.setItemData(row, obj.id)
set_case_insensitive_completer(cache, combo)
combo.setEditText('')
def _add_author_to_list(self, author, author_type):
"""
@ -360,7 +360,6 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
authors = self.manager.get_all_objects(Author)
authors.sort(key=get_author_key)
self.authors_combo_box.clear()
self.authors_combo_box.addItem('')
self.authors = []
for author in authors:
row = self.authors_combo_box.count()
@ -368,6 +367,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
self.authors_combo_box.setItemData(row, author.id)
self.authors.append(author.display_name)
set_case_insensitive_completer(self.authors, self.authors_combo_box)
self.authors_combo_box.setEditText('')
# Types
self.author_types_combo_box.clear()
@ -398,11 +398,11 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
return get_natural_key(theme)
self.theme_combo_box.clear()
self.theme_combo_box.addItem('')
self.themes = theme_list
self.themes.sort(key=get_theme_key)
self.theme_combo_box.addItems(theme_list)
set_case_insensitive_completer(self.themes, self.theme_combo_box)
self.theme_combo_box.setEditText('')
def load_media_files(self):
"""
@ -442,7 +442,6 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
self.load_songbooks()
self.load_media_files()
self.theme_combo_box.setEditText('')
self.theme_combo_box.setCurrentIndex(0)
# it's a new song to preview is not possible
self.preview_button.setVisible(False)
@ -591,7 +590,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
self.manager.save_object(author)
self._add_author_to_list(author, author_type)
self.load_authors()
self.authors_combo_box.setCurrentIndex(0)
self.authors_combo_box.setEditText('')
else:
return
elif item > 0:
@ -602,7 +601,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
message=translate('SongsPlugin.EditSongForm', 'This author is already in the list.'))
else:
self._add_author_to_list(author, author_type)
self.authors_combo_box.setCurrentIndex(0)
self.authors_combo_box.setEditText('')
else:
QtWidgets.QMessageBox.warning(
self, UiStrings().NISs,
@ -666,7 +665,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
topic_item.setData(QtCore.Qt.UserRole, topic.id)
self.topics_list_view.addItem(topic_item)
self.load_topics()
self.topics_combo_box.setCurrentIndex(0)
self.topics_combo_box.setEditText('')
else:
return
elif item > 0:
@ -679,7 +678,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
topic_item = QtWidgets.QListWidgetItem(str(topic.name))
topic_item.setData(QtCore.Qt.UserRole, topic.id)
self.topics_list_view.addItem(topic_item)
self.topics_combo_box.setCurrentIndex(0)
self.topics_combo_box.setEditText('')
else:
QtWidgets.QMessageBox.warning(
self, UiStrings().NISs,
@ -709,7 +708,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
self.manager.save_object(songbook)
self.add_songbook_entry_to_list(songbook.id, songbook.name, self.songbook_entry_edit.text())
self.load_songbooks()
self.songbooks_combo_box.setCurrentIndex(0)
self.songbooks_combo_box.setEditText('')
self.songbook_entry_edit.clear()
else:
return
@ -721,7 +720,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
message=translate('SongsPlugin.EditSongForm', 'This Songbook is already in the list.'))
else:
self.add_songbook_entry_to_list(songbook.id, songbook.name, self.songbook_entry_edit.text())
self.songbooks_combo_box.setCurrentIndex(0)
self.songbooks_combo_box.setEditText('')
self.songbook_entry_edit.clear()
else:
QtWidgets.QMessageBox.warning(

View File

@ -31,7 +31,7 @@ from openlp.plugins.songs.lib import VerseType
class Ui_EditVerseDialog(object):
def setupUi(self, edit_verse_dialog):
edit_verse_dialog.setObjectName('edit_verse_dialog')
edit_verse_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
edit_verse_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
edit_verse_dialog.resize(400, 400)
edit_verse_dialog.setModal(True)
self.dialog_layout = QtWidgets.QVBoxLayout(edit_verse_dialog)

View File

@ -35,7 +35,7 @@ class Ui_MediaFilesDialog(object):
Set up the user interface.
"""
media_files_dialog.setObjectName('media_files_dialog')
media_files_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
media_files_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
media_files_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
media_files_dialog.resize(400, 300)
media_files_dialog.setModal(True)

View File

@ -35,7 +35,7 @@ class Ui_SongBookDialog(object):
Set up the user interface.
"""
song_book_dialog.setObjectName('song_book_dialog')
song_book_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
song_book_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
song_book_dialog.resize(300, 10)
self.dialog_layout = QtWidgets.QVBoxLayout(song_book_dialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -51,7 +51,7 @@ class SongExportForm(OpenLPWizard):
:param parent: The QWidget-derived parent of the wizard.
:param plugin: The songs plugin.
"""
super(SongExportForm, self).__init__(parent, plugin, 'song_export_wizard', ':/wizards/wizard_exportsong.bmp')
super(SongExportForm, self).__init__(parent, plugin, 'song_export_wizard', ':/wizards/wizard_song.bmp')
self.stop_export_flag = False
Registry().register_function('openlp_stop_wizard', self.stop_export)

View File

@ -52,7 +52,7 @@ class SongImportForm(OpenLPWizard, RegistryProperties):
:param parent: The QWidget-derived parent of the wizard.
:param plugin: The songs plugin.
"""
super(SongImportForm, self).__init__(parent, plugin, 'songImportWizard', ':/wizards/wizard_importsong.bmp')
super(SongImportForm, self).__init__(parent, plugin, 'songImportWizard', ':/wizards/wizard_song.bmp')
self.clipboard = self.main_window.clipboard
def setupUi(self, image):

View File

@ -37,7 +37,7 @@ class Ui_SongMaintenanceDialog(object):
Set up the user interface for the song maintenance dialog
"""
song_maintenance_dialog.setObjectName('song_maintenance_dialog')
song_maintenance_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
song_maintenance_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
song_maintenance_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
song_maintenance_dialog.resize(10, 350)
self.dialog_layout = QtWidgets.QGridLayout(song_maintenance_dialog)

View File

@ -182,7 +182,7 @@ class SongReviewWidget(QtWidgets.QWidget):
self.song_vertical_layout.addWidget(self.song_group_box)
self.song_remove_button = QtWidgets.QPushButton(self)
self.song_remove_button.setObjectName('song_remove_button')
self.song_remove_button.setIcon(build_icon(':/songs/song_delete.png'))
self.song_remove_button.setIcon(build_icon(':/general/general_delete.png'))
self.song_remove_button.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
self.song_vertical_layout.addWidget(self.song_remove_button, alignment=QtCore.Qt.AlignHCenter)

View File

@ -35,7 +35,7 @@ class Ui_TopicsDialog(object):
Set up the user interface for the topics dialog.
"""
topics_dialog.setObjectName('topics_dialog')
topics_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
topics_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
topics_dialog.resize(300, 10)
self.dialog_layout = QtWidgets.QVBoxLayout(topics_dialog)
self.dialog_layout.setObjectName('dialog_layout')

View File

@ -166,14 +166,9 @@ class SongMediaItem(MediaManagerItem):
translate('SongsPlugin.MediaItem', 'CCLI number'),
translate('SongsPlugin.MediaItem', 'Search CCLI number...'))
])
self.search_text_edit.set_current_search_type(
Settings().value('{section}/last search type'.format(section=self.settings_section)))
self.config_update()
def on_search_text_button_clicked(self):
# Save the current search type to the configuration.
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
self.search_text_edit.current_search_type())
# Reload the list considering the new search type.
search_keywords = str(self.search_text_edit.displayText())
search_type = self.search_text_edit.current_search_type()
@ -232,7 +227,6 @@ class SongMediaItem(MediaManagerItem):
search_results = self.plugin.manager.get_all_objects(
Song, and_(Song.ccli_number.like(search_string), Song.ccli_number != ''))
self.display_results_cclinumber(search_results)
self.check_search_result()
def search_entire(self, search_keywords):
search_string = '%{text}%'.format(text=clean_string(search_keywords))

View File

@ -38,7 +38,7 @@ class Ui_SongUsageDeleteDialog(object):
:param song_usage_delete_dialog:
"""
song_usage_delete_dialog.setObjectName('song_usage_delete_dialog')
song_usage_delete_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
song_usage_delete_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
song_usage_delete_dialog.resize(291, 243)
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_delete_dialog)
self.vertical_layout.setSpacing(8)

View File

@ -38,7 +38,7 @@ class Ui_SongUsageDetailDialog(object):
:param song_usage_detail_dialog:
"""
song_usage_detail_dialog.setObjectName('song_usage_detail_dialog')
song_usage_detail_dialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
song_usage_detail_dialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
song_usage_detail_dialog.resize(609, 413)
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_detail_dialog)
self.vertical_layout.setSpacing(8)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

View File

@ -23,8 +23,7 @@
<file>topic_maintenance.png</file>
<file>song_author_edit.png</file>
<file>song_book_edit.png</file>
<file>song_delete.png</file>
</qresource>
</qresource>
<qresource prefix="images">
<file>image_group.png</file>
<file>image_new_group.png</file>
@ -33,7 +32,6 @@
<file>bibles_search_combined.png</file>
<file>bibles_search_text.png</file>
<file>bibles_search_reference.png</file>
<file>bibles_upgrade_alert.png</file>
<file>bibles_search_clear.png</file>
<file>bibles_search_unlock.png</file>
<file>bibles_search_lock.png</file>
@ -71,7 +69,6 @@
<file>general_back.png</file>
</qresource>
<qresource prefix="slides">
<file>slide_close.png</file>
<file>slide_next.png</file>
<file>slide_blank.png</file>
<file>slide_desktop.png</file>
@ -83,12 +80,6 @@
<file>media_playback_next.png</file>
</qresource>
<qresource prefix="icon">
<file>openlp-logo-16x16.png</file>
<file>openlp-logo-32x32.png</file>
<file>openlp-logo-48x48.png</file>
<file>openlp-logo-64x64.png</file>
<file>openlp-logo-128x128.png</file>
<file>openlp-logo-256x256.png</file>
<file>openlp-logo.svg</file>
</qresource>
<qresource prefix="graphics">
@ -97,24 +88,18 @@
<file>openlp-about-logo.png</file>
</qresource>
<qresource prefix="imports">
<file>import_selectall.png</file>
<file>import_move_to_list.png</file>
<file>import_remove.png</file>
<file>import_load.png</file>
</qresource>
</qresource>
<qresource prefix="exports">
<file>export_load.png</file>
</qresource>
<qresource prefix="wizards">
<file>openlp-osx-wizard.png</file>
<file>wizard_exportsong.bmp</file>
<file>wizard_importsong.bmp</file>
<file>wizard_song.bmp</file>
<file>wizard_importbible.bmp</file>
<file>wizard_firsttime.bmp</file>
<file>wizard_createtheme.bmp</file>
<file>wizard_duplicateremoval.bmp</file>
<file>wizard_createprojector.png</file>
</qresource>
</qresource>
<qresource prefix="services">
<file>service_collapse_all.png</file>
<file>service_expand_all.png</file>
@ -155,10 +140,7 @@
<file>multimedia-player.png</file>
</qresource>
<qresource prefix="messagebox">
<file>messagebox_critical.png</file>
<file>messagebox_info.png</file>
<file>messagebox_warning.png</file>
</qresource>
</qresource>
<qresource prefix="remote">
<file>network_server.png</file>
<file>network_ssl.png</file>
@ -170,10 +152,8 @@
</qresource>
<qresource prefix="tools">
<file>tools_add.png</file>
<file>tools_alert.png</file>
</qresource>
</qresource>
<qresource prefix="themes">
<file>theme_delete.png</file>
<file>theme_new.png</file>
<file>theme_edit.png</file>
</qresource>
@ -201,12 +181,10 @@
<file>projector_power_on_tiled.png</file>
<file>projector_show.png</file>
<file>projector_show_tiled.png</file>
<file>projector_spacer.png</file>
<file>projector_warmup.png</file>
<file>projector_view.png</file>
</qresource>
</qresource>
<qresource prefix="remotes">
<file>android_app_qr.png</file>
<file>ios_app_qr.png</file>
</qresource>
</RCC>
</RCC>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,323 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="500"
height="85"
id="svg4363"
sodipodi:version="0.32"
inkscape:version="0.48.3.1 r9886"
version="1.0"
sodipodi:docname="openlp-website-logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/raoul/Projects/OpenLP/bug-1069109/resources/images/openlp-about-logo.png"
inkscape:export-xdpi="91.058823"
inkscape:export-ydpi="91.058823">
<defs
id="defs4365">
<linearGradient
id="linearGradient4043">
<stop
id="stop4045"
offset="0"
style="stop-color:#000d26;stop-opacity:1;" />
<stop
id="stop4047"
offset="1"
style="stop-color:#77a5ff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3208">
<stop
style="stop-color:#ffffff;stop-opacity:0.25098041;"
offset="0"
id="stop3210" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3212" />
</linearGradient>
<linearGradient
id="linearGradient6359">
<stop
style="stop-color:#000d26;stop-opacity:1;"
offset="0"
id="stop6361" />
<stop
style="stop-color:#507fda;stop-opacity:1;"
offset="1"
id="stop6363" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
style="stop-color:#cdcdff;stop-opacity:1;"
offset="0"
id="stop3197" />
<stop
style="stop-color:#ebebff;stop-opacity:1;"
offset="1"
id="stop3199" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective4371" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4437"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.12702,0,0,0.1374728,-18.124431,2.9208725)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4440"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938"
gradientTransform="matrix(0.1142015,0,0,0.1142015,-11.580885,2.363006)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4445"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<filter
inkscape:collect="always"
id="filter4956">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="10.731562"
id="feGaussianBlur4958" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4967"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<filter
inkscape:collect="always"
id="filter5019">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.333215"
id="feGaussianBlur5021" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.12702,0,0,0.1374728,-16.124431,1.0651835)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4030"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.1142015,0,0,0.1142015,-9.580885,0.507317)"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4043"
id="linearGradient4082"
x1="903.01746"
y1="1155.8621"
x2="903.01746"
y2="1010.8456"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="184.78458"
inkscape:cy="42.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="845"
inkscape:window-x="-4"
inkscape:window-y="-3"
inkscape:window-maximized="1" />
<metadata
id="metadata4368">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.1118197,0,0,0.1118197,-8.786549,-1.2232712)"
d="m 833.03006,395.26932 a 357.71872,357.71872 0 1 1 -715.43744,0 357.71872,357.71872 0 1 1 715.43744,0 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path3204"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;filter:url(#filter4956)"
sodipodi:type="arc" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
sodipodi:type="arc"
style="fill:#051e52;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="path3206"
sodipodi:cx="475.31134"
sodipodi:cy="395.26932"
sodipodi:rx="357.71872"
sodipodi:ry="357.71872"
d="m 833.03006,395.26932 a 357.71872,357.71872 0 1 1 -715.43744,0 357.71872,357.71872 0 1 1 715.43744,0 z"
transform="matrix(0.1118197,0,0,0.1118197,-8.786549,-1.2232712)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.1107234,0,0,0.1107234,-8.265479,-0.7899487)"
d="m 833.03006,395.26932 a 357.71872,357.71872 0 1 1 -715.43744,0 357.71872,357.71872 0 1 1 715.43744,0 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path3208"
style="fill:url(#linearGradient4967);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
sodipodi:type="arc" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
id="path3210"
d="m 44.36148,3.758491 c -6.297077,0 -12.248038,1.4878106 -17.522793,4.1290979 L 55.060733,30.528036 82.41913,52.476137 c 0.757958,-3.042375 1.159859,-6.2242 1.159859,-9.500137 0,-21.647054 -17.570455,-39.2175089 -39.217509,-39.217509 z m -27.440479,11.21316 c -1.397407,1.36948 -2.691129,2.843176 -3.872145,4.407464 L 51.188588,38.186674 79.157249,51.980074 51.306358,35.417288 16.921001,14.971651 z M 7.3459186,29.999854 c -0.6358568,1.811994 -1.1400074,3.684306 -1.5060323,5.60658 l 42.8148557,10.577914 28.5361,7.051943 -28.528962,-9.493 L 7.3459186,29.999854 z M 5.4223371,47.622573 c 0.2287353,1.934542 0.5954569,3.825699 1.0956206,5.663681 l 40.0561763,1.142015 30.40258,0.870786 -29.481831,-3.165522 -42.0725459,-4.51096 z m 72.7356489,9.510844 -31.32333,3.343963 -35.406034,3.779356 c 1.044472,1.612311 2.202222,3.144536 3.465302,4.582335 l 31.005707,-5.738626 32.258355,-5.967028 z m 2.416076,0.913612 -33.01494,10.899106 -23.311381,7.694326 c 5.882638,3.524576 12.76171,5.549478 20.113739,5.549479 16.307671,0 30.301779,-9.969218 36.212582,-24.142911 z"
style="fill:url(#linearGradient4030);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3212"
d="m 44.36148,3.758491 c -6.297077,0 -12.248038,1.4878106 -17.522793,4.1290979 l 28.222046,22.6404471 9.211065,7.390979 C 71.133234,37.064569 77.342848,35.776232 82.579726,34.161072 78.576448,16.75338 62.978175,3.7584911 44.36148,3.758491 z m -27.440479,11.21316 c -1.397407,1.36948 -2.691129,2.843176 -3.872145,4.407464 l 38.139732,18.807559 1.459638,0.720897 c 1.387008,-0.06663 2.75609,-0.150339 4.107685,-0.249815 L 51.306358,35.417288 16.921001,14.971651 z M 7.3459186,29.999854 c -0.4665326,1.329474 -0.862645,2.69238 -1.1848406,4.082704 7.470753,2.334095 16.950926,3.993198 27.508286,4.675124 L 7.3459186,29.999854 z"
style="fill:url(#linearGradient4027);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<g
id="g4991"
transform="matrix(0.5913526,0,0,0.5913526,-290.02996,-588.79058)"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter5019)">
<path
inkscape:connector-curvature="0"
id="path4993"
d="m 801.444,1038.553 15.617,0 c 18.862,0 28.496,10.444 28.496,25.961 0,15.212 -9.634,25.859 -28.496,25.859 l -8.316,0 0,17.139 -7.301,0 0,-68.959 0,0 z m 15.211,45.431 c 15.517,0 21.297,-8.112 21.297,-19.471 0,-11.359 -5.78,-19.471 -21.297,-19.471 l -7.91,0 0,38.941 7.91,0 0,10e-4 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4995"
d="m 852.858,1038.553 41.984,0 0,6.49 -34.684,0 0,32.35 30.931,0 0,6.389 -30.931,0 0,17.24 36.103,0 0,6.49 -43.403,0 0,-68.959 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4997"
d="m 913.197,1059.545 c -1.927,-2.333 -4.767,-6.39 -4.767,-6.39 0,0 0.608,4.868 0.608,7.81 l 0,46.547 -6.896,0 0,-69.669 1.217,0 41.173,48.677 c 1.927,2.333 4.259,5.163 4.259,5.163 0,0 0,-3.642 0,-6.582 l 0,-46.548 6.795,0 0,69.669 -1.217,0 -41.172,-48.677 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4999"
d="m 677.015,1070.032 c 0,-34.836 26.253,-58.564 58.564,-58.564 32.311,0 58.564,23.729 58.564,58.564 0,34.835 -26.253,58.564 -58.564,58.564 -32.311,0 -58.564,-23.728 -58.564,-58.564 z m 110.06,0 c 0,-29.955 -22.045,-52.338 -51.496,-52.338 -29.451,0 -51.496,22.383 -51.496,52.338 0,29.956 22.045,52.338 51.496,52.338 29.451,0 51.496,-22.382 51.496,-52.338 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path5001"
d="m 967.521,1012.814 23.561,0 0,93.737 51.833,0 0,20.699 -75.394,0 0,-114.436 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path5003"
d="m 1054.85,1012.814 31.639,0 c 31.975,0 51.16,16.661 51.16,44.26 0,27.6 -19.354,44.092 -51.16,44.092 l -8.078,0 0,26.085 -23.561,0 0,-114.437 z m 30.965,67.653 c 19.185,0 27.599,-7.741 27.599,-23.393 0,-15.819 -8.751,-23.561 -27.599,-23.561 l -7.405,0 0,46.953 7.405,0 0,0 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.69103849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
transform="matrix(0.5913526,0,0,0.5913526,-290.02996,-590.79058)"
id="g5005"
inkscape:export-xdpi="76.235291"
inkscape:export-ydpi="76.235291">
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 801.444,1038.553 15.617,0 c 18.862,0 28.496,10.444 28.496,25.961 0,15.212 -9.634,25.859 -28.496,25.859 l -8.316,0 0,17.139 -7.301,0 0,-68.959 0,0 z m 15.211,45.431 c 15.517,0 21.297,-8.112 21.297,-19.471 0,-11.359 -5.78,-19.471 -21.297,-19.471 l -7.91,0 0,38.941 7.91,0 0,10e-4 z"
id="path5007" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 852.858,1038.553 41.984,0 0,6.49 -34.684,0 0,32.35 30.931,0 0,6.389 -30.931,0 0,17.24 36.103,0 0,6.49 -43.403,0 0,-68.959 z"
id="path5009" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 913.197,1059.545 c -1.927,-2.333 -4.767,-6.39 -4.767,-6.39 0,0 0.608,4.868 0.608,7.81 l 0,46.547 -6.896,0 0,-69.669 1.217,0 41.173,48.677 c 1.927,2.333 4.259,5.163 4.259,5.163 0,0 0,-3.642 0,-6.582 l 0,-46.548 6.795,0 0,69.669 -1.217,0 -41.172,-48.677 z"
id="path5011" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 677.015,1070.032 c 0,-34.836 26.253,-58.564 58.564,-58.564 32.311,0 58.564,23.729 58.564,58.564 0,34.835 -26.253,58.564 -58.564,58.564 -32.311,0 -58.564,-23.728 -58.564,-58.564 z m 110.06,0 c 0,-29.955 -22.045,-52.338 -51.496,-52.338 -29.451,0 -51.496,22.383 -51.496,52.338 0,29.956 22.045,52.338 51.496,52.338 29.451,0 51.496,-22.382 51.496,-52.338 z"
id="path5013" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 967.521,1012.814 23.561,0 0,93.737 51.833,0 0,20.699 -75.394,0 0,-114.436 z"
id="path5015" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient4082);fill-opacity:1.0;stroke:#ffffff;stroke-width:0.84551924000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 1054.85,1012.814 31.639,0 c 31.975,0 51.16,16.661 51.16,44.26 0,27.6 -19.354,44.092 -51.16,44.092 l -8.078,0 0,26.085 -23.561,0 0,-114.437 z m 30.965,67.653 c 19.185,0 27.599,-7.741 27.599,-23.393 0,-15.819 -8.751,-23.561 -27.599,-23.561 l -7.405,0 0,46.953 7.405,0 0,0 z"
id="path5017" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,489 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="640"
height="480"
id="svg3208"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="openlp-default-dualdisplay.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3210">
<filter
inkscape:collect="always"
id="filter4005">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.333215"
id="feGaussianBlur4007" />
</filter>
<linearGradient
id="linearGradient3208">
<stop
style="stop-color:#ffffff;stop-opacity:0.25098041;"
offset="0"
id="stop3210" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3212" />
</linearGradient>
<linearGradient
id="linearGradient6359">
<stop
style="stop-color:#000d26;stop-opacity:1;"
offset="0"
id="stop6361" />
<stop
style="stop-color:#507fda;stop-opacity:1;"
offset="1"
id="stop6363" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
style="stop-color:#cdcdff;stop-opacity:1;"
offset="0"
id="stop3197" />
<stop
style="stop-color:#ebebff;stop-opacity:1;"
offset="1"
id="stop3199" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter6926">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.5771872"
id="feGaussianBlur6928" />
</filter>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective3216" />
<filter
inkscape:collect="always"
id="filter4203"
x="-0.0062387524"
width="1.0124775"
y="-0.15678384"
height="1.3135677">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.5096395"
id="feGaussianBlur4205" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4257"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4284"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5557126,0,0,0.6014434,52.878388,26.36294)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4287"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938"
gradientTransform="matrix(0.4996316,0,0,0.4996316,81.506404,23.922274)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.56875"
inkscape:cx="320"
inkscape:cy="233.85153"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
width="940px"
inkscape:window-width="1280"
inkscape:window-height="958"
inkscape:window-x="-4"
inkscape:window-y="-4" />
<metadata
id="metadata3213">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g4335">
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.00028753;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter6926)"
id="path3204"
sodipodi:cx="475.31134"
sodipodi:cy="395.26932"
sodipodi:rx="357.71872"
sodipodi:ry="357.71872"
d="M 833.03006,395.26932 A 357.71872,357.71872 0 1 1 117.59262,395.26932 A 357.71872,357.71872 0 1 1 833.03006,395.26932 z"
transform="matrix(0.4892111,0,0,0.4892111,84.981623,16.35095)"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
transform="matrix(0.4892111,0,0,0.4892111,84.981623,16.35095)"
d="M 833.03006,395.26932 A 357.71872,357.71872 0 1 1 117.59262,395.26932 A 357.71872,357.71872 0 1 1 833.03006,395.26932 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path3206"
style="fill:#051e52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.00028753;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
sodipodi:type="arc"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:type="arc"
style="fill:url(#linearGradient4257);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.00028753;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
id="path3208"
sodipodi:cx="475.31134"
sodipodi:cy="395.26932"
sodipodi:rx="357.71872"
sodipodi:ry="357.71872"
d="M 833.03006,395.26932 A 357.71872,357.71872 0 1 1 117.59262,395.26932 A 357.71872,357.71872 0 1 1 833.03006,395.26932 z"
transform="matrix(0.4844149,0,0,0.4844149,87.261306,18.246736)"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:url(#linearGradient4287);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 317.50427,38.146161 C 289.95456,38.146161 263.9191,44.655333 240.84204,56.210966 L 364.3135,155.26293 L 484.0065,251.28588 C 487.32257,237.97549 489.08088,224.055 489.08088,209.72278 C 489.08088,115.01691 412.21014,38.146162 317.50427,38.146161 z M 197.45216,87.203739 C 191.33851,93.195216 185.67847,99.642637 180.51153,106.4864 L 347.37287,188.76948 L 469.73577,249.1156 L 347.88811,176.65341 L 197.45216,87.203739 z M 155.56118,152.95213 C 152.7793,160.87961 150.57364,169.07097 148.97228,177.48092 L 336.28729,223.7593 L 461.13274,254.61155 L 336.31852,213.07968 L 155.56118,152.95213 z M 147.14551,230.05154 C 148.14622,238.51516 149.75063,246.78897 151.93885,254.83014 L 327.18463,259.82646 L 460.19593,263.63615 L 331.21291,249.78698 L 147.14551,230.05154 z M 465.36399,271.66148 L 328.32441,286.29132 L 173.423,302.826 C 177.99257,309.87987 183.05773,316.58335 188.5837,322.87372 L 324.23368,297.76723 L 465.36399,271.66148 z M 475.93433,275.65853 L 331.49395,323.34212 L 229.50665,357.0048 C 255.2432,372.42482 285.33914,381.28377 317.50427,381.28378 C 388.85034,381.28378 450.07456,337.66845 475.93433,275.65853 z"
id="path3210"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:url(#linearGradient4284);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.80000019;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 317.50427,38.146161 C 289.95456,38.146161 263.9191,44.655333 240.84204,56.210966 L 364.3135,155.26293 L 404.61191,187.59846 C 434.6307,183.86026 461.79776,178.22379 484.70911,171.15746 C 467.19476,94.998806 398.95232,38.146162 317.50427,38.146161 z M 197.45216,87.203739 C 191.33851,93.195216 185.67847,99.642637 180.51153,106.4864 L 347.37287,188.76948 L 353.75879,191.9234 C 359.82695,191.63189 365.81668,191.26566 371.72991,190.83046 L 347.88811,176.65341 L 197.45216,87.203739 z M 155.56118,152.95213 C 153.5201,158.76858 151.7871,164.73129 150.3775,170.81396 C 183.06204,181.02563 224.53781,188.28421 270.72626,191.26763 L 155.56118,152.95213 z"
id="path3212" />
<g
style="fill:#ffffff;fill-opacity:1;filter:url(#filter4005)"
id="g2762"
transform="matrix(0.6503605,0,0,0.6503605,-272.58365,-486.18544)">
<path
style="fill:#ffffff;fill-opacity:1"
id="path2764"
d="M 801.444,1038.553 L 817.061,1038.553 C 835.923,1038.553 845.557,1048.997 845.557,1064.514 C 845.557,1079.726 835.923,1090.373 817.061,1090.373 L 808.745,1090.373 L 808.745,1107.512 L 801.444,1107.512 L 801.444,1038.553 L 801.444,1038.553 z M 816.655,1083.984 C 832.172,1083.984 837.952,1075.872 837.952,1064.513 C 837.952,1053.154 832.172,1045.042 816.655,1045.042 L 808.745,1045.042 L 808.745,1083.983 L 816.655,1083.983 L 816.655,1083.984 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2766"
d="M 852.858,1038.553 L 894.842,1038.553 L 894.842,1045.043 L 860.158,1045.043 L 860.158,1077.393 L 891.089,1077.393 L 891.089,1083.782 L 860.158,1083.782 L 860.158,1101.022 L 896.261,1101.022 L 896.261,1107.512 L 852.858,1107.512 L 852.858,1038.553 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2768"
d="M 913.197,1059.545 C 911.27,1057.212 908.43,1053.155 908.43,1053.155 C 908.43,1053.155 909.038,1058.023 909.038,1060.965 L 909.038,1107.512 L 902.142,1107.512 L 902.142,1037.843 L 903.359,1037.843 L 944.532,1086.52 C 946.459,1088.853 948.791,1091.683 948.791,1091.683 C 948.791,1091.683 948.791,1088.041 948.791,1085.101 L 948.791,1038.553 L 955.586,1038.553 L 955.586,1108.222 L 954.369,1108.222 L 913.197,1059.545 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2770"
d="M 677.015,1070.032 C 677.015,1035.196 703.268,1011.468 735.579,1011.468 C 767.89,1011.468 794.143,1035.197 794.143,1070.032 C 794.143,1104.867 767.89,1128.596 735.579,1128.596 C 703.268,1128.596 677.015,1104.868 677.015,1070.032 z M 787.075,1070.032 C 787.075,1040.077 765.03,1017.694 735.579,1017.694 C 706.128,1017.694 684.083,1040.077 684.083,1070.032 C 684.083,1099.988 706.128,1122.37 735.579,1122.37 C 765.03,1122.37 787.075,1099.988 787.075,1070.032 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2772"
d="M 967.521,1012.814 L 991.082,1012.814 L 991.082,1106.551 L 1042.915,1106.551 L 1042.915,1127.25 L 967.521,1127.25 L 967.521,1012.814 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2774"
d="M 1054.85,1012.814 L 1086.489,1012.814 C 1118.464,1012.814 1137.649,1029.475 1137.649,1057.074 C 1137.649,1084.674 1118.295,1101.166 1086.489,1101.166 L 1078.411,1101.166 L 1078.411,1127.251 L 1054.85,1127.251 L 1054.85,1012.814 z M 1085.815,1080.467 C 1105,1080.467 1113.414,1072.726 1113.414,1057.074 C 1113.414,1041.255 1104.663,1033.513 1085.815,1033.513 L 1078.41,1033.513 L 1078.41,1080.466 L 1085.815,1080.466 L 1085.815,1080.467 z" />
</g>
<g
style="fill:#000d26;fill-opacity:1"
transform="matrix(0.6503605,0,0,0.6503605,-272.58365,-486.18544)"
id="g3221">
<path
style="fill:#000d26;fill-opacity:1"
d="M 801.444,1038.553 L 817.061,1038.553 C 835.923,1038.553 845.557,1048.997 845.557,1064.514 C 845.557,1079.726 835.923,1090.373 817.061,1090.373 L 808.745,1090.373 L 808.745,1107.512 L 801.444,1107.512 L 801.444,1038.553 L 801.444,1038.553 z M 816.655,1083.984 C 832.172,1083.984 837.952,1075.872 837.952,1064.513 C 837.952,1053.154 832.172,1045.042 816.655,1045.042 L 808.745,1045.042 L 808.745,1083.983 L 816.655,1083.983 L 816.655,1083.984 z"
id="path3223" />
<path
style="fill:#000d26;fill-opacity:1"
d="M 852.858,1038.553 L 894.842,1038.553 L 894.842,1045.043 L 860.158,1045.043 L 860.158,1077.393 L 891.089,1077.393 L 891.089,1083.782 L 860.158,1083.782 L 860.158,1101.022 L 896.261,1101.022 L 896.261,1107.512 L 852.858,1107.512 L 852.858,1038.553 z"
id="path3225" />
<path
style="fill:#000d26;fill-opacity:1"
d="M 913.197,1059.545 C 911.27,1057.212 908.43,1053.155 908.43,1053.155 C 908.43,1053.155 909.038,1058.023 909.038,1060.965 L 909.038,1107.512 L 902.142,1107.512 L 902.142,1037.843 L 903.359,1037.843 L 944.532,1086.52 C 946.459,1088.853 948.791,1091.683 948.791,1091.683 C 948.791,1091.683 948.791,1088.041 948.791,1085.101 L 948.791,1038.553 L 955.586,1038.553 L 955.586,1108.222 L 954.369,1108.222 L 913.197,1059.545 z"
id="path3227" />
<path
style="fill:#000d26;fill-opacity:1"
d="M 677.015,1070.032 C 677.015,1035.196 703.268,1011.468 735.579,1011.468 C 767.89,1011.468 794.143,1035.197 794.143,1070.032 C 794.143,1104.867 767.89,1128.596 735.579,1128.596 C 703.268,1128.596 677.015,1104.868 677.015,1070.032 z M 787.075,1070.032 C 787.075,1040.077 765.03,1017.694 735.579,1017.694 C 706.128,1017.694 684.083,1040.077 684.083,1070.032 C 684.083,1099.988 706.128,1122.37 735.579,1122.37 C 765.03,1122.37 787.075,1099.988 787.075,1070.032 z"
id="path3229" />
<path
style="fill:#000d26;fill-opacity:1"
d="M 967.521,1012.814 L 991.082,1012.814 L 991.082,1106.551 L 1042.915,1106.551 L 1042.915,1127.25 L 967.521,1127.25 L 967.521,1012.814 z"
id="path3335" />
<path
style="fill:#000d26;fill-opacity:1"
d="M 1054.85,1012.814 L 1086.489,1012.814 C 1118.464,1012.814 1137.649,1029.475 1137.649,1057.074 C 1137.649,1084.674 1118.295,1101.166 1086.489,1101.166 L 1078.411,1101.166 L 1078.411,1127.251 L 1054.85,1127.251 L 1054.85,1012.814 z M 1085.815,1080.467 C 1105,1080.467 1113.414,1072.726 1113.414,1057.074 C 1113.414,1041.255 1104.663,1033.513 1085.815,1033.513 L 1078.41,1033.513 L 1078.41,1080.466 L 1085.815,1080.466 L 1085.815,1080.467 z"
id="path3337" />
</g>
</g>
<g
id="g4356">
<g
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;filter:url(#filter4203)"
transform="translate(4.4621514,71.394422)"
id="g3339">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3025"
d="M 22.673731,370.71529 C 22.673731,364.06085 27.839035,359.16086 34.328304,359.16086 C 40.81705,359.16086 45.981829,364.06085 45.981829,370.71529 C 45.981829,377.36973 40.81705,382.26971 34.328304,382.26971 C 27.839035,382.26971 22.673731,377.37025 22.673731,370.71529 z M 41.214502,370.71529 C 41.214502,366.51058 38.433386,363.29898 34.328304,363.29898 C 30.222698,363.29898 27.441583,366.51058 27.441583,370.71529 C 27.441583,374.91999 30.222698,378.1316 34.328304,378.1316 C 38.433386,378.1316 41.214502,374.91999 41.214502,370.71529 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3027"
d="M 49.922267,359.45869 L 56.146219,359.45869 C 62.436763,359.45869 66.21046,362.73583 66.21046,368.16541 C 66.21046,373.59498 62.403205,376.83961 56.146219,376.83961 L 54.556936,376.83961 L 54.556936,381.97136 L 49.922267,381.97136 L 49.922267,359.45869 z M 56.013561,372.76809 C 59.787782,372.76809 61.443133,371.2454 61.443133,368.16593 C 61.443133,365.05343 59.721715,363.53074 56.013561,363.53074 L 54.556936,363.53074 L 54.556936,372.76809 L 56.013561,372.76809 L 56.013561,372.76809 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3013"
d="M 70.150962,359.45843 L 85.049122,359.45843 L 85.049122,363.53048 L 74.785631,363.53048 L 74.785631,370.68199 L 83.824257,370.68199 L 83.824257,374.65494 L 74.785631,374.65494 L 74.785631,377.89957 L 85.512641,377.89957 L 85.512641,381.97162 L 70.150962,381.97162 L 70.150962,359.45843 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3015"
d="M 209.80292,381.97162 L 204.43941,381.97162 L 200.73126,376.27726 C 200.3013,376.34332 199.83778,376.37636 199.40729,376.37636 L 197.81801,376.37636 L 197.81801,381.97162 L 193.18334,381.97162 L 193.18334,359.45843 L 199.40729,359.45843 C 205.69784,359.45843 209.47153,362.4713 209.47153,367.96694 C 209.47153,371.47637 207.91581,373.69487 205.13469,374.95277 L 209.80292,381.97162 z M 199.27463,372.33734 C 203.04886,372.33734 204.70421,371.14604 204.70421,367.96694 C 204.70421,364.7889 202.98279,363.53048 199.27463,363.53048 L 197.81801,363.53048 L 197.81801,372.33734 L 199.27463,372.33734 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3017"
d="M 534.09128,363.53048 L 527.6686,363.53048 L 527.6686,359.45843 L 545.14968,359.45843 L 545.14968,363.53048 L 538.72647,363.53048 L 538.72647,381.97162 L 534.09128,381.97162 L 534.09128,363.53048 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3019"
d="M 295.01444,374.82011 L 286.47289,359.45843 L 291.60463,359.45843 L 295.57706,366.70904 C 296.43803,368.2978 297.3981,370.97982 297.3981,370.97982 C 297.3981,370.97982 298.2921,368.33136 299.15308,366.70904 L 302.96086,359.45843 L 307.69462,359.45843 L 299.68319,374.48925 L 299.68319,381.97162 L 295.01496,381.97162 L 295.01496,374.82011 L 295.01444,374.82011 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3021"
d="M 171.03352,373.67756 L 171.03352,359.30951 L 175.66819,359.30951 L 175.66819,373.41329 C 175.66819,376.69044 177.0923,377.94834 180.17124,377.94834 C 183.21715,377.94834 184.60771,376.69044 184.60771,373.41329 L 184.60771,359.30951 L 189.2429,359.30951 L 189.2429,373.67756 C 189.2429,379.37193 185.30247,382.12054 180.17124,382.12054 C 174.97291,382.12001 171.03352,379.37193 171.03352,373.67756 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3023"
d="M 332.19508,359.45843 L 336.82975,359.45843 L 336.82975,381.97162 L 332.19508,381.97162 L 332.19508,359.45843 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3031"
d="M 123.72152,377.51864 L 127.49574,375.3337 C 128.48885,376.95602 129.77978,378.14785 132.06434,378.14785 C 133.98448,378.14785 135.20987,377.18778 135.20987,375.86329 C 135.20987,374.27453 133.95198,373.71138 131.83311,372.78435 L 130.67431,372.28779 C 127.33005,370.8642 125.11208,369.07672 125.11208,365.30249 C 125.11208,361.8261 127.76106,359.17712 131.89917,359.17712 C 134.84546,359.17712 136.96433,360.20378 138.48754,362.88527 L 134.87849,365.20287 C 134.08359,363.77928 133.22314,363.21666 131.89865,363.21666 C 130.54112,363.21666 129.68068,364.07763 129.68068,365.20287 C 129.68068,366.59343 130.54165,367.15657 132.52786,368.01702 L 133.68666,368.51357 C 137.62657,370.20196 139.84454,371.92337 139.84454,375.79722 C 139.84454,379.96889 136.5674,382.25293 132.16397,382.25293 C 127.86016,382.25293 125.07904,380.20013 123.72152,377.51864 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3041"
d="M 465.62309,377.8828 L 469.39678,375.59876 C 470.12562,376.88969 470.78734,377.98242 472.37663,377.98242 C 473.89984,377.98242 474.85991,377.38624 474.85991,375.06865 L 474.85991,359.30951 L 479.49511,359.30951 L 479.49511,375.13471 C 479.49511,379.9356 476.68096,382.12054 472.57535,382.12054 C 468.8672,382.12054 466.71529,380.20039 465.62309,377.8828 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3045"
d="M 269.79773,359.45843 L 274.4324,359.45843 L 274.4324,377.89905 L 284.62982,377.89905 L 284.62982,381.97162 L 269.79773,381.97162 L 269.79773,359.45843 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3051"
d="M 213.74336,370.69825 C 213.74336,364.04381 218.87458,359.17686 225.33082,359.17686 C 229.40339,359.17686 232.31664,360.63296 234.33641,363.77849 L 230.79342,366.29481 C 229.73372,364.57287 227.9132,363.34801 225.33082,363.34801 C 221.25824,363.34801 218.51068,366.49354 218.51068,370.69825 C 218.51068,374.90295 221.25824,378.11455 225.33082,378.11455 C 228.24459,378.11455 229.86638,376.724 231.12481,374.80385 L 234.73386,377.28662 C 232.78016,380.33305 229.66818,382.25319 225.33082,382.25319 C 218.8751,382.25267 213.74336,377.35321 213.74336,370.69825 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3057"
d="M 96.140027,371.50967 C 95.014786,370.44997 93.458536,368.43072 93.458536,368.43072 C 93.458536,368.43072 93.789921,370.91349 93.789921,372.53581 L 93.789921,381.97136 L 89.45308,381.97136 L 89.45308,359.25996 L 89.916599,359.25996 L 101.2723,369.92038 C 102.36503,370.94652 103.92075,372.99933 103.92075,372.99933 C 103.92075,372.99933 103.62293,370.45049 103.62293,368.89424 L 103.62293,359.45869 L 107.95977,359.45869 L 107.95977,382.17009 L 107.49625,382.17009 L 96.140027,371.50967 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 143.78498,370.71503 C 143.78498,364.06059 148.95028,359.1606 155.43955,359.1606 C 161.9283,359.1606 167.09308,364.06059 167.09308,370.71503 C 167.09308,377.36946 161.9283,382.26945 155.43955,382.26945 C 148.95028,382.26945 143.78498,377.36999 143.78498,370.71503 z M 162.32575,370.71503 C 162.32575,366.51032 159.54464,363.29872 155.43955,363.29872 C 151.33395,363.29872 148.55283,366.51032 148.55283,370.71503 C 148.55283,374.91973 151.33395,378.13133 155.43955,378.13133 C 159.54464,378.13133 162.32575,374.91973 162.32575,370.71503 z"
id="path3231" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 238.6743,359.45843 L 253.57246,359.45843 L 253.57246,363.53048 L 243.30897,363.53048 L 243.30897,370.68199 L 252.34759,370.68199 L 252.34759,374.65494 L 243.30897,374.65494 L 243.30897,377.89957 L 254.03598,377.89957 L 254.03598,381.97162 L 238.6743,381.97162 L 238.6743,359.45843 z"
id="path3233" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 328.25464,381.97162 L 322.89114,381.97162 L 319.18298,376.27726 C 318.75302,376.34332 318.2895,376.37636 317.85901,376.37636 L 316.26973,376.37636 L 316.26973,381.97162 L 311.63506,381.97162 L 311.63506,359.45843 L 317.85901,359.45843 C 324.14956,359.45843 327.92326,362.4713 327.92326,367.96694 C 327.92326,371.47637 326.36753,373.69487 323.58641,374.95277 L 328.25464,381.97162 z M 317.72636,372.33734 C 321.50058,372.33734 323.15593,371.14604 323.15593,367.96694 C 323.15593,364.7889 321.43451,363.53048 317.72636,363.53048 L 316.26973,363.53048 L 316.26973,372.33734 L 317.72636,372.33734 z"
id="path3235" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 365.70113,377.51864 L 369.47535,375.3337 C 370.46845,376.95602 371.75938,378.14785 374.04395,378.14785 C 375.96409,378.14785 377.18948,377.18778 377.18948,375.86329 C 377.18948,374.27453 375.93158,373.71138 373.81271,372.78435 L 372.65391,372.28779 C 369.30965,370.8642 367.09168,369.07672 367.09168,365.30249 C 367.09168,361.8261 369.74066,359.17712 373.87878,359.17712 C 376.82506,359.17712 378.94393,360.20378 380.46715,362.88527 L 376.8581,365.20287 C 376.06319,363.77928 375.20275,363.21666 373.87826,363.21666 C 372.52073,363.21666 371.66028,364.07763 371.66028,365.20287 C 371.66028,366.59343 372.52126,367.15657 374.50747,368.01702 L 375.66627,368.51357 C 379.60618,370.20196 381.82415,371.92337 381.82415,375.79722 C 381.82415,379.96889 378.54701,382.25293 374.14357,382.25293 C 369.83976,382.25293 367.05865,380.20013 365.70113,377.51864 z"
id="path3237" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 340.77019,370.69825 C 340.77019,364.04381 345.90141,359.17686 352.35764,359.17686 C 356.43022,359.17686 359.34347,360.63296 361.36323,363.77849 L 357.82025,366.29481 C 356.76055,364.57287 354.94003,363.34801 352.35764,363.34801 C 348.28507,363.34801 345.53751,366.49354 345.53751,370.69825 C 345.53751,374.90295 348.28507,378.11455 352.35764,378.11455 C 355.27142,378.11455 356.89321,376.724 358.15163,374.80385 L 361.76069,377.28662 C 359.80698,380.33305 356.69501,382.25319 352.35764,382.25319 C 345.90193,382.25267 340.77019,377.35321 340.77019,370.69825 z"
id="path3239" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 397.5859,359.45869 L 403.80985,359.45869 C 410.1004,359.45869 413.8741,362.73583 413.8741,368.16541 C 413.8741,373.59498 410.06684,376.83961 403.80985,376.83961 L 402.22057,376.83961 L 402.22057,381.97136 L 397.5859,381.97136 L 397.5859,359.45869 z M 403.6772,372.76809 C 407.45142,372.76809 409.10677,371.2454 409.10677,368.16593 C 409.10677,365.05343 407.38535,363.53074 403.6772,363.53074 L 402.22057,363.53074 L 402.22057,372.76809 L 403.6772,372.76809 L 403.6772,372.76809 z"
id="path3241" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 483.43554,359.45843 L 498.33371,359.45843 L 498.33371,363.53048 L 488.07021,363.53048 L 488.07021,370.68199 L 497.10884,370.68199 L 497.10884,374.65494 L 488.07021,374.65494 L 488.07021,377.89957 L 498.79723,377.89957 L 498.79723,381.97162 L 483.43554,381.97162 L 483.43554,359.45843 z"
id="path3243" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 434.43411,381.97162 L 429.07061,381.97162 L 425.36245,376.27726 C 424.93249,376.34332 424.46897,376.37636 424.03849,376.37636 L 422.4492,376.37636 L 422.4492,381.97162 L 417.81453,381.97162 L 417.81453,359.45843 L 424.03849,359.45843 C 430.32903,359.45843 434.10273,362.4713 434.10273,367.96694 C 434.10273,371.47637 432.547,373.69487 429.76589,374.95277 L 434.43411,381.97162 z M 423.90583,372.33734 C 427.68005,372.33734 429.3354,371.14604 429.3354,367.96694 C 429.3354,364.7889 427.61398,363.53048 423.90583,363.53048 L 422.4492,363.53048 L 422.4492,372.33734 L 423.90583,372.33734 z"
id="path3245" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 549.09011,359.45843 L 553.72478,359.45843 L 553.72478,381.97162 L 549.09011,381.97162 L 549.09011,359.45843 z"
id="path3247" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 502.73766,370.69825 C 502.73766,364.04381 507.86888,359.17686 514.32512,359.17686 C 518.39769,359.17686 521.31094,360.63296 523.33071,363.77849 L 519.78773,366.29481 C 518.72803,364.57287 516.90751,363.34801 514.32512,363.34801 C 510.25255,363.34801 507.50499,366.49354 507.50499,370.69825 C 507.50499,374.90295 510.25255,378.11455 514.32512,378.11455 C 517.23889,378.11455 518.86069,376.724 520.11911,374.80385 L 523.72816,377.28662 C 521.77446,380.33305 518.66249,382.25319 514.32512,382.25319 C 507.86941,382.25267 502.73766,377.35321 502.73766,370.69825 z"
id="path3249" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 591.6007,371.50967 C 590.47546,370.44997 588.91921,368.43072 588.91921,368.43072 C 588.91921,368.43072 589.2506,370.91349 589.2506,372.53581 L 589.2506,381.97136 L 584.91376,381.97136 L 584.91376,359.25996 L 585.37728,359.25996 L 596.73297,369.92038 C 597.8257,370.94652 599.38143,372.99933 599.38143,372.99933 C 599.38143,372.99933 599.0836,370.45049 599.0836,368.89424 L 599.0836,359.45869 L 603.42044,359.45869 L 603.42044,382.17009 L 602.95693,382.17009 L 591.6007,371.50967 z"
id="path3251" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path3253"
d="M 438.37455,370.71503 C 438.37455,364.06059 443.53985,359.1606 450.02912,359.1606 C 456.51787,359.1606 461.68265,364.06059 461.68265,370.71503 C 461.68265,377.36946 456.51787,382.26945 450.02912,382.26945 C 443.53985,382.26945 438.37455,377.36999 438.37455,370.71503 z M 456.91532,370.71503 C 456.91532,366.51032 454.13421,363.29872 450.02912,363.29872 C 445.92352,363.29872 443.1424,366.51032 443.1424,370.71503 C 443.1424,374.91973 445.92352,378.13133 450.02912,378.13133 C 454.13421,378.13133 456.91532,374.91973 456.91532,370.71503 z" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
d="M 557.66522,370.71503 C 557.66522,364.06059 562.83052,359.1606 569.31979,359.1606 C 575.80854,359.1606 580.97332,364.06059 580.97332,370.71503 C 580.97332,377.36946 575.80854,382.26945 569.31979,382.26945 C 562.83052,382.26945 557.66522,377.36999 557.66522,370.71503 z M 576.20599,370.71503 C 576.20599,366.51032 573.42488,363.29872 569.31979,363.29872 C 565.21419,363.29872 562.43307,366.51032 562.43307,370.71503 C 562.43307,374.91973 565.21419,378.13133 569.31979,378.13133 C 573.42488,378.13133 576.20599,374.91973 576.20599,370.71503 z"
id="path3255" />
</g>
<g
id="g4137"
transform="translate(4.4621514,71.394422)"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1">
<path
d="M 22.673731,370.71529 C 22.673731,364.06085 27.839035,359.16086 34.328304,359.16086 C 40.81705,359.16086 45.981829,364.06085 45.981829,370.71529 C 45.981829,377.36973 40.81705,382.26971 34.328304,382.26971 C 27.839035,382.26971 22.673731,377.37025 22.673731,370.71529 z M 41.214502,370.71529 C 41.214502,366.51058 38.433386,363.29898 34.328304,363.29898 C 30.222698,363.29898 27.441583,366.51058 27.441583,370.71529 C 27.441583,374.91999 30.222698,378.1316 34.328304,378.1316 C 38.433386,378.1316 41.214502,374.91999 41.214502,370.71529 z"
id="path4139"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 49.922267,359.45869 L 56.146219,359.45869 C 62.436763,359.45869 66.21046,362.73583 66.21046,368.16541 C 66.21046,373.59498 62.403205,376.83961 56.146219,376.83961 L 54.556936,376.83961 L 54.556936,381.97136 L 49.922267,381.97136 L 49.922267,359.45869 z M 56.013561,372.76809 C 59.787782,372.76809 61.443133,371.2454 61.443133,368.16593 C 61.443133,365.05343 59.721715,363.53074 56.013561,363.53074 L 54.556936,363.53074 L 54.556936,372.76809 L 56.013561,372.76809 L 56.013561,372.76809 z"
id="path4141"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 70.150962,359.45843 L 85.049122,359.45843 L 85.049122,363.53048 L 74.785631,363.53048 L 74.785631,370.68199 L 83.824257,370.68199 L 83.824257,374.65494 L 74.785631,374.65494 L 74.785631,377.89957 L 85.512641,377.89957 L 85.512641,381.97162 L 70.150962,381.97162 L 70.150962,359.45843 z"
id="path4143"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 209.80292,381.97162 L 204.43941,381.97162 L 200.73126,376.27726 C 200.3013,376.34332 199.83778,376.37636 199.40729,376.37636 L 197.81801,376.37636 L 197.81801,381.97162 L 193.18334,381.97162 L 193.18334,359.45843 L 199.40729,359.45843 C 205.69784,359.45843 209.47153,362.4713 209.47153,367.96694 C 209.47153,371.47637 207.91581,373.69487 205.13469,374.95277 L 209.80292,381.97162 z M 199.27463,372.33734 C 203.04886,372.33734 204.70421,371.14604 204.70421,367.96694 C 204.70421,364.7889 202.98279,363.53048 199.27463,363.53048 L 197.81801,363.53048 L 197.81801,372.33734 L 199.27463,372.33734 z"
id="path4145"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 534.09128,363.53048 L 527.6686,363.53048 L 527.6686,359.45843 L 545.14968,359.45843 L 545.14968,363.53048 L 538.72647,363.53048 L 538.72647,381.97162 L 534.09128,381.97162 L 534.09128,363.53048 z"
id="path4147"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 295.01444,374.82011 L 286.47289,359.45843 L 291.60463,359.45843 L 295.57706,366.70904 C 296.43803,368.2978 297.3981,370.97982 297.3981,370.97982 C 297.3981,370.97982 298.2921,368.33136 299.15308,366.70904 L 302.96086,359.45843 L 307.69462,359.45843 L 299.68319,374.48925 L 299.68319,381.97162 L 295.01496,381.97162 L 295.01496,374.82011 L 295.01444,374.82011 z"
id="path4149"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 171.03352,373.67756 L 171.03352,359.30951 L 175.66819,359.30951 L 175.66819,373.41329 C 175.66819,376.69044 177.0923,377.94834 180.17124,377.94834 C 183.21715,377.94834 184.60771,376.69044 184.60771,373.41329 L 184.60771,359.30951 L 189.2429,359.30951 L 189.2429,373.67756 C 189.2429,379.37193 185.30247,382.12054 180.17124,382.12054 C 174.97291,382.12001 171.03352,379.37193 171.03352,373.67756 z"
id="path4151"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 332.19508,359.45843 L 336.82975,359.45843 L 336.82975,381.97162 L 332.19508,381.97162 L 332.19508,359.45843 z"
id="path4153"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 123.72152,377.51864 L 127.49574,375.3337 C 128.48885,376.95602 129.77978,378.14785 132.06434,378.14785 C 133.98448,378.14785 135.20987,377.18778 135.20987,375.86329 C 135.20987,374.27453 133.95198,373.71138 131.83311,372.78435 L 130.67431,372.28779 C 127.33005,370.8642 125.11208,369.07672 125.11208,365.30249 C 125.11208,361.8261 127.76106,359.17712 131.89917,359.17712 C 134.84546,359.17712 136.96433,360.20378 138.48754,362.88527 L 134.87849,365.20287 C 134.08359,363.77928 133.22314,363.21666 131.89865,363.21666 C 130.54112,363.21666 129.68068,364.07763 129.68068,365.20287 C 129.68068,366.59343 130.54165,367.15657 132.52786,368.01702 L 133.68666,368.51357 C 137.62657,370.20196 139.84454,371.92337 139.84454,375.79722 C 139.84454,379.96889 136.5674,382.25293 132.16397,382.25293 C 127.86016,382.25293 125.07904,380.20013 123.72152,377.51864 z"
id="path4155"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 465.62309,377.8828 L 469.39678,375.59876 C 470.12562,376.88969 470.78734,377.98242 472.37663,377.98242 C 473.89984,377.98242 474.85991,377.38624 474.85991,375.06865 L 474.85991,359.30951 L 479.49511,359.30951 L 479.49511,375.13471 C 479.49511,379.9356 476.68096,382.12054 472.57535,382.12054 C 468.8672,382.12054 466.71529,380.20039 465.62309,377.8828 z"
id="path4157"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 269.79773,359.45843 L 274.4324,359.45843 L 274.4324,377.89905 L 284.62982,377.89905 L 284.62982,381.97162 L 269.79773,381.97162 L 269.79773,359.45843 z"
id="path4159"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 213.74336,370.69825 C 213.74336,364.04381 218.87458,359.17686 225.33082,359.17686 C 229.40339,359.17686 232.31664,360.63296 234.33641,363.77849 L 230.79342,366.29481 C 229.73372,364.57287 227.9132,363.34801 225.33082,363.34801 C 221.25824,363.34801 218.51068,366.49354 218.51068,370.69825 C 218.51068,374.90295 221.25824,378.11455 225.33082,378.11455 C 228.24459,378.11455 229.86638,376.724 231.12481,374.80385 L 234.73386,377.28662 C 232.78016,380.33305 229.66818,382.25319 225.33082,382.25319 C 218.8751,382.25267 213.74336,377.35321 213.74336,370.69825 z"
id="path4161"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 96.140027,371.50967 C 95.014786,370.44997 93.458536,368.43072 93.458536,368.43072 C 93.458536,368.43072 93.789921,370.91349 93.789921,372.53581 L 93.789921,381.97136 L 89.45308,381.97136 L 89.45308,359.25996 L 89.916599,359.25996 L 101.2723,369.92038 C 102.36503,370.94652 103.92075,372.99933 103.92075,372.99933 C 103.92075,372.99933 103.62293,370.45049 103.62293,368.89424 L 103.62293,359.45869 L 107.95977,359.45869 L 107.95977,382.17009 L 107.49625,382.17009 L 96.140027,371.50967 z"
id="path4163"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4165"
d="M 143.78498,370.71503 C 143.78498,364.06059 148.95028,359.1606 155.43955,359.1606 C 161.9283,359.1606 167.09308,364.06059 167.09308,370.71503 C 167.09308,377.36946 161.9283,382.26945 155.43955,382.26945 C 148.95028,382.26945 143.78498,377.36999 143.78498,370.71503 z M 162.32575,370.71503 C 162.32575,366.51032 159.54464,363.29872 155.43955,363.29872 C 151.33395,363.29872 148.55283,366.51032 148.55283,370.71503 C 148.55283,374.91973 151.33395,378.13133 155.43955,378.13133 C 159.54464,378.13133 162.32575,374.91973 162.32575,370.71503 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4167"
d="M 238.6743,359.45843 L 253.57246,359.45843 L 253.57246,363.53048 L 243.30897,363.53048 L 243.30897,370.68199 L 252.34759,370.68199 L 252.34759,374.65494 L 243.30897,374.65494 L 243.30897,377.89957 L 254.03598,377.89957 L 254.03598,381.97162 L 238.6743,381.97162 L 238.6743,359.45843 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4169"
d="M 328.25464,381.97162 L 322.89114,381.97162 L 319.18298,376.27726 C 318.75302,376.34332 318.2895,376.37636 317.85901,376.37636 L 316.26973,376.37636 L 316.26973,381.97162 L 311.63506,381.97162 L 311.63506,359.45843 L 317.85901,359.45843 C 324.14956,359.45843 327.92326,362.4713 327.92326,367.96694 C 327.92326,371.47637 326.36753,373.69487 323.58641,374.95277 L 328.25464,381.97162 z M 317.72636,372.33734 C 321.50058,372.33734 323.15593,371.14604 323.15593,367.96694 C 323.15593,364.7889 321.43451,363.53048 317.72636,363.53048 L 316.26973,363.53048 L 316.26973,372.33734 L 317.72636,372.33734 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4171"
d="M 365.70113,377.51864 L 369.47535,375.3337 C 370.46845,376.95602 371.75938,378.14785 374.04395,378.14785 C 375.96409,378.14785 377.18948,377.18778 377.18948,375.86329 C 377.18948,374.27453 375.93158,373.71138 373.81271,372.78435 L 372.65391,372.28779 C 369.30965,370.8642 367.09168,369.07672 367.09168,365.30249 C 367.09168,361.8261 369.74066,359.17712 373.87878,359.17712 C 376.82506,359.17712 378.94393,360.20378 380.46715,362.88527 L 376.8581,365.20287 C 376.06319,363.77928 375.20275,363.21666 373.87826,363.21666 C 372.52073,363.21666 371.66028,364.07763 371.66028,365.20287 C 371.66028,366.59343 372.52126,367.15657 374.50747,368.01702 L 375.66627,368.51357 C 379.60618,370.20196 381.82415,371.92337 381.82415,375.79722 C 381.82415,379.96889 378.54701,382.25293 374.14357,382.25293 C 369.83976,382.25293 367.05865,380.20013 365.70113,377.51864 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4173"
d="M 340.77019,370.69825 C 340.77019,364.04381 345.90141,359.17686 352.35764,359.17686 C 356.43022,359.17686 359.34347,360.63296 361.36323,363.77849 L 357.82025,366.29481 C 356.76055,364.57287 354.94003,363.34801 352.35764,363.34801 C 348.28507,363.34801 345.53751,366.49354 345.53751,370.69825 C 345.53751,374.90295 348.28507,378.11455 352.35764,378.11455 C 355.27142,378.11455 356.89321,376.724 358.15163,374.80385 L 361.76069,377.28662 C 359.80698,380.33305 356.69501,382.25319 352.35764,382.25319 C 345.90193,382.25267 340.77019,377.35321 340.77019,370.69825 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4175"
d="M 397.5859,359.45869 L 403.80985,359.45869 C 410.1004,359.45869 413.8741,362.73583 413.8741,368.16541 C 413.8741,373.59498 410.06684,376.83961 403.80985,376.83961 L 402.22057,376.83961 L 402.22057,381.97136 L 397.5859,381.97136 L 397.5859,359.45869 z M 403.6772,372.76809 C 407.45142,372.76809 409.10677,371.2454 409.10677,368.16593 C 409.10677,365.05343 407.38535,363.53074 403.6772,363.53074 L 402.22057,363.53074 L 402.22057,372.76809 L 403.6772,372.76809 L 403.6772,372.76809 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4177"
d="M 483.43554,359.45843 L 498.33371,359.45843 L 498.33371,363.53048 L 488.07021,363.53048 L 488.07021,370.68199 L 497.10884,370.68199 L 497.10884,374.65494 L 488.07021,374.65494 L 488.07021,377.89957 L 498.79723,377.89957 L 498.79723,381.97162 L 483.43554,381.97162 L 483.43554,359.45843 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4179"
d="M 434.43411,381.97162 L 429.07061,381.97162 L 425.36245,376.27726 C 424.93249,376.34332 424.46897,376.37636 424.03849,376.37636 L 422.4492,376.37636 L 422.4492,381.97162 L 417.81453,381.97162 L 417.81453,359.45843 L 424.03849,359.45843 C 430.32903,359.45843 434.10273,362.4713 434.10273,367.96694 C 434.10273,371.47637 432.547,373.69487 429.76589,374.95277 L 434.43411,381.97162 z M 423.90583,372.33734 C 427.68005,372.33734 429.3354,371.14604 429.3354,367.96694 C 429.3354,364.7889 427.61398,363.53048 423.90583,363.53048 L 422.4492,363.53048 L 422.4492,372.33734 L 423.90583,372.33734 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4181"
d="M 549.09011,359.45843 L 553.72478,359.45843 L 553.72478,381.97162 L 549.09011,381.97162 L 549.09011,359.45843 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4183"
d="M 502.73766,370.69825 C 502.73766,364.04381 507.86888,359.17686 514.32512,359.17686 C 518.39769,359.17686 521.31094,360.63296 523.33071,363.77849 L 519.78773,366.29481 C 518.72803,364.57287 516.90751,363.34801 514.32512,363.34801 C 510.25255,363.34801 507.50499,366.49354 507.50499,370.69825 C 507.50499,374.90295 510.25255,378.11455 514.32512,378.11455 C 517.23889,378.11455 518.86069,376.724 520.11911,374.80385 L 523.72816,377.28662 C 521.77446,380.33305 518.66249,382.25319 514.32512,382.25319 C 507.86941,382.25267 502.73766,377.35321 502.73766,370.69825 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4185"
d="M 591.6007,371.50967 C 590.47546,370.44997 588.91921,368.43072 588.91921,368.43072 C 588.91921,368.43072 589.2506,370.91349 589.2506,372.53581 L 589.2506,381.97136 L 584.91376,381.97136 L 584.91376,359.25996 L 585.37728,359.25996 L 596.73297,369.92038 C 597.8257,370.94652 599.38143,372.99933 599.38143,372.99933 C 599.38143,372.99933 599.0836,370.45049 599.0836,368.89424 L 599.0836,359.45869 L 603.42044,359.45869 L 603.42044,382.17009 L 602.95693,382.17009 L 591.6007,371.50967 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
d="M 438.37455,370.71503 C 438.37455,364.06059 443.53985,359.1606 450.02912,359.1606 C 456.51787,359.1606 461.68265,364.06059 461.68265,370.71503 C 461.68265,377.36946 456.51787,382.26945 450.02912,382.26945 C 443.53985,382.26945 438.37455,377.36999 438.37455,370.71503 z M 456.91532,370.71503 C 456.91532,366.51032 454.13421,363.29872 450.02912,363.29872 C 445.92352,363.29872 443.1424,366.51032 443.1424,370.71503 C 443.1424,374.91973 445.92352,378.13133 450.02912,378.13133 C 454.13421,378.13133 456.91532,374.91973 456.91532,370.71503 z"
id="path4187"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
<path
id="path4189"
d="M 557.66522,370.71503 C 557.66522,364.06059 562.83052,359.1606 569.31979,359.1606 C 575.80854,359.1606 580.97332,364.06059 580.97332,370.71503 C 580.97332,377.36946 575.80854,382.26945 569.31979,382.26945 C 562.83052,382.26945 557.66522,377.36999 557.66522,370.71503 z M 576.20599,370.71503 C 576.20599,366.51032 573.42488,363.29872 569.31979,363.29872 C 565.21419,363.29872 562.43307,366.51032 562.43307,370.71503 C 562.43307,374.91973 565.21419,378.13133 569.31979,378.13133 C 573.42488,378.13133 576.20599,374.91973 576.20599,370.71503 z"
style="fill:#000d26;fill-opacity:1;stroke:#cdcdff;stroke-opacity:1" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
@ -7,358 +7,109 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="467.39178"
height="467.39178"
version="1.1"
id="svg5740"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
version="1.0"
x="0px"
y="0px"
viewBox="0 0 453.02106 452.89808"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="openlp-logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="91.860847"
inkscape:export-ydpi="91.860847"
style="display:inline">
<defs
id="defs5742">
<linearGradient
id="linearGradient3208">
<stop
style="stop-color:#ffffff;stop-opacity:0.25098041;"
offset="0"
id="stop3210" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3212" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
style="stop-color:#cdcdff;stop-opacity:1;"
offset="0"
id="stop3197" />
<stop
style="stop-color:#ebebff;stop-opacity:1;"
offset="1"
id="stop3199" />
</linearGradient>
<linearGradient
id="linearGradient6359">
<stop
style="stop-color:#000d26;stop-opacity:1;"
offset="0"
id="stop6361" />
<stop
style="stop-color:#507fda;stop-opacity:1;"
offset="1"
id="stop6363" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective5748" />
<filter
inkscape:collect="always"
id="filter6926"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.5771872"
id="feGaussianBlur6928" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3214"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3229"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3279"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3287"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient3196"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3198"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3200"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient3215"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3217"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3219"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4010"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4013"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938"
gradientTransform="matrix(0.6515729,0,0,0.6515729,-72.086668,-5.3154816)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4047"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4049"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4051"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4053"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4055"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6515729,0,0,0.6515729,-72.086668,-5.3154816)"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4057"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
</defs>
<sodipodi:namedview
id="base"
inkscape:export-filename="/home/raoul/Dropbox/OpenLPNewBrand/wiki.png"
inkscape:export-xdpi="23.68"
inkscape:export-ydpi="23.68"
width="453.02106"
height="452.89807"><metadata
id="metadata3420"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3418" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
borderopacity="1"
objecttolerance="10"
inkscape:pageopacity="0.0"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1.0119683"
inkscape:cx="501.72348"
inkscape:cy="187.6618"
inkscape:document-units="px"
inkscape:current-layer="layer6"
inkscape:window-width="1366"
inkscape:window-height="739"
id="namedview3416"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="839"
inkscape:window-x="1022"
inkscape:window-y="-3"
inkscape:window-maximized="1" />
<metadata
id="metadata5745">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Shadow"
inkscape:groupmode="layer"
id="layer1"
style="display:inline"
transform="translate(-11.872025,-13.171852)" />
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Border"
style="display:inline"
transform="translate(-11.872025,-13.171852)" />
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Rays Background"
style="display:inline"
transform="translate(-11.872025,-13.171852)" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Rays Foreground"
style="display:inline"
transform="translate(-11.872025,-13.171852)" />
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Reflection"
style="display:inline"
transform="translate(-11.872025,-13.171852)">
<g
id="g4018"
transform="translate(9.8817328,9.8817328)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path6903"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;filter:url(#filter6926)"
sodipodi:type="arc" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
sodipodi:type="arc"
style="fill:#051e52;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="path6900"
sodipodi:cx="475.31134"
sodipodi:cy="395.26932"
sodipodi:rx="357.71872"
sodipodi:ry="357.71872"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.6317287,0,0,0.6317287,-64.581662,-12.716988)"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path6317"
style="fill:url(#linearGradient4053);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
sodipodi:type="arc" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
id="path6327"
d="m 235.67972,13.233984 c -35.92776,0 -69.88078,8.488655 -99.97572,23.558433 L 296.72396,165.96674 452.81639,291.19091 c 4.32451,-17.35817 6.61754,-35.51197 6.61754,-54.20272 0,-123.50655 -100.24766,-223.754205 -223.75421,-223.754206 z M 79.118968,77.210299 C 71.146114,85.023824 63.764822,93.431949 57.026574,102.35694 L 274.63156,209.66285 434.20584,288.36064 275.3035,193.86221 79.118968,77.210299 z M 24.488653,162.95322 c -3.62786,10.33827 -6.504275,21.02069 -8.592618,31.98816 L 260.17479,255.29332 422.98657,295.52794 260.21551,241.36595 24.488653,162.95322 z M 13.513722,263.49906 c 1.305042,11.03747 3.397359,21.8274 6.251027,32.31395 l 228.539191,6.51573 173.46093,4.96824 L 253.55725,289.23619 13.513722,263.49906 z M 428.50457,317.76287 249.79034,336.84174 47.782384,358.40473 c 5.959201,9.19899 12.564704,17.94104 19.771165,26.14436 L 244.45559,351.80755 428.50457,317.76287 z m 13.78484,5.21258 -188.36565,62.18449 -133.00232,43.89972 c 33.5632,20.10936 72.81152,31.66237 114.75828,31.66238 93.04288,0 172.8858,-56.87905 206.60969,-137.74659 z"
style="fill:url(#linearGradient4055);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<path
id="path3203"
d="m 235.67972,13.233984 c -35.92776,0 -69.88078,8.488655 -99.97572,23.558433 l 161.01996,129.174323 52.55342,42.16899 c 39.1477,-4.87501 74.57645,-12.22557 104.45528,-21.44082 C 430.89209,87.375898 341.89666,13.233985 235.67972,13.233984 z M 79.118968,77.210299 c -7.972854,7.813525 -15.354146,16.22165 -22.092394,25.146641 l 217.604986,107.30591 8.32792,4.11306 c 7.91353,-0.38016 15.72478,-0.85776 23.43626,-1.42532 L 275.3035,193.86221 79.118968,77.210299 z M 24.488653,162.95322 c -2.661786,7.58527 -4.921793,15.36128 -6.760069,23.29373 42.624133,13.3171 96.712956,22.78306 156.947626,26.67377 L 24.488653,162.95322 z"
style="fill:url(#linearGradient4057);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
</g>
</g>
</svg>
inkscape:zoom="1"
inkscape:cx="151.21623"
inkscape:cy="240.04907"
inkscape:window-x="1920"
inkscape:window-y="312"
inkscape:window-maximized="1"
inkscape:current-layer="svg5740"
fit-margin-left="0"
fit-margin-top="0"
fit-margin-right="0"
fit-margin-bottom="0"
showguides="true"
inkscape:guide-bbox="true"><inkscape:grid
type="xygrid"
id="grid4307"
originx="-7.1894622"
originy="-7.2509281" /><sodipodi:guide
position="368,452.89804"
orientation="0,1"
id="guide3418"
inkscape:label=""
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
position="-1.6629762e-07,295.00004"
orientation="1,0"
id="guide3420"
inkscape:label=""
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
position="453.021,273.00004"
orientation="1,0"
id="guide3422"
inkscape:label=""
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
position="362,2.6917146e-05"
orientation="0,1"
id="guide3424"
inkscape:label=""
inkscape:color="rgb(0,0,255)" /></sodipodi:namedview><style
type="text/css"
id="style3407">
.st0{fill:url(#rect4108_1_);}
.st1{fill:#FFFFFF;}
</style><linearGradient
id="rect4108_1_"
gradientUnits="userSpaceOnUse"
x1="472.42209"
y1="595.45251"
x2="58.062099"
y2="524.92249"
gradientTransform="matrix(0.96923727,0,0,0.96897412,28.933406,-281.34151)"><stop
offset="0"
style="stop-color:#1E468C"
id="stop3410" /><stop
offset="1"
style="stop-color:#507FDA"
id="stop3412" /></linearGradient><g
id="g3567"
inkscape:export-filename="/home/raoul/Projects/OpenLP/OpenLP/new-branding/resources/images/openlp-splash-screen.png"
inkscape:export-xdpi="73.526482"
inkscape:export-ydpi="73.526482"
transform="translate(-30,-30)"><path
inkscape:export-filename="/home/raoul/Projects/OpenLP/WebSite/new-brand/themes/openlp2v2/assets/images/logo.png"
inkscape:export-ydpi="11.92"
inkscape:export-xdpi="11.92"
id="rect4108"
d="M 256.50947,30 A 226.51075,226.44925 0 0 0 30,256.44798 226.51075,226.44925 0 0 0 256.50947,482.89808 226.51075,226.44925 0 0 0 483.02107,256.44798 226.51075,226.44925 0 0 0 256.50947,30 Z"
style="fill:url(#rect4108_1_)"
inkscape:connector-curvature="0" /><path
inkscape:export-filename="/home/raoul/Projects/OpenLP/WebSite/new-brand/themes/openlp2v2/assets/images/logo.png"
inkscape:export-ydpi="11.92"
inkscape:export-xdpi="11.92"
style="fill:#ffffff"
inkscape:connector-curvature="0"
d="m 256.51033,46.633891 c -115.94546,0 -209.871922,94.007299 -209.871922,209.814939 0,115.80763 93.926462,209.81494 209.871922,209.81494 115.94546,0 209.87192,-94.00731 209.87192,-209.81494 0,-115.80764 -93.92646,-209.814939 -209.87192,-209.814939 z m -0.63823,17.546612 c 106.15923,0 192.32054,86.137907 192.32054,192.268327 0,15.73878 -1.9147,31.37121 -5.74409,46.57828 L 308.31348,195.51423 169.92354,84.492035 C 196.6229,71.092804 225.98157,64.180503 255.8721,64.180503 Z M 121.20517,119.26623 289.91113,219.54777 426.49275,300.7939 289.2729,233.15969 102.27095,140.85388 c 5.74409,-7.6567 12.12641,-14.88804 18.93422,-21.58765 z M 74.295122,192.962 276.93375,260.38352 416.8129,306.9618 276.93375,272.29395 66.955456,220.39852 c 1.701951,-9.3582 4.148507,-18.5037 7.339666,-27.43652 z m -9.467106,86.3506 206.361644,22.11936 144.6659,15.52609 -149.13352,-4.25372 -196.469053,-5.63619 c -2.446555,-9.03916 -4.254879,-18.39735 -5.424971,-27.75554 l 0,0 z M 421.59964,325.99722 263.42451,355.24157 111.31257,383.42249 C 105.143,376.40385 99.39891,368.85349 94.293055,360.9841 L 267.9985,342.4804 421.59964,325.99722 Z m 11.91366,4.46641 c -40.84684,98.04833 -153.49476,144.52027 -251.56973,103.57818 -8.50976,-3.50933 -16.80677,-7.76305 -24.6783,-12.44215 l 114.34988,-37.7518 161.89815,-53.38423 z"
class="st1"
id="path6317" /></g></svg>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -1,296 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="370"
height="370"
id="svg4079"
sodipodi:version="0.32"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="openlp-splash-screen.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0"
inkscape:export-filename="/home/raoul/Projects/openlp/bitsandbobs/resources/images/openlp-splash-screen2.png"
inkscape:export-xdpi="53.549999"
inkscape:export-ydpi="53.549999">
<defs
id="defs4081">
<filter
inkscape:collect="always"
id="filter4005">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.333215"
id="feGaussianBlur4007" />
</filter>
<linearGradient
id="linearGradient3208">
<stop
style="stop-color:#ffffff;stop-opacity:0.25098041;"
offset="0"
id="stop3210" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3212" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4051"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
id="linearGradient6359">
<stop
style="stop-color:#000d26;stop-opacity:1;"
offset="0"
id="stop6361" />
<stop
style="stop-color:#507fda;stop-opacity:1;"
offset="1"
id="stop6363" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4049"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
id="linearGradient3195">
<stop
style="stop-color:#cdcdff;stop-opacity:1;"
offset="0"
id="stop3197" />
<stop
style="stop-color:#ebebff;stop-opacity:1;"
offset="1"
id="stop3199" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4047"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<filter
inkscape:collect="always"
id="filter6926">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.5771872"
id="feGaussianBlur6928" />
</filter>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective4087" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient3817"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3819"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3821"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3824"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.55571269,0,0,0.60144348,-66.059425,16.146882)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3827"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938"
gradientTransform="matrix(0.49963164,0,0,0.49963164,-37.431406,13.706216)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="224.70154"
inkscape:cy="190.60628"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="961"
inkscape:window-x="-3"
inkscape:window-y="-4"
inkscape:window-maximized="1" />
<metadata
id="metadata4084">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-13.571437,-14.505051)">
<g
id="g3832">
<path
transform="matrix(0.48921117,0,0,0.48921117,-33.956187,6.1348916)"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
sodipodi:ry="357.71872"
sodipodi:rx="357.71872"
sodipodi:cy="395.26932"
sodipodi:cx="475.31134"
id="path3206"
style="fill:#051e52;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
sodipodi:type="arc"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:type="arc"
style="fill:url(#linearGradient3817);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="path3208"
sodipodi:cx="475.31134"
sodipodi:cy="395.26932"
sodipodi:rx="357.71872"
sodipodi:ry="357.71872"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
transform="matrix(0.48441496,0,0,0.48441496,-31.676504,8.0306779)"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:url(#linearGradient3827);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m 198.56648,27.930104 c -27.54972,0 -53.58518,6.509173 -76.66223,18.064807 l 123.47147,99.051969 119.693,96.02296 c 3.31607,-13.31039 5.07438,-27.23088 5.07438,-41.56311 0,-94.70587 -76.87075,-171.576625 -171.57662,-171.576626 z M 78.514361,76.987686 C 72.400709,82.979164 66.740672,89.426585 61.573726,96.270345 L 228.43508,178.55343 350.79799,238.89956 228.95033,166.43736 78.514361,76.987686 z m -41.89099,65.748404 c -2.781874,7.92747 -4.987533,16.11884 -6.588892,24.52879 L 217.3495,213.54326 342.19496,244.39551 217.38073,202.86363 36.623371,142.73609 z m -8.41567,77.0994 c 1.000717,8.46362 2.605124,16.73744 4.793341,24.77861 l 175.245798,4.99632 133.01131,3.80969 L 212.27512,239.57094 28.207701,219.83549 z M 346.42621,261.44544 209.38662,276.07528 54.485202,292.60997 c 4.569566,7.05386 9.634722,13.75734 15.160698,20.04772 L 205.29589,287.5512 346.42621,261.44544 z m 10.57034,3.99706 -144.44039,47.68359 -101.98731,33.66268 c 25.73655,15.42002 55.8325,24.27897 87.99763,24.27898 71.34607,0 132.5703,-43.61534 158.43007,-105.62525 z"
id="path3210"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:url(#linearGradient3824);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m 198.56648,27.930104 c -27.54972,0 -53.58518,6.509173 -76.66223,18.064807 l 123.47147,99.051969 40.29841,32.33554 c 30.01879,-3.7382 57.18585,-9.37467 80.0972,-16.44101 C 348.25699,84.782754 280.01453,27.930105 198.56648,27.930104 z M 78.514361,76.987686 C 72.400709,82.979164 66.740672,89.426585 61.573726,96.270345 l 166.861354,82.283085 6.38592,3.15392 c 6.06816,-0.29151 12.05789,-0.65773 17.97112,-1.09294 L 228.95033,166.43736 78.514361,76.987686 z m -41.89099,65.748404 c -2.04108,5.81644 -3.774072,11.77916 -5.183678,17.86183 32.684548,10.21166 74.160317,17.47024 120.348767,20.45367 L 36.623371,142.73609 z"
id="path3212" />
<g
style="fill:#ffffff;fill-opacity:1;filter:url(#filter4005)"
id="g2762"
transform="matrix(0.6503605,0,0,0.6503605,-391.52146,-496.40149)">
<path
style="fill:#ffffff;fill-opacity:1"
id="path2764"
d="m 801.444,1038.553 15.617,0 c 18.862,0 28.496,10.444 28.496,25.961 0,15.212 -9.634,25.859 -28.496,25.859 l -8.316,0 0,17.139 -7.301,0 0,-68.959 0,0 z m 15.211,45.431 c 15.517,0 21.297,-8.112 21.297,-19.471 0,-11.359 -5.78,-19.471 -21.297,-19.471 l -7.91,0 0,38.941 7.91,0 0,10e-4 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2766"
d="m 852.858,1038.553 41.984,0 0,6.49 -34.684,0 0,32.35 30.931,0 0,6.389 -30.931,0 0,17.24 36.103,0 0,6.49 -43.403,0 0,-68.959 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2768"
d="m 913.197,1059.545 c -1.927,-2.333 -4.767,-6.39 -4.767,-6.39 0,0 0.608,4.868 0.608,7.81 l 0,46.547 -6.896,0 0,-69.669 1.217,0 41.173,48.677 c 1.927,2.333 4.259,5.163 4.259,5.163 0,0 0,-3.642 0,-6.582 l 0,-46.548 6.795,0 0,69.669 -1.217,0 -41.172,-48.677 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2770"
d="m 677.015,1070.032 c 0,-34.836 26.253,-58.564 58.564,-58.564 32.311,0 58.564,23.729 58.564,58.564 0,34.835 -26.253,58.564 -58.564,58.564 -32.311,0 -58.564,-23.728 -58.564,-58.564 z m 110.06,0 c 0,-29.955 -22.045,-52.338 -51.496,-52.338 -29.451,0 -51.496,22.383 -51.496,52.338 0,29.956 22.045,52.338 51.496,52.338 29.451,0 51.496,-22.382 51.496,-52.338 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2772"
d="m 967.521,1012.814 23.561,0 0,93.737 51.833,0 0,20.699 -75.394,0 0,-114.436 z" />
<path
style="fill:#ffffff;fill-opacity:1"
id="path2774"
d="m 1054.85,1012.814 31.639,0 c 31.975,0 51.16,16.661 51.16,44.26 0,27.6 -19.354,44.092 -51.16,44.092 l -8.078,0 0,26.085 -23.561,0 0,-114.437 z m 30.965,67.653 c 19.185,0 27.599,-7.741 27.599,-23.393 0,-15.819 -8.751,-23.561 -27.599,-23.561 l -7.405,0 0,46.953 7.405,0 0,0 z" />
</g>
<g
style="fill:#000d26;fill-opacity:1"
transform="matrix(0.6503605,0,0,0.6503605,-391.52146,-496.40149)"
id="g3221">
<path
style="fill:#000d26;fill-opacity:1"
d="m 801.444,1038.553 15.617,0 c 18.862,0 28.496,10.444 28.496,25.961 0,15.212 -9.634,25.859 -28.496,25.859 l -8.316,0 0,17.139 -7.301,0 0,-68.959 0,0 z m 15.211,45.431 c 15.517,0 21.297,-8.112 21.297,-19.471 0,-11.359 -5.78,-19.471 -21.297,-19.471 l -7.91,0 0,38.941 7.91,0 0,10e-4 z"
id="path3223" />
<path
style="fill:#000d26;fill-opacity:1"
d="m 852.858,1038.553 41.984,0 0,6.49 -34.684,0 0,32.35 30.931,0 0,6.389 -30.931,0 0,17.24 36.103,0 0,6.49 -43.403,0 0,-68.959 z"
id="path3225" />
<path
style="fill:#000d26;fill-opacity:1"
d="m 913.197,1059.545 c -1.927,-2.333 -4.767,-6.39 -4.767,-6.39 0,0 0.608,4.868 0.608,7.81 l 0,46.547 -6.896,0 0,-69.669 1.217,0 41.173,48.677 c 1.927,2.333 4.259,5.163 4.259,5.163 0,0 0,-3.642 0,-6.582 l 0,-46.548 6.795,0 0,69.669 -1.217,0 -41.172,-48.677 z"
id="path3227" />
<path
style="fill:#000d26;fill-opacity:1"
d="m 677.015,1070.032 c 0,-34.836 26.253,-58.564 58.564,-58.564 32.311,0 58.564,23.729 58.564,58.564 0,34.835 -26.253,58.564 -58.564,58.564 -32.311,0 -58.564,-23.728 -58.564,-58.564 z m 110.06,0 c 0,-29.955 -22.045,-52.338 -51.496,-52.338 -29.451,0 -51.496,22.383 -51.496,52.338 0,29.956 22.045,52.338 51.496,52.338 29.451,0 51.496,-22.382 51.496,-52.338 z"
id="path3229" />
<path
style="fill:#000d26;fill-opacity:1"
d="m 967.521,1012.814 23.561,0 0,93.737 51.833,0 0,20.699 -75.394,0 0,-114.436 z"
id="path3231" />
<path
style="fill:#000d26;fill-opacity:1"
d="m 1054.85,1012.814 31.639,0 c 31.975,0 51.16,16.661 51.16,44.26 0,27.6 -19.354,44.092 -51.16,44.092 l -8.078,0 0,26.085 -23.561,0 0,-114.437 z m 30.965,67.653 c 19.185,0 27.599,-7.741 27.599,-23.393 0,-15.819 -8.751,-23.561 -27.599,-23.561 l -7.405,0 0,46.953 7.405,0 0,0 z"
id="path3233" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Some files were not shown because too many files have changed in this diff Show More