← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/opensong into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/opensong into lp:openlp.

    Requested reviews:
    OpenLP Core (openlp-core)
    Tim Bentley (trb143)

-- 
https://code.launchpad.net/~raoul-snyman/openlp/opensong/+merge/16575
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/bibles/forms/__init__.py'
--- openlp/plugins/bibles/forms/__init__.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/forms/__init__.py	2009-12-24 18:07:18 +0000
@@ -23,6 +23,6 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 
-from bibleimportform import BibleImportForm
+from importwizardform import ImportWizardForm
 
-__all__ = ['BibleImportForm']
+__all__ = ['ImportWizardForm']

=== removed file 'openlp/plugins/bibles/forms/bibleimportdialog.py'
--- openlp/plugins/bibles/forms/bibleimportdialog.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/forms/bibleimportdialog.py	1970-01-01 00:00:00 +0000
@@ -1,259 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2009 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael      #
-# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
-# Carsten Tinggaard                                                           #
-# --------------------------------------------------------------------------- #
-# 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 PyQt4 import QtCore, QtGui
-
-from openlp.core.lib import build_icon
-
-class Ui_BibleImportDialog(object):
-    def setupUi(self, BibleImportDialog):
-        BibleImportDialog.setObjectName(u'BibleImportDialog')
-        BibleImportDialog.resize(500, 686)
-        icon = build_icon(u':/icon/openlp.org-icon-32.bmp')
-        BibleImportDialog.setWindowIcon(icon)
-        self.LicenceDetailsGroupBox = QtGui.QGroupBox(BibleImportDialog)
-        self.LicenceDetailsGroupBox.setGeometry(QtCore.QRect(10, 400, 480, 151))
-        self.LicenceDetailsGroupBox.setMinimumSize(QtCore.QSize(0, 123))
-        self.LicenceDetailsGroupBox.setObjectName(u'LicenceDetailsGroupBox')
-        self.formLayout = QtGui.QFormLayout(self.LicenceDetailsGroupBox)
-        self.formLayout.setMargin(8)
-        self.formLayout.setHorizontalSpacing(8)
-        self.formLayout.setObjectName(u'formLayout')
-        self.VersionNameLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
-        self.VersionNameLabel.setObjectName(u'VersionNameLabel')
-        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.VersionNameLabel)
-        self.VersionNameEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
-        self.VersionNameEdit.setObjectName(u'VersionNameEdit')
-        self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.VersionNameEdit)
-        self.CopyrightLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
-        self.CopyrightLabel.setObjectName(u'CopyrightLabel')
-        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.CopyrightLabel)
-        self.CopyrightEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
-        self.CopyrightEdit.setObjectName(u'CopyrightEdit')
-        self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.CopyrightEdit)
-        self.PermisionLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
-        self.PermisionLabel.setObjectName(u'PermisionLabel')
-        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PermisionLabel)
-        self.PermisionEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
-        self.PermisionEdit.setObjectName(u'PermisionEdit')
-        self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PermisionEdit)
-        self.MessageLabel = QtGui.QLabel(BibleImportDialog)
-        self.MessageLabel.setGeometry(QtCore.QRect(20, 670, 271, 17))
-        self.MessageLabel.setObjectName(u'MessageLabel')
-        self.ProgressGroupBox = QtGui.QGroupBox(BibleImportDialog)
-        self.ProgressGroupBox.setGeometry(QtCore.QRect(10, 550, 480, 70))
-        self.ProgressGroupBox.setObjectName(u'ProgressGroupBox')
-        self.gridLayout_3 = QtGui.QGridLayout(self.ProgressGroupBox)
-        self.gridLayout_3.setObjectName(u'gridLayout_3')
-        self.ProgressBar = QtGui.QProgressBar(self.ProgressGroupBox)
-        self.ProgressBar.setProperty(u'value', QtCore.QVariant(0))
-        self.ProgressBar.setInvertedAppearance(False)
-        self.ProgressBar.setObjectName(u'ProgressBar')
-        self.gridLayout_3.addWidget(self.ProgressBar, 0, 0, 1, 1)
-        self.layoutWidget = QtGui.QWidget(BibleImportDialog)
-        self.layoutWidget.setGeometry(QtCore.QRect(310, 630, 180, 38))
-        self.layoutWidget.setObjectName(u'layoutWidget')
-        self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget)
-        self.horizontalLayout.setMargin(6)
-        self.horizontalLayout.setObjectName(u'horizontalLayout')
-        self.ImportButton = QtGui.QPushButton(self.layoutWidget)
-        self.ImportButton.setObjectName(u'ImportButton')
-        self.horizontalLayout.addWidget(self.ImportButton)
-        self.CancelButton = QtGui.QPushButton(self.layoutWidget)
-        self.CancelButton.setObjectName(u'CancelButton')
-        self.horizontalLayout.addWidget(self.CancelButton)
-        self.tabWidget = QtGui.QTabWidget(BibleImportDialog)
-        self.tabWidget.setGeometry(QtCore.QRect(10, 30, 480, 361))
-        self.tabWidget.setObjectName(u'tabWidget')
-        self.OsisTab = QtGui.QWidget()
-        self.OsisTab.setObjectName(u'OsisTab')
-        self.OSISGroupBox = QtGui.QGroupBox(self.OsisTab)
-        self.OSISGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 141))
-        self.OSISGroupBox.setObjectName(u'OSISGroupBox')
-        self.gridLayout_2 = QtGui.QGridLayout(self.OSISGroupBox)
-        self.gridLayout_2.setObjectName(u'gridLayout_2')
-        self.horizontalLayout_2 = QtGui.QHBoxLayout()
-        self.horizontalLayout_2.setObjectName(u'horizontalLayout_2')
-        self.BibleNameLabel = QtGui.QLabel(self.OSISGroupBox)
-        self.BibleNameLabel.setObjectName(u'BibleNameLabel')
-        self.horizontalLayout_2.addWidget(self.BibleNameLabel)
-        self.BibleNameEdit = QtGui.QLineEdit(self.OSISGroupBox)
-        self.BibleNameEdit.setObjectName(u'BibleNameEdit')
-        self.horizontalLayout_2.addWidget(self.BibleNameEdit)
-        self.gridLayout_2.addLayout(self.horizontalLayout_2, 0, 0, 1, 1)
-        self.horizontalLayout_3 = QtGui.QHBoxLayout()
-        self.horizontalLayout_3.setObjectName(u'horizontalLayout_3')
-        self.LocatioLabel = QtGui.QLabel(self.OSISGroupBox)
-        self.LocatioLabel.setObjectName(u'LocatioLabel')
-        self.horizontalLayout_3.addWidget(self.LocatioLabel)
-        self.OSISLocationEdit = QtGui.QLineEdit(self.OSISGroupBox)
-        self.OSISLocationEdit.setObjectName(u'OSISLocationEdit')
-        self.horizontalLayout_3.addWidget(self.OSISLocationEdit)
-        self.OsisFileButton = QtGui.QPushButton(self.OSISGroupBox)
-        icon1 = build_icon(u':/imports/import_load.png')
-        self.OsisFileButton.setIcon(icon1)
-        self.OsisFileButton.setObjectName(u'OsisFileButton')
-        self.horizontalLayout_3.addWidget(self.OsisFileButton)
-        self.gridLayout_2.addLayout(self.horizontalLayout_3, 1, 0, 1, 1)
-        self.tabWidget.addTab(self.OsisTab, u'')
-        self.CsvTab = QtGui.QWidget()
-        self.CsvTab.setObjectName(u'CsvTab')
-        self.CVSGroupBox = QtGui.QGroupBox(self.CsvTab)
-        self.CVSGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 191))
-        self.CVSGroupBox.setObjectName(u'CVSGroupBox')
-        self.gridLayout = QtGui.QGridLayout(self.CVSGroupBox)
-        self.gridLayout.setMargin(8)
-        self.gridLayout.setSpacing(8)
-        self.gridLayout.setObjectName(u'gridLayout')
-        self.BooksLocationLabel = QtGui.QLabel(self.CVSGroupBox)
-        self.BooksLocationLabel.setObjectName(u'BooksLocationLabel')
-        self.gridLayout.addWidget(self.BooksLocationLabel, 0, 0, 1, 1)
-        self.VerseLocationLabel = QtGui.QLabel(self.CVSGroupBox)
-        self.VerseLocationLabel.setObjectName(u'VerseLocationLabel')
-        self.gridLayout.addWidget(self.VerseLocationLabel, 4, 0, 1, 1)
-        self.VerseLocationEdit = QtGui.QLineEdit(self.CVSGroupBox)
-        self.VerseLocationEdit.setObjectName(u'VerseLocationEdit')
-        self.gridLayout.addWidget(self.VerseLocationEdit, 4, 1, 1, 1)
-        self.BooksLocationEdit = QtGui.QLineEdit(self.CVSGroupBox)
-        self.BooksLocationEdit.setObjectName(u'BooksLocationEdit')
-        self.gridLayout.addWidget(self.BooksLocationEdit, 0, 1, 1, 1)
-        self.BooksFileButton = QtGui.QPushButton(self.CVSGroupBox)
-        self.BooksFileButton.setIcon(icon1)
-        self.BooksFileButton.setObjectName(u'BooksFileButton')
-        self.gridLayout.addWidget(self.BooksFileButton, 0, 2, 1, 1)
-        self.VersesFileButton = QtGui.QPushButton(self.CVSGroupBox)
-        self.VersesFileButton.setIcon(icon1)
-        self.VersesFileButton.setObjectName(u'VersesFileButton')
-        self.gridLayout.addWidget(self.VersesFileButton, 4, 2, 1, 1)
-        self.tabWidget.addTab(self.CsvTab, u'')
-        self.HttpTab = QtGui.QWidget()
-        self.HttpTab.setObjectName(u'HttpTab')
-        self.OptionsGroupBox = QtGui.QGroupBox(self.HttpTab)
-        self.OptionsGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 141))
-        self.OptionsGroupBox.setObjectName(u'OptionsGroupBox')
-        self.verticalLayout = QtGui.QVBoxLayout(self.OptionsGroupBox)
-        self.verticalLayout.setObjectName(u'verticalLayout')
-        self.horizontalLayout_4 = QtGui.QHBoxLayout()
-        self.horizontalLayout_4.setObjectName(u'horizontalLayout_4')
-        self.LocationLabel = QtGui.QLabel(self.OptionsGroupBox)
-        self.LocationLabel.setObjectName(u'LocationLabel')
-        self.horizontalLayout_4.addWidget(self.LocationLabel)
-        self.LocationComboBox = QtGui.QComboBox(self.OptionsGroupBox)
-        self.LocationComboBox.setObjectName(u'LocationComboBox')
-        self.LocationComboBox.addItem(QtCore.QString())
-        self.LocationComboBox.addItem(QtCore.QString())
-        self.horizontalLayout_4.addWidget(self.LocationComboBox)
-        self.verticalLayout.addLayout(self.horizontalLayout_4)
-        self.horizontalLayout_5 = QtGui.QHBoxLayout()
-        self.horizontalLayout_5.setObjectName(u'horizontalLayout_5')
-        self.BibleLabel = QtGui.QLabel(self.OptionsGroupBox)
-        self.BibleLabel.setObjectName(u'BibleLabel')
-        self.horizontalLayout_5.addWidget(self.BibleLabel)
-        self.BibleComboBox = QtGui.QComboBox(self.OptionsGroupBox)
-        self.BibleComboBox.setObjectName(u'BibleComboBox')
-        self.BibleComboBox.addItem(QtCore.QString())
-        self.BibleComboBox.setItemText(0, u'')
-        self.BibleComboBox.setItemText(1, u'')
-        self.BibleComboBox.addItem(QtCore.QString())
-        self.BibleComboBox.addItem(QtCore.QString())
-        self.horizontalLayout_5.addWidget(self.BibleComboBox)
-        self.verticalLayout.addLayout(self.horizontalLayout_5)
-        self.ProxyGroupBox = QtGui.QGroupBox(self.HttpTab)
-        self.ProxyGroupBox.setGeometry(QtCore.QRect(10, 160, 460, 161))
-        self.ProxyGroupBox.setObjectName(u'ProxyGroupBox')
-        self.ProxySettingsLayout = QtGui.QFormLayout(self.ProxyGroupBox)
-        self.ProxySettingsLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
-        self.ProxySettingsLayout.setMargin(8)
-        self.ProxySettingsLayout.setSpacing(8)
-        self.ProxySettingsLayout.setObjectName(u'ProxySettingsLayout')
-        self.AddressLabel = QtGui.QLabel(self.ProxyGroupBox)
-        self.AddressLabel.setObjectName(u'AddressLabel')
-        self.ProxySettingsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.AddressLabel)
-        self.AddressEdit = QtGui.QLineEdit(self.ProxyGroupBox)
-        self.AddressEdit.setObjectName(u'AddressEdit')
-        self.ProxySettingsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.AddressEdit)
-        self.UsernameLabel = QtGui.QLabel(self.ProxyGroupBox)
-        self.UsernameLabel.setObjectName(u'UsernameLabel')
-        self.ProxySettingsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.UsernameLabel)
-        self.UsernameEdit = QtGui.QLineEdit(self.ProxyGroupBox)
-        self.UsernameEdit.setObjectName(u'UsernameEdit')
-        self.ProxySettingsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.UsernameEdit)
-        self.PasswordLabel = QtGui.QLabel(self.ProxyGroupBox)
-        self.PasswordLabel.setObjectName(u'PasswordLabel')
-        self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)
-        self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)
-        self.PasswordEdit.setObjectName(u'PasswordEdit')
-        self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)
-        self.tabWidget.addTab(self.HttpTab, u'')
-
-        self.retranslateUi(BibleImportDialog)
-        self.tabWidget.setCurrentIndex(2)
-        QtCore.QMetaObject.connectSlotsByName(BibleImportDialog)
-        BibleImportDialog.setTabOrder(self.BibleNameEdit, self.OSISLocationEdit)
-        BibleImportDialog.setTabOrder(self.OSISLocationEdit, self.OsisFileButton)
-        BibleImportDialog.setTabOrder(self.OsisFileButton, self.BooksLocationEdit)
-        BibleImportDialog.setTabOrder(self.BooksLocationEdit, self.BooksFileButton)
-        BibleImportDialog.setTabOrder(self.BooksFileButton, self.VerseLocationEdit)
-        BibleImportDialog.setTabOrder(self.VerseLocationEdit, self.VersesFileButton)
-        BibleImportDialog.setTabOrder(self.VersesFileButton, self.LocationComboBox)
-        BibleImportDialog.setTabOrder(self.LocationComboBox, self.BibleComboBox)
-        BibleImportDialog.setTabOrder(self.BibleComboBox, self.AddressEdit)
-        BibleImportDialog.setTabOrder(self.AddressEdit, self.UsernameEdit)
-        BibleImportDialog.setTabOrder(self.UsernameEdit, self.PasswordEdit)
-        BibleImportDialog.setTabOrder(self.PasswordEdit, self.VersionNameEdit)
-        BibleImportDialog.setTabOrder(self.VersionNameEdit, self.CopyrightEdit)
-        BibleImportDialog.setTabOrder(self.CopyrightEdit, self.PermisionEdit)
-
-    def retranslateUi(self, BibleImportDialog):
-        BibleImportDialog.setWindowTitle(self.trUtf8('Bible Registration'))
-        self.LicenceDetailsGroupBox.setTitle(self.trUtf8('Licence Details'))
-        self.VersionNameLabel.setText(self.trUtf8('Version Name:'))
-        self.CopyrightLabel.setText(self.trUtf8('Copyright:'))
-        self.PermisionLabel.setText(self.trUtf8('Permission:'))
-        self.ProgressGroupBox.setTitle(self.trUtf8('Import Progress'))
-        self.ProgressBar.setFormat(self.trUtf8('%p'))
-        self.ImportButton.setText(self.trUtf8('Import'))
-        self.CancelButton.setText(self.trUtf8('Cancel'))
-        self.OSISGroupBox.setTitle(self.trUtf8('OSIS Bible'))
-        self.BibleNameLabel.setText(self.trUtf8('Bible Name:'))
-        self.LocatioLabel.setText(self.trUtf8('File Location:'))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.OsisTab),
-            self.trUtf8('Osis (Sword) Imports'))
-        self.CVSGroupBox.setTitle(self.trUtf8('CVS Bible'))
-        self.BooksLocationLabel.setText(self.trUtf8('Books Location:'))
-        self.VerseLocationLabel.setText(self.trUtf8('Verse Location:'))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.CsvTab),
-            self.trUtf8('CSV File Imports'))
-        self.OptionsGroupBox.setTitle(self.trUtf8('Download Options'))
-        self.LocationLabel.setText(self.trUtf8('Location:'))
-        self.LocationComboBox.setItemText(0, self.trUtf8('Crosswalk'))
-        self.LocationComboBox.setItemText(1, self.trUtf8('BibleGateway'))
-        self.BibleLabel.setText(self.trUtf8('Bible:'))
-        self.ProxyGroupBox.setTitle(self.trUtf8('Proxy Settings (Optional)'))
-        self.AddressLabel.setText(self.trUtf8('Proxy Address:'))
-        self.UsernameLabel.setText(self.trUtf8('Username:'))
-        self.PasswordLabel.setText(self.trUtf8('Password:'))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.HttpTab),
-            self.trUtf8('Web Downloads'))

=== removed file 'openlp/plugins/bibles/forms/bibleimportform.py'
--- openlp/plugins/bibles/forms/bibleimportform.py	2009-12-11 19:02:45 +0000
+++ openlp/plugins/bibles/forms/bibleimportform.py	1970-01-01 00:00:00 +0000
@@ -1,355 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2009 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael      #
-# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
-# Carsten Tinggaard                                                           #
-# --------------------------------------------------------------------------- #
-# 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                          #
-###############################################################################
-
-import logging
-import os
-import os.path
-
-from PyQt4 import QtCore, QtGui
-
-from bibleimportdialog import Ui_BibleImportDialog
-from openlp.core.lib import Receiver
-
-class BibleImportForm(QtGui.QDialog, Ui_BibleImportDialog):
-    global log
-    log = logging.getLogger(u'BibleImportForm')
-    log.info(u'BibleImportForm loaded')
-    """
-    Class documentation goes here.
-    """
-    def __init__(self, config, biblemanager, bibleplugin, parent=None):
-        '''
-        Constructor
-        '''
-        QtGui.QDialog.__init__(self, parent)
-        self.setupUi(self)
-        self.biblemanager = biblemanager
-        self.config = config
-        self.bibleplugin = bibleplugin
-        self.bible_type = None
-        self.barmax = 0
-        self.tabWidget.setCurrentIndex(0)
-        self.cwBibleVersions = {}
-        self.bgBibleVersions = {}
-        self.AddressEdit.setText(self.config.get_config(u'proxy address', u''))
-        self.UsernameEdit.setText(self.config.get_config(u'proxy username',u''))
-        self.PasswordEdit.setText(self.config.get_config(u'proxy password',u''))
-        #Load and store Crosswalk Bibles
-        filepath = os.path.split(os.path.abspath(__file__))[0]
-        filepath = os.path.abspath(os.path.join(filepath, u'..',
-            u'resources', u'crosswalkbooks.csv'))
-        fbibles = None
-        try:
-            fbibles = open(filepath, 'r')
-            for line in fbibles:
-                p = line.split(u',')
-                self.cwBibleVersions[p[0]] = p[1].replace(u'\n', u'')
-        except:
-            log.exception(u'Crosswalk resources missing')
-        finally:
-            if fbibles:
-                fbibles.close()
-        #Load and store BibleGateway Bibles
-        filepath = os.path.split(os.path.abspath(__file__))[0]
-        filepath = os.path.abspath(os.path.join(filepath, u'..',
-            u'resources', u'biblegateway.csv'))
-        try:
-            fbibles = open(filepath, 'r')
-            for line in fbibles:
-                p = line.split(u',')
-                self.bgBibleVersions[p[0]] = p[1].replace(u'\n', u'')
-        except:
-            log.exception(u'Biblegateway resources missing')
-        finally:
-            if fbibles:
-                fbibles.close()
-        self.loadBibleCombo(self.cwBibleVersions)
-        self.cwActive = True
-
-    def loadBibleCombo(self, biblesList):
-        self.BibleComboBox.clear()
-        self.BibleComboBox.addItem(u'')
-        for bible in biblesList:
-            row = self.BibleComboBox.count()
-            self.BibleComboBox.addItem(unicode(self.trUtf8(bible)))
-            self.BibleComboBox.setItemData(row, QtCore.QVariant(bible))
-
-        #Combo Boxes
-        QtCore.QObject.connect(self.LocationComboBox,
-            QtCore.SIGNAL(u'activated(int)'), self.onLocationComboBoxSelected)
-        QtCore.QObject.connect(self.BibleComboBox,
-            QtCore.SIGNAL(u'activated(int)'), self.onBibleComboBoxSelected)
-
-        #Buttons
-        QtCore.QObject.connect(self.ImportButton,
-            QtCore.SIGNAL(u'pressed()'), self.onImportButtonClicked)
-        QtCore.QObject.connect(self.CancelButton,
-            QtCore.SIGNAL(u'pressed()'), self.onCancelButtonClicked)
-        QtCore.QObject.connect(self.VersesFileButton,
-            QtCore.SIGNAL(u'pressed()'), self.onVersesFileButtonClicked)
-        QtCore.QObject.connect(self.BooksFileButton,
-            QtCore.SIGNAL(u'pressed()'), self.onBooksFileButtonClicked)
-        QtCore.QObject.connect(self.OsisFileButton,
-            QtCore.SIGNAL(u'pressed()'), self.onOsisFileButtonClicked)
-
-        #Lost Focus
-        QtCore.QObject.connect(self.OSISLocationEdit,
-            QtCore.SIGNAL(u'lostFocus()'), self.onOSISLocationEditLostFocus)
-        QtCore.QObject.connect(self.BooksLocationEdit,
-            QtCore.SIGNAL(u'lostFocus()'),self.onBooksLocationEditLostFocus)
-        QtCore.QObject.connect(self.VerseLocationEdit,
-            QtCore.SIGNAL(u'lostFocus()'), self.onVerseLocationEditLostFocus)
-        QtCore.QObject.connect(self.AddressEdit,
-            QtCore.SIGNAL(u'lostFocus()'), self.onProxyAddressEditLostFocus)
-        QtCore.QObject.connect(self.UsernameEdit,
-            QtCore.SIGNAL(u'lostFocus()'), self.onProxyUsernameEditLostFocus)
-        QtCore.QObject.connect(self.PasswordEdit,
-            QtCore.SIGNAL(u'lostFocus()'), self.onProxyPasswordEditLostFocus)
-
-
-    def onVersesFileButtonClicked(self):
-        filename = QtGui.QFileDialog.getOpenFileName(
-            self, self.trUtf8('Open Bible Verses file'),
-            self.config.get_last_dir(1))
-        if filename:
-            self.VerseLocationEdit.setText(filename)
-            self.config.set_last_dir(filename, 1)
-            self.setCsv()
-
-    def onBooksFileButtonClicked(self):
-        filename = QtGui.QFileDialog.getOpenFileName(
-            self, self.trUtf8('Open Bible Books file'),
-            self.config.get_last_dir(2))
-        if filename:
-            self.BooksLocationEdit.setText(filename)
-            self.config.set_last_dir(filename, 2)
-            self.setCsv()
-
-    def onOsisFileButtonClicked(self):
-        filename = QtGui.QFileDialog.getOpenFileName(
-            self, self.trUtf8('Open OSIS import file'),
-            self.config.get_last_dir(3))
-        if filename:
-            self.OSISLocationEdit.setText(filename)
-            self.config.set_last_dir(filename, 3)
-            self.setOsis()
-
-    def onOSISLocationEditLostFocus(self):
-        if len(self.OSISLocationEdit.displayText() ) > 0:
-            self.setOsis()
-        else:
-            # Was OSIS and is not any more stops lostFocus running mad
-            if self.bible_type == u'OSIS':
-                self.bible_type = None
-                self.resetScreenFieldStates()
-
-    def onBooksLocationEditLostFocus(self):
-        self.checkOsis()
-
-    def onVerseLocationEditLostFocus(self):
-        self.checkOsis()
-
-    def onProxyAddressEditLostFocus(self):
-        self.config.set_config(
-            u'proxy address', unicode(self.AddressEdit.displayText()))
-
-    def onProxyUsernameEditLostFocus(self):
-        self.config.set_config(
-            u'proxy username', unicode(self.UsernameEdit.displayText()))
-
-    def onProxyPasswordEditLostFocus(self):
-        self.config.set_config(
-            u'proxy password', unicode(self.PasswordEdit.displayText()))
-
-    def onLocationComboBoxSelected(self, value):
-        if value == 0:
-            self.loadBibleCombo(self.cwBibleVersions)
-            self.cwActive = True
-        else:
-            self.loadBibleCombo(self.bgBibleVersions)
-            self.cwActive = False
-        self.checkHttp()
-
-    def onBibleComboBoxSelected(self, value):
-        self.checkHttp()
-        self.BibleNameEdit.setText(unicode(self.BibleComboBox.currentText()))
-        self.VersionNameEdit.setText(unicode(self.BibleComboBox.currentText()))
-
-    def onCancelButtonClicked(self):
-        # tell import to stop
-        self.message = self.trUtf8('Bible import stopped')
-        Receiver.send_message(u'stop_import')
-        # tell bibleplugin to reload the bibles
-        Receiver.send_message(u'pre_load_bibles')
-        self.close()
-
-    def onImportButtonClicked(self):
-        message = self.trUtf8('Bible import completed')
-        if self.biblemanager:
-            if not self.bible_type is None and \
-                len(self.BibleNameEdit.displayText()) > 0:
-                self.MessageLabel.setText(self.trUtf8('Import Started'))
-                self.ProgressBar.setMinimum(0)
-                self.setMax(65)
-                self.ProgressBar.setValue(0)
-                self.biblemanager.process_dialog(self)
-                status, msg = self.importBible()
-                if msg:
-                    message = msg
-                self.MessageLabel.setText(message)
-                self.ProgressBar.setValue(self.barmax)
-                # tell bibleplugin to reload the bibles
-                Receiver.send_message(u'pre_load_bibles')
-                QtGui.QMessageBox.information(self,
-                    self.trUtf8('Information'), self.trUtf8(message))
-
-    def setMax(self, max):
-        log.debug(u'set Max %s', max)
-        self.barmax = max
-        self.ProgressBar.setMaximum(max)
-
-    def incrementProgressBar(self, text ):
-        log.debug(u'IncrementBar %s', text)
-        self.MessageLabel.setText(unicode(self.trUtf8('Import processing')) + ' - %s' % text)
-        self.ProgressBar.setValue(self.ProgressBar.value() + 1)
-
-    def importBible(self):
-        log.debug(u'Import Bible %s' % self.bible_type)
-        message = None
-        if self.bible_type == u'OSIS':
-            loaded = self.biblemanager.register_osis_file_bible(
-                unicode(self.BibleNameEdit.displayText()),
-                self.OSISLocationEdit.displayText())
-        elif self.bible_type == u'CSV':
-            loaded = self.biblemanager.register_csv_file_bible(
-                unicode(self.BibleNameEdit.displayText()),
-                self.BooksLocationEdit.displayText(),
-                self.VerseLocationEdit.displayText())
-        else:
-            # set a value as it will not be needed
-            self.setMax(1)
-            if self.cwActive:
-                bible = self.cwBibleVersions[
-                    unicode(self.BibleComboBox.currentText())]
-            else:
-                bible = self.bgBibleVersions[
-                    unicode(self.BibleComboBox.currentText())]
-            loaded = self.biblemanager.register_http_bible(
-                unicode(self.BibleComboBox.currentText()),
-                unicode(self.LocationComboBox.currentText()),
-                unicode(bible), unicode(self.AddressEdit.displayText()),
-                unicode(self.UsernameEdit .displayText()),
-                unicode(self.PasswordEdit.displayText()))
-        if loaded:
-            self.biblemanager.save_meta_data(
-                unicode(self.BibleNameEdit.displayText()),
-                unicode(self.VersionNameEdit.displayText()),
-                unicode(self.CopyrightEdit.displayText()),
-                unicode(self.PermisionEdit.displayText()))
-        else:
-            message = self.trUtf8('Bible import failed as name is already in use')
-        self.bible_type = None
-        # free the screen state restrictions
-        self.resetScreenFieldStates()
-         # reset all the screen fields
-        self.resetEntryFields()
-        return loaded, message
-
-    def checkOsis(self):
-        if len(self.BooksLocationEdit.displayText()) > 0 or \
-            len(self.VerseLocationEdit.displayText()) > 0:
-            self.setCsv()
-        else:
-            # Was CSV and is not any more stops lostFocus running mad
-            if self.bible_type == u'CSV':
-                self.bible_type = None
-                self.resetScreenFieldStates()
-
-    def checkHttp(self):
-        if self.BibleComboBox.currentIndex() != 0 :
-            # First slot is blank so no bible
-            self.setHttp()
-        else:
-            # Was HTTP and is not any more stops lostFocus running mad
-            if self.bible_type == u'HTTP':
-                self.bible_type = None
-                self.resetScreenFieldStates()
-
-    def blockCsv(self):
-        self.BooksLocationEdit.setReadOnly(True)
-        self.VerseLocationEdit.setReadOnly(True)
-        self.BooksFileButton.setEnabled(False)
-        self.VersesFileButton.setEnabled(False)
-
-    def setCsv(self):
-        self.bible_type = u'CSV'
-        self.BooksLocationEdit.setReadOnly(False)
-        self.VerseLocationEdit.setReadOnly(False)
-        self.BooksFileButton.setEnabled(True)
-        self.VersesFileButton.setEnabled(True)
-        self.blockOsis()
-        self.blockHttp()
-
-    def setOsis(self):
-        self.bible_type = u'OSIS'
-        self.OSISLocationEdit.setReadOnly(False)
-        self.OsisFileButton.setEnabled(True)
-        self.blockCsv()
-        self.blockHttp()
-
-    def blockOsis(self):
-        self.OSISLocationEdit.setReadOnly(True)
-        self.OsisFileButton.setEnabled(False)
-
-    def setHttp(self):
-        self.bible_type = u'HTTP'
-        self.LocationComboBox.setEnabled(True)
-        self.BibleComboBox.setEnabled(True)
-        self.blockCsv()
-        self.blockOsis()
-
-    def blockHttp(self):
-        self.LocationComboBox.setEnabled(False)
-        self.BibleComboBox.setEnabled(False)
-
-    def resetScreenFieldStates(self):
-        # only reset if no bible type set.
-        if self.bible_type is None:
-            self.BooksLocationEdit.setReadOnly(False)
-            self.VerseLocationEdit.setReadOnly(False)
-            self.BooksFileButton.setEnabled(True)
-            self.VersesFileButton.setEnabled(True)
-            self.OSISLocationEdit.setReadOnly(False)
-            self.OsisFileButton.setEnabled(True)
-            self.LocationComboBox.setEnabled(True)
-            self.BibleComboBox.setEnabled(True)
-
-    def resetEntryFields(self):
-        self.BooksLocationEdit.setText(u'')
-        self.VerseLocationEdit.setText(u'')
-        self.OSISLocationEdit.setText(u'')
-        self.BibleNameEdit.setText(u'')
-        self.LocationComboBox.setCurrentIndex(0)
-        self.BibleComboBox.setCurrentIndex(0)

=== added file 'openlp/plugins/bibles/forms/bibleimportwizard.py'
--- openlp/plugins/bibles/forms/bibleimportwizard.py	1970-01-01 00:00:00 +0000
+++ openlp/plugins/bibles/forms/bibleimportwizard.py	2009-12-24 18:07:18 +0000
@@ -0,0 +1,366 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2009 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael      #
+# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
+# Carsten Tinggaard                                                           #
+# --------------------------------------------------------------------------- #
+# 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 PyQt4 import QtCore, QtGui
+
+class Ui_BibleImportWizard(object):
+    def setupUi(self, BibleImportWizard):
+        BibleImportWizard.setObjectName(u'BibleImportWizard')
+        BibleImportWizard.resize(550, 386)
+        BibleImportWizard.setModal(True)
+        BibleImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle)
+        BibleImportWizard.setOptions(
+            QtGui.QWizard.IndependentPages | \
+            QtGui.QWizard.NoBackButtonOnStartPage | \
+            QtGui.QWizard.NoBackButtonOnLastPage)
+        self.WelcomePage = QtGui.QWizardPage()
+        self.WelcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
+            QtGui.QPixmap(u':/wizards/wizard_importbible.bmp'))
+        self.WelcomePage.setObjectName(u'WelcomePage')
+        self.WelcomeLayout = QtGui.QVBoxLayout(self.WelcomePage)
+        self.WelcomeLayout.setSpacing(8)
+        self.WelcomeLayout.setMargin(0)
+        self.WelcomeLayout.setObjectName(u'WelcomeLayout')
+        self.TitleLabel = QtGui.QLabel(self.WelcomePage)
+        self.TitleLabel.setObjectName(u'TitleLabel')
+        self.WelcomeLayout.addWidget(self.TitleLabel)
+        spacerItem = QtGui.QSpacerItem(20, 40,
+            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.WelcomeLayout.addItem(spacerItem)
+        self.InformationLabel = QtGui.QLabel(self.WelcomePage)
+        self.InformationLabel.setWordWrap(True)
+        self.InformationLabel.setMargin(10)
+        self.InformationLabel.setObjectName(u'InformationLabel')
+        self.WelcomeLayout.addWidget(self.InformationLabel)
+        spacerItem1 = QtGui.QSpacerItem(20, 40,
+            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.WelcomeLayout.addItem(spacerItem1)
+        BibleImportWizard.addPage(self.WelcomePage)
+        self.SelectPage = QtGui.QWizardPage()
+        self.SelectPage.setObjectName(u'SelectPage')
+        self.SelectPageLayout = QtGui.QVBoxLayout(self.SelectPage)
+        self.SelectPageLayout.setSpacing(8)
+        self.SelectPageLayout.setMargin(20)
+        self.SelectPageLayout.setObjectName(u'SelectPageLayout')
+        self.FormatSelectLayout = QtGui.QHBoxLayout()
+        self.FormatSelectLayout.setSpacing(8)
+        self.FormatSelectLayout.setObjectName(u'FormatSelectLayout')
+        self.FormatLabel = QtGui.QLabel(self.SelectPage)
+        self.FormatLabel.setObjectName(u'FormatLabel')
+        self.FormatSelectLayout.addWidget(self.FormatLabel)
+        self.FormatComboBox = QtGui.QComboBox(self.SelectPage)
+        self.FormatComboBox.setObjectName(u'FormatComboBox')
+        self.FormatComboBox.addItem(u'')
+        self.FormatComboBox.addItem(u'')
+        self.FormatComboBox.addItem(u'')
+        self.FormatComboBox.addItem(u'')
+        self.FormatSelectLayout.addWidget(self.FormatComboBox)
+        spacerItem2 = QtGui.QSpacerItem(40, 20,
+            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.FormatSelectLayout.addItem(spacerItem2)
+        self.SelectPageLayout.addLayout(self.FormatSelectLayout)
+        self.FormatWidget = QtGui.QStackedWidget(self.SelectPage)
+        self.FormatWidget.setObjectName(u'FormatWidget')
+        self.OsisPage = QtGui.QWidget()
+        self.OsisPage.setObjectName(u'OsisPage')
+        self.OsisLayout = QtGui.QFormLayout(self.OsisPage)
+        self.OsisLayout.setFieldGrowthPolicy(
+            QtGui.QFormLayout.ExpandingFieldsGrow)
+        self.OsisLayout.setMargin(0)
+        self.OsisLayout.setSpacing(8)
+        self.OsisLayout.setObjectName(u'OsisLayout')
+        self.OsisBibleNameLabel = QtGui.QLabel(self.OsisPage)
+        self.OsisBibleNameLabel.setIndent(0)
+        self.OsisBibleNameLabel.setObjectName(u'OsisBibleNameLabel')
+        self.OsisLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.OsisBibleNameLabel)
+        self.OsisBibleNameEdit = QtGui.QLineEdit(self.OsisPage)
+        self.OsisBibleNameEdit.setObjectName(u'OsisBibleNameEdit')
+        self.OsisLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.OsisBibleNameEdit)
+        self.OsisLocationLabel = QtGui.QLabel(self.OsisPage)
+        self.OsisLocationLabel.setObjectName(u'OsisLocationLabel')
+        self.OsisLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.OsisLocationLabel)
+        self.OsisLocationLayout = QtGui.QHBoxLayout()
+        self.OsisLocationLayout.setSpacing(8)
+        self.OsisLocationLayout.setObjectName(u'OsisLocationLayout')
+        self.OSISLocationEdit = QtGui.QLineEdit(self.OsisPage)
+        self.OSISLocationEdit.setObjectName(u'OSISLocationEdit')
+        self.OsisLocationLayout.addWidget(self.OSISLocationEdit)
+        self.OsisFileButton = QtGui.QToolButton(self.OsisPage)
+        self.OsisFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(u':/imports/import_load.png'),
+            QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.OsisFileButton.setIcon(icon)
+        self.OsisFileButton.setObjectName(u'OsisFileButton')
+        self.OsisLocationLayout.addWidget(self.OsisFileButton)
+        self.OsisLayout.setLayout(1, QtGui.QFormLayout.FieldRole,
+            self.OsisLocationLayout)
+        self.FormatWidget.addWidget(self.OsisPage)
+        self.CsvPage = QtGui.QWidget()
+        self.CsvPage.setObjectName(u'CsvPage')
+        self.CsvSourceLayout = QtGui.QFormLayout(self.CsvPage)
+        self.CsvSourceLayout.setFieldGrowthPolicy(
+            QtGui.QFormLayout.ExpandingFieldsGrow)
+        self.CsvSourceLayout.setLabelAlignment(QtCore.Qt.AlignBottom |
+            QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing)
+        self.CsvSourceLayout.setFormAlignment(QtCore.Qt.AlignLeading |
+            QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
+        self.CsvSourceLayout.setMargin(0)
+        self.CsvSourceLayout.setSpacing(8)
+        self.CsvSourceLayout.setObjectName(u'CsvSourceLayout')
+        self.BooksLocationLabel = QtGui.QLabel(self.CsvPage)
+        self.BooksLocationLabel.setObjectName(u'BooksLocationLabel')
+        self.CsvSourceLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.BooksLocationLabel)
+        self.CsvBooksLayout = QtGui.QHBoxLayout()
+        self.CsvBooksLayout.setSpacing(8)
+        self.CsvBooksLayout.setObjectName(u'CsvBooksLayout')
+        self.BooksLocationEdit = QtGui.QLineEdit(self.CsvPage)
+        self.BooksLocationEdit.setObjectName(u'BooksLocationEdit')
+        self.CsvBooksLayout.addWidget(self.BooksLocationEdit)
+        self.BooksFileButton = QtGui.QToolButton(self.CsvPage)
+        self.BooksFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
+        self.BooksFileButton.setIcon(icon)
+        self.BooksFileButton.setObjectName(u'BooksFileButton')
+        self.CsvBooksLayout.addWidget(self.BooksFileButton)
+        self.CsvSourceLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
+            self.CsvBooksLayout)
+        self.VerseLocationLabel = QtGui.QLabel(self.CsvPage)
+        self.VerseLocationLabel.setObjectName(u'VerseLocationLabel')
+        self.CsvSourceLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.VerseLocationLabel)
+        self.CsvVerseLayout = QtGui.QHBoxLayout()
+        self.CsvVerseLayout.setSpacing(8)
+        self.CsvVerseLayout.setObjectName(u'CsvVerseLayout')
+        self.CsvVerseLocationEdit = QtGui.QLineEdit(self.CsvPage)
+        self.CsvVerseLocationEdit.setObjectName(u'CsvVerseLocationEdit')
+        self.CsvVerseLayout.addWidget(self.CsvVerseLocationEdit)
+        self.CsvVersesFileButton = QtGui.QToolButton(self.CsvPage)
+        self.CsvVersesFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
+        self.CsvVersesFileButton.setIcon(icon)
+        self.CsvVersesFileButton.setObjectName(u'CsvVersesFileButton')
+        self.CsvVerseLayout.addWidget(self.CsvVersesFileButton)
+        self.CsvSourceLayout.setLayout(1, QtGui.QFormLayout.FieldRole,
+            self.CsvVerseLayout)
+        self.FormatWidget.addWidget(self.CsvPage)
+        self.OpenSongPage = QtGui.QWidget()
+        self.OpenSongPage.setObjectName(u'OpenSongPage')
+        self.OpenSongLayout = QtGui.QFormLayout(self.OpenSongPage)
+        self.OpenSongLayout.setMargin(0)
+        self.OpenSongLayout.setSpacing(8)
+        self.OpenSongLayout.setObjectName(u'OpenSongLayout')
+        self.OpenSongFileLabel = QtGui.QLabel(self.OpenSongPage)
+        self.OpenSongFileLabel.setObjectName(u'OpenSongFileLabel')
+        self.OpenSongLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.OpenSongFileLabel)
+        self.OpenSongFileLayout = QtGui.QHBoxLayout()
+        self.OpenSongFileLayout.setSpacing(8)
+        self.OpenSongFileLayout.setObjectName(u'OpenSongFileLayout')
+        self.OpenSongFileEdit = QtGui.QLineEdit(self.OpenSongPage)
+        self.OpenSongFileEdit.setObjectName(u'OpenSongFileEdit')
+        self.OpenSongFileLayout.addWidget(self.OpenSongFileEdit)
+        self.OpenSongBrowseButton = QtGui.QToolButton(self.OpenSongPage)
+        self.OpenSongBrowseButton.setIcon(icon)
+        self.OpenSongBrowseButton.setObjectName(u'OpenSongBrowseButton')
+        self.OpenSongFileLayout.addWidget(self.OpenSongBrowseButton)
+        self.OpenSongLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
+            self.OpenSongFileLayout)
+        self.FormatWidget.addWidget(self.OpenSongPage)
+        self.WebDownloadPage = QtGui.QWidget()
+        self.WebDownloadPage.setObjectName(u'WebDownloadPage')
+        self.WebDownloadLayout = QtGui.QVBoxLayout(self.WebDownloadPage)
+        self.WebDownloadLayout.setSpacing(8)
+        self.WebDownloadLayout.setMargin(0)
+        self.WebDownloadLayout.setObjectName(u'WebDownloadLayout')
+        self.WebDownloadTabWidget = QtGui.QTabWidget(self.WebDownloadPage)
+        self.WebDownloadTabWidget.setObjectName(u'WebDownloadTabWidget')
+        self.DownloadOptionsTab = QtGui.QWidget()
+        self.DownloadOptionsTab.setObjectName(u'DownloadOptionsTab')
+        self.DownloadOptionsLayout = QtGui.QFormLayout(self.DownloadOptionsTab)
+        self.DownloadOptionsLayout.setMargin(8)
+        self.DownloadOptionsLayout.setSpacing(8)
+        self.DownloadOptionsLayout.setObjectName(u'DownloadOptionsLayout')
+        self.LocationLabel = QtGui.QLabel(self.DownloadOptionsTab)
+        self.LocationLabel.setObjectName(u'LocationLabel')
+        self.DownloadOptionsLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.LocationLabel)
+        self.LocationComboBox = QtGui.QComboBox(self.DownloadOptionsTab)
+        self.LocationComboBox.setObjectName(u'LocationComboBox')
+        self.LocationComboBox.addItem(u'')
+        self.LocationComboBox.addItem(u'')
+        self.DownloadOptionsLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.LocationComboBox)
+        self.BibleLabel = QtGui.QLabel(self.DownloadOptionsTab)
+        self.BibleLabel.setObjectName(u'BibleLabel')
+        self.DownloadOptionsLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.BibleLabel)
+        self.BibleComboBox = QtGui.QComboBox(self.DownloadOptionsTab)
+        self.BibleComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+        self.BibleComboBox.setObjectName(u'BibleComboBox')
+        self.BibleComboBox.addItem(u'')
+        self.BibleComboBox.addItem(u'')
+        self.BibleComboBox.addItem(u'')
+        self.DownloadOptionsLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
+            self.BibleComboBox)
+        self.WebDownloadTabWidget.addTab(self.DownloadOptionsTab, u'')
+        self.ProxyServerTab = QtGui.QWidget()
+        self.ProxyServerTab.setObjectName(u'ProxyServerTab')
+        self.ProxyServerLayout = QtGui.QFormLayout(self.ProxyServerTab)
+        self.ProxyServerLayout.setObjectName(u'ProxyServerLayout')
+        self.AddressLabel = QtGui.QLabel(self.ProxyServerTab)
+        self.AddressLabel.setObjectName(u'AddressLabel')
+        self.ProxyServerLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.AddressLabel)
+        self.AddressEdit = QtGui.QLineEdit(self.ProxyServerTab)
+        self.AddressEdit.setObjectName(u'AddressEdit')
+        self.ProxyServerLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.AddressEdit)
+        self.UsernameLabel = QtGui.QLabel(self.ProxyServerTab)
+        self.UsernameLabel.setObjectName(u'UsernameLabel')
+        self.ProxyServerLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.UsernameLabel)
+        self.UsernameEdit = QtGui.QLineEdit(self.ProxyServerTab)
+        self.UsernameEdit.setObjectName(u'UsernameEdit')
+        self.ProxyServerLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
+            self.UsernameEdit)
+        self.PasswordLabel = QtGui.QLabel(self.ProxyServerTab)
+        self.PasswordLabel.setObjectName(u'PasswordLabel')
+        self.ProxyServerLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
+            self.PasswordLabel)
+        self.PasswordEdit = QtGui.QLineEdit(self.ProxyServerTab)
+        self.PasswordEdit.setObjectName(u'PasswordEdit')
+        self.ProxyServerLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
+            self.PasswordEdit)
+        self.WebDownloadTabWidget.addTab(self.ProxyServerTab, u'')
+        self.WebDownloadLayout.addWidget(self.WebDownloadTabWidget)
+        self.FormatWidget.addWidget(self.WebDownloadPage)
+        self.SelectPageLayout.addWidget(self.FormatWidget)
+        BibleImportWizard.addPage(self.SelectPage)
+        self.LicenseDetailsPage = QtGui.QWizardPage()
+        self.LicenseDetailsPage.setObjectName(u'LicenseDetailsPage')
+        self.LicenseDetailsLayout = QtGui.QFormLayout(self.LicenseDetailsPage)
+        self.LicenseDetailsLayout.setMargin(20)
+        self.LicenseDetailsLayout.setSpacing(8)
+        self.LicenseDetailsLayout.setObjectName(u'LicenseDetailsLayout')
+        self.VersionNameLabel = QtGui.QLabel(self.LicenseDetailsPage)
+        self.VersionNameLabel.setObjectName(u'VersionNameLabel')
+        self.LicenseDetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.VersionNameLabel)
+        self.VersionNameEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
+        self.VersionNameEdit.setObjectName(u'VersionNameEdit')
+        self.LicenseDetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.VersionNameEdit)
+        self.CopyrightLabel = QtGui.QLabel(self.LicenseDetailsPage)
+        self.CopyrightLabel.setObjectName(u'CopyrightLabel')
+        self.LicenseDetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.CopyrightLabel)
+        self.CopyrightEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
+        self.CopyrightEdit.setObjectName(u'CopyrightEdit')
+        self.LicenseDetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
+            self.CopyrightEdit)
+        self.PermissionLabel = QtGui.QLabel(self.LicenseDetailsPage)
+        self.PermissionLabel.setObjectName(u'PermissionLabel')
+        self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole,\
+            self.PermissionLabel)
+        self.PermissionEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
+        self.PermissionEdit.setObjectName(u'PermissionEdit')
+        self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
+            self.PermissionEdit)
+        BibleImportWizard.addPage(self.LicenseDetailsPage)
+        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)
+        BibleImportWizard.addPage(self.ImportPage)
+
+
+        self.retranslateUi(BibleImportWizard)
+        self.FormatWidget.setCurrentIndex(0)
+        self.WebDownloadTabWidget.setCurrentIndex(0)
+        QtCore.QObject.connect(self.FormatComboBox,
+            QtCore.SIGNAL(u'currentIndexChanged(int)'),
+            self.FormatWidget.setCurrentIndex)
+        QtCore.QMetaObject.connectSlotsByName(BibleImportWizard)
+
+    def retranslateUi(self, BibleImportWizard):
+        BibleImportWizard.setWindowTitle(self.trUtf8('Bible Import Wizard'))
+        self.TitleLabel.setText(
+            u'<span style=\" font-size:14pt; font-weight:600;\">' + \
+            self.trUtf8('Welcome to the Bible Import Wizard') + u'</span>')
+        self.InformationLabel.setText(
+            self.trUtf8('This wizard will help you to import Bibles from a '
+                'variety of formats. Click the next button below to start the '
+                'process by selecting a format to import from.'))
+        self.SelectPage.setTitle(self.trUtf8('Select Import Source'))
+        self.SelectPage.setSubTitle(
+            self.trUtf8('Select the import format, and where to import from.'))
+        self.FormatLabel.setText(self.trUtf8('Format:'))
+        self.FormatComboBox.setItemText(0, self.trUtf8('OSIS'))
+        self.FormatComboBox.setItemText(1, self.trUtf8('CSV'))
+        self.FormatComboBox.setItemText(2, self.trUtf8('OpenSong'))
+        self.FormatComboBox.setItemText(3, self.trUtf8('Web Download'))
+        self.OsisBibleNameLabel.setText(self.trUtf8('Bible Name:'))
+        self.OsisLocationLabel.setText(self.trUtf8('File Location:'))
+        self.BooksLocationLabel.setText(self.trUtf8('Books Location:'))
+        self.VerseLocationLabel.setText(self.trUtf8('Verse Location:'))
+        self.OpenSongFileLabel.setText(self.trUtf8('Bible Filename:'))
+        self.LocationLabel.setText(self.trUtf8('Location:'))
+        self.LocationComboBox.setItemText(0, self.trUtf8('Crosswalk'))
+        self.LocationComboBox.setItemText(1, self.trUtf8('BibleGateway'))
+        self.BibleLabel.setText(self.trUtf8('Bible:'))
+        self.WebDownloadTabWidget.setTabText(
+            self.WebDownloadTabWidget.indexOf(self.DownloadOptionsTab),
+            self.trUtf8('Download Options'))
+        self.AddressLabel.setText(self.trUtf8('Server:'))
+        self.UsernameLabel.setText(self.trUtf8('Username:'))
+        self.PasswordLabel.setText(self.trUtf8('Password:'))
+        self.WebDownloadTabWidget.setTabText(
+            self.WebDownloadTabWidget.indexOf(self.ProxyServerTab),
+            self.trUtf8('Proxy Server (Optional)'))
+        self.LicenseDetailsPage.setTitle(self.trUtf8('License Details'))
+        self.LicenseDetailsPage.setSubTitle(
+            self.trUtf8('Set up the Bible\'s license details.'))
+        self.VersionNameLabel.setText(self.trUtf8('Version Name:'))
+        self.CopyrightLabel.setText(self.trUtf8('Copyright:'))
+        self.PermissionLabel.setText(self.trUtf8('Permission:'))
+        self.ImportPage.setTitle(self.trUtf8('Importing'))
+        self.ImportPage.setSubTitle(
+            self.trUtf8('Please wait while your Bible is imported.'))
+        self.ImportProgressLabel.setText(self.trUtf8('Ready.'))
+        #self.ImportProgressBar.setFormat(u'%p')
+

=== added file 'openlp/plugins/bibles/forms/importwizardform.py'
--- openlp/plugins/bibles/forms/importwizardform.py	1970-01-01 00:00:00 +0000
+++ openlp/plugins/bibles/forms/importwizardform.py	2009-12-24 18:07:18 +0000
@@ -0,0 +1,364 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2009 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael      #
+# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
+# Carsten Tinggaard                                                           #
+# --------------------------------------------------------------------------- #
+# 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                          #
+###############################################################################
+
+import logging
+import os
+import os.path
+from time import sleep
+
+from PyQt4 import QtCore, QtGui
+
+from bibleimportwizard import Ui_BibleImportWizard
+from openlp.core.lib import Receiver
+from openlp.plugins.bibles.lib.manager import BibleFormat
+
+class DownloadLocation(object):
+    Unknown = -1
+    Crosswalk = 0
+    BibleGateway = 1
+
+    Names = {
+        0: u'Crosswalk',
+        1: u'BibleGateway'
+    }
+
+    @classmethod
+    def get_name(class_, id):
+        return class_.Names[id]
+
+
+class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
+    """
+    This is the Bible Import Wizard, which allows easy importing of Bibles
+    into OpenLP from other formats like OSIS, CSV and OpenSong.
+    """
+
+    global log
+    log = logging.getLogger(u'BibleImportForm')
+    log.info(u'BibleImportForm loaded')
+
+    def __init__(self, parent, config, biblemanager, bibleplugin):
+        '''
+        Constructor
+        '''
+        QtGui.QWizard.__init__(self, parent)
+        self.setupUi(self)
+        self.registerFields()
+        self.web_bible_list = {}
+        self.finishButton = self.button(QtGui.QWizard.FinishButton)
+        self.cancelButton = self.button(QtGui.QWizard.CancelButton)
+        self.biblemanager = biblemanager
+        self.config = config
+        self.bibleplugin = bibleplugin
+        self.biblemanager.process_dialog(self)
+        self.loadWebBibles()
+        QtCore.QObject.connect(self.LocationComboBox,
+            QtCore.SIGNAL(u'currentIndexChanged(int)'),
+            self.onLocationComboBoxChanged)
+        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)
+        QtCore.QObject.connect(self,
+            QtCore.SIGNAL(u'currentIdChanged(int)'),
+            self.onCurrentIdChanged)
+
+    def show(self):
+        self.setDefaults()
+        return QtGui.QWizard.show()
+
+    def validateCurrentPage(self):
+        if self.currentId() == 0:
+            # Welcome page
+            return True
+        elif self.currentId() == 1:
+            # Select page
+            if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS:
+                if self.field(u'osis_biblename').toString() == u'':
+                    QtGui.QMessageBox.critical(self,
+                        self.trUtf8('Invalid Bible Name'),
+                        self.trUtf8('You need to specify a name for your '
+                            'Bible!'),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                    self.OsisBibleNameEdit.setFocus()
+                    return False
+                if self.field(u'osis_location').toString() == u'':
+                    QtGui.QMessageBox.critical(self,
+                        self.trUtf8('Invalid Bible Location'),
+                        self.trUtf8('You need to specify a file to import your '
+                            'Bible from!'),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                    self.OSISLocationEdit.setFocus()
+                    return False
+            elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV:
+                if self.field(u'csv_booksfile').toString() == u'':
+                    QtGui.QMessageBox.critical(self,
+                        self.trUtf8('Invalid Books File'),
+                        self.trUtf8('You need to specify a file with books of '
+                            'the Bible to use in the import!'),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                    self.BooksLocationEdit.setFocus()
+                    return False
+                elif self.field(u'csv_versefile').toString() == u'':
+                    QtGui.QMessageBox.critical(self,
+                        self.trUtf8('Invalid Verse File'),
+                        self.trUtf8('You need to specify a file of Bible '
+                            'verses to import!'),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                    self.CsvVerseLocationEdit.setFocus()
+                    return False
+            elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenSong:
+                if self.field(u'opensong_file').toString() == u'':
+                    QtGui.QMessageBox.critical(self,
+                        self.trUtf8('Invalid OpenSong Bible'),
+                        self.trUtf8('You need to specify an OpenSong Bible '
+                            'file to import!'),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                    self.OpenSongFileEdit.setFocus()
+                    return False
+            return True
+        elif self.currentId() == 2:
+            # License details
+            if self.field(u'license_version').toString() == u'':
+                QtGui.QMessageBox.critical(self,
+                    self.trUtf8('Empty Version Name'),
+                    self.trUtf8('You need to specify a version name for your '
+                        'Bible!'),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                self.VersionNameEdit.setFocus()
+                return False
+            elif self.field(u'license_copyright').toString() == u'':
+                QtGui.QMessageBox.critical(self,
+                    self.trUtf8('Empty Copyright'),
+                    self.trUtf8('You need to set a copyright for your Bible! '
+                        'Bibles in the Public Domain need to be marked as '
+                        'such.'),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+                self.CopyrightEdit.setFocus()
+                return False
+            return True
+        if self.currentId() == 3:
+            # Progress page
+            return True
+
+    def onLocationComboBoxChanged(self, index):
+        self.BibleComboBox.clear()
+        for bible, abbreviation in self.web_bible_list[index].iteritems():
+            self.BibleComboBox.addItem(unicode(self.trUtf8(bible)))
+
+    def onOsisFileButtonClicked(self):
+        self.getFileName(self.trUtf8('Open OSIS file'),
+            self.OSISLocationEdit)
+
+    def onBooksFileButtonClicked(self):
+        self.getFileName(self.trUtf8('Open Books CSV file'),
+            self.BooksLocationEdit)
+
+    def onCsvVersesFileButtonClicked(self):
+        self.getFileName(self.trUtf8('Open Verses CSV file'),
+            self.CsvVerseLocationEdit)
+
+    def onOpenSongBrowseButtonClicked(self):
+        self.getFileName(self.trUtf8('Open OpenSong Bible'),
+            self.OpenSongFileEdit)
+
+    def onCurrentIdChanged(self, id):
+        if id == 3:
+            self.preImport()
+            self.performImport()
+            self.postImport()
+
+    def registerFields(self):
+        self.SelectPage.registerField(
+            u'source_format', self.FormatComboBox)
+        self.SelectPage.registerField(
+            u'osis_biblename', self.OsisBibleNameEdit)
+        self.SelectPage.registerField(
+            u'osis_location', self.OSISLocationEdit)
+        self.SelectPage.registerField(
+            u'csv_booksfile', self.BooksLocationEdit)
+        self.SelectPage.registerField(
+            u'csv_versefile', self.CsvVerseLocationEdit)
+        self.SelectPage.registerField(
+            u'opensong_file', self.OpenSongFileEdit)
+        self.SelectPage.registerField(
+            u'web_location', self.LocationComboBox)
+        self.SelectPage.registerField(
+            u'web_biblename', self.BibleComboBox)
+        self.SelectPage.registerField(
+            u'proxy_server', self.AddressEdit)
+        self.SelectPage.registerField(
+            u'proxy_username', self.UsernameEdit)
+        self.SelectPage.registerField(
+            u'proxy_password', self.PasswordEdit)
+        self.LicenseDetailsPage.registerField(
+            u'license_version', self.VersionNameEdit)
+        self.LicenseDetailsPage.registerField(
+            u'license_copyright', self.CopyrightEdit)
+        self.LicenseDetailsPage.registerField(
+            u'license_permission', self.PermissionEdit)
+
+    def setDefaults(self):
+        self.setField(u'source_format', 0)
+        self.setField(u'osis_biblename', u'')
+        self.setField(u'osis_location', u'')
+        self.setField(u'csv_booksfile', u'')
+        self.setField(u'csv_versefile', u'')
+        self.setField(u'opensong_file', u'')
+        self.setField(u'web_location', 0)
+        self.setField(u'web_biblename', self.BibleComboBox)
+        self.setField(u'proxy_server', 
+            self.config.get_config(u'proxy address', u''))
+        self.setField(u'proxy_username', 
+            self.config.get_config(u'proxy username',u''))
+        self.setField(u'proxy_password', 
+            self.config.get_config(u'proxy password',u''))
+        self.setField(u'license_version', self.VersionNameEdit)
+        self.setField(u'license_copyright', self.CopyrightEdit)
+        self.setField(u'license_permission', self.PermissionEdit)
+        self.onLocationComboBoxChanged(0)
+
+    def loadWebBibles(self):
+        """
+        Load the list of Crosswalk and BibleGateway bibles.
+        """
+        #Load and store Crosswalk Bibles
+        filepath = os.path.abspath(os.path.join(
+            os.path.split(os.path.abspath(__file__))[0],
+            u'..', u'resources'))
+        fbibles = None
+        try:
+            self.web_bible_list[DownloadLocation.Crosswalk] = {}
+            fbibles = open(os.path.join(filepath, u'crosswalkbooks.csv'), 'r')
+            for line in fbibles:
+                parts = line.split(u',')
+                self.web_bible_list[DownloadLocation.Crosswalk][parts[0]] = \
+                    parts[1].rstrip()
+        except:
+            log.exception(u'Crosswalk resources missing')
+        finally:
+            if fbibles:
+                fbibles.close()
+        #Load and store BibleGateway Bibles
+        try:
+            self.web_bible_list[DownloadLocation.BibleGateway] = {}
+            fbibles = open(os.path.join(filepath, u'biblegateway.csv'), 'r')
+            for line in fbibles:
+                parts = line.split(u',')
+                self.web_bible_list[DownloadLocation.BibleGateway][parts[0]] = \
+                    parts[1].rstrip()
+        except:
+            log.exception(u'Biblegateway resources missing')
+        finally:
+            if fbibles:
+                fbibles.close()
+
+    def getFileName(self, title, editbox):
+        filename = QtGui.QFileDialog.getOpenFileName(self, title,
+            self.config.get_last_dir(1))
+        if filename:
+            editbox.setText(filename)
+            self.config.set_last_dir(filename, 1)
+
+    def incrementProgressBar(self, status_text):
+        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')
+
+    def preImport(self):
+        self.finishButton.setEnabled(False)
+        self.cancelButton.setVisible(False)
+        self.ImportProgressBar.setMinimum(0)
+        self.ImportProgressBar.setMaximum(1188)
+        self.ImportProgressBar.setValue(0)
+        self.ImportProgressLabel.setText(self.trUtf8('Starting import...'))
+        Receiver.send_message(u'process_events')
+
+    def performImport(self):
+        bible_type = self.field(u'source_format').toInt()[0]
+        success = False
+        if bible_type == BibleFormat.OSIS:
+            # Import an OSIS bible
+            success = self.biblemanager.register_osis_file_bible(
+                unicode(self.field(u'license_version').toString()),
+                unicode(self.field(u'osis_location').toString())
+            )
+        elif bible_type == BibleFormat.CSV:
+            # Import a CSV bible
+            success = self.biblemanager.register_csv_file_bible(
+                unicode(self.field(u'license_version').toString()),
+                self.field(u'csv_booksfile').toString(),
+                self.field(u'csv_versefile').toString()
+            )
+        elif bible_type == BibleFormat.OpenSong:
+            # Import an OpenSong bible
+            success = self.biblemanager.register_opensong_bible(
+                unicode(self.field(u'license_version').toString()),
+                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]
+            if download_location == DownloadLocation.Crosswalk:
+                bible = self.web_bible_list[DownloadLocation.Crosswalk][
+                    unicode(self.BibleComboBox.currentText())]
+            elif download_location == DownloadLocation.BibleGateway:
+                bible = self.web_bible_list[DownloadLocation.BibleGateway][
+                    unicode(self.BibleComboBox.currentText())]
+            success = self.biblemanager.register_http_bible(
+                unicode(self.field(u'license_version').toString()),
+                unicode(DownloadLocation.get_name(download_location)),
+                unicode(bible),
+                unicode(self.field(u'proxy_server').toString()),
+                unicode(self.field(u'proxy_username').toString()),
+                unicode(self.field(u'proxy_password').toString())
+            )
+        if success:
+            self.biblemanager.save_meta_data(
+                unicode(self.field(u'license_version').toString()),
+                unicode(self.field(u'license_version').toString()),
+                unicode(self.field(u'license_copyright').toString()),
+                unicode(self.field(u'license_permission').toString())
+            )
+        else:
+            self.ImportProgressLabel.setText(
+                self.trUtf8('Your Bible import failed.'))
+            self.ImportProgressBar.setValue(self.ImportProgressBar.maximum())
+
+    def postImport(self):
+        self.ImportProgressLabel.setText(self.trUtf8('Finished import.'))
+        self.finishButton.setEnabled(True)
+        Receiver.send_message(u'process_events')
+

=== modified file 'openlp/plugins/bibles/lib/bibleCSVimpl.py'
--- openlp/plugins/bibles/lib/bibleCSVimpl.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/lib/bibleCSVimpl.py	2009-12-24 18:07:18 +0000
@@ -88,18 +88,20 @@
                 # split into 3 units and leave the rest as a single field
                 p = line.split(u',', 3)
                 p0 = p[0].replace(u'"', u'')
-                p3 = p[3].replace(u'"',u'')
+                p3 = p[3].replace(u'"', u'')
                 if book_ptr is not p0:
                     book = self.bibledb.get_bible_book(p0)
                     book_ptr = book.name
                     # increament the progress bar
-                    dialogobject.incrementProgressBar(book.name)
+                    dialogobject.incrementProgressBar(u'Importing %s %s' % \
+                        book.name)
                 self.bibledb.add_verse(book.id, p[1], p[2], p3)
                 count += 1
                 #Every x verses repaint the screen
                 if count % 3 == 0:
                     Receiver.send_message(u'process_events')
                     count = 0
+            self.bibledb.save_verses()
         except:
             log.exception(u'Loading verses from file failed')
         finally:

=== modified file 'openlp/plugins/bibles/lib/bibleDBimpl.py'
--- openlp/plugins/bibles/lib/bibleDBimpl.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/lib/bibleDBimpl.py	2009-12-24 18:07:18 +0000
@@ -53,20 +53,23 @@
         self.metadata.create_all(checkfirst=True)
 
     def create_tables(self):
-        log.debug( u'createTables')
+        log.debug(u'createTables')
         self.save_meta(u'dbversion', u'2')
         self._load_testament(u'Old Testament')
         self._load_testament(u'New Testament')
         self._load_testament(u'Apocrypha')
 
     def add_verse(self, bookid, chap, vse, text):
-        #log.debug(u'add_verse %s,%s,%s", bookid, chap, vse)
         verse = Verse()
         verse.book_id = bookid
         verse.chapter = chap
         verse.verse = vse
         verse.text = text
         self.session.add(verse)
+        return verse
+
+    def save_verses(self):
+        log.debug('Saving verses...')
         self.session.commit()
 
     def create_chapter(self, bookid, chap, textlist):

=== modified file 'openlp/plugins/bibles/lib/bibleOSISimpl.py'
--- openlp/plugins/bibles/lib/bibleOSISimpl.py	2009-12-12 09:24:12 +0000
+++ openlp/plugins/bibles/lib/bibleOSISimpl.py	2009-12-24 18:07:18 +0000
@@ -28,7 +28,7 @@
 import logging
 import chardet
 import codecs
-import time
+import re
 
 from PyQt4 import QtCore
 
@@ -54,22 +54,31 @@
             A reference to a Bible database object.
         """
         log.info(u'BibleOSISImpl Initialising')
+        self.verse_regex = re.compile(
+            r'<verse osisID="([a-zA-Z0-9 ]*).([0-9]*).([0-9]*)">(.*?)</verse>')
+        self.note_regex = re.compile(r'<note(.*?)>(.*?)</note>')
+        self.title_regex = re.compile(r'<title(.*?)>(.*?)</title>')
+        self.milestone_regex = re.compile(r'<milestone(.*?)/>')
+        self.fi_regex = re.compile(r'<FI>(.*?)<Fi>')
+        self.rf_regex = re.compile(r'<RF>(.*?)<Rf>')
+        self.lb_regex = re.compile(r'<lb(.*?)>')
+        self.l_regex = re.compile(r'<l (.*?)>')
+        self.w_regex = re.compile(r'<w (.*?)>')
+        self.q_regex = re.compile(r'<q (.*?)>')
+        self.spaces_regex = re.compile(r'([ ]{2,})')
         self.bibledb = bibledb
-        # books of the bible linked to bibleid  {osis , name}
-        self.booksOfBible = {}
-        # books of the bible linked to bibleid  {osis ,Abbrev }
-        self.abbrevOfBible = {}
+        self.books = {}
         filepath = os.path.split(os.path.abspath(__file__))[0]
         filepath = os.path.abspath(os.path.join(
-            filepath, u'..', u'resources',u'osisbooks.csv'))
+            filepath, u'..', u'resources', u'osisbooks.csv'))
         fbibles = None
         self.loadbible = True
         try:
             fbibles = open(filepath, u'r')
             for line in fbibles:
-                p = line.split(u',')
-                self.booksOfBible[p[0]] = p[1].replace(u'\n', u'')
-                self.abbrevOfBible[p[0]] = p[2].replace(u'\n', u'')
+                book = line.split(u',')
+                self.books[book[0]] = (book[1].lstrip().rstrip(),
+                    book[2].lstrip().rstrip())
         except:
             log.exception(u'OSIS bible import failed')
         finally:
@@ -99,7 +108,7 @@
         detect_file = None
         try:
             detect_file = open(osisfile_record, u'r')
-            details = chardet.detect(detect_file.read(2048))
+            details = chardet.detect(detect_file.read(3000))
         except:
             log.exception(u'Failed to detect OSIS file encoding')
             return
@@ -109,130 +118,59 @@
         osis = None
         try:
             osis = codecs.open(osisfile_record, u'r', details['encoding'])
-            book_ptr = None
-            count = 0
-            verseText = u'<verse osisID='
+            last_chapter = 0
             testament = 1
-            for file_record in osis.readlines():
-                # cancel pressed on UI
-                if not self.loadbible:
-                    break
-                pos = file_record.find(verseText)
-                # we have a verse
-                if pos > -1:
-                    epos = file_record.find(u'>', pos)
-                    # Book Reference
-                    ref = file_record[pos+15:epos-1]
-                    #lets find the bible text only
-                    # find start of text
-                    pos = epos + 1
-                    # end  of text
-                    epos = file_record.find(u'</verse>', pos)
-                    text = file_record[pos : epos]
-                    #remove tags of extra information
-                    text = self.remove_block(u'<title', u'</title>', text)
-                    text = self.remove_block(u'<note', u'</note>', text)
-                    text = self.remove_block(
-                        u'<divineName', u'</divineName>', text)
-                    text = self.remove_tag(u'<lb', text)
-                    text = self.remove_tag(u'<q', text)
-                    text = self.remove_tag(u'<l', text)
-                    text = self.remove_tag(u'<lg', text)
-                    # Strange tags where the end is not the same as the start
-                    # The must be in this order as at least one bible has them
-                    # crossing and the removal does not work.
-                    pos = text.find(u'<FI>')
-                    while pos > -1:
-                        epos = text.find(u'<Fi>', pos)
-                        if epos == -1: # TODO
-                            pos = -1
-                        else:
-                            text = text[:pos] + text[epos + 4: ]
-                            pos = text.find(u'<FI>')
-                    pos = text.find(u'<RF>')
-                    while pos > -1:
-                        epos = text.find(u'<Rf>', pos)
-                        text = text[:pos] + text[epos + 4: ]
-                        pos = text.find(u'<RF>')
-                    # split up the reference
-                    p = ref.split(u'.', 3)
-                    if book_ptr != p[0]:
-                        # first time through
-                        if book_ptr is None:
-                            # set the max book size depending
-                            # on the first book read
-                            if p[0] == u'Gen':
-                                dialogobject.setMax(65)
-                            else:
-                                dialogobject.setMax(27)
-                        # First book of NT
-                        if  p[0] == u'Matt':
+            db_book = None
+            for file_record in osis:
+                match = self.verse_regex.search(file_record)
+                if match:
+                    book = match.group(1)
+                    chapter = int(match.group(2))
+                    verse = int(match.group(3))
+                    verse_text = match.group(4)
+                    if not db_book or db_book.name != book:
+                        if book == u'Matt':
                             testament += 1
-                        book_ptr = p[0]
-                        book = self.bibledb.create_book(
-                            unicode(self.booksOfBible[p[0]]),
-                            unicode(self.abbrevOfBible[p[0]]),
+                        db_book = self.bibledb.create_book(
+                            unicode(self.books[book][0]),
+                            unicode(self.books[book][1]),
                             testament)
+                    if last_chapter == 0:
+                        if book == u'Gen':
+                            dialogobject.ImportProgressBar.setMaximum(1188)
+                        else:
+                            dialogobject.ImportProgressBar.setMaximum(260)
+                    if last_chapter != chapter:
+                        if last_chapter != 0:
+                            self.bibledb.save_verses()
                         dialogobject.incrementProgressBar(
-                            self.booksOfBible[p[0]])
-                        Receiver.send_message(u'process_events')
-                        #minor delay to get the events processed
-                        time.sleep(0.1)
-                        count = 0
-                    self.bibledb.add_verse(book.id, p[1], p[2], text)
-                    count += 1
-                    #Every 3 verses repaint the screen
-                    if count % 30 == 0:
-                        Receiver.send_message(u'process_events')
-                        #minor delay to get the events processed
-                        time.sleep(0.1)
-                        count = 0
+                            u'Importing %s %s...' % \
+                            (self.books[match.group(1)][0], chapter))
+                        last_chapter = chapter
+                    # All of this rigmarol below is because the mod2osis
+                    # tool from the Sword library embeds XML in the OSIS
+                    # but neglects to enclose the verse text (with XML) in
+                    # <[CDATA[ ]]> tags.
+                    verse_text = self.note_regex.sub(u'', verse_text)
+                    verse_text = self.title_regex.sub(u'', verse_text)
+                    verse_text = self.milestone_regex.sub(u'', verse_text)
+                    verse_text = self.fi_regex.sub(u'', verse_text)
+                    verse_text = self.rf_regex.sub(u'', verse_text)
+                    verse_text = self.lb_regex.sub(u'', verse_text)
+                    verse_text = self.l_regex.sub(u'', verse_text)
+                    verse_text = self.w_regex.sub(u'', verse_text)
+                    verse_text = self.q_regex.sub(u'', verse_text)
+                    verse_text = verse_text.replace(u'</lb>', u'')\
+                        .replace(u'</l>', u'').replace(u'<lg>', u'')\
+                        .replace(u'</lg>', u'').replace(u'</q>', u'')\
+                        .replace(u'</div>', u'')
+                    verse_text = self.spaces_regex.sub(u' ', verse_text)
+                    self.bibledb.add_verse(db_book.id, chapter, verse, verse_text)
+            self.bibledb.save_verses()
+            dialogobject.incrementProgressBar(u'Finishing import...')
         except:
             log.exception(u'Loading bible from OSIS file failed')
         finally:
             if osis:
                 osis.close()
 
-    def remove_block(self, start_tag, end_tag, text):
-        """
-        Removes a block of text between two tags::
-
-            <tag attrib="xvf">Some not wanted text</tag>
-
-        ``start_tag``
-            The XML tag to look for.
-
-        ``end_tag``
-            The ending XML tag.
-
-        ``text``
-            The string of XML to search.
-        """
-        pos = text.find(start_tag)
-        while pos > -1:
-            epos = text.find(end_tag, pos)
-            if epos == -1:
-                pos = -1
-            else:
-                text = text[:pos] + text[epos + len(end_tag): ]
-                pos = text.find(start_tag)
-        return text
-
-    def remove_tag(self, start_tag, text):
-        """
-        Removes a single tag::
-
-            <tag attrib1="fajkdf" attrib2="fajkdf" attrib3="fajkdf" />
-
-        ``start_tag``
-            The XML tag to remove.
-
-        ``text``
-            The string of XML to search.
-        """
-        pos = text.find(start_tag)
-        while pos > -1:
-            epos = text.find(u'/>', pos)
-            text = text[:pos] + text[epos + 2: ]
-            pos = text.find(start_tag)
-        return text

=== added file 'openlp/plugins/bibles/lib/bibleOpenSongimpl.py'
--- openlp/plugins/bibles/lib/bibleOpenSongimpl.py	1970-01-01 00:00:00 +0000
+++ openlp/plugins/bibles/lib/bibleOpenSongimpl.py	2009-12-24 18:07:18 +0000
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2009 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael      #
+# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
+# Carsten Tinggaard                                                           #
+# --------------------------------------------------------------------------- #
+# 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                          #
+###############################################################################
+
+import os
+import os.path
+import logging
+import chardet
+import codecs
+from lxml import objectify
+
+from PyQt4 import QtCore
+
+from openlp.core.lib import Receiver
+
+class BibleOpenSongImpl():
+    """
+    OSIS Bible format importer class.
+    """
+    global log
+    log = logging.getLogger(__name__)
+    log.info(u'BibleOpenSongImpl loaded')
+
+    def __init__(self, biblepath, bibledb):
+        """
+        Constructor to create and set up an instance of the
+        BibleOpenSongImpl class.
+
+        ``biblepath``
+            This does not seem to be used.
+
+        ``bibledb``
+            A reference to a Bible database object.
+        """
+        log.info(u'BibleOpenSongImpl Initialising')
+        self.bibledb = bibledb
+        self.loadbible = True
+        QtCore.QObject.connect(Receiver.get_receiver(),
+            QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
+
+    def stop_import(self):
+        """
+        Stops the import of the Bible.
+        """
+        self.loadbible = False
+
+    def load_data(self, bible_file, dialogobject=None):
+        """
+        Loads a Bible from file.
+
+        ``bible_file``
+            The file to import from.
+
+        ``dialogobject``
+            The Import dialog, so that we can increase the counter on
+            the progress bar.
+        """
+        log.info(u'Load data for %s' % bible_file)
+        bible_file = unicode(bible_file)
+        detect_file = None
+        try:
+            detect_file = open(bible_file, u'r')
+            details = chardet.detect(detect_file.read(2048))
+        except:
+            log.exception(u'Failed to detect OpenSong file encoding')
+            return
+        finally:
+            if detect_file:
+                detect_file.close()
+        opensong_bible = None
+        try:
+            opensong_bible = codecs.open(bible_file, u'r', details['encoding'])
+            opensong = objectify.parse(opensong_bible)
+            bible = opensong.getroot()
+            for book in bible.b:
+                dbbook = self.bibledb.create_book(book.attrib[u'n'],
+                    book.attrib[u'n'][:4])
+                for chapter in book.c:
+                    for verse in chapter.v:
+                        self.bibledb.add_verse(dbbook.id, chapter.attrib[u'n'],
+                            verse.attrib[u'n'], verse.text)
+                        Receiver.send_message(u'process_events')
+                    dialogobject.incrementProgressBar(u'Importing %s %s' % \
+                        (dbbook.name, str(chapter.attrib[u'n'])))
+                    self.bibledb.save_verses()
+        except:
+            log.exception(u'Loading bible from OpenSong file failed')
+        finally:
+            if opensong_bible:
+                opensong_bible.close()
+

=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/lib/manager.py	2009-12-24 18:07:18 +0000
@@ -26,6 +26,7 @@
 import logging
 import os
 
+from bibleOpenSongimpl import BibleOpenSongImpl
 from bibleOSISimpl import BibleOSISImpl
 from bibleCSVimpl import BibleCSVImpl
 from bibleDBimpl import BibleDBImpl
@@ -35,6 +36,28 @@
     Full = 1
     Partial = 2
 
+
+class BibleFormat(object):
+    Unknown = -1
+    OSIS = 0
+    CSV = 1
+    OpenSong = 2
+    WebDownload = 3
+
+    @classmethod
+    def get_handler(class_, id):
+        if id == class_.OSIS:
+            return BibleOSISImpl
+        elif id == class_.CSV:
+            return BibleCSVImpl
+        elif id == class_.OpenSong:
+            return BibleOpenSongImpl
+        elif id == class_.WebDownload:
+            return BibleHTTPImpl
+        else:
+            return None
+
+
 class BibleManager(object):
     """
     The Bible manager which holds and manages all the Bibles.
@@ -141,6 +164,15 @@
         """
         self.dialogobject = dialogobject
 
+    def import_bible(self, type, **kwargs):
+        """
+        Register a bible in the bible cache, and then import the verses.
+
+        ``type``
+            What type of Bible,
+        """
+        pass
+
     def register_http_bible(self, biblename, biblesource, bibleid,
                             proxyurl=None, proxyid=None, proxypass=None):
         """
@@ -176,7 +208,7 @@
             self.bible_db_cache[biblename] = nbible
             nhttp = BibleHTTPImpl()
             nhttp.set_bible_source(biblesource)
-            self.bible_http_cache [biblename] = nhttp
+            self.bible_http_cache[biblename] = nhttp
             # register a lazy loading interest
             nbible.save_meta(u'WEB', biblesource)
             # store the web id of the bible
@@ -245,6 +277,28 @@
                 biblename, osisfile)
             return False
 
+    def register_opensong_bible(self, biblename, opensongfile):
+        """
+        Method to load a bible from an OpenSong xml file. If the database
+        exists it is deleted and the database is reloaded from scratch.
+        """
+        log.debug(u'register_opensong_file_bible %s, %s', biblename, opensongfile)
+        if self._is_new_bible(biblename):
+            # Create new Bible
+            nbible = BibleDBImpl(self.biblePath, biblename, self.config)
+            # Create Database
+            nbible.create_tables()
+            # Cache the database for use later
+            self.bible_db_cache[biblename] = nbible
+            # Create the loader and pass in the database
+            bcsv = BibleOpenSongImpl(self.biblePath, nbible)
+            bcsv.load_data(opensongfile, self.dialogobject)
+            return True
+        else:
+            log.debug(u'register_opensong_file_bible %s, %s not created '
+                u'already exists', biblename, opensongfile)
+            return False
+
     def get_bibles(self, mode=BibleMode.Full):
         """
         Returns a list of Books of the bible. When ``mode`` is set to

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2009-11-30 20:29:26 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2009-12-24 18:07:18 +0000
@@ -30,7 +30,7 @@
 
 from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \
     BaseListWithDnD
-from openlp.plugins.bibles.forms import BibleImportForm
+from openlp.plugins.bibles.forms import ImportWizardForm
 from openlp.plugins.bibles.lib.manager import BibleMode
 
 class BibleListView(BaseListWithDnD):
@@ -326,8 +326,11 @@
             self.AdvancedBookComboBox.itemData(item).toInt()[0])
 
     def onNewClick(self):
-        self.bibleimportform = BibleImportForm(
-            self.parent.config, self.parent.biblemanager, self)
+        #self.bibleimportform = BibleImportForm(
+        #    self.parent.config, self.parent.biblemanager, self)
+        #self.bibleimportform.exec_()
+        self.bibleimportform = ImportWizardForm(self, self.parent.config,
+            self.parent.biblemanager, self.parent)
         self.bibleimportform.exec_()
         self.reloadBibles()
 

=== modified file 'openlp/plugins/custom/forms/editcustomform.py'
--- openlp/plugins/custom/forms/editcustomform.py	2009-12-16 17:54:45 +0000
+++ openlp/plugins/custom/forms/editcustomform.py	2009-12-24 18:07:18 +0000
@@ -113,7 +113,6 @@
             self.customSlide = self.custommanager.get_custom(id)
             self.TitleEdit.setText(self.customSlide.title)
             self.CreditEdit.setText(self.customSlide.credits)
-
             songXML = SongXMLParser(self.customSlide.text)
             verseList = songXML.get_verses()
             for verse in verseList:

=== added file 'resources/forms/bibleimportwizard.ui'
--- resources/forms/bibleimportwizard.ui	1970-01-01 00:00:00 +0000
+++ resources/forms/bibleimportwizard.ui	2009-12-24 18:07:18 +0000
@@ -0,0 +1,619 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Wizard</class>
+ <widget class="QWizard" name="Wizard">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>550</width>
+    <height>386</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Bible Import Wizard</string>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <property name="wizardStyle">
+   <enum>QWizard::ModernStyle</enum>
+  </property>
+  <property name="options">
+   <set>QWizard::NoBackButtonOnLastPage|QWizard::NoBackButtonOnStartPage</set>
+  </property>
+  <widget class="QWizardPage" name="WelcomePage">
+   <property name="title">
+    <string/>
+   </property>
+   <property name="subTitle">
+    <string/>
+   </property>
+   <layout class="QHBoxLayout" name="WelcomeLayout">
+    <property name="spacing">
+     <number>8</number>
+    </property>
+    <property name="margin">
+     <number>0</number>
+    </property>
+    <item>
+     <widget class="QLabel" name="ImportBibleImage">
+      <property name="minimumSize">
+       <size>
+        <width>163</width>
+        <height>0</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>163</width>
+        <height>16777215</height>
+       </size>
+      </property>
+      <property name="lineWidth">
+       <number>0</number>
+      </property>
+      <property name="text">
+       <string/>
+      </property>
+      <property name="pixmap">
+       <pixmap resource="../images/openlp-2.qrc">:/wizards/wizard_importbible.bmp</pixmap>
+      </property>
+      <property name="indent">
+       <number>0</number>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <layout class="QVBoxLayout" name="WelcomePageLayout">
+      <property name="spacing">
+       <number>8</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="TitleLabel">
+        <property name="text">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body &gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:14pt; font-weight:600;&quot;&gt;Welcome to the Bible Import Wizard&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="WelcomeTopSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>40</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QLabel" name="InformationLabel">
+        <property name="text">
+         <string>This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from.</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="margin">
+         <number>10</number>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="WelcomeBottomSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>40</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QWizardPage" name="SelectPage">
+   <property name="title">
+    <string>Select Import Source</string>
+   </property>
+   <property name="subTitle">
+    <string>Select the import format, and where to import from.</string>
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <property name="spacing">
+     <number>8</number>
+    </property>
+    <property name="margin">
+     <number>20</number>
+    </property>
+    <item>
+     <layout class="QHBoxLayout" name="FormatSelectLayout">
+      <property name="spacing">
+       <number>8</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="FormatLabel">
+        <property name="text">
+         <string>Format:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QComboBox" name="FormatComboBox">
+        <item>
+         <property name="text">
+          <string>OSIS</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>CSV</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>OpenSong</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Web Download</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item>
+       <spacer name="SourceTypeSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <widget class="QStackedWidget" name="FormatWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="OsisPage">
+       <layout class="QFormLayout" name="formLayout_2">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::ExpandingFieldsGrow</enum>
+        </property>
+        <property name="horizontalSpacing">
+         <number>8</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>8</number>
+        </property>
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="OsisBibleNameLabel">
+          <property name="text">
+           <string>Bible Name:</string>
+          </property>
+          <property name="indent">
+           <number>0</number>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="OsisBibleNameEdit"/>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="OsisLocationLabel">
+          <property name="text">
+           <string>File Location:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <layout class="QHBoxLayout" name="OsisLocationLayout">
+          <property name="spacing">
+           <number>8</number>
+          </property>
+          <item>
+           <widget class="QLineEdit" name="OSISLocationEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="OsisFileButton">
+            <property name="maximumSize">
+             <size>
+              <width>32</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="icon">
+             <iconset resource="../images/openlp-2.qrc">
+              <normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="CsvPage">
+       <layout class="QFormLayout" name="CsvSourceLayout">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::ExpandingFieldsGrow</enum>
+        </property>
+        <property name="labelAlignment">
+         <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
+        </property>
+        <property name="formAlignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+        <property name="horizontalSpacing">
+         <number>8</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>8</number>
+        </property>
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="BooksLocationLabel">
+          <property name="text">
+           <string>Books Location:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <layout class="QHBoxLayout" name="CsvBooksLayout">
+          <property name="spacing">
+           <number>8</number>
+          </property>
+          <item>
+           <widget class="QLineEdit" name="BooksLocationEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="BooksFileButton">
+            <property name="maximumSize">
+             <size>
+              <width>32</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="icon">
+             <iconset resource="../images/openlp-2.qrc">
+              <normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="VerseLocationLabel">
+          <property name="text">
+           <string>Verse Location:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <layout class="QHBoxLayout" name="CsvVerseLayout">
+          <property name="spacing">
+           <number>8</number>
+          </property>
+          <item>
+           <widget class="QLineEdit" name="CsvVerseLocationEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="CsvVersesFileButton">
+            <property name="maximumSize">
+             <size>
+              <width>32</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="icon">
+             <iconset resource="../images/openlp-2.qrc">
+              <normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="OpenSongPage">
+       <layout class="QFormLayout" name="formLayout_3">
+        <property name="horizontalSpacing">
+         <number>8</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>8</number>
+        </property>
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="OpenSongFileLabel">
+          <property name="text">
+           <string>Bible Filename:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <layout class="QHBoxLayout" name="OpenSongFileLayout">
+          <property name="spacing">
+           <number>8</number>
+          </property>
+          <item>
+           <widget class="QLineEdit" name="OpenSongFileEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="OpenSongBrowseButton">
+            <property name="text">
+             <string/>
+            </property>
+            <property name="icon">
+             <iconset resource="../images/openlp-2.qrc">
+              <normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="WebDownloadPage">
+       <layout class="QVBoxLayout" name="WebDownloadLayout">
+        <property name="spacing">
+         <number>8</number>
+        </property>
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QTabWidget" name="WebDownloadTabWidget">
+          <property name="currentIndex">
+           <number>0</number>
+          </property>
+          <widget class="QWidget" name="DownloadOptionsTab">
+           <attribute name="title">
+            <string>Download Options</string>
+           </attribute>
+           <layout class="QFormLayout" name="DownloadOptionsLayout">
+            <property name="horizontalSpacing">
+             <number>8</number>
+            </property>
+            <property name="verticalSpacing">
+             <number>8</number>
+            </property>
+            <property name="margin">
+             <number>8</number>
+            </property>
+            <item row="0" column="0">
+             <widget class="QLabel" name="LocationLabel">
+              <property name="text">
+               <string>Location:</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QComboBox" name="LocationComboBox">
+              <item>
+               <property name="text">
+                <string>Crosswalk</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="BibleLabel">
+              <property name="text">
+               <string>Bible:</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="1">
+             <widget class="QComboBox" name="BibleComboBox">
+              <property name="sizeAdjustPolicy">
+               <enum>QComboBox::AdjustToContents</enum>
+              </property>
+              <item>
+               <property name="text">
+                <string>English Standard Version</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>King James Version</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>New International Version</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+          <widget class="QWidget" name="ProxyServerTab">
+           <attribute name="title">
+            <string>Proxy Server (Optional)</string>
+           </attribute>
+           <layout class="QFormLayout" name="formLayout">
+            <item row="0" column="0">
+             <widget class="QLabel" name="AddressLabel">
+              <property name="text">
+               <string>Server:</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QLineEdit" name="AddressEdit"/>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="UsernameLabel">
+              <property name="text">
+               <string>Username:</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="1">
+             <widget class="QLineEdit" name="UsernameEdit"/>
+            </item>
+            <item row="2" column="0">
+             <widget class="QLabel" name="PasswordLabel">
+              <property name="text">
+               <string>Password:</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QLineEdit" name="PasswordEdit"/>
+            </item>
+           </layout>
+          </widget>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QWizardPage" name="LicenseDetailsPage">
+   <property name="title">
+    <string>License Details</string>
+   </property>
+   <property name="subTitle">
+    <string>Set up the Bible's license details.</string>
+   </property>
+   <layout class="QFormLayout" name="formLayout_5">
+    <property name="horizontalSpacing">
+     <number>8</number>
+    </property>
+    <property name="verticalSpacing">
+     <number>8</number>
+    </property>
+    <property name="margin">
+     <number>20</number>
+    </property>
+    <item row="0" column="0">
+     <widget class="QLabel" name="VersionNameLabel">
+      <property name="text">
+       <string>Version Name:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <widget class="QLineEdit" name="VersionNameEdit"/>
+    </item>
+    <item row="1" column="0">
+     <widget class="QLabel" name="CopyrightLabel">
+      <property name="text">
+       <string>Copyright:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="1">
+     <widget class="QLineEdit" name="CopyrightEdit"/>
+    </item>
+    <item row="2" column="0">
+     <widget class="QLabel" name="PermisionLabel">
+      <property name="text">
+       <string>Permission:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="1">
+     <widget class="QLineEdit" name="PermisionEdit"/>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QWizardPage" name="ImportPage">
+   <property name="title">
+    <string>Importing</string>
+   </property>
+   <property name="subTitle">
+    <string>Please wait while your Bible is imported.</string>
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout_4">
+    <property name="spacing">
+     <number>8</number>
+    </property>
+    <property name="margin">
+     <number>50</number>
+    </property>
+    <item>
+     <widget class="QLabel" name="ImportProgressLabel">
+      <property name="text">
+       <string>Ready.</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QProgressBar" name="ImportProgressBar">
+      <property name="value">
+       <number>0</number>
+      </property>
+      <property name="invertedAppearance">
+       <bool>false</bool>
+      </property>
+      <property name="format">
+       <string>%p</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources>
+  <include location="../images/openlp-2.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>FormatComboBox</sender>
+   <signal>currentIndexChanged(int)</signal>
+   <receiver>FormatWidget</receiver>
+   <slot>setCurrentIndex(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>106</x>
+     <y>76</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>296</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>

=== renamed file 'openlp-1to2-converter.py' => 'scripts/openlp-1to2-converter.py'

Follow ups