diff --git a/openlp.pyw b/openlp.pyw index fb96ef17c..074cd489f 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -47,7 +47,6 @@ QMainWindow::separator QDockWidget::title { - /*background: palette(dark);*/ border: 1px solid palette(dark); padding-left: 5px; padding-top: 2px; diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 196329ca8..df3fc675d 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -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): diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 9524e8981..48e32b983 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -25,59 +25,82 @@ ############################################################################### import logging +import os 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__) class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): """ - This is the Bible Import Wizard, which allows easy importing of Bibles - into OpenLP from other formats like OSIS, CSV and OpenSong. + This is the Song Import Wizard, which allows easy importing of Songs + into OpenLP from other formats like OpenLyrics, OpenSong and CCLI. """ - log.info(u'BibleImportForm loaded') + log.info(u'SongImportForm loaded') - def __init__(self, parent, manager, songsplugin): + def __init__(self, parent, plugin): """ Instantiate the wizard, and run any extra setup we need to. ``parent`` The QWidget-derived parent of the wizard. - ``config`` - The configuration object for storing and retrieving settings. - - ``manager`` - The Bible manager. - - ``bibleplugin`` - The Bible plugin. + ``plugin`` + The songs plugin. """ QtGui.QWizard.__init__(self, parent) self.setupUi(self) self.registerFields() self.finishButton = self.button(QtGui.QWizard.FinishButton) self.cancelButton = self.button(QtGui.QWizard.CancelButton) - self.manager = manager - self.songsplugin = songsplugin - #self.manager.set_process_dialog(self) -# QtCore.QObject.connect(self.OsisFileButton, -# QtCore.SIGNAL(u'clicked()'), -# self.onOsisFileButtonClicked) -# QtCore.QObject.connect(self.BooksFileButton, -# QtCore.SIGNAL(u'clicked()'), -# self.onBooksFileButtonClicked) -# QtCore.QObject.connect(self.CsvVersesFileButton, -# QtCore.SIGNAL(u'clicked()'), -# self.onCsvVersesFileButtonClicked) -# QtCore.QObject.connect(self.OpenSongBrowseButton, -# QtCore.SIGNAL(u'clicked()'), -# self.onOpenSongBrowseButtonClicked) + self.plugin = plugin + QtCore.QObject.connect(self.openLP2BrowseButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenLP2BrowseButtonClicked) + QtCore.QObject.connect(self.openLP1BrowseButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenLP1BrowseButtonClicked) + QtCore.QObject.connect(self.openLyricsAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenLyricsAddButtonClicked) + QtCore.QObject.connect(self.openLyricsRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenLyricsRemoveButtonClicked) + QtCore.QObject.connect(self.openSongAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenSongAddButtonClicked) + QtCore.QObject.connect(self.openSongRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onOpenSongRemoveButtonClicked) + QtCore.QObject.connect(self.wordsOfWorshipAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onWordsOfWorshipAddButtonClicked) + QtCore.QObject.connect(self.wordsOfWorshipRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onWordsOfWorshipRemoveButtonClicked) + QtCore.QObject.connect(self.ccliAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onCCLIAddButtonClicked) + QtCore.QObject.connect(self.ccliRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onCCLIRemoveButtonClicked) + QtCore.QObject.connect(self.songsOfFellowshipAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onSongsOfFellowshipAddButtonClicked) + QtCore.QObject.connect(self.songsOfFellowshipRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onSongsOfFellowshipRemoveButtonClicked) + QtCore.QObject.connect(self.genericAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onGenericAddButtonClicked) + QtCore.QObject.connect(self.genericRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onGenericRemoveButtonClicked) QtCore.QObject.connect(self.cancelButton, QtCore.SIGNAL(u'clicked(bool)'), self.onCancelButtonClicked) @@ -101,154 +124,304 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard): return True elif self.currentId() == 1: # Select page - source_format = self.field(u'source_format').toInt()[0] - if source_format == SongFormat.OpenLyrics: - if self.OpenLyricsFileListWidget.count() == 0: + source_format = self.formatComboBox.currentIndex() + if source_format == SongFormat.OpenLP2: + if self.openLP2FilenameEdit.text().isEmpty(): + QtGui.QMessageBox.critical(self, + translate('SongsPlugin.ImportWizardForm', + 'No OpenLP 2.0 Song Database Selected'), + translate('SongsPlugin.ImportWizardForm', + 'You need to select an OpenLP 2.0 song database ' + 'file to import from.')) + self.openLP2BrowseButton.setFocus() + return False + elif source_format == SongFormat.OpenLP1: + if self.openSongFilenameEdit.text().isEmpty(): + QtGui.QMessageBox.critical(self, + translate('SongsPlugin.ImportWizardForm', + 'No openlp.org 1.x Song Database Selected'), + translate('SongsPlugin.ImportWizardForm', + 'You need to select an openlp.org 1.x song ' + 'database file to import from.')) + self.openLP1BrowseButton.setFocus() + return False + elif source_format == SongFormat.OpenLyrics: + if self.openLyricsFileListWidget.count() == 0: QtGui.QMessageBox.critical(self, translate('SongsPlugin.ImportWizardForm', 'No OpenLyrics Files Selected'), translate('SongsPlugin.ImportWizardForm', 'You need to add at least one OpenLyrics ' 'song file to import from.')) - self.OpenLyricsAddButton.setFocus() + self.openLyricsAddButton.setFocus() return False elif source_format == SongFormat.OpenSong: - if self.OpenSongFileListWidget.count() == 0: + if self.openSongFileListWidget.count() == 0: QtGui.QMessageBox.critical(self, translate('SongsPlugin.ImportWizardForm', 'No OpenSong Files Selected'), translate('SongsPlugin.ImportWizardForm', 'You need to add at least one OpenSong ' 'song file to import from.')) - self.OpenSongAddButton.setFocus() + self.openSongAddButton.setFocus() + return False + elif source_format == SongFormat.WordsOfWorship: + if self.wordsOfWorshipListWidget.count() == 0: + QtGui.QMessageBox.critical(self, + translate('SongsPlugin.ImportWizardForm', + 'No Words of Worship Files Selected'), + translate('SongsPlugin.ImportWizardForm', + 'You need to add at least one Words of Worship ' + 'file to import from.')) + self.wordsOfWorshipAddButton.setFocus() return False elif source_format == SongFormat.CCLI: - if self.CCLIFileListWidget.count() == 0: + 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.CSV: - if self.CSVFilenameEdit.text().isEmpty(): + elif source_format == SongFormat.SongsOfFellowship: + if self.songsOfFellowshipFileListWidget.count() == 0: QtGui.QMessageBox.critical(self, translate('SongsPlugin.ImportWizardForm', - 'No CSV File Selected'), + 'No Songs of Fellowship File Selected'), translate('SongsPlugin.ImportWizardForm', - 'You need to specify a CSV file to import from.')) - self.CSVFilenameEdit.setFocus() + 'You need to add at least one Songs of Fellowship ' + 'file to import from.')) + self.songsOfFellowshipAddButton.setFocus() + return False + elif source_format == SongFormat.Generic: + if self.genericFileListWidget.count() == 0: + QtGui.QMessageBox.critical(self, + translate('SongsPlugin.ImportWizardForm', + 'No Document/Presentation Selected'), + translate('SongsPlugin.ImportWizardForm', + 'You need to add at least one document or ' + 'presentation file to import from.')) + self.genericAddButton.setFocus() return False return True elif self.currentId() == 2: # Progress page return True + def getFileName(self, title, editbox): + filename = QtGui.QFileDialog.getOpenFileName(self, title, + SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + if filename: + editbox.setText(filename) + SettingsManager.set_last_dir( + self.plugin.settingsSection, + os.path.split(unicode(filename))[0], 1) + + def getFiles(self, title, listbox): + filenames = QtGui.QFileDialog.getOpenFileNames(self, title, + SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + if filenames: + listbox.addItems(filenames) + SettingsManager.set_last_dir( + 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).text())) + return files + + def removeSelectedItems(self, listbox): + for item in listbox.selectedItems(): + item = listbox.takeItem(listbox.row(item)) + del item + + def onOpenLP2BrowseButtonClicked(self): + self.getFileName( + translate('SongsPlugin.ImportWizardForm', + 'Select OpenLP 2.0 Database File'), + self.openLP2FilenameEdit + ) + + def onOpenLP1BrowseButtonClicked(self): + self.getFileName( + translate('SongsPlugin.ImportWizardForm', + 'Select openlp.org 1.x Database File'), + self.openLP1FilenameEdit + ) + + def onOpenLyricsAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select OpenLyrics Files'), + self.openLyricsFileListWidget + ) + + def onOpenLyricsRemoveButtonClicked(self): + self.removeSelectedItems(self.openLyricsFileListWidget) + + def onOpenSongAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select Open Song Files'), + self.openSongFileListWidget + ) + + def onOpenSongRemoveButtonClicked(self): + self.removeSelectedItems(self.openSongFileListWidget) + + def onWordsOfWorshipAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select Words of Worship Files'), + self.wordsOfWorshipFileListWidget + ) + + def onWordsOfWorshipRemoveButtonClicked(self): + self.removeSelectedItems(self.wordsOfWorshipFileListWidget) + + def onCCLIAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select CCLI Files'), + self.ccliFileListWidget + ) + + def onCCLIRemoveButtonClicked(self): + self.removeSelectedItems(self.ccliFileListWidget) + + def onSongsOfFellowshipAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select Songs of Fellowship Files'), + self.songsOfFellowshipFileListWidget + ) + + def onSongsOfFellowshipRemoveButtonClicked(self): + self.removeSelectedItems(self.songsOfFellowshipFileListWidget) + + def onGenericAddButtonClicked(self): + self.getFiles( + translate('SongsPlugin.ImportWizardForm', + 'Select Document/Presentation Files'), + self.genericFileListWidget + ) + + def onGenericRemoveButtonClicked(self): + self.removeSelectedItems(self.genericFileListWidget) + def onCancelButtonClicked(self, checked): """ Stop the import on pressing the cancel button. """ log.debug('Cancel button pressed!') if self.currentId() == 3: - Receiver.send_message(u'openlp_stop_song_import') + Receiver.send_message(u'song_stop_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.OpenLyricsFileListWidget.clear() - self.OpenSongFileListWidget.clear() - self.CCLIFileListWidget.clear() - self.CSVFilenameEdit.setText(u'') + 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.songsOfFellowshipFileListWidget.clear() + self.genericFileListWidget.clear() + #self.csvFilenameEdit.setText(u'') - def getFileName(self, title, editbox): - filename = QtGui.QFileDialog.getOpenFileName(self, title, - SettingsManager.get_last_dir(self.songsplugin.settingsSection, 1)) - if filename: - editbox.setText(filename) - SettingsManager.set_last_dir(self.songsplugin.settingsSection, - filename, 1) - - def incrementProgressBar(self, status_text): + def incrementProgressBar(self, status_text, increment=1): log.debug(u'IncrementBar %s', status_text) - self.ImportProgressLabel.setText(status_text) - self.ImportProgressBar.setValue(self.ImportProgressBar.value() + 1) - Receiver.send_message(u'process_events') + if status_text: + self.importProgressLabel.setText(status_text) + if increment > 0: + self.importProgressBar.setValue(self.importProgressBar.value() + + increment) + Receiver.send_message(u'openlp_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') + Receiver.send_message(u'openlp_process_events') def performImport(self): - pass -# source_format = self.field(u'source_format').toInt()[0] -# importer = None -# if bible_type == BibleFormat.OSIS: -# # Import an OSIS bible -# importer = self.manager.import_bible(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, + filenames=self.getListOfFiles( + self.songsOfFellowshipFileListWidget) + ) + elif source_format == SongFormat.Generic: + # Import a generic document or presentatoin + importer = self.plugin.importSongs(SongFormat.Generic, + filenames=self.getListOfFiles(self.genericFileListWidget) + ) + 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') + Receiver.send_message(u'openlp_process_events') diff --git a/openlp/plugins/songs/forms/songimportwizard.py b/openlp/plugins/songs/forms/songimportwizard.py index 4008526c1..f1898d107 100644 --- a/openlp/plugins/songs/forms/songimportwizard.py +++ b/openlp/plugins/songs/forms/songimportwizard.py @@ -29,247 +29,425 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, translate class Ui_SongImportWizard(object): - def setupUi(self, SongImportWizard): - SongImportWizard.setObjectName(u'SongImportWizard') - SongImportWizard.resize(550, 386) - SongImportWizard.setModal(True) - SongImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle) - SongImportWizard.setOptions( + def setupUi(self, songImportWizard): + openIcon = build_icon(u':/general/general_open.png') + deleteIcon = build_icon(u':/general/general_delete.png') + songImportWizard.setObjectName(u'songImportWizard') + songImportWizard.resize(550, 386) + songImportWizard.setModal(True) + songImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle) + songImportWizard.setOptions( 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.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.OpenLyricsPage = QtGui.QWidget() - self.OpenLyricsPage.setObjectName(u'OpenLyricsPage') - self.OpenLyricsLayout = QtGui.QVBoxLayout(self.OpenLyricsPage) - self.OpenLyricsLayout.setSpacing(8) - self.OpenLyricsLayout.setMargin(0) - self.OpenLyricsLayout.setObjectName(u'OpenLyricsLayout') - self.OpenLyricsFileListWidget = QtGui.QListWidget(self.OpenLyricsPage) - self.OpenLyricsFileListWidget.setObjectName(u'OpenLyricsFileListWidget') - self.OpenLyricsLayout.addWidget(self.OpenLyricsFileListWidget) - self.OpenLyricsButtonLayout = QtGui.QHBoxLayout() - self.OpenLyricsButtonLayout.setSpacing(8) - self.OpenLyricsButtonLayout.setObjectName(u'OpenLyricsButtonLayout') - self.OpenLyricsAddButton = QtGui.QPushButton(self.OpenLyricsPage) - openIcon = build_icon(u':/general/general_open.png') - self.OpenLyricsAddButton.setIcon(openIcon) - self.OpenLyricsAddButton.setObjectName(u'OpenLyricsAddButton') - self.OpenLyricsButtonLayout.addWidget(self.OpenLyricsAddButton) - self.OpenLyricsButtonSpacer = QtGui.QSpacerItem(40, 20, + 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') + self.openLP2Layout = QtGui.QFormLayout(self.openLP2Page) + self.openLP2Layout.setMargin(0) + self.openLP2Layout.setSpacing(8) + self.openLP2Layout.setObjectName(u'openLP2Layout') + self.openLP2FilenameLabel = QtGui.QLabel(self.openLP2Page) + self.openLP2FilenameLabel.setObjectName(u'openLP2FilenameLabel') + self.openLP2Layout.setWidget(0, QtGui.QFormLayout.LabelRole, + self.openLP2FilenameLabel) + self.openLP2FileLayout = QtGui.QHBoxLayout() + self.openLP2FileLayout.setSpacing(8) + self.openLP2FileLayout.setObjectName(u'openLP2FileLayout') + self.openLP2FilenameEdit = QtGui.QLineEdit(self.openLP2Page) + self.openLP2FilenameEdit.setObjectName(u'openLP2FilenameEdit') + self.openLP2FileLayout.addWidget(self.openLP2FilenameEdit) + self.openLP2BrowseButton = QtGui.QToolButton(self.openLP2Page) + self.openLP2BrowseButton.setIcon(openIcon) + self.openLP2BrowseButton.setObjectName(u'openLP2BrowseButton') + self.openLP2FileLayout.addWidget(self.openLP2BrowseButton) + self.openLP2Layout.setLayout(0, QtGui.QFormLayout.FieldRole, + self.openLP2FileLayout) + self.formatStackedWidget.addWidget(self.openLP2Page) + # openlp.org 1.x + self.openLP1Page = QtGui.QWidget() + self.openLP1Page.setObjectName(u'openLP1Page') + self.openLP1Layout = QtGui.QFormLayout(self.openLP1Page) + self.openLP1Layout.setMargin(0) + self.openLP1Layout.setSpacing(8) + self.openLP1Layout.setObjectName(u'openLP1Layout') + self.openLP1FilenameLabel = QtGui.QLabel(self.openLP1Page) + self.openLP1FilenameLabel.setObjectName(u'openLP1FilenameLabel') + self.openLP1Layout.setWidget(0, QtGui.QFormLayout.LabelRole, + self.openLP1FilenameLabel) + self.openLP1FileLayout = QtGui.QHBoxLayout() + self.openLP1FileLayout.setSpacing(8) + self.openLP1FileLayout.setObjectName(u'openLP1FileLayout') + self.openLP1FilenameEdit = QtGui.QLineEdit(self.openLP1Page) + self.openLP1FilenameEdit.setObjectName(u'openLP1FilenameEdit') + self.openLP1FileLayout.addWidget(self.openLP1FilenameEdit) + self.openLP1BrowseButton = QtGui.QToolButton(self.openLP1Page) + self.openLP1BrowseButton.setIcon(openIcon) + self.openLP1BrowseButton.setObjectName(u'openLP1BrowseButton') + self.openLP1FileLayout.addWidget(self.openLP1BrowseButton) + self.openLP1Layout.setLayout(0, QtGui.QFormLayout.FieldRole, + self.openLP1FileLayout) + self.formatStackedWidget.addWidget(self.openLP1Page) + # OpenLyrics + self.openLyricsPage = QtGui.QWidget() + self.openLyricsPage.setObjectName(u'OpenLyricsPage') + self.openLyricsLayout = QtGui.QVBoxLayout(self.openLyricsPage) + self.openLyricsLayout.setSpacing(8) + self.openLyricsLayout.setMargin(0) + self.openLyricsLayout.setObjectName(u'OpenLyricsLayout') + self.openLyricsFileListWidget = QtGui.QListWidget(self.openLyricsPage) + self.openLyricsFileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.openLyricsFileListWidget.setObjectName(u'OpenLyricsFileListWidget') + self.openLyricsLayout.addWidget(self.openLyricsFileListWidget) + self.openLyricsButtonLayout = QtGui.QHBoxLayout() + self.openLyricsButtonLayout.setSpacing(8) + self.openLyricsButtonLayout.setObjectName(u'OpenLyricsButtonLayout') + self.openLyricsAddButton = QtGui.QPushButton(self.openLyricsPage) + self.openLyricsAddButton.setIcon(openIcon) + self.openLyricsAddButton.setObjectName(u'OpenLyricsAddButton') + self.openLyricsButtonLayout.addWidget(self.openLyricsAddButton) + self.openLyricsButtonSpacer = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.OpenLyricsButtonLayout.addItem(self.OpenLyricsButtonSpacer) - self.OpenLyricsRemoveButton = QtGui.QPushButton(self.OpenLyricsPage) - deleteIcon = build_icon(u':/general/general_delete.png') - self.OpenLyricsRemoveButton.setIcon(deleteIcon) - self.OpenLyricsRemoveButton.setObjectName(u'OpenLyricsRemoveButton') - self.OpenLyricsButtonLayout.addWidget(self.OpenLyricsRemoveButton) - self.OpenLyricsLayout.addLayout(self.OpenLyricsButtonLayout) - self.FormatStackedWidget.addWidget(self.OpenLyricsPage) - self.OpenSongPage = QtGui.QWidget() - self.OpenSongPage.setObjectName(u'OpenSongPage') - self.OpenSongLayout = QtGui.QVBoxLayout(self.OpenSongPage) - self.OpenSongLayout.setSpacing(8) - self.OpenSongLayout.setMargin(0) - self.OpenSongLayout.setObjectName(u'OpenSongLayout') - self.OpenSongFileListWidget = QtGui.QListWidget(self.OpenSongPage) - self.OpenSongFileListWidget.setObjectName(u'OpenSongFileListWidget') - self.OpenSongLayout.addWidget(self.OpenSongFileListWidget) - self.OpenSongButtonLayout = QtGui.QHBoxLayout() - self.OpenSongButtonLayout.setSpacing(8) - self.OpenSongButtonLayout.setObjectName(u'OpenSongButtonLayout') - self.OpenSongAddButton = QtGui.QPushButton(self.OpenSongPage) - self.OpenSongAddButton.setIcon(openIcon) - self.OpenSongAddButton.setObjectName(u'OpenSongAddButton') - self.OpenSongButtonLayout.addWidget(self.OpenSongAddButton) - self.OpenSongButtonSpacer = QtGui.QSpacerItem(40, 20, + self.openLyricsButtonLayout.addItem(self.openLyricsButtonSpacer) + self.openLyricsRemoveButton = QtGui.QPushButton(self.openLyricsPage) + self.openLyricsRemoveButton.setIcon(deleteIcon) + self.openLyricsRemoveButton.setObjectName(u'OpenLyricsRemoveButton') + self.openLyricsButtonLayout.addWidget(self.openLyricsRemoveButton) + self.openLyricsLayout.addLayout(self.openLyricsButtonLayout) + self.formatStackedWidget.addWidget(self.openLyricsPage) + # Open Song + self.openSongPage = QtGui.QWidget() + self.openSongPage.setObjectName(u'OpenSongPage') + self.openSongLayout = QtGui.QVBoxLayout(self.openSongPage) + self.openSongLayout.setSpacing(8) + self.openSongLayout.setMargin(0) + self.openSongLayout.setObjectName(u'OpenSongLayout') + self.openSongFileListWidget = QtGui.QListWidget(self.openSongPage) + self.openSongFileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.openSongFileListWidget.setObjectName(u'OpenSongFileListWidget') + self.openSongLayout.addWidget(self.openSongFileListWidget) + self.openSongButtonLayout = QtGui.QHBoxLayout() + self.openSongButtonLayout.setSpacing(8) + self.openSongButtonLayout.setObjectName(u'OpenSongButtonLayout') + self.openSongAddButton = QtGui.QPushButton(self.openSongPage) + self.openSongAddButton.setIcon(openIcon) + self.openSongAddButton.setObjectName(u'OpenSongAddButton') + self.openSongButtonLayout.addWidget(self.openSongAddButton) + self.openSongButtonSpacer = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.OpenSongButtonLayout.addItem(self.OpenSongButtonSpacer) - self.OpenSongRemoveButton = QtGui.QPushButton(self.OpenSongPage) - self.OpenSongRemoveButton.setIcon(deleteIcon) - self.OpenSongRemoveButton.setObjectName(u'OpenSongRemoveButton') - self.OpenSongButtonLayout.addWidget(self.OpenSongRemoveButton) - self.OpenSongLayout.addLayout(self.OpenSongButtonLayout) - self.FormatStackedWidget.addWidget(self.OpenSongPage) - 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.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.openSongButtonLayout.addItem(self.openSongButtonSpacer) + self.openSongRemoveButton = QtGui.QPushButton(self.openSongPage) + self.openSongRemoveButton.setIcon(deleteIcon) + self.openSongRemoveButton.setObjectName(u'OpenSongRemoveButton') + self.openSongButtonLayout.addWidget(self.openSongRemoveButton) + self.openSongLayout.addLayout(self.openSongButtonLayout) + self.formatStackedWidget.addWidget(self.openSongPage) + # Words of Worship + self.wordsOfWorshipPage = QtGui.QWidget() + self.wordsOfWorshipPage.setObjectName(u'wordsOfWorshipPage') + self.wordsOfWorshipLayout = QtGui.QVBoxLayout(self.wordsOfWorshipPage) + self.wordsOfWorshipLayout.setSpacing(8) + self.wordsOfWorshipLayout.setMargin(0) + self.wordsOfWorshipLayout.setObjectName(u'wordsOfWorshipLayout') + self.wordsOfWorshipFileListWidget = QtGui.QListWidget(self.wordsOfWorshipPage) + self.wordsOfWorshipFileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.wordsOfWorshipFileListWidget.setObjectName(u'wordsOfWorshipFileListWidget') + self.wordsOfWorshipLayout.addWidget(self.wordsOfWorshipFileListWidget) + self.wordsOfWorshipButtonLayout = QtGui.QHBoxLayout() + self.wordsOfWorshipButtonLayout.setSpacing(8) + self.wordsOfWorshipButtonLayout.setObjectName(u'wordsOfWorshipButtonLayout') + self.wordsOfWorshipAddButton = QtGui.QPushButton(self.wordsOfWorshipPage) + self.wordsOfWorshipAddButton.setIcon(openIcon) + self.wordsOfWorshipAddButton.setObjectName(u'wordsOfWorshipAddButton') + self.wordsOfWorshipButtonLayout.addWidget(self.wordsOfWorshipAddButton) + self.wordsOfWorshipButtonSpacer = 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.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.wordsOfWorshipButtonLayout.addItem(self.wordsOfWorshipButtonSpacer) + self.wordsOfWorshipRemoveButton = QtGui.QPushButton(self.wordsOfWorshipPage) + self.wordsOfWorshipRemoveButton.setIcon(deleteIcon) + 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( + 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, + 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) + # Songs of Fellowship + self.songsOfFellowshipPage = QtGui.QWidget() + self.songsOfFellowshipPage.setObjectName(u'songsOfFellowshipPage') + self.songsOfFellowshipLayout = QtGui.QVBoxLayout(self.songsOfFellowshipPage) + self.songsOfFellowshipLayout.setMargin(0) + self.songsOfFellowshipLayout.setSpacing(8) + self.songsOfFellowshipLayout.setObjectName(u'songsOfFellowshipLayout') + 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.formatStackedWidget.addWidget(self.songsOfFellowshipPage) + # Generic Document/Presentation import + self.genericPage = QtGui.QWidget() + self.genericPage.setObjectName(u'genericPage') + self.genericLayout = QtGui.QVBoxLayout(self.genericPage) + self.genericLayout.setMargin(0) + self.genericLayout.setSpacing(8) + self.genericLayout.setObjectName(u'genericLayout') + self.genericFileListWidget = QtGui.QListWidget(self.genericPage) + self.genericFileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.genericFileListWidget.setObjectName(u'genericFileListWidget') + self.genericLayout.addWidget(self.genericFileListWidget) + self.genericButtonLayout = QtGui.QHBoxLayout() + self.genericButtonLayout.setSpacing(8) + self.genericButtonLayout.setObjectName(u'genericButtonLayout') + self.genericAddButton = QtGui.QPushButton(self.genericPage) + self.genericAddButton.setIcon(openIcon) + self.genericAddButton.setObjectName(u'genericAddButton') + self.genericButtonLayout.addWidget(self.genericAddButton) + self.genericButtonSpacer = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.genericButtonLayout.addItem(self.genericButtonSpacer) + self.genericRemoveButton = QtGui.QPushButton(self.genericPage) + self.genericRemoveButton.setIcon(deleteIcon) + self.genericRemoveButton.setObjectName(u'genericRemoveButton') + self.genericButtonLayout.addWidget(self.genericRemoveButton) + self.genericLayout.addLayout(self.genericButtonLayout) + 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.retranslateUi(songImportWizard) + self.formatStackedWidget.setCurrentIndex(0) + QtCore.QObject.connect(self.formatComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.FormatStackedWidget.setCurrentIndex) - QtCore.QMetaObject.connectSlotsByName(SongImportWizard) + self.formatStackedWidget.setCurrentIndex) + QtCore.QMetaObject.connectSlotsByName(songImportWizard) - def retranslateUi(self, SongImportWizard): - SongImportWizard.setWindowTitle( + def retranslateUi(self, songImportWizard): + songImportWizard.setWindowTitle( translate('SongsPlugin.ImportWizardForm', 'Song Import Wizard')) - self.TitleLabel.setText( + self.titleLabel.setText( u'%s' % \ translate('SongsPlugin.ImportWizardForm', 'Welcome to the Song Import Wizard')) - self.InformationLabel.setText( + 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( + self.sourcePage.setTitle( translate('SongsPlugin.ImportWizardForm', 'Select Import Source')) - self.SourcePage.setSubTitle( + 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, + translate('SongsPlugin.ImportWizardForm', 'openlp.org 1.x')) + self.formatComboBox.setItemText(2, translate('SongsPlugin.ImportWizardForm', 'OpenLyrics')) - self.FormatComboBox.setItemText(1, + self.formatComboBox.setItemText(3, translate('SongsPlugin.ImportWizardForm', 'OpenSong')) - self.FormatComboBox.setItemText(2, - translate('SongsPlugin.ImportWizardForm', 'CCLI')) - self.FormatComboBox.setItemText(3, - translate('SongsPlugin.ImportWizardForm', 'CSV')) - self.OpenLyricsAddButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Add Files...')) - self.OpenLyricsRemoveButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) - self.OpenSongAddButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Add Files...')) - self.OpenSongRemoveButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) - self.CCLIAddButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Add Files...')) - self.CCLIRemoveButton.setText( - translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) - self.CSVFilenameLabel.setText( + self.formatComboBox.setItemText(4, + translate('SongsPlugin.ImportWizardForm', 'Words of Worship')) + self.formatComboBox.setItemText(5, + translate('SongsPlugin.ImportWizardForm', 'CCLI/SongSelect')) + self.formatComboBox.setItemText(6, + translate('SongsPlugin.ImportWizardForm', 'Songs of Fellowship')) + self.formatComboBox.setItemText(7, + translate('SongsPlugin.ImportWizardForm', + 'Generic Document/Presentation')) +# self.formatComboBox.setItemText(8, +# translate('SongsPlugin.ImportWizardForm', 'CSV')) + self.openLP2FilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.CSVBrowseButton.setText( + self.openLP2BrowseButton.setText( translate('SongsPlugin.ImportWizardForm', 'Browse...')) - self.ImportPage.setTitle( + self.openLP1FilenameLabel.setText( + translate('SongsPlugin.ImportWizardForm', 'Filename:')) + self.openLP1BrowseButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Browse...')) + self.openLyricsAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.openLyricsRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.openSongAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.openSongRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.wordsOfWorshipAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.wordsOfWorshipRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.ccliAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.ccliRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.songsOfFellowshipAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.songsOfFellowshipRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.genericAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.genericRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) +# self.csvFilenameLabel.setText( +# translate('SongsPlugin.ImportWizardForm', 'Filename:')) +# self.csvBrowseButton.setText( +# translate('SongsPlugin.ImportWizardForm', 'Browse...')) + self.importPage.setTitle( translate('SongsPlugin.ImportWizardForm', 'Importing')) - self.ImportPage.setSubTitle( + 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%')) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 0e5b0bfa8..351d50071 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -26,52 +26,6 @@ from openlp.core.lib import translate -#from openlp.plugins.songs.lib import OpenLyricsSong, OpenSongSong, CCLISong, \ -# 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 - OpenLyrics = 0 - OpenSong = 1 - CCLI = 2 - CSV = 3 - - @staticmethod - def get_class(format): - """ - Return the appropriate imeplementation class. - - ``format`` - The song format. - """ -# if format == SongFormat.OpenLyrics: -# return OpenLyricsSong -# elif format == SongFormat.OpenSong: -# return OpenSongSong -# elif format == SongFormat.CCLI: -# return CCLISong -# elif format == SongFormat.CSV: -# return CSVSong -# else: - return None - - @staticmethod - def list(): - """ - Return a list of the supported song formats. - """ - return [ - SongFormat.OpenLyrics, - SongFormat.OpenSong, - SongFormat.CCLI, - SongFormat.CSV - ] - class VerseType(object): """ VerseType provides an enumeration for the tags that may be associated @@ -138,15 +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 -from songselectfileimport import SongSelectFileImport -try: - from sofimport import SofImport - from oooimport import OooImport -except ImportError: - pass diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py new file mode 100644 index 000000000..31569bb74 --- /dev/null +++ b/openlp/plugins/songs/lib/importer.py @@ -0,0 +1,90 @@ +# -*- 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 + from cclifileimport import CCLIFileImport +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 + elif format == SongFormat.CCLI: + return CCLIFileImport +# 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/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index f90136601..85ba1cf06 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -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) + self.import_wizard.exec_() + Receiver.send_message(u'songs_load_list') def onNewClick(self): self.edit_song_form.newSong() diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index eb19b67ee..a4c15718e 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -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. @@ -84,11 +85,13 @@ class OpenLPSongImport(object): ``source_db`` The database providing the data to import. """ + SongImport.__init__(self, master_manager) 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. """ diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 0456e1e06..81c2d08e2 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -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 = [] diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py old mode 100755 new mode 100644 index 80a459a80..0064be23a --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -28,20 +28,11 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, build_icon, Receiver, translate +from openlp.core.lib import Plugin, build_icon, 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 - -try: - from openlp.plugins.songs.lib import SofImport, OooImport - OOo_available = True -except ImportError: - OOo_available = False - -from openlp.plugins.songs.lib import OpenSongImport - -from openlp.plugins.songs.lib import SongSelectFileImport +from openlp.plugins.songs.lib.importer import SongFormat log = logging.getLogger(__name__) @@ -101,89 +92,6 @@ 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) - # SongSelect file import menu item - # an import wizard - self.ImportSongSelectSongItem = QtGui.QAction(import_menu) - self.ImportSongSelectSongItem.setObjectName(u'ImportSongSelectSongItem') - self.ImportSongSelectSongItem.setText(translate('SongsPlugin', - 'SongSelect File (temporary)')) - self.ImportSongSelectSongItem.setToolTip(translate('SongsPlugin', - 'Import a SongSelect song file')) - self.ImportSongSelectSongItem.setStatusTip(translate('SongsPlugin', - 'Import a SongSelect song file')) - import_menu.addAction(self.ImportSongSelectSongItem) - QtCore.QObject.connect(self.ImportSongSelectSongItem, - QtCore.SIGNAL(u'triggered()'), self.onImportSongSelectSongItemClick) def addExportMenuItem(self, export_menu): """ @@ -201,84 +109,6 @@ 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 onImportSongSelectSongItemClick(self): - filenames = QtGui.QFileDialog.getOpenFileNames( - None, translate('SongsPlugin', - 'Open SongSelect file'), - u'', u'SongSelect files (*.usr *.txt)') - try: - for filename in filenames: - importer = SongSelectFileImport(self.manager) - importer.do_import(unicode(filename)) - except: - log.exception('Could not import SongSelect file') - QtGui.QMessageBox.critical(None, - translate('SongsPlugin', 'Import Error'), - translate('SongsPlugin', 'Error importing SongSelect file')) - Receiver.send_message(u'songs_load_list') - def about(self): about_text = translate('SongsPlugin', 'Songs Plugin' '
The songs plugin provides the ability to display and ' @@ -311,3 +141,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