forked from openlp/openlp
Now the Song Wizard works, just waiting for the importers to catch up.
bzr-revno: 990
This commit is contained in:
commit
cb778ecbfe
@ -47,7 +47,6 @@ QMainWindow::separator
|
||||
|
||||
QDockWidget::title
|
||||
{
|
||||
/*background: palette(dark);*/
|
||||
border: 1px solid palette(dark);
|
||||
padding-left: 5px;
|
||||
padding-top: 2px;
|
||||
|
@ -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):
|
||||
|
@ -25,59 +25,76 @@
|
||||
###############################################################################
|
||||
|
||||
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.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 +118,294 @@ 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 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')
|
||||
|
@ -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'<span style="font-size:14pt; font-weight:600;">%s</span>' % \
|
||||
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%'))
|
||||
|
@ -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,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
|
||||
|
87
openlp/plugins/songs/lib/importer.py
Normal file
87
openlp/plugins/songs/lib/importer.py
Normal file
@ -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']
|
@ -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()
|
||||
|
@ -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.
|
||||
"""
|
||||
|
@ -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 = []
|
||||
|
@ -28,18 +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.importer import SongFormat
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@ -99,76 +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)
|
||||
|
||||
def addExportMenuItem(self, export_menu):
|
||||
"""
|
||||
@ -186,68 +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 about(self):
|
||||
about_text = translate('SongsPlugin', '<strong>Songs Plugin</strong>'
|
||||
'<br />The songs plugin provides the ability to display and '
|
||||
@ -280,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
|
||||
|
Loading…
Reference in New Issue
Block a user