← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/bugfixes into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/bugfixes into lp:openlp.

Requested reviews:
    openlp.org Core (openlp-core)

New Bible Import Screen
Transparent Theme backgrounds
Global Theme Handling improvements
-- 
https://code.launchpad.net/~trb143/openlp/bugfixes/+merge/9843
Your team openlp.org Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py	2009-08-05 17:59:37 +0000
+++ openlp/core/lib/renderer.py	2009-08-07 17:19:32 +0000
@@ -154,11 +154,6 @@
                 text.append(line)
         #print text
         split_text = self.pre_render_text(text)
-#        print "-----------------------------"
-#        print split_text
-#        split_text = self._split_set_of_lines(text, False)
-#        print "-----------------------------"
-#        print split_text
         log.debug(u'format_slide - End')
         return split_text
 
@@ -168,7 +163,7 @@
         line_width = self._rect.width() - self._right_margin
         #number of lines on a page - adjust for rounding up.
         #print self._rect.height() ,  metrics.height(),  int(self._rect.height() / metrics.height())
-        page_length = int(self._rect.height() / metrics.height()) - 1
+        page_length = int(self._rect.height() / metrics.height() - 2 ) - 1
         ave_line_width = line_width / metrics.averageCharWidth()
 #        print "A", ave_line_width
         ave_line_width = int(ave_line_width + (ave_line_width * 0.5))
@@ -272,113 +267,49 @@
         log.debug(u'render background %s start', self._theme.background_type)
         painter = QtGui.QPainter()
         painter.begin(self._bg_frame)
-        if self._theme.background_type == u'solid':
-            painter.fillRect(self._frame.rect(), QtGui.QColor(self._theme.background_color))
-        elif self._theme.background_type == u'gradient':
-            # gradient
-            gradient = None
-            if self._theme.background_direction == u'horizontal':
-                w = int(self._frame.width()) / 2
-                # vertical
-                gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height())
-            elif self._theme.background_direction == u'vertical':
-                h = int(self._frame.height()) / 2
-                # Horizontal
-                gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h)
-            else:
-                w = int(self._frame.width()) / 2
-                h = int(self._frame.height()) / 2
-                # Circular
-                gradient = QtGui.QRadialGradient(w, h, w)
-            gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
-            gradient.setColorAt(1, QtGui.QColor(self._theme.background_endColor))
-            painter.setBrush(QtGui.QBrush(gradient))
-            rectPath = QtGui.QPainterPath()
-            max_x = self._frame.width()
-            max_y = self._frame.height()
-            rectPath.moveTo(0, 0)
-            rectPath.lineTo(0, max_y)
-            rectPath.lineTo(max_x, max_y)
-            rectPath.lineTo(max_x, 0)
-            rectPath.closeSubpath()
-            painter.drawPath(rectPath)
-        elif self._theme.background_type== u'image':
-            # image
-            painter.fillRect(self._frame.rect(), QtCore.Qt.black)
-            if self.bg_image is not None:
-                painter.drawImage(0 ,0 , self.bg_image)
+        if self._theme.background_mode == u'transparent':
+            painter.fillRect(self._frame.rect(), QtCore.Qt.transparent)
+        else:
+            if self._theme.background_type == u'solid':
+                painter.fillRect(self._frame.rect(), QtGui.QColor(self._theme.background_color))
+            elif self._theme.background_type == u'gradient':
+                # gradient
+                gradient = None
+                if self._theme.background_direction == u'horizontal':
+                    w = int(self._frame.width()) / 2
+                    # vertical
+                    gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height())
+                elif self._theme.background_direction == u'vertical':
+                    h = int(self._frame.height()) / 2
+                    # Horizontal
+                    gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h)
+                else:
+                    w = int(self._frame.width()) / 2
+                    h = int(self._frame.height()) / 2
+                    # Circular
+                    gradient = QtGui.QRadialGradient(w, h, w)
+                gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
+                gradient.setColorAt(1, QtGui.QColor(self._theme.background_endColor))
+                painter.setBrush(QtGui.QBrush(gradient))
+                rectPath = QtGui.QPainterPath()
+                max_x = self._frame.width()
+                max_y = self._frame.height()
+                rectPath.moveTo(0, 0)
+                rectPath.lineTo(0, max_y)
+                rectPath.lineTo(max_x, max_y)
+                rectPath.lineTo(max_x, 0)
+                rectPath.closeSubpath()
+                painter.drawPath(rectPath)
+            elif self._theme.background_type== u'image':
+                # image
+                painter.fillRect(self._frame.rect(), QtCore.Qt.black)
+                if self.bg_image is not None:
+                    painter.drawImage(0 ,0 , self.bg_image)
         painter.end()
         self._bg_frame_small = self._bg_frame.scaled(QtCore.QSize(280, 210), QtCore.Qt.KeepAspectRatio,
             QtCore.Qt.SmoothTransformation)
         log.debug(u'render background End')
 
-#    def _split_set_of_lines(self, lines, footer):
-#        """
-#        Given a list of lines, decide how to split them best if they don't all
-#        fit on the screen. This is done by splitting at 1/2, 1/3 or 1/4 of the
-#        set. If it doesn't fit, even at this size, just split at each
-#        opportunity. We'll do this by getting the bounding box of each line,
-#        and then summing them appropriately.
-#
-#        Returns a list of [lists of lines], one set for each screenful.
-#
-#        ``lines``
-#            The lines of text to split.
-#
-#        ``footer``
-#            The footer text.
-#        """
-#        bboxes = []
-#        for line in lines:
-#            bboxes.append(self._render_and_wrap_single_line(line, footer))
-#        numlines = len(lines)
-#        bottom = self._rect.bottom()
-#        for ratio in (numlines,  numlines/2, numlines/3, numlines/4):
-#            good = 1
-#            startline = 0
-#            endline = startline + ratio
-#            while (endline <= numlines and endline != 0):
-#                by = 0
-#                for (x,y) in bboxes[startline:endline]:
-#                    by += y
-#                if by > bottom:
-#                    good = 0
-#                    break
-#                startline += ratio
-#                endline = startline + ratio
-#            if good == 1:
-#                break
-#        retval = []
-#        numlines_per_page = ratio
-#        if good:
-#            c = 0
-#            thislines = []
-#            while c < numlines:
-#                thislines.append(lines[c])
-#                c += 1
-#                if len(thislines) == numlines_per_page:
-#                    retval.append(thislines)
-#                    thislines = []
-#            if len(thislines) > 0:
-#                retval.append(thislines)
-#        else:
-#            # print "Just split where you can"
-#            retval = []
-#            startline = 0
-#            endline = startline + 1
-#            while (endline <= numlines):
-#                by = 0
-#                for (x,y) in bboxes[startline:endline]:
-#                    by += y
-#                if by > bottom:
-#                    retval.append(lines[startline:endline-1])
-#                    startline = endline-1
-#                    # gets incremented below
-#                    endline = startline
-#                    by = 0
-#                endline += 1
-#        return retval
-
     def _correctAlignment(self, rect, bbox):
         """
         Corrects the vertical alignment of text.

=== modified file 'openlp/core/lib/themexmlhandler.py'
--- openlp/core/lib/themexmlhandler.py	2009-08-05 17:59:37 +0000
+++ openlp/core/lib/themexmlhandler.py	2009-08-07 17:19:32 +0000
@@ -331,6 +331,11 @@
         for element in iter:
             if len(element.getchildren()) > 0:
                 master = element.tag + u'_'
+            else:
+                #background transparent tags have no children so special case
+                if element.tag == u'background':
+                    for e in element.attrib.iteritems():
+                        setattr(self, element.tag + u'_' + e[0], e[1])
             if len(element.attrib) > 0:
                 for e in element.attrib.iteritems():
                     if master == u'font_' and e[0] == u'type':

=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py	2009-08-03 19:49:21 +0000
+++ openlp/core/ui/amendthemeform.py	2009-08-07 17:19:32 +0000
@@ -108,16 +108,19 @@
         new_theme.new_document(theme_name)
         save_from = None
         save_to = None
-        if self.theme.background_type == u'solid':
-            new_theme.add_background_solid(unicode(self.theme.background_color))
-        elif self.theme.background_type == u'gradient':
-            new_theme.add_background_gradient(unicode(self.theme.background_startColor),
-                    unicode(self.theme.background_endColor), self.theme.background_direction)
+        if self.theme.background_mode == u'transparent':
+            new_theme.add_background_transparent()
         else:
-            (path, filename) =os.path.split(unicode(self.theme.background_filename))
-            new_theme.add_background_image(filename)
-            save_to= os.path.join(self.path, theme_name, filename )
-            save_from = self.theme.background_filename
+            if self.theme.background_type == u'solid':
+                new_theme.add_background_solid(unicode(self.theme.background_color))
+            elif self.theme.background_type == u'gradient':
+                new_theme.add_background_gradient(unicode(self.theme.background_startColor),
+                        unicode(self.theme.background_endColor), self.theme.background_direction)
+            else:
+                (path, filename) =os.path.split(unicode(self.theme.background_filename))
+                new_theme.add_background_image(filename)
+                save_to= os.path.join(self.path, theme_name, filename )
+                save_from = self.theme.background_filename
 
         new_theme.add_font(unicode(self.theme.font_main_name), unicode(self.theme.font_main_color),
                 unicode(self.theme.font_main_proportion), unicode(self.theme.font_main_override), u'main',

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2009-08-02 16:13:59 +0000
+++ openlp/core/ui/servicemanager.py	2009-08-06 17:43:53 +0000
@@ -161,7 +161,7 @@
         # Last little bits of setting up
         self.config = PluginConfig(u'ServiceManager')
         self.servicePath = self.config.get_data_path()
-        self.service_theme = self.config.get_config(u'theme service theme', u'')
+        self.service_theme = unicode(self.config.get_config(u'theme service theme', u''))
 
     def onMoveSelectionUp(self):
         """
@@ -412,7 +412,11 @@
 
     def addServiceItem(self, item):
         """
-        Add an item to the list
+        Add a Service item to the list
+
+        ``item``
+            Service Item to be added
+
         """
         self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1, u'expanded':True})
         treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
@@ -465,13 +469,21 @@
     def dragEnterEvent(self, event):
         """
         Accept Drag events
+
+        ``event``
+            Handle of the event pint passed
+
         """
         event.accept()
 
     def dropEvent(self, event):
         """
-        Handle the release of the event and trigger the plugin
-        to add the data
+        Receive drop event and trigger an internal event to get the
+        plugins to build and push the correct service item
+        The drag event payload carries the plugin name
+
+        ``event``
+            Handle of the event pint passed
         """
         link = event.mimeData()
         if link.hasText():
@@ -481,12 +493,16 @@
     def updateThemeList(self, theme_list):
         """
         Called from ThemeManager when the Themes have changed
+
+        ``theme_list``
+            A list of current themes to be displayed
+
         """
         self.ThemeComboBox.clear()
         self.ThemeComboBox.addItem(u'')
         for theme in theme_list:
             self.ThemeComboBox.addItem(theme)
-        id = self.ThemeComboBox.findText(unicode(self.service_theme), QtCore.Qt.MatchExactly)
+        id = self.ThemeComboBox.findText(self.service_theme, QtCore.Qt.MatchExactly)
         # Not Found
         if id == -1:
             id = 0

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2009-08-02 16:13:59 +0000
+++ openlp/core/ui/thememanager.py	2009-08-07 19:05:00 +0000
@@ -28,7 +28,7 @@
 
 from openlp.core.ui import AmendThemeForm, ServiceManager
 from openlp.core.theme import Theme
-from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer,  translate,  file_to_xml,  buildIcon
+from openlp.core.lib import PluginConfig, Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer,  translate,  file_to_xml,  buildIcon
 from openlp.core.utils import ConfigHelper
 
 class ThemeManager(QtGui.QWidget):
@@ -68,10 +68,33 @@
         self.ThemeListWidget.setAlternatingRowColors(True)
         self.ThemeListWidget.setIconSize(QtCore.QSize(88,50))
         self.Layout.addWidget(self.ThemeListWidget)
+        #Signals
+        QtCore.QObject.connect(self.ThemeListWidget,
+           QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.changeGlobal)
+        #Variables
         self.themelist = []
         self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
         self.checkThemesExists(self.path)
         self.amendThemeForm.path = self.path
+        # Last little bits of setting up
+        self.config = PluginConfig(u'themes')
+        self.servicePath = self.config.get_data_path()
+        self.global_theme = unicode(self.config.get_config(u'theme global theme', u''))
+
+    def changeGlobal(self, index):
+        for count in range (0,  self.ThemeListWidget.count()):
+            item = self.ThemeListWidget.item(count)
+            oldName =  item.text()
+            #reset the old name
+            if oldName != unicode(item.data(QtCore.Qt.UserRole).toString()):
+                self.ThemeListWidget.item(count).setText(unicode(item.data(QtCore.Qt.UserRole).toString()))
+            #Set the new name
+            if count  == index.row():
+                self.global_theme = unicode(self.ThemeListWidget.item(count).text())
+                name = (u'(%s):%s' % (translate(u'ThemeManager', u'default'), self.global_theme))
+                self.ThemeListWidget.item(count).setText(name)
+                self.config.set_config(u'theme global theme', self.global_theme)
+                self.push_themes()
 
     def onAddTheme(self):
         self.amendThemeForm.loadTheme(None)
@@ -80,30 +103,38 @@
     def onEditTheme(self):
         item = self.ThemeListWidget.currentItem()
         if item is not None:
-            self.amendThemeForm.loadTheme(unicode(item.text()))
+            self.amendThemeForm.loadTheme(unicode(item.data(QtCore.Qt.UserRole).toString()))
             self.amendThemeForm.exec_()
 
     def onDeleteTheme(self):
+        self.global_theme = unicode(self.config.get_config(u'theme global theme', u''))
         item = self.ThemeListWidget.currentItem()
         if item is not None:
             theme = unicode(item.text())
-            th = theme +  u'.png'
-            row = self.ThemeListWidget.row(item)
-            self.ThemeListWidget.takeItem(row)
-            try:
-                os.remove(os.path.join(self.path, th))
-            except:
-                #if not present do not worry
-                pass
-            try:
-                shutil.rmtree(os.path.join(self.path, theme))
-            except:
-                #if not present do not worry
-                pass
-            #As we do not reload the themes push out the change
-            self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
-            self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
-            self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
+            # should be the same unless default
+            if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
+                QtGui.QMessageBox.critical(self,
+                    translate(u'ThemeManager', u'Error'),
+                    translate(u'ThemeManager', u'You are unable to delete the default theme!'),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+            else:
+                self.themelist.remove(theme)
+                th = theme +  u'.png'
+                row = self.ThemeListWidget.row(item)
+                self.ThemeListWidget.takeItem(row)
+                try:
+                    os.remove(os.path.join(self.path, th))
+                except:
+                    #if not present do not worry
+                    pass
+                try:
+                    shutil.rmtree(os.path.join(self.path, theme))
+                except:
+                    #if not present do not worry
+                    pass
+                #As we do not reload the themes push out the change
+                #Reaload the list as the internal lists and events need to be triggered
+                self.push_themes()
 
     def onExportTheme(self):
         pass
@@ -136,11 +167,18 @@
                     if os.path.exists(theme):
                         (path, filename) = os.path.split(unicode(file))
                         textName = os.path.splitext(name)[0]
-                        item_name = QtGui.QListWidgetItem(textName)
+                        if textName == self.global_theme:
+                            name = (u'(%s):%s' % (translate(u'ThemeManager', u'default'), textName))
+                        else:
+                            name = textName
+                        item_name = QtGui.QListWidgetItem(name)
                         item_name.setIcon(buildIcon(theme))
                         item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(textName))
                         self.ThemeListWidget.addItem(item_name)
                         self.themelist.append(textName)
+        self.push_themes()
+
+    def push_themes(self):
         self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
         self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
         self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
@@ -153,6 +191,7 @@
         xml_file = os.path.join(self.path, unicode(themename), unicode(themename) + u'.xml')
         try:
             xml = file_to_xml(xml_file)
+            #print xml
         except:
             newtheme = ThemeXML()
             newtheme.new_document(u'New Theme')
@@ -163,7 +202,9 @@
                 unicode(0), unicode(0), unicode(0))
             xml = newtheme.extract_xml()
         theme = ThemeXML()
+        #print theme
         theme.parse(xml)
+        #print "A ", theme
         theme.extend_image_filename(self.path)
         return theme
 
@@ -211,6 +252,9 @@
         self.generateAndSaveImage(dir, themename, filexml)
 
     def checkVersion1(self, xmlfile):
+        """
+        Am I a version 1 theme
+        """
         log.debug(u'checkVersion1 ')
         theme = xmlfile
         tree = ElementTree(element=XML(theme)).getroot()
@@ -220,6 +264,11 @@
             return True
 
     def migrateVersion122(self, filename, fullpath, xml_data):
+        """
+        Called by convert the xml data from version 1 format
+        to the current format.
+        New fields are defaulted but the new theme is useable
+        """
         log.debug(u'migrateVersion122 %s %s', filename, fullpath)
         theme = Theme(xml_data)
         newtheme = ThemeXML()

=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py	2009-06-16 18:21:24 +0000
+++ openlp/core/ui/themestab.py	2009-08-07 19:05:00 +0000
@@ -99,8 +99,6 @@
         QtCore.QObject.connect(self.DefaultComboBox,
             QtCore.SIGNAL(u'activated(int)'), self.onDefaultComboBoxChanged)
 
-        #self.DefaultListView.setScaledContents(True)
-
     def retranslateUi(self):
         self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
         self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
@@ -138,9 +136,9 @@
         self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)
 
     def onDefaultComboBoxChanged(self, value):
-        self.global_theme = self.DefaultComboBox.currentText()
+        self.global_theme = unicode(self.DefaultComboBox.currentText())
         self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)
-        image = self.parent.ThemeManagerContents.getPreviewImage(unicode(self.global_theme))
+        image = self.parent.ThemeManagerContents.getPreviewImage(self.global_theme)
         preview = QtGui.QPixmap(unicode(image))
         display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
         self.DefaultListView.setPixmap(display)
@@ -149,17 +147,19 @@
         """
         Called from ThemeManager when the Themes have changed
         """
+        #reload as may have been triggered by the ThemeManager
+        self.global_theme = self.config.get_config(u'theme global theme', u'')
         self.DefaultComboBox.clear()
         for theme in theme_list:
             self.DefaultComboBox.addItem(theme)
-        id = self.DefaultComboBox.findText(unicode(self.global_theme), QtCore.Qt.MatchExactly)
+        id = self.DefaultComboBox.findText(self.global_theme, QtCore.Qt.MatchExactly)
         if id == -1:
             id = 0 # Not Found
             self.global_theme = u''
         self.DefaultComboBox.setCurrentIndex(id)
         self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)
         if self.global_theme is not u'':
-            image = self.parent.ThemeManagerContents.getPreviewImage(unicode(self.global_theme))
+            image = self.parent.ThemeManagerContents.getPreviewImage(self.global_theme)
             preview = QtGui.QPixmap(unicode(image))
             display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
-            self.DefaultListView.setPixmap(display)
\ No newline at end of file
+            self.DefaultListView.setPixmap(display)

=== modified file 'openlp/plugins/bibles/forms/bibleimportdialog.py'
--- openlp/plugins/bibles/forms/bibleimportdialog.py	2009-06-19 19:49:00 +0000
+++ openlp/plugins/bibles/forms/bibleimportdialog.py	2009-08-07 17:19:32 +0000
@@ -2,49 +2,110 @@
 
 # Form implementation generated from reading ui file 'bibleimportdialog.ui'
 #
-# Created: Fri Feb 20 05:45:22 2009
+# Created: Fri Aug  7 06:07:06 2009
 #      by: PyQt4 UI code generator 4.4.4
 #
 # WARNING! All changes made in this file will be lost!
 
 from PyQt4 import QtCore, QtGui
-from openlp.core.lib import translate
 
 class Ui_BibleImportDialog(object):
     def setupUi(self, BibleImportDialog):
         BibleImportDialog.setObjectName(u'BibleImportDialog')
-        BibleImportDialog.resize(494, 725)
+        BibleImportDialog.resize(500, 686)
         icon = QtGui.QIcon()
-        icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         BibleImportDialog.setWindowIcon(icon)
-        self.ImportToolBox = QtGui.QToolBox(BibleImportDialog)
-        self.ImportToolBox.setGeometry(QtCore.QRect(20, 20, 451, 401))
-        self.ImportToolBox.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.ImportToolBox.setObjectName(u'ImportToolBox')
-        self.FileImportPage = QtGui.QWidget()
-        self.FileImportPage.setGeometry(QtCore.QRect(0, 0, 447, 337))
-        self.FileImportPage.setObjectName(u'FileImportPage')
-        self.OSISGroupBox = QtGui.QGroupBox(self.FileImportPage)
-        self.OSISGroupBox.setGeometry(QtCore.QRect(18, 65, 411, 81))
+        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.setMargin(8)
-        self.gridLayout_2.setSpacing(8)
         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.gridLayout_2.addWidget(self.LocatioLabel, 0, 0, 1, 1)
+        self.horizontalLayout_3.addWidget(self.LocatioLabel)
         self.OSISLocationEdit = QtGui.QLineEdit(self.OSISGroupBox)
         self.OSISLocationEdit.setObjectName(u'OSISLocationEdit')
-        self.gridLayout_2.addWidget(self.OSISLocationEdit, 0, 1, 1, 1)
+        self.horizontalLayout_3.addWidget(self.OSISLocationEdit)
         self.OsisFileButton = QtGui.QPushButton(self.OSISGroupBox)
         icon1 = QtGui.QIcon()
         icon1.addPixmap(QtGui.QPixmap(u':/imports/import_load.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         self.OsisFileButton.setIcon(icon1)
         self.OsisFileButton.setObjectName(u'OsisFileButton')
-        self.gridLayout_2.addWidget(self.OsisFileButton, 0, 2, 1, 1)
-        self.CVSGroupBox = QtGui.QGroupBox(self.FileImportPage)
-        self.CVSGroupBox.setGeometry(QtCore.QRect(20, 170, 411, 191))
+        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)
@@ -70,43 +131,39 @@
         self.VersesFileButton.setIcon(icon1)
         self.VersesFileButton.setObjectName(u'VersesFileButton')
         self.gridLayout.addWidget(self.VersesFileButton, 4, 2, 1, 1)
-        self.BibleNameEdit = QtGui.QLineEdit(self.FileImportPage)
-        self.BibleNameEdit.setGeometry(QtCore.QRect(100, 20, 280, 28))
-        self.BibleNameEdit.setObjectName(u'BibleNameEdit')
-        self.BibleNameLabel = QtGui.QLabel(self.FileImportPage)
-        self.BibleNameLabel.setGeometry(QtCore.QRect(18, 20, 98, 22))
-        self.BibleNameLabel.setObjectName(u'BibleNameLabel')
-        self.ImportToolBox.addItem(self.FileImportPage, u'')
-        self.WebBiblePage = QtGui.QWidget()
-        self.WebBiblePage.setGeometry(QtCore.QRect(0, 0, 447, 337))
-        self.WebBiblePage.setObjectName(u'WebBiblePage')
-        self.WebBibleLayout = QtGui.QVBoxLayout(self.WebBiblePage)
-        self.WebBibleLayout.setSpacing(8)
-        self.WebBibleLayout.setMargin(8)
-        self.WebBibleLayout.setObjectName(u'WebBibleLayout')
-        self.OptionsGroupBox = QtGui.QGroupBox(self.WebBiblePage)
+        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.formLayout_2 = QtGui.QFormLayout(self.OptionsGroupBox)
-        self.formLayout_2.setObjectName(u'formLayout_2')
+        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.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.LocationLabel)
+        self.horizontalLayout_4.addWidget(self.LocationLabel)
         self.LocationComboBox = QtGui.QComboBox(self.OptionsGroupBox)
         self.LocationComboBox.setObjectName(u'LocationComboBox')
         self.LocationComboBox.addItem(QtCore.QString())
-        self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.LocationComboBox)
+        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.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.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.addItem(QtCore.QString())
         self.BibleComboBox.addItem(QtCore.QString())
-        self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.BibleComboBox)
-        self.WebBibleLayout.addWidget(self.OptionsGroupBox)
-        self.ProxyGroupBox = QtGui.QGroupBox(self.WebBiblePage)
+        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)
@@ -129,66 +186,12 @@
         self.PasswordLabel.setObjectName(u'PasswordLabel')
         self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)
         self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)
-        self.PasswordEdit.setEchoMode(QtGui.QLineEdit.Password)
         self.PasswordEdit.setObjectName(u'PasswordEdit')
         self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)
-        self.WebBibleLayout.addWidget(self.ProxyGroupBox)
-        self.ImportToolBox.addItem(self.WebBiblePage, u'')
-        self.LicenceDetailsGroupBox = QtGui.QGroupBox(BibleImportDialog)
-        self.LicenceDetailsGroupBox.setGeometry(QtCore.QRect(10, 435, 471, 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, 600, 471, 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(300, 680, 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.addTab(self.HttpTab, u'')
 
         self.retranslateUi(BibleImportDialog)
-        self.ImportToolBox.setCurrentIndex(1)
-
+        self.tabWidget.setCurrentIndex(2)
         QtCore.QMetaObject.connectSlotsByName(BibleImportDialog)
         BibleImportDialog.setTabOrder(self.BibleNameEdit, self.OSISLocationEdit)
         BibleImportDialog.setTabOrder(self.OSISLocationEdit, self.OsisFileButton)
@@ -206,30 +209,31 @@
         BibleImportDialog.setTabOrder(self.CopyrightEdit, self.PermisionEdit)
 
     def retranslateUi(self, BibleImportDialog):
-        BibleImportDialog.setWindowTitle(translate(u'BibleImportDialog', u'Bible Registration'))
-        self.OSISGroupBox.setTitle(translate(u'BibleImportDialog', u'OSIS Bible'))
-        self.LocatioLabel.setText(translate(u'BibleImportDialog', u'File Location:'))
-        self.CVSGroupBox.setTitle(translate(u'BibleImportDialog', u'CVS Bible'))
-        self.BooksLocationLabel.setText(translate(u'BibleImportDialog', u'Books Location:'))
-        self.VerseLocationLabel.setText(translate(u'BibleImportDialog', u'Verse Location:'))
-        self.BibleNameLabel.setText(translate(u'BibleImportDialog', u'Bible Name:'))
-        self.ImportToolBox.setItemText(self.ImportToolBox.indexOf(self.FileImportPage), translate(u'BibleImportDialog', u'File Import Page'))
-        self.OptionsGroupBox.setTitle(translate(u'BibleImportDialog', u'Download Options'))
-        self.LocationLabel.setText(translate(u'BibleImportDialog', u'Location:'))
-        self.LocationComboBox.setItemText(0, translate(u'BibleImportDialog', u'Crosswalk'))
-        self.BibleLabel.setText(translate(u'BibleImportDialog', u'Bible:'))
-        self.BibleComboBox.setItemText(1, translate(u'BibleImportDialog', u'NIV'))
-        self.BibleComboBox.setItemText(2, translate(u'BibleImportDialog', u'KJV'))
-        self.ProxyGroupBox.setTitle(translate(u'BibleImportDialog', u'Proxy Settings (Optional)'))
-        self.AddressLabel.setText(translate(u'BibleImportDialog', u'Proxy Address:'))
-        self.UsernameLabel.setText(translate(u'BibleImportDialog', u'Username:'))
-        self.PasswordLabel.setText(translate(u'BibleImportDialog', u'Password:'))
-        self.ImportToolBox.setItemText(self.ImportToolBox.indexOf(self.WebBiblePage), translate(u'BibleImportDialog', u'Web Bible Import page'))
-        self.LicenceDetailsGroupBox.setTitle(translate(u'BibleImportDialog', u'Licence Details'))
-        self.VersionNameLabel.setText(translate(u'BibleImportDialog', u'Version Name:'))
-        self.CopyrightLabel.setText(translate(u'BibleImportDialog', u'Copyright:'))
-        self.PermisionLabel.setText(translate(u'BibleImportDialog', u'Permission:'))
-        self.ProgressGroupBox.setTitle(translate(u'BibleImportDialog', u'Import Progress'))
-        self.ProgressBar.setFormat(translate(u'BibleImportDialog', u'%p'))
-        self.ImportButton.setText(translate(u'BibleImportDialog', u'Import'))
-        self.CancelButton.setText(translate(u'BibleImportDialog', u'Cancel'))
+        BibleImportDialog.setWindowTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'Bible Registration', None, QtGui.QApplication.UnicodeUTF8))
+        self.LicenceDetailsGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'Licence Details', None, QtGui.QApplication.UnicodeUTF8))
+        self.VersionNameLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Version Name:', None, QtGui.QApplication.UnicodeUTF8))
+        self.CopyrightLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Copyright:', None, QtGui.QApplication.UnicodeUTF8))
+        self.PermisionLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Permission:', None, QtGui.QApplication.UnicodeUTF8))
+        self.ProgressGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'Import Progress', None, QtGui.QApplication.UnicodeUTF8))
+        self.ProgressBar.setFormat(QtGui.QApplication.translate(u'BibleImportDialog', u'%p', None, QtGui.QApplication.UnicodeUTF8))
+        self.ImportButton.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Import', None, QtGui.QApplication.UnicodeUTF8))
+        self.CancelButton.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Cancel', None, QtGui.QApplication.UnicodeUTF8))
+        self.OSISGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'OSIS Bible', None, QtGui.QApplication.UnicodeUTF8))
+        self.BibleNameLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Bible Name:', None, QtGui.QApplication.UnicodeUTF8))
+        self.LocatioLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'File Location:', None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.OsisTab), QtGui.QApplication.translate(u'BibleImportDialog', u'Osis (Sword) Imports', None, QtGui.QApplication.UnicodeUTF8))
+        self.CVSGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'CVS Bible', None, QtGui.QApplication.UnicodeUTF8))
+        self.BooksLocationLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Books Location:', None, QtGui.QApplication.UnicodeUTF8))
+        self.VerseLocationLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Verse Location:', None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.CsvTab), QtGui.QApplication.translate(u'BibleImportDialog', u'CSV File Imports', None, QtGui.QApplication.UnicodeUTF8))
+        self.OptionsGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'Download Options', None, QtGui.QApplication.UnicodeUTF8))
+        self.LocationLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Location:', None, QtGui.QApplication.UnicodeUTF8))
+        self.LocationComboBox.setItemText(0, QtGui.QApplication.translate(u'BibleImportDialog', u'Crosswalk', None, QtGui.QApplication.UnicodeUTF8))
+        self.BibleLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Bible:', None, QtGui.QApplication.UnicodeUTF8))
+        self.BibleComboBox.setItemText(1, QtGui.QApplication.translate(u'BibleImportDialog', u'NIV', None, QtGui.QApplication.UnicodeUTF8))
+        self.BibleComboBox.setItemText(2, QtGui.QApplication.translate(u'BibleImportDialog', u'KJV', None, QtGui.QApplication.UnicodeUTF8))
+        self.ProxyGroupBox.setTitle(QtGui.QApplication.translate(u'BibleImportDialog', u'Proxy Settings (Optional)', None, QtGui.QApplication.UnicodeUTF8))
+        self.AddressLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Proxy Address:', None, QtGui.QApplication.UnicodeUTF8))
+        self.UsernameLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Username:', None, QtGui.QApplication.UnicodeUTF8))
+        self.PasswordLabel.setText(QtGui.QApplication.translate(u'BibleImportDialog', u'Password:', None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.HttpTab), QtGui.QApplication.translate(u'BibleImportDialog', u'Web Downloads', None, QtGui.QApplication.UnicodeUTF8))

=== modified file 'resources/forms/bibleimportdialog.ui'
--- resources/forms/bibleimportdialog.ui	2009-02-20 17:10:30 +0000
+++ resources/forms/bibleimportdialog.ui	2009-08-07 17:19:32 +0000
@@ -6,307 +6,23 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>494</width>
-    <height>725</height>
+    <width>500</width>
+    <height>686</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Bible Registration</string>
   </property>
   <property name="windowIcon">
-   <iconset resource="../images/openlp-2.qrc">
+   <iconset>
     <normaloff>:/icon/openlp.org-icon-32.bmp</normaloff>:/icon/openlp.org-icon-32.bmp</iconset>
   </property>
-  <widget class="QToolBox" name="ImportToolBox">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>20</y>
-     <width>451</width>
-     <height>401</height>
-    </rect>
-   </property>
-   <property name="frameShape">
-    <enum>QFrame::StyledPanel</enum>
-   </property>
-   <property name="currentIndex">
-    <number>1</number>
-   </property>
-   <widget class="QWidget" name="FileImportPage">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>0</y>
-      <width>447</width>
-      <height>337</height>
-     </rect>
-    </property>
-    <attribute name="label">
-     <string>File Import Page</string>
-    </attribute>
-    <widget class="QGroupBox" name="OSISGroupBox">
-     <property name="geometry">
-      <rect>
-       <x>18</x>
-       <y>65</y>
-       <width>411</width>
-       <height>81</height>
-      </rect>
-     </property>
-     <property name="title">
-      <string>OSIS Bible</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_2">
-      <property name="margin">
-       <number>8</number>
-      </property>
-      <property name="spacing">
-       <number>8</number>
-      </property>
-      <item row="0" column="0">
-       <widget class="QLabel" name="LocatioLabel">
-        <property name="text">
-         <string>File Location:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLineEdit" name="OSISLocationEdit"/>
-      </item>
-      <item row="0" column="2">
-       <widget class="QPushButton" name="OsisFileButton">
-        <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>
-    </widget>
-    <widget class="QGroupBox" name="CVSGroupBox">
-     <property name="geometry">
-      <rect>
-       <x>20</x>
-       <y>170</y>
-       <width>411</width>
-       <height>191</height>
-      </rect>
-     </property>
-     <property name="title">
-      <string>CVS Bible</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <property name="margin">
-       <number>8</number>
-      </property>
-      <property name="spacing">
-       <number>8</number>
-      </property>
-      <item row="0" column="0">
-       <widget class="QLabel" name="BooksLocationLabel">
-        <property name="text">
-         <string>Books Location:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QLabel" name="VerseLocationLabel">
-        <property name="text">
-         <string>Verse Location:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QLineEdit" name="VerseLocationEdit"/>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLineEdit" name="BooksLocationEdit"/>
-      </item>
-      <item row="0" column="2">
-       <widget class="QPushButton" name="BooksFileButton">
-        <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>
-      <item row="4" column="2">
-       <widget class="QPushButton" name="VersesFileButton">
-        <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>
-    </widget>
-    <widget class="QLineEdit" name="BibleNameEdit">
-     <property name="geometry">
-      <rect>
-       <x>100</x>
-       <y>20</y>
-       <width>280</width>
-       <height>28</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="BibleNameLabel">
-     <property name="geometry">
-      <rect>
-       <x>18</x>
-       <y>20</y>
-       <width>98</width>
-       <height>22</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Bible Name:</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QWidget" name="WebBiblePage">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>0</y>
-      <width>447</width>
-      <height>337</height>
-     </rect>
-    </property>
-    <attribute name="label">
-     <string>Web Bible Import page</string>
-    </attribute>
-    <layout class="QVBoxLayout" name="WebBibleLayout">
-     <property name="spacing">
-      <number>8</number>
-     </property>
-     <property name="margin">
-      <number>8</number>
-     </property>
-     <item>
-      <widget class="QGroupBox" name="OptionsGroupBox">
-       <property name="title">
-        <string>Download Options</string>
-       </property>
-       <layout class="QFormLayout" name="formLayout_2">
-        <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">
-          <item>
-           <property name="text">
-            <string/>
-           </property>
-          </item>
-          <item>
-           <property name="text">
-            <string>NIV</string>
-           </property>
-          </item>
-          <item>
-           <property name="text">
-            <string>KJV</string>
-           </property>
-          </item>
-         </widget>
-        </item>
-       </layout>
-       <zorder>BibleComboBox</zorder>
-       <zorder>LocationLabel</zorder>
-       <zorder>BibleLabel</zorder>
-       <zorder>LocationComboBox</zorder>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="ProxyGroupBox">
-       <property name="title">
-        <string>Proxy Settings (Optional)</string>
-       </property>
-       <layout class="QFormLayout" name="ProxySettingsLayout">
-        <property name="fieldGrowthPolicy">
-         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-        </property>
-        <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="AddressLabel">
-          <property name="text">
-           <string>Proxy Address:</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>
-     </item>
-    </layout>
-   </widget>
-  </widget>
   <widget class="QGroupBox" name="LicenceDetailsGroupBox">
    <property name="geometry">
     <rect>
      <x>10</x>
-     <y>435</y>
-     <width>471</width>
+     <y>400</y>
+     <width>480</width>
      <height>151</height>
     </rect>
    </property>
@@ -375,8 +91,8 @@
    <property name="geometry">
     <rect>
      <x>10</x>
-     <y>600</y>
-     <width>471</width>
+     <y>550</y>
+     <width>480</width>
      <height>70</height>
     </rect>
    </property>
@@ -402,8 +118,8 @@
   <widget class="QWidget" name="layoutWidget">
    <property name="geometry">
     <rect>
-     <x>300</x>
-     <y>680</y>
+     <x>310</x>
+     <y>630</y>
      <width>180</width>
      <height>38</height>
     </rect>
@@ -428,6 +144,280 @@
     </item>
    </layout>
   </widget>
+  <widget class="QTabWidget" name="tabWidget">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>30</y>
+     <width>480</width>
+     <height>361</height>
+    </rect>
+   </property>
+   <property name="currentIndex">
+    <number>2</number>
+   </property>
+   <widget class="QWidget" name="OsisTab">
+    <attribute name="title">
+     <string>Osis (Sword) Imports</string>
+    </attribute>
+    <widget class="QGroupBox" name="OSISGroupBox">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>460</width>
+       <height>141</height>
+      </rect>
+     </property>
+     <property name="title">
+      <string>OSIS Bible</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QLabel" name="BibleNameLabel">
+          <property name="text">
+           <string>Bible Name:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="BibleNameEdit"/>
+        </item>
+       </layout>
+      </item>
+      <item row="1" column="0">
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <item>
+         <widget class="QLabel" name="LocatioLabel">
+          <property name="text">
+           <string>File Location:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="OSISLocationEdit"/>
+        </item>
+        <item>
+         <widget class="QPushButton" name="OsisFileButton">
+          <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>
+   <widget class="QWidget" name="CsvTab">
+    <attribute name="title">
+     <string>CSV File Imports</string>
+    </attribute>
+    <widget class="QGroupBox" name="CVSGroupBox">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>460</width>
+       <height>191</height>
+      </rect>
+     </property>
+     <property name="title">
+      <string>CVS Bible</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <property name="margin">
+       <number>8</number>
+      </property>
+      <property name="spacing">
+       <number>8</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="QLabel" name="BooksLocationLabel">
+        <property name="text">
+         <string>Books Location:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="VerseLocationLabel">
+        <property name="text">
+         <string>Verse Location:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QLineEdit" name="VerseLocationEdit"/>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="BooksLocationEdit"/>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="BooksFileButton">
+        <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>
+      <item row="4" column="2">
+       <widget class="QPushButton" name="VersesFileButton">
+        <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>
+    </widget>
+   </widget>
+   <widget class="QWidget" name="HttpTab">
+    <attribute name="title">
+     <string>Web Downloads</string>
+    </attribute>
+    <widget class="QGroupBox" name="OptionsGroupBox">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>460</width>
+       <height>141</height>
+      </rect>
+     </property>
+     <property name="title">
+      <string>Download Options</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <item>
+         <widget class="QLabel" name="LocationLabel">
+          <property name="text">
+           <string>Location:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QComboBox" name="LocationComboBox">
+          <item>
+           <property name="text">
+            <string>Crosswalk</string>
+           </property>
+          </item>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_5">
+        <item>
+         <widget class="QLabel" name="BibleLabel">
+          <property name="text">
+           <string>Bible:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QComboBox" name="BibleComboBox">
+          <item>
+           <property name="text">
+            <string/>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>NIV</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>KJV</string>
+           </property>
+          </item>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+     <zorder>BibleComboBox</zorder>
+     <zorder>LocationLabel</zorder>
+     <zorder>BibleLabel</zorder>
+     <zorder>LocationComboBox</zorder>
+    </widget>
+    <widget class="QGroupBox" name="ProxyGroupBox">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>160</y>
+       <width>460</width>
+       <height>161</height>
+      </rect>
+     </property>
+     <property name="title">
+      <string>Proxy Settings (Optional)</string>
+     </property>
+     <layout class="QFormLayout" name="ProxySettingsLayout">
+      <property name="fieldGrowthPolicy">
+       <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+      </property>
+      <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="AddressLabel">
+        <property name="text">
+         <string>Proxy Address:</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>
+    <zorder>OptionsGroupBox</zorder>
+    <zorder>OptionsGroupBox</zorder>
+    <zorder>ProxyGroupBox</zorder>
+   </widget>
+  </widget>
  </widget>
  <tabstops>
   <tabstop>BibleNameEdit</tabstop>


Follow ups