diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index a823368e0..a4f1aedc0 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -91,9 +91,12 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): QtCore.QObject.connect(self.wordsOfWorshipRemoveButton, QtCore.SIGNAL(u'clicked()'), self.onWordsOfWorshipRemoveButtonClicked) - QtCore.QObject.connect(self.songsOfFellowshipBrowseButton, + QtCore.QObject.connect(self.songsOfFellowshipAddButton, QtCore.SIGNAL(u'clicked()'), - self.onSongsOfFellowshipBrowseButtonClicked) + self.onSongsOfFellowshipAddButtonClicked) + QtCore.QObject.connect(self.songsOfFellowshipRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onSongsOfFellowshipRemoveButtonClicked) QtCore.QObject.connect(self.genericBrowseButton, QtCore.SIGNAL(u'clicked()'), self.onGenericBrowseButtonClicked) @@ -279,13 +282,16 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): def onWordsOfWorshipRemoveButtonClicked(self): self.removeSelectedItems(self.wordsOfWorshipFileListWidget) - def onSongsOfFellowshipBrowseButtonClicked(self): - self.getFileName( + def onSongsOfFellowshipAddButtonClicked(self): + self.getFiles( translate('SongsPlugin.ImportWizardForm', - 'Select Songs of Fellowship File'), - self.songsOfFellowshipFilenameEdit + 'Select Songs of Fellowship Files'), + self.songsOfFellowshipFileListWidget ) + def onSongsOfFellowshipRemoveButtonClicked(self): + self.removeSelectedItems(self.songsOfFellowshipFileListWidget) + def onGenericBrowseButtonClicked(self): self.getFileName( translate('SongsPlugin.ImportWizardForm', @@ -318,7 +324,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): self.openSongFileListWidget.clear() self.wordsOfWorshipFileListWidget.clear() self.ccliFileListWidget.clear() - self.songsOfFellowshipFilenameEdit.setText(u'') + self.songsOfFellowshipFileListWidget.clear() self.genericFilenameEdit.setText(u'') #self.csvFilenameEdit.setText(u'') @@ -378,7 +384,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): elif source_format == SongFormat.SongsOfFellowship: # Import a Songs of Fellowship RTF file importer = self.plugin.importSongs(SongFormat.SongsOfFellowship, - filename=unicode(self.songsOfFellowshipFilenameEdit.text()) + filenames=self.getListOfFiles(self.songsOfFellowshipFileListWidget) ) success = importer.do_import() if success: diff --git a/openlp/plugins/songs/forms/songimportwizard.py b/openlp/plugins/songs/forms/songimportwizard.py index cf245c99c..20de94721 100644 --- a/openlp/plugins/songs/forms/songimportwizard.py +++ b/openlp/plugins/songs/forms/songimportwizard.py @@ -238,55 +238,75 @@ class Ui_SongImportWizard(object): self.formatStackedWidget.addWidget(self.wordsOfWorshipPage) # CCLI File import self.ccliPage = QtGui.QWidget() - self.ccliPage.setObjectName(u'CCLIPage') + 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.ccliLayout.setObjectName(u'ccliLayout') self.ccliFileListWidget = QtGui.QListWidget(self.ccliPage) self.ccliFileListWidget.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) - self.ccliFileListWidget.setObjectName(u'CCLIFileListWidget') + self.ccliFileListWidget.setObjectName(u'ccliFileListWidget') self.ccliLayout.addWidget(self.ccliFileListWidget) self.ccliButtonLayout = QtGui.QHBoxLayout() self.ccliButtonLayout.setSpacing(8) - self.ccliButtonLayout.setObjectName(u'CCLIButtonLayout') + self.ccliButtonLayout.setObjectName(u'ccliButtonLayout') self.ccliAddButton = QtGui.QPushButton(self.ccliPage) self.ccliAddButton.setIcon(openIcon) - self.ccliAddButton.setObjectName(u'CCLIAddButton') + 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.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') - self.songsOfFellowshipLayout = QtGui.QFormLayout(self.songsOfFellowshipPage) + self.songsOfFellowshipLayout = QtGui.QVBoxLayout(self.songsOfFellowshipPage) self.songsOfFellowshipLayout.setMargin(0) self.songsOfFellowshipLayout.setSpacing(8) self.songsOfFellowshipLayout.setObjectName(u'songsOfFellowshipLayout') - self.songsOfFellowshipFilenameLabel = QtGui.QLabel(self.songsOfFellowshipPage) - self.songsOfFellowshipFilenameLabel.setObjectName(u'songsOfFellowshipFilenameLabel') - self.songsOfFellowshipLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.songsOfFellowshipFilenameLabel) - self.songsOfFellowshipFileLayout = QtGui.QHBoxLayout() - self.songsOfFellowshipFileLayout.setSpacing(8) - self.songsOfFellowshipFileLayout.setObjectName(u'songsOfFellowshipFileLayout') - self.songsOfFellowshipFilenameEdit = QtGui.QLineEdit(self.songsOfFellowshipPage) - self.songsOfFellowshipFilenameEdit.setObjectName(u'songsOfFellowshipFilenameEdit') - self.songsOfFellowshipFileLayout.addWidget(self.songsOfFellowshipFilenameEdit) - self.songsOfFellowshipBrowseButton = QtGui.QToolButton(self.songsOfFellowshipPage) - self.songsOfFellowshipBrowseButton.setIcon(openIcon) - self.songsOfFellowshipBrowseButton.setObjectName(u'songsOfFellowshipBrowseButton') - self.songsOfFellowshipFileLayout.addWidget(self.songsOfFellowshipBrowseButton) - self.songsOfFellowshipLayout.setLayout(0, QtGui.QFormLayout.FieldRole, - self.songsOfFellowshipFileLayout) + self.songsOfFellowshipFileListWidget = QtGui.QListWidget(self.songsOfFellowshipPage) + self.songsOfFellowshipFileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.songsOfFellowshipFileListWidget.setObjectName(u'songsOfFellowshipFileListWidget') + self.songsOfFellowshipLayout.addWidget(self.songsOfFellowshipFileListWidget) + self.songsOfFellowshipButtonLayout = QtGui.QHBoxLayout() + self.songsOfFellowshipButtonLayout.setSpacing(8) + self.songsOfFellowshipButtonLayout.setObjectName(u'songsOfFellowshipButtonLayout') + self.songsOfFellowshipAddButton = QtGui.QPushButton(self.songsOfFellowshipPage) + self.songsOfFellowshipAddButton.setIcon(openIcon) + self.songsOfFellowshipAddButton.setObjectName(u'songsOfFellowshipAddButton') + self.songsOfFellowshipButtonLayout.addWidget(self.songsOfFellowshipAddButton) + self.songsOfFellowshipButtonSpacer = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.songsOfFellowshipButtonLayout.addItem(self.songsOfFellowshipButtonSpacer) + self.songsOfFellowshipRemoveButton = QtGui.QPushButton(self.songsOfFellowshipPage) + self.songsOfFellowshipRemoveButton.setIcon(deleteIcon) + self.songsOfFellowshipRemoveButton.setObjectName(u'songsOfFellowshipRemoveButton') + self.songsOfFellowshipButtonLayout.addWidget(self.songsOfFellowshipRemoveButton) + self.songsOfFellowshipLayout.addLayout(self.songsOfFellowshipButtonLayout) +# self.songsOfFellowshipFilenameLabel = QtGui.QLabel(self.songsOfFellowshipPage) +# self.songsOfFellowshipFilenameLabel.setObjectName(u'songsOfFellowshipFilenameLabel') +# self.songsOfFellowshipLayout.setWidget(0, QtGui.QFormLayout.LabelRole, +# self.songsOfFellowshipFilenameLabel) +# self.songsOfFellowshipFileLayout = QtGui.QHBoxLayout() +# self.songsOfFellowshipFileLayout.setSpacing(8) +# self.songsOfFellowshipFileLayout.setObjectName(u'songsOfFellowshipFileLayout') +# self.songsOfFellowshipFilenameEdit = QtGui.QLineEdit(self.songsOfFellowshipPage) +# self.songsOfFellowshipFilenameEdit.setObjectName(u'songsOfFellowshipFilenameEdit') +# self.songsOfFellowshipFileLayout.addWidget(self.songsOfFellowshipFilenameEdit) +# self.songsOfFellowshipBrowseButton = QtGui.QToolButton(self.songsOfFellowshipPage) +# self.songsOfFellowshipBrowseButton.setIcon(openIcon) +# self.songsOfFellowshipBrowseButton.setObjectName(u'songsOfFellowshipBrowseButton') +# self.songsOfFellowshipFileLayout.addWidget(self.songsOfFellowshipBrowseButton) +# self.songsOfFellowshipLayout.setLayout(0, QtGui.QFormLayout.FieldRole, +# self.songsOfFellowshipFileLayout) self.formatStackedWidget.addWidget(self.songsOfFellowshipPage) # Generic Document/Presentation import self.genericPage = QtGui.QWidget() @@ -422,10 +442,10 @@ class Ui_SongImportWizard(object): translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.ccliRemoveButton.setText( translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) - self.songsOfFellowshipFilenameLabel.setText( - translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.songsOfFellowshipBrowseButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Browse...')) + self.songsOfFellowshipAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.songsOfFellowshipRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) self.genericFilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) self.genericBrowseButton.setText( diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py new file mode 100644 index 000000000..7410a5184 --- /dev/null +++ b/openlp/plugins/songs/lib/importer.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2010 Raoul Snyman # +# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from opensongimport import OpenSongImport +from olpimport import OpenLPSongImport +try: + from sofimport import SofImport + from oooimport import OooImport +except ImportError: + pass + +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 + ] + +__all__ = [u'SongFormat'] diff --git a/resources/images/openlp-logo.svg b/resources/images/openlp-logo.svg index 81c1c3f8a..c5e7985e1 100644 --- a/resources/images/openlp-logo.svg +++ b/resources/images/openlp-logo.svg @@ -10,8 +10,8 @@ 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" + width="467.39178" + height="467.39178" id="svg5740" sodipodi:version="0.32" inkscape:version="0.47 r22583" @@ -66,7 +66,8 @@ id="perspective5748" /> + id="filter6926" + color-interpolation-filters="sRGB"> - - - + style="display:inline" + transform="translate(-11.872025,-13.171852)" /> + style="display:inline" + transform="translate(-11.872025,-13.171852)" /> + style="display:inline" + transform="translate(-11.872025,-13.171852)" /> + style="display:inline" + transform="translate(-11.872025,-13.171852)" /> + style="display:inline" + transform="translate(-11.872025,-13.171852)"> @@ -322,14 +320,14 @@ 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)" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;filter:url(#filter6926)" sodipodi:type="arc" /> + d="m 235.67972,13.233984 c -35.92776,0 -69.88078,8.488655 -99.97572,23.558433 L 296.72396,165.96674 452.81639,291.19091 c 4.32451,-17.35817 6.61754,-35.51197 6.61754,-54.20272 0,-123.50655 -100.24766,-223.754205 -223.75421,-223.754206 z M 79.118968,77.210299 C 71.146114,85.023824 63.764822,93.431949 57.026574,102.35694 L 274.63156,209.66285 434.20584,288.36064 275.3035,193.86221 79.118968,77.210299 z M 24.488653,162.95322 c -3.62786,10.33827 -6.504275,21.02069 -8.592618,31.98816 L 260.17479,255.29332 422.98657,295.52794 260.21551,241.36595 24.488653,162.95322 z M 13.513722,263.49906 c 1.305042,11.03747 3.397359,21.8274 6.251027,32.31395 l 228.539191,6.51573 173.46093,4.96824 L 253.55725,289.23619 13.513722,263.49906 z M 428.50457,317.76287 249.79034,336.84174 47.782384,358.40473 c 5.959201,9.19899 12.564704,17.94104 19.771165,26.14436 L 244.45559,351.80755 428.50457,317.76287 z m 13.78484,5.21258 -188.36565,62.18449 -133.00232,43.89972 c 33.5632,20.10936 72.81152,31.66237 114.75828,31.66238 93.04288,0 172.8858,-56.87905 206.60969,-137.74659 z" + style="fill:url(#linearGradient4055);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" /> + d="m 235.67972,13.233984 c -35.92776,0 -69.88078,8.488655 -99.97572,23.558433 l 161.01996,129.174323 52.55342,42.16899 c 39.1477,-4.87501 74.57645,-12.22557 104.45528,-21.44082 C 430.89209,87.375898 341.89666,13.233985 235.67972,13.233984 z M 79.118968,77.210299 c -7.972854,7.813525 -15.354146,16.22165 -22.092394,25.146641 l 217.604986,107.30591 8.32792,4.11306 c 7.91353,-0.38016 15.72478,-0.85776 23.43626,-1.42532 L 275.3035,193.86221 79.118968,77.210299 z M 24.488653,162.95322 c -2.661786,7.58527 -4.921793,15.36128 -6.760069,23.29373 42.624133,13.3171 96.712956,22.78306 156.947626,26.67377 L 24.488653,162.95322 z" + style="fill:url(#linearGradient4057);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />