Got the song wizard working. Pity none of the importers seems to work at the moment.

This commit is contained in:
Raoul Snyman 2010-08-22 21:50:30 +02:00
commit 530530d791
12 changed files with 1038 additions and 668 deletions

View File

@ -47,7 +47,6 @@ QMainWindow::separator
QDockWidget::title
{
/*background: palette(dark);*/
border: 1px solid palette(dark);
padding-left: 5px;
padding-top: 2px;

View File

@ -1 +1 @@
1.9.2
1.9.2-bzr987

View File

@ -59,10 +59,10 @@ class BibleMediaItem(MediaManagerItem):
self.pluginNameVisible = translate('BiblesPlugin.MediaItem', 'Bible')
self.IconPath = u'songs/song'
self.ListViewWithDnD_class = BibleListView
self.lastReference = []
MediaManagerItem.__init__(self, parent, icon, title)
# place to store the search results
# place to store the search results for both bibles
self.search_results = {}
self.dual_search_results = {}
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'bibles_load_list'), self.reloadBibles)
@ -344,7 +344,7 @@ class BibleMediaItem(MediaManagerItem):
self.QuickMessage.setText(text)
self.AdvancedMessage.setText(text)
Receiver.send_message(u'openlp_process_events')
#minor delay to get the events processed
# minor delay to get the events processed
time.sleep(0.1)
def loadBibles(self):
@ -387,7 +387,7 @@ class BibleMediaItem(MediaManagerItem):
QtGui.QMessageBox.critical(self,
translate('BiblesPlugin.MediaItem', 'No Book Found'),
translate('BiblesPlugin.MediaItem',
'No matching book could be found in this Bible.'))
'No matching book could be found in this Bible.'))
def onAdvancedVersionComboBox(self):
self.initialiseBible(
@ -401,9 +401,10 @@ class BibleMediaItem(MediaManagerItem):
self.AdvancedBookComboBox.itemData(item).toInt()[0])
def onImportClick(self):
self.bibleimportform = ImportWizardForm(self,
self.parent.manager, self.parent)
self.bibleimportform.exec_()
if not hasattr(self, u'import_wizard'):
self.import_wizard = ImportWizardForm(self, self.parent.manager,
self.parent)
self.import_wizard.exec_()
self.reloadBibles()
def onAdvancedFromVerse(self):
@ -423,6 +424,7 @@ class BibleMediaItem(MediaManagerItem):
def onAdvancedSearchButton(self):
log.debug(u'Advanced Search Button pressed')
bible = unicode(self.AdvancedVersionComboBox.currentText())
dual_bible = unicode(self.AdvancedSecondBibleComboBox.currentText())
book = unicode(self.AdvancedBookComboBox.currentText())
chapter_from = int(self.AdvancedFromChapter.currentText())
chapter_to = int(self.AdvancedToChapter.currentText())
@ -431,11 +433,12 @@ class BibleMediaItem(MediaManagerItem):
versetext = u'%s %s:%s-%s:%s' % (book, chapter_from, verse_from,
chapter_to, verse_to)
self.search_results = self.parent.manager.get_verses(bible, versetext)
if dual_bible:
self.dual_search_results = self.parent.manager.get_verses(
dual_bible, versetext)
if self.ClearAdvancedSearchComboBox.currentIndex() == 0:
self.listView.clear()
self.lastReference = []
self.lastReference.append(versetext)
self.displayResults(bible)
self.displayResults(bible, dual_bible)
def onAdvancedFromChapter(self):
bible = unicode(self.AdvancedVersionComboBox.currentText())
@ -450,70 +453,55 @@ class BibleMediaItem(MediaManagerItem):
def onQuickSearchButton(self):
log.debug(u'Quick Search Button pressed')
bible = unicode(self.QuickVersionComboBox.currentText())
dual_bible = unicode(self.QuickSecondBibleComboBox.currentText())
text = unicode(self.QuickSearchEdit.text())
if self.ClearQuickSearchComboBox.currentIndex() == 0:
self.listView.clear()
self.lastReference = []
self.lastReference.append(text)
self.search_results = self.parent.manager.get_verses(bible, text)
if dual_bible:
self.dual_search_results = self.parent.manager.get_verses(
dual_bible, text)
if self.search_results:
self.displayResults(bible)
self.displayResults(bible, dual_bible)
def generateSlideData(self, service_item, item=None):
'''
Generates and formats the slides for the service item.
'''
log.debug(u'generating slide data')
items = self.listView.selectedIndexes()
if len(items) == 0:
return False
old_chapter = u''
raw_slides = []
raw_footer = []
bible_text = u''
old_chapter = u''
raw_footer = []
raw_slides = []
service_item.add_capability(ItemCapabilities.AllowsPreview)
service_item.add_capability(ItemCapabilities.AllowsLoop)
service_item.add_capability(ItemCapabilities.AllowsAdditions)
#If we want to use a 2nd translation / version
bible2 = u''
if self.SearchTabWidget.currentIndex() == 0:
bible2 = unicode(self.QuickSecondBibleComboBox.currentText())
else:
bible2 = unicode(self.AdvancedSecondBibleComboBox.currentText())
if bible2:
bible2_verses = []
for scripture in self.lastReference:
bible2_verses.extend(self.parent.manager.get_verses(bible2,
scripture))
bible2_version = self.parent.manager.get_meta_data(bible2,
u'Version')
bible2_copyright = self.parent.manager.get_meta_data(bible2,
u'Copyright')
bible2_permission = self.parent.manager.get_meta_data(bible2,
u'Permissions')
if bible2_version:
bible2_version = bible2_version.value
else:
bible2_version = u''
if bible2_copyright:
bible2_copyright = bible2_copyright.value
else:
bible2_copyright = u''
if bible2_permission:
bible2_permission = bible2_permission.value
else:
bible2_permission = u''
# Let's loop through the main lot, and assemble our verses
# Let's loop through the main lot, and assemble our verses.
for item in items:
bitem = self.listView.item(item.row())
reference = bitem.data(QtCore.Qt.UserRole)
if isinstance(reference, QtCore.QVariant):
reference = reference.toPyObject()
#bible = self._decodeQtObject(reference, 'bible')
book = self._decodeQtObject(reference, 'book')
chapter = self._decodeQtObject(reference, 'chapter')
verse = self._decodeQtObject(reference, 'verse')
text = self._decodeQtObject(reference, 'text')
bible = self._decodeQtObject(reference, 'bible')
version = self._decodeQtObject(reference, 'version')
copyright = self._decodeQtObject(reference, 'copyright')
#permission = self._decodeQtObject(reference, 'permission')
text = self._decodeQtObject(reference, 'text')
dual_bible = self._decodeQtObject(reference, 'dual_bible')
if dual_bible:
dual_version = self._decodeQtObject(reference,
'dual_version')
dual_copyright = self._decodeQtObject(reference,
'dual_copyright')
#dual_permission = self._decodeQtObject(reference,
# 'dual_permission')
dual_text = self._decodeQtObject(reference, 'dual_text')
if self.parent.settings_tab.display_style == 1:
verse_text = self.formatVerse(old_chapter, chapter, verse,
u'(', u')')
@ -528,46 +516,68 @@ class BibleMediaItem(MediaManagerItem):
u'', u'')
old_chapter = chapter
footer = u'%s (%s %s)' % (book, version, copyright)
#If not found add to footer
# If not found add to footer
if footer not in raw_footer:
raw_footer.append(footer)
if bible2:
footer = u'%s (%s %s)' % (book, bible2_version,
bible2_copyright)
#If not found add second version and copyright to footer
if dual_bible:
footer = u'%s (%s %s)' % (book, dual_version,
dual_copyright)
# If not found add second version and copyright to footer.
if footer not in raw_footer:
raw_footer.append(footer)
bible_text = u'%s %s \n\n %s %s' % (verse_text, text,
verse_text, bible2_verses[item.row()].text)
verse_text, dual_text)
raw_slides.append(bible_text)
bible_text = u''
else:
#Paragraph style force new line per verse
# If we are 'Verse Per Line' then force a new line.
if self.parent.settings_tab.layout_style == 1:
text = text + u'\n\n'
bible_text = u'%s %s %s' % (bible_text, verse_text, text)
#if we are verse per slide then create slide
# If we are 'Verse Per Slide' then create a new slide.
if self.parent.settings_tab.layout_style == 0:
raw_slides.append(bible_text)
bible_text = u''
if not service_item.title:
service_item.title = u'%s %s' % (book, verse_text)
elif service_item.title.find(
translate('BiblesPlugin.MediaItem', 'etc')) == -1:
service_item.title = u'%s, %s' % (service_item.title,
translate('BiblesPlugin.MediaItem', 'etc'))
# If we are not 'Verse Per Slide' we have to make sure, that we
# add more verses.
else:
if item.row() < len(items) - 1:
bitem = items[item.row() + 1]
reference = bitem.data(QtCore.Qt.UserRole)
if isinstance(reference, QtCore.QVariant):
reference = reference.toPyObject()
bible_new = self._decodeQtObject(reference, 'bible')
dual_bible_new = self._decodeQtObject(reference, 'dual_bible')
if dual_bible_new:
raw_slides.append(bible_text)
bible_text = u''
elif bible != bible_new:
raw_slides.append(bible_text)
bible_text = u''
else:
raw_slides.append(bible_text)
bible_text = u''
# service item title
if not service_item.title:
if dual_bible:
service_item.title = u'%s (%s, %s) %s' % (book, version,
dual_version, verse_text)
else:
service_item.title = u'%s (%s) %s' % (book, version, verse_text)
elif service_item.title.find(
translate('BiblesPlugin.MediaItem', 'etc')) == -1:
service_item.title = u'%s, %s' % (service_item.title,
translate('BiblesPlugin.MediaItem', 'etc'))
# item theme
if len(self.parent.settings_tab.bible_theme) == 0:
service_item.theme = None
else:
service_item.theme = self.parent.settings_tab.bible_theme
#if we are verse per slide we have already been added
if self.parent.settings_tab.layout_style != 0 and not bible2:
raw_slides.append(bible_text)
for slide in raw_slides:
service_item.add_from_text(slide[:30], slide)
if service_item.raw_footer:
for foot in raw_footer:
service_item.raw_footer.append(foot)
for footer in raw_footer:
service_item.raw_footer.append(footer)
else:
service_item.raw_footer = raw_footer
return True
@ -599,8 +609,8 @@ class BibleMediaItem(MediaManagerItem):
row, QtCore.QVariant(book[u'chapters']))
if first:
first = False
self.initialiseChapterVerse(
bible, book[u'name'], book[u'chapters'])
self.initialiseChapterVerse(bible, book[u'name'],
book[u'chapters'])
def initialiseChapterVerse(self, bible, book, chapters):
log.debug(u'initialiseChapterVerse %s, %s', bible, book)
@ -624,32 +634,69 @@ class BibleMediaItem(MediaManagerItem):
for i in range(int(range_from), int(range_to) + 1):
combo.addItem(unicode(i))
def displayResults(self, bible):
def displayResults(self, bible, dual_bible=None):
'''
Displays the search results in the media manager. All data needed for further
action is saved for/in each row.
'''
version = self.parent.manager.get_meta_data(bible, u'Version')
copyright = self.parent.manager.get_meta_data(bible, u'Copyright')
permission = self.parent.manager.get_meta_data(bible, u'Permissions')
if not permission:
permission = u''
else:
permission = permission.value
if dual_bible:
dual_version = self.parent.manager.get_meta_data(dual_bible,
u'Version')
dual_copyright = self.parent.manager.get_meta_data(dual_bible,
u'Copyright')
dual_permission = self.parent.manager.get_meta_data(dual_bible,
u'Permissions')
if dual_permission:
dual_permission = dual_permission.value
else:
dual_permission = u''
# We count the number of rows which are maybe already present.
start_count = self.listView.count()
for count, verse in enumerate(self.search_results):
bible_text = u' %s %d:%d (%s)' % \
(verse.book.name, verse.chapter, verse.verse, bible)
if dual_bible:
vdict = {
'book':QtCore.QVariant(verse.book.name),
'chapter':QtCore.QVariant(verse.chapter),
'verse':QtCore.QVariant(verse.verse),
'bible':QtCore.QVariant(bible),
'version':QtCore.QVariant(version.value),
'copyright':QtCore.QVariant(copyright.value),
#'permission':QtCore.QVariant(permission.value),
'text':QtCore.QVariant(verse.text),
'dual_bible':QtCore.QVariant(dual_bible),
'dual_version':QtCore.QVariant(dual_version.value),
'dual_copyright':QtCore.QVariant(dual_copyright.value),
#'dual_permission':QtCore.QVariant(dual_permission),
'dual_text':QtCore.QVariant(
self.dual_search_results[count].text)
}
bible_text = u' %s %d:%d (%s, %s)' % (verse.book.name,
verse.chapter, verse.verse, version.value, dual_version.value)
else:
vdict = {
'book':QtCore.QVariant(verse.book.name),
'chapter':QtCore.QVariant(verse.chapter),
'verse':QtCore.QVariant(verse.verse),
'bible':QtCore.QVariant(bible),
'version':QtCore.QVariant(version.value),
'copyright':QtCore.QVariant(copyright.value),
#'permission':QtCore.QVariant(permission.value),
'text':QtCore.QVariant(verse.text),
'dual_bible':QtCore.QVariant(dual_bible)
}
bible_text = u' %s %d:%d (%s)' % (verse.book.name,
verse.chapter, verse.verse, version.value)
# set the row title
bible_verse = QtGui.QListWidgetItem(bible_text)
#bible_verse.setData(QtCore.Qt.UserRole,
# QtCore.QVariant(bible_text))
vdict = {
'bible': QtCore.QVariant(bible),
'version': QtCore.QVariant(version.value),
'copyright': QtCore.QVariant(copyright.value),
'permission': QtCore.QVariant(permission),
'book': QtCore.QVariant(verse.book.name),
'chapter': QtCore.QVariant(verse.chapter),
'verse': QtCore.QVariant(verse.verse),
'text': QtCore.QVariant(verse.text)
}
bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(vdict))
self.listView.addItem(bible_verse)
row = self.listView.setCurrentRow(count)
row = self.listView.setCurrentRow(count + start_count)
if row:
row.setSelected(True)
self.search_results = {}
self.dual_search_results = {}

View File

@ -32,7 +32,7 @@ from PyQt4 import QtCore, QtGui
from songimportwizard import Ui_SongImportWizard
from openlp.core.lib import Receiver, SettingsManager, translate
#from openlp.core.utils import AppLocation
from openlp.plugins.songs.lib import SongFormat
from openlp.plugins.songs.lib.importer import SongFormat
log = logging.getLogger(__name__)
@ -120,7 +120,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
return True
elif self.currentId() == 1:
# Select page
source_format = self.field(u'source_format').toInt()[0]
source_format = self.formatComboBox.currentIndex()
if source_format == SongFormat.OpenLP2:
if self.openLP2FilenameEdit.text().isEmpty():
QtGui.QMessageBox.critical(self,
@ -171,15 +171,15 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
'file to import from.'))
self.wordsOfWorshipAddButton.setFocus()
return False
elif source_format == SongFormat.CCLI:
if self.CCLIFileListWidget.count() == 0:
elif source_format == SongFormat.ccli:
if self.ccliFileListWidget.count() == 0:
QtGui.QMessageBox.critical(self,
translate('SongsPlugin.ImportWizardForm',
'No CCLI Files Selected'),
translate('SongsPlugin.ImportWizardForm',
'You need to add at least one CCLI file '
'to import from.'))
self.CCLIAddButton.setFocus()
self.ccliAddButton.setFocus()
return False
elif source_format == SongFormat.SongsOfFellowship:
if self.songsOfFellowshipFilenameEdit.text().isEmpty():
@ -224,6 +224,12 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
self.plugin.settingsSection,
os.path.split(unicode(filenames[0]))[0], 1)
def getListOfFiles(self, listbox):
files = []
for row in range(0, listbox.count()):
files.append(unicode(listbox.item(row)))
return files
def removeSelectedItems(self, listbox):
for item in listbox.selectedItems():
item = listbox.takeItem(listbox.row(item))
@ -245,7 +251,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
def onOpenLyricsAddButtonClicked(self):
self.getFiles(
translate('SongsPlugin.ImportWizardForm', 'Select OpenLyrics Files'),
translate('SongsPlugin.ImportWizardForm',
'Select OpenLyrics Files'),
self.openLyricsFileListWidget
)
@ -254,7 +261,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
def onOpenSongAddButtonClicked(self):
self.getFiles(
translate('SongsPlugin.ImportWizardForm', 'Select Open Song Files'),
translate('SongsPlugin.ImportWizardForm',
'Select Open Song Files'),
self.openSongFileListWidget
)
@ -263,7 +271,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
def onWordsOfWorshipAddButtonClicked(self):
self.getFiles(
translate('SongsPlugin.ImportWizardForm', 'Select Words of Worship Files'),
translate('SongsPlugin.ImportWizardForm',
'Select Words of Worship Files'),
self.wordsOfWorshipFileListWidget
)
@ -293,97 +302,96 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
Receiver.send_message(u'openlp_stop_song_import')
def onCurrentIdChanged(self, id):
if id == 3:
if id == 2:
self.preImport()
self.performImport()
self.postImport()
def registerFields(self):
self.SourcePage.registerField(u'source_format', self.FormatComboBox)
pass
def setDefaults(self):
self.setField(u'source_format', QtCore.QVariant(0))
self.formatComboBox.setCurrentIndex(0)
self.openLP2FilenameEdit.setText(u'')
self.openLP1FilenameEdit.setText(u'')
self.openLyricsFileListWidget.clear()
self.openSongFileListWidget.clear()
self.wordsOfWorshipFileListWidget.clear()
self.CCLIFileListWidget.clear()
self.ccliFileListWidget.clear()
self.songsOfFellowshipFilenameEdit.setText(u'')
self.genericFilenameEdit.setText(u'')
# self.CSVFilenameEdit.setText(u'')
#self.csvFilenameEdit.setText(u'')
def incrementProgressBar(self, status_text):
log.debug(u'IncrementBar %s', status_text)
self.ImportProgressLabel.setText(status_text)
self.ImportProgressBar.setValue(self.ImportProgressBar.value() + 1)
self.importProgressLabel.setText(status_text)
self.importProgressBar.setValue(self.importProgressBar.value() + 1)
Receiver.send_message(u'process_events')
def preImport(self):
self.finishButton.setVisible(False)
self.ImportProgressBar.setMinimum(0)
self.ImportProgressBar.setMaximum(1188)
self.ImportProgressBar.setValue(0)
self.ImportProgressLabel.setText(
self.importProgressBar.setMinimum(0)
self.importProgressBar.setMaximum(1188)
self.importProgressBar.setValue(0)
self.importProgressLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Starting import...'))
Receiver.send_message(u'process_events')
def performImport(self):
pass
# source_format = self.field(u'source_format').toInt()[0]
# importer = None
# if bible_type == SongFormat.OSIS:
# # Import an OSIS bible
# importer = self.plugin.import_songs(BibleFormat.OSIS,
# name=license_version,
# filename=unicode(self.field(u'osis_location').toString())
# )
# elif bible_type == BibleFormat.CSV:
# # Import a CSV bible
# importer = self.manager.import_bible(BibleFormat.CSV,
# name=license_version,
# booksfile=unicode(self.field(u'csv_booksfile').toString()),
# versefile=unicode(self.field(u'csv_versefile').toString())
# )
# elif bible_type == BibleFormat.OpenSong:
# # Import an OpenSong bible
# importer = self.manager.import_bible(BibleFormat.OpenSong,
# name=license_version,
# filename=unicode(self.field(u'opensong_file').toString())
# )
# elif bible_type == BibleFormat.WebDownload:
# # Import a bible from the web
# self.ImportProgressBar.setMaximum(1)
# download_location = self.field(u'web_location').toInt()[0]
# bible_version = self.BibleComboBox.currentText()
# if not isinstance(bible_version, unicode):
# bible_version = unicode(bible_version, u'utf8')
# if download_location == WebDownload.Crosswalk:
# bible = self.web_bible_list[WebDownload.Crosswalk][bible_version]
# elif download_location == WebDownload.BibleGateway:
# bible = self.web_bible_list[WebDownload.BibleGateway][bible_version]
# importer = self.manager.import_bible(
# BibleFormat.WebDownload,
# name=license_version,
# download_source=WebDownload.get_name(download_location),
# download_name=bible,
# proxy_server=unicode(self.field(u'proxy_server').toString()),
# proxy_username=unicode(self.field(u'proxy_username').toString()),
# proxy_password=unicode(self.field(u'proxy_password').toString())
# )
# success = importer.do_import()
# if success:
# self.manager.save_meta_data(license_version, license_version,
# license_copyright, license_permission)
# self.manager.reload_bibles()
# self.ImportProgressLabel.setText(translate('SongsPlugin.SongImportForm', 'Finished import.'))
# else:
# self.ImportProgressLabel.setText(
# translate('SongsPlugin.SongImportForm', 'Your Bible import failed.'))
# importer.delete()
"""
Perform the actual import. This method pulls in the correct importer
class, and then runs the ``do_import`` method of the importer to do
the actual importing.
"""
source_format = self.formatComboBox.currentIndex()
importer = None
if source_format == SongFormat.OpenLP2:
# Import an OpenLP 2.0 database
importer = self.plugin.importSongs(SongFormat.OpenLP2,
filename=unicode(self.openLP2FilenameEdit.text())
)
#elif source_format == SongFormat.OpenLP1:
# # Import an openlp.org database
# importer = self.plugin.importSongs(SongFormat.OpenLP1,
# filename=unicode(self.field(u'openlp1_filename').toString())
# )
elif source_format == SongFormat.OpenLyrics:
# Import OpenLyrics songs
importer = self.plugin.importSongs(SongFormat.OpenLyrics,
filenames=self.getListOfFiles(self.openLyricsFileListWidget)
)
elif source_format == SongFormat.OpenSong:
# Import OpenSong songs
importer = self.plugin.importSongs(SongFormat.OpenSong,
filenames=self.getListOfFiles(self.openSongFileListWidget)
)
elif source_format == SongFormat.WordsOfWorship:
# Import Words Of Worship songs
importer = self.plugin.importSongs(SongFormat.WordsOfWorship,
filenames=self.getListOfFiles(self.wordsOfWorshipFileListWidget)
)
elif source_format == SongFormat.CCLI:
# Import Words Of Worship songs
importer = self.plugin.importSongs(SongFormat.CCLI,
filenames=self.getListOfFiles(self.ccliFileListWidget)
)
elif source_format == SongFormat.SongsOfFellowship:
# Import a Songs of Fellowship RTF file
importer = self.plugin.importSongs(SongFormat.SongsOfFellowship,
filename=unicode(self.songsOfFellowshipFilenameEdit.text())
)
success = importer.do_import()
if success:
# reload songs
self.ImportProgressLabel.setText(
translate('SongsPlugin.SongImportForm', 'Finished import.'))
else:
self.ImportProgressLabel.setText(
translate('SongsPlugin.SongImportForm',
'Your song import failed.'))
def postImport(self):
self.ImportProgressBar.setValue(self.ImportProgressBar.maximum())
self.importProgressBar.setValue(self.importProgressBar.maximum())
self.finishButton.setVisible(True)
self.cancelButton.setVisible(False)
Receiver.send_message(u'process_events')

View File

@ -40,70 +40,70 @@ class Ui_SongImportWizard(object):
QtGui.QWizard.IndependentPages |
QtGui.QWizard.NoBackButtonOnStartPage |
QtGui.QWizard.NoBackButtonOnLastPage)
self.WelcomePage = QtGui.QWizardPage()
self.WelcomePage.setObjectName(u'WelcomePage')
self.WelcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
self.welcomePage = QtGui.QWizardPage()
self.welcomePage.setObjectName(u'welcomePage')
self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
QtGui.QPixmap(u':/wizards/wizard_importsong.bmp'))
self.WelcomeLayout = QtGui.QHBoxLayout(self.WelcomePage)
self.WelcomeLayout.setSpacing(8)
self.WelcomeLayout.setMargin(0)
self.WelcomeLayout.setObjectName(u'WelcomeLayout')
self.WelcomeTextLayout = QtGui.QVBoxLayout()
self.WelcomeTextLayout.setSpacing(8)
self.WelcomeTextLayout.setObjectName(u'WelcomeTextLayout')
self.TitleLabel = QtGui.QLabel(self.WelcomePage)
self.TitleLabel.setObjectName(u'TitleLabel')
self.WelcomeTextLayout.addWidget(self.TitleLabel)
self.WelcomeTopSpacer = QtGui.QSpacerItem(20, 40,
self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage)
self.welcomeLayout.setSpacing(8)
self.welcomeLayout.setMargin(0)
self.welcomeLayout.setObjectName(u'welcomeLayout')
self.welcomeTextLayout = QtGui.QVBoxLayout()
self.welcomeTextLayout.setSpacing(8)
self.welcomeTextLayout.setObjectName(u'welcomeTextLayout')
self.titleLabel = QtGui.QLabel(self.welcomePage)
self.titleLabel.setObjectName(u'TitleLabel')
self.welcomeTextLayout.addWidget(self.titleLabel)
self.welcomeTopSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
self.WelcomeTextLayout.addItem(self.WelcomeTopSpacer)
self.InformationLabel = QtGui.QLabel(self.WelcomePage)
self.InformationLabel.setWordWrap(True)
self.InformationLabel.setMargin(10)
self.InformationLabel.setObjectName(u'InformationLabel')
self.WelcomeTextLayout.addWidget(self.InformationLabel)
self.WelcomeBottomSpacer = QtGui.QSpacerItem(20, 40,
self.welcomeTextLayout.addItem(self.welcomeTopSpacer)
self.informationLabel = QtGui.QLabel(self.welcomePage)
self.informationLabel.setWordWrap(True)
self.informationLabel.setMargin(10)
self.informationLabel.setObjectName(u'InformationLabel')
self.welcomeTextLayout.addWidget(self.informationLabel)
self.welcomeBottomSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.WelcomeTextLayout.addItem(self.WelcomeBottomSpacer)
self.WelcomeLayout.addLayout(self.WelcomeTextLayout)
songImportWizard.addPage(self.WelcomePage)
self.SourcePage = QtGui.QWizardPage()
self.SourcePage.setObjectName(u'SourcePage')
self.SourceLayout = QtGui.QVBoxLayout(self.SourcePage)
self.SourceLayout.setSpacing(8)
self.SourceLayout.setMargin(20)
self.SourceLayout.setObjectName(u'SourceLayout')
self.FormatLayout = QtGui.QHBoxLayout()
self.FormatLayout.setSpacing(8)
self.FormatLayout.setObjectName(u'FormatLayout')
self.FormatLabel = QtGui.QLabel(self.SourcePage)
self.FormatLabel.setObjectName(u'FormatLabel')
self.FormatLayout.addWidget(self.FormatLabel)
self.FormatComboBox = QtGui.QComboBox(self.SourcePage)
self.welcomeTextLayout.addItem(self.welcomeBottomSpacer)
self.welcomeLayout.addLayout(self.welcomeTextLayout)
songImportWizard.addPage(self.welcomePage)
self.sourcePage = QtGui.QWizardPage()
self.sourcePage.setObjectName(u'SourcePage')
self.sourceLayout = QtGui.QVBoxLayout(self.sourcePage)
self.sourceLayout.setSpacing(8)
self.sourceLayout.setMargin(20)
self.sourceLayout.setObjectName(u'SourceLayout')
self.formatLayout = QtGui.QHBoxLayout()
self.formatLayout.setSpacing(8)
self.formatLayout.setObjectName(u'FormatLayout')
self.formatLabel = QtGui.QLabel(self.sourcePage)
self.formatLabel.setObjectName(u'FormatLabel')
self.formatLayout.addWidget(self.formatLabel)
self.formatComboBox = QtGui.QComboBox(self.sourcePage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(
self.FormatComboBox.sizePolicy().hasHeightForWidth())
self.FormatComboBox.setSizePolicy(sizePolicy)
self.FormatComboBox.setObjectName(u'FormatComboBox')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
# self.FormatComboBox.addItem(u'')
self.FormatLayout.addWidget(self.FormatComboBox)
self.FormatSpacer = QtGui.QSpacerItem(40, 20,
self.formatComboBox.sizePolicy().hasHeightForWidth())
self.formatComboBox.setSizePolicy(sizePolicy)
self.formatComboBox.setObjectName(u'formatComboBox')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
self.formatComboBox.addItem(u'')
# self.formatComboBox.addItem(u'')
self.formatLayout.addWidget(self.formatComboBox)
self.formatSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.FormatLayout.addItem(self.FormatSpacer)
self.SourceLayout.addLayout(self.FormatLayout)
self.FormatStackedWidget = QtGui.QStackedWidget(self.SourcePage)
self.FormatStackedWidget.setObjectName(u'FormatStackedWidget')
self.formatLayout.addItem(self.formatSpacer)
self.sourceLayout.addLayout(self.formatLayout)
self.formatStackedWidget = QtGui.QStackedWidget(self.sourcePage)
self.formatStackedWidget.setObjectName(u'FormatStackedWidget')
# OpenLP 2.0
self.openLP2Page = QtGui.QWidget()
self.openLP2Page.setObjectName(u'openLP2Page')
@ -127,7 +127,7 @@ class Ui_SongImportWizard(object):
self.openLP2FileLayout.addWidget(self.openLP2BrowseButton)
self.openLP2Layout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.openLP2FileLayout)
self.FormatStackedWidget.addWidget(self.openLP2Page)
self.formatStackedWidget.addWidget(self.openLP2Page)
# openlp.org 1.x
self.openLP1Page = QtGui.QWidget()
self.openLP1Page.setObjectName(u'openLP1Page')
@ -151,7 +151,7 @@ class Ui_SongImportWizard(object):
self.openLP1FileLayout.addWidget(self.openLP1BrowseButton)
self.openLP1Layout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.openLP1FileLayout)
self.FormatStackedWidget.addWidget(self.openLP1Page)
self.formatStackedWidget.addWidget(self.openLP1Page)
# OpenLyrics
self.openLyricsPage = QtGui.QWidget()
self.openLyricsPage.setObjectName(u'OpenLyricsPage')
@ -179,7 +179,7 @@ class Ui_SongImportWizard(object):
self.openLyricsRemoveButton.setObjectName(u'OpenLyricsRemoveButton')
self.openLyricsButtonLayout.addWidget(self.openLyricsRemoveButton)
self.openLyricsLayout.addLayout(self.openLyricsButtonLayout)
self.FormatStackedWidget.addWidget(self.openLyricsPage)
self.formatStackedWidget.addWidget(self.openLyricsPage)
# Open Song
self.openSongPage = QtGui.QWidget()
self.openSongPage.setObjectName(u'OpenSongPage')
@ -207,7 +207,7 @@ class Ui_SongImportWizard(object):
self.openSongRemoveButton.setObjectName(u'OpenSongRemoveButton')
self.openSongButtonLayout.addWidget(self.openSongRemoveButton)
self.openSongLayout.addLayout(self.openSongButtonLayout)
self.FormatStackedWidget.addWidget(self.openSongPage)
self.formatStackedWidget.addWidget(self.openSongPage)
# Words of Worship
self.wordsOfWorshipPage = QtGui.QWidget()
self.wordsOfWorshipPage.setObjectName(u'wordsOfWorshipPage')
@ -235,35 +235,35 @@ class Ui_SongImportWizard(object):
self.wordsOfWorshipRemoveButton.setObjectName(u'wordsOfWorshipRemoveButton')
self.wordsOfWorshipButtonLayout.addWidget(self.wordsOfWorshipRemoveButton)
self.wordsOfWorshipLayout.addLayout(self.wordsOfWorshipButtonLayout)
self.FormatStackedWidget.addWidget(self.wordsOfWorshipPage)
# CCLI File Import
self.CCLIPage = QtGui.QWidget()
self.CCLIPage.setObjectName(u'CCLIPage')
self.CCLILayout = QtGui.QVBoxLayout(self.CCLIPage)
self.CCLILayout.setSpacing(8)
self.CCLILayout.setMargin(0)
self.CCLILayout.setObjectName(u'CCLILayout')
self.CCLIFileListWidget = QtGui.QListWidget(self.CCLIPage)
self.CCLIFileListWidget.setSelectionMode(
self.formatStackedWidget.addWidget(self.wordsOfWorshipPage)
# CCLI File import
self.ccliPage = QtGui.QWidget()
self.ccliPage.setObjectName(u'CCLIPage')
self.ccliLayout = QtGui.QVBoxLayout(self.ccliPage)
self.ccliLayout.setSpacing(8)
self.ccliLayout.setMargin(0)
self.ccliLayout.setObjectName(u'CCLILayout')
self.ccliFileListWidget = QtGui.QListWidget(self.ccliPage)
self.ccliFileListWidget.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection)
self.CCLIFileListWidget.setObjectName(u'CCLIFileListWidget')
self.CCLILayout.addWidget(self.CCLIFileListWidget)
self.CCLIButtonLayout = QtGui.QHBoxLayout()
self.CCLIButtonLayout.setSpacing(8)
self.CCLIButtonLayout.setObjectName(u'CCLIButtonLayout')
self.CCLIAddButton = QtGui.QPushButton(self.CCLIPage)
self.CCLIAddButton.setIcon(openIcon)
self.CCLIAddButton.setObjectName(u'CCLIAddButton')
self.CCLIButtonLayout.addWidget(self.CCLIAddButton)
self.CCLIButtonSpacer = QtGui.QSpacerItem(40, 20,
self.ccliFileListWidget.setObjectName(u'CCLIFileListWidget')
self.ccliLayout.addWidget(self.ccliFileListWidget)
self.ccliButtonLayout = QtGui.QHBoxLayout()
self.ccliButtonLayout.setSpacing(8)
self.ccliButtonLayout.setObjectName(u'CCLIButtonLayout')
self.ccliAddButton = QtGui.QPushButton(self.ccliPage)
self.ccliAddButton.setIcon(openIcon)
self.ccliAddButton.setObjectName(u'CCLIAddButton')
self.ccliButtonLayout.addWidget(self.ccliAddButton)
self.ccliButtonSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.CCLIButtonLayout.addItem(self.CCLIButtonSpacer)
self.CCLIRemoveButton = QtGui.QPushButton(self.CCLIPage)
self.CCLIRemoveButton.setIcon(deleteIcon)
self.CCLIRemoveButton.setObjectName(u'CCLIRemoveButton')
self.CCLIButtonLayout.addWidget(self.CCLIRemoveButton)
self.CCLILayout.addLayout(self.CCLIButtonLayout)
self.FormatStackedWidget.addWidget(self.CCLIPage)
self.ccliButtonLayout.addItem(self.ccliButtonSpacer)
self.ccliRemoveButton = QtGui.QPushButton(self.ccliPage)
self.ccliRemoveButton.setIcon(deleteIcon)
self.ccliRemoveButton.setObjectName(u'CCLIRemoveButton')
self.ccliButtonLayout.addWidget(self.ccliRemoveButton)
self.ccliLayout.addLayout(self.ccliButtonLayout)
self.formatStackedWidget.addWidget(self.ccliPage)
# Songs of Fellowship
self.songsOfFellowshipPage = QtGui.QWidget()
self.songsOfFellowshipPage.setObjectName(u'songsOfFellowshipPage')
@ -287,8 +287,8 @@ class Ui_SongImportWizard(object):
self.songsOfFellowshipFileLayout.addWidget(self.songsOfFellowshipBrowseButton)
self.songsOfFellowshipLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.songsOfFellowshipFileLayout)
self.FormatStackedWidget.addWidget(self.songsOfFellowshipPage)
# Generic Document/Presentation Import
self.formatStackedWidget.addWidget(self.songsOfFellowshipPage)
# Generic Document/Presentation import
self.genericPage = QtGui.QWidget()
self.genericPage.setObjectName(u'genericPage')
self.genericLayout = QtGui.QFormLayout(self.genericPage)
@ -311,92 +311,92 @@ class Ui_SongImportWizard(object):
self.genericFileLayout.addWidget(self.genericBrowseButton)
self.genericLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.genericFileLayout)
self.FormatStackedWidget.addWidget(self.genericPage)
self.formatStackedWidget.addWidget(self.genericPage)
# Commented out for future use.
# self.CSVPage = QtGui.QWidget()
# self.CSVPage.setObjectName(u'CSVPage')
# self.CSVLayout = QtGui.QFormLayout(self.CSVPage)
# self.CSVLayout.setMargin(0)
# self.CSVLayout.setSpacing(8)
# self.CSVLayout.setObjectName(u'CSVLayout')
# self.CSVFilenameLabel = QtGui.QLabel(self.CSVPage)
# self.CSVFilenameLabel.setObjectName(u'CSVFilenameLabel')
# self.CSVLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
# self.CSVFilenameLabel)
# self.CSVFileLayout = QtGui.QHBoxLayout()
# self.CSVFileLayout.setSpacing(8)
# self.CSVFileLayout.setObjectName(u'CSVFileLayout')
# self.CSVFilenameEdit = QtGui.QLineEdit(self.CSVPage)
# self.CSVFilenameEdit.setObjectName(u'CSVFilenameEdit')
# self.CSVFileLayout.addWidget(self.CSVFilenameEdit)
# self.CSVBrowseButton = QtGui.QToolButton(self.CSVPage)
# self.CSVBrowseButton.setIcon(openIcon)
# self.CSVBrowseButton.setObjectName(u'CSVBrowseButton')
# self.CSVFileLayout.addWidget(self.CSVBrowseButton)
# self.CSVLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
# self.CSVFileLayout)
# self.FormatStackedWidget.addWidget(self.CSVPage)
self.SourceLayout.addWidget(self.FormatStackedWidget)
songImportWizard.addPage(self.SourcePage)
self.ImportPage = QtGui.QWizardPage()
self.ImportPage.setObjectName(u'ImportPage')
self.ImportLayout = QtGui.QVBoxLayout(self.ImportPage)
self.ImportLayout.setSpacing(8)
self.ImportLayout.setMargin(50)
self.ImportLayout.setObjectName(u'ImportLayout')
self.ImportProgressLabel = QtGui.QLabel(self.ImportPage)
self.ImportProgressLabel.setObjectName(u'ImportProgressLabel')
self.ImportLayout.addWidget(self.ImportProgressLabel)
self.ImportProgressBar = QtGui.QProgressBar(self.ImportPage)
self.ImportProgressBar.setProperty(u'value', 0)
self.ImportProgressBar.setInvertedAppearance(False)
self.ImportProgressBar.setObjectName(u'ImportProgressBar')
self.ImportLayout.addWidget(self.ImportProgressBar)
songImportWizard.addPage(self.ImportPage)
# self.csvPage = QtGui.QWidget()
# self.csvPage.setObjectName(u'CSVPage')
# self.csvLayout = QtGui.QFormLayout(self.csvPage)
# self.csvLayout.setMargin(0)
# self.csvLayout.setSpacing(8)
# self.csvLayout.setObjectName(u'CSVLayout')
# self.csvFilenameLabel = QtGui.QLabel(self.csvPage)
# self.csvFilenameLabel.setObjectName(u'CSVFilenameLabel')
# self.csvLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
# self.csvFilenameLabel)
# self.csvFileLayout = QtGui.QHBoxLayout()
# self.csvFileLayout.setSpacing(8)
# self.csvFileLayout.setObjectName(u'CSVFileLayout')
# self.csvFilenameEdit = QtGui.QLineEdit(self.csvPage)
# self.csvFilenameEdit.setObjectName(u'CSVFilenameEdit')
# self.csvFileLayout.addWidget(self.csvFilenameEdit)
# self.csvBrowseButton = QtGui.QToolButton(self.csvPage)
# self.csvBrowseButton.setIcon(openIcon)
# self.csvBrowseButton.setObjectName(u'CSVBrowseButton')
# self.csvFileLayout.addWidget(self.csvBrowseButton)
# self.csvLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
# self.csvFileLayout)
# self.formatStackedWidget.addWidget(self.csvPage)
self.sourceLayout.addWidget(self.formatStackedWidget)
songImportWizard.addPage(self.sourcePage)
self.importPage = QtGui.QWizardPage()
self.importPage.setObjectName(u'importPage')
self.importLayout = QtGui.QVBoxLayout(self.importPage)
self.importLayout.setSpacing(8)
self.importLayout.setMargin(50)
self.importLayout.setObjectName(u'importLayout')
self.importProgressLabel = QtGui.QLabel(self.importPage)
self.importProgressLabel.setObjectName(u'importProgressLabel')
self.importLayout.addWidget(self.importProgressLabel)
self.importProgressBar = QtGui.QProgressBar(self.importPage)
self.importProgressBar.setProperty(u'value', 0)
self.importProgressBar.setInvertedAppearance(False)
self.importProgressBar.setObjectName(u'importProgressBar')
self.importLayout.addWidget(self.importProgressBar)
songImportWizard.addPage(self.importPage)
self.retranslateUi(songImportWizard)
self.FormatStackedWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.FormatComboBox,
self.formatStackedWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.formatComboBox,
QtCore.SIGNAL(u'currentIndexChanged(int)'),
self.FormatStackedWidget.setCurrentIndex)
self.formatStackedWidget.setCurrentIndex)
QtCore.QMetaObject.connectSlotsByName(songImportWizard)
def retranslateUi(self, songImportWizard):
songImportWizard.setWindowTitle(
translate('SongsPlugin.ImportWizardForm', 'Song Import Wizard'))
self.TitleLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Song import Wizard'))
self.titleLabel.setText(
u'<span style="font-size:14pt; font-weight:600;">%s</span>' % \
translate('SongsPlugin.ImportWizardForm',
'Welcome to the Song Import Wizard'))
self.InformationLabel.setText(
'Welcome to the Song import Wizard'))
self.informationLabel.setText(
translate('SongsPlugin.ImportWizardForm',
'This wizard will help you to import songs from a variety of '
'formats. Click the next button below to start the process by '
'selecting a format to import from.'))
self.SourcePage.setTitle(
translate('SongsPlugin.ImportWizardForm', 'Select Import Source'))
self.SourcePage.setSubTitle(
self.sourcePage.setTitle(
translate('SongsPlugin.ImportWizardForm', 'Select import Source'))
self.sourcePage.setSubTitle(
translate('SongsPlugin.ImportWizardForm',
'Select the import format, and where to import from.'))
self.FormatLabel.setText(
self.formatLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Format:'))
self.FormatComboBox.setItemText(0,
self.formatComboBox.setItemText(0,
translate('SongsPlugin.ImportWizardForm', 'OpenLP 2.0'))
self.FormatComboBox.setItemText(1,
self.formatComboBox.setItemText(1,
translate('SongsPlugin.ImportWizardForm', 'openlp.org 1.x'))
self.FormatComboBox.setItemText(2,
self.formatComboBox.setItemText(2,
translate('SongsPlugin.ImportWizardForm', 'OpenLyrics'))
self.FormatComboBox.setItemText(3,
self.formatComboBox.setItemText(3,
translate('SongsPlugin.ImportWizardForm', 'OpenSong'))
self.FormatComboBox.setItemText(4,
self.formatComboBox.setItemText(4,
translate('SongsPlugin.ImportWizardForm', 'Words of Worship'))
self.FormatComboBox.setItemText(5,
self.formatComboBox.setItemText(5,
translate('SongsPlugin.ImportWizardForm', 'CCLI'))
self.FormatComboBox.setItemText(6,
self.formatComboBox.setItemText(6,
translate('SongsPlugin.ImportWizardForm', 'Songs of Fellowship'))
self.FormatComboBox.setItemText(7,
self.formatComboBox.setItemText(7,
translate('SongsPlugin.ImportWizardForm',
'Generic Document/Presentation'))
# self.FormatComboBox.setItemText(8,
# self.formatComboBox.setItemText(8,
# translate('SongsPlugin.ImportWizardForm', 'CSV'))
self.openLP2FilenameLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Filename:'))
@ -418,9 +418,9 @@ class Ui_SongImportWizard(object):
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
self.wordsOfWorshipRemoveButton.setText(
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
self.CCLIAddButton.setText(
self.ccliAddButton.setText(
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
self.CCLIRemoveButton.setText(
self.ccliRemoveButton.setText(
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
self.songsOfFellowshipFilenameLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Filename:'))
@ -430,16 +430,16 @@ class Ui_SongImportWizard(object):
translate('SongsPlugin.ImportWizardForm', 'Filename:'))
self.genericBrowseButton.setText(
translate('SongsPlugin.ImportWizardForm', 'Browse...'))
# self.CSVFilenameLabel.setText(
# self.csvFilenameLabel.setText(
# translate('SongsPlugin.ImportWizardForm', 'Filename:'))
# self.CSVBrowseButton.setText(
# self.csvBrowseButton.setText(
# translate('SongsPlugin.ImportWizardForm', 'Browse...'))
self.ImportPage.setTitle(
translate('SongsPlugin.ImportWizardForm', 'Importing'))
self.ImportPage.setSubTitle(
self.importPage.setTitle(
translate('SongsPlugin.ImportWizardForm', 'importing'))
self.importPage.setSubTitle(
translate('SongsPlugin.ImportWizardForm',
'Please wait while your songs are imported.'))
self.ImportProgressLabel.setText(
self.importProgressLabel.setText(
translate('SongsPlugin.ImportWizardForm', 'Ready.'))
self.ImportProgressBar.setFormat(
self.importProgressBar.setFormat(
translate('SongsPlugin.ImportWizardForm', '%p%'))

View File

@ -26,62 +26,6 @@
from openlp.core.lib import translate
from openlp.plugins.songs.lib import OpenLPSongImport, OpenSongImport, \
OooImport, SofImport
# CSVSong
class SongFormat(object):
"""
This is a special enumeration class that holds the various types of songs,
plus a few helper functions to facilitate generic handling of song types
for importing.
"""
Unknown = -1
OpenLP2 = 0
OpenLP1 = 1
OpenLyrics = 2
OpenSong = 3
WordsOfWorship = 4
CCLI = 5
SongsOfFellowship = 6
Generic = 7
CSV = 8
@staticmethod
def get_class(format):
"""
Return the appropriate imeplementation class.
``format``
The song format.
"""
if format == SongFormat.OpenLP2:
return OpenLPSongImport
elif format == SongFormat.OpenSong:
return OpenSongImport
elif format == SongFormat.SongsOfFellowship:
return SofImport
elif format == SongFormat.Generic:
return OooImport
# else:
return None
@staticmethod
def list():
"""
Return a list of the supported song formats.
"""
return [
SongFormat.OpenLP2,
SongFormat.OpenLP1,
SongFormat.OpenLyrics,
SongFormat.OpenSong,
SongFormat.WordsOfWorship,
SongFormat.CCLI,
SongFormat.SongsOfFellowship,
SongFormat.Generic
]
class VerseType(object):
"""
VerseType provides an enumeration for the tags that may be associated
@ -148,14 +92,7 @@ class VerseType(object):
unicode(VerseType.to_string(VerseType.Other)).lower():
return VerseType.Other
from xml import LyricsXML, SongXMLBuilder, SongXMLParser
from songstab import SongsTab
from mediaitem import SongMediaItem
from songimport import SongImport
from opensongimport import OpenSongImport
from olpimport import OpenLPSongImport
try:
from sofimport import SofImport
from oooimport import OooImport
except ImportError:
pass

View File

@ -236,9 +236,10 @@ class SongMediaItem(MediaManagerItem):
self.onSearchTextButtonClick()
def onImportClick(self):
songimportform = ImportWizardForm(self, self.parent.manager,
self.parent)
songimportform.exec_()
if not hasattr(self, u'import_wizard'):
self.import_wizard = ImportWizardForm(self, self.parent.manager,
self.parent)
self.import_wizard.exec_()
def onNewClick(self):
self.edit_song_form.newSong()

View File

@ -36,6 +36,7 @@ from sqlalchemy.orm.exc import UnmappedClassError
from openlp.core.lib.db import BaseModel
from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile
from songimport import SongImport
log = logging.getLogger(__name__)
@ -69,12 +70,12 @@ class OldTopic(BaseModel):
"""
pass
class OpenLPSongImport(object):
class OpenLPSongImport(SongImport):
"""
The :class:`OpenLPSongImport` class provides OpenLP with the ability to
import song databases from other installations of OpenLP.
"""
def __init__(self, master_manager, source_db):
def __init__(self, master_manager, **kwargs):
"""
Initialise the import.
@ -85,10 +86,11 @@ class OpenLPSongImport(object):
The database providing the data to import.
"""
self.master_manager = master_manager
self.import_source = source_db
self.import_source = u'sqlite:///%s' % kwargs[u'filename']
log.debug(self.import_source)
self.source_session = None
def import_source_v2_db(self):
def do_import(self):
"""
Run the import for an OpenLP version 2 song database.
"""

View File

@ -27,8 +27,9 @@
import re
from openlp.core.lib import translate
from openlp.plugins.songs.lib import SongXMLBuilder, VerseType
from openlp.plugins.songs.lib import VerseType
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book
from openlp.plugins.songs.lib.xml import SongXMLBuilder
class SongImport(object):
"""
@ -39,14 +40,14 @@ class SongImport(object):
as necessary
"""
def __init__(self, song_manager):
def __init__(self, manager):
"""
Initialise and create defaults for properties
song_manager is an instance of a SongManager, through which all
database access is performed
"""
self.manager = song_manager
self.manager = manager
self.title = u''
self.song_number = u''
self.alternate_title = u''
@ -67,6 +68,9 @@ class SongImport(object):
self.copyright_symbol = unicode(translate(
'SongsPlugin.SongImport', '\xa9'))
def register(self, import_wizard):
self.import_wizard = import_wizard
@staticmethod
def process_songs_text(manager, text):
songs = []

View File

@ -30,16 +30,16 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin, build_icon, Receiver, translate
from openlp.core.lib.db import Manager
from openlp.plugins.songs.lib import OpenLPSongImport, SongMediaItem, SongsTab
from openlp.plugins.songs.lib import SongMediaItem, SongsTab
from openlp.plugins.songs.lib.db import init_schema, Song
from openlp.plugins.songs.lib.importer import SongFormat
try:
from openlp.plugins.songs.lib import SofImport, OooImport
OOo_available = True
except ImportError:
OOo_available = False
from openlp.plugins.songs.lib import OpenSongImport
#try:
# from openlp.plugins.songs.lib import SofImport, OooImport
# OOo_available = True
#except ImportError:
# OOo_available = False
#from openlp.plugins.songs.lib import OpenSongImport
log = logging.getLogger(__name__)
@ -99,76 +99,76 @@ class SongsPlugin(Plugin):
# Signals and slots
QtCore.QObject.connect(self.SongImportItem,
QtCore.SIGNAL(u'triggered()'), self.onSongImportItemClicked)
if OOo_available:
# Songs of Fellowship import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportSofItem = QtGui.QAction(import_menu)
self.ImportSofItem.setObjectName(u'ImportSofItem')
self.ImportSofItem.setText(
translate('SongsPlugin',
'Songs of Fellowship (temp menu item)'))
self.ImportSofItem.setToolTip(
translate('SongsPlugin',
'Import songs from the VOLS1_2.RTF, sof3words' \
+ '.rtf and sof4words.rtf supplied with the music books'))
self.ImportSofItem.setStatusTip(
translate('SongsPlugin',
'Import songs from the VOLS1_2.RTF, sof3words' \
+ '.rtf and sof4words.rtf supplied with the music books'))
import_menu.addAction(self.ImportSofItem)
# OpenOffice.org import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportOooItem = QtGui.QAction(import_menu)
self.ImportOooItem.setObjectName(u'ImportOooItem')
self.ImportOooItem.setText(
translate('SongsPlugin',
'Generic Document/Presentation Import '
'(temp menu item)'))
self.ImportOooItem.setToolTip(
translate('SongsPlugin',
'Import songs from '
'Word/Writer/Powerpoint/Impress'))
self.ImportOooItem.setStatusTip(
translate('SongsPlugin',
'Import songs from '
'Word/Writer/Powerpoint/Impress'))
import_menu.addAction(self.ImportOooItem)
# Signals and slots
QtCore.QObject.connect(self.ImportSofItem,
QtCore.SIGNAL(u'triggered()'), self.onImportSofItemClick)
QtCore.QObject.connect(self.ImportOooItem,
QtCore.SIGNAL(u'triggered()'), self.onImportOooItemClick)
# OpenSong import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportOpenSongItem = QtGui.QAction(import_menu)
self.ImportOpenSongItem.setObjectName(u'ImportOpenSongItem')
self.ImportOpenSongItem.setText(
translate('SongsPlugin',
'OpenSong (temp menu item)'))
self.ImportOpenSongItem.setToolTip(
translate('SongsPlugin',
'Import songs from OpenSong files' +
'(either raw text or ZIPfiles)'))
self.ImportOpenSongItem.setStatusTip(
translate('SongsPlugin',
'Import songs from OpenSong files' +
'(either raw text or ZIPfiles)'))
import_menu.addAction(self.ImportOpenSongItem)
QtCore.QObject.connect(self.ImportOpenSongItem,
QtCore.SIGNAL(u'triggered()'), self.onImportOpenSongItemClick)
# OpenLP v2 import menu item - ditto above regarding refactoring into
# an import wizard
self.ImportOpenLPSongItem = QtGui.QAction(import_menu)
self.ImportOpenLPSongItem.setObjectName(u'ImportOpenLPSongItem')
self.ImportOpenLPSongItem.setText(translate('SongsPlugin',
'OpenLP v2 Songs (temporary)'))
self.ImportOpenLPSongItem.setToolTip(translate('SongsPlugin',
'Import an OpenLP v2 song database'))
self.ImportOpenLPSongItem.setStatusTip(translate('SongsPlugin',
'Import an OpenLP v2 song database'))
import_menu.addAction(self.ImportOpenLPSongItem)
QtCore.QObject.connect(self.ImportOpenLPSongItem,
QtCore.SIGNAL(u'triggered()'), self.onImportOpenLPSongItemClick)
# if OOo_available:
# # Songs of Fellowship import menu item - will be removed and the
# # functionality will be contained within the import wizard
# self.ImportSofItem = QtGui.QAction(import_menu)
# self.ImportSofItem.setObjectName(u'ImportSofItem')
# self.ImportSofItem.setText(
# translate('SongsPlugin',
# 'Songs of Fellowship (temp menu item)'))
# self.ImportSofItem.setToolTip(
# translate('SongsPlugin',
# 'Import songs from the VOLS1_2.RTF, sof3words' \
# + '.rtf and sof4words.rtf supplied with the music books'))
# self.ImportSofItem.setStatusTip(
# translate('SongsPlugin',
# 'Import songs from the VOLS1_2.RTF, sof3words' \
# + '.rtf and sof4words.rtf supplied with the music books'))
# import_menu.addAction(self.ImportSofItem)
# # OpenOffice.org import menu item - will be removed and the
# # functionality will be contained within the import wizard
# self.ImportOooItem = QtGui.QAction(import_menu)
# self.ImportOooItem.setObjectName(u'ImportOooItem')
# self.ImportOooItem.setText(
# translate('SongsPlugin',
# 'Generic Document/Presentation Import '
# '(temp menu item)'))
# self.ImportOooItem.setToolTip(
# translate('SongsPlugin',
# 'Import songs from '
# 'Word/Writer/Powerpoint/Impress'))
# self.ImportOooItem.setStatusTip(
# translate('SongsPlugin',
# 'Import songs from '
# 'Word/Writer/Powerpoint/Impress'))
# import_menu.addAction(self.ImportOooItem)
# # Signals and slots
# QtCore.QObject.connect(self.ImportSofItem,
# QtCore.SIGNAL(u'triggered()'), self.onImportSofItemClick)
# QtCore.QObject.connect(self.ImportOooItem,
# QtCore.SIGNAL(u'triggered()'), self.onImportOooItemClick)
# # OpenSong import menu item - will be removed and the
# # functionality will be contained within the import wizard
# self.ImportOpenSongItem = QtGui.QAction(import_menu)
# self.ImportOpenSongItem.setObjectName(u'ImportOpenSongItem')
# self.ImportOpenSongItem.setText(
# translate('SongsPlugin',
# 'OpenSong (temp menu item)'))
# self.ImportOpenSongItem.setToolTip(
# translate('SongsPlugin',
# 'Import songs from OpenSong files' +
# '(either raw text or ZIPfiles)'))
# self.ImportOpenSongItem.setStatusTip(
# translate('SongsPlugin',
# 'Import songs from OpenSong files' +
# '(either raw text or ZIPfiles)'))
# import_menu.addAction(self.ImportOpenSongItem)
# QtCore.QObject.connect(self.ImportOpenSongItem,
# QtCore.SIGNAL(u'triggered()'), self.onImportOpenSongItemClick)
# # OpenLP v2 import menu item - ditto above regarding refactoring into
# # an import wizard
# self.ImportOpenLPSongItem = QtGui.QAction(import_menu)
# self.ImportOpenLPSongItem.setObjectName(u'ImportOpenLPSongItem')
# self.ImportOpenLPSongItem.setText(translate('SongsPlugin',
# 'OpenLP v2 Songs (temporary)'))
# self.ImportOpenLPSongItem.setToolTip(translate('SongsPlugin',
# 'Import an OpenLP v2 song database'))
# self.ImportOpenLPSongItem.setStatusTip(translate('SongsPlugin',
# 'Import an OpenLP v2 song database'))
# import_menu.addAction(self.ImportOpenLPSongItem)
# QtCore.QObject.connect(self.ImportOpenLPSongItem,
# QtCore.SIGNAL(u'triggered()'), self.onImportOpenLPSongItemClick)
def addExportMenuItem(self, export_menu):
"""
@ -186,67 +186,67 @@ class SongsPlugin(Plugin):
if self.mediaItem:
self.mediaItem.onImportClick()
def onImportSofItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
None, translate('SongsPlugin',
'Open Songs of Fellowship file'),
u'', u'Songs of Fellowship file (*.rtf *.RTF)')
try:
for filename in filenames:
sofimport = SofImport(self.manager)
sofimport.import_sof(unicode(filename))
except:
log.exception('Could not import SoF file')
QtGui.QMessageBox.critical(None,
translate('SongsPlugin', 'Import Error'),
translate('SongsPlugin', 'Error importing Songs of '
'Fellowship file.\nOpenOffice.org must be installed'
' and you must be using an unedited copy of the RTF'
' included with the Songs of Fellowship Music Editions'))
Receiver.send_message(u'songs_load_list')
def onImportOpenSongItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
None, translate('SongsPlugin',
'Open OpenSong file'),
u'', u'All files (*.*)')
try:
for filename in filenames:
importer = OpenSongImport(self.manager)
importer.do_import(unicode(filename))
except:
log.exception('Could not import OpenSong file')
QtGui.QMessageBox.critical(None,
translate('SongsPlugin', 'Import Error'),
translate('SongsPlugin', 'Error importing OpenSong file'))
Receiver.send_message(u'songs_load_list')
def onImportOpenLPSongItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(None,
translate('SongsPlugin', 'Select OpenLP database(s) to import...'),
u'', u'OpenLP databases (*.sqlite);;All Files (*)')
try:
for filename in filenames:
db_url = u'sqlite:///%s' % filename
importer = OpenLPSongImport(self.manager, db_url)
importer.import_source_v2_db()
QtGui.QMessageBox.information(None, translate('SongsPlugin',
'Database(s) imported'), translate('SongsPlugin', 'Your '
'OpenLP v2 song databases have been successfully imported'))
except:
log.exception(u'Failed to import OpenLP v2 database(s)')
QtGui.QMessageBox.critical(None, translate('SongsPlugin',
'Import Error'), translate('SongsPlugin',
'Error importing OpenLP v2 database(s)'))
Receiver.send_message(u'songs_load_list')
def onImportOooItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
None, translate('SongsPlugin', 'Open documents or presentations'),
'', u'All Files(*.*)')
oooimport = OooImport(self.manager)
oooimport.import_docs(filenames)
Receiver.send_message(u'songs_load_list')
# def onImportSofItemClick(self):
# filenames = QtGui.QFileDialog.getOpenFileNames(
# None, translate('SongsPlugin',
# 'Open Songs of Fellowship file'),
# u'', u'Songs of Fellowship file (*.rtf *.RTF)')
# try:
# for filename in filenames:
# sofimport = SofImport(self.manager)
# sofimport.import_sof(unicode(filename))
# except:
# log.exception('Could not import SoF file')
# QtGui.QMessageBox.critical(None,
# translate('SongsPlugin', 'Import Error'),
# translate('SongsPlugin', 'Error importing Songs of '
# 'Fellowship file.\nOpenOffice.org must be installed'
# ' and you must be using an unedited copy of the RTF'
# ' included with the Songs of Fellowship Music Editions'))
# Receiver.send_message(u'songs_load_list')
#
# def onImportOpenSongItemClick(self):
# filenames = QtGui.QFileDialog.getOpenFileNames(
# None, translate('SongsPlugin',
# 'Open OpenSong file'),
# u'', u'All files (*.*)')
# try:
# for filename in filenames:
# importer = OpenSongImport(self.manager)
# importer.do_import(unicode(filename))
# except:
# log.exception('Could not import OpenSong file')
# QtGui.QMessageBox.critical(None,
# translate('SongsPlugin', 'Import Error'),
# translate('SongsPlugin', 'Error importing OpenSong file'))
# Receiver.send_message(u'songs_load_list')
#
# def onImportOpenLPSongItemClick(self):
# filenames = QtGui.QFileDialog.getOpenFileNames(None,
# translate('SongsPlugin', 'Select OpenLP database(s) to import...'),
# u'', u'OpenLP databases (*.sqlite);;All Files (*)')
# try:
# for filename in filenames:
# db_url = u'sqlite:///%s' % filename
# importer = OpenLPSongImport(self.manager, db_url)
# importer.import_source_v2_db()
# QtGui.QMessageBox.information(None, translate('SongsPlugin',
# 'Database(s) imported'), translate('SongsPlugin', 'Your '
# 'OpenLP v2 song databases have been successfully imported'))
# except:
# log.exception(u'Failed to import OpenLP v2 database(s)')
# QtGui.QMessageBox.critical(None, translate('SongsPlugin',
# 'Import Error'), translate('SongsPlugin',
# 'Error importing OpenLP v2 database(s)'))
# Receiver.send_message(u'songs_load_list')
#
# def onImportOooItemClick(self):
# filenames = QtGui.QFileDialog.getOpenFileNames(
# None, translate('SongsPlugin', 'Open documents or presentations'),
# '', u'All Files(*.*)')
# oooimport = OooImport(self.manager)
# oooimport.import_docs(filenames)
# Receiver.send_message(u'songs_load_list')
def about(self):
about_text = translate('SongsPlugin', '<strong>Songs Plugin</strong>'
@ -280,3 +280,9 @@ class SongsPlugin(Plugin):
for song in songsUsingTheme:
song.theme_name = newTheme
self.custommanager.save_object(song)
def importSongs(self, format, **kwargs):
class_ = SongFormat.get_class(format)
importer = class_(self.manager, **kwargs)
importer.register(self.mediaItem.import_wizard)
return importer

View File

@ -1,5 +1,6 @@
<?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#"
@ -13,7 +14,7 @@
height="744.09448"
id="svg5740"
sodipodi:version="0.32"
inkscape:version="0.46"
inkscape:version="0.47 r22583"
version="1.0"
sodipodi:docname="openlp-logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
@ -262,14 +263,15 @@
inkscape:pageshadow="2"
inkscape:zoom="1.0119683"
inkscape:cx="513.59551"
inkscape:cy="369.01895"
inkscape:cy="490.71958"
inkscape:document-units="px"
inkscape:current-layer="layer6"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="958"
inkscape:window-width="1600"
inkscape:window-height="839"
inkscape:window-x="-4"
inkscape:window-y="-4" />
inkscape:window-y="-3"
inkscape:window-maximized="1" />
<metadata
id="metadata5745">
<rdf:RDF>
@ -314,7 +316,7 @@
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 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"
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"
@ -333,14 +335,14 @@
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"
d="m 833.03006,395.26932 c 0,197.56259 -160.15613,357.71872 -357.71872,357.71872 -197.56259,0 -357.71872,-160.15613 -357.71872,-357.71872 0,-197.5626 160.15613,-357.718722 357.71872,-357.718722 197.56259,0 357.71872,160.156122 357.71872,357.718722 z"
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.6317287,0,0,0.6317287,-64.581662,-12.716988)"
d="M 833.03006,395.26932 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"
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"
@ -360,133 +362,5 @@
d="M 235.67972,13.233984 C 199.75196,13.233984 165.79894,21.722639 135.704,36.792417 L 296.72396,165.96674 L 349.27738,208.13573 C 388.42508,203.26072 423.85383,195.91016 453.73266,186.69491 C 430.89209,87.375898 341.89666,13.233985 235.67972,13.233984 z M 79.118968,77.210299 C 71.146114,85.023824 63.764822,93.431949 57.026574,102.35694 L 274.63156,209.66285 L 282.95948,213.77591 C 290.87301,213.39575 298.68426,212.91815 306.39574,212.35059 L 275.3035,193.86221 L 79.118968,77.210299 z M 24.488653,162.95322 C 21.826867,170.53849 19.56686,178.3145 17.728584,186.24695 C 60.352717,199.56405 114.44154,209.03001 174.67621,212.92072 L 24.488653,162.95322 z"
style="fill:url(#linearGradient4057);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" />
</g>
<g
id="g4025"
transform="translate(-0.9881736,-11.858079)">
<g
id="g3202"
transform="matrix(0.6515729,0,0,0.6515729,482.27854,11.483464)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.9791437,0,0,0.9791437,6.955563,-15.153813)"
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="path3204"
style="opacity:1;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)"
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="opacity:1;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"
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 117.59262,395.26932 A 357.71872,357.71872 0 1 1 833.03006,395.26932 z"
transform="matrix(0.9791437,0,0,0.9791437,6.955563,-15.153813)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.9695442,0,0,0.9695442,11.51829,-11.359445)"
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="path3208"
style="opacity:1;fill:url(#linearGradient4047);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" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
id="path3210"
d="M 472.34375,28.46875 C 417.2037,28.46875 365.09439,41.496693 318.90625,64.625 L 566.03125,262.875 L 805.59375,455.0625 C 812.23078,428.42209 815.75,400.56059 815.75,371.875 C 815.75,182.3236 661.89515,28.468751 472.34375,28.46875 z M 232.0625,126.65625 C 219.82618,138.64804 208.49776,151.55239 198.15625,165.25 L 532.125,329.9375 L 777.03125,450.71875 L 533.15625,305.6875 L 232.0625,126.65625 z M 148.21875,258.25 C 142.6509,274.11664 138.23633,290.51145 135.03125,307.34375 L 509.9375,399.96875 L 759.8125,461.71875 L 510,378.59375 L 148.21875,258.25 z M 131.375,412.5625 C 133.37791,429.50222 136.58909,446.06205 140.96875,462.15625 L 491.71875,472.15625 L 757.9375,479.78125 L 499.78125,452.0625 L 131.375,412.5625 z M 768.28125,495.84375 L 494,525.125 L 183.96875,558.21875 C 193.11462,572.33688 203.2524,585.75373 214.3125,598.34375 L 485.8125,548.09375 L 768.28125,495.84375 z M 789.4375,503.84375 L 500.34375,599.28125 L 296.21875,666.65625 C 347.72979,697.51903 407.96606,715.24999 472.34375,715.25 C 615.1411,715.25 737.67984,627.95502 789.4375,503.84375 z"
style="opacity:1;fill:url(#linearGradient4049);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" />
<path
id="path3212"
d="M 472.34375,28.46875 C 417.2037,28.46875 365.09439,41.496693 318.90625,64.625 L 566.03125,262.875 L 646.6875,327.59375 C 706.76934,320.11184 761.14353,308.83058 807,294.6875 C 771.94549,142.25788 635.35996,28.468751 472.34375,28.46875 z M 232.0625,126.65625 C 219.82618,138.64804 208.49776,151.55239 198.15625,165.25 L 532.125,329.9375 L 544.90625,336.25 C 557.05152,335.66655 569.03982,334.93356 580.875,334.0625 L 533.15625,305.6875 L 232.0625,126.65625 z M 148.21875,258.25 C 144.13358,269.89147 140.66504,281.82569 137.84375,294 C 203.26104,314.43839 286.27373,328.96625 378.71875,334.9375 L 148.21875,258.25 z"
style="opacity:1;fill:url(#linearGradient4051);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" />
</g>
<g
style="fill:#ffffff;fill-opacity:1;filter:url(#filter4005)"
id="g2762"
transform="matrix(0.8481394,0,0,0.8481394,20.507371,-653.75135)">
<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.8481394,0,0,0.8481394,20.507371,-653.75135)"
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="path3231" />
<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="path3233" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 14 KiB

492
resources/images/openlp.svg Normal file
View File

@ -0,0 +1,492 @@
<?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="1052.3622"
height="744.09448"
id="svg5740"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="openlp-logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
inkscape:export-xdpi="91.860847"
inkscape:export-ydpi="91.860847"
style="display:inline">
<defs
id="defs5742">
<linearGradient
id="linearGradient3208">
<stop
style="stop-color:#ffffff;stop-opacity:0.25098041;"
offset="0"
id="stop3210" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3212" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
style="stop-color:#cdcdff;stop-opacity:1;"
offset="0"
id="stop3197" />
<stop
style="stop-color:#ebebff;stop-opacity:1;"
offset="1"
id="stop3199" />
</linearGradient>
<linearGradient
id="linearGradient6359">
<stop
style="stop-color:#000d26;stop-opacity:1;"
offset="0"
id="stop6361" />
<stop
style="stop-color:#507fda;stop-opacity:1;"
offset="1"
id="stop6363" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective5748" />
<filter
inkscape:collect="always"
id="filter6926">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.5771872"
id="feGaussianBlur6928" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3214"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3229"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3279"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3287"
gradientUnits="userSpaceOnUse"
x1="470.25891"
y1="276.68851"
x2="463.2301"
y2="14.822601"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient3196"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3198"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3200"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient3215"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient3217"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient3219"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<filter
inkscape:collect="always"
id="filter4005">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.333215"
id="feGaussianBlur4007" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4010"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4013"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938"
gradientTransform="matrix(0.6515729,0,0,0.6515729,-72.086668,-5.3154816)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4047"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4049"
gradientUnits="userSpaceOnUse"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4051"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1122448,0,0,1.2037738,-57.29825,4.8849318)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3195"
id="linearGradient4053"
gradientUnits="userSpaceOnUse"
x1="117.59262"
y1="384.05795"
x2="418.20981"
y2="436.03787" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6359"
id="linearGradient4055"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6515729,0,0,0.6515729,-72.086668,-5.3154816)"
x1="815.75"
y1="480.55844"
x2="201.10622"
y2="371.85938" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3208"
id="linearGradient4057"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7247086,0,0,0.7843464,-109.42065,-2.1325924)"
x1="470.25891"
y1="276.68851"
x2="469.44925"
y2="104.30029" />
</defs>
<sodipodi:namedview
id="base"
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="513.59551"
inkscape:cy="369.01895"
inkscape:document-units="px"
inkscape:current-layer="layer6"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="958"
inkscape:window-x="-4"
inkscape:window-y="-4" />
<metadata
id="metadata5745">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Shadow"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Border"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Rays Background"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Rays Foreground"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Reflection"
style="display:inline">
<g
id="g4018"
transform="translate(9.8817328,9.8817328)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.6379835,0,0,0.6379835,-67.554612,-15.189295)"
d="M 833.03006,395.26932 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="path6903"
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)"
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;stroke-width:5.00028753;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;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 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.6379835,0,0,0.6379835,-67.554612,-15.189295)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.6317287,0,0,0.6317287,-64.581662,-12.716988)"
d="M 833.03006,395.26932 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="path6317"
style="fill:url(#linearGradient4053);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" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
id="path6327"
d="M 235.67972,13.233984 C 199.75196,13.233984 165.79894,21.722639 135.704,36.792417 L 296.72396,165.96674 L 452.81639,291.19091 C 457.1409,273.83274 459.43393,255.67894 459.43393,236.98819 C 459.43393,113.48164 359.18627,13.233985 235.67972,13.233984 z M 79.118968,77.210299 C 71.146114,85.023824 63.764822,93.431949 57.026574,102.35694 L 274.63156,209.66285 L 434.20584,288.36064 L 275.3035,193.86221 L 79.118968,77.210299 z M 24.488653,162.95322 C 20.860793,173.29149 17.984378,183.97391 15.896035,194.94138 L 260.17479,255.29332 L 422.98657,295.52794 L 260.21551,241.36595 L 24.488653,162.95322 z M 13.513722,263.49906 C 14.818764,274.53653 16.911081,285.32646 19.764749,295.81301 L 248.30394,302.32874 L 421.76487,307.29698 L 253.55725,289.23619 L 13.513722,263.49906 z M 428.50457,317.76287 L 249.79034,336.84174 L 47.782384,358.40473 C 53.741585,367.60372 60.347088,376.34577 67.553549,384.54909 L 244.45559,351.80755 L 428.50457,317.76287 z M 442.28941,322.97545 L 253.92376,385.15994 L 120.92144,429.05966 C 154.48464,449.16902 193.73296,460.72203 235.67972,460.72204 C 328.7226,460.72204 408.56552,403.84299 442.28941,322.97545 z"
style="fill:url(#linearGradient4055);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" />
<path
id="path3203"
d="M 235.67972,13.233984 C 199.75196,13.233984 165.79894,21.722639 135.704,36.792417 L 296.72396,165.96674 L 349.27738,208.13573 C 388.42508,203.26072 423.85383,195.91016 453.73266,186.69491 C 430.89209,87.375898 341.89666,13.233985 235.67972,13.233984 z M 79.118968,77.210299 C 71.146114,85.023824 63.764822,93.431949 57.026574,102.35694 L 274.63156,209.66285 L 282.95948,213.77591 C 290.87301,213.39575 298.68426,212.91815 306.39574,212.35059 L 275.3035,193.86221 L 79.118968,77.210299 z M 24.488653,162.95322 C 21.826867,170.53849 19.56686,178.3145 17.728584,186.24695 C 60.352717,199.56405 114.44154,209.03001 174.67621,212.92072 L 24.488653,162.95322 z"
style="fill:url(#linearGradient4057);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" />
</g>
<g
id="g4025"
transform="translate(-0.9881736,-11.858079)">
<g
id="g3202"
transform="matrix(0.6515729,0,0,0.6515729,482.27854,11.483464)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.9791437,0,0,0.9791437,6.955563,-15.153813)"
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="path3204"
style="opacity:1;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)"
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="opacity:1;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"
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 117.59262,395.26932 A 357.71872,357.71872 0 1 1 833.03006,395.26932 z"
transform="matrix(0.9791437,0,0,0.9791437,6.955563,-15.153813)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
transform="matrix(0.9695442,0,0,0.9695442,11.51829,-11.359445)"
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="path3208"
style="opacity:1;fill:url(#linearGradient4047);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" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/raoul/openlp-logo-0.2.png"
id="path3210"
d="M 472.34375,28.46875 C 417.2037,28.46875 365.09439,41.496693 318.90625,64.625 L 566.03125,262.875 L 805.59375,455.0625 C 812.23078,428.42209 815.75,400.56059 815.75,371.875 C 815.75,182.3236 661.89515,28.468751 472.34375,28.46875 z M 232.0625,126.65625 C 219.82618,138.64804 208.49776,151.55239 198.15625,165.25 L 532.125,329.9375 L 777.03125,450.71875 L 533.15625,305.6875 L 232.0625,126.65625 z M 148.21875,258.25 C 142.6509,274.11664 138.23633,290.51145 135.03125,307.34375 L 509.9375,399.96875 L 759.8125,461.71875 L 510,378.59375 L 148.21875,258.25 z M 131.375,412.5625 C 133.37791,429.50222 136.58909,446.06205 140.96875,462.15625 L 491.71875,472.15625 L 757.9375,479.78125 L 499.78125,452.0625 L 131.375,412.5625 z M 768.28125,495.84375 L 494,525.125 L 183.96875,558.21875 C 193.11462,572.33688 203.2524,585.75373 214.3125,598.34375 L 485.8125,548.09375 L 768.28125,495.84375 z M 789.4375,503.84375 L 500.34375,599.28125 L 296.21875,666.65625 C 347.72979,697.51903 407.96606,715.24999 472.34375,715.25 C 615.1411,715.25 737.67984,627.95502 789.4375,503.84375 z"
style="opacity:1;fill:url(#linearGradient4049);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" />
<path
id="path3212"
d="M 472.34375,28.46875 C 417.2037,28.46875 365.09439,41.496693 318.90625,64.625 L 566.03125,262.875 L 646.6875,327.59375 C 706.76934,320.11184 761.14353,308.83058 807,294.6875 C 771.94549,142.25788 635.35996,28.468751 472.34375,28.46875 z M 232.0625,126.65625 C 219.82618,138.64804 208.49776,151.55239 198.15625,165.25 L 532.125,329.9375 L 544.90625,336.25 C 557.05152,335.66655 569.03982,334.93356 580.875,334.0625 L 533.15625,305.6875 L 232.0625,126.65625 z M 148.21875,258.25 C 144.13358,269.89147 140.66504,281.82569 137.84375,294 C 203.26104,314.43839 286.27373,328.96625 378.71875,334.9375 L 148.21875,258.25 z"
style="opacity:1;fill:url(#linearGradient4051);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" />
</g>
<g
style="fill:#ffffff;fill-opacity:1;filter:url(#filter4005)"
id="g2762"
transform="matrix(0.8481394,0,0,0.8481394,20.507371,-653.75135)">
<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.8481394,0,0,0.8481394,20.507371,-653.75135)"
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="path3231" />
<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="path3233" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB