trunk
@ -71,6 +71,12 @@ class OpenLPMixin(object):
|
|||||||
"""
|
"""
|
||||||
self.logger.info(message)
|
self.logger.info(message)
|
||||||
|
|
||||||
|
def log_warning(self, message):
|
||||||
|
"""
|
||||||
|
Common log warning handler
|
||||||
|
"""
|
||||||
|
self.logger.warning(message)
|
||||||
|
|
||||||
def log_error(self, message):
|
def log_error(self, message):
|
||||||
"""
|
"""
|
||||||
Common log error handler which prints the calling path
|
Common log error handler which prints the calling path
|
||||||
|
@ -214,7 +214,10 @@ class Settings(QtCore.QSettings):
|
|||||||
('media/players', 'media/players_temp', [(media_players_conv, None)]), # Convert phonon to system
|
('media/players', 'media/players_temp', [(media_players_conv, None)]), # Convert phonon to system
|
||||||
('media/players_temp', 'media/players', []), # Move temp setting from above to correct setting
|
('media/players_temp', 'media/players', []), # Move temp setting from above to correct setting
|
||||||
('advanced/default color', 'core/logo background color', []), # Default image renamed + moved to general > 2.4.
|
('advanced/default color', 'core/logo background color', []), # Default image renamed + moved to general > 2.4.
|
||||||
('advanced/default image', '/core/logo file', []) # Default image renamed + moved to general after 2.4.
|
('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.
|
||||||
]
|
]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -261,11 +264,10 @@ class Settings(QtCore.QSettings):
|
|||||||
'shortcuts/blankScreen': [QtGui.QKeySequence(QtCore.Qt.Key_Period)],
|
'shortcuts/blankScreen': [QtGui.QKeySequence(QtCore.Qt.Key_Period)],
|
||||||
'shortcuts/collapse': [QtGui.QKeySequence(QtCore.Qt.Key_Minus)],
|
'shortcuts/collapse': [QtGui.QKeySequence(QtCore.Qt.Key_Minus)],
|
||||||
'shortcuts/desktopScreen': [QtGui.QKeySequence(QtCore.Qt.Key_D)],
|
'shortcuts/desktopScreen': [QtGui.QKeySequence(QtCore.Qt.Key_D)],
|
||||||
'shortcuts/delete': [QtGui.QKeySequence(QtGui.QKeySequence.Delete),
|
'shortcuts/desktopScreenEnable': [QtGui.QKeySequence(QtCore.Qt.Key_Escape)],
|
||||||
QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
|
'shortcuts/delete': [QtGui.QKeySequence(QtGui.QKeySequence.Delete)],
|
||||||
'shortcuts/down': [QtGui.QKeySequence(QtCore.Qt.Key_Down)],
|
'shortcuts/down': [QtGui.QKeySequence(QtCore.Qt.Key_Down)],
|
||||||
'shortcuts/editSong': [],
|
'shortcuts/editSong': [],
|
||||||
'shortcuts/escapeItem': [QtGui.QKeySequence(QtCore.Qt.Key_Escape)],
|
|
||||||
'shortcuts/expand': [QtGui.QKeySequence(QtCore.Qt.Key_Plus)],
|
'shortcuts/expand': [QtGui.QKeySequence(QtCore.Qt.Key_Plus)],
|
||||||
'shortcuts/exportThemeItem': [],
|
'shortcuts/exportThemeItem': [],
|
||||||
'shortcuts/fileNewItem': [QtGui.QKeySequence(QtGui.QKeySequence.New)],
|
'shortcuts/fileNewItem': [QtGui.QKeySequence(QtGui.QKeySequence.New)],
|
||||||
@ -274,6 +276,7 @@ class Settings(QtCore.QSettings):
|
|||||||
'shortcuts/fileSaveItem': [QtGui.QKeySequence(QtGui.QKeySequence.Save)],
|
'shortcuts/fileSaveItem': [QtGui.QKeySequence(QtGui.QKeySequence.Save)],
|
||||||
'shortcuts/fileOpenItem': [QtGui.QKeySequence(QtGui.QKeySequence.Open)],
|
'shortcuts/fileOpenItem': [QtGui.QKeySequence(QtGui.QKeySequence.Open)],
|
||||||
'shortcuts/goLive': [],
|
'shortcuts/goLive': [],
|
||||||
|
'shortcuts/HelpItem': [QtGui.QKeySequence(QtGui.QKeySequence.HelpContents)],
|
||||||
'shortcuts/importThemeItem': [],
|
'shortcuts/importThemeItem': [],
|
||||||
'shortcuts/importBibleItem': [],
|
'shortcuts/importBibleItem': [],
|
||||||
'shortcuts/listViewBiblesDeleteItem': [QtGui.QKeySequence(QtGui.QKeySequence.Delete)],
|
'shortcuts/listViewBiblesDeleteItem': [QtGui.QKeySequence(QtGui.QKeySequence.Delete)],
|
||||||
@ -334,8 +337,6 @@ class Settings(QtCore.QSettings):
|
|||||||
QtGui.QKeySequence(QtCore.Qt.Key_PageDown)],
|
QtGui.QKeySequence(QtCore.Qt.Key_PageDown)],
|
||||||
'shortcuts/nextService': [QtGui.QKeySequence(QtCore.Qt.Key_Right)],
|
'shortcuts/nextService': [QtGui.QKeySequence(QtCore.Qt.Key_Right)],
|
||||||
'shortcuts/newService': [],
|
'shortcuts/newService': [],
|
||||||
'shortcuts/offlineHelpItem': [QtGui.QKeySequence(QtGui.QKeySequence.HelpContents)],
|
|
||||||
'shortcuts/onlineHelpItem': [QtGui.QKeySequence(QtGui.QKeySequence.HelpContents)],
|
|
||||||
'shortcuts/openService': [],
|
'shortcuts/openService': [],
|
||||||
'shortcuts/saveService': [],
|
'shortcuts/saveService': [],
|
||||||
'shortcuts/previousItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Up),
|
'shortcuts/previousItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Up),
|
||||||
@ -380,6 +381,7 @@ class Settings(QtCore.QSettings):
|
|||||||
'shortcuts/themeScreen': [QtGui.QKeySequence(QtCore.Qt.Key_T)],
|
'shortcuts/themeScreen': [QtGui.QKeySequence(QtCore.Qt.Key_T)],
|
||||||
'shortcuts/toolsReindexItem': [],
|
'shortcuts/toolsReindexItem': [],
|
||||||
'shortcuts/toolsFindDuplicates': [],
|
'shortcuts/toolsFindDuplicates': [],
|
||||||
|
'shortcuts/toolsSongListReport': [],
|
||||||
'shortcuts/toolsAlertItem': [QtGui.QKeySequence(QtCore.Qt.Key_F7)],
|
'shortcuts/toolsAlertItem': [QtGui.QKeySequence(QtCore.Qt.Key_F7)],
|
||||||
'shortcuts/toolsFirstTimeWizard': [],
|
'shortcuts/toolsFirstTimeWizard': [],
|
||||||
'shortcuts/toolsOpenDataFolder': [],
|
'shortcuts/toolsOpenDataFolder': [],
|
||||||
|
@ -131,16 +131,16 @@ def build_icon(icon):
|
|||||||
location like ``/path/to/file.png``. However, the **recommended** way is to specify a resource string.
|
location like ``/path/to/file.png``. However, the **recommended** way is to specify a resource string.
|
||||||
:return: The build icon.
|
:return: The build icon.
|
||||||
"""
|
"""
|
||||||
button_icon = QtGui.QIcon()
|
|
||||||
if isinstance(icon, QtGui.QIcon):
|
if isinstance(icon, QtGui.QIcon):
|
||||||
button_icon = icon
|
return icon
|
||||||
elif isinstance(icon, str):
|
pix_map = None
|
||||||
if icon.startswith(':/'):
|
button_icon = QtGui.QIcon()
|
||||||
button_icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
if isinstance(icon, str):
|
||||||
else:
|
pix_map = QtGui.QPixmap(icon)
|
||||||
button_icon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
|
||||||
elif isinstance(icon, QtGui.QImage):
|
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
|
return button_icon
|
||||||
|
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties):
|
|||||||
self.search_text_layout.setObjectName('search_text_layout')
|
self.search_text_layout.setObjectName('search_text_layout')
|
||||||
self.search_text_label = QtWidgets.QLabel(self.search_widget)
|
self.search_text_label = QtWidgets.QLabel(self.search_widget)
|
||||||
self.search_text_label.setObjectName('search_text_label')
|
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_edit.setObjectName('search_text_edit')
|
||||||
self.search_text_label.setBuddy(self.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)
|
self.search_text_layout.addRow(self.search_text_label, self.search_text_edit)
|
||||||
|
@ -26,6 +26,7 @@ from PyQt5 import QtCore, QtWidgets
|
|||||||
|
|
||||||
from openlp.core.lib import build_icon
|
from openlp.core.lib import build_icon
|
||||||
from openlp.core.lib.ui import create_widget_action
|
from openlp.core.lib.ui import create_widget_action
|
||||||
|
from openlp.core.common import Settings
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -37,11 +38,12 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
searchTypeChanged = QtCore.pyqtSignal(QtCore.QVariant)
|
searchTypeChanged = QtCore.pyqtSignal(QtCore.QVariant)
|
||||||
cleared = QtCore.pyqtSignal()
|
cleared = QtCore.pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent, settings_section):
|
||||||
"""
|
"""
|
||||||
Constructor.
|
Constructor.
|
||||||
"""
|
"""
|
||||||
super(SearchEdit, self).__init__(parent)
|
super().__init__(parent)
|
||||||
|
self.settings_section = settings_section
|
||||||
self._current_search_type = -1
|
self._current_search_type = -1
|
||||||
self.clear_button = QtWidgets.QToolButton(self)
|
self.clear_button = QtWidgets.QToolButton(self)
|
||||||
self.clear_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
self.clear_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
||||||
@ -100,14 +102,10 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
menu = self.menu_button.menu()
|
menu = self.menu_button.menu()
|
||||||
for action in menu.actions():
|
for action in menu.actions():
|
||||||
if identifier == action.data():
|
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
|
self.setPlaceholderText(action.placeholder_text)
|
||||||
# implemented in PyQt 4.8).
|
|
||||||
try:
|
|
||||||
self.setPlaceholderText(action.placeholder_text)
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
self.menu_button.setDefaultAction(action)
|
self.menu_button.setDefaultAction(action)
|
||||||
self._current_search_type = identifier
|
self._current_search_type = identifier
|
||||||
|
Settings().setValue('{section}/last search type'.format(section=self.settings_section), identifier)
|
||||||
self.searchTypeChanged.emit(identifier)
|
self.searchTypeChanged.emit(identifier)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -130,14 +128,10 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
(2, ":/songs/authors.png", "Authors", "Search Authors...")
|
(2, ":/songs/authors.png", "Authors", "Search Authors...")
|
||||||
"""
|
"""
|
||||||
menu = QtWidgets.QMenu(self)
|
menu = QtWidgets.QMenu(self)
|
||||||
first = None
|
|
||||||
for identifier, icon, title, placeholder in items:
|
for identifier, icon, title, placeholder in items:
|
||||||
action = create_widget_action(
|
action = create_widget_action(
|
||||||
menu, text=title, icon=icon, data=identifier, triggers=self._on_menu_action_triggered)
|
menu, text=title, icon=icon, data=identifier, triggers=self._on_menu_action_triggered)
|
||||||
action.placeholder_text = placeholder
|
action.placeholder_text = placeholder
|
||||||
if first is None:
|
|
||||||
first = action
|
|
||||||
self._current_search_type = identifier
|
|
||||||
if not hasattr(self, 'menu_button'):
|
if not hasattr(self, 'menu_button'):
|
||||||
self.menu_button = QtWidgets.QToolButton(self)
|
self.menu_button = QtWidgets.QToolButton(self)
|
||||||
self.menu_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
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.setStyleSheet('QToolButton { border: none; padding: 0px 10px 0px 0px; }')
|
||||||
self.menu_button.resize(QtCore.QSize(28, 18))
|
self.menu_button.resize(QtCore.QSize(28, 18))
|
||||||
self.menu_button.setMenu(menu)
|
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.menu_button.show()
|
||||||
self._update_style_sheet()
|
self._update_style_sheet()
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ class Ui_ExceptionDialog(object):
|
|||||||
Set up the UI.
|
Set up the UI.
|
||||||
"""
|
"""
|
||||||
exception_dialog.setObjectName('exception_dialog')
|
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 = QtWidgets.QVBoxLayout(exception_dialog)
|
||||||
self.exception_layout.setObjectName('exception_layout')
|
self.exception_layout.setObjectName('exception_layout')
|
||||||
self.message_layout = QtWidgets.QHBoxLayout()
|
self.message_layout = QtWidgets.QHBoxLayout()
|
||||||
@ -97,9 +97,9 @@ class Ui_ExceptionDialog(object):
|
|||||||
translate('OpenLP.ExceptionDialog', '<strong>Please describe what you were trying to do.</strong> '
|
translate('OpenLP.ExceptionDialog', '<strong>Please describe what you were trying to do.</strong> '
|
||||||
' If possible, write in English.'))
|
' If possible, write in English.'))
|
||||||
exception_part1 = (translate('OpenLP.ExceptionDialog',
|
exception_part1 = (translate('OpenLP.ExceptionDialog',
|
||||||
'<strong>Oops, OpenLP hit a problem and couldn\'t recover!</strong> <br><br>'
|
'<strong>Oops, OpenLP hit a problem and couldn\'t recover!<br><br>'
|
||||||
'<strong>You can help </strong> the OpenLP developers to <strong>fix this</strong>'
|
'You can help </strong> the OpenLP developers to <strong>fix this</strong>'
|
||||||
' by<br> sending them a <strong>bug report</strong> to {email}{newlines}'
|
' by<br> sending them a <strong>bug report to {email}</strong>{newlines}'
|
||||||
).format(email='<a href = "mailto:bugs@openlp.org" > bugs@openlp.org</a>',
|
).format(email='<a href = "mailto:bugs@openlp.org" > bugs@openlp.org</a>',
|
||||||
newlines='<br><br>'))
|
newlines='<br><br>'))
|
||||||
self.message_label.setText(
|
self.message_label.setText(
|
||||||
@ -107,7 +107,7 @@ class Ui_ExceptionDialog(object):
|
|||||||
'<strong>No email app? </strong> You can <strong>save</strong> this '
|
'<strong>No email app? </strong> You can <strong>save</strong> this '
|
||||||
'information to a <strong>file</strong> and<br>'
|
'information to a <strong>file</strong> and<br>'
|
||||||
'send it from your <strong>mail on browser</strong> via an <strong>attachment.</strong><br><br>'
|
'send it from your <strong>mail on browser</strong> via an <strong>attachment.</strong><br><br>'
|
||||||
'<strong>Thank you<strong> for being part of making OpenLP better!<br>'
|
'<strong>Thank you</strong> for being part of making OpenLP better!<br>'
|
||||||
).format(first_part=exception_part1))
|
).format(first_part=exception_part1))
|
||||||
self.send_report_button.setText(translate('OpenLP.ExceptionDialog', 'Send E-Mail'))
|
self.send_report_button.setText(translate('OpenLP.ExceptionDialog', 'Send E-Mail'))
|
||||||
self.save_report_button.setText(translate('OpenLP.ExceptionDialog', 'Save to File'))
|
self.save_report_button.setText(translate('OpenLP.ExceptionDialog', 'Save to File'))
|
||||||
|
@ -208,7 +208,7 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
|
|||||||
self.__button_state(False)
|
self.__button_state(False)
|
||||||
self.description_word_count.setText(
|
self.description_word_count.setText(
|
||||||
translate('OpenLP.ExceptionDialog', '<strong>Please enter a more detailed description of the situation'
|
translate('OpenLP.ExceptionDialog', '<strong>Please enter a more detailed description of the situation'
|
||||||
))
|
'</strong>'))
|
||||||
|
|
||||||
def on_attach_file_button_clicked(self):
|
def on_attach_file_button_clicked(self):
|
||||||
"""
|
"""
|
||||||
|
@ -37,7 +37,7 @@ class Ui_FileRenameDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
file_rename_dialog.setObjectName('file_rename_dialog')
|
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)
|
file_rename_dialog.resize(300, 10)
|
||||||
self.dialog_layout = QtWidgets.QGridLayout(file_rename_dialog)
|
self.dialog_layout = QtWidgets.QGridLayout(file_rename_dialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -38,7 +38,7 @@ class Ui_FirstTimeLanguageDialog(object):
|
|||||||
Set up the UI.
|
Set up the UI.
|
||||||
"""
|
"""
|
||||||
language_dialog.setObjectName('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(300, 50)
|
language_dialog.resize(300, 50)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(language_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(language_dialog)
|
||||||
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
|
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
|
||||||
|
@ -55,7 +55,7 @@ class UiFirstTimeWizard(object):
|
|||||||
:param first_time_wizard: The wizard form
|
:param first_time_wizard: The wizard form
|
||||||
"""
|
"""
|
||||||
first_time_wizard.setObjectName('first_time_wizard')
|
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.resize(550, 386)
|
||||||
first_time_wizard.setModal(True)
|
first_time_wizard.setModal(True)
|
||||||
first_time_wizard.setOptions(QtWidgets.QWizard.IndependentPages | QtWidgets.QWizard.NoBackButtonOnStartPage |
|
first_time_wizard.setOptions(QtWidgets.QWizard.IndependentPages | QtWidgets.QWizard.NoBackButtonOnStartPage |
|
||||||
|
@ -38,7 +38,7 @@ class Ui_FormattingTagDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
formatting_tag_dialog.setObjectName('formatting_tag_dialog')
|
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)
|
formatting_tag_dialog.resize(725, 548)
|
||||||
self.list_data_grid_layout = QtWidgets.QVBoxLayout(formatting_tag_dialog)
|
self.list_data_grid_layout = QtWidgets.QVBoxLayout(formatting_tag_dialog)
|
||||||
self.list_data_grid_layout.setContentsMargins(8, 8, 8, 8)
|
self.list_data_grid_layout.setContentsMargins(8, 8, 8, 8)
|
||||||
|
@ -44,7 +44,7 @@ class GeneralTab(SettingsTab):
|
|||||||
self.logo_file = ':/graphics/openlp-splash-screen.png'
|
self.logo_file = ':/graphics/openlp-splash-screen.png'
|
||||||
self.logo_background_color = '#ffffff'
|
self.logo_background_color = '#ffffff'
|
||||||
self.screens = ScreenList()
|
self.screens = ScreenList()
|
||||||
self.icon_path = ':/icon/openlp-logo-16x16.png'
|
self.icon_path = ':/icon/openlp-logo.svg'
|
||||||
general_translated = translate('OpenLP.GeneralTab', 'General')
|
general_translated = translate('OpenLP.GeneralTab', 'General')
|
||||||
super(GeneralTab, self).__init__(parent, 'Core', general_translated)
|
super(GeneralTab, self).__init__(parent, 'Core', general_translated)
|
||||||
|
|
||||||
|
@ -309,21 +309,13 @@ class Ui_MainWindow(object):
|
|||||||
self.about_item.setMenuRole(QtWidgets.QAction.AboutRole)
|
self.about_item.setMenuRole(QtWidgets.QAction.AboutRole)
|
||||||
if is_win():
|
if is_win():
|
||||||
self.local_help_file = os.path.join(AppLocation.get_directory(AppLocation.AppDir), 'OpenLP.chm')
|
self.local_help_file = os.path.join(AppLocation.get_directory(AppLocation.AppDir), 'OpenLP.chm')
|
||||||
self.offline_help_item = create_action(main_window, 'offlineHelpItem',
|
|
||||||
icon=':/system/system_help_contents.png',
|
|
||||||
can_shortcuts=True,
|
|
||||||
category=UiStrings().Help, triggers=self.on_offline_help_clicked)
|
|
||||||
elif is_macosx():
|
elif is_macosx():
|
||||||
self.local_help_file = os.path.join(AppLocation.get_directory(AppLocation.AppDir),
|
self.local_help_file = os.path.join(AppLocation.get_directory(AppLocation.AppDir),
|
||||||
'..', 'Resources', 'OpenLP.help')
|
'..', 'Resources', 'OpenLP.help')
|
||||||
self.offline_help_item = create_action(main_window, 'offlineHelpItem',
|
self.on_help_item = create_action(main_window, 'HelpItem',
|
||||||
icon=':/system/system_help_contents.png',
|
icon=':/system/system_help_contents.png',
|
||||||
can_shortcuts=True,
|
can_shortcuts=True,
|
||||||
category=UiStrings().Help, triggers=self.on_offline_help_clicked)
|
category=UiStrings().Help, triggers=self.on_help_clicked)
|
||||||
self.on_line_help_item = create_action(main_window, 'onlineHelpItem',
|
|
||||||
icon=':/system/system_online_help.png',
|
|
||||||
can_shortcuts=True,
|
|
||||||
category=UiStrings().Help, triggers=self.on_online_help_clicked)
|
|
||||||
self.web_site_item = create_action(main_window, 'webSiteItem', can_shortcuts=True, category=UiStrings().Help)
|
self.web_site_item = create_action(main_window, 'webSiteItem', can_shortcuts=True, category=UiStrings().Help)
|
||||||
# Shortcuts not connected to buttons or menu entries.
|
# Shortcuts not connected to buttons or menu entries.
|
||||||
self.search_shortcut_action = create_action(main_window,
|
self.search_shortcut_action = create_action(main_window,
|
||||||
@ -362,11 +354,7 @@ class Ui_MainWindow(object):
|
|||||||
add_actions(self.tools_menu, (self.tools_open_data_folder, None))
|
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.tools_first_time_wizard, None))
|
||||||
add_actions(self.tools_menu, [self.update_theme_images])
|
add_actions(self.tools_menu, [self.update_theme_images])
|
||||||
if (is_win() or is_macosx()) and (hasattr(sys, 'frozen') and sys.frozen == 1):
|
add_actions(self.help_menu, (self.on_help_item, None, self.web_site_item, self.about_item))
|
||||||
add_actions(self.help_menu, (self.offline_help_item, self.on_line_help_item, None, self.web_site_item,
|
|
||||||
self.about_item))
|
|
||||||
else:
|
|
||||||
add_actions(self.help_menu, (self.on_line_help_item, None, self.web_site_item, self.about_item))
|
|
||||||
add_actions(self.menu_bar, (self.file_menu.menuAction(), self.view_menu.menuAction(),
|
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()))
|
self.tools_menu.menuAction(), self.settings_menu.menuAction(), self.help_menu.menuAction()))
|
||||||
add_actions(self, [self.search_shortcut_action])
|
add_actions(self, [self.search_shortcut_action])
|
||||||
@ -462,9 +450,7 @@ class Ui_MainWindow(object):
|
|||||||
'from here.'))
|
'from here.'))
|
||||||
self.about_item.setText(translate('OpenLP.MainWindow', '&About'))
|
self.about_item.setText(translate('OpenLP.MainWindow', '&About'))
|
||||||
self.about_item.setStatusTip(translate('OpenLP.MainWindow', 'More information about OpenLP.'))
|
self.about_item.setStatusTip(translate('OpenLP.MainWindow', 'More information about OpenLP.'))
|
||||||
if is_win() or is_macosx():
|
self.on_help_item.setText(translate('OpenLP.MainWindow', '&User Manual'))
|
||||||
self.offline_help_item.setText(translate('OpenLP.MainWindow', '&User Guide'))
|
|
||||||
self.on_line_help_item.setText(translate('OpenLP.MainWindow', '&Online Help'))
|
|
||||||
self.search_shortcut_action.setText(UiStrings().Search)
|
self.search_shortcut_action.setText(UiStrings().Search)
|
||||||
self.search_shortcut_action.setToolTip(
|
self.search_shortcut_action.setToolTip(
|
||||||
translate('OpenLP.MainWindow', 'Jump to the search box of the current active plugin.'))
|
translate('OpenLP.MainWindow', 'Jump to the search box of the current active plugin.'))
|
||||||
@ -778,18 +764,16 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
|||||||
import webbrowser
|
import webbrowser
|
||||||
webbrowser.open_new('http://openlp.org/')
|
webbrowser.open_new('http://openlp.org/')
|
||||||
|
|
||||||
def on_offline_help_clicked(self):
|
def on_help_clicked(self):
|
||||||
"""
|
"""
|
||||||
Load the local OpenLP help file
|
If is_macosx or is_win, open the local OpenLP help file.
|
||||||
|
Use the Online manual in other cases. (Linux)
|
||||||
"""
|
"""
|
||||||
QtGui.QDesktopServices.openUrl(QtCore.QUrl("file:///" + self.local_help_file))
|
if is_macosx() or is_win():
|
||||||
|
QtGui.QDesktopServices.openUrl(QtCore.QUrl("file:///" + self.local_help_file))
|
||||||
def on_online_help_clicked(self):
|
else:
|
||||||
"""
|
import webbrowser
|
||||||
Load the online OpenLP manual
|
webbrowser.open_new('http://manual.openlp.org/')
|
||||||
"""
|
|
||||||
import webbrowser
|
|
||||||
webbrowser.open_new('http://manual.openlp.org/')
|
|
||||||
|
|
||||||
def on_about_item_clicked(self):
|
def on_about_item_clicked(self):
|
||||||
"""
|
"""
|
||||||
|
@ -95,6 +95,16 @@ class SystemPlayer(MediaPlayer):
|
|||||||
mime_type_list.append(ext)
|
mime_type_list.append(ext)
|
||||||
log.info('MediaPlugin: %s extensions: %s', mime_type, ' '.join(extensions))
|
log.info('MediaPlugin: %s extensions: %s', mime_type, ' '.join(extensions))
|
||||||
|
|
||||||
|
def disconnect_slots(self, signal):
|
||||||
|
"""
|
||||||
|
Safely disconnect the slots from `signal`
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
signal.disconnect()
|
||||||
|
except TypeError:
|
||||||
|
# If disconnect() is called on a signal without slots, it throws a TypeError
|
||||||
|
pass
|
||||||
|
|
||||||
def setup(self, display):
|
def setup(self, display):
|
||||||
"""
|
"""
|
||||||
Set up the player widgets
|
Set up the player widgets
|
||||||
@ -160,6 +170,7 @@ class SystemPlayer(MediaPlayer):
|
|||||||
if start_time > 0:
|
if start_time > 0:
|
||||||
self.seek(display, controller.media_info.start_time * 1000)
|
self.seek(display, controller.media_info.start_time * 1000)
|
||||||
self.volume(display, controller.media_info.volume)
|
self.volume(display, controller.media_info.volume)
|
||||||
|
self.disconnect_slots(display.media_player.durationChanged)
|
||||||
display.media_player.durationChanged.connect(functools.partial(self.set_duration, controller))
|
display.media_player.durationChanged.connect(functools.partial(self.set_duration, controller))
|
||||||
self.set_state(MediaState.Playing, display)
|
self.set_state(MediaState.Playing, display)
|
||||||
display.video_widget.raise_()
|
display.video_widget.raise_()
|
||||||
|
@ -38,7 +38,7 @@ class Ui_PluginViewDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
plugin_view_dialog.setObjectName('plugin_view_dialog')
|
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)
|
plugin_view_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
|
||||||
self.plugin_layout = QtWidgets.QVBoxLayout(plugin_view_dialog)
|
self.plugin_layout = QtWidgets.QVBoxLayout(plugin_view_dialog)
|
||||||
self.plugin_layout.setObjectName('plugin_layout')
|
self.plugin_layout.setObjectName('plugin_layout')
|
||||||
|
@ -50,7 +50,7 @@ class Ui_PrintServiceDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
print_service_dialog.setObjectName('print_service_dialog')
|
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)
|
print_service_dialog.resize(664, 594)
|
||||||
self.main_layout = QtWidgets.QVBoxLayout(print_service_dialog)
|
self.main_layout = QtWidgets.QVBoxLayout(print_service_dialog)
|
||||||
self.main_layout.setSpacing(0)
|
self.main_layout.setSpacing(0)
|
||||||
|
@ -47,7 +47,7 @@ class Ui_ProjectorEditForm(object):
|
|||||||
Create the interface layout.
|
Create the interface layout.
|
||||||
"""
|
"""
|
||||||
edit_projector_dialog.setObjectName('edit_projector_dialog')
|
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.setMinimumWidth(400)
|
||||||
edit_projector_dialog.setModal(True)
|
edit_projector_dialog.setModal(True)
|
||||||
# Define the basic layout
|
# Define the basic layout
|
||||||
|
@ -38,7 +38,7 @@ class Ui_ServiceItemEditDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
serviceItemEditDialog.setObjectName('serviceItemEditDialog')
|
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 = QtWidgets.QGridLayout(serviceItemEditDialog)
|
||||||
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
|
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
|
||||||
self.dialog_layout.setSpacing(8)
|
self.dialog_layout.setSpacing(8)
|
||||||
|
@ -38,7 +38,7 @@ class Ui_SettingsDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
settings_dialog.setObjectName('settings_dialog')
|
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)
|
settings_dialog.resize(800, 700)
|
||||||
self.dialog_layout = QtWidgets.QGridLayout(settings_dialog)
|
self.dialog_layout = QtWidgets.QGridLayout(settings_dialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -72,7 +72,7 @@ class Ui_ShortcutListDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
shortcutListDialog.setObjectName('shortcutListDialog')
|
shortcutListDialog.setObjectName('shortcutListDialog')
|
||||||
shortcutListDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
|
shortcutListDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
|
||||||
shortcutListDialog.resize(500, 438)
|
shortcutListDialog.resize(500, 438)
|
||||||
self.shortcut_list_layout = QtWidgets.QVBoxLayout(shortcutListDialog)
|
self.shortcut_list_layout = QtWidgets.QVBoxLayout(shortcutListDialog)
|
||||||
self.shortcut_list_layout.setObjectName('shortcut_list_layout')
|
self.shortcut_list_layout.setObjectName('shortcut_list_layout')
|
||||||
|
@ -426,11 +426,11 @@ class ShortcutListForm(QtWidgets.QDialog, Ui_ShortcutListDialog, RegistryPropert
|
|||||||
is_valid = False
|
is_valid = False
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
text = translate('OpenLP.ShortcutListDialog',
|
text = translate('OpenLP.ShortcutListDialog',
|
||||||
'The shortcut "{key}" is already assigned to another action, please'
|
'The shortcut "{key}" is already assigned to another action,\n'
|
||||||
' use a different shortcut.'
|
'please use a different shortcut.'
|
||||||
).format(key=self.get_shortcut_string(key_sequence))
|
).format(key=self.get_shortcut_string(key_sequence))
|
||||||
self.main_window.warning_message(translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'),
|
self.main_window.warning_message(translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'),
|
||||||
text, for_display=True)
|
text)
|
||||||
self.dialog_was_shown = True
|
self.dialog_was_shown = True
|
||||||
return is_valid
|
return is_valid
|
||||||
|
|
||||||
|
@ -234,25 +234,32 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
self.hide_menu.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
|
self.hide_menu.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
|
||||||
self.hide_menu.setMenu(QtWidgets.QMenu(translate('OpenLP.SlideController', 'Hide'), self.toolbar))
|
self.hide_menu.setMenu(QtWidgets.QMenu(translate('OpenLP.SlideController', 'Hide'), self.toolbar))
|
||||||
self.toolbar.add_toolbar_widget(self.hide_menu)
|
self.toolbar.add_toolbar_widget(self.hide_menu)
|
||||||
self.blank_screen = create_action(self, 'blankScreen',
|
# The order of the blank to modes in Shortcuts list comes from here.
|
||||||
text=translate('OpenLP.SlideController', 'Blank Screen'),
|
self.desktop_screen_enable = create_action(self, 'desktopScreenEnable',
|
||||||
icon=':/slides/slide_blank.png',
|
text=translate('OpenLP.SlideController', 'Show Desktop'),
|
||||||
checked=False, can_shortcuts=True, category=self.category,
|
icon=':/slides/slide_desktop.png', can_shortcuts=True,
|
||||||
triggers=self.on_blank_display)
|
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
||||||
self.theme_screen = create_action(self, 'themeScreen',
|
category=self.category, triggers=self.on_hide_display_enable)
|
||||||
text=translate('OpenLP.SlideController', 'Blank to Theme'),
|
|
||||||
icon=':/slides/slide_theme.png',
|
|
||||||
checked=False, can_shortcuts=True, category=self.category,
|
|
||||||
triggers=self.on_theme_display)
|
|
||||||
self.desktop_screen = create_action(self, 'desktopScreen',
|
self.desktop_screen = create_action(self, 'desktopScreen',
|
||||||
text=translate('OpenLP.SlideController', 'Show Desktop'),
|
text=translate('OpenLP.SlideController', 'Toggle Desktop'),
|
||||||
icon=':/slides/slide_desktop.png',
|
icon=':/slides/slide_desktop.png',
|
||||||
checked=False, can_shortcuts=True, category=self.category,
|
checked=False, can_shortcuts=True, category=self.category,
|
||||||
triggers=self.on_hide_display)
|
triggers=self.on_hide_display)
|
||||||
|
self.theme_screen = create_action(self, 'themeScreen',
|
||||||
|
text=translate('OpenLP.SlideController', 'Toggle Blank to Theme'),
|
||||||
|
icon=':/slides/slide_theme.png',
|
||||||
|
checked=False, can_shortcuts=True, category=self.category,
|
||||||
|
triggers=self.on_theme_display)
|
||||||
|
self.blank_screen = create_action(self, 'blankScreen',
|
||||||
|
text=translate('OpenLP.SlideController', 'Toggle Blank Screen'),
|
||||||
|
icon=':/slides/slide_blank.png',
|
||||||
|
checked=False, can_shortcuts=True, category=self.category,
|
||||||
|
triggers=self.on_blank_display)
|
||||||
self.hide_menu.setDefaultAction(self.blank_screen)
|
self.hide_menu.setDefaultAction(self.blank_screen)
|
||||||
self.hide_menu.menu().addAction(self.blank_screen)
|
self.hide_menu.menu().addAction(self.blank_screen)
|
||||||
self.hide_menu.menu().addAction(self.theme_screen)
|
self.hide_menu.menu().addAction(self.theme_screen)
|
||||||
self.hide_menu.menu().addAction(self.desktop_screen)
|
self.hide_menu.menu().addAction(self.desktop_screen)
|
||||||
|
self.hide_menu.menu().addAction(self.desktop_screen_enable)
|
||||||
# Wide menu of display control buttons.
|
# Wide menu of display control buttons.
|
||||||
self.blank_screen_button = QtWidgets.QToolButton(self.toolbar)
|
self.blank_screen_button = QtWidgets.QToolButton(self.toolbar)
|
||||||
self.blank_screen_button.setObjectName('blank_screen_button')
|
self.blank_screen_button.setObjectName('blank_screen_button')
|
||||||
@ -512,23 +519,6 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
can_shortcuts=True, context=QtCore.Qt.WidgetWithChildrenShortcut,
|
can_shortcuts=True, context=QtCore.Qt.WidgetWithChildrenShortcut,
|
||||||
category=self.category,
|
category=self.category,
|
||||||
triggers=self.service_next)
|
triggers=self.service_next)
|
||||||
self.escape_item = create_action(parent, 'escapeItem',
|
|
||||||
text=translate('OpenLP.SlideController', 'Escape Item'),
|
|
||||||
can_shortcuts=True, context=QtCore.Qt.WidgetWithChildrenShortcut,
|
|
||||||
category=self.category,
|
|
||||||
triggers=self.live_escape)
|
|
||||||
|
|
||||||
def live_escape(self, field=None):
|
|
||||||
"""
|
|
||||||
If you press ESC on the live screen it should close the display temporarily.
|
|
||||||
"""
|
|
||||||
self.display.setVisible(False)
|
|
||||||
self.media_controller.media_stop(self)
|
|
||||||
# Stop looping if active
|
|
||||||
if self.play_slides_loop.isChecked():
|
|
||||||
self.on_play_slides_loop(False)
|
|
||||||
elif self.play_slides_once.isChecked():
|
|
||||||
self.on_play_slides_once(False)
|
|
||||||
|
|
||||||
def toggle_display(self, action):
|
def toggle_display(self, action):
|
||||||
"""
|
"""
|
||||||
@ -622,7 +612,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
widget.addActions([
|
widget.addActions([
|
||||||
self.previous_item, self.next_item,
|
self.previous_item, self.next_item,
|
||||||
self.previous_service, self.next_service,
|
self.previous_service, self.next_service,
|
||||||
self.escape_item,
|
self.desktop_screen_enable,
|
||||||
self.desktop_screen,
|
self.desktop_screen,
|
||||||
self.theme_screen,
|
self.theme_screen,
|
||||||
self.blank_screen])
|
self.blank_screen])
|
||||||
@ -965,7 +955,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
else:
|
else:
|
||||||
Registry().execute('live_display_show')
|
Registry().execute('live_display_show')
|
||||||
else:
|
else:
|
||||||
self.live_escape()
|
self.on_hide_display_enable()
|
||||||
|
|
||||||
def on_slide_blank(self):
|
def on_slide_blank(self):
|
||||||
"""
|
"""
|
||||||
@ -1025,6 +1015,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
def on_hide_display(self, checked=None):
|
def on_hide_display(self, checked=None):
|
||||||
"""
|
"""
|
||||||
Handle the Hide screen button
|
Handle the Hide screen button
|
||||||
|
This toggles the desktop screen.
|
||||||
|
|
||||||
:param checked: the new state of the of the widget
|
:param checked: the new state of the of the widget
|
||||||
"""
|
"""
|
||||||
@ -1043,6 +1034,20 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
self.update_preview()
|
self.update_preview()
|
||||||
self.on_toggle_loop()
|
self.on_toggle_loop()
|
||||||
|
|
||||||
|
def on_hide_display_enable(self, checked=None):
|
||||||
|
"""
|
||||||
|
Handle the on_hide_display_enable
|
||||||
|
This only enables the desktop screen.
|
||||||
|
|
||||||
|
:param checked: the new state of the of the widget
|
||||||
|
"""
|
||||||
|
self.blank_screen.setChecked(False)
|
||||||
|
self.theme_screen.setChecked(False)
|
||||||
|
Registry().execute('live_display_hide', HideMode.Screen)
|
||||||
|
self.desktop_screen.setChecked(True)
|
||||||
|
self.update_preview()
|
||||||
|
self.on_toggle_loop()
|
||||||
|
|
||||||
def blank_plugin(self):
|
def blank_plugin(self):
|
||||||
"""
|
"""
|
||||||
Blank/Hide the display screen within a plugin if required.
|
Blank/Hide the display screen within a plugin if required.
|
||||||
|
@ -38,7 +38,7 @@ class Ui_StartTimeDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
StartTimeDialog.setObjectName('StartTimeDialog')
|
StartTimeDialog.setObjectName('StartTimeDialog')
|
||||||
StartTimeDialog.setWindowIcon(build_icon(u':/icon/openlp-logo.svg'))
|
StartTimeDialog.setWindowIcon(build_icon(':/icon/openlp-logo.svg'))
|
||||||
StartTimeDialog.resize(350, 10)
|
StartTimeDialog.resize(350, 10)
|
||||||
self.dialog_layout = QtWidgets.QGridLayout(StartTimeDialog)
|
self.dialog_layout = QtWidgets.QGridLayout(StartTimeDialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -38,7 +38,7 @@ class Ui_ThemeLayoutDialog(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
themeLayoutDialog.setObjectName('themeLayoutDialogDialog')
|
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 = QtWidgets.QVBoxLayout(themeLayoutDialog)
|
||||||
self.preview_layout.setObjectName('preview_layout')
|
self.preview_layout.setObjectName('preview_layout')
|
||||||
self.preview_area = QtWidgets.QWidget(themeLayoutDialog)
|
self.preview_area = QtWidgets.QWidget(themeLayoutDialog)
|
||||||
|
@ -40,7 +40,7 @@ class Ui_ThemeWizard(object):
|
|||||||
Set up the UI
|
Set up the UI
|
||||||
"""
|
"""
|
||||||
theme_wizard.setObjectName('OpenLP.ThemeWizard')
|
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.setModal(True)
|
||||||
theme_wizard.setOptions(QtWidgets.QWizard.IndependentPages |
|
theme_wizard.setOptions(QtWidgets.QWizard.IndependentPages |
|
||||||
QtWidgets.QWizard.NoBackButtonOnStartPage | QtWidgets.QWizard.HaveCustomButton1)
|
QtWidgets.QWizard.NoBackButtonOnStartPage | QtWidgets.QWizard.HaveCustomButton1)
|
||||||
|
@ -39,7 +39,7 @@ class Ui_AlertDialog(object):
|
|||||||
"""
|
"""
|
||||||
alert_dialog.setObjectName('alert_dialog')
|
alert_dialog.setObjectName('alert_dialog')
|
||||||
alert_dialog.resize(400, 300)
|
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 = QtWidgets.QGridLayout(alert_dialog)
|
||||||
self.alert_dialog_layout.setObjectName('alert_dialog_layout')
|
self.alert_dialog_layout.setObjectName('alert_dialog_layout')
|
||||||
self.alert_text_layout = QtWidgets.QFormLayout()
|
self.alert_text_layout = QtWidgets.QFormLayout()
|
||||||
|
@ -140,10 +140,10 @@ class BiblePlugin(Plugin):
|
|||||||
|
|
||||||
def uses_theme(self, theme):
|
def uses_theme(self, theme):
|
||||||
"""
|
"""
|
||||||
Called to find out if the bible plugin is currently using a theme. Returns ``1`` if the theme is being used,
|
Called to find out if the bible plugin is currently using a theme.
|
||||||
otherwise returns ``0``.
|
|
||||||
|
|
||||||
:param theme: The theme
|
:param theme: The theme
|
||||||
|
:return: 1 if the theme is being used, otherwise returns 0
|
||||||
"""
|
"""
|
||||||
if str(self.settings_tab.bible_theme) == theme:
|
if str(self.settings_tab.bible_theme) == theme:
|
||||||
return 1
|
return 1
|
||||||
@ -151,11 +151,11 @@ class BiblePlugin(Plugin):
|
|||||||
|
|
||||||
def rename_theme(self, old_theme, new_theme):
|
def rename_theme(self, old_theme, new_theme):
|
||||||
"""
|
"""
|
||||||
Rename the theme the bible plugin is using making the plugin use the
|
Rename the theme the bible plugin is using, making the plugin use the new name.
|
||||||
new name.
|
|
||||||
|
|
||||||
:param old_theme: The name of the theme the plugin should stop using. Unused for this particular plugin.
|
:param old_theme: The name of the theme the plugin should stop using. Unused for this particular plugin.
|
||||||
:param new_theme: The new name the plugin should now use.
|
:param new_theme: The new name the plugin should now use.
|
||||||
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.settings_tab.bible_theme = new_theme
|
self.settings_tab.bible_theme = new_theme
|
||||||
self.settings_tab.save()
|
self.settings_tab.save()
|
||||||
|
@ -25,6 +25,7 @@ The bible import functions for OpenLP
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import urllib.error
|
import urllib.error
|
||||||
|
from lxml import etree
|
||||||
|
|
||||||
from PyQt5 import QtWidgets
|
from PyQt5 import QtWidgets
|
||||||
try:
|
try:
|
||||||
@ -33,14 +34,15 @@ try:
|
|||||||
except:
|
except:
|
||||||
PYSWORD_AVAILABLE = False
|
PYSWORD_AVAILABLE = False
|
||||||
|
|
||||||
from openlp.core.common import AppLocation, Settings, UiStrings, translate, clean_filename
|
from openlp.core.common import AppLocation, Settings, UiStrings, trace_error_handler, translate
|
||||||
|
from openlp.core.common.languagemanager import get_locale_key
|
||||||
from openlp.core.lib.db import delete_database
|
from openlp.core.lib.db import delete_database
|
||||||
|
from openlp.core.lib.exceptions import ValidationError
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
|
||||||
from openlp.core.common.languagemanager import get_locale_key
|
|
||||||
from openlp.plugins.bibles.lib.manager import BibleFormat
|
|
||||||
from openlp.plugins.bibles.lib.db import clean_filename
|
from openlp.plugins.bibles.lib.db import clean_filename
|
||||||
from openlp.plugins.bibles.lib.importers.http import CWExtract, BGExtract, BSExtract
|
from openlp.plugins.bibles.lib.importers.http import CWExtract, BGExtract, BSExtract
|
||||||
|
from openlp.plugins.bibles.lib.manager import BibleFormat
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -809,16 +811,22 @@ class BibleImportForm(OpenLPWizard):
|
|||||||
sword_path=self.field('sword_zip_path'),
|
sword_path=self.field('sword_zip_path'),
|
||||||
sword_key=self.sword_zipbible_combo_box.itemData(
|
sword_key=self.sword_zipbible_combo_box.itemData(
|
||||||
self.sword_zipbible_combo_box.currentIndex()))
|
self.sword_zipbible_combo_box.currentIndex()))
|
||||||
if importer.do_import(license_version):
|
|
||||||
self.manager.save_meta_data(license_version, license_version, license_copyright, license_permissions)
|
try:
|
||||||
self.manager.reload_bibles()
|
if importer.do_import(license_version) and not importer.stop_import_flag:
|
||||||
if bible_type == BibleFormat.WebDownload:
|
self.manager.save_meta_data(license_version, license_version, license_copyright, license_permissions)
|
||||||
self.progress_label.setText(
|
self.manager.reload_bibles()
|
||||||
translate('BiblesPlugin.ImportWizardForm', 'Registered Bible. Please note, that verses will be '
|
if bible_type == BibleFormat.WebDownload:
|
||||||
'downloaded on demand and thus an internet connection is required.'))
|
self.progress_label.setText(
|
||||||
else:
|
translate('BiblesPlugin.ImportWizardForm', 'Registered Bible. Please note, that verses will be '
|
||||||
self.progress_label.setText(WizardStrings.FinishedImport)
|
'downloaded on demand and thus an internet connection is required.'))
|
||||||
else:
|
else:
|
||||||
self.progress_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Your Bible import failed.'))
|
self.progress_label.setText(WizardStrings.FinishedImport)
|
||||||
del self.manager.db_cache[importer.name]
|
return
|
||||||
delete_database(self.plugin.settings_section, importer.file)
|
except (AttributeError, ValidationError, etree.XMLSyntaxError):
|
||||||
|
log.exception('Importing bible failed')
|
||||||
|
trace_error_handler(log)
|
||||||
|
|
||||||
|
self.progress_label.setText(translate('BiblesPlugin.ImportWizardForm', 'Your Bible import failed.'))
|
||||||
|
del self.manager.db_cache[importer.name]
|
||||||
|
delete_database(self.plugin.settings_section, importer.file)
|
||||||
|
@ -30,7 +30,7 @@ from openlp.core.lib.ui import create_button_box
|
|||||||
class Ui_BookNameDialog(object):
|
class Ui_BookNameDialog(object):
|
||||||
def setupUi(self, book_name_dialog):
|
def setupUi(self, book_name_dialog):
|
||||||
book_name_dialog.setObjectName('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)
|
book_name_dialog.resize(400, 271)
|
||||||
self.book_name_layout = QtWidgets.QVBoxLayout(book_name_dialog)
|
self.book_name_layout = QtWidgets.QVBoxLayout(book_name_dialog)
|
||||||
self.book_name_layout.setSpacing(8)
|
self.book_name_layout.setSpacing(8)
|
||||||
|
@ -32,7 +32,7 @@ from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
|||||||
class Ui_EditBibleDialog(object):
|
class Ui_EditBibleDialog(object):
|
||||||
def setupUi(self, edit_bible_dialog):
|
def setupUi(self, edit_bible_dialog):
|
||||||
edit_bible_dialog.setObjectName('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.resize(520, 400)
|
||||||
edit_bible_dialog.setModal(True)
|
edit_bible_dialog.setModal(True)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(edit_bible_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(edit_bible_dialog)
|
||||||
|
@ -30,7 +30,7 @@ from openlp.core.lib.ui import create_button_box
|
|||||||
class Ui_LanguageDialog(object):
|
class Ui_LanguageDialog(object):
|
||||||
def setupUi(self, language_dialog):
|
def setupUi(self, language_dialog):
|
||||||
language_dialog.setObjectName('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)
|
language_dialog.resize(400, 165)
|
||||||
self.language_layout = QtWidgets.QVBoxLayout(language_dialog)
|
self.language_layout = QtWidgets.QVBoxLayout(language_dialog)
|
||||||
self.language_layout.setSpacing(8)
|
self.language_layout.setSpacing(8)
|
||||||
|
@ -173,7 +173,7 @@ class BibleStrings(object):
|
|||||||
|
|
||||||
def update_reference_separators():
|
def update_reference_separators():
|
||||||
"""
|
"""
|
||||||
Updates separators and matches for parsing and formating scripture references.
|
Updates separators and matches for parsing and formatting scripture references.
|
||||||
"""
|
"""
|
||||||
default_separators = [
|
default_separators = [
|
||||||
'|'.join([
|
'|'.join([
|
||||||
@ -215,7 +215,7 @@ def update_reference_separators():
|
|||||||
# escape reserved characters
|
# escape reserved characters
|
||||||
for character in '\\.^$*+?{}[]()':
|
for character in '\\.^$*+?{}[]()':
|
||||||
source_string = source_string.replace(character, '\\' + character)
|
source_string = source_string.replace(character, '\\' + character)
|
||||||
# add various unicode alternatives
|
# add various Unicode alternatives
|
||||||
source_string = source_string.replace('-', '(?:[-\u00AD\u2010\u2011\u2012\u2014\u2014\u2212\uFE63\uFF0D])')
|
source_string = source_string.replace('-', '(?:[-\u00AD\u2010\u2011\u2012\u2014\u2014\u2212\uFE63\uFF0D])')
|
||||||
source_string = source_string.replace(',', '(?:[,\u201A])')
|
source_string = source_string.replace(',', '(?:[,\u201A])')
|
||||||
REFERENCE_SEPARATORS['sep_{role}'.format(role=role)] = '\s*(?:{source})\s*'.format(source=source_string)
|
REFERENCE_SEPARATORS['sep_{role}'.format(role=role)] = '\s*(?:{source})\s*'.format(source=source_string)
|
||||||
|
@ -20,25 +20,84 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from lxml import etree, objectify
|
from lxml import etree, objectify
|
||||||
|
from zipfile import is_zipfile
|
||||||
|
|
||||||
from openlp.core.common import OpenLPMixin, languages
|
from openlp.core.common import OpenLPMixin, Registry, RegistryProperties, languages, translate
|
||||||
from openlp.core.lib import ValidationError
|
from openlp.core.lib import ValidationError
|
||||||
from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
|
from openlp.plugins.bibles.lib.db import AlternativeBookNamesDB, BibleDB, BiblesResourcesDB
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class BibleImport(OpenLPMixin, BibleDB):
|
class BibleImport(OpenLPMixin, RegistryProperties, BibleDB):
|
||||||
"""
|
"""
|
||||||
Helper class to import bibles from a third party source into OpenLP
|
Helper class to import bibles from a third party source into OpenLP
|
||||||
"""
|
"""
|
||||||
# TODO: Test
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.filename = kwargs['filename'] if 'filename' in kwargs else None
|
self.filename = kwargs['filename'] if 'filename' in kwargs else None
|
||||||
|
self.wizard = None
|
||||||
|
self.stop_import_flag = False
|
||||||
|
Registry().register_function('openlp_stop_wizard', self.stop_import)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_compressed(file):
|
||||||
|
"""
|
||||||
|
Check if the supplied file is compressed
|
||||||
|
|
||||||
|
:param file: A path to the file to check
|
||||||
|
"""
|
||||||
|
if is_zipfile(file):
|
||||||
|
critical_error_message_box(
|
||||||
|
message=translate('BiblesPlugin.BibleImport',
|
||||||
|
'The file "{file}" you supplied is compressed. You must decompress it before import.'
|
||||||
|
).format(file=file))
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_book_ref_id_by_name(self, book, maxbooks=66, language_id=None):
|
||||||
|
"""
|
||||||
|
Find the book id from the name or abbreviation of the book. If it doesn't currently exist, ask the user.
|
||||||
|
|
||||||
|
:param book: The name or abbreviation of the book
|
||||||
|
:param maxbooks: The number of books in the bible
|
||||||
|
:param language_id: The language_id of the bible
|
||||||
|
:return: The id of the bible, or None
|
||||||
|
"""
|
||||||
|
self.log_debug('BibleDB.get_book_ref_id_by_name:("{book}", "{lang}")'.format(book=book, lang=language_id))
|
||||||
|
book_temp = BiblesResourcesDB.get_book(book, True)
|
||||||
|
if book_temp:
|
||||||
|
return book_temp['id']
|
||||||
|
book_id = BiblesResourcesDB.get_alternative_book_name(book)
|
||||||
|
if book_id:
|
||||||
|
return book_id
|
||||||
|
book_id = AlternativeBookNamesDB.get_book_reference_id(book)
|
||||||
|
if book_id:
|
||||||
|
return book_id
|
||||||
|
from openlp.plugins.bibles.forms import BookNameForm
|
||||||
|
book_name = BookNameForm(self.wizard)
|
||||||
|
if book_name.exec(book, self.get_books(), maxbooks) and book_name.book_id:
|
||||||
|
AlternativeBookNamesDB.create_alternative_book_name(book, book_name.book_id, language_id)
|
||||||
|
return book_name.book_id
|
||||||
|
|
||||||
|
def get_language(self, bible_name=None):
|
||||||
|
"""
|
||||||
|
If no language is given it calls a dialog window where the user could select the bible language.
|
||||||
|
Return the language id of a bible.
|
||||||
|
|
||||||
|
:param bible_name: The language the bible is.
|
||||||
|
"""
|
||||||
|
self.log_debug('BibleImpoer.get_language()')
|
||||||
|
from openlp.plugins.bibles.forms import LanguageForm
|
||||||
|
language_id = None
|
||||||
|
language_form = LanguageForm(self.wizard)
|
||||||
|
if language_form.exec(bible_name):
|
||||||
|
combo_box = language_form.language_combo_box
|
||||||
|
language_id = combo_box.itemData(combo_box.currentIndex())
|
||||||
|
if not language_id:
|
||||||
|
return None
|
||||||
|
self.save_meta('language_id', language_id)
|
||||||
|
return language_id
|
||||||
|
|
||||||
def get_language_id(self, file_language=None, bible_name=None):
|
def get_language_id(self, file_language=None, bible_name=None):
|
||||||
"""
|
"""
|
||||||
@ -58,8 +117,8 @@ class BibleImport(OpenLPMixin, BibleDB):
|
|||||||
language_id = self.get_language(bible_name)
|
language_id = self.get_language(bible_name)
|
||||||
if not language_id:
|
if not language_id:
|
||||||
# User cancelled get_language dialog
|
# User cancelled get_language dialog
|
||||||
log.error('Language detection failed when importing from "{name}". User aborted language selection.'
|
self.log_error('Language detection failed when importing from "{name}". User aborted language selection.'
|
||||||
.format(name=bible_name))
|
.format(name=bible_name))
|
||||||
return None
|
return None
|
||||||
self.save_meta('language_id', language_id)
|
self.save_meta('language_id', language_id)
|
||||||
return language_id
|
return language_id
|
||||||
@ -77,7 +136,7 @@ class BibleImport(OpenLPMixin, BibleDB):
|
|||||||
if name:
|
if name:
|
||||||
book_ref_id = self.get_book_ref_id_by_name(name, no_of_books, language_id)
|
book_ref_id = self.get_book_ref_id_by_name(name, no_of_books, language_id)
|
||||||
else:
|
else:
|
||||||
log.debug('No book name supplied. Falling back to guess_id')
|
self.log_debug('No book name supplied. Falling back to guess_id')
|
||||||
book_ref_id = guess_id
|
book_ref_id = guess_id
|
||||||
if not book_ref_id:
|
if not book_ref_id:
|
||||||
raise ValidationError(msg='Could not resolve book_ref_id in "{}"'.format(self.filename))
|
raise ValidationError(msg='Could not resolve book_ref_id in "{}"'.format(self.filename))
|
||||||
@ -87,8 +146,7 @@ class BibleImport(OpenLPMixin, BibleDB):
|
|||||||
'importing {file}'.format(book_ref=book_ref_id, file=self.filename))
|
'importing {file}'.format(book_ref=book_ref_id, file=self.filename))
|
||||||
return self.create_book(name, book_ref_id, book_details['testament_id'])
|
return self.create_book(name, book_ref_id, book_details['testament_id'])
|
||||||
|
|
||||||
@staticmethod
|
def parse_xml(self, filename, use_objectify=False, elements=None, tags=None):
|
||||||
def parse_xml(filename, use_objectify=False, elements=None, tags=None):
|
|
||||||
"""
|
"""
|
||||||
Parse and clean the supplied file by removing any elements or tags we don't use.
|
Parse and clean the supplied file by removing any elements or tags we don't use.
|
||||||
:param filename: The filename of the xml file to parse. Str
|
:param filename: The filename of the xml file to parse. Str
|
||||||
@ -97,17 +155,80 @@ class BibleImport(OpenLPMixin, BibleDB):
|
|||||||
:param tags: A tuple of element names (Str) to remove, preserving their content.
|
:param tags: A tuple of element names (Str) to remove, preserving their content.
|
||||||
:return: The root element of the xml document
|
:return: The root element of the xml document
|
||||||
"""
|
"""
|
||||||
with open(filename, 'rb') as import_file:
|
try:
|
||||||
# NOTE: We don't need to do any of the normal encoding detection here, because lxml does it's own encoding
|
with open(filename, 'rb') as import_file:
|
||||||
# detection, and the two mechanisms together interfere with each other.
|
# NOTE: We don't need to do any of the normal encoding detection here, because lxml does it's own
|
||||||
if not use_objectify:
|
# encoding detection, and the two mechanisms together interfere with each other.
|
||||||
tree = etree.parse(import_file, parser=etree.XMLParser(recover=True))
|
if not use_objectify:
|
||||||
else:
|
tree = etree.parse(import_file, parser=etree.XMLParser(recover=True))
|
||||||
tree = objectify.parse(import_file, parser=objectify.makeparser(recover=True))
|
else:
|
||||||
if elements:
|
tree = objectify.parse(import_file, parser=objectify.makeparser(recover=True))
|
||||||
# Strip tags we don't use - remove content
|
if elements or tags:
|
||||||
etree.strip_elements(tree, elements, with_tail=False)
|
self.wizard.increment_progress_bar(
|
||||||
if tags:
|
translate('BiblesPlugin.OsisImport', 'Removing unused tags (this may take a few minutes)...'))
|
||||||
# Strip tags we don't use - keep content
|
if elements:
|
||||||
etree.strip_tags(tree, tags)
|
# Strip tags we don't use - remove content
|
||||||
return tree.getroot()
|
etree.strip_elements(tree, elements, with_tail=False)
|
||||||
|
if tags:
|
||||||
|
# Strip tags we don't use - keep content
|
||||||
|
etree.strip_tags(tree, tags)
|
||||||
|
return tree.getroot()
|
||||||
|
except OSError as e:
|
||||||
|
self.log_exception('Opening {file_name} failed.'.format(file_name=e.filename))
|
||||||
|
critical_error_message_box(
|
||||||
|
title='An Error Occured When Opening A File',
|
||||||
|
message='The following error occurred when trying to open\n{file_name}:\n\n{error}'
|
||||||
|
.format(file_name=e.filename, error=e.strerror))
|
||||||
|
return None
|
||||||
|
|
||||||
|
def register(self, wizard):
|
||||||
|
"""
|
||||||
|
This method basically just initialises the database. It is called from the Bible Manager when a Bible is
|
||||||
|
imported. Descendant classes may want to override this method to supply their own custom
|
||||||
|
initialisation as well.
|
||||||
|
|
||||||
|
:param wizard: The actual Qt wizard form.
|
||||||
|
"""
|
||||||
|
self.wizard = wizard
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
def set_current_chapter(self, book_name, chapter_name):
|
||||||
|
self.wizard.increment_progress_bar(translate('BiblesPlugin.OsisImport', 'Importing {book} {chapter}...')
|
||||||
|
.format(book=book_name, chapter=chapter_name))
|
||||||
|
|
||||||
|
def stop_import(self):
|
||||||
|
"""
|
||||||
|
Stops the import of the Bible.
|
||||||
|
"""
|
||||||
|
self.log_debug('Stopping import')
|
||||||
|
self.stop_import_flag = True
|
||||||
|
|
||||||
|
def validate_xml_file(self, filename, tag):
|
||||||
|
"""
|
||||||
|
Validate the supplied file
|
||||||
|
|
||||||
|
:param filename: The supplied file
|
||||||
|
:param tag: The expected root tag type
|
||||||
|
:return: True if valid. ValidationError is raised otherwise.
|
||||||
|
"""
|
||||||
|
if BibleImport.is_compressed(filename):
|
||||||
|
raise ValidationError(msg='Compressed file')
|
||||||
|
bible = self.parse_xml(filename, use_objectify=True)
|
||||||
|
if bible is None:
|
||||||
|
raise ValidationError(msg='Error when opening file')
|
||||||
|
root_tag = bible.tag.lower()
|
||||||
|
bible_type = translate('BiblesPlugin.BibleImport', 'unknown type of',
|
||||||
|
'This looks like an unknown type of XML bible.')
|
||||||
|
if root_tag == tag:
|
||||||
|
return True
|
||||||
|
elif root_tag == 'bible':
|
||||||
|
bible_type = "OpenSong"
|
||||||
|
elif root_tag == '{http://www.bibletechnologies.net/2003/osis/namespace}osis':
|
||||||
|
bible_type = 'OSIS'
|
||||||
|
elif root_tag == 'xmlbible':
|
||||||
|
bible_type = 'Zefania'
|
||||||
|
critical_error_message_box(
|
||||||
|
message=translate('BiblesPlugin.BibleImport',
|
||||||
|
'Incorrect Bible file type supplied. This looks like an {bible_type} XML bible.'
|
||||||
|
.format(bible_type=bible_type)))
|
||||||
|
raise ValidationError(msg='Invalid xml.')
|
||||||
|
@ -33,7 +33,7 @@ from sqlalchemy.exc import OperationalError
|
|||||||
from sqlalchemy.orm import class_mapper, mapper, relation
|
from sqlalchemy.orm import class_mapper, mapper, relation
|
||||||
from sqlalchemy.orm.exc import UnmappedClassError
|
from sqlalchemy.orm.exc import UnmappedClassError
|
||||||
|
|
||||||
from openlp.core.common import Registry, RegistryProperties, AppLocation, translate, clean_filename
|
from openlp.core.common import AppLocation, translate, clean_filename
|
||||||
from openlp.core.lib.db import BaseModel, init_db, Manager
|
from openlp.core.lib.db import BaseModel, init_db, Manager
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
from openlp.plugins.bibles.lib import upgrade
|
from openlp.plugins.bibles.lib import upgrade
|
||||||
@ -106,7 +106,7 @@ def init_schema(url):
|
|||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
||||||
class BibleDB(Manager, RegistryProperties):
|
class BibleDB(Manager):
|
||||||
"""
|
"""
|
||||||
This class represents a database-bound Bible. It is used as a base class for all the custom importers, so that
|
This class represents a database-bound Bible. It is used as a base class for all the custom importers, so that
|
||||||
the can implement their own import methods, but benefit from the database methods in here via inheritance,
|
the can implement their own import methods, but benefit from the database methods in here via inheritance,
|
||||||
@ -140,7 +140,6 @@ class BibleDB(Manager, RegistryProperties):
|
|||||||
raise KeyError('Missing keyword argument "path".')
|
raise KeyError('Missing keyword argument "path".')
|
||||||
if 'name' not in kwargs and 'file' not in kwargs:
|
if 'name' not in kwargs and 'file' not in kwargs:
|
||||||
raise KeyError('Missing keyword argument "name" or "file".')
|
raise KeyError('Missing keyword argument "name" or "file".')
|
||||||
self.stop_import_flag = False
|
|
||||||
if 'name' in kwargs:
|
if 'name' in kwargs:
|
||||||
self.name = kwargs['name']
|
self.name = kwargs['name']
|
||||||
if not isinstance(self.name, str):
|
if not isinstance(self.name, str):
|
||||||
@ -153,15 +152,6 @@ class BibleDB(Manager, RegistryProperties):
|
|||||||
self.get_name()
|
self.get_name()
|
||||||
if 'path' in kwargs:
|
if 'path' in kwargs:
|
||||||
self.path = kwargs['path']
|
self.path = kwargs['path']
|
||||||
self.wizard = None
|
|
||||||
Registry().register_function('openlp_stop_wizard', self.stop_import)
|
|
||||||
|
|
||||||
def stop_import(self):
|
|
||||||
"""
|
|
||||||
Stops the import of the Bible.
|
|
||||||
"""
|
|
||||||
log.debug('Stopping import')
|
|
||||||
self.stop_import_flag = True
|
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
"""
|
"""
|
||||||
@ -171,17 +161,6 @@ class BibleDB(Manager, RegistryProperties):
|
|||||||
self.name = version_name.value if version_name else None
|
self.name = version_name.value if version_name else None
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def register(self, wizard):
|
|
||||||
"""
|
|
||||||
This method basically just initialises the database. It is called from the Bible Manager when a Bible is
|
|
||||||
imported. Descendant classes may want to override this method to supply their own custom
|
|
||||||
initialisation as well.
|
|
||||||
|
|
||||||
:param wizard: The actual Qt wizard form.
|
|
||||||
"""
|
|
||||||
self.wizard = wizard
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
def create_book(self, name, bk_ref_id, testament=1):
|
def create_book(self, name, bk_ref_id, testament=1):
|
||||||
"""
|
"""
|
||||||
Add a book to the database.
|
Add a book to the database.
|
||||||
@ -306,26 +285,6 @@ class BibleDB(Manager, RegistryProperties):
|
|||||||
log.debug('BibleDB.get_book_by_book_ref_id("{ref}")'.format(ref=ref_id))
|
log.debug('BibleDB.get_book_by_book_ref_id("{ref}")'.format(ref=ref_id))
|
||||||
return self.get_object_filtered(Book, Book.book_reference_id.like(ref_id))
|
return self.get_object_filtered(Book, Book.book_reference_id.like(ref_id))
|
||||||
|
|
||||||
def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):
|
|
||||||
log.debug('BibleDB.get_book_ref_id_by_name:("{book}", "{lang}")'.format(book=book, lang=language_id))
|
|
||||||
book_id = None
|
|
||||||
if BiblesResourcesDB.get_book(book, True):
|
|
||||||
book_temp = BiblesResourcesDB.get_book(book, True)
|
|
||||||
book_id = book_temp['id']
|
|
||||||
elif BiblesResourcesDB.get_alternative_book_name(book):
|
|
||||||
book_id = BiblesResourcesDB.get_alternative_book_name(book)
|
|
||||||
elif AlternativeBookNamesDB.get_book_reference_id(book):
|
|
||||||
book_id = AlternativeBookNamesDB.get_book_reference_id(book)
|
|
||||||
else:
|
|
||||||
from openlp.plugins.bibles.forms import BookNameForm
|
|
||||||
book_name = BookNameForm(self.wizard)
|
|
||||||
if book_name.exec(book, self.get_books(), maxbooks):
|
|
||||||
book_id = book_name.book_id
|
|
||||||
if book_id:
|
|
||||||
AlternativeBookNamesDB.create_alternative_book_name(
|
|
||||||
book, book_id, language_id)
|
|
||||||
return book_id
|
|
||||||
|
|
||||||
def get_book_ref_id_by_localised_name(self, book, language_selection):
|
def get_book_ref_id_by_localised_name(self, book, language_selection):
|
||||||
"""
|
"""
|
||||||
Return the id of a named book.
|
Return the id of a named book.
|
||||||
@ -462,25 +421,6 @@ class BibleDB(Manager, RegistryProperties):
|
|||||||
return 0
|
return 0
|
||||||
return count
|
return count
|
||||||
|
|
||||||
def get_language(self, bible_name=None):
|
|
||||||
"""
|
|
||||||
If no language is given it calls a dialog window where the user could select the bible language.
|
|
||||||
Return the language id of a bible.
|
|
||||||
|
|
||||||
:param bible_name: The language the bible is.
|
|
||||||
"""
|
|
||||||
log.debug('BibleDB.get_language()')
|
|
||||||
from openlp.plugins.bibles.forms import LanguageForm
|
|
||||||
language_id = None
|
|
||||||
language_form = LanguageForm(self.wizard)
|
|
||||||
if language_form.exec(bible_name):
|
|
||||||
combo_box = language_form.language_combo_box
|
|
||||||
language_id = combo_box.itemData(combo_box.currentIndex())
|
|
||||||
if not language_id:
|
|
||||||
return None
|
|
||||||
self.save_meta('language_id', language_id)
|
|
||||||
return language_id
|
|
||||||
|
|
||||||
def dump_bible(self):
|
def dump_bible(self):
|
||||||
"""
|
"""
|
||||||
Utility debugging method to dump the contents of a bible.
|
Utility debugging method to dump the contents of a bible.
|
||||||
|
@ -50,7 +50,6 @@ There are two acceptable formats of the verses file. They are:
|
|||||||
All CSV files are expected to use a comma (',') as the delimiter and double quotes ('"') as the quote symbol.
|
All CSV files are expected to use a comma (',') as the delimiter and double quotes ('"') as the quote symbol.
|
||||||
"""
|
"""
|
||||||
import csv
|
import csv
|
||||||
import logging
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from openlp.core.common import get_file_encoding, translate
|
from openlp.core.common import get_file_encoding, translate
|
||||||
@ -58,8 +57,6 @@ from openlp.core.lib.exceptions import ValidationError
|
|||||||
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
Book = namedtuple('Book', 'id, testament_id, name, abbreviation')
|
Book = namedtuple('Book', 'id, testament_id, name, abbreviation')
|
||||||
Verse = namedtuple('Verse', 'book_id_name, chapter_number, number, text')
|
Verse = namedtuple('Verse', 'book_id_name, chapter_number, number, text')
|
||||||
|
|
||||||
@ -68,15 +65,13 @@ class CSVBible(BibleImport):
|
|||||||
"""
|
"""
|
||||||
This class provides a specialisation for importing of CSV Bibles.
|
This class provides a specialisation for importing of CSV Bibles.
|
||||||
"""
|
"""
|
||||||
log.info('CSVBible loaded')
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Loads a Bible from a set of CSV files. This class assumes the files contain all the information and a clean
|
Loads a Bible from a set of CSV files. This class assumes the files contain all the information and a clean
|
||||||
bible is being loaded.
|
bible is being loaded.
|
||||||
"""
|
"""
|
||||||
log.info(self.__class__.__name__)
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
self.log_info(self.__class__.__name__)
|
||||||
self.books_file = kwargs['booksfile']
|
self.books_file = kwargs['booksfile']
|
||||||
self.verses_file = kwargs['versefile']
|
self.verses_file = kwargs['versefile']
|
||||||
|
|
||||||
@ -123,12 +118,11 @@ class CSVBible(BibleImport):
|
|||||||
number_of_books = len(books)
|
number_of_books = len(books)
|
||||||
for book in books:
|
for book in books:
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
return None
|
break
|
||||||
self.wizard.increment_progress_bar(
|
self.wizard.increment_progress_bar(
|
||||||
translate('BiblesPlugin.CSVBible', 'Importing books... {book}').format(book=book.name))
|
translate('BiblesPlugin.CSVBible', 'Importing books... {book}').format(book=book.name))
|
||||||
self.find_and_create_book(book.name, number_of_books, self.language_id)
|
self.find_and_create_book(book.name, number_of_books, self.language_id)
|
||||||
book_list.update({int(book.id): book.name})
|
book_list.update({int(book.id): book.name})
|
||||||
self.application.process_events()
|
|
||||||
return book_list
|
return book_list
|
||||||
|
|
||||||
def process_verses(self, verses, books):
|
def process_verses(self, verses, books):
|
||||||
@ -142,7 +136,7 @@ class CSVBible(BibleImport):
|
|||||||
book_ptr = None
|
book_ptr = None
|
||||||
for verse in verses:
|
for verse in verses:
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
return None
|
break
|
||||||
verse_book = self.get_book_name(verse.book_id_name, books)
|
verse_book = self.get_book_name(verse.book_id_name, books)
|
||||||
if book_ptr != verse_book:
|
if book_ptr != verse_book:
|
||||||
book = self.get_book(verse_book)
|
book = self.get_book(verse_book)
|
||||||
@ -151,9 +145,7 @@ class CSVBible(BibleImport):
|
|||||||
translate('BiblesPlugin.CSVBible', 'Importing verses from {book}...',
|
translate('BiblesPlugin.CSVBible', 'Importing verses from {book}...',
|
||||||
'Importing verses from <book name>...').format(book=book.name))
|
'Importing verses from <book name>...').format(book=book.name))
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
self.create_verse(book.id, verse.chapter_number, verse.number, verse.text)
|
self.create_verse(book.id, int(verse.chapter_number), int(verse.number), verse.text)
|
||||||
self.wizard.increment_progress_bar(translate('BiblesPlugin.CSVBible', 'Importing verses... done.'))
|
|
||||||
self.application.process_events()
|
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
|
|
||||||
def do_import(self, bible_name=None):
|
def do_import(self, bible_name=None):
|
||||||
@ -163,24 +155,16 @@ class CSVBible(BibleImport):
|
|||||||
:param bible_name: Optional name of the bible being imported. Str or None
|
:param bible_name: Optional name of the bible being imported. Str or None
|
||||||
:return: True if the import was successful, False if it failed or was cancelled
|
:return: True if the import was successful, False if it failed or was cancelled
|
||||||
"""
|
"""
|
||||||
try:
|
self.language_id = self.get_language(bible_name)
|
||||||
self.language_id = self.get_language(bible_name)
|
if not self.language_id:
|
||||||
if not self.language_id:
|
|
||||||
raise ValidationError(msg='Invalid language selected')
|
|
||||||
books = self.parse_csv_file(self.books_file, Book)
|
|
||||||
self.wizard.progress_bar.setValue(0)
|
|
||||||
self.wizard.progress_bar.setMinimum(0)
|
|
||||||
self.wizard.progress_bar.setMaximum(len(books))
|
|
||||||
book_list = self.process_books(books)
|
|
||||||
if self.stop_import_flag:
|
|
||||||
return False
|
|
||||||
verses = self.parse_csv_file(self.verses_file, Verse)
|
|
||||||
self.wizard.progress_bar.setValue(0)
|
|
||||||
self.wizard.progress_bar.setMaximum(len(books) + 1)
|
|
||||||
self.process_verses(verses, book_list)
|
|
||||||
if self.stop_import_flag:
|
|
||||||
return False
|
|
||||||
except ValidationError:
|
|
||||||
log.exception('Could not import CSV bible')
|
|
||||||
return False
|
return False
|
||||||
|
books = self.parse_csv_file(self.books_file, Book)
|
||||||
|
self.wizard.progress_bar.setValue(0)
|
||||||
|
self.wizard.progress_bar.setMinimum(0)
|
||||||
|
self.wizard.progress_bar.setMaximum(len(books))
|
||||||
|
book_list = self.process_books(books)
|
||||||
|
verses = self.parse_csv_file(self.verses_file, Verse)
|
||||||
|
self.wizard.progress_bar.setValue(0)
|
||||||
|
self.wizard.progress_bar.setMaximum(len(books) + 1)
|
||||||
|
self.process_verses(verses, book_list)
|
||||||
return True
|
return True
|
||||||
|
@ -493,7 +493,7 @@ class CWExtract(RegistryProperties):
|
|||||||
for verse in verses_div:
|
for verse in verses_div:
|
||||||
self.application.process_events()
|
self.application.process_events()
|
||||||
verse_number = int(verse.find('strong').contents[0])
|
verse_number = int(verse.find('strong').contents[0])
|
||||||
verse_span = verse.find('span')
|
verse_span = verse.find('span', class_='verse-%d' % verse_number)
|
||||||
tags_to_remove = verse_span.find_all(['a', 'sup'])
|
tags_to_remove = verse_span.find_all(['a', 'sup'])
|
||||||
for tag in tags_to_remove:
|
for tag in tags_to_remove:
|
||||||
tag.decompose()
|
tag.decompose()
|
||||||
|
@ -20,109 +20,126 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import logging
|
|
||||||
from lxml import etree, objectify
|
|
||||||
|
|
||||||
from openlp.core.common import translate, trace_error_handler
|
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
|
||||||
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
||||||
from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB
|
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
def get_text(element):
|
||||||
|
"""
|
||||||
|
Recursively get all text in an objectify element and its child elements.
|
||||||
|
|
||||||
|
:param element: An objectify element to get the text from
|
||||||
|
:return: The text content of the element (str)
|
||||||
|
"""
|
||||||
|
verse_text = ''
|
||||||
|
if element.text:
|
||||||
|
verse_text = element.text
|
||||||
|
for sub_element in element.iterchildren():
|
||||||
|
verse_text += get_text(sub_element)
|
||||||
|
if element.tail:
|
||||||
|
verse_text += element.tail
|
||||||
|
return verse_text
|
||||||
|
|
||||||
|
|
||||||
|
def parse_chapter_number(number, previous_number):
|
||||||
|
"""
|
||||||
|
Parse the chapter number
|
||||||
|
|
||||||
|
:param number: The raw data from the xml
|
||||||
|
:param previous_number: The previous chapter number
|
||||||
|
:return: Number of current chapter. (Int)
|
||||||
|
"""
|
||||||
|
if number:
|
||||||
|
return int(number.split()[-1])
|
||||||
|
return previous_number + 1
|
||||||
|
|
||||||
|
|
||||||
class OpenSongBible(BibleImport):
|
class OpenSongBible(BibleImport):
|
||||||
"""
|
"""
|
||||||
OpenSong Bible format importer class. This class is used to import Bibles from OpenSong's XML format.
|
OpenSong Bible format importer class. This class is used to import Bibles from OpenSong's XML format.
|
||||||
"""
|
"""
|
||||||
def get_text(self, element):
|
|
||||||
"""
|
|
||||||
Recursively get all text in an objectify element and its child elements.
|
|
||||||
|
|
||||||
:param element: An objectify element to get the text from
|
def parse_verse_number(self, number, previous_number):
|
||||||
"""
|
"""
|
||||||
verse_text = ''
|
Parse the verse number retrieved from the xml
|
||||||
if element.text:
|
|
||||||
verse_text = element.text
|
:param number: The raw data from the xml
|
||||||
for sub_element in element.iterchildren():
|
:param previous_number: The previous verse number
|
||||||
verse_text += self.get_text(sub_element)
|
:return: Number of current verse. (Int)
|
||||||
if element.tail:
|
"""
|
||||||
verse_text += element.tail
|
if not number:
|
||||||
return verse_text
|
return previous_number + 1
|
||||||
|
try:
|
||||||
|
return int(number)
|
||||||
|
except ValueError:
|
||||||
|
verse_parts = number.split('-')
|
||||||
|
if len(verse_parts) > 1:
|
||||||
|
number = int(verse_parts[0])
|
||||||
|
return number
|
||||||
|
except TypeError:
|
||||||
|
self.log_warning('Illegal verse number: {verse_no}'.format(verse_no=str(number)))
|
||||||
|
return previous_number + 1
|
||||||
|
|
||||||
|
def process_books(self, books):
|
||||||
|
"""
|
||||||
|
Extract and create the books from the objectified xml
|
||||||
|
|
||||||
|
:param books: Objectified xml
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
for book in books:
|
||||||
|
if self.stop_import_flag:
|
||||||
|
break
|
||||||
|
db_book = self.find_and_create_book(str(book.attrib['n']), len(books), self.language_id)
|
||||||
|
self.process_chapters(db_book, book.c)
|
||||||
|
self.session.commit()
|
||||||
|
|
||||||
|
def process_chapters(self, book, chapters):
|
||||||
|
"""
|
||||||
|
Extract and create the chapters from the objectified xml for the book `book`
|
||||||
|
|
||||||
|
:param book: A database Book object to add the chapters to
|
||||||
|
:param chapters: Objectified xml containing chapters
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
chapter_number = 0
|
||||||
|
for chapter in chapters:
|
||||||
|
if self.stop_import_flag:
|
||||||
|
break
|
||||||
|
chapter_number = parse_chapter_number(chapter.attrib['n'], chapter_number)
|
||||||
|
self.set_current_chapter(book.name, chapter_number)
|
||||||
|
self.process_verses(book, chapter_number, chapter.v)
|
||||||
|
|
||||||
|
def process_verses(self, book, chapter_number, verses):
|
||||||
|
"""
|
||||||
|
Extract and create the verses from the objectified xml
|
||||||
|
|
||||||
|
:param book: A database Book object
|
||||||
|
:param chapter_number: The chapter number to add the verses to (int)
|
||||||
|
:param verses: Objectified xml containing verses
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
verse_number = 0
|
||||||
|
for verse in verses:
|
||||||
|
if self.stop_import_flag:
|
||||||
|
break
|
||||||
|
verse_number = self.parse_verse_number(verse.attrib['n'], verse_number)
|
||||||
|
self.create_verse(book.id, chapter_number, verse_number, get_text(verse))
|
||||||
|
|
||||||
def do_import(self, bible_name=None):
|
def do_import(self, bible_name=None):
|
||||||
"""
|
"""
|
||||||
Loads a Bible from file.
|
Loads an Open Song Bible from a file.
|
||||||
|
|
||||||
|
:param bible_name: The name of the bible being imported
|
||||||
|
:return: True if import completed, False if import was unsuccessful
|
||||||
"""
|
"""
|
||||||
log.debug('Starting OpenSong import from "{name}"'.format(name=self.filename))
|
self.log_debug('Starting OpenSong import from "{name}"'.format(name=self.filename))
|
||||||
success = True
|
self.validate_xml_file(self.filename, 'bible')
|
||||||
try:
|
bible = self.parse_xml(self.filename, use_objectify=True)
|
||||||
bible = self.parse_xml(self.filename, use_objectify=True)
|
if bible is None:
|
||||||
# Check that we're not trying to import a Zefania XML bible, it is sometimes refered to as 'OpenSong'
|
|
||||||
if bible.tag.upper() == 'XMLBIBLE':
|
|
||||||
critical_error_message_box(
|
|
||||||
message=translate('BiblesPlugin.OpenSongImport',
|
|
||||||
'Incorrect Bible file type supplied. This looks like a Zefania XML bible, '
|
|
||||||
'please use the Zefania import option.'))
|
|
||||||
return False
|
|
||||||
# No language info in the opensong format, so ask the user
|
|
||||||
language_id = self.get_language_id(bible_name=self.filename)
|
|
||||||
if not language_id:
|
|
||||||
return False
|
|
||||||
for book in bible.b:
|
|
||||||
if self.stop_import_flag:
|
|
||||||
break
|
|
||||||
book_ref_id = self.get_book_ref_id_by_name(str(book.attrib['n']), len(bible.b), language_id)
|
|
||||||
if not book_ref_id:
|
|
||||||
log.error('Importing books from "{name}" failed'.format(name=self.filename))
|
|
||||||
return False
|
|
||||||
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
|
|
||||||
db_book = self.create_book(book.attrib['n'], book_ref_id, book_details['testament_id'])
|
|
||||||
chapter_number = 0
|
|
||||||
for chapter in book.c:
|
|
||||||
if self.stop_import_flag:
|
|
||||||
break
|
|
||||||
number = chapter.attrib['n']
|
|
||||||
if number:
|
|
||||||
chapter_number = int(number.split()[-1])
|
|
||||||
else:
|
|
||||||
chapter_number += 1
|
|
||||||
verse_number = 0
|
|
||||||
for verse in chapter.v:
|
|
||||||
if self.stop_import_flag:
|
|
||||||
break
|
|
||||||
number = verse.attrib['n']
|
|
||||||
if number:
|
|
||||||
try:
|
|
||||||
number = int(number)
|
|
||||||
except ValueError:
|
|
||||||
verse_parts = number.split('-')
|
|
||||||
if len(verse_parts) > 1:
|
|
||||||
number = int(verse_parts[0])
|
|
||||||
except TypeError:
|
|
||||||
log.warning('Illegal verse number: {verse:d}'.format(verse=verse.attrib['n']))
|
|
||||||
verse_number = number
|
|
||||||
else:
|
|
||||||
verse_number += 1
|
|
||||||
self.create_verse(db_book.id, chapter_number, verse_number, self.get_text(verse))
|
|
||||||
self.wizard.increment_progress_bar(translate('BiblesPlugin.Opensong',
|
|
||||||
'Importing {name} {chapter}...'
|
|
||||||
).format(name=db_book.name, chapter=chapter_number))
|
|
||||||
self.session.commit()
|
|
||||||
self.application.process_events()
|
|
||||||
except etree.XMLSyntaxError as inst:
|
|
||||||
trace_error_handler(log)
|
|
||||||
critical_error_message_box(
|
|
||||||
message=translate('BiblesPlugin.OpenSongImport',
|
|
||||||
'Incorrect Bible file type supplied. OpenSong Bibles may be '
|
|
||||||
'compressed. You must decompress them before import.'))
|
|
||||||
log.exception(inst)
|
|
||||||
success = False
|
|
||||||
except (IOError, AttributeError):
|
|
||||||
log.exception('Loading Bible from OpenSong file failed')
|
|
||||||
success = False
|
|
||||||
if self.stop_import_flag:
|
|
||||||
return False
|
return False
|
||||||
else:
|
# No language info in the opensong format, so ask the user
|
||||||
return success
|
self.language_id = self.get_language_id(bible_name=self.filename)
|
||||||
|
if not self.language_id:
|
||||||
|
return False
|
||||||
|
self.process_books(bible.b)
|
||||||
|
return True
|
||||||
|
@ -20,15 +20,9 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import logging
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from openlp.core.common import translate, trace_error_handler
|
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
|
||||||
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
from openlp.plugins.bibles.lib.bibleimport import BibleImport
|
||||||
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
NS = {'ns': 'http://www.bibletechnologies.net/2003/OSIS/namespace'}
|
NS = {'ns': 'http://www.bibletechnologies.net/2003/OSIS/namespace'}
|
||||||
# Tags we don't use and can remove the content
|
# Tags we don't use and can remove the content
|
||||||
@ -74,104 +68,106 @@ REMOVABLE_TAGS = (
|
|||||||
'{http://www.bibletechnologies.net/2003/OSIS/namespace}caption'
|
'{http://www.bibletechnologies.net/2003/OSIS/namespace}caption'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Precompile a few xpath-querys
|
||||||
def replacement(match):
|
verse_in_chapter = etree.XPath('//ns:chapter[1]/ns:verse', namespaces=NS)
|
||||||
return match.group(2).upper()
|
text_in_verse = etree.XPath('//ns:verse[1]/text()', namespaces=NS)
|
||||||
|
|
||||||
|
|
||||||
class OSISBible(BibleImport):
|
class OSISBible(BibleImport):
|
||||||
"""
|
"""
|
||||||
`OSIS <http://www.bibletechnologies.net/>`_ Bible format importer class.
|
`OSIS <http://www.bibletechnologies.net/>`_ Bible format importer class.
|
||||||
"""
|
"""
|
||||||
|
def process_books(self, bible_data):
|
||||||
|
"""
|
||||||
|
Extract and create the bible books from the parsed xml
|
||||||
|
|
||||||
|
:param bible_data: parsed xml
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
# Find books in the bible
|
||||||
|
bible_books = bible_data.xpath("//ns:div[@type='book']", namespaces=NS)
|
||||||
|
no_of_books = len(bible_books)
|
||||||
|
for book in bible_books:
|
||||||
|
if self.stop_import_flag:
|
||||||
|
break
|
||||||
|
# Remove div-tags in the book
|
||||||
|
etree.strip_tags(book, '{http://www.bibletechnologies.net/2003/OSIS/namespace}div')
|
||||||
|
db_book = self.find_and_create_book(book.get('osisID'), no_of_books, self.language_id)
|
||||||
|
self.process_chapters(db_book, book)
|
||||||
|
self.session.commit()
|
||||||
|
|
||||||
|
def process_chapters(self, book, chapters):
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
# Find out if chapter-tags contains the verses, or if it is used as milestone/anchor
|
||||||
|
if verse_in_chapter(chapters):
|
||||||
|
# The chapter tags contains the verses
|
||||||
|
for chapter in chapters:
|
||||||
|
chapter_number = int(chapter.get("osisID").split('.')[1])
|
||||||
|
self.set_current_chapter(book.name, chapter_number)
|
||||||
|
# Find out if verse-tags contains the text, or if it is used as milestone/anchor
|
||||||
|
if not text_in_verse(chapter):
|
||||||
|
# verse-tags are used as milestone
|
||||||
|
for verse in chapter:
|
||||||
|
# If this tag marks the start of a verse, the verse text is between this tag and
|
||||||
|
# the next tag, which the "tail" attribute gives us.
|
||||||
|
self.process_verse(book, chapter_number, verse, use_milestones=True)
|
||||||
|
else:
|
||||||
|
# Verse-tags contains the text
|
||||||
|
for verse in chapter:
|
||||||
|
self.process_verse(book, chapter_number, verse)
|
||||||
|
else:
|
||||||
|
# The chapter tags is used as milestones. For now we assume verses is also milestones
|
||||||
|
chapter_number = 0
|
||||||
|
for element in chapters:
|
||||||
|
if element.tag == '{http://www.bibletechnologies.net/2003/OSIS/namespace}chapter' \
|
||||||
|
and element.get('sID'):
|
||||||
|
chapter_number = int(element.get("osisID").split('.')[1])
|
||||||
|
self.set_current_chapter(book.name, chapter_number)
|
||||||
|
elif element.tag == '{http://www.bibletechnologies.net/2003/OSIS/namespace}verse':
|
||||||
|
# If this tag marks the start of a verse, the verse text is between this tag and
|
||||||
|
# the next tag, which the "tail" attribute gives us.
|
||||||
|
self.process_verse(book, chapter_number, element, use_milestones=True)
|
||||||
|
|
||||||
|
def process_verse(self, book, chapter_number, element, use_milestones=False):
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
osis_id = element.get("osisID")
|
||||||
|
if not osis_id:
|
||||||
|
return None
|
||||||
|
verse_number = int(osis_id.split('.')[2])
|
||||||
|
verse_text = ''
|
||||||
|
if use_milestones and element.get('sID'):
|
||||||
|
verse_text = element.tail
|
||||||
|
elif not use_milestones:
|
||||||
|
verse_text = element.text
|
||||||
|
if verse_text:
|
||||||
|
self.create_verse(book.id, chapter_number, verse_number, verse_text.strip())
|
||||||
|
|
||||||
def do_import(self, bible_name=None):
|
def do_import(self, bible_name=None):
|
||||||
"""
|
"""
|
||||||
Loads a Bible from file.
|
Loads a Bible from file.
|
||||||
"""
|
"""
|
||||||
log.debug('Starting OSIS import from "{name}"'.format(name=self.filename))
|
self.log_debug('Starting OSIS import from "{name}"'.format(name=self.filename))
|
||||||
success = True
|
self.validate_xml_file(self.filename, '{http://www.bibletechnologies.net/2003/osis/namespace}osis')
|
||||||
try:
|
bible = self.parse_xml(self.filename, elements=REMOVABLE_ELEMENTS, tags=REMOVABLE_TAGS)
|
||||||
self.wizard.increment_progress_bar(translate('BiblesPlugin.OsisImport',
|
if bible is None:
|
||||||
'Removing unused tags (this may take a few minutes)...'))
|
|
||||||
osis_bible_tree = self.parse_xml(self.filename, elements=REMOVABLE_ELEMENTS, tags=REMOVABLE_TAGS)
|
|
||||||
# Find bible language]
|
|
||||||
language = osis_bible_tree.xpath("//ns:osisText/@xml:lang", namespaces=NS)
|
|
||||||
language_id = self.get_language_id(language[0] if language else None, bible_name=self.filename)
|
|
||||||
if not language_id:
|
|
||||||
return False
|
|
||||||
num_books = int(osis_bible_tree.xpath("count(//ns:div[@type='book'])", namespaces=NS))
|
|
||||||
# Precompile a few xpath-querys
|
|
||||||
verse_in_chapter = etree.XPath('count(//ns:chapter[1]/ns:verse)', namespaces=NS)
|
|
||||||
text_in_verse = etree.XPath('count(//ns:verse[1]/text())', namespaces=NS)
|
|
||||||
# Find books in the bible
|
|
||||||
bible_books = osis_bible_tree.xpath("//ns:div[@type='book']", namespaces=NS)
|
|
||||||
for book in bible_books:
|
|
||||||
if self.stop_import_flag:
|
|
||||||
break
|
|
||||||
# Remove div-tags in the book
|
|
||||||
etree.strip_tags(book, ('{http://www.bibletechnologies.net/2003/OSIS/namespace}div'))
|
|
||||||
book_ref_id = self.get_book_ref_id_by_name(book.get('osisID'), num_books, language_id)
|
|
||||||
if not book_ref_id:
|
|
||||||
log.error('Importing books from "{name}" failed'.format(name=self.filename))
|
|
||||||
return False
|
|
||||||
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
|
|
||||||
db_book = self.create_book(book_details['name'], book_ref_id, book_details['testament_id'])
|
|
||||||
# Find out if chapter-tags contains the verses, or if it is used as milestone/anchor
|
|
||||||
if int(verse_in_chapter(book)) > 0:
|
|
||||||
# The chapter tags contains the verses
|
|
||||||
for chapter in book:
|
|
||||||
chapter_number = chapter.get("osisID").split('.')[1]
|
|
||||||
# Find out if verse-tags contains the text, or if it is used as milestone/anchor
|
|
||||||
if int(text_in_verse(chapter)) == 0:
|
|
||||||
# verse-tags are used as milestone
|
|
||||||
for verse in chapter:
|
|
||||||
# If this tag marks the start of a verse, the verse text is between this tag and
|
|
||||||
# the next tag, which the "tail" attribute gives us.
|
|
||||||
if verse.get('sID'):
|
|
||||||
verse_number = verse.get("osisID").split('.')[2]
|
|
||||||
verse_text = verse.tail
|
|
||||||
if verse_text:
|
|
||||||
self.create_verse(db_book.id, chapter_number, verse_number, verse_text.strip())
|
|
||||||
else:
|
|
||||||
# Verse-tags contains the text
|
|
||||||
for verse in chapter:
|
|
||||||
verse_number = verse.get("osisID").split('.')[2]
|
|
||||||
if verse.text:
|
|
||||||
self.create_verse(db_book.id, chapter_number, verse_number, verse.text.strip())
|
|
||||||
self.wizard.increment_progress_bar(
|
|
||||||
translate('BiblesPlugin.OsisImport', 'Importing %(bookname)s %(chapter)s...') %
|
|
||||||
{'bookname': db_book.name, 'chapter': chapter_number})
|
|
||||||
else:
|
|
||||||
# The chapter tags is used as milestones. For now we assume verses is also milestones
|
|
||||||
chapter_number = 0
|
|
||||||
for element in book:
|
|
||||||
if element.tag == '{http://www.bibletechnologies.net/2003/OSIS/namespace}chapter' \
|
|
||||||
and element.get('sID'):
|
|
||||||
chapter_number = element.get("osisID").split('.')[1]
|
|
||||||
self.wizard.increment_progress_bar(
|
|
||||||
translate('BiblesPlugin.OsisImport', 'Importing %(bookname)s %(chapter)s...') %
|
|
||||||
{'bookname': db_book.name, 'chapter': chapter_number})
|
|
||||||
elif element.tag == '{http://www.bibletechnologies.net/2003/OSIS/namespace}verse' \
|
|
||||||
and element.get('sID'):
|
|
||||||
# If this tag marks the start of a verse, the verse text is between this tag and
|
|
||||||
# the next tag, which the "tail" attribute gives us.
|
|
||||||
verse_number = element.get("osisID").split('.')[2]
|
|
||||||
verse_text = element.tail
|
|
||||||
if verse_text:
|
|
||||||
self.create_verse(db_book.id, chapter_number, verse_number, verse_text.strip())
|
|
||||||
self.session.commit()
|
|
||||||
self.application.process_events()
|
|
||||||
except (ValueError, IOError):
|
|
||||||
log.exception('Loading bible from OSIS file failed')
|
|
||||||
trace_error_handler(log)
|
|
||||||
success = False
|
|
||||||
except etree.XMLSyntaxError as e:
|
|
||||||
log.exception('Loading bible from OSIS file failed')
|
|
||||||
trace_error_handler(log)
|
|
||||||
success = False
|
|
||||||
critical_error_message_box(message=translate('BiblesPlugin.OsisImport',
|
|
||||||
'The file is not a valid OSIS-XML file:'
|
|
||||||
'\n{text}').format(text=e.msg))
|
|
||||||
if self.stop_import_flag:
|
|
||||||
return False
|
return False
|
||||||
else:
|
# Find bible language
|
||||||
return success
|
language = bible.xpath("//ns:osisText/@xml:lang", namespaces=NS)
|
||||||
|
self.language_id = self.get_language_id(language[0] if language else None, bible_name=self.filename)
|
||||||
|
if not self.language_id:
|
||||||
|
return False
|
||||||
|
self.process_books(bible)
|
||||||
|
return True
|
||||||
|
@ -54,7 +54,7 @@ class ZefaniaBible(BibleImport):
|
|||||||
language_id = self.get_language_id(language[0] if language else None, bible_name=self.filename)
|
language_id = self.get_language_id(language[0] if language else None, bible_name=self.filename)
|
||||||
if not language_id:
|
if not language_id:
|
||||||
return False
|
return False
|
||||||
num_books = int(xmlbible.xpath('count(//BIBLEBOOK)'))
|
no_of_books = int(xmlbible.xpath('count(//BIBLEBOOK)'))
|
||||||
self.wizard.progress_bar.setMaximum(int(xmlbible.xpath('count(//CHAPTER)')))
|
self.wizard.progress_bar.setMaximum(int(xmlbible.xpath('count(//CHAPTER)')))
|
||||||
for BIBLEBOOK in xmlbible:
|
for BIBLEBOOK in xmlbible:
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
@ -64,7 +64,7 @@ class ZefaniaBible(BibleImport):
|
|||||||
if not bname and not bnumber:
|
if not bname and not bnumber:
|
||||||
continue
|
continue
|
||||||
if bname:
|
if bname:
|
||||||
book_ref_id = self.get_book_ref_id_by_name(bname, num_books, language_id)
|
book_ref_id = self.get_book_ref_id_by_name(bname, no_of_books, language_id)
|
||||||
else:
|
else:
|
||||||
log.debug('Could not find a name, will use number, basically a guess.')
|
log.debug('Could not find a name, will use number, basically a guess.')
|
||||||
book_ref_id = int(bnumber)
|
book_ref_id = int(bnumber)
|
||||||
@ -79,7 +79,8 @@ class ZefaniaBible(BibleImport):
|
|||||||
chapter_number = CHAPTER.get("cnumber")
|
chapter_number = CHAPTER.get("cnumber")
|
||||||
for VERS in CHAPTER:
|
for VERS in CHAPTER:
|
||||||
verse_number = VERS.get("vnumber")
|
verse_number = VERS.get("vnumber")
|
||||||
self.create_verse(db_book.id, chapter_number, verse_number, VERS.text.replace('<BR/>', '\n'))
|
self.create_verse(
|
||||||
|
db_book.id, int(chapter_number), int(verse_number), VERS.text.replace('<BR/>', '\n'))
|
||||||
self.wizard.increment_progress_bar(
|
self.wizard.increment_progress_bar(
|
||||||
translate('BiblesPlugin.Zefnia',
|
translate('BiblesPlugin.Zefnia',
|
||||||
'Importing {book} {chapter}...').format(book=db_book.name,
|
'Importing {book} {chapter}...').format(book=db_book.name,
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from openlp.core.common import RegistryProperties, AppLocation, Settings, translate, delete_file, UiStrings
|
from openlp.core.common import AppLocation, OpenLPMixin, RegistryProperties, Settings, translate, delete_file, UiStrings
|
||||||
from openlp.plugins.bibles.lib import parse_reference, LanguageSelection
|
from openlp.plugins.bibles.lib import LanguageSelection, parse_reference
|
||||||
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta
|
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta
|
||||||
from .importers.csvbible import CSVBible
|
from .importers.csvbible import CSVBible
|
||||||
from .importers.http import HTTPBible
|
from .importers.http import HTTPBible
|
||||||
@ -88,7 +88,7 @@ class BibleFormat(object):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class BibleManager(RegistryProperties):
|
class BibleManager(OpenLPMixin, RegistryProperties):
|
||||||
"""
|
"""
|
||||||
The Bible manager which holds and manages all the Bibles.
|
The Bible manager which holds and manages all the Bibles.
|
||||||
"""
|
"""
|
||||||
@ -131,7 +131,7 @@ class BibleManager(RegistryProperties):
|
|||||||
name = bible.get_name()
|
name = bible.get_name()
|
||||||
# Remove corrupted files.
|
# Remove corrupted files.
|
||||||
if name is None:
|
if name is None:
|
||||||
bible.session.close()
|
bible.session.close_all()
|
||||||
delete_file(os.path.join(self.path, filename))
|
delete_file(os.path.join(self.path, filename))
|
||||||
continue
|
continue
|
||||||
log.debug('Bible Name: "{name}"'.format(name=name))
|
log.debug('Bible Name: "{name}"'.format(name=name))
|
||||||
@ -178,7 +178,7 @@ class BibleManager(RegistryProperties):
|
|||||||
"""
|
"""
|
||||||
log.debug('BibleManager.delete_bible("{name}")'.format(name=name))
|
log.debug('BibleManager.delete_bible("{name}")'.format(name=name))
|
||||||
bible = self.db_cache[name]
|
bible = self.db_cache[name]
|
||||||
bible.session.close()
|
bible.session.close_all()
|
||||||
bible.session = None
|
bible.session = None
|
||||||
return delete_file(os.path.join(bible.path, bible.file))
|
return delete_file(os.path.join(bible.path, bible.file))
|
||||||
|
|
||||||
@ -367,7 +367,6 @@ class BibleManager(RegistryProperties):
|
|||||||
second_web_bible = self.db_cache[second_bible].get_object(BibleMeta, 'download_source')
|
second_web_bible = self.db_cache[second_bible].get_object(BibleMeta, 'download_source')
|
||||||
if web_bible or second_web_bible:
|
if web_bible or second_web_bible:
|
||||||
# If either Bible is Web, cursor is reset to normal and search ends w/o any message.
|
# If either Bible is Web, cursor is reset to normal and search ends w/o any message.
|
||||||
self.check_search_result()
|
|
||||||
self.application.set_normal_cursor()
|
self.application.set_normal_cursor()
|
||||||
return None
|
return None
|
||||||
# Fetch the results from db. If no results are found, return None, no message is given for this.
|
# Fetch the results from db. If no results are found, return None, no message is given for this.
|
||||||
|
@ -199,7 +199,7 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.quick_search_label = QtWidgets.QLabel(self.quickTab)
|
self.quick_search_label = QtWidgets.QLabel(self.quickTab)
|
||||||
self.quick_search_label.setObjectName('quick_search_label')
|
self.quick_search_label.setObjectName('quick_search_label')
|
||||||
self.quickLayout.addWidget(self.quick_search_label, 0, 0, QtCore.Qt.AlignRight)
|
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.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.quick_search_edit.setObjectName('quick_search_edit')
|
self.quick_search_edit.setObjectName('quick_search_edit')
|
||||||
self.quick_search_label.setBuddy(self.quick_search_edit)
|
self.quick_search_label.setBuddy(self.quick_search_edit)
|
||||||
@ -254,8 +254,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.quickStyleComboBox.activated.connect(self.on_quick_style_combo_box_changed)
|
self.quickStyleComboBox.activated.connect(self.on_quick_style_combo_box_changed)
|
||||||
self.advancedStyleComboBox.activated.connect(self.on_advanced_style_combo_box_changed)
|
self.advancedStyleComboBox.activated.connect(self.on_advanced_style_combo_box_changed)
|
||||||
# Buttons
|
# Buttons
|
||||||
self.advancedClearButton.clicked.connect(self.on_clear_button)
|
self.advancedClearButton.clicked.connect(self.on_advanced_clear_button_clicked)
|
||||||
self.quickClearButton.clicked.connect(self.on_clear_button)
|
self.quickClearButton.clicked.connect(self.on_clear_button_clicked)
|
||||||
self.advancedSearchButton.clicked.connect(self.on_advanced_search_button)
|
self.advancedSearchButton.clicked.connect(self.on_advanced_search_button)
|
||||||
self.quickSearchButton.clicked.connect(self.on_quick_search_button)
|
self.quickSearchButton.clicked.connect(self.on_quick_search_button)
|
||||||
# Other stuff
|
# Other stuff
|
||||||
@ -333,8 +333,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
translate('BiblesPlugin.MediaItem', 'Text Search'),
|
translate('BiblesPlugin.MediaItem', 'Text Search'),
|
||||||
translate('BiblesPlugin.MediaItem', 'Search Text...'))
|
translate('BiblesPlugin.MediaItem', 'Search Text...'))
|
||||||
])
|
])
|
||||||
text = self.settings_section
|
if Settings().value(self.settings_section + '/reset to combined quick search'):
|
||||||
self.quick_search_edit.set_current_search_type(Settings().value('{text}/last search type'.format(text=text)))
|
self.quick_search_edit.set_current_search_type(BibleSearch.Combined)
|
||||||
self.config_update()
|
self.config_update()
|
||||||
log.debug('bible manager initialise complete')
|
log.debug('bible manager initialise complete')
|
||||||
|
|
||||||
@ -444,15 +444,6 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
only updated when we are doing reference or combined search, in text search the completion list is removed.
|
only updated when we are doing reference or combined search, in text search the completion list is removed.
|
||||||
"""
|
"""
|
||||||
log.debug('update_auto_completer')
|
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.
|
# Save the current bible to the configuration.
|
||||||
Settings().setValue('{section}/quick bible'.format(section=self.settings_section),
|
Settings().setValue('{section}/quick bible'.format(section=self.settings_section),
|
||||||
self.quickVersionComboBox.currentText())
|
self.quickVersionComboBox.currentText())
|
||||||
@ -548,19 +539,31 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.advancedTab.setVisible(True)
|
self.advancedTab.setVisible(True)
|
||||||
self.advanced_book_combo_box.setFocus()
|
self.advanced_book_combo_box.setFocus()
|
||||||
|
|
||||||
def on_clear_button(self):
|
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.
|
# Clear the list, then set the "No search Results" message, then clear the text field and give it focus.
|
||||||
self.list_view.clear()
|
self.list_view.clear()
|
||||||
self.check_search_result()
|
self.check_search_result()
|
||||||
self.quick_search_edit.clear()
|
self.quick_search_edit.clear()
|
||||||
self.quick_search_edit.setFocus()
|
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):
|
def on_lock_button_toggled(self, checked):
|
||||||
self.quick_search_edit.setFocus()
|
"""
|
||||||
|
Toggle the lock button, if Search tab is used, set focus to search field.
|
||||||
|
:param checked: The state of the toggle button. bool
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
if checked:
|
if checked:
|
||||||
self.sender().setIcon(self.lock_icon)
|
self.sender().setIcon(self.lock_icon)
|
||||||
else:
|
else:
|
||||||
self.sender().setIcon(self.unlock_icon)
|
self.sender().setIcon(self.unlock_icon)
|
||||||
|
if self.quickTab.isVisible():
|
||||||
|
self.quick_search_edit.setFocus()
|
||||||
|
|
||||||
def on_quick_style_combo_box_changed(self):
|
def on_quick_style_combo_box_changed(self):
|
||||||
self.settings.layout_style = self.quickStyleComboBox.currentIndex()
|
self.settings.layout_style = self.quickStyleComboBox.currentIndex()
|
||||||
|
@ -24,8 +24,6 @@ The :mod:`upgrade` module provides a way for the database and schema that is the
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from sqlalchemy import delete, func, insert, select
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
__version__ = 1
|
__version__ = 1
|
||||||
|
|
||||||
@ -35,166 +33,6 @@ def upgrade_1(session, metadata):
|
|||||||
"""
|
"""
|
||||||
Version 1 upgrade.
|
Version 1 upgrade.
|
||||||
|
|
||||||
This upgrade renames a number of keys to a single naming convention.
|
This upgrade renamed a number of keys to a single naming convention.
|
||||||
"""
|
"""
|
||||||
metadata_table = metadata.tables['metadata']
|
log.info('No upgrades to perform')
|
||||||
# Copy "Version" to "name" ("version" used by upgrade system)
|
|
||||||
try:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='name',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'Version'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'Version'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading Version')
|
|
||||||
# Copy "Copyright" to "copyright"
|
|
||||||
try:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='copyright',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'Copyright'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'Copyright'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading Copyright')
|
|
||||||
# Copy "Permissions" to "permissions"
|
|
||||||
try:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='permissions',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'Permissions'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'Permissions'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading Permissions')
|
|
||||||
# Copy "Bookname language" to "book_name_language"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'Bookname language'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='book_name_language',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'Bookname language'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'Bookname language'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading Bookname language')
|
|
||||||
# Copy "download source" to "download_source"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'download source'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
log.debug('download source: {count}'.format(count=value_count))
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='download_source',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'download source'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'download source'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading download source')
|
|
||||||
# Copy "download name" to "download_name"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'download name'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
log.debug('download name: {count}'.format(count=value_count))
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='download_name',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'download name'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'download name'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading download name')
|
|
||||||
# Copy "proxy server" to "proxy_server"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'proxy server'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
log.debug('proxy server: {count}'.format(count=value_count))
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='proxy_server',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'proxy server'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'proxy server'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading proxy server')
|
|
||||||
# Copy "proxy username" to "proxy_username"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'proxy username'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
log.debug('proxy username: {count}'.format(count=value_count))
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='proxy_username',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'proxy username'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'proxy username'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading proxy username')
|
|
||||||
# Copy "proxy password" to "proxy_password"
|
|
||||||
try:
|
|
||||||
value_count = session.execute(
|
|
||||||
select(
|
|
||||||
[func.count(metadata_table.c.value)],
|
|
||||||
metadata_table.c.key == 'proxy password'
|
|
||||||
)
|
|
||||||
).scalar()
|
|
||||||
log.debug('proxy password: {count}'.format(count=value_count))
|
|
||||||
if value_count > 0:
|
|
||||||
session.execute(insert(metadata_table).values(
|
|
||||||
key='proxy_password',
|
|
||||||
value=select(
|
|
||||||
[metadata_table.c.value],
|
|
||||||
metadata_table.c.key == 'proxy password'
|
|
||||||
).as_scalar()
|
|
||||||
))
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'proxy password'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when upgrading proxy password')
|
|
||||||
try:
|
|
||||||
session.execute(delete(metadata_table).where(metadata_table.c.key == 'dbversion'))
|
|
||||||
except:
|
|
||||||
log.exception('Exception when deleting dbversion')
|
|
||||||
session.commit()
|
|
||||||
|
@ -34,7 +34,7 @@ class Ui_CustomEditDialog(object):
|
|||||||
:param custom_edit_dialog: The Dialog
|
:param custom_edit_dialog: The Dialog
|
||||||
"""
|
"""
|
||||||
custom_edit_dialog.setObjectName('custom_edit_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)
|
custom_edit_dialog.resize(450, 350)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(custom_edit_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(custom_edit_dialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -31,7 +31,7 @@ from openlp.core.ui.lib import SpellTextEdit
|
|||||||
class Ui_CustomSlideEditDialog(object):
|
class Ui_CustomSlideEditDialog(object):
|
||||||
def setupUi(self, custom_slide_edit_dialog):
|
def setupUi(self, custom_slide_edit_dialog):
|
||||||
custom_slide_edit_dialog.setObjectName('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)
|
custom_slide_edit_dialog.resize(350, 300)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(custom_slide_edit_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(custom_slide_edit_dialog)
|
||||||
self.slide_text_edit = SpellTextEdit(self)
|
self.slide_text_edit = SpellTextEdit(self)
|
||||||
|
@ -105,8 +105,6 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
[(CustomSearch.Titles, ':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles'),
|
[(CustomSearch.Titles, ':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles'),
|
||||||
translate('SongsPlugin.MediaItem', 'Search Titles...')),
|
translate('SongsPlugin.MediaItem', 'Search Titles...')),
|
||||||
(CustomSearch.Themes, ':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes)])
|
(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.load_list(self.plugin.db_manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
|
||||||
self.config_update()
|
self.config_update()
|
||||||
|
|
||||||
@ -250,9 +248,6 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
"""
|
"""
|
||||||
Search the plugin database
|
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.
|
# Reload the list considering the new search type.
|
||||||
search_type = self.search_text_edit.current_search_type()
|
search_type = self.search_text_edit.current_search_type()
|
||||||
search_keywords = '%{search}%'.format(search=self.whitespace.sub(' ', self.search_text_edit.displayText()))
|
search_keywords = '%{search}%'.format(search=self.whitespace.sub(' ', self.search_text_edit.displayText()))
|
||||||
@ -350,7 +345,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
:param string: The search string
|
:param string: The search string
|
||||||
:param show_error: The error string to be show.
|
:param show_error: The error string to be show.
|
||||||
"""
|
"""
|
||||||
search = '%{search}%'.forma(search=string.lower())
|
search = '%{search}%'.format(search=string.lower())
|
||||||
search_results = self.plugin.db_manager.get_all_objects(CustomSlide,
|
search_results = self.plugin.db_manager.get_all_objects(CustomSlide,
|
||||||
or_(func.lower(CustomSlide.title).like(search),
|
or_(func.lower(CustomSlide.title).like(search),
|
||||||
func.lower(CustomSlide.text).like(search)),
|
func.lower(CustomSlide.text).like(search)),
|
||||||
|
@ -36,7 +36,7 @@ class Ui_AuthorsDialog(object):
|
|||||||
Set up the UI for the dialog.
|
Set up the UI for the dialog.
|
||||||
"""
|
"""
|
||||||
authors_dialog.setObjectName('authors_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.resize(300, 10)
|
||||||
authors_dialog.setModal(True)
|
authors_dialog.setModal(True)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(authors_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(authors_dialog)
|
||||||
|
@ -36,7 +36,7 @@ class Ui_EditSongDialog(object):
|
|||||||
"""
|
"""
|
||||||
def setupUi(self, edit_song_dialog):
|
def setupUi(self, edit_song_dialog):
|
||||||
edit_song_dialog.setObjectName('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.resize(900, 600)
|
||||||
edit_song_dialog.setModal(True)
|
edit_song_dialog.setModal(True)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(edit_song_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(edit_song_dialog)
|
||||||
|
@ -317,7 +317,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties):
|
|||||||
self.song.verse_order = re.sub('([' + verse.upper() + verse.lower() + '])(\W|$)',
|
self.song.verse_order = re.sub('([' + verse.upper() + verse.lower() + '])(\W|$)',
|
||||||
r'\g<1>1\2', self.song.verse_order)
|
r'\g<1>1\2', self.song.verse_order)
|
||||||
except:
|
except:
|
||||||
log.exception('Problem processing song Lyrics \n{xml}'.forma(xml=sxml.dump_xml()))
|
log.exception('Problem processing song Lyrics \n{xml}'.format(xml=sxml.dump_xml()))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
|
@ -35,7 +35,7 @@ class Ui_MediaFilesDialog(object):
|
|||||||
Set up the user interface.
|
Set up the user interface.
|
||||||
"""
|
"""
|
||||||
media_files_dialog.setObjectName('media_files_dialog')
|
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.setWindowModality(QtCore.Qt.ApplicationModal)
|
||||||
media_files_dialog.resize(400, 300)
|
media_files_dialog.resize(400, 300)
|
||||||
media_files_dialog.setModal(True)
|
media_files_dialog.setModal(True)
|
||||||
|
@ -35,7 +35,7 @@ class Ui_SongBookDialog(object):
|
|||||||
Set up the user interface.
|
Set up the user interface.
|
||||||
"""
|
"""
|
||||||
song_book_dialog.setObjectName('song_book_dialog')
|
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)
|
song_book_dialog.resize(300, 10)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(song_book_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(song_book_dialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -51,7 +51,7 @@ class SongExportForm(OpenLPWizard):
|
|||||||
:param parent: The QWidget-derived parent of the wizard.
|
:param parent: The QWidget-derived parent of the wizard.
|
||||||
:param plugin: The songs plugin.
|
: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
|
self.stop_export_flag = False
|
||||||
Registry().register_function('openlp_stop_wizard', self.stop_export)
|
Registry().register_function('openlp_stop_wizard', self.stop_export)
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class SongImportForm(OpenLPWizard, RegistryProperties):
|
|||||||
:param parent: The QWidget-derived parent of the wizard.
|
:param parent: The QWidget-derived parent of the wizard.
|
||||||
:param plugin: The songs plugin.
|
: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
|
self.clipboard = self.main_window.clipboard
|
||||||
|
|
||||||
def setupUi(self, image):
|
def setupUi(self, image):
|
||||||
|
@ -37,7 +37,7 @@ class Ui_SongMaintenanceDialog(object):
|
|||||||
Set up the user interface for the song maintenance dialog
|
Set up the user interface for the song maintenance dialog
|
||||||
"""
|
"""
|
||||||
song_maintenance_dialog.setObjectName('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.setWindowModality(QtCore.Qt.ApplicationModal)
|
||||||
song_maintenance_dialog.resize(10, 350)
|
song_maintenance_dialog.resize(10, 350)
|
||||||
self.dialog_layout = QtWidgets.QGridLayout(song_maintenance_dialog)
|
self.dialog_layout = QtWidgets.QGridLayout(song_maintenance_dialog)
|
||||||
|
@ -182,7 +182,7 @@ class SongReviewWidget(QtWidgets.QWidget):
|
|||||||
self.song_vertical_layout.addWidget(self.song_group_box)
|
self.song_vertical_layout.addWidget(self.song_group_box)
|
||||||
self.song_remove_button = QtWidgets.QPushButton(self)
|
self.song_remove_button = QtWidgets.QPushButton(self)
|
||||||
self.song_remove_button.setObjectName('song_remove_button')
|
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_remove_button.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.song_vertical_layout.addWidget(self.song_remove_button, alignment=QtCore.Qt.AlignHCenter)
|
self.song_vertical_layout.addWidget(self.song_remove_button, alignment=QtCore.Qt.AlignHCenter)
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ class Ui_TopicsDialog(object):
|
|||||||
Set up the user interface for the topics dialog.
|
Set up the user interface for the topics dialog.
|
||||||
"""
|
"""
|
||||||
topics_dialog.setObjectName('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)
|
topics_dialog.resize(300, 10)
|
||||||
self.dialog_layout = QtWidgets.QVBoxLayout(topics_dialog)
|
self.dialog_layout = QtWidgets.QVBoxLayout(topics_dialog)
|
||||||
self.dialog_layout.setObjectName('dialog_layout')
|
self.dialog_layout.setObjectName('dialog_layout')
|
||||||
|
@ -101,7 +101,7 @@ class MediaShoutImport(SongImport):
|
|||||||
self.song_book_name = song.SongID
|
self.song_book_name = song.SongID
|
||||||
for verse in verses:
|
for verse in verses:
|
||||||
tag = VERSE_TAGS[verse.Type] + str(verse.Number) if verse.Type < len(VERSE_TAGS) else 'O'
|
tag = VERSE_TAGS[verse.Type] + str(verse.Number) if verse.Type < len(VERSE_TAGS) else 'O'
|
||||||
self.add_verse(verse.Text, tag)
|
self.add_verse(self.tidy_text(verse.Text), tag)
|
||||||
for order in verse_order:
|
for order in verse_order:
|
||||||
if order.Type < len(VERSE_TAGS):
|
if order.Type < len(VERSE_TAGS):
|
||||||
self.verse_order_list.append(VERSE_TAGS[order.Type] + str(order.Number))
|
self.verse_order_list.append(VERSE_TAGS[order.Type] + str(order.Number))
|
||||||
|
@ -140,10 +140,13 @@ class SongImport(QtCore.QObject):
|
|||||||
text = text.replace('\u2026', '...')
|
text = text.replace('\u2026', '...')
|
||||||
text = text.replace('\u2013', '-')
|
text = text.replace('\u2013', '-')
|
||||||
text = text.replace('\u2014', '-')
|
text = text.replace('\u2014', '-')
|
||||||
|
# Replace vertical tab with 2 linebreaks
|
||||||
|
text = text.replace('\v', '\n\n')
|
||||||
|
# Replace form feed (page break) with 2 linebreaks
|
||||||
|
text = text.replace('\f', '\n\n')
|
||||||
# Remove surplus blank lines, spaces, trailing/leading spaces
|
# Remove surplus blank lines, spaces, trailing/leading spaces
|
||||||
text = re.sub(r'[ \t\v]+', ' ', text)
|
text = re.sub(r'[ \t]+', ' ', text)
|
||||||
text = re.sub(r' ?(\r\n?|\n) ?', '\n', text)
|
text = re.sub(r' ?(\r\n?|\n) ?', '\n', text)
|
||||||
text = re.sub(r' ?(\n{5}|\f)+ ?', '\f', text)
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def process_song_text(self, text):
|
def process_song_text(self, text):
|
||||||
|
@ -166,14 +166,9 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
translate('SongsPlugin.MediaItem', 'CCLI number'),
|
translate('SongsPlugin.MediaItem', 'CCLI number'),
|
||||||
translate('SongsPlugin.MediaItem', 'Search 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()
|
self.config_update()
|
||||||
|
|
||||||
def on_search_text_button_clicked(self):
|
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.
|
# Reload the list considering the new search type.
|
||||||
search_keywords = str(self.search_text_edit.displayText())
|
search_keywords = str(self.search_text_edit.displayText())
|
||||||
search_type = self.search_text_edit.current_search_type()
|
search_type = self.search_text_edit.current_search_type()
|
||||||
|
@ -470,7 +470,7 @@ class OpenLyrics(object):
|
|||||||
self._add_tag_to_formatting(tag, tags_element)
|
self._add_tag_to_formatting(tag, tags_element)
|
||||||
# Replace end tags.
|
# Replace end tags.
|
||||||
for tag in end_tags:
|
for tag in end_tags:
|
||||||
text = text.replace('{{{tag}}}'.format(tag=tag), '</tag>')
|
text = text.replace('{{/{tag}}}'.format(tag=tag), '</tag>')
|
||||||
# Replace \n with <br/>.
|
# Replace \n with <br/>.
|
||||||
text = text.replace('\n', '<br/>')
|
text = text.replace('\n', '<br/>')
|
||||||
element = etree.XML('<lines>{text}</lines>'.format(text=text))
|
element = etree.XML('<lines>{text}</lines>'.format(text=text))
|
||||||
|
@ -46,13 +46,13 @@ MIN_BLOCK_SIZE = 70
|
|||||||
MAX_TYPO_SIZE = 3
|
MAX_TYPO_SIZE = 3
|
||||||
|
|
||||||
|
|
||||||
def songs_probably_equal(song_tupel):
|
def songs_probably_equal(song_tuple):
|
||||||
"""
|
"""
|
||||||
Calculate and return whether two songs are probably equal.
|
Calculate and return whether two songs are probably equal.
|
||||||
|
|
||||||
:param song_tupel: A tuple of two songs to compare.
|
:param song_tuple: A tuple of two songs to compare.
|
||||||
"""
|
"""
|
||||||
song1, song2 = song_tupel
|
song1, song2 = song_tuple
|
||||||
pos1, lyrics1 = song1
|
pos1, lyrics1 = song1
|
||||||
pos2, lyrics2 = song2
|
pos2, lyrics2 = song2
|
||||||
if len(lyrics1) < len(lyrics2):
|
if len(lyrics1) < len(lyrics2):
|
||||||
|
106
openlp/plugins/songs/reporting.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# -*- 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 #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
The :mod:`db` module provides the ability to provide a csv file of all songs
|
||||||
|
"""
|
||||||
|
import csv
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from PyQt5 import QtWidgets
|
||||||
|
|
||||||
|
from openlp.core.common import Registry, translate
|
||||||
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
|
from openlp.plugins.songs.lib.db import Song
|
||||||
|
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def report_song_list():
|
||||||
|
"""
|
||||||
|
Export the song list as a CSV file.
|
||||||
|
:return: Nothing
|
||||||
|
"""
|
||||||
|
main_window = Registry().get('main_window')
|
||||||
|
plugin = Registry().get('songs').plugin
|
||||||
|
report_file_name, filter_used = QtWidgets.QFileDialog.getSaveFileName(
|
||||||
|
main_window,
|
||||||
|
translate('SongPlugin.ReportSongList', 'Save File'),
|
||||||
|
translate('SongPlugin.ReportSongList', 'song_extract.csv'),
|
||||||
|
translate('SongPlugin.ReportSongList', 'CSV format (*.csv)'))
|
||||||
|
|
||||||
|
if not report_file_name:
|
||||||
|
main_window.error_message(
|
||||||
|
translate('SongPlugin.ReportSongList', 'Output Path Not Selected'),
|
||||||
|
translate('SongPlugin.ReportSongList', 'You have not set a valid output location for your '
|
||||||
|
'report. \nPlease select an existing path '
|
||||||
|
'on your computer.')
|
||||||
|
)
|
||||||
|
return
|
||||||
|
if not report_file_name.endswith('csv'):
|
||||||
|
report_file_name += '.csv'
|
||||||
|
file_handle = None
|
||||||
|
Registry().get('application').set_busy_cursor()
|
||||||
|
try:
|
||||||
|
file_handle = open(report_file_name, 'wt')
|
||||||
|
fieldnames = ('Title', 'Alternative Title', 'Copyright', 'Author(s)', 'Song Book', 'Topic')
|
||||||
|
writer = csv.DictWriter(file_handle, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
|
||||||
|
headers = dict((n, n) for n in fieldnames)
|
||||||
|
writer.writerow(headers)
|
||||||
|
song_list = plugin.manager.get_all_objects(Song)
|
||||||
|
for song in song_list:
|
||||||
|
author_list = []
|
||||||
|
for author_song in song.authors_songs:
|
||||||
|
author_list.append(author_song.author.display_name)
|
||||||
|
author_string = ' | '.join(author_list)
|
||||||
|
book_list = []
|
||||||
|
for book_song in song.songbook_entries:
|
||||||
|
if hasattr(book_song, 'entry') and book_song.entry:
|
||||||
|
book_list.append('{name} #{entry}'.format(name=book_song.songbook.name, entry=book_song.entry))
|
||||||
|
book_string = ' | '.join(book_list)
|
||||||
|
topic_list = []
|
||||||
|
for topic_song in song.topics:
|
||||||
|
if hasattr(topic_song, 'name'):
|
||||||
|
topic_list.append(topic_song.name)
|
||||||
|
topic_string = ' | '.join(topic_list)
|
||||||
|
writer.writerow({'Title': song.title,
|
||||||
|
'Alternative Title': song.alternate_title,
|
||||||
|
'Copyright': song.copyright,
|
||||||
|
'Author(s)': author_string,
|
||||||
|
'Song Book': book_string,
|
||||||
|
'Topic': topic_string})
|
||||||
|
Registry().get('application').set_normal_cursor()
|
||||||
|
main_window.information_message(
|
||||||
|
translate('SongPlugin.ReportSongList', 'Report Creation'),
|
||||||
|
translate('SongPlugin.ReportSongList',
|
||||||
|
'Report \n{name} \nhas been successfully created. ').format(name=report_file_name)
|
||||||
|
)
|
||||||
|
except OSError as ose:
|
||||||
|
Registry().get('application').set_normal_cursor()
|
||||||
|
log.exception('Failed to write out song usage records')
|
||||||
|
critical_error_message_box(translate('SongPlugin.ReportSongList', 'Song Extraction Failed'),
|
||||||
|
translate('SongPlugin.ReportSongList',
|
||||||
|
'An error occurred while extracting: {error}'
|
||||||
|
).format(error=ose.strerror))
|
||||||
|
finally:
|
||||||
|
if file_handle:
|
||||||
|
file_handle.close()
|
@ -36,6 +36,7 @@ from openlp.core.common.actions import ActionList
|
|||||||
from openlp.core.lib import Plugin, StringContent, build_icon
|
from openlp.core.lib import Plugin, StringContent, build_icon
|
||||||
from openlp.core.lib.db import Manager
|
from openlp.core.lib.db import Manager
|
||||||
from openlp.core.lib.ui import create_action
|
from openlp.core.lib.ui import create_action
|
||||||
|
from openlp.plugins.songs import reporting
|
||||||
from openlp.plugins.songs.forms.duplicatesongremovalform import DuplicateSongRemovalForm
|
from openlp.plugins.songs.forms.duplicatesongremovalform import DuplicateSongRemovalForm
|
||||||
from openlp.plugins.songs.forms.songselectform import SongSelectForm
|
from openlp.plugins.songs.forms.songselectform import SongSelectForm
|
||||||
from openlp.plugins.songs.lib import clean_song, upgrade
|
from openlp.plugins.songs.lib import clean_song, upgrade
|
||||||
@ -105,13 +106,13 @@ class SongsPlugin(Plugin):
|
|||||||
self.songselect_form.initialise()
|
self.songselect_form.initialise()
|
||||||
self.song_import_item.setVisible(True)
|
self.song_import_item.setVisible(True)
|
||||||
self.song_export_item.setVisible(True)
|
self.song_export_item.setVisible(True)
|
||||||
self.tools_reindex_item.setVisible(True)
|
self.song_tools_menu.menuAction().setVisible(True)
|
||||||
self.tools_find_duplicates.setVisible(True)
|
|
||||||
action_list = ActionList.get_instance()
|
action_list = ActionList.get_instance()
|
||||||
action_list.add_action(self.song_import_item, UiStrings().Import)
|
action_list.add_action(self.song_import_item, UiStrings().Import)
|
||||||
action_list.add_action(self.song_export_item, UiStrings().Export)
|
action_list.add_action(self.song_export_item, UiStrings().Export)
|
||||||
action_list.add_action(self.tools_reindex_item, UiStrings().Tools)
|
action_list.add_action(self.tools_reindex_item, UiStrings().Tools)
|
||||||
action_list.add_action(self.tools_find_duplicates, UiStrings().Tools)
|
action_list.add_action(self.tools_find_duplicates, UiStrings().Tools)
|
||||||
|
action_list.add_action(self.tools_report_song_list, UiStrings().Tools)
|
||||||
|
|
||||||
def add_import_menu_item(self, import_menu):
|
def add_import_menu_item(self, import_menu):
|
||||||
"""
|
"""
|
||||||
@ -154,19 +155,37 @@ class SongsPlugin(Plugin):
|
|||||||
:param tools_menu: The actual **Tools** menu item, so that your actions can use it as their parent.
|
:param tools_menu: The actual **Tools** menu item, so that your actions can use it as their parent.
|
||||||
"""
|
"""
|
||||||
log.info('add tools menu')
|
log.info('add tools menu')
|
||||||
|
self.tools_menu = tools_menu
|
||||||
|
self.song_tools_menu = QtWidgets.QMenu(tools_menu)
|
||||||
|
self.song_tools_menu.setObjectName('song_tools_menu')
|
||||||
|
self.song_tools_menu.setTitle(translate('SongsPlugin', 'Songs'))
|
||||||
self.tools_reindex_item = create_action(
|
self.tools_reindex_item = create_action(
|
||||||
tools_menu, 'toolsReindexItem',
|
tools_menu, 'toolsReindexItem',
|
||||||
text=translate('SongsPlugin', '&Re-index Songs'),
|
text=translate('SongsPlugin', '&Re-index Songs'),
|
||||||
icon=':/plugins/plugin_songs.png',
|
icon=':/plugins/plugin_songs.png',
|
||||||
statustip=translate('SongsPlugin', 'Re-index the songs database to improve searching and ordering.'),
|
statustip=translate('SongsPlugin', 'Re-index the songs database to improve searching and ordering.'),
|
||||||
visible=False, triggers=self.on_tools_reindex_item_triggered)
|
triggers=self.on_tools_reindex_item_triggered)
|
||||||
tools_menu.addAction(self.tools_reindex_item)
|
|
||||||
self.tools_find_duplicates = create_action(
|
self.tools_find_duplicates = create_action(
|
||||||
tools_menu, 'toolsFindDuplicates',
|
tools_menu, 'toolsFindDuplicates',
|
||||||
text=translate('SongsPlugin', 'Find &Duplicate Songs'),
|
text=translate('SongsPlugin', 'Find &Duplicate Songs'),
|
||||||
statustip=translate('SongsPlugin', 'Find and remove duplicate songs in the song database.'),
|
statustip=translate('SongsPlugin', 'Find and remove duplicate songs in the song database.'),
|
||||||
visible=False, triggers=self.on_tools_find_duplicates_triggered, can_shortcuts=True)
|
triggers=self.on_tools_find_duplicates_triggered, can_shortcuts=True)
|
||||||
tools_menu.addAction(self.tools_find_duplicates)
|
self.tools_report_song_list = create_action(
|
||||||
|
tools_menu, 'toolsSongListReport',
|
||||||
|
text=translate('SongsPlugin', 'Song List Report'),
|
||||||
|
statustip=translate('SongsPlugin', 'Produce a CSV file of all the songs in the database.'),
|
||||||
|
triggers=self.on_tools_report_song_list_triggered)
|
||||||
|
|
||||||
|
self.tools_menu.addAction(self.song_tools_menu.menuAction())
|
||||||
|
self.song_tools_menu.addAction(self.tools_reindex_item)
|
||||||
|
self.song_tools_menu.addAction(self.tools_find_duplicates)
|
||||||
|
self.song_tools_menu.addAction(self.tools_report_song_list)
|
||||||
|
|
||||||
|
self.song_tools_menu.menuAction().setVisible(False)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def on_tools_report_song_list_triggered():
|
||||||
|
reporting.report_song_list()
|
||||||
|
|
||||||
def on_tools_reindex_item_triggered(self):
|
def on_tools_reindex_item_triggered(self):
|
||||||
"""
|
"""
|
||||||
@ -329,13 +348,13 @@ class SongsPlugin(Plugin):
|
|||||||
self.manager.finalise()
|
self.manager.finalise()
|
||||||
self.song_import_item.setVisible(False)
|
self.song_import_item.setVisible(False)
|
||||||
self.song_export_item.setVisible(False)
|
self.song_export_item.setVisible(False)
|
||||||
self.tools_reindex_item.setVisible(False)
|
|
||||||
self.tools_find_duplicates.setVisible(False)
|
|
||||||
action_list = ActionList.get_instance()
|
action_list = ActionList.get_instance()
|
||||||
action_list.remove_action(self.song_import_item, UiStrings().Import)
|
action_list.remove_action(self.song_import_item, UiStrings().Import)
|
||||||
action_list.remove_action(self.song_export_item, UiStrings().Export)
|
action_list.remove_action(self.song_export_item, UiStrings().Export)
|
||||||
action_list.remove_action(self.tools_reindex_item, UiStrings().Tools)
|
action_list.remove_action(self.tools_reindex_item, UiStrings().Tools)
|
||||||
action_list.remove_action(self.tools_find_duplicates, UiStrings().Tools)
|
action_list.remove_action(self.tools_find_duplicates, UiStrings().Tools)
|
||||||
|
action_list.add_action(self.tools_report_song_list, UiStrings().Tools)
|
||||||
|
self.song_tools_menu.menuAction().setVisible(False)
|
||||||
super(SongsPlugin, self).finalise()
|
super(SongsPlugin, self).finalise()
|
||||||
|
|
||||||
def new_service_created(self):
|
def new_service_created(self):
|
||||||
|
@ -38,7 +38,7 @@ class Ui_SongUsageDeleteDialog(object):
|
|||||||
:param song_usage_delete_dialog:
|
:param song_usage_delete_dialog:
|
||||||
"""
|
"""
|
||||||
song_usage_delete_dialog.setObjectName('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)
|
song_usage_delete_dialog.resize(291, 243)
|
||||||
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_delete_dialog)
|
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_delete_dialog)
|
||||||
self.vertical_layout.setSpacing(8)
|
self.vertical_layout.setSpacing(8)
|
||||||
|
@ -38,7 +38,7 @@ class Ui_SongUsageDetailDialog(object):
|
|||||||
:param song_usage_detail_dialog:
|
:param song_usage_detail_dialog:
|
||||||
"""
|
"""
|
||||||
song_usage_detail_dialog.setObjectName('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)
|
song_usage_detail_dialog.resize(609, 413)
|
||||||
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_detail_dialog)
|
self.vertical_layout = QtWidgets.QVBoxLayout(song_usage_detail_dialog)
|
||||||
self.vertical_layout.setSpacing(8)
|
self.vertical_layout.setSpacing(8)
|
||||||
|
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 802 B |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 720 B |
Before Width: | Height: | Size: 762 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 668 B |
Before Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 644 B |
Before Width: | Height: | Size: 187 KiB |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 531 B |
Before Width: | Height: | Size: 531 B |
Before Width: | Height: | Size: 862 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 784 B |
Before Width: | Height: | Size: 740 B |
Before Width: | Height: | Size: 795 B |
Before Width: | Height: | Size: 762 B |
@ -23,8 +23,7 @@
|
|||||||
<file>topic_maintenance.png</file>
|
<file>topic_maintenance.png</file>
|
||||||
<file>song_author_edit.png</file>
|
<file>song_author_edit.png</file>
|
||||||
<file>song_book_edit.png</file>
|
<file>song_book_edit.png</file>
|
||||||
<file>song_delete.png</file>
|
</qresource>
|
||||||
</qresource>
|
|
||||||
<qresource prefix="images">
|
<qresource prefix="images">
|
||||||
<file>image_group.png</file>
|
<file>image_group.png</file>
|
||||||
<file>image_new_group.png</file>
|
<file>image_new_group.png</file>
|
||||||
@ -33,7 +32,6 @@
|
|||||||
<file>bibles_search_combined.png</file>
|
<file>bibles_search_combined.png</file>
|
||||||
<file>bibles_search_text.png</file>
|
<file>bibles_search_text.png</file>
|
||||||
<file>bibles_search_reference.png</file>
|
<file>bibles_search_reference.png</file>
|
||||||
<file>bibles_upgrade_alert.png</file>
|
|
||||||
<file>bibles_search_clear.png</file>
|
<file>bibles_search_clear.png</file>
|
||||||
<file>bibles_search_unlock.png</file>
|
<file>bibles_search_unlock.png</file>
|
||||||
<file>bibles_search_lock.png</file>
|
<file>bibles_search_lock.png</file>
|
||||||
@ -71,7 +69,6 @@
|
|||||||
<file>general_back.png</file>
|
<file>general_back.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="slides">
|
<qresource prefix="slides">
|
||||||
<file>slide_close.png</file>
|
|
||||||
<file>slide_next.png</file>
|
<file>slide_next.png</file>
|
||||||
<file>slide_blank.png</file>
|
<file>slide_blank.png</file>
|
||||||
<file>slide_desktop.png</file>
|
<file>slide_desktop.png</file>
|
||||||
@ -83,12 +80,6 @@
|
|||||||
<file>media_playback_next.png</file>
|
<file>media_playback_next.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="icon">
|
<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>
|
<file>openlp-logo.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="graphics">
|
<qresource prefix="graphics">
|
||||||
@ -97,24 +88,18 @@
|
|||||||
<file>openlp-about-logo.png</file>
|
<file>openlp-about-logo.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="imports">
|
<qresource prefix="imports">
|
||||||
<file>import_selectall.png</file>
|
</qresource>
|
||||||
<file>import_move_to_list.png</file>
|
|
||||||
<file>import_remove.png</file>
|
|
||||||
<file>import_load.png</file>
|
|
||||||
</qresource>
|
|
||||||
<qresource prefix="exports">
|
<qresource prefix="exports">
|
||||||
<file>export_load.png</file>
|
<file>export_load.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="wizards">
|
<qresource prefix="wizards">
|
||||||
<file>openlp-osx-wizard.png</file>
|
<file>openlp-osx-wizard.png</file>
|
||||||
<file>wizard_exportsong.bmp</file>
|
<file>wizard_song.bmp</file>
|
||||||
<file>wizard_importsong.bmp</file>
|
|
||||||
<file>wizard_importbible.bmp</file>
|
<file>wizard_importbible.bmp</file>
|
||||||
<file>wizard_firsttime.bmp</file>
|
<file>wizard_firsttime.bmp</file>
|
||||||
<file>wizard_createtheme.bmp</file>
|
<file>wizard_createtheme.bmp</file>
|
||||||
<file>wizard_duplicateremoval.bmp</file>
|
<file>wizard_duplicateremoval.bmp</file>
|
||||||
<file>wizard_createprojector.png</file>
|
</qresource>
|
||||||
</qresource>
|
|
||||||
<qresource prefix="services">
|
<qresource prefix="services">
|
||||||
<file>service_collapse_all.png</file>
|
<file>service_collapse_all.png</file>
|
||||||
<file>service_expand_all.png</file>
|
<file>service_expand_all.png</file>
|
||||||
@ -130,7 +115,6 @@
|
|||||||
<file>clear_shortcut.png</file>
|
<file>clear_shortcut.png</file>
|
||||||
<file>system_about.png</file>
|
<file>system_about.png</file>
|
||||||
<file>system_help_contents.png</file>
|
<file>system_help_contents.png</file>
|
||||||
<file>system_online_help.png</file>
|
|
||||||
<file>system_mediamanager.png</file>
|
<file>system_mediamanager.png</file>
|
||||||
<file>system_volunteer.png</file>
|
<file>system_volunteer.png</file>
|
||||||
<file>system_servicemanager.png</file>
|
<file>system_servicemanager.png</file>
|
||||||
@ -156,10 +140,7 @@
|
|||||||
<file>multimedia-player.png</file>
|
<file>multimedia-player.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="messagebox">
|
<qresource prefix="messagebox">
|
||||||
<file>messagebox_critical.png</file>
|
</qresource>
|
||||||
<file>messagebox_info.png</file>
|
|
||||||
<file>messagebox_warning.png</file>
|
|
||||||
</qresource>
|
|
||||||
<qresource prefix="remote">
|
<qresource prefix="remote">
|
||||||
<file>network_server.png</file>
|
<file>network_server.png</file>
|
||||||
<file>network_ssl.png</file>
|
<file>network_ssl.png</file>
|
||||||
@ -171,10 +152,8 @@
|
|||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="tools">
|
<qresource prefix="tools">
|
||||||
<file>tools_add.png</file>
|
<file>tools_add.png</file>
|
||||||
<file>tools_alert.png</file>
|
</qresource>
|
||||||
</qresource>
|
|
||||||
<qresource prefix="themes">
|
<qresource prefix="themes">
|
||||||
<file>theme_delete.png</file>
|
|
||||||
<file>theme_new.png</file>
|
<file>theme_new.png</file>
|
||||||
<file>theme_edit.png</file>
|
<file>theme_edit.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
@ -202,12 +181,10 @@
|
|||||||
<file>projector_power_on_tiled.png</file>
|
<file>projector_power_on_tiled.png</file>
|
||||||
<file>projector_show.png</file>
|
<file>projector_show.png</file>
|
||||||
<file>projector_show_tiled.png</file>
|
<file>projector_show_tiled.png</file>
|
||||||
<file>projector_spacer.png</file>
|
|
||||||
<file>projector_warmup.png</file>
|
<file>projector_warmup.png</file>
|
||||||
<file>projector_view.png</file>
|
</qresource>
|
||||||
</qresource>
|
|
||||||
<qresource prefix="remotes">
|
<qresource prefix="remotes">
|
||||||
<file>android_app_qr.png</file>
|
<file>android_app_qr.png</file>
|
||||||
<file>ios_app_qr.png</file>
|
<file>ios_app_qr.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
@ -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 |
@ -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 |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 69 KiB |
@ -1,6 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
@ -8,263 +6,80 @@
|
|||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
style="display:inline"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="467.39178"
|
|
||||||
height="467.39178"
|
|
||||||
id="svg5740"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.47 r22583"
|
|
||||||
version="1.0"
|
version="1.0"
|
||||||
sodipodi:docname="openlp-logo.svg"
|
id="svg5740"
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
height="467.39178"
|
||||||
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
|
width="467.39178">
|
||||||
inkscape:export-xdpi="91.860847"
|
|
||||||
inkscape:export-ydpi="91.860847"
|
|
||||||
style="display:inline">
|
|
||||||
<defs
|
<defs
|
||||||
id="defs5742">
|
id="defs5742">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
id="linearGradient3208">
|
id="linearGradient3208">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#ffffff;stop-opacity:0.25098041;"
|
id="stop3210"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop3210" />
|
style="stop-color:#ffffff;stop-opacity:0.25098041;" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#ffffff;stop-opacity:0;"
|
id="stop3212"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop3212" />
|
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
id="linearGradient3195">
|
id="linearGradient3195">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#cdcdff;stop-opacity:1;"
|
id="stop3197"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop3197" />
|
style="stop-color:#cdcdff;stop-opacity:1;" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#ebebff;stop-opacity:1;"
|
id="stop3199"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop3199" />
|
style="stop-color:#ebebff;stop-opacity:1;" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
id="linearGradient6359">
|
id="linearGradient6359">
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#000d26;stop-opacity:1;"
|
id="stop6361"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop6361" />
|
style="stop-color:#000d26;stop-opacity:1;" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#507fda;stop-opacity:1;"
|
id="stop6363"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop6363" />
|
style="stop-color:#507fda;stop-opacity:1;" />
|
||||||
</linearGradient>
|
</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
|
<filter
|
||||||
inkscape:collect="always"
|
color-interpolation-filters="sRGB"
|
||||||
id="filter6926"
|
id="filter6926">
|
||||||
color-interpolation-filters="sRGB">
|
|
||||||
<feGaussianBlur
|
<feGaussianBlur
|
||||||
inkscape:collect="always"
|
id="feGaussianBlur6928"
|
||||||
stdDeviation="3.5771872"
|
stdDeviation="3.5771872" />
|
||||||
id="feGaussianBlur6928" />
|
|
||||||
</filter>
|
</filter>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
y2="436.03787"
|
||||||
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"
|
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"
|
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"
|
x1="117.59262"
|
||||||
y1="384.05795"
|
|
||||||
x2="418.20981"
|
|
||||||
y2="436.03787" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient6359"
|
|
||||||
id="linearGradient4049"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
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"
|
id="linearGradient4053"
|
||||||
gradientUnits="userSpaceOnUse"
|
xlink:href="#linearGradient3195" />
|
||||||
x1="117.59262"
|
|
||||||
y1="384.05795"
|
|
||||||
x2="418.20981"
|
|
||||||
y2="436.03787" />
|
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
y2="371.85938"
|
||||||
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"
|
x2="201.10622"
|
||||||
y2="371.85938" />
|
y1="480.55844"
|
||||||
<linearGradient
|
x1="815.75"
|
||||||
inkscape:collect="always"
|
gradientTransform="matrix(0.6515729,0,0,0.6515729,-72.086668,-5.3154816)"
|
||||||
xlink:href="#linearGradient3208"
|
|
||||||
id="linearGradient4057"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
|
id="linearGradient4055"
|
||||||
x1="470.25891"
|
xlink:href="#linearGradient6359" />
|
||||||
y1="276.68851"
|
<linearGradient
|
||||||
|
y2="104.30029"
|
||||||
x2="469.44925"
|
x2="469.44925"
|
||||||
y2="104.30029" />
|
y1="276.68851"
|
||||||
|
x1="470.25891"
|
||||||
|
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient4057"
|
||||||
|
xlink:href="#linearGradient3208" />
|
||||||
</defs>
|
</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.0119683"
|
|
||||||
inkscape:cx="501.72348"
|
|
||||||
inkscape:cy="187.6618"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer6"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1600"
|
|
||||||
inkscape:window-height="839"
|
|
||||||
inkscape:window-x="1022"
|
|
||||||
inkscape:window-y="-3"
|
|
||||||
inkscape:window-maximized="1" />
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5745">
|
id="metadata5745">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@ -273,92 +88,56 @@
|
|||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
inkscape:label="Shadow"
|
transform="translate(-11.872025,-13.171852)"
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
transform="translate(-11.872025,-13.171852)" />
|
id="layer1" />
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
transform="translate(-11.872025,-13.171852)"
|
||||||
id="layer5"
|
|
||||||
inkscape:label="Border"
|
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
transform="translate(-11.872025,-13.171852)" />
|
id="layer5" />
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
transform="translate(-11.872025,-13.171852)"
|
||||||
id="layer3"
|
|
||||||
inkscape:label="Rays Background"
|
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
transform="translate(-11.872025,-13.171852)" />
|
id="layer3" />
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
transform="translate(-11.872025,-13.171852)"
|
||||||
id="layer2"
|
|
||||||
inkscape:label="Rays Foreground"
|
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
transform="translate(-11.872025,-13.171852)" />
|
id="layer2" />
|
||||||
<g
|
<g
|
||||||
inkscape:groupmode="layer"
|
transform="translate(-11.872025,-13.171852)"
|
||||||
id="layer6"
|
|
||||||
inkscape:label="Reflection"
|
|
||||||
style="display:inline"
|
style="display:inline"
|
||||||
transform="translate(-11.872025,-13.171852)">
|
id="layer6">
|
||||||
<g
|
<g
|
||||||
id="g4018"
|
transform="translate(9.8817328,9.8817328)"
|
||||||
transform="translate(9.8817328,9.8817328)">
|
id="g4018">
|
||||||
<path
|
<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)"
|
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;filter:url(#filter6926)"
|
||||||
sodipodi:type="arc" />
|
id="path6903"
|
||||||
<path
|
d="M 833.03006,395.26932 A 357.71872,357.71872 0 0 1 475.31134,752.98804 357.71872,357.71872 0 0 1 117.59262,395.26932 357.71872,357.71872 0 0 1 475.31134,37.550598 357.71872,357.71872 0 0 1 833.03006,395.26932 Z"
|
||||||
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)" />
|
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)" />
|
||||||
<path
|
<path
|
||||||
inkscape:export-ydpi="90"
|
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)"
|
||||||
inkscape:export-xdpi="90"
|
d="M 833.03006,395.26932 A 357.71872,357.71872 0 0 1 475.31134,752.98804 357.71872,357.71872 0 0 1 117.59262,395.26932 357.71872,357.71872 0 0 1 475.31134,37.550598 357.71872,357.71872 0 0 1 833.03006,395.26932 Z"
|
||||||
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
|
id="path6900"
|
||||||
transform="matrix(0.6317287,0,0,0.6317287,-64.581662,-12.716988)"
|
style="fill:#051e52;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
|
||||||
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"
|
<path
|
||||||
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"
|
style="fill:url(#linearGradient4053);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
|
||||||
sodipodi:type="arc" />
|
id="path6317"
|
||||||
|
d="M 833.03006,395.26932 A 357.71872,357.71872 0 0 1 475.31134,752.98804 357.71872,357.71872 0 0 1 117.59262,395.26932 357.71872,357.71872 0 0 1 475.31134,37.550598 357.71872,357.71872 0 0 1 833.03006,395.26932 Z"
|
||||||
|
transform="matrix(0.6317287,0,0,0.6317287,-64.581662,-12.716988)" />
|
||||||
<path
|
<path
|
||||||
inkscape:export-ydpi="90"
|
style="fill:url(#linearGradient4055);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
|
||||||
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"
|
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" />
|
id="path6327" />
|
||||||
<path
|
<path
|
||||||
id="path3203"
|
style="fill:url(#linearGradient4057);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
|
||||||
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"
|
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" />
|
id="path3203" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 6.4 KiB |
@ -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 |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 531 B |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 170 B |
Before Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 726 B |
Before Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 531 B |
Before Width: | Height: | Size: 563 B |