← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~m2j/openlp/work into lp:openlp

 

m2j has proposed merging lp:~m2j/openlp/work into lp:openlp.

Requested reviews:
  Raoul Snyman (raoul-snyman)
  Tim Bentley (trb143)
Related bugs:
  #609356 Web bibles don't download all their books on import
  https://bugs.launchpad.net/bugs/609356
  #661867 Invalid author added in song dialog
  https://bugs.launchpad.net/bugs/661867
  #686103 Labels in theme wizard out of alignment on Windows
  https://bugs.launchpad.net/bugs/686103

For more details, see:
https://code.launchpad.net/~m2j/openlp/work/+merge/44896

Bug #686103: the layout was distorted because of several manual formating instructions. I limited all format instructions to the necessary minimum. Furthermore I aligned all QFormLayouts towards each other.
It should contain no functional changes except of bug fixes (traped exceptions).
Some widgets ans slots are renamed for a consistent naming scheme.
Small fixes: removed two consecutive spaces and string introducing double quotes from python code. Edited some log.debug() arguments to avoid UnicodeErrors.
-- 
https://code.launchpad.net/~m2j/openlp/work/+merge/44896
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py	2010-12-29 09:14:13 +0000
+++ openlp/core/lib/mediamanageritem.py	2010-12-30 12:06:38 +0000
@@ -445,7 +445,7 @@
                 translate('OpenLP.MediaManagerItem',
                     'You must select one or more items to preview.'))
         else:
-            log.debug(self.plugin.name + u' Preview requested')
+            log.debug(u'%s Preview requested', self.plugin.name)
             serviceItem = self.buildServiceItem()
             if serviceItem:
                 serviceItem.from_plugin = True
@@ -462,7 +462,7 @@
                 translate('OpenLP.MediaManagerItem',
                     'You must select one or more items to send live.'))
         else:
-            log.debug(self.plugin.name + u' Live requested')
+            log.debug(u'%s Live requested', self.plugin.name)
             serviceItem = self.buildServiceItem()
             if serviceItem:
                 serviceItem.from_plugin = True
@@ -481,7 +481,7 @@
             # Is it posssible to process multiple list items to generate
             # multiple service items?
             if self.singleServiceItem or self.remoteTriggered:
-                log.debug(self.plugin.name + u' Add requested')
+                log.debug(u'%s Add requested', self.plugin.name)
                 serviceItem = self.buildServiceItem(None, True)
                 if serviceItem:
                     serviceItem.from_plugin = False
@@ -505,7 +505,7 @@
                 translate('OpenLP.MediaManagerItem',
                     'You must select one or more items'))
         else:
-            log.debug(self.plugin.name + u' Add requested')
+            log.debug(u'%s Add requested', self.plugin.name)
             serviceItem = self.parent.serviceManager.getServiceItem()
             if not serviceItem:
                 QtGui.QMessageBox.information(self,

=== modified file 'openlp/core/lib/settingstab.py'
--- openlp/core/lib/settingstab.py	2010-12-26 11:04:47 +0000
+++ openlp/core/lib/settingstab.py	2010-12-30 12:06:38 +0000
@@ -31,7 +31,7 @@
     SettingsTab is a helper widget for plugins to define Tabs for the settings
     dialog.
     """
-    def __init__(self, title,  visible_title=None):
+    def __init__(self, title, visible_title=None):
         """
         Constructor to create the Settings tab item.
 
@@ -95,4 +95,4 @@
             Indicates if called before or after updates.
 
         """
-        pass
\ No newline at end of file
+        pass

=== modified file 'openlp/core/theme/theme.py'
--- openlp/core/theme/theme.py	2010-12-26 11:04:47 +0000
+++ openlp/core/theme/theme.py	2010-12-30 12:06:38 +0000
@@ -33,11 +33,11 @@
 from xml.etree.ElementTree import ElementTree, XML
 from PyQt4 import QtGui
 
-DELPHI_COLORS = {"clRed":0xFF0000,
-                 "clBlue":0x0000FF,
-                 "clYellow":0xFFFF00,
-                 "clBlack":0x000000,
-                 "clWhite":0xFFFFFF}
+DELPHI_COLORS = {u'clRed': 0xFF0000,
+                 u'clBlue': 0x0000FF,
+                 u'clYellow': 0xFFFF00,
+                 u'clBlack': 0x000000,
+                 u'clWhite': 0xFFFFFF}
 
 BLANK_STYLE_XML = \
 '''<?xml version="1.0" encoding="iso-8859-1"?>
@@ -222,4 +222,4 @@
         for key in dir(self):
             if key[0:1] != u'_':
                 theme_strings.append(u'%30s : %s' % (key, getattr(self, key)))
-        return u'\n'.join(theme_strings)
\ No newline at end of file
+        return u'\n'.join(theme_strings)

=== modified file 'openlp/core/ui/exceptionform.py'
--- openlp/core/ui/exceptionform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/exceptionform.py	2010-12-30 12:06:38 +0000
@@ -84,7 +84,7 @@
             u'lxml: %s\n' % etree.__version__ + \
             u'Chardet: %s\n' % chardet_version + \
             u'PyEnchant: %s\n' % enchant_version + \
-            u'PySQLite: %s\n' %  sqlite_version
+            u'PySQLite: %s\n' % sqlite_version
         if platform.system() == u'Linux':
             if os.environ.get(u'KDE_FULL_SESSION') == u'true':
                 system = system + u'Desktop: KDE SC\n'
@@ -144,4 +144,4 @@
                 exception = line.split(u'\n')[-1].split(u':')[0]
         subject = u'Bug report: %s in %s' % (exception, source)
         mailto(address=u'bugs@xxxxxxxxxx', subject=subject,
-            body=body % content)
\ No newline at end of file
+            body=body % content)

=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/generaltab.py	2010-12-30 12:06:38 +0000
@@ -141,10 +141,10 @@
         self.settingsLayout.addWidget(self.autoPreviewCheckBox, 1, 0, 1, 2)
         # Moved here from image tab
         self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox)
-        self.timeoutLabel.setObjectName("timeoutLabel")
+        self.timeoutLabel.setObjectName(u'timeoutLabel')
         self.settingsLayout.addWidget(self.timeoutLabel, 2, 0, 1, 1)
         self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox)
-        self.timeoutSpinBox.setObjectName("timeoutSpinBox")
+        self.timeoutSpinBox.setObjectName(u'timeoutSpinBox')
         self.settingsLayout.addWidget(self.timeoutSpinBox, 2, 1, 1, 1)
         self.generalLeftLayout.addWidget(self.settingsGroupBox)
         self.generalLeftSpacer = QtGui.QSpacerItem(20, 40,
@@ -530,4 +530,4 @@
         """
         Called when the width, height, x position or y position has changed.
         """
-        self.overrideChanged = True
\ No newline at end of file
+        self.overrideChanged = True

=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/maindisplay.py	2010-12-30 12:06:38 +0000
@@ -209,7 +209,7 @@
             shrink = True
         else:
             shrink = False
-        js =  u'show_alert("%s", "%s")' % (
+        js = u'show_alert("%s", "%s")' % (
             text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"'),
             u'top' if shrink else u'')
         height = self.frame.evaluateJavaScript(js)
@@ -235,8 +235,8 @@
 
     def image(self, name):
         """
-        Add an image as the background.  The image is converted to a
-        bytestream on route.
+        Add an image as the background.  The image is converted to a bytestream
+        on route.
 
         `Image`
             The Image to be displayed can be QImage or QPixmap
@@ -421,8 +421,8 @@
         Display the Footer
         """
         log.debug(u'footer')
-        js =  "show_footer('" + \
-            text.replace("\\", "\\\\").replace("\'", "\\\'") + "')"
+        js = u'show_footer(\'' + \
+            text.replace(u'\\', u'\\\\').replace(u'\'', u'\\\'') + u'\')'
         self.frame.evaluateJavaScript(js)
 
     def hideDisplay(self, mode=HideMode.Screen):

=== modified file 'openlp/core/ui/pluginform.py'
--- openlp/core/ui/pluginform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/pluginform.py	2010-12-30 12:06:38 +0000
@@ -92,7 +92,7 @@
         self.statusComboBox.setEnabled(False)
 
     def _setDetails(self):
-        log.debug('PluginStatus: %s', str(self.activePlugin.status))
+        log.debug(u'PluginStatus: %s', str(self.activePlugin.status))
         self.versionNumberLabel.setText(self.activePlugin.version)
         self.aboutTextBrowser.setHtml(self.activePlugin.about())
         self.programaticChange = True
@@ -142,4 +142,4 @@
                 translate('OpenLP.PluginForm', '%s (Disabled)'))
         name_string = self.activePlugin.getString(StringContent.Name)
         self.pluginListWidget.currentItem().setText(
-            status_text % name_string[u'singular'])
\ No newline at end of file
+            status_text % name_string[u'singular'])

=== modified file 'openlp/core/ui/shortcutlistform.py'
--- openlp/core/ui/shortcutlistform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/shortcutlistform.py	2010-12-30 12:06:38 +0000
@@ -71,7 +71,7 @@
         if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier:
             key_string = u'Shift+' + key_string
         key_sequence = QtGui.QKeySequence(key_string)
-        existing_key = QtGui.QKeySequence("Ctrl+Shift+F8")
+        existing_key = QtGui.QKeySequence(u'Ctrl+Shift+F8')
         if key_sequence == existing_key:
             QtGui.QMessageBox.warning(
                 self,

=== modified file 'openlp/core/ui/themeform.py'
--- openlp/core/ui/themeform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/themeform.py	2010-12-30 12:06:38 +0000
@@ -56,90 +56,70 @@
         self.registerFields()
         self.accepted = False
         self.updateThemeAllowed = True
-        QtCore.QObject.connect(self.backgroundTypeComboBox,
+        QtCore.QObject.connect(self.backgroundComboBox,
             QtCore.SIGNAL(u'currentIndexChanged(int)'),
-            self.onBackgroundComboBox)
+            self.onBackgroundComboBoxCurrentIndexChanged)
         QtCore.QObject.connect(self.gradientComboBox,
             QtCore.SIGNAL(u'currentIndexChanged(int)'),
-            self.onGradientComboBox)
+            self.onGradientComboBoxCurrentIndexChanged)
         QtCore.QObject.connect(self.colorButton,
-            QtCore.SIGNAL(u'pressed()'),
+            QtCore.SIGNAL(u'clicked()'),
             self.onColorButtonClicked)
         QtCore.QObject.connect(self.gradientStartButton,
-            QtCore.SIGNAL(u'pressed()'),
+            QtCore.SIGNAL(u'clicked()'),
             self.onGradientStartButtonClicked)
         QtCore.QObject.connect(self.gradientEndButton,
-            QtCore.SIGNAL(u'pressed()'),
+            QtCore.SIGNAL(u'clicked()'),
             self.onGradientEndButtonClicked)
         QtCore.QObject.connect(self.imageBrowseButton,
-            QtCore.SIGNAL(u'pressed()'),
+            QtCore.SIGNAL(u'clicked()'),
             self.onImageBrowseButtonClicked)
-        QtCore.QObject.connect(self.mainColorPushButton,
-            QtCore.SIGNAL(u'pressed()'),
-            self.onMainColourPushButtonClicked)
-        QtCore.QObject.connect(self.outlineColorPushButton,
-            QtCore.SIGNAL(u'pressed()'),
-            self.onOutlineColourPushButtonClicked)
-        QtCore.QObject.connect(self.shadowColorPushButton,
-            QtCore.SIGNAL(u'pressed()'),
-            self.onShadowColourPushButtonClicked)
+        QtCore.QObject.connect(self.mainColorButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onMainColorButtonClicked)
+        QtCore.QObject.connect(self.outlineColorButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onOutlineColorButtonClicked)
+        QtCore.QObject.connect(self.shadowColorButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onShadowColorButtonClicked)
         QtCore.QObject.connect(self.outlineCheckBox,
             QtCore.SIGNAL(u'stateChanged(int)'),
-            self.onOutlineCheckCheckBoxChanged)
+            self.onOutlineCheckCheckBoxStateChanged)
         QtCore.QObject.connect(self.shadowCheckBox,
             QtCore.SIGNAL(u'stateChanged(int)'),
-            self.onShadowCheckCheckBoxChanged)
-        QtCore.QObject.connect(self.footerColorPushButton,
-            QtCore.SIGNAL(u'pressed()'),
-            self.onFooterColourPushButtonClicked)
-        QtCore.QObject.connect(self.mainDefaultPositionCheckBox,
-            QtCore.SIGNAL(u'stateChanged(int)'),
-            self.onMainDefaultPositionCheckBox)
-        QtCore.QObject.connect(self.footerDefaultPositionCheckBox,
-            QtCore.SIGNAL(u'stateChanged(int)'),
-            self.onFooterDefaultPositionCheckBox)
+            self.onShadowCheckCheckBoxStateChanged)
+        QtCore.QObject.connect(self.footerColorButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onFooterColorButtonClicked)
+        QtCore.QObject.connect(self.mainPositionCheckBox,
+            QtCore.SIGNAL(u'stateChanged(int)'),
+            self.onMainPositionCheckBoxStateChanged)
+        QtCore.QObject.connect(self.footerPositionCheckBox,
+            QtCore.SIGNAL(u'stateChanged(int)'),
+            self.onFooterPositionCheckBoxStateChanged)
         QtCore.QObject.connect(self,
             QtCore.SIGNAL(u'currentIdChanged(int)'),
-            self.pageChanged)
+            self.onCurrentIdChanged)
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'theme_line_count'),
             self.updateLinesText)
         QtCore.QObject.connect(self.mainSizeSpinBox,
             QtCore.SIGNAL(u'valueChanged(int)'),
             self.calculateLines)
-        QtCore.QObject.connect(self.mainSizeSpinBox,
-            QtCore.SIGNAL(u'editingFinished()'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.lineSpacingSpinBox,
-            QtCore.SIGNAL(u'valueChanged(int)'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.lineSpacingSpinBox,
-            QtCore.SIGNAL(u'editingFinished()'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.outlineSizeSpinBox,
-            QtCore.SIGNAL(u'valueChanged(int)'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.outlineSizeSpinBox,
-            QtCore.SIGNAL(u'editingFinished()'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.shadowSizeSpinBox,
-            QtCore.SIGNAL(u'valueChanged(int)'),
-            self.calculateLines)
-        QtCore.QObject.connect(self.shadowSizeSpinBox,
-            QtCore.SIGNAL(u'editingFinished()'),
+        QtCore.QObject.connect(self.lineSpacingSpinBox,
+            QtCore.SIGNAL(u'valueChanged(int)'),
+            self.calculateLines)
+        QtCore.QObject.connect(self.outlineSizeSpinBox,
+            QtCore.SIGNAL(u'valueChanged(int)'),
+            self.calculateLines)
+        QtCore.QObject.connect(self.shadowSizeSpinBox,
+            QtCore.SIGNAL(u'valueChanged(int)'),
             self.calculateLines)
         QtCore.QObject.connect(self.mainFontComboBox,
             QtCore.SIGNAL(u'activated(int)'),
             self.calculateLines)
-
-    def pageChanged(self, pageId):
-        """
-        Detects Page changes and updates as approprate.
-        """
-        if pageId == 6:
-            self.updateTheme()
-            frame = self.thememanager.generateImage(self.theme)
-            self.previewBoxLabel.setPixmap(QtGui.QPixmap.fromImage(frame))
+        QtCore.QObject.connect(self, QtCore.SIGNAL(u'accepted()'), self.accept)
 
     def setDefaults(self):
         """
@@ -147,19 +127,19 @@
         """
         self.restart()
         self.accepted = False
-        self.setBackgroundTabValues()
-        self.setMainAreaTabValues()
-        self.setFooterAreaTabValues()
-        self.setAlignmentTabValues()
-        self.setPositionTabValues()
-        self.setPreviewTabValues()
+        self.setBackgroundPageValues()
+        self.setMainAreaPageValues()
+        self.setFooterAreaPageValues()
+        self.setAlignmentPageValues()
+        self.setPositionPageValues()
+        self.setPreviewPageValues()
 
     def registerFields(self):
         """
         Map field names to screen names,
         """
         self.backgroundPage.registerField(
-            u'background_type', self.backgroundTypeComboBox)
+            u'background_type', self.backgroundComboBox)
         self.backgroundPage.registerField(
             u'color', self.colorButton)
         self.backgroundPage.registerField(
@@ -167,11 +147,11 @@
         self.backgroundPage.registerField(
             u'grandient_end', self.gradientEndButton)
         self.backgroundPage.registerField(
-            u'background_image', self.imageLineEdit)
+            u'background_image', self.imageFileEdit)
         self.backgroundPage.registerField(
             u'gradient', self.gradientComboBox)
         self.mainAreaPage.registerField(
-            u'mainColorPushButton', self.mainColorPushButton)
+            u'mainColorButton', self.mainColorButton)
         self.mainAreaPage.registerField(
             u'mainSizeSpinBox', self.mainSizeSpinBox)
         self.mainAreaPage.registerField(
@@ -179,17 +159,17 @@
         self.mainAreaPage.registerField(
             u'outlineCheckBox', self.outlineCheckBox)
         self.mainAreaPage.registerField(
-            u'outlineColorPushButton', self.outlineColorPushButton)
+            u'outlineColorButton', self.outlineColorButton)
         self.mainAreaPage.registerField(
             u'outlineSizeSpinBox', self.outlineSizeSpinBox)
         self.mainAreaPage.registerField(
             u'shadowCheckBox', self.shadowCheckBox)
         self.mainAreaPage.registerField(
-            u'boldCheckBox', self.boldCheckBox)
-        self.mainAreaPage.registerField(
-            u'italicsCheckBox', self.italicsCheckBox)
-        self.mainAreaPage.registerField(
-            u'shadowColorPushButton', self.shadowColorPushButton)
+            u'mainBoldCheckBox', self.mainBoldCheckBox)
+        self.mainAreaPage.registerField(
+            u'mainItalicsCheckBox', self.mainItalicsCheckBox)
+        self.mainAreaPage.registerField(
+            u'shadowColorButton', self.shadowColorButton)
         self.mainAreaPage.registerField(
             u'shadowSizeSpinBox', self.shadowSizeSpinBox)
         self.mainAreaPage.registerField(
@@ -224,7 +204,7 @@
         Calculate the number of lines on a page by rendering text
         """
         # Do not trigger on start up
-        if self.page != 0:
+        if self.currentPage != self.welcomePage:
             self.updateTheme()
             frame = self.thememanager.generateImage(self.theme, True)
 
@@ -235,7 +215,37 @@
         self.mainLineCountLabel.setText(unicode(translate('OpenLP.ThemeForm', \
             '(%d lines per slide)' % int(lines))))
 
-    def onOutlineCheckCheckBoxChanged(self, state):
+    def resizeEvent(self, event=None):
+        """
+        Rescale the theme preview thumbnail on resize events.
+        """
+        if not event:
+            event = QtGui.QResizeEvent(self.size(), self.size())
+        QtGui.QWizard.resizeEvent(self, event)
+        if self.currentPage() == self.previewPage:
+            frameWidth = self.previewBoxLabel.lineWidth()
+            pixmapWidth = self.previewArea.width() - 2 * frameWidth
+            pixmapHeight = self.previewArea.height() - 2 * frameWidth
+            aspectRatio = float(pixmapWidth) / pixmapHeight
+            if aspectRatio < self.displayAspectRatio:
+                pixmapHeight = int(pixmapWidth / self.displayAspectRatio + 0.5)
+            else:
+                pixmapWidth = int(pixmapHeight * self.displayAspectRatio + 0.5)
+            self.previewBoxLabel.setFixedSize(pixmapWidth + 2 * frameWidth,
+                pixmapHeight + 2 * frameWidth)
+
+    def onCurrentIdChanged(self, pageId):
+        """
+        Detects Page changes and updates as approprate.
+        """
+        if self.page(pageId) == self.previewPage:
+            self.updateTheme()
+            frame = self.thememanager.generateImage(self.theme)
+            self.previewBoxLabel.setPixmap(QtGui.QPixmap.fromImage(frame))
+            self.displayAspectRatio = float(frame.width()) / frame.height()
+            self.resizeEvent()
+
+    def onOutlineCheckCheckBoxStateChanged(self, state):
         """
         Change state as Outline check box changed
         """
@@ -243,11 +253,11 @@
             self.theme.font_main_outline = True
         else:
             self.theme.font_main_outline = False
-        self.outlineColorPushButton.setEnabled(self.theme.font_main_outline)
+        self.outlineColorButton.setEnabled(self.theme.font_main_outline)
         self.outlineSizeSpinBox.setEnabled(self.theme.font_main_outline)
         self.calculateLines()
 
-    def onShadowCheckCheckBoxChanged(self, state):
+    def onShadowCheckCheckBoxStateChanged(self, state):
         """
         Change state as Shadow check box changed
         """
@@ -255,35 +265,21 @@
             self.theme.font_main_shadow = True
         else:
             self.theme.font_main_shadow = False
-        self.shadowColorPushButton.setEnabled(self.theme.font_main_shadow)
+        self.shadowColorButton.setEnabled(self.theme.font_main_shadow)
         self.shadowSizeSpinBox.setEnabled(self.theme.font_main_shadow)
         self.calculateLines()
 
-    def onMainDefaultPositionCheckBox(self, value):
+    def onMainPositionCheckBoxStateChanged(self, value):
         """
         Change state as Main Area Position check box changed
         """
-        if value == QtCore.Qt.Checked:
-            self.theme.font_main_override = False
-        else:
-            self.theme.font_main_override = True
-        self.mainXSpinBox.setEnabled(self.theme.font_main_override)
-        self.mainYSpinBox.setEnabled(self.theme.font_main_override)
-        self.mainHeightSpinBox.setEnabled(self.theme.font_main_override)
-        self.mainWidthSpinBox.setEnabled(self.theme.font_main_override)
+        self.theme.font_main_override = (value == QtCore.Qt.Checked)
 
-    def onFooterDefaultPositionCheckBox(self, value):
+    def onFooterPositionCheckBoxStateChanged(self, value):
         """
         Change state as Footer Area Position check box changed
         """
-        if value == QtCore.Qt.Checked:
-            self.theme.font_footer_override = False
-        else:
-            self.theme.font_footer_override = True
-        self.footerXSpinBox.setEnabled(self.theme.font_footer_override)
-        self.footerYSpinBox.setEnabled(self.theme.font_footer_override)
-        self.footerHeightSpinBox.setEnabled(self.theme.font_footer_override)
-        self.footerWidthSpinBox.setEnabled(self.theme.font_footer_override)
+        self.theme.font_footer_override = (value == QtCore.Qt.Checked)
 
     def exec_(self, edit=False):
         """
@@ -293,8 +289,14 @@
         self.updateThemeAllowed = False
         self.setDefaults()
         self.updateThemeAllowed = True
+        self.themeNameLabel.setVisible(not edit)
+        self.themeNameEdit.setVisible(not edit)
         if edit:
+            self.setWindowTitle(unicode(translate('OpenLP.ThemeWizard',
+                'Edit Theme %s')) % self.theme.theme_name)
             self.next()
+        else:
+            self.setWindowTitle(translate('OpenLP.ThemeWizard', 'New Theme'))
         return QtGui.QWizard.exec_(self)
 
     def initializePage(self, id):
@@ -302,21 +304,21 @@
         Set up the pages for Initial run through dialog
         """
         log.debug(u'initializePage %s' % id)
-        self.page = id
-        if id == 1:
-            self.setBackgroundTabValues()
-        elif id == 2:
-            self.setMainAreaTabValues()
-        elif id == 3:
-            self.setFooterAreaTabValues()
-        elif id == 4:
-            self.setAlignmentTabValues()
-        elif id == 5:
-            self.setPositionTabValues()
+        wizardPage = self.page(id)
+        if wizardPage == self.backgroundPage:
+            self.setBackgroundPageValues()
+        elif wizardPage == self.mainAreaPage:
+            self.setMainAreaPageValues()
+        elif wizardPage == self.footerAreaPage:
+            self.setFooterAreaPageValues()
+        elif wizardPage == self.alignmentPage:
+            self.setAlignmentPageValues()
+        elif wizardPage == self.areaPositionPage:
+            self.setPositionPageValues()
 
-    def setBackgroundTabValues(self):
+    def setBackgroundPageValues(self):
         """
-        Handle the display and State of the background display tab.
+        Handle the display and state of the Background page.
         """
         if self.theme.background_type == \
             BackgroundType.to_string(BackgroundType.Solid):
@@ -331,7 +333,7 @@
                     self.theme.background_end_color)
             self.setField(u'background_type', QtCore.QVariant(1))
         else:
-            self.imageLineEdit.setText(self.theme.background_filename)
+            self.imageFileEdit.setText(self.theme.background_filename)
             self.setField(u'background_type', QtCore.QVariant(2))
         if self.theme.background_direction == \
             BackgroundGradientType.to_string(BackgroundGradientType.Horizontal):
@@ -348,122 +350,101 @@
         else:
             self.setField(u'gradient', QtCore.QVariant(4))
 
-    def setMainAreaTabValues(self):
+    def setMainAreaPageValues(self):
         """
-        Handle the display and State of the Main Area tab.
+        Handle the display and state of the Main Area page.
         """
         self.mainFontComboBox.setCurrentFont(
             QtGui.QFont(self.theme.font_main_name))
-        self.mainColorPushButton.setStyleSheet(u'background-color: %s' %
+        self.mainColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_color)
-        self.setField(u'mainSizeSpinBox', \
+        self.setField(u'mainSizeSpinBox',
             QtCore.QVariant(self.theme.font_main_size))
-        self.setField(u'lineSpacingSpinBox', \
+        self.setField(u'lineSpacingSpinBox',
             QtCore.QVariant(self.theme.font_main_line_adjustment))
-        self.setField(u'outlineCheckBox', \
+        self.setField(u'outlineCheckBox',
             QtCore.QVariant(self.theme.font_main_outline))
-        self.outlineColorPushButton.setStyleSheet(u'background-color: %s' %
+        self.outlineColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_outline_color)
-        self.setField(u'outlineSizeSpinBox', \
+        self.setField(u'outlineSizeSpinBox',
             QtCore.QVariant(self.theme.font_main_outline_size))
-        self.setField(u'shadowCheckBox', \
+        self.setField(u'shadowCheckBox',
             QtCore.QVariant(self.theme.font_main_shadow))
-        self.shadowColorPushButton.setStyleSheet(u'background-color: %s' %
+        self.shadowColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_main_shadow_color)
-        self.setField(u'shadowSizeSpinBox', \
+        self.setField(u'shadowSizeSpinBox',
             QtCore.QVariant(self.theme.font_main_shadow_size))
-        self.setField(u'boldCheckBox', \
+        self.setField(u'mainBoldCheckBox',
             QtCore.QVariant(self.theme.font_main_bold))
-        self.setField(u'italicsCheckBox', \
+        self.setField(u'mainItalicsCheckBox',
             QtCore.QVariant(self.theme.font_main_italics))
-        # Set up field states
-        if self.theme.font_main_outline:
-            self.setField(u'outlineCheckBox', QtCore.QVariant(False))
-        else:
-            self.setField(u'outlineCheckBox', QtCore.QVariant(True))
-        self.outlineColorPushButton.setEnabled(self.theme.font_main_outline)
-        self.outlineSizeSpinBox.setEnabled(self.theme.font_main_outline)
-        if self.theme.font_main_shadow:
-            self.setField(u'shadowCheckBox', QtCore.QVariant(False))
-        else:
-            self.setField(u'shadowCheckBox', QtCore.QVariant(True))
-        self.shadowColorPushButton.setEnabled(self.theme.font_main_shadow)
-        self.shadowSizeSpinBox.setEnabled(self.theme.font_main_shadow)
 
-    def setFooterAreaTabValues(self):
+    def setFooterAreaPageValues(self):
         """
-        Handle the display and State of the Footer Area tab.
+        Handle the display and state of the Footer Area page.
         """
         self.footerFontComboBox.setCurrentFont(
             QtGui.QFont(self.theme.font_main_name))
-        self.footerColorPushButton.setStyleSheet(u'background-color: %s' %
+        self.footerColorButton.setStyleSheet(u'background-color: %s' %
             self.theme.font_footer_color)
-        self.setField(u'footerSizeSpinBox', \
+        self.setField(u'footerSizeSpinBox',
             QtCore.QVariant(self.theme.font_footer_size))
 
-    def setPositionTabValues(self):
+    def setPositionPageValues(self):
         """
-        Handle the display and State of the Position tab.
+        Handle the display and state of the Position page.
         """
         # Main Area
-        if self.theme.font_main_override:
-            self.mainDefaultPositionCheckBox.setChecked(False)
-        else:
-            self.mainDefaultPositionCheckBox.setChecked(True)
-        self.setField(u'mainPositionX', \
-            QtCore.QVariant(self.theme.font_main_x))
-        self.setField(u'mainPositionY', \
-            QtCore.QVariant(self.theme.font_main_y))
-        self.setField(u'mainPositionHeight', \
+        self.mainPositionCheckBox.setChecked(not self.theme.font_main_override)
+        self.setField(u'mainPositionX', QtCore.QVariant(self.theme.font_main_x))
+        self.setField(u'mainPositionY', QtCore.QVariant(self.theme.font_main_y))
+        self.setField(u'mainPositionHeight',
             QtCore.QVariant(self.theme.font_main_height))
-        self.setField(u'mainPositionWidth', \
+        self.setField(u'mainPositionWidth',
             QtCore.QVariant(self.theme.font_main_width))
         # Footer
-        if self.theme.font_footer_override:
-            self.footerDefaultPositionCheckBox.setChecked(False)
-        else:
-            self.footerDefaultPositionCheckBox.setChecked(True)
-        self.setField(u'footerPositionX', \
+        self.footerPositionCheckBox.setChecked(
+            not self.theme.font_footer_override)
+        self.setField(u'footerPositionX',
             QtCore.QVariant(self.theme.font_footer_x))
-        self.setField(u'footerPositionY', \
+        self.setField(u'footerPositionY',
             QtCore.QVariant(self.theme.font_footer_y))
-        self.setField(u'footerPositionHeight', \
+        self.setField(u'footerPositionHeight',
             QtCore.QVariant(self.theme.font_footer_height))
-        self.setField(u'footerPositionWidth', \
+        self.setField(u'footerPositionWidth',
             QtCore.QVariant(self.theme.font_footer_width))
 
-    def setAlignmentTabValues(self):
-        """
-        Define the Tab Alignments Page
-        """
-        self.setField(u'horizontal', \
+    def setAlignmentPageValues(self):
+        """
+        Handle the display and state of the Alignments page.
+        """
+        self.setField(u'horizontal',
             QtCore.QVariant(self.theme.display_horizontal_align))
-        self.setField(u'vertical', \
+        self.setField(u'vertical',
             QtCore.QVariant(self.theme.display_vertical_align))
-        self.setField(u'slideTransition', \
+        self.setField(u'slideTransition',
             QtCore.QVariant(self.theme.display_slide_transition))
 
-    def setPreviewTabValues(self):
+    def setPreviewPageValues(self):
+        """
+        Handle the display and state of the Preview page.
+        """
         self.setField(u'name', QtCore.QVariant(self.theme.theme_name))
-        if len(self.theme.theme_name) > 0:
-            self.themeNameEdit.setEnabled(False)
-        else:
-            self.themeNameEdit.setEnabled(True)
 
-    def onBackgroundComboBox(self, index):
+    def onBackgroundComboBoxCurrentIndexChanged(self, index):
         """
         Background style Combo box has changed.
         """
         self.theme.background_type = BackgroundType.to_string(index)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
-    def onGradientComboBox(self, index):
+    def onGradientComboBoxCurrentIndexChanged(self, index):
         """
         Background gradient Combo box has changed.
         """
         self.theme.background_direction = \
             BackgroundGradientType.to_string(index)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
     def onColorButtonClicked(self):
         """
@@ -471,7 +452,7 @@
         """
         self.theme.background_color = \
             self._colorButton(self.theme.background_color)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
     def onGradientStartButtonClicked(self):
         """
@@ -479,7 +460,7 @@
         """
         self.theme.background_start_color = \
             self._colorButton(self.theme.background_start_color)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
     def onGradientEndButtonClicked(self):
         """
@@ -487,7 +468,7 @@
         """
         self.theme.background_end_color = \
             self._colorButton(self.theme.background_end_color)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
     def onImageBrowseButtonClicked(self):
         """
@@ -501,27 +482,27 @@
             images_filter)
         if filename:
             self.theme.background_filename = unicode(filename)
-        self.setBackgroundTabValues()
+        self.setBackgroundPageValues()
 
-    def onMainColourPushButtonClicked(self):
+    def onMainColorButtonClicked(self):
         self.theme.font_main_color = \
             self._colorButton(self.theme.font_main_color)
-        self.setMainAreaTabValues()
+        self.setMainAreaPageValues()
 
-    def onOutlineColourPushButtonClicked(self):
+    def onOutlineColorButtonClicked(self):
         self.theme.font_main_outline_color = \
             self._colorButton(self.theme.font_main_outline_color)
-        self.setMainAreaTabValues()
+        self.setMainAreaPageValues()
 
-    def onShadowColourPushButtonClicked(self):
+    def onShadowColorButtonClicked(self):
         self.theme.font_main_shadow_color = \
             self._colorButton(self.theme.font_main_shadow_color)
-        self.setMainAreaTabValues()
+        self.setMainAreaPageValues()
 
-    def onFooterColourPushButtonClicked(self):
+    def onFooterColorButtonClicked(self):
         self.theme.font_footer_color = \
             self._colorButton(self.theme.font_footer_color)
-        self.setFooterAreaTabValues()
+        self.setFooterAreaPageValues()
 
     def updateTheme(self):
         """
@@ -543,9 +524,9 @@
         self.theme.font_main_shadow_size = \
             self.field(u'shadowSizeSpinBox').toInt()[0]
         self.theme.font_main_bold = \
-            self.field(u'boldCheckBox').toBool()
+            self.field(u'mainBoldCheckBox').toBool()
         self.theme.font_main_italics = \
-            self.field(u'italicsCheckBox').toBool()
+            self.field(u'mainItalicsCheckBox').toBool()
         # footer page
         self.theme.font_footer_name = \
             unicode(self.footerFontComboBox.currentFont().family())
@@ -620,4 +601,4 @@
             QtGui.QColor(field), self)
         if new_color.isValid():
             field = new_color.name()
-        return field
\ No newline at end of file
+        return field

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/thememanager.py	2010-12-30 12:06:38 +0000
@@ -35,7 +35,7 @@
 from openlp.core.ui import FileRenameForm, ThemeForm
 from openlp.core.theme import Theme
 from openlp.core.lib import OpenLPToolbar, ThemeXML, get_text_file_string, \
-    build_icon, Receiver, SettingsManager, translate, check_item_selected,  \
+    build_icon, Receiver, SettingsManager, translate, check_item_selected, \
     BackgroundType, BackgroundGradientType
 from openlp.core.utils import AppLocation, get_filesystem_encoding
 
@@ -230,7 +230,7 @@
             self.fileRenameForm.fileNameEdit.setText(oldThemeName)
             self.saveThemeName = oldThemeName
             if self.fileRenameForm.exec_():
-                newThemeName =  unicode(self.fileRenameForm.fileNameEdit.text())
+                newThemeName = unicode(self.fileRenameForm.fileNameEdit.text())
                 oldThemeData = self.getThemeData(oldThemeName)
                 self.deleteTheme(oldThemeName)
                 self.cloneThemeData(oldThemeData, newThemeName)
@@ -244,7 +244,7 @@
         self.fileRenameForm.fileNameEdit.setText(oldThemeName)
         self.saveThemeName = u''
         if self.fileRenameForm.exec_(True):
-            newThemeName =  unicode(self.fileRenameForm.fileNameEdit.text())
+            newThemeName = unicode(self.fileRenameForm.fileNameEdit.text())
             themeData = self.getThemeData(oldThemeName)
             self.cloneThemeData(themeData, newThemeName)
             self.loadThemes()
@@ -331,7 +331,7 @@
         theme = unicode(item.data(QtCore.Qt.UserRole).toString())
         path = QtGui.QFileDialog.getExistingDirectory(self,
             unicode(translate('OpenLP.ThemeManager',
-            'Save Theme - (%s)')) %  theme,
+            'Save Theme - (%s)')) % theme,
             SettingsManager.get_last_dir(self.settingsSection, 1))
         path = unicode(path)
         if path:
@@ -795,4 +795,4 @@
                         unicode(translate('OpenLP.ThemeManager',
                         'Theme %s is used by the service manager.')) % theme)
                     return False
-        return True
\ No newline at end of file
+        return True

=== modified file 'openlp/core/ui/themewizard.py'
--- openlp/core/ui/themewizard.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/themewizard.py	2010-12-30 12:06:38 +0000
@@ -31,592 +31,393 @@
 class Ui_ThemeWizard(object):
     def setupUi(self, ThemeWizard):
         ThemeWizard.setObjectName(u'OpenLP.ThemeWizard')
-        ThemeWizard.resize(550, 386)
         ThemeWizard.setModal(True)
         ThemeWizard.setWizardStyle(QtGui.QWizard.ModernStyle)
         ThemeWizard.setOptions(
             QtGui.QWizard.IndependentPages |
             QtGui.QWizard.NoBackButtonOnStartPage)
+        # Welcome Page
         self.welcomePage = QtGui.QWizardPage()
-        self.welcomePage.setTitle(u'')
-        self.welcomePage.setSubTitle(u'')
-        self.welcomePage.setObjectName(u'welcomePage')
         self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
             QtGui.QPixmap(u':/wizards/wizard_createtheme.bmp'))
-        self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage)
-        self.welcomeLayout.setSpacing(8)
-        self.welcomeLayout.setMargin(0)
-        self.welcomeLayout.setObjectName(u'welcomeLayout')
-        self.welcomePageLayout = QtGui.QVBoxLayout()
-        self.welcomePageLayout.setSpacing(8)
-        self.welcomePageLayout.setObjectName(u'welcomePageLayout')
+        self.welcomePage.setObjectName(u'WelcomePage')
+        self.welcomeLayout = QtGui.QVBoxLayout(self.welcomePage)
+        self.welcomeLayout.setObjectName(u'WelcomeLayout')
         self.titleLabel = QtGui.QLabel(self.welcomePage)
-        self.titleLabel.setObjectName(u'titleLabel')
-        self.welcomePageLayout.addWidget(self.titleLabel)
-        self.welcomeTopSpacer = QtGui.QSpacerItem(20, 40,
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        self.welcomePageLayout.addItem(self.welcomeTopSpacer)
+        self.titleLabel.setObjectName(u'TitleLabel')
+        self.welcomeLayout.addWidget(self.titleLabel)
+        self.welcomeLayout.addSpacing(40)
         self.informationLabel = QtGui.QLabel(self.welcomePage)
         self.informationLabel.setWordWrap(True)
-        self.informationLabel.setMargin(10)
-        self.informationLabel.setObjectName(u'informationLabel')
-        self.welcomePageLayout.addWidget(self.informationLabel)
-        self.welcomeBottomSpacer = QtGui.QSpacerItem(20, 40,
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.welcomePageLayout.addItem(self.welcomeBottomSpacer)
-        self.welcomeLayout.addLayout(self.welcomePageLayout)
+        self.informationLabel.setObjectName(u'InformationLabel')
+        self.welcomeLayout.addWidget(self.informationLabel)
+        self.welcomeLayout.addStretch()
         ThemeWizard.addPage(self.welcomePage)
+        # Background Page
         self.backgroundPage = QtGui.QWizardPage()
-        self.backgroundPage.setObjectName(u'backgroundPage')
+        self.backgroundPage.setObjectName(u'BackgroundPage')
         self.backgroundLayout = QtGui.QVBoxLayout(self.backgroundPage)
-        self.backgroundLayout.setSpacing(8)
-        self.backgroundLayout.setMargin(20)
-        self.backgroundLayout.setObjectName(u'backgroundLayout')
-        self.backgroundTypeLayout = QtGui.QHBoxLayout()
-        self.backgroundTypeLayout.setSpacing(8)
-        self.backgroundTypeLayout.setObjectName(u'backgroundTypeLayout')
-        self.backgroundTypeLabel = QtGui.QLabel(self.backgroundPage)
-        self.backgroundTypeLabel.setObjectName(u'backgroundTypeLabel')
-        self.backgroundTypeLayout.addWidget(self.backgroundTypeLabel)
-        self.backgroundTypeComboBox = QtGui.QComboBox(self.backgroundPage)
-        self.backgroundTypeComboBox.setObjectName(u'backgroundTypeComboBox')
-        self.backgroundTypeComboBox.addItem(u'')
-        self.backgroundTypeComboBox.addItem(u'')
-        self.backgroundTypeComboBox.addItem(u'')
-        self.backgroundTypeLayout.addWidget(self.backgroundTypeComboBox)
-        self.backgroundTypeSpacer = QtGui.QSpacerItem(40, 20,
-            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.backgroundTypeLayout.addItem(self.backgroundTypeSpacer)
+        self.backgroundLayout.setObjectName(u'BackgroundLayout')
+        self.backgroundTypeLayout = QtGui.QFormLayout()
+        self.backgroundTypeLayout.setObjectName(u'BackgroundTypeLayout')
+        self.backgroundLabel = QtGui.QLabel(self.backgroundPage)
+        self.backgroundLabel.setObjectName(u'BackgroundLabel')
+        self.backgroundComboBox = QtGui.QComboBox(self.backgroundPage)
+        self.backgroundComboBox.addItems([u'', u'', u''])
+        self.backgroundComboBox.setObjectName(u'BackgroundComboBox')
+        self.backgroundTypeLayout.addRow(self.backgroundLabel,
+            self.backgroundComboBox)
+        self.backgroundTypeSpacer = QtGui.QSpacerItem(10, 0,
+            QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
+        self.backgroundTypeLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.backgroundTypeSpacer)
         self.backgroundLayout.addLayout(self.backgroundTypeLayout)
-        self.backgroundStackedWidget = QtGui.QStackedWidget(
-            self.backgroundPage)
-        self.backgroundStackedWidget.setObjectName(u'backgroundStackedWidget')
-        self.colorPage = QtGui.QWidget()
-        self.colorPage.setObjectName(u'colorPage')
-        self.colorLayout = QtGui.QFormLayout(self.colorPage)
+        self.backgroundStack = QtGui.QStackedLayout()
+        self.backgroundStack.setObjectName(u'BackgroundStack')
+        self.colorWidget = QtGui.QWidget(self.backgroundPage)
+        self.colorWidget.setObjectName(u'ColorWidget')
+        self.colorLayout = QtGui.QFormLayout(self.colorWidget)
         self.colorLayout.setMargin(0)
-        self.colorLayout.setSpacing(8)
-        self.colorLayout.setObjectName(u'colorLayout')
-        self.colorLabel = QtGui.QLabel(self.colorPage)
-        self.colorLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.colorLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.colorLabel.setObjectName(u'colorLabel')
-        self.colorLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.colorLabel)
-        self.colorButton = QtGui.QPushButton(self.colorPage)
-        self.colorButton.setText(u'')
-        self.colorButton.setObjectName(u'colorButton')
-        self.colorLayout.setWidget(0,
-            QtGui.QFormLayout.FieldRole, self.colorButton)
-        self.backgroundStackedWidget.addWidget(self.colorPage)
-        self.gradientPage = QtGui.QWidget()
-        self.gradientPage.setObjectName(u'gradientPage')
-        self.gradientLayout = QtGui.QFormLayout(self.gradientPage)
+        self.colorLayout.setObjectName(u'ColorLayout')
+        self.colorLabel = QtGui.QLabel(self.colorWidget)
+        self.colorLabel.setObjectName(u'ColorLabel')
+        self.colorButton = QtGui.QPushButton(self.colorWidget)
+        self.colorButton.setObjectName(u'ColorButton')
+        self.colorLayout.addRow(self.colorLabel, self.colorButton)
+        self.colorSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.colorLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.colorSpacer)
+        self.backgroundStack.addWidget(self.colorWidget)
+        self.gradientWidget = QtGui.QWidget(self.backgroundPage)
+        self.gradientWidget.setObjectName(u'GradientWidget')
+        self.gradientLayout = QtGui.QFormLayout(self.gradientWidget)
         self.gradientLayout.setMargin(0)
-        self.gradientLayout.setSpacing(8)
-        self.gradientLayout.setObjectName(u'gradientLayout')
-        self.gradientStartLabel = QtGui.QLabel(self.gradientPage)
-        self.gradientStartLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.gradientStartLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.gradientStartLabel.setObjectName(u'gradientStartLabel')
-        self.gradientLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.gradientStartLabel)
-        self.gradientStartButton = QtGui.QPushButton(self.gradientPage)
-        self.gradientStartButton.setText(u'')
-        self.gradientStartButton.setObjectName(u'gradientStartButton')
-        self.gradientLayout.setWidget(0,
-            QtGui.QFormLayout.FieldRole, self.gradientStartButton)
-        self.gradientEndLabel = QtGui.QLabel(self.gradientPage)
-        self.gradientEndLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.gradientEndLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.gradientEndLabel.setObjectName(u'gradientEndLabel')
-        self.gradientLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.gradientEndLabel)
-        self.gradientEndButton = QtGui.QPushButton(self.gradientPage)
-        self.gradientEndButton.setText(u'')
-        self.gradientEndButton.setObjectName(u'gradientEndButton')
-        self.gradientLayout.setWidget(1,
-            QtGui.QFormLayout.FieldRole, self.gradientEndButton)
-        self.gradientTypeLabel = QtGui.QLabel(self.gradientPage)
-        self.gradientTypeLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.gradientTypeLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.gradientTypeLabel.setObjectName(u'gradientTypeLabel')
-        self.gradientLayout.setWidget(2,
-            QtGui.QFormLayout.LabelRole, self.gradientTypeLabel)
-        self.gradientComboBox = QtGui.QComboBox(self.gradientPage)
-        self.gradientComboBox.setObjectName(u'gradientComboBox')
-        self.gradientComboBox.addItem(u'')
-        self.gradientComboBox.addItem(u'')
-        self.gradientComboBox.addItem(u'')
-        self.gradientComboBox.addItem(u'')
-        self.gradientComboBox.addItem(u'')
-        self.gradientLayout.setWidget(2,
-            QtGui.QFormLayout.FieldRole, self.gradientComboBox)
-        self.backgroundStackedWidget.addWidget(self.gradientPage)
-        self.imagePage = QtGui.QWidget()
-        self.imagePage.setObjectName(u'imagePage')
-        self.imageLayout = QtGui.QFormLayout(self.imagePage)
+        self.gradientLayout.setObjectName(u'GradientLayout')
+        self.gradientStartLabel = QtGui.QLabel(self.gradientWidget)
+        self.gradientStartLabel.setObjectName(u'GradientStartLabel')
+        self.gradientStartButton = QtGui.QPushButton(self.gradientWidget)
+        self.gradientStartButton.setObjectName(u'GradientStartButton')
+        self.gradientLayout.addRow(self.gradientStartLabel,
+            self.gradientStartButton)
+        self.gradientEndLabel = QtGui.QLabel(self.gradientWidget)
+        self.gradientEndLabel.setObjectName(u'GradientEndLabel')
+        self.gradientEndButton = QtGui.QPushButton(self.gradientWidget)
+        self.gradientEndButton.setObjectName(u'GradientEndButton')
+        self.gradientLayout.addRow(self.gradientEndLabel,
+            self.gradientEndButton)
+        self.gradientTypeLabel = QtGui.QLabel(self.gradientWidget)
+        self.gradientTypeLabel.setObjectName(u'GradientTypeLabel')
+        self.gradientComboBox = QtGui.QComboBox(self.gradientWidget)
+        self.gradientComboBox.setObjectName(u'GradientComboBox')
+        self.gradientComboBox.addItems([u'', u'', u'', u'', u''])
+        self.gradientLayout.addRow(self.gradientTypeLabel,
+            self.gradientComboBox)
+        self.gradientSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.gradientLayout.setItem(3, QtGui.QFormLayout.LabelRole,
+            self.gradientSpacer)
+        self.backgroundStack.addWidget(self.gradientWidget)
+        self.imageWidget = QtGui.QWidget(self.backgroundPage)
+        self.imageWidget.setObjectName(u'ImageWidget')
+        self.imageLayout = QtGui.QFormLayout(self.imageWidget)
         self.imageLayout.setMargin(0)
-        self.imageLayout.setSpacing(8)
-        self.imageLayout.setObjectName(u'imageLayout')
-        self.imageLabel = QtGui.QLabel(self.imagePage)
-        self.imageLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.imageLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.imageLabel.setObjectName(u'imageLabel')
-        self.imageLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.imageLabel)
+        self.imageLayout.setObjectName(u'ImageLayout')
+        self.imageLabel = QtGui.QLabel(self.imageWidget)
+        self.imageLabel.setObjectName(u'ImageLabel')
         self.imageFileLayout = QtGui.QHBoxLayout()
-        self.imageFileLayout.setSpacing(8)
-        self.imageFileLayout.setObjectName(u'imageFileLayout')
-        self.imageLineEdit = QtGui.QLineEdit(self.imagePage)
-        self.imageLineEdit.setObjectName(u'imageLineEdit')
-        self.imageFileLayout.addWidget(self.imageLineEdit)
-        self.imageBrowseButton = QtGui.QToolButton(self.imagePage)
-        self.imageBrowseButton.setText(u'')
+        self.imageFileLayout.setObjectName(u'ImageFileLayout')
+        self.imageFileEdit = QtGui.QLineEdit(self.imageWidget)
+        self.imageFileEdit.setObjectName(u'ImageFileEdit')
+        self.imageFileLayout.addWidget(self.imageFileEdit)
+        self.imageBrowseButton = QtGui.QToolButton(self.imageWidget)
+        self.imageBrowseButton.setObjectName(u'ImageBrowseButton')
         self.imageBrowseButton.setIcon(
             build_icon(u':/general/general_open.png'))
-        self.imageBrowseButton.setObjectName(u'imageBrowseButton')
         self.imageFileLayout.addWidget(self.imageBrowseButton)
-        self.imageLayout.setLayout(0,
-            QtGui.QFormLayout.FieldRole, self.imageFileLayout)
-        self.backgroundStackedWidget.addWidget(self.imagePage)
-        self.backgroundLayout.addWidget(self.backgroundStackedWidget)
+        self.imageLayout.addRow(self.imageLabel, self.imageFileLayout)
+        self.imageSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.imageLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.imageSpacer)
+        self.backgroundStack.addWidget(self.imageWidget)
+        self.backgroundLayout.addLayout(self.backgroundStack)
         ThemeWizard.addPage(self.backgroundPage)
+        # Main Area Page
         self.mainAreaPage = QtGui.QWizardPage()
-        self.mainAreaPage.setObjectName(u'mainAreaPage')
+        self.mainAreaPage.setObjectName(u'MainAreaPage')
         self.mainAreaLayout = QtGui.QFormLayout(self.mainAreaPage)
-        self.mainAreaLayout.setFormAlignment(QtCore.Qt.AlignLeading |
-            QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
-        self.mainAreaLayout.setMargin(20)
-        self.mainAreaLayout.setSpacing(8)
-        self.mainAreaLayout.setObjectName(u'mainAreaLayout')
+        self.mainAreaLayout.setObjectName(u'MainAreaLayout')
         self.mainFontLabel = QtGui.QLabel(self.mainAreaPage)
-        self.mainFontLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.mainFontLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.mainFontLabel.setObjectName(u'mainFontLabel')
-        self.mainAreaLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.mainFontLabel)
+        self.mainFontLabel.setObjectName(u'MainFontLabel')
         self.mainFontComboBox = QtGui.QFontComboBox(self.mainAreaPage)
-        self.mainFontComboBox.setObjectName(u'mainFontComboBox')
-        self.mainAreaLayout.setWidget(0,
-            QtGui.QFormLayout.FieldRole, self.mainFontComboBox)
+        self.mainFontComboBox.setObjectName(u'MainFontComboBox')
+        self.mainAreaLayout.addRow(self.mainFontLabel, self.mainFontComboBox)
         self.mainColorLabel = QtGui.QLabel(self.mainAreaPage)
-        self.mainColorLabel.setObjectName(u'mainColorLabel')
-        self.mainAreaLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.mainColorLabel)
-        self.fontPropertiesLayout = QtGui.QHBoxLayout()
-        self.fontPropertiesLayout.setSpacing(24)
-        self.fontPropertiesLayout.setObjectName(u'fontPropertiesLayout')
-        self.mainColorPushButton = QtGui.QPushButton(self.mainAreaPage)
-        self.mainColorPushButton.setText(u'')
-        self.mainColorPushButton.setObjectName(u'mainColorPushButton')
-        self.fontPropertiesLayout.addWidget(self.mainColorPushButton)
-        self.boldCheckBox = QtGui.QCheckBox(self.mainAreaPage)
-        self.boldCheckBox.setObjectName(u'boldCheckBox')
-        self.fontPropertiesLayout.addWidget(self.boldCheckBox)
-        self.italicsCheckBox = QtGui.QCheckBox(self.mainAreaPage)
-        self.italicsCheckBox.setObjectName(u'italicsCheckBox')
-        self.fontPropertiesLayout.addWidget(self.italicsCheckBox)
-        self.mainAreaLayout.setLayout(1,
-            QtGui.QFormLayout.FieldRole, self.fontPropertiesLayout)
+        self.mainColorLabel.setObjectName(u'MainColorLabel')
+        self.mainPropertiesLayout = QtGui.QHBoxLayout()
+        self.mainPropertiesLayout.setObjectName(u'MainPropertiesLayout')
+        self.mainColorButton = QtGui.QPushButton(self.mainAreaPage)
+        self.mainColorButton.setObjectName(u'MainColorButton')
+        self.mainPropertiesLayout.addWidget(self.mainColorButton)
+        self.mainPropertiesLayout.addSpacing(20)
+        self.mainBoldCheckBox = QtGui.QCheckBox(self.mainAreaPage)
+        self.mainBoldCheckBox.setObjectName(u'MainBoldCheckBox')
+        self.mainPropertiesLayout.addWidget(self.mainBoldCheckBox)
+        self.mainPropertiesLayout.addSpacing(20)
+        self.mainItalicsCheckBox = QtGui.QCheckBox(self.mainAreaPage)
+        self.mainItalicsCheckBox.setObjectName(u'MainItalicsCheckBox')
+        self.mainPropertiesLayout.addWidget(self.mainItalicsCheckBox)
+        self.mainAreaLayout.addRow(self.mainColorLabel,
+            self.mainPropertiesLayout)
         self.mainSizeLabel = QtGui.QLabel(self.mainAreaPage)
-        self.mainSizeLabel.setObjectName(u'mainSizeLabel')
-        self.mainAreaLayout.setWidget(2,
-            QtGui.QFormLayout.LabelRole, self.mainSizeLabel)
+        self.mainSizeLabel.setObjectName(u'MainSizeLabel')
         self.mainSizeLayout = QtGui.QHBoxLayout()
-        self.mainSizeLayout.setSpacing(8)
-        self.mainSizeLayout.setMargin(0)
-        self.mainSizeLayout.setObjectName(u'mainSizeLayout')
+        self.mainSizeLayout.setObjectName(u'MainSizeLayout')
         self.mainSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.mainSizeSpinBox.sizePolicy().hasHeightForWidth())
-        self.mainSizeSpinBox.setSizePolicy(sizePolicy)
-        self.mainSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0))
         self.mainSizeSpinBox.setMaximum(999)
-        self.mainSizeSpinBox.setProperty(u'value', 16)
-        self.mainSizeSpinBox.setObjectName(u'mainSizeSpinBox')
+        self.mainSizeSpinBox.setValue(16)
+        self.mainSizeSpinBox.setObjectName(u'MainSizeSpinBox')
         self.mainSizeLayout.addWidget(self.mainSizeSpinBox)
         self.mainLineCountLabel = QtGui.QLabel(self.mainAreaPage)
-        self.mainLineCountLabel.setObjectName(u'mainLineCountLabel')
+        self.mainLineCountLabel.setObjectName(u'MainLineCountLabel')
         self.mainSizeLayout.addWidget(self.mainLineCountLabel)
-        self.mainAreaLayout.setLayout(2,
-            QtGui.QFormLayout.FieldRole, self.mainSizeLayout)
+        self.mainAreaLayout.addRow(self.mainSizeLabel, self.mainSizeLayout)
         self.lineSpacingLabel = QtGui.QLabel(self.mainAreaPage)
-        self.lineSpacingLabel.setObjectName(u'lineSpacingLabel')
-        self.mainAreaLayout.setWidget(3,
-            QtGui.QFormLayout.LabelRole, self.lineSpacingLabel)
+        self.lineSpacingLabel.setObjectName(u'LineSpacingLabel')
         self.lineSpacingSpinBox = QtGui.QSpinBox(self.mainAreaPage)
         self.lineSpacingSpinBox.setMinimum(-50)
         self.lineSpacingSpinBox.setMaximum(50)
-        self.lineSpacingSpinBox.setObjectName(u'lineSpacingSpinBox')
-        self.mainAreaLayout.setWidget(3,
-            QtGui.QFormLayout.FieldRole, self.lineSpacingSpinBox)
+        self.lineSpacingSpinBox.setObjectName(u'LineSpacingSpinBox')
+        self.mainAreaLayout.addRow(self.lineSpacingLabel,
+            self.lineSpacingSpinBox)
         self.outlineCheckBox = QtGui.QCheckBox(self.mainAreaPage)
-        self.outlineCheckBox.setObjectName(u'outlineCheckBox')
-        self.mainAreaLayout.setWidget(4,
-            QtGui.QFormLayout.LabelRole, self.outlineCheckBox)
+        self.outlineCheckBox.setObjectName(u'OutlineCheckBox')
         self.outlineLayout = QtGui.QHBoxLayout()
-        self.outlineLayout.setObjectName(u'outlineLayout')
-        self.outlineColorPushButton = QtGui.QPushButton(self.mainAreaPage)
-        self.outlineColorPushButton.setEnabled(True)
-        self.outlineColorPushButton.setText(u'')
-        self.outlineColorPushButton.setObjectName(u'outlineColorPushButton')
-        self.outlineLayout.addWidget(self.outlineColorPushButton)
+        self.outlineLayout.setObjectName(u'OutlineLayout')
+        self.outlineColorButton = QtGui.QPushButton(self.mainAreaPage)
+        self.outlineColorButton.setEnabled(False)
+        self.outlineColorButton.setObjectName(u'OutlineColorButton')
+        self.outlineLayout.addWidget(self.outlineColorButton)
+        self.outlineLayout.addSpacing(20)
         self.outlineSizeLabel = QtGui.QLabel(self.mainAreaPage)
-        self.outlineSizeLabel.setObjectName(u'outlineSizeLabel')
+        self.outlineSizeLabel.setObjectName(u'OutlineSizeLabel')
         self.outlineLayout.addWidget(self.outlineSizeLabel)
         self.outlineSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
-        self.outlineSizeSpinBox.setObjectName(u'outlineSizeSpinBox')
+        self.outlineSizeSpinBox.setEnabled(False)
+        self.outlineSizeSpinBox.setObjectName(u'OutlineSizeSpinBox')
         self.outlineLayout.addWidget(self.outlineSizeSpinBox)
-        self.mainAreaLayout.setLayout(4,
-            QtGui.QFormLayout.FieldRole, self.outlineLayout)
+        self.mainAreaLayout.addRow(self.outlineCheckBox, self.outlineLayout)
         self.shadowCheckBox = QtGui.QCheckBox(self.mainAreaPage)
-        self.shadowCheckBox.setObjectName(u'shadowCheckBox')
-        self.mainAreaLayout.setWidget(5,
-            QtGui.QFormLayout.LabelRole, self.shadowCheckBox)
+        self.shadowCheckBox.setObjectName(u'ShadowCheckBox')
         self.shadowLayout = QtGui.QHBoxLayout()
-        self.shadowLayout.setObjectName(u'shadowLayout')
-        self.shadowColorPushButton = QtGui.QPushButton(self.mainAreaPage)
-        self.shadowColorPushButton.setEnabled(True)
-        self.shadowColorPushButton.setText(u'')
-        self.shadowColorPushButton.setObjectName(u'shadowColorPushButton')
-        self.shadowLayout.addWidget(self.shadowColorPushButton)
+        self.shadowLayout.setObjectName(u'ShadowLayout')
+        self.shadowColorButton = QtGui.QPushButton(self.mainAreaPage)
+        self.shadowColorButton.setEnabled(False)
+        self.shadowColorButton.setObjectName(u'shadowColorButton')
+        self.shadowLayout.addWidget(self.shadowColorButton)
+        self.shadowLayout.addSpacing(20)
         self.shadowSizeLabel = QtGui.QLabel(self.mainAreaPage)
-        self.shadowSizeLabel.setObjectName(u'shadowSizeLabel')
+        self.shadowSizeLabel.setObjectName(u'ShadowSizeLabel')
         self.shadowLayout.addWidget(self.shadowSizeLabel)
         self.shadowSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
-        self.shadowSizeSpinBox.setObjectName(u'shadowSizeSpinBox')
+        self.shadowSizeSpinBox.setEnabled(False)
+        self.shadowSizeSpinBox.setObjectName(u'ShadowSizeSpinBox')
         self.shadowLayout.addWidget(self.shadowSizeSpinBox)
-        self.mainAreaLayout.setLayout(5,
-            QtGui.QFormLayout.FieldRole, self.shadowLayout)
+        self.mainAreaLayout.addRow(self.shadowCheckBox, self.shadowLayout)
         ThemeWizard.addPage(self.mainAreaPage)
+        # Footer Area Page
         self.footerAreaPage = QtGui.QWizardPage()
-        self.footerAreaPage.setObjectName(u'footerAreaPage')
-        self.footerLayout = QtGui.QFormLayout(self.footerAreaPage)
-        self.footerLayout.setFieldGrowthPolicy(
-            QtGui.QFormLayout.ExpandingFieldsGrow)
-        self.footerLayout.setMargin(20)
-        self.footerLayout.setSpacing(8)
-        self.footerLayout.setObjectName(u'footerLayout')
+        self.footerAreaPage.setObjectName(u'FooterAreaPage')
+        self.footerAreaLayout = QtGui.QFormLayout(self.footerAreaPage)
+        self.footerAreaLayout.setObjectName(u'FooterAreaLayout')
         self.footerFontLabel = QtGui.QLabel(self.footerAreaPage)
-        self.footerFontLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.footerFontLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.footerFontLabel.setObjectName(u'footerFontLabel')
-        self.footerLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.footerFontLabel)
+        self.footerFontLabel.setObjectName(u'FooterFontLabel')
         self.footerFontComboBox = QtGui.QFontComboBox(self.footerAreaPage)
         self.footerFontComboBox.setObjectName(u'footerFontComboBox')
-        self.footerLayout.setWidget(0,
-            QtGui.QFormLayout.FieldRole, self.footerFontComboBox)
+        self.footerAreaLayout.addRow(self.footerFontLabel,
+            self.footerFontComboBox)
         self.footerColorLabel = QtGui.QLabel(self.footerAreaPage)
-        self.footerColorLabel.setObjectName(u'footerColorLabel')
-        self.footerLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.footerColorLabel)
-        self.footerColorPushButton = QtGui.QPushButton(self.footerAreaPage)
-        self.footerColorPushButton.setText(u'')
-        self.footerColorPushButton.setObjectName(u'footerColorPushButton')
-        self.footerLayout.setWidget(1,
-            QtGui.QFormLayout.FieldRole, self.footerColorPushButton)
+        self.footerColorLabel.setObjectName(u'FooterColorLabel')
+        self.footerColorButton = QtGui.QPushButton(self.footerAreaPage)
+        self.footerColorButton.setObjectName(u'footerColorButton')
+        self.footerAreaLayout.addRow(self.footerColorLabel,
+            self.footerColorButton)
         self.footerSizeLabel = QtGui.QLabel(self.footerAreaPage)
-        self.footerSizeLabel.setObjectName(u'footerSizeLabel')
-        self.footerLayout.setWidget(2,
-            QtGui.QFormLayout.LabelRole, self.footerSizeLabel)
+        self.footerSizeLabel.setObjectName(u'FooterSizeLabel')
         self.footerSizeSpinBox = QtGui.QSpinBox(self.footerAreaPage)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.footerSizeSpinBox.sizePolicy().hasHeightForWidth())
-        self.footerSizeSpinBox.setSizePolicy(sizePolicy)
-        self.footerSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0))
         self.footerSizeSpinBox.setMaximum(999)
-        self.footerSizeSpinBox.setProperty(u'value', 10)
-        self.footerSizeSpinBox.setObjectName(u'footerSizeSpinBox')
-        self.footerLayout.setWidget(2,
-            QtGui.QFormLayout.FieldRole, self.footerSizeSpinBox)
+        self.footerSizeSpinBox.setValue(10)
+        self.footerSizeSpinBox.setObjectName(u'FooterSizeSpinBox')
+        self.footerAreaLayout.addRow(self.footerSizeLabel, self.footerSizeSpinBox)
         ThemeWizard.addPage(self.footerAreaPage)
+        # Alignment Page
         self.alignmentPage = QtGui.QWizardPage()
-        self.alignmentPage.setObjectName(u'alignmentPage')
+        self.alignmentPage.setObjectName(u'AlignmentPage')
         self.alignmentLayout = QtGui.QFormLayout(self.alignmentPage)
-        self.alignmentLayout.setMargin(20)
-        self.alignmentLayout.setSpacing(8)
-        self.alignmentLayout.setObjectName(u'alignmentLayout')
+        self.alignmentLayout.setObjectName(u'AlignmentLayout')
         self.horizontalLabel = QtGui.QLabel(self.alignmentPage)
-        self.horizontalLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.horizontalLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.horizontalLabel.setObjectName(u'horizontalLabel')
-        self.alignmentLayout.setWidget(0,
-            QtGui.QFormLayout.LabelRole, self.horizontalLabel)
+        self.horizontalLabel.setObjectName(u'HorizontalLabel')
         self.horizontalComboBox = QtGui.QComboBox(self.alignmentPage)
-        self.horizontalComboBox.setEditable(False)
-        self.horizontalComboBox.setObjectName(u'horizontalComboBox')
-        self.horizontalComboBox.addItem(u'')
-        self.horizontalComboBox.addItem(u'')
-        self.horizontalComboBox.addItem(u'')
-        self.alignmentLayout.setWidget(0,
-            QtGui.QFormLayout.FieldRole, self.horizontalComboBox)
+        self.horizontalComboBox.addItems([u'', u'', u''])
+        self.horizontalComboBox.setObjectName(u'HorizontalComboBox')
+        self.alignmentLayout.addRow(self.horizontalLabel,
+            self.horizontalComboBox)
         self.verticalLabel = QtGui.QLabel(self.alignmentPage)
-        self.verticalLabel.setObjectName(u'verticalLabel')
-        self.alignmentLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.verticalLabel)
+        self.verticalLabel.setObjectName(u'VerticalLabel')
         self.verticalComboBox = QtGui.QComboBox(self.alignmentPage)
-        self.verticalComboBox.setObjectName(u'verticalComboBox')
-        self.verticalComboBox.addItem(u'')
-        self.verticalComboBox.addItem(u'')
-        self.verticalComboBox.addItem(u'')
-        self.alignmentLayout.setWidget(1,
-            QtGui.QFormLayout.FieldRole, self.verticalComboBox)
+        self.verticalComboBox.addItems([u'', u'', u''])
+        self.verticalComboBox.setObjectName(u'VerticalComboBox')
+        self.alignmentLayout.addRow(self.verticalLabel, self.verticalComboBox)
+        self.transitionsLabel = QtGui.QLabel(self.alignmentPage)
+        self.transitionsLabel.setObjectName(u'TransitionsLabel')
         self.transitionsCheckBox = QtGui.QCheckBox(self.alignmentPage)
-        self.transitionsCheckBox.setObjectName(u'transitionsCheckBox')
-        self.alignmentLayout.setWidget(2,
-            QtGui.QFormLayout.FieldRole, self.transitionsCheckBox)
+        self.transitionsCheckBox.setObjectName(u'TransitionsCheckBox')
+        self.alignmentLayout.addRow(self.transitionsLabel,
+            self.transitionsCheckBox)
         ThemeWizard.addPage(self.alignmentPage)
+        # Area Position Page
         self.areaPositionPage = QtGui.QWizardPage()
-        self.areaPositionPage.setObjectName(u'areaPositionPage')
-        self.areaPositionLayout = QtGui.QGridLayout(self.areaPositionPage)
-        self.areaPositionLayout.setMargin(20)
-        self.areaPositionLayout.setSpacing(8)
-        self.areaPositionLayout.setObjectName(u'areaPositionLayout')
+        self.areaPositionPage.setObjectName(u'AreaPositionPage')
+        self.areaPositionLayout = QtGui.QHBoxLayout(self.areaPositionPage)
+        self.areaPositionLayout.setObjectName(u'AreaPositionLayout')
         self.mainPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage)
-        self.mainPositionGroupBox.setMinimumSize(QtCore.QSize(248, 0))
-        self.mainPositionGroupBox.setObjectName(u'mainPositionGroupBox')
+        self.mainPositionGroupBox.setObjectName(u'MainPositionGroupBox')
         self.mainPositionLayout = QtGui.QFormLayout(self.mainPositionGroupBox)
-        self.mainPositionLayout.setMargin(8)
-        self.mainPositionLayout.setSpacing(8)
-        self.mainPositionLayout.setObjectName(u'mainPositionLayout')
-        self.mainDefaultPositionCheckBox = QtGui.QCheckBox(
-            self.mainPositionGroupBox)
-        self.mainDefaultPositionCheckBox.setChecked(True)
-        self.mainDefaultPositionCheckBox.setTristate(False)
-        self.mainDefaultPositionCheckBox.setObjectName(
-            u'mainDefaultPositionCheckBox')
-        self.mainPositionLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
-            self.mainDefaultPositionCheckBox)
-        self.nainXLabel = QtGui.QLabel(self.mainPositionGroupBox)
-        self.nainXLabel.setObjectName(u'nainXLabel')
-        self.mainPositionLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.nainXLabel)
+        self.mainPositionLayout.setObjectName(u'MainPositionLayout')
+        self.mainPositionCheckBox = QtGui.QCheckBox(self.mainPositionGroupBox)
+        self.mainPositionCheckBox.setObjectName(u'MainPositionCheckBox')
+        self.mainPositionLayout.addRow(self.mainPositionCheckBox)
+        self.mainXLabel = QtGui.QLabel(self.mainPositionGroupBox)
+        self.mainXLabel.setObjectName(u'MainXLabel')
         self.mainXSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
-        self.mainXSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.mainXSpinBox.sizePolicy().hasHeightForWidth())
-        self.mainXSpinBox.setSizePolicy(sizePolicy)
-        self.mainXSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.mainXSpinBox.setMaximum(9999)
-        self.mainXSpinBox.setProperty(u'value', 0)
-        self.mainXSpinBox.setObjectName(u'mainXSpinBox')
-        self.mainPositionLayout.setWidget(1,
-            QtGui.QFormLayout.FieldRole, self.mainXSpinBox)
+        self.mainXSpinBox.setObjectName(u'MainXSpinBox')
+        self.mainPositionLayout.addRow(self.mainXLabel, self.mainXSpinBox)
+        self.mainYLabel = QtGui.QLabel(self.mainPositionGroupBox)
+        self.mainYLabel.setObjectName(u'MainYLabel')
         self.mainYSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
-        self.mainYSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.mainYSpinBox.sizePolicy().hasHeightForWidth())
-        self.mainYSpinBox.setSizePolicy(sizePolicy)
-        self.mainYSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.mainYSpinBox.setMaximum(9999)
-        self.mainYSpinBox.setObjectName(u'mainYSpinBox')
-        self.mainPositionLayout.setWidget(2,
-            QtGui.QFormLayout.FieldRole, self.mainYSpinBox)
-        self.mainYLabel = QtGui.QLabel(self.mainPositionGroupBox)
-        self.mainYLabel.setObjectName(u'mainYLabel')
-        self.mainPositionLayout.setWidget(2,
-            QtGui.QFormLayout.LabelRole, self.mainYLabel)
+        self.mainYSpinBox.setObjectName(u'MainYSpinBox')
+        self.mainPositionLayout.addRow(self.mainYLabel, self.mainYSpinBox)
+        self.mainWidthLabel = QtGui.QLabel(self.mainPositionGroupBox)
+        self.mainWidthLabel.setObjectName(u'MainWidthLabel')
         self.mainWidthSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
-        self.mainWidthSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.mainWidthSpinBox.sizePolicy().hasHeightForWidth())
-        self.mainWidthSpinBox.setSizePolicy(sizePolicy)
-        self.mainWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.mainWidthSpinBox.setMaximum(9999)
-        self.mainWidthSpinBox.setObjectName(u'mainWidthSpinBox')
-        self.mainPositionLayout.setWidget(3,
-            QtGui.QFormLayout.FieldRole, self.mainWidthSpinBox)
-        self.mainWidthLabel = QtGui.QLabel(self.mainPositionGroupBox)
-        self.mainWidthLabel.setObjectName(u'mainWidthLabel')
-        self.mainPositionLayout.setWidget(3,
-            QtGui.QFormLayout.LabelRole, self.mainWidthLabel)
+        self.mainWidthSpinBox.setObjectName(u'MainWidthSpinBox')
+        self.mainPositionLayout.addRow(self.mainWidthLabel,
+            self.mainWidthSpinBox)
+        self.mainHeightLabel = QtGui.QLabel(self.mainPositionGroupBox)
+        self.mainHeightLabel.setObjectName(u'MainHeightLabel')
         self.mainHeightSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
-        self.mainHeightSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.mainHeightSpinBox.sizePolicy().hasHeightForWidth())
-        self.mainHeightSpinBox.setSizePolicy(sizePolicy)
-        self.mainHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.mainHeightSpinBox.setMaximum(9999)
-        self.mainHeightSpinBox.setObjectName(u'mainHeightSpinBox')
-        self.mainPositionLayout.setWidget(4,
-            QtGui.QFormLayout.FieldRole, self.mainHeightSpinBox)
-        self.mainHeightLabel = QtGui.QLabel(self.mainPositionGroupBox)
-        self.mainHeightLabel.setObjectName(u'mainHeightLabel')
-        self.mainPositionLayout.setWidget(4,
-            QtGui.QFormLayout.LabelRole, self.mainHeightLabel)
-        self.areaPositionLayout.addWidget(
-            self.mainPositionGroupBox, 1, 0, 1, 1)
+        self.mainHeightSpinBox.setObjectName(u'MainHeightSpinBox')
+        self.mainPositionLayout.addRow(self.mainHeightLabel,
+            self.mainHeightSpinBox)
+        self.areaPositionLayout.addWidget(self.mainPositionGroupBox)
         self.footerPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage)
-        self.footerPositionGroupBox.setMinimumSize(QtCore.QSize(248, 0))
-        self.footerPositionGroupBox.setObjectName(u'footerPositionGroupBox')
-        self.footerPositionLayout = QtGui.QFormLayout(
-            self.footerPositionGroupBox)
-        self.footerPositionLayout.setMargin(8)
-        self.footerPositionLayout.setSpacing(8)
-        self.footerPositionLayout.setObjectName(u'footerPositionLayout')
+        self.footerPositionGroupBox.setObjectName(u'FooterPositionGroupBox')
+        self.footerPositionLayout = QtGui.QFormLayout(self.footerPositionGroupBox)
+        self.footerPositionLayout.setObjectName(u'FooterPositionLayout')
+        self.footerPositionCheckBox = QtGui.QCheckBox(self.footerPositionGroupBox)
+        self.footerPositionCheckBox.setObjectName(u'FooterPositionCheckBox')
+        self.footerPositionLayout.addRow(self.footerPositionCheckBox)
         self.footerXLabel = QtGui.QLabel(self.footerPositionGroupBox)
-        self.footerXLabel.setObjectName(u'footerXLabel')
-        self.footerPositionLayout.setWidget(1,
-            QtGui.QFormLayout.LabelRole, self.footerXLabel)
+        self.footerXLabel.setObjectName(u'FooterXLabel')
         self.footerXSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
-        self.footerXSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.footerXSpinBox.sizePolicy().hasHeightForWidth())
-        self.footerXSpinBox.setSizePolicy(sizePolicy)
-        self.footerXSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.footerXSpinBox.setMaximum(9999)
-        self.footerXSpinBox.setProperty(u'value', 0)
-        self.footerXSpinBox.setObjectName(u'footerXSpinBox')
-        self.footerPositionLayout.setWidget(1,
-            QtGui.QFormLayout.FieldRole, self.footerXSpinBox)
+        self.footerXSpinBox.setObjectName(u'FooterXSpinBox')
+        self.footerPositionLayout.addRow(self.footerXLabel, self.footerXSpinBox)
         self.footerYLabel = QtGui.QLabel(self.footerPositionGroupBox)
-        self.footerYLabel.setObjectName(u'footerYLabel')
-        self.footerPositionLayout.setWidget(2,
-            QtGui.QFormLayout.LabelRole, self.footerYLabel)
+        self.footerYLabel.setObjectName(u'FooterYLabel')
         self.footerYSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
-        self.footerYSpinBox.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.footerYSpinBox.sizePolicy().hasHeightForWidth())
-        self.footerYSpinBox.setSizePolicy(sizePolicy)
-        self.footerYSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.footerYSpinBox.setMaximum(9999)
-        self.footerYSpinBox.setProperty(u'value', 0)
-        self.footerYSpinBox.setObjectName(u'footerYSpinBox')
-        self.footerPositionLayout.setWidget(2,
-            QtGui.QFormLayout.FieldRole, self.footerYSpinBox)
+        self.footerYSpinBox.setObjectName(u'FooterYSpinBox')
+        self.footerPositionLayout.addRow(self.footerYLabel, self.footerYSpinBox)
         self.footerWidthLabel = QtGui.QLabel(self.footerPositionGroupBox)
-        self.footerWidthLabel.setObjectName(u'footerWidthLabel')
-        self.footerPositionLayout.setWidget(3,
-            QtGui.QFormLayout.LabelRole, self.footerWidthLabel)
+        self.footerWidthLabel.setObjectName(u'FooterWidthLabel')
         self.footerWidthSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
-        self.footerWidthSpinBox.setEnabled(False)
-        self.footerWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.footerWidthSpinBox.setMaximum(9999)
-        self.footerWidthSpinBox.setObjectName(u'footerWidthSpinBox')
-        self.footerPositionLayout.setWidget(3,
-            QtGui.QFormLayout.FieldRole, self.footerWidthSpinBox)
+        self.footerWidthSpinBox.setObjectName(u'FooterWidthSpinBox')
+        self.footerPositionLayout.addRow(self.footerWidthLabel,
+            self.footerWidthSpinBox)
         self.footerHeightLabel = QtGui.QLabel(self.footerPositionGroupBox)
-        self.footerHeightLabel.setObjectName(u'footerHeightLabel')
-        self.footerPositionLayout.setWidget(4,
-            QtGui.QFormLayout.LabelRole, self.footerHeightLabel)
+        self.footerHeightLabel.setObjectName(u'FooterHeightLabel')
         self.footerHeightSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
-        self.footerHeightSpinBox.setEnabled(False)
-        self.footerHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0))
         self.footerHeightSpinBox.setMaximum(9999)
-        self.footerHeightSpinBox.setObjectName(u'footerHeightSpinBox')
-        self.footerPositionLayout.setWidget(4,
-            QtGui.QFormLayout.FieldRole, self.footerHeightSpinBox)
-        self.footerDefaultPositionCheckBox = QtGui.QCheckBox(
-            self.footerPositionGroupBox)
-        self.footerDefaultPositionCheckBox.setChecked(True)
-        self.footerDefaultPositionCheckBox.setObjectName(
-            u'footerDefaultPositionCheckBox')
-        self.footerPositionLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
-            self.footerDefaultPositionCheckBox)
-        self.areaPositionLayout.addWidget(
-            self.footerPositionGroupBox, 1, 1, 1, 1)
+        self.footerHeightSpinBox.setObjectName(u'FooterHeightSpinBox')
+        self.footerPositionLayout.addRow(self.footerHeightLabel,
+            self.footerHeightSpinBox)
+        self.areaPositionLayout.addWidget(self.footerPositionGroupBox)
         ThemeWizard.addPage(self.areaPositionPage)
+        # Preview Page
         self.previewPage = QtGui.QWizardPage()
-        self.previewPage.setObjectName(u'previewPage')
+        self.previewPage.setObjectName(u'PreviewPage')
         self.previewLayout = QtGui.QVBoxLayout(self.previewPage)
-        self.previewLayout.setSpacing(8)
-        self.previewLayout.setMargin(20)
-        self.previewLayout.setObjectName(u'previewLayout')
-        self.themeNameLayout = QtGui.QHBoxLayout()
-        self.themeNameLayout.setSpacing(8)
-        self.themeNameLayout.setObjectName(u'themeNameLayout')
+        self.previewLayout.setObjectName(u'PreviewLayout')
+        self.themeNameLayout = QtGui.QFormLayout()
+        self.themeNameLayout.setObjectName(u'ThemeNameLayout')
         self.themeNameLabel = QtGui.QLabel(self.previewPage)
-        self.themeNameLabel.setMinimumSize(QtCore.QSize(103, 0))
-        self.themeNameLabel.setTextFormat(QtCore.Qt.PlainText)
-        self.themeNameLabel.setAlignment(QtCore.Qt.AlignRight |
-            QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
-        self.themeNameLabel.setObjectName(u'themeNameLabel')
-        self.themeNameLayout.addWidget(self.themeNameLabel)
+        self.themeNameLabel.setObjectName(u'ThemeNameLabel')
         self.themeNameEdit = QtGui.QLineEdit(self.previewPage)
-        self.themeNameEdit.setObjectName(u'themeNameEdit')
-        self.themeNameLayout.addWidget(self.themeNameEdit)
+        self.themeNameEdit.setObjectName(u'ThemeNameEdit')
+        self.themeNameLayout.addRow(self.themeNameLabel, self.themeNameEdit)
         self.previewLayout.addLayout(self.themeNameLayout)
-        self.previewPaneLayout = QtGui.QHBoxLayout()
-        self.previewPaneLayout.setSpacing(0)
-        self.previewPaneLayout.setObjectName(u'previewPaneLayout')
-        self.previewLeftSpacer = QtGui.QSpacerItem(58, 20,
-            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.previewPaneLayout.addItem(self.previewLeftSpacer)
-        self.previewBoxLabel = QtGui.QLabel(self.previewPage)
-        sizePolicy = QtGui.QSizePolicy(
-            QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.previewBoxLabel.sizePolicy().hasHeightForWidth())
-        self.previewBoxLabel.setSizePolicy(sizePolicy)
-        self.previewBoxLabel.setMinimumSize(QtCore.QSize(100, 150))
-        self.previewBoxLabel.setFrameShape(QtGui.QFrame.WinPanel)
-        self.previewBoxLabel.setFrameShadow(QtGui.QFrame.Sunken)
-        self.previewBoxLabel.setLineWidth(1)
-        self.previewBoxLabel.setText(u'')
+        self.previewArea = QtGui.QWidget(self.previewPage)
+        self.previewArea.setObjectName(u'PreviewArea')
+        self.previewAreaLayout = QtGui.QGridLayout(self.previewArea)
+        self.previewAreaLayout.setMargin(0)
+        self.previewAreaLayout.setColumnStretch(0, 1)
+        self.previewAreaLayout.setRowStretch(0, 1)
+        self.previewAreaLayout.setObjectName(u'PreviewAreaLayout')
+        self.previewBoxLabel = QtGui.QLabel(self.previewArea)
+        self.previewBoxLabel.setFrameShape(QtGui.QFrame.Box)
         self.previewBoxLabel.setScaledContents(True)
-        self.previewBoxLabel.setObjectName(u'previewBoxLabel')
-        self.previewPaneLayout.addWidget(self.previewBoxLabel)
-        self.previewRightSpacer = QtGui.QSpacerItem(78, 20,
-            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.previewPaneLayout.addItem(self.previewRightSpacer)
-        self.previewLayout.addLayout(self.previewPaneLayout)
+        self.previewBoxLabel.setObjectName(u'PreviewBoxLabel')
+        self.previewAreaLayout.addWidget(self.previewBoxLabel)
+        self.previewLayout.addWidget(self.previewArea)
         ThemeWizard.addPage(self.previewPage)
-        self.themeNameLabel.setBuddy(self.themeNameEdit)
 
         self.retranslateUi(ThemeWizard)
-        self.backgroundStackedWidget.setCurrentIndex(0)
-        QtCore.QObject.connect(
-            ThemeWizard,
-            QtCore.SIGNAL(u'accepted()'),
-            ThemeWizard.accept)
-        QtCore.QObject.connect(
-            self.backgroundTypeComboBox,
-            QtCore.SIGNAL(u'currentIndexChanged(int)'),
-            self.backgroundStackedWidget.setCurrentIndex)
+        QtCore.QObject.connect(self.backgroundComboBox,
+            QtCore.SIGNAL(u'currentIndexChanged(int)'), self.backgroundStack,
+            QtCore.SLOT(u'setCurrentIndex(int)'))
+        QtCore.QObject.connect(self.outlineCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.outlineColorButton,
+            QtCore.SLOT(u'setEnabled(bool)'))
+        QtCore.QObject.connect(self.outlineCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.outlineSizeSpinBox,
+            QtCore.SLOT(u'setEnabled(bool)'))
+        QtCore.QObject.connect(self.shadowCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.shadowColorButton,
+            QtCore.SLOT(u'setEnabled(bool)'))
+        QtCore.QObject.connect(self.shadowCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.shadowSizeSpinBox,
+            QtCore.SLOT(u'setEnabled(bool)'))
+        QtCore.QObject.connect(self.mainPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.mainXSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.mainPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.mainYSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.mainPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.mainWidthSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.mainPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.mainHeightSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.footerPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.footerXSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.footerPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.footerYSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.footerPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.footerWidthSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
+        QtCore.QObject.connect(self.footerPositionCheckBox,
+            QtCore.SIGNAL(u'toggled(bool)'), self.footerHeightSpinBox,
+            QtCore.SLOT(u'setDisabled(bool)'))
         QtCore.QMetaObject.connectSlotsByName(ThemeWizard)
 
     def retranslateUi(self, ThemeWizard):
@@ -627,20 +428,20 @@
             translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard'))
         self.informationLabel.setText(
             translate('OpenLP.ThemeWizard', 'This wizard will help you to '
-                'create and edit your themes . Click the next button below to '
+                'create and edit your themes. Click the next button below to '
                 'start the process by setting up your background.'))
         self.backgroundPage.setTitle(
             translate('OpenLP.ThemeWizard', 'Set Up Background'))
         self.backgroundPage.setSubTitle(
             translate('OpenLP.ThemeWizard', 'Set up your theme\'s background '
                 'according to the parameters below.'))
-        self.backgroundTypeLabel.setText(
+        self.backgroundLabel.setText(
             translate('OpenLP.ThemeWizard', 'Background type:'))
-        self.backgroundTypeComboBox.setItemText(0,
+        self.backgroundComboBox.setItemText(0,
             translate('OpenLP.ThemeWizard', 'Solid Color'))
-        self.backgroundTypeComboBox.setItemText(1,
+        self.backgroundComboBox.setItemText(1,
             translate('OpenLP.ThemeWizard', 'Gradient'))
-        self.backgroundTypeComboBox.setItemText(2,
+        self.backgroundComboBox.setItemText(2,
             translate('OpenLP.ThemeWizard', 'Image'))
         self.colorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:'))
         self.gradientStartLabel.setText(
@@ -682,9 +483,9 @@
         self.shadowCheckBox.setText(translate('OpenLP.ThemeWizard', '&Shadow:'))
         self.shadowSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:'))
         self.shadowSizeSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'pt'))
-        self.boldCheckBox.setText(
+        self.mainBoldCheckBox.setText(
             translate('OpenLP.ThemeWizard', 'Bold'))
-        self.italicsCheckBox.setText(
+        self.mainItalicsCheckBox.setText(
             translate('OpenLP.ThemeWizard', 'Italic'))
         self.footerAreaPage.setTitle(
             translate('OpenLP.ThemeWizard', 'Footer Area Font Details'))
@@ -716,8 +517,8 @@
             translate('OpenLP.ThemeWizard', 'Middle'))
         self.verticalComboBox.setItemText(2,
             translate('OpenLP.ThemeWizard', 'Bottom'))
-        self.transitionsCheckBox.setText(
-            translate('OpenLP.ThemeWizard', 'Transitions'))
+        self.transitionsLabel.setText(
+            translate('OpenLP.ThemeWizard', 'Transitions:'))
         self.areaPositionPage.setTitle(
             translate('OpenLP.ThemeWizard', 'Output Area Locations'))
         self.areaPositionPage.setSubTitle(
@@ -725,9 +526,9 @@
                 ' main and footer areas.'))
         self.mainPositionGroupBox.setTitle(
             translate('OpenLP.ThemeWizard', '&Main Area'))
-        self.mainDefaultPositionCheckBox.setText(
+        self.mainPositionCheckBox.setText(
             translate('OpenLP.ThemeWizard', '&Use default location'))
-        self.nainXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:'))
+        self.mainXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:'))
         self.mainXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
         self.mainYSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
         self.mainYLabel.setText(translate('OpenLP.ThemeWizard', 'Y position:'))
@@ -737,7 +538,7 @@
         self.mainHeightLabel.setText(
             translate('OpenLP.ThemeWizard', 'Height:'))
         self.footerPositionGroupBox.setTitle(
-            translate('OpenLP.ThemeWizard', 'Footer Area'))
+            translate('OpenLP.ThemeWizard', '&Footer Area'))
         self.footerXLabel.setText(
             translate('OpenLP.ThemeWizard', 'X position:'))
         self.footerXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
@@ -752,7 +553,7 @@
             translate('OpenLP.ThemeWizard', 'Height:'))
         self.footerHeightSpinBox.setSuffix(
             translate('OpenLP.ThemeWizard', 'px'))
-        self.footerDefaultPositionCheckBox.setText(
+        self.footerPositionCheckBox.setText(
             translate('OpenLP.ThemeWizard', 'Use default location'))
         self.previewPage.setTitle(
             translate('OpenLP.ThemeWizard', 'Save and Preview'))
@@ -761,4 +562,19 @@
                 'replacing the current one or change the name to create a '
                 'new theme'))
         self.themeNameLabel.setText(
-            translate('OpenLP.ThemeWizard', 'Theme name:'))
\ No newline at end of file
+            translate('OpenLP.ThemeWizard', 'Theme name:'))
+        # Align all QFormLayouts towards each other.
+        width = max(self.backgroundLabel.minimumSizeHint().width(),
+            self.colorLabel.minimumSizeHint().width())
+        width = max(width, self.gradientStartLabel.minimumSizeHint().width())
+        width = max(width, self.gradientEndLabel.minimumSizeHint().width())
+        width = max(width, self.gradientTypeLabel.minimumSizeHint().width())
+        width = max(width, self.imageLabel.minimumSizeHint().width())
+        self.backgroundTypeSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.colorSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.gradientSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.imageSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)

=== modified file 'openlp/core/utils/languagemanager.py'
--- openlp/core/utils/languagemanager.py	2010-12-26 11:04:47 +0000
+++ openlp/core/utils/languagemanager.py	2010-12-30 12:06:38 +0000
@@ -65,7 +65,7 @@
         """
         trans_dir = QtCore.QDir(AppLocation.get_directory(
             AppLocation.LanguageDir))
-        file_names = trans_dir.entryList(QtCore.QStringList("*.qm"),
+        file_names = trans_dir.entryList(QtCore.QStringList(u'*.qm'),
                 QtCore.QDir.Files, QtCore.QDir.Name)
         for name in file_names:
             file_names.replaceInStrings(name, trans_dir.filePath(name))
@@ -143,4 +143,4 @@
         """
         if not LanguageManager.__qm_list__:
             LanguageManager.init_qm_list()
-        return LanguageManager.__qm_list__
\ No newline at end of file
+        return LanguageManager.__qm_list__

=== modified file 'openlp/plugins/bibles/forms/bibleimportform.py'
--- openlp/plugins/bibles/forms/bibleimportform.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/forms/bibleimportform.py	2010-12-30 12:06:38 +0000
@@ -79,12 +79,12 @@
         QtGui.QWizard.__init__(self, parent)
         self.setupUi(self)
         self.registerFields()
-        if not BibleFormat.get_availability(BibleFormat.OpenLP1):
-            self.openlp1Page.setVisible(False)
-            self.openlp1LocationLabel.setVisible(False)
-            self.openlp1LocationEdit.setVisible(False)
-            self.openlp1FileButton.setVisible(False)
-            self.openlp1DisabledLabel.setVisible(True)
+        if BibleFormat.get_availability(BibleFormat.OpenLP1):
+            self.openlp1DisabledLabel.hide()
+        else:
+            self.openlp1FileLabel.hide()
+            self.openlp1FileEdit.hide()
+            self.openlp1BrowseButton.hide()
         self.finishButton = self.button(QtGui.QWizard.FinishButton)
         self.cancelButton = self.button(QtGui.QWizard.CancelButton)
         self.manager = manager
@@ -92,24 +92,26 @@
         self.manager.set_process_dialog(self)
         self.web_bible_list = {}
         self.loadWebBibles()
-        QtCore.QObject.connect(self.locationComboBox,
+        self.restart()
+        self.selectStack.setCurrentIndex(0)
+        QtCore.QObject.connect(self.webSourceComboBox,
             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)
+            self.onWebSourceComboBoxCurrentIndexChanged)
+        QtCore.QObject.connect(self.osisBrowseButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onOsisBrowseButtonClicked)
+        QtCore.QObject.connect(self.csvBooksButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onBooksBrowseButtonClicked)
+        QtCore.QObject.connect(self.csvVersesButton,
+            QtCore.SIGNAL(u'clicked()'),
+            self.onCsvVersesBrowseButtonClicked)
         QtCore.QObject.connect(self.openSongBrowseButton,
             QtCore.SIGNAL(u'clicked()'),
             self.onOpenSongBrowseButtonClicked)
-        QtCore.QObject.connect(self.openlp1FileButton,
+        QtCore.QObject.connect(self.openlp1BrowseButton,
             QtCore.SIGNAL(u'clicked()'),
-            self.onOpenlp1FileButtonClicked)
+            self.onOpenlp1BrowseButtonClicked)
         QtCore.QObject.connect(self,
             QtCore.SIGNAL(u'currentIdChanged(int)'),
             self.onCurrentIdChanged)
@@ -125,8 +127,8 @@
         """
         Stop the import on cancel button, close button or ESC key.
         """
-        log.debug('Import canceled by user.')
-        if self.currentId() == 3:
+        log.debug(u'Import canceled by user.')
+        if self.currentPage() == self.importPage:
             Receiver.send_message(u'bibles_stop_import')
         self.done(QtGui.QDialog.Rejected)
 
@@ -134,11 +136,9 @@
         """
         Validate the current page before moving on to the next page.
         """
-        if self.currentId() == 0:
-            # Welcome page
+        if self.currentPage() == self.welcomePage:
             return True
-        elif self.currentId() == 1:
-            # Select page
+        elif self.currentPage() == self.selectPage:
             if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS:
                 if not self.field(u'osis_location').toString():
                     QtGui.QMessageBox.critical(self,
@@ -147,7 +147,7 @@
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file to import your '
                         'Bible from.'))
-                    self.OSISLocationEdit.setFocus()
+                    self.osisFileEdit.setFocus()
                     return False
             elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV:
                 if not self.field(u'csv_booksfile').toString():
@@ -157,7 +157,7 @@
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file with books of '
                         'the Bible to use in the import.'))
-                    self.booksLocationEdit.setFocus()
+                    self.csvBooksEdit.setFocus()
                     return False
                 elif not self.field(u'csv_versefile').toString():
                     QtGui.QMessageBox.critical(self,
@@ -166,7 +166,7 @@
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file of Bible '
                         'verses to import.'))
-                    self.csvVerseLocationEdit.setFocus()
+                    self.csvVersesEdit.setFocus()
                     return False
             elif self.field(u'source_format').toInt()[0] == \
                 BibleFormat.OpenSong:
@@ -187,11 +187,10 @@
                         translate('BiblesPlugin.ImportWizardForm',
                         'You need to specify a file to import your '
                         'Bible from.'))
-                    self.openlp1LocationEdit.setFocus()
+                    self.openlp1FileEdit.setFocus()
                     return False
             return True
-        elif self.currentId() == 2:
-            # License details
+        elif self.currentPage() == self.licenseDetailsPage:
             license_version = unicode(self.field(u'license_version').toString())
             license_copyright = \
                 unicode(self.field(u'license_copyright').toString())
@@ -221,11 +220,10 @@
                 self.versionNameEdit.setFocus()
                 return False
             return True
-        if self.currentId() == 3:
-            # Progress page
+        if self.currentPage() == self.importPage:
             return True
 
-    def onLocationComboBoxChanged(self, index):
+    def onWebSourceComboBoxCurrentIndexChanged(self, index):
         """
         Setup the list of Bibles when you select a different source on the web
         download page.
@@ -233,35 +231,34 @@
         ``index``
             The index of the combo box.
         """
-        self.bibleComboBox.clear()
+        self.webTranslationComboBox.clear()
         bibles = self.web_bible_list[index].keys()
         bibles.sort()
-        for bible in bibles:
-            self.bibleComboBox.addItem(bible)
+        self.webTranslationComboBox.addItems(bibles)
 
-    def onOsisFileButtonClicked(self):
+    def onOsisBrowseButtonClicked(self):
         """
         Show the file open dialog for the OSIS file.
         """
         self.getFileName(
             translate('BiblesPlugin.ImportWizardForm', 'Open OSIS File'),
-            self.OSISLocationEdit)
+            self.osisFileEdit)
 
-    def onBooksFileButtonClicked(self):
+    def onBooksBrowseButtonClicked(self):
         """
         Show the file open dialog for the books CSV file.
         """
         self.getFileName(
             translate('BiblesPlugin.ImportWizardForm', 'Open Books CSV File'),
-            self.booksLocationEdit, u'%s (*.csv)'
+            self.csvBooksEdit, u'%s (*.csv)'
             % translate('BiblesPlugin.ImportWizardForm', 'CSV File'))
 
-    def onCsvVersesFileButtonClicked(self):
+    def onCsvVersesBrowseButtonClicked(self):
         """
         Show the file open dialog for the verses CSV file.
         """
         self.getFileName(translate('BiblesPlugin.ImportWizardForm',
-            'Open Verses CSV File'), self.csvVerseLocationEdit, u'%s (*.csv)'
+            'Open Verses CSV File'), self.csvVersesEdit, u'%s (*.csv)'
             % translate('BiblesPlugin.ImportWizardForm', 'CSV File'))
 
     def onOpenSongBrowseButtonClicked(self):
@@ -272,36 +269,35 @@
             translate('BiblesPlugin.ImportWizardForm', 'Open OpenSong Bible'),
             self.openSongFileEdit)
 
-    def onOpenlp1FileButtonClicked(self):
+    def onOpenlp1BrowseButtonClicked(self):
         """
         Show the file open dialog for the openlp.org 1.x file.
         """
         self.getFileName(
             translate('BiblesPlugin.ImportWizardForm',
-            'Open openlp.org 1.x Bible'), self.openlp1LocationEdit,
+            'Open openlp.org 1.x Bible'), self.openlp1FileEdit,
             u'%s (*.bible)' % translate('BiblesPlugin.ImportWizardForm',
             'openlp.org 1.x bible'))
 
     def onCurrentIdChanged(self, pageId):
-        if pageId == 3:
+        if self.page(pageId) == self.importPage:
             self.preImport()
             self.performImport()
             self.postImport()
 
     def registerFields(self):
         self.selectPage.registerField(u'source_format', self.formatComboBox)
-        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'osis_location', self.osisFileEdit)
+        self.selectPage.registerField(u'csv_booksfile', self.csvBooksEdit)
+        self.selectPage.registerField(u'csv_versefile', self.csvVersesEdit)
         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.selectPage.registerField(
-            u'openlp1_location', self.openlp1LocationEdit)
+        self.selectPage.registerField(u'web_location', self.webSourceComboBox)
+        self.selectPage.registerField(u'web_biblename',
+            self.webTranslationComboBox)
+        self.selectPage.registerField(u'proxy_server', self.webServerEdit)
+        self.selectPage.registerField(u'proxy_username', self.webUserEdit)
+        self.selectPage.registerField(u'proxy_password', self.webPasswordEdit)
+        self.selectPage.registerField(u'openlp1_location', self.openlp1FileEdit)
         self.licenseDetailsPage.registerField(
             u'license_version', self.versionNameEdit)
         self.licenseDetailsPage.registerField(
@@ -322,7 +318,7 @@
         self.setField(u'opensong_file', QtCore.QVariant(''))
         self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk))
         self.setField(u'web_biblename',
-            QtCore.QVariant(self.bibleComboBox.currentIndex()))
+            QtCore.QVariant(self.webTranslationComboBox.currentIndex()))
         self.setField(u'proxy_server',
             settings.value(u'proxy address', QtCore.QVariant(u'')))
         self.setField(u'proxy_username',
@@ -336,7 +332,7 @@
             QtCore.QVariant(self.copyrightEdit.text()))
         self.setField(u'license_permissions',
             QtCore.QVariant(self.permissionsEdit.text()))
-        self.onLocationComboBoxChanged(WebDownload.Crosswalk)
+        self.onWebSourceComboBoxCurrentIndexChanged(WebDownload.Crosswalk)
         settings.endGroup()
 
     def loadWebBibles(self):
@@ -491,7 +487,7 @@
             # Import a bible from the web.
             self.importProgressBar.setMaximum(1)
             download_location = self.field(u'web_location').toInt()[0]
-            bible_version = unicode(self.bibleComboBox.currentText())
+            bible_version = unicode(self.webTranslationComboBox.currentText())
             if download_location == WebDownload.Crosswalk:
                 bible = \
                     self.web_bible_list[WebDownload.Crosswalk][bible_version]
@@ -538,4 +534,4 @@
         self.importProgressBar.setValue(self.importProgressBar.maximum())
         self.finishButton.setVisible(True)
         self.cancelButton.setVisible(False)
-        Receiver.send_message(u'openlp_process_events')
\ No newline at end of file
+        Receiver.send_message(u'openlp_process_events')

=== modified file 'openlp/plugins/bibles/forms/bibleimportwizard.py'
--- openlp/plugins/bibles/forms/bibleimportwizard.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/forms/bibleimportwizard.py	2010-12-30 12:06:38 +0000
@@ -31,269 +31,216 @@
 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)
-        # Welcome page
+        # Welcome Page
         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.welcomeLayout.addSpacing(40)
         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)
+        self.welcomeLayout.addStretch()
         bibleImportWizard.addPage(self.welcomePage)
-        # Select page
+        # Select Page
         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.selectPageLayout.setObjectName(u'SelectPageLayout')
+        self.formatLayout = QtGui.QFormLayout()
+        self.formatLayout.setObjectName(u'FormatLayout')
         self.formatLabel = QtGui.QLabel(self.selectPage)
         self.formatLabel.setObjectName(u'FormatLabel')
-        self.formatSelectLayout.addWidget(self.formatLabel)
         self.formatComboBox = QtGui.QComboBox(self.selectPage)
+        self.formatComboBox.addItems([u'', u'', u'', u'', u''])
         self.formatComboBox.setObjectName(u'FormatComboBox')
-        self.formatComboBox.addItem(u'')
-        self.formatComboBox.addItem(u'')
-        self.formatComboBox.addItem(u'')
-        self.formatComboBox.addItem(u'')
-        self.formatComboBox.addItem(u'')
-        self.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')
-        generalIcon = build_icon(u':/general/general_open.png')
-        self.osisPage = QtGui.QWidget()
-        self.osisPage.setObjectName(u'OsisPage')
-        self.osisLayout = QtGui.QFormLayout(self.osisPage)
-        self.osisLayout.setFieldGrowthPolicy(
-            QtGui.QFormLayout.ExpandingFieldsGrow)
+        self.formatLayout.addRow(self.formatLabel, self.formatComboBox)
+        self.formatSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.formatLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.formatSpacer)
+        self.selectPageLayout.addLayout(self.formatLayout)
+        self.selectStack = QtGui.QStackedLayout()
+        self.selectStack.setObjectName(u'SelectStack')
+        self.osisWidget = QtGui.QWidget(self.selectPage)
+        self.osisWidget.setObjectName(u'OsisWidget')
+        self.osisLayout = QtGui.QFormLayout(self.osisWidget)
         self.osisLayout.setMargin(0)
-        self.osisLayout.setSpacing(8)
         self.osisLayout.setObjectName(u'OsisLayout')
-        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))
-        self.osisFileButton.setIcon(generalIcon)
-        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.osisFileLabel = QtGui.QLabel(self.osisWidget)
+        self.osisFileLabel.setObjectName(u'OsisFileLabel')
+        self.osisFileLayout = QtGui.QHBoxLayout()
+        self.osisFileLayout.setObjectName(u'OsisFileLayout')
+        self.osisFileEdit = QtGui.QLineEdit(self.osisWidget)
+        self.osisFileEdit.setObjectName(u'OsisFileEdit')
+        self.osisFileLayout.addWidget(self.osisFileEdit)
+        self.osisBrowseButton = QtGui.QToolButton(self.osisWidget)
+        self.osisBrowseButton.setIcon(build_icon(u':/general/general_open.png'))
+        self.osisBrowseButton.setObjectName(u'OsisBrowseButton')
+        self.osisFileLayout.addWidget(self.osisBrowseButton)
+        self.osisLayout.addRow(self.osisFileLabel, self.osisFileLayout)
+        self.osisSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.osisLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.osisSpacer)
+        self.selectStack.addWidget(self.osisWidget)
+        self.csvWidget = QtGui.QWidget(self.selectPage)
+        self.csvWidget.setObjectName(u'CsvWidget')
+        self.csvLayout = QtGui.QFormLayout(self.csvWidget)
+        self.csvLayout.setMargin(0)
+        self.csvLayout.setObjectName(u'CsvLayout')
+        self.csvBooksLabel = QtGui.QLabel(self.csvWidget)
+        self.csvBooksLabel.setObjectName(u'CsvBooksLabel')
         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(generalIcon)
-        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(generalIcon)
-        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.csvBooksEdit = QtGui.QLineEdit(self.csvWidget)
+        self.csvBooksEdit.setObjectName(u'CsvBooksEdit')
+        self.csvBooksLayout.addWidget(self.csvBooksEdit)
+        self.csvBooksButton = QtGui.QToolButton(self.csvWidget)
+        self.csvBooksButton.setIcon(build_icon(u':/general/general_open.png'))
+        self.csvBooksButton.setObjectName(u'CsvBooksButton')
+        self.csvBooksLayout.addWidget(self.csvBooksButton)
+        self.csvLayout.addRow(self.csvBooksLabel, self.csvBooksLayout)
+        self.csvVersesLabel = QtGui.QLabel(self.csvWidget)
+        self.csvVersesLabel.setObjectName(u'CsvVersesLabel')
+        self.csvVersesLayout = QtGui.QHBoxLayout()
+        self.csvVersesLayout.setObjectName(u'CsvVersesLayout')
+        self.csvVersesEdit = QtGui.QLineEdit(self.csvWidget)
+        self.csvVersesEdit.setObjectName(u'CsvVersesEdit')
+        self.csvVersesLayout.addWidget(self.csvVersesEdit)
+        self.csvVersesButton = QtGui.QToolButton(self.csvWidget)
+        self.csvVersesButton.setIcon(build_icon(u':/general/general_open.png'))
+        self.csvVersesButton.setObjectName(u'CsvVersesButton')
+        self.csvVersesLayout.addWidget(self.csvVersesButton)
+        self.csvLayout.addRow(self.csvVersesLabel, self.csvVersesLayout)
+        self.csvSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.csvLayout.setItem(2, QtGui.QFormLayout.LabelRole, self.csvSpacer)
+        self.selectStack.addWidget(self.csvWidget)
+        self.openSongWidget = QtGui.QWidget(self.selectPage)
+        self.openSongWidget.setObjectName(u'OpenSongWidget')
+        self.openSongLayout = QtGui.QFormLayout(self.openSongWidget)
         self.openSongLayout.setMargin(0)
-        self.openSongLayout.setSpacing(8)
         self.openSongLayout.setObjectName(u'OpenSongLayout')
-        self.openSongFileLabel = QtGui.QLabel(self.openSongPage)
+        self.openSongFileLabel = QtGui.QLabel(self.openSongWidget)
         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 = QtGui.QLineEdit(self.openSongWidget)
         self.openSongFileEdit.setObjectName(u'OpenSongFileEdit')
         self.openSongFileLayout.addWidget(self.openSongFileEdit)
-        self.openSongBrowseButton = QtGui.QToolButton(self.openSongPage)
-        self.openSongBrowseButton.setIcon(generalIcon)
+        self.openSongBrowseButton = QtGui.QToolButton(self.openSongWidget)
+        self.openSongBrowseButton.setIcon(
+            build_icon(u':/general/general_open.png'))
         self.openSongBrowseButton.setObjectName(u'OpenSongBrowseButton')
         self.openSongFileLayout.addWidget(self.openSongBrowseButton)
-        self.openSongLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
+        self.openSongLayout.addRow(self.openSongFileLabel,
             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.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.openlp1Page = QtGui.QWidget()
-        self.openlp1Page.setObjectName(u'Openlp1Page')
-        self.openlp1Layout = QtGui.QFormLayout(self.openlp1Page)
-        self.openlp1Layout.setFieldGrowthPolicy(
-            QtGui.QFormLayout.ExpandingFieldsGrow)
+        self.openSongSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.openSongLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.openSongSpacer)
+        self.selectStack.addWidget(self.openSongWidget)
+        self.webTabWidget = QtGui.QTabWidget(self.selectPage)
+        self.webTabWidget.setObjectName(u'WebTabWidget')
+        self.webBibleTab = QtGui.QWidget()
+        self.webBibleTab.setObjectName(u'WebBibleTab')
+        self.webBibleLayout = QtGui.QFormLayout(self.webBibleTab)
+        self.webBibleLayout.setObjectName(u'WebBibleLayout')
+        self.webSourceLabel = QtGui.QLabel(self.webBibleTab)
+        self.webSourceLabel.setObjectName(u'WebSourceLabel')
+        self.webBibleLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.webSourceLabel)
+        self.webSourceComboBox = QtGui.QComboBox(self.webBibleTab)
+        self.webSourceComboBox.setObjectName(u'WebSourceComboBox')
+        self.webSourceComboBox.addItems([u'', u'', u''])
+        self.webBibleLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.webSourceComboBox)
+        self.webTranslationLabel = QtGui.QLabel(self.webBibleTab)
+        self.webTranslationLabel.setObjectName(u'webTranslationLabel')
+        self.webBibleLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.webTranslationLabel)
+        self.webTranslationComboBox = QtGui.QComboBox(self.webBibleTab)
+        self.webTranslationComboBox.setSizeAdjustPolicy(
+            QtGui.QComboBox.AdjustToContents)
+        self.webTranslationComboBox.setObjectName(u'WebTranslationComboBox')
+        self.webBibleLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
+            self.webTranslationComboBox)
+        self.webTabWidget.addTab(self.webBibleTab, u'')
+        self.webProxyTab = QtGui.QWidget()
+        self.webProxyTab.setObjectName(u'WebProxyTab')
+        self.webProxyLayout = QtGui.QFormLayout(self.webProxyTab)
+        self.webProxyLayout.setObjectName(u'WebProxyLayout')
+        self.webServerLabel = QtGui.QLabel(self.webProxyTab)
+        self.webServerLabel.setObjectName(u'WebServerLabel')
+        self.webProxyLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
+            self.webServerLabel)
+        self.webServerEdit = QtGui.QLineEdit(self.webProxyTab)
+        self.webServerEdit.setObjectName(u'WebServerEdit')
+        self.webProxyLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
+            self.webServerEdit)
+        self.webUserLabel = QtGui.QLabel(self.webProxyTab)
+        self.webUserLabel.setObjectName(u'WebUserLabel')
+        self.webProxyLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
+            self.webUserLabel)
+        self.webUserEdit = QtGui.QLineEdit(self.webProxyTab)
+        self.webUserEdit.setObjectName(u'WebUserEdit')
+        self.webProxyLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
+            self.webUserEdit)
+        self.webPasswordLabel = QtGui.QLabel(self.webProxyTab)
+        self.webPasswordLabel.setObjectName(u'WebPasswordLabel')
+        self.webProxyLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
+            self.webPasswordLabel)
+        self.webPasswordEdit = QtGui.QLineEdit(self.webProxyTab)
+        self.webPasswordEdit.setObjectName(u'WebPasswordEdit')
+        self.webProxyLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
+            self.webPasswordEdit)
+        self.webTabWidget.addTab(self.webProxyTab, u'')
+        self.selectStack.addWidget(self.webTabWidget)
+        self.openlp1Widget = QtGui.QWidget(self.selectPage)
+        self.openlp1Widget.setObjectName(u'Openlp1Widget')
+        self.openlp1Layout = QtGui.QFormLayout(self.openlp1Widget)
         self.openlp1Layout.setMargin(0)
-        self.openlp1Layout.setSpacing(8)
         self.openlp1Layout.setObjectName(u'Openlp1Layout')
-        self.openlp1LocationLabel = QtGui.QLabel(self.openlp1Page)
-        self.openlp1LocationLabel.setObjectName(u'Openlp1LocationLabel')
-        self.openlp1Layout.setWidget(1, QtGui.QFormLayout.LabelRole,
-            self.openlp1LocationLabel)
-        self.openlp1LocationLayout = QtGui.QHBoxLayout()
-        self.openlp1LocationLayout.setSpacing(8)
-        self.openlp1LocationLayout.setObjectName(u'Openlp1LocationLayout')
-        self.openlp1LocationEdit = QtGui.QLineEdit(self.openlp1Page)
-        self.openlp1LocationEdit.setObjectName(u'Openlp1LocationEdit')
-        self.openlp1LocationLayout.addWidget(self.openlp1LocationEdit)
-        self.openlp1FileButton = QtGui.QToolButton(self.openlp1Page)
-        self.openlp1FileButton.setMaximumSize(QtCore.QSize(32, 16777215))
-        self.openlp1FileButton.setIcon(generalIcon)
-        self.openlp1FileButton.setObjectName(u'Openlp1FileButton')
-        self.openlp1LocationLayout.addWidget(self.openlp1FileButton)
-        self.openlp1Layout.setLayout(1, QtGui.QFormLayout.FieldRole,
-            self.openlp1LocationLayout)
-        self.openlp1DisabledLabel = QtGui.QLabel(self.openlp1Page)
-        self.openlp1DisabledLabel.setObjectName(u'openlp1DisabledLabel')
-        self.openlp1DisabledLabel.setVisible(False)
+        self.openlp1FileLabel = QtGui.QLabel(self.openlp1Widget)
+        self.openlp1FileLabel.setObjectName(u'Openlp1FileLabel')
+        self.openlp1FileLayout = QtGui.QHBoxLayout()
+        self.openlp1FileLayout.setObjectName(u'Openlp1FileLayout')
+        self.openlp1FileEdit = QtGui.QLineEdit(self.openlp1Widget)
+        self.openlp1FileEdit.setObjectName(u'Openlp1FileEdit')
+        self.openlp1FileLayout.addWidget(self.openlp1FileEdit)
+        self.openlp1BrowseButton = QtGui.QToolButton(self.openlp1Widget)
+        self.openlp1BrowseButton.setIcon(
+            build_icon(u':/general/general_open.png'))
+        self.openlp1BrowseButton.setObjectName(u'Openlp1BrowseButton')
+        self.openlp1FileLayout.addWidget(self.openlp1BrowseButton)
+        self.openlp1Layout.addRow(self.openlp1FileLabel, self.openlp1FileLayout)
+        self.openlp1DisabledLabel = QtGui.QLabel(self.openlp1Widget)
         self.openlp1DisabledLabel.setWordWrap(True)
-        self.openlp1Layout.addWidget(self.openlp1DisabledLabel)
-        self.formatWidget.addWidget(self.openlp1Page)
-        self.selectPageLayout.addWidget(self.formatWidget)
+        self.openlp1DisabledLabel.setObjectName(u'Openlp1DisabledLabel')
+        self.openlp1Layout.addRow(self.openlp1DisabledLabel)
+        self.openlp1Spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.openlp1Layout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.openlp1Spacer)
+        self.selectStack.addWidget(self.openlp1Widget) 
+        self.selectPageLayout.addLayout(self.selectStack)
         bibleImportWizard.addPage(self.selectPage)
-        # License page
+        # License Page
         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')
@@ -320,29 +267,24 @@
         self.licenseDetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
             self.permissionsEdit)
         bibleImportWizard.addPage(self.licenseDetailsPage)
-        # Progress page
+        # Progress Page
         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.setMargin(48)
         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.setValue(0)
         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.QMetaObject.connectSlotsByName(bibleImportWizard)
         QtCore.QObject.connect(self.formatComboBox,
-            QtCore.SIGNAL(u'currentIndexChanged(int)'),
-            self.formatWidget.setCurrentIndex)
-        QtCore.QMetaObject.connectSlotsByName(bibleImportWizard)
+            QtCore.SIGNAL(u'currentIndexChanged(int)'), self.selectStack,
+            QtCore.SLOT(u'setCurrentIndex(int)'))
 
     def retranslateUi(self, bibleImportWizard):
         bibleImportWizard.setWindowTitle(
@@ -373,37 +315,37 @@
             translate('BiblesPlugin.ImportWizardForm', 'Web Download'))
         self.formatComboBox.setItemText(4,
             translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x'))
-        self.openlp1LocationLabel.setText(
-            translate('BiblesPlugin.ImportWizardForm', 'File location:'))
-        self.osisLocationLabel.setText(
-            translate('BiblesPlugin.ImportWizardForm', 'File location:'))
-        self.booksLocationLabel.setText(
+        self.openlp1FileLabel.setText(
+            translate('BiblesPlugin.ImportWizardForm', 'File location:'))
+        self.osisFileLabel.setText(
+            translate('BiblesPlugin.ImportWizardForm', 'File location:'))
+        self.csvBooksLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Books location:'))
-        self.verseLocationLabel.setText(
+        self.csvVersesLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Verse location:'))
         self.openSongFileLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Bible filename:'))
-        self.locationLabel.setText(
+        self.webSourceLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Location:'))
-        self.locationComboBox.setItemText(0,
+        self.webSourceComboBox.setItemText(0,
             translate('BiblesPlugin.ImportWizardForm', 'Crosswalk'))
-        self.locationComboBox.setItemText(1,
+        self.webSourceComboBox.setItemText(1,
             translate('BiblesPlugin.ImportWizardForm', 'BibleGateway'))
-        self.locationComboBox.setItemText(2,
+        self.webSourceComboBox.setItemText(2,
             translate('BiblesPlugin.ImportWizardForm', 'Bibleserver'))
-        self.bibleLabel.setText(
+        self.webTranslationLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Bible:'))
-        self.webDownloadTabWidget.setTabText(
-            self.webDownloadTabWidget.indexOf(self.downloadOptionsTab),
+        self.webTabWidget.setTabText(
+            self.webTabWidget.indexOf(self.webBibleTab),
             translate('BiblesPlugin.ImportWizardForm', 'Download Options'))
-        self.addressLabel.setText(
+        self.webServerLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Server:'))
-        self.usernameLabel.setText(
+        self.webUserLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Username:'))
-        self.passwordLabel.setText(
+        self.webPasswordLabel.setText(
             translate('BiblesPlugin.ImportWizardForm', 'Password:'))
-        self.webDownloadTabWidget.setTabText(
-            self.webDownloadTabWidget.indexOf(self.proxyServerTab),
+        self.webTabWidget.setTabText(
+            self.webTabWidget.indexOf(self.webProxyTab),
             translate('BiblesPlugin.ImportWizardForm',
             'Proxy Server (Optional)'))
         self.licenseDetailsPage.setTitle(
@@ -429,4 +371,21 @@
             translate('BiblesPlugin.ImportWizardForm', 'The openlp.org 1.x '
             'importer has been disabled due to a missing Python module. If '
             'you want to use this importer, you will need to install the '
-            '"python-sqlite" module.'))
\ No newline at end of file
+            '"python-sqlite" module.'))
+        # Align all QFormLayouts towards each other.
+        width = max(self.formatLabel.minimumSizeHint().width(),
+            self.osisFileLabel.minimumSizeHint().width())
+        width = max(width, self.csvBooksLabel.minimumSizeHint().width())
+        width = max(width, self.csvVersesLabel.minimumSizeHint().width())
+        width = max(width, self.openSongFileLabel.minimumSizeHint().width())
+        width = max(width, self.openlp1FileLabel.minimumSizeHint().width())
+        self.formatSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.osisSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.csvSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.openSongSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.openlp1Spacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)

=== modified file 'openlp/plugins/bibles/lib/__init__.py'
--- openlp/plugins/bibles/lib/__init__.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/__init__.py	2010-12-30 12:06:38 +0000
@@ -77,9 +77,9 @@
     - After a verse reference all further single values are treat as verse in
       the last selected chapter.
         ``John 3:16-18`` refers to John chapter 3 verses 16 to 18
-    - After a list separator it is possible to refer to additional verses. They
-      are build analog to the first ones. This way it is possible to define each
-      number of verse references. It is not possible to refer to verses in
+    - After a list separator it is possible to refer to additional verses.  They
+      are build analog to the first ones.  This way it is possible to define
+      each number of verse references.  It is not possible to refer to verses in
       additional books.
         ``John 3:16,18`` refers to John chapter 3 verses 16 and 18
         ``John 3:16-18,20`` refers to John chapter 3 verses 16 to 18 and 20
@@ -96,7 +96,7 @@
         a verse separator.
     2. ``(?P<from_verse>[0-9]+)``
         The verse reference ``from_verse`` is manditory
-    3.  ``(?P<range_to>%(sep_r)s(?:`` ...  ``|%(sep_e)s)?)?``
+    3.  ``(?P<range_to>%(sep_r)s(?:`` ... ``|%(sep_e)s)?)?``
         A ``range_to`` declaration is optional. It starts with a range separator
         and contains optional a chapter and verse declaration or a end
         separator.
@@ -105,15 +105,15 @@
     5. ``(?P<to_verse>[0-9]+)``
         The ``to_verse`` reference is equivalent to group 2.
 
-    The full reference is matched against get_reference_match(u'full'). This
+    The full reference is matched against get_reference_match(u'full').  This
     regular expression looks like this:
 
     1. ``^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*``
-        The ``book`` group starts with the first non-whitespace character. There
+        The ``book`` group starts with the first non-whitespace character.  There
         are optional leading digits followed by non-digits. The group ends
         before the whitspace in front of the next digit.
     2. ``(?P<ranges>(?:`` + range_string + ``(?:%(sep_l)s|(?=\s*$)))+)\s*$``
-        The second group contains all ``ranges``. This can be multiple
+        The second group contains all ``ranges``.  This can be multiple
         declarations of a range_string separated by a list separator.
 
     The reference list is a list of tuples, with each tuple structured like
@@ -126,7 +126,7 @@
 
     Returns None or a reference list.
     """
-    log.debug('parse_reference("%s")', reference)
+    log.debug(u'parse_reference("%s")', reference)
     match = get_reference_match(u'full').match(reference)
     if match:
         log.debug(u'Matched reference %s' % reference)
@@ -194,7 +194,7 @@
 
 class SearchResults(object):
     """
-    Encapsulate a set of search results. This is Bible-type independent.
+    Encapsulate a set of search results.  This is Bible-type independent.
     """
     def __init__(self, book, chapter, verselist):
         """
@@ -222,4 +222,4 @@
 
 from manager import BibleManager
 from biblestab import BiblesTab
-from mediaitem import BibleMediaItem
\ No newline at end of file
+from mediaitem import BibleMediaItem

=== modified file 'openlp/plugins/bibles/lib/csvbible.py'
--- openlp/plugins/bibles/lib/csvbible.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/csvbible.py	2010-12-30 12:06:38 +0000
@@ -72,7 +72,7 @@
                 self.create_book(unicode(line[1], details['encoding']),
                     line[2], int(line[0]))
                 Receiver.send_message(u'openlp_process_events')
-        except IOError:
+        except IOError, IndexError:
             log.exception(u'Loading books from file failed')
             success = False
         finally:
@@ -86,7 +86,8 @@
             verse_file.seek(0)
             verse_reader = csv.reader(verse_file, dialect)
             for line in verse_reader:
-                if self.stop_import_flag:  # cancel pressed
+                if self.stop_import_flag:
+                    # cancel pressed
                     break
                 details = chardet.detect(line[3])
                 if book_ptr != line[0]:
@@ -109,4 +110,4 @@
         if self.stop_import_flag:
             return False
         else:
-            return success
\ No newline at end of file
+            return success

=== modified file 'openlp/plugins/bibles/lib/db.py'
--- openlp/plugins/bibles/lib/db.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/db.py	2010-12-30 12:06:38 +0000
@@ -166,7 +166,7 @@
         """
         Stops the import of the Bible.
         """
-        log.debug('Stopping import')
+        log.debug(u'Stopping import')
         self.stop_import_flag = True
 
     def get_name(self):
@@ -430,9 +430,9 @@
         Utility debugging method to dump the contents of a bible.
         """
         log.debug(u'.........Dumping Bible Database')
-        log.debug('...............................Books ')
+        log.debug(u'...............................Books ')
         books = self.session.query(Book).all()
         log.debug(books)
         log.debug(u'...............................Verses ')
         verses = self.session.query(Verse).all()
-        log.debug(verses)
\ No newline at end of file
+        log.debug(verses)

=== modified file 'openlp/plugins/bibles/lib/http.py'
--- openlp/plugins/bibles/lib/http.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/http.py	2010-12-30 12:06:38 +0000
@@ -447,7 +447,7 @@
                 [(u'Genesis', 1, 1, 1), (u'Genesis', 2, 2, 3)]
         """
         for reference in reference_list:
-            log.debug('Reference: %s', reference)
+            log.debug(u'Reference: %s', reference)
             book = reference[0]
             db_book = self.get_book(book)
             if not db_book:
@@ -522,4 +522,4 @@
         ``chapter``
             The chapter whose verses are being counted.
         """
-        return HTTPBooks.get_verse_count(book, chapter)
\ No newline at end of file
+        return HTTPBooks.get_verse_count(book, chapter)

=== modified file 'openlp/plugins/bibles/lib/opensong.py'
--- openlp/plugins/bibles/lib/opensong.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/opensong.py	2010-12-30 12:06:38 +0000
@@ -88,7 +88,7 @@
                         translate('BiblesPlugin.Opensong', 'Importing'),
                         db_book.name, chapter.attrib[u'n']))
                     self.session.commit()
-        except IOError:
+        except IOError, AttributeError:
             log.exception(u'Loading bible from OpenSong file failed')
             success = False
         finally:

=== modified file 'openlp/plugins/bibles/lib/osis.py'
--- openlp/plugins/bibles/lib/osis.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/osis.py	2010-12-30 12:06:38 +0000
@@ -125,7 +125,7 @@
                     verse = int(match.group(3))
                     verse_text = match.group(4)
                     if not db_book or db_book.name != self.books[book][0]:
-                        log.debug('New book: "%s"', self.books[book][0])
+                        log.debug(u'New book: "%s"', self.books[book][0])
                         if book == u'Matt':
                             testament += 1
                         db_book = self.create_book(
@@ -180,4 +180,4 @@
         if self.stop_import_flag:
             return False
         else:
-            return success
\ No newline at end of file
+            return success

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2010-12-29 09:27:13 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2010-12-30 12:06:38 +0000
@@ -30,7 +30,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
-    ItemCapabilities, SettingsManager, translate, check_item_selected,  \
+    ItemCapabilities, SettingsManager, translate, check_item_selected, \
     context_menu_action
 
 log = logging.getLogger(__name__)

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/media/mediaplugin.py	2010-12-30 12:06:38 +0000
@@ -65,7 +65,7 @@
     def _addToList(self, list, value, mimetype):
         # Is it a media type
         if len(value) == 2:
-            extensions =  mimetypes.guess_all_extensions(unicode(mimetype))
+            extensions = mimetypes.guess_all_extensions(unicode(mimetype))
             # we have an extension
             if extensions:
                 for extension in extensions:
@@ -142,4 +142,4 @@
             u'title': translate('MediaPlugin', 'Service'),
             u'tooltip': translate('MediaPlugin',
                 'Add the selected Media to the service')
-        }
\ No newline at end of file
+        }

=== modified file 'openlp/plugins/presentations/lib/messagelistener.py'
--- openlp/plugins/presentations/lib/messagelistener.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/presentations/lib/messagelistener.py	2010-12-30 12:06:38 +0000
@@ -90,7 +90,7 @@
         """
         Go to a specific slide
         """
-        log.debug(u'Live = %s, slide' %  self.is_live)
+        log.debug(u'Live = %s, slide' % self.is_live)
         if not self.is_live:
             return
         if self.doc.is_blank():
@@ -249,7 +249,7 @@
         self.timer = QtCore.QTimer()
         self.timer.setInterval(500)
         QtCore.QObject.connect(
-            self.timer, QtCore.SIGNAL("timeout()"), self.timeout)
+            self.timer, QtCore.SIGNAL(u'timeout()'), self.timeout)
 
     def startup(self, message):
         """
@@ -367,4 +367,4 @@
         to check which slide is currently displayed so the slidecontroller
         view can be updated
         """
-        self.live_handler.poll()
\ No newline at end of file
+        self.live_handler.poll()

=== modified file 'openlp/plugins/songs/forms/songimportform.py'
--- openlp/plugins/songs/forms/songimportform.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/forms/songimportform.py	2010-12-30 12:06:38 +0000
@@ -133,8 +133,8 @@
         """
         Stop the import on cancel button, close button or ESC key.
         """
-        log.debug('Import canceled by user.')
-        if self.currentId() == 2:
+        log.debug(u'Import canceled by user.')
+        if self.currentPage() == self.importPage:
             Receiver.send_message(u'songs_stop_import')
         self.done(QtGui.QDialog.Rejected)
 
@@ -142,11 +142,9 @@
         """
         Validate the current page before moving on to the next page.
         """
-        if self.currentId() == 0:
-            # Welcome page
+        if self.currentPage() == self.welcomePage:
             return True
-        elif self.currentId() == 1:
-            # Select page
+        elif self.currentPage() == self.sourcePage:
             source_format = self.formatComboBox.currentIndex()
             if source_format == SongFormat.OpenLP2:
                 if self.openLP2FilenameEdit.text().isEmpty():
@@ -250,8 +248,7 @@
                     self.songBeamerAddButton.setFocus()
                     return False
             return True
-        elif self.currentId() == 2:
-            # Progress page
+        elif self.currentPage() == self.importPage:
             return True
 
     def getFileName(self, title, editbox, filters=u''):
@@ -275,8 +272,8 @@
         filters += u'%s (*)' % translate('SongsPlugin.ImportWizardForm',
             'All Files')
         filename = QtGui.QFileDialog.getOpenFileName(self, title,
-            os.path.dirname(SettingsManager.get_last_dir(
-            self.plugin.settingsSection, 1)), filters)
+            SettingsManager.get_last_dir(self.plugin.settingsSection, 1),
+            filters)
         if filename:
             editbox.setText(filename)
             SettingsManager.set_last_dir(self.plugin.settingsSection,
@@ -303,8 +300,8 @@
         filters += u'%s (*)' % translate('SongsPlugin.ImportWizardForm',
             'All Files')
         filenames = QtGui.QFileDialog.getOpenFileNames(self, title,
-            os.path.dirname(SettingsManager.get_last_dir(
-            self.plugin.settingsSection, 1)), filters)
+            SettingsManager.get_last_dir(self.plugin.settingsSection, 1),
+            filters)
         if filenames:
             listbox.addItems(filenames)
             SettingsManager.set_last_dir(
@@ -423,7 +420,7 @@
         self.removeSelectedItems(self.songBeamerFileListWidget)
 
     def onCurrentIdChanged(self, id):
-        if id == 2:
+        if self.page(id) == self.importPage:
             self.preImport()
             self.performImport()
             self.postImport()
@@ -540,4 +537,4 @@
         self.importProgressBar.setValue(self.importProgressBar.maximum())
         self.finishButton.setVisible(True)
         self.cancelButton.setVisible(False)
-        Receiver.send_message(u'openlp_process_events')
\ No newline at end of file
+        Receiver.send_message(u'openlp_process_events')

=== modified file 'openlp/plugins/songs/forms/songimportwizard.py'
--- openlp/plugins/songs/forms/songimportwizard.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/forms/songimportwizard.py	2010-12-30 12:06:38 +0000
@@ -33,68 +33,48 @@
         self.openIcon = build_icon(u':/general/general_open.png')
         self.deleteIcon = build_icon(u':/general/general_delete.png')
         songImportWizard.setObjectName(u'songImportWizard')
-        songImportWizard.resize(550, 386)
         songImportWizard.setModal(True)
         songImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle)
         songImportWizard.setOptions(
             QtGui.QWizard.IndependentPages |
             QtGui.QWizard.NoBackButtonOnStartPage |
             QtGui.QWizard.NoBackButtonOnLastPage)
+        # Welcome Page 
         self.welcomePage = QtGui.QWizardPage()
-        self.welcomePage.setObjectName(u'welcomePage')
         self.welcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
             QtGui.QPixmap(u':/wizards/wizard_importsong.bmp'))
-        self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage)
-        self.welcomeLayout.setSpacing(8)
-        self.welcomeLayout.setMargin(0)
-        self.welcomeLayout.setObjectName(u'welcomeLayout')
-        self.welcomeTextLayout = QtGui.QVBoxLayout()
-        self.welcomeTextLayout.setSpacing(8)
-        self.welcomeTextLayout.setObjectName(u'welcomeTextLayout')
+        self.welcomePage.setObjectName(u'WelcomePage')
+        self.welcomeLayout = QtGui.QVBoxLayout(self.welcomePage)
+        self.welcomeLayout.setObjectName(u'WelcomeLayout')
         self.titleLabel = QtGui.QLabel(self.welcomePage)
         self.titleLabel.setObjectName(u'TitleLabel')
-        self.welcomeTextLayout.addWidget(self.titleLabel)
-        self.welcomeTopSpacer = QtGui.QSpacerItem(20, 40,
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        self.welcomeTextLayout.addItem(self.welcomeTopSpacer)
+        self.welcomeLayout.addWidget(self.titleLabel)
+        self.welcomeLayout.addSpacing(40)
         self.informationLabel = QtGui.QLabel(self.welcomePage)
         self.informationLabel.setWordWrap(True)
-        self.informationLabel.setMargin(10)
         self.informationLabel.setObjectName(u'InformationLabel')
-        self.welcomeTextLayout.addWidget(self.informationLabel)
-        self.welcomeBottomSpacer = QtGui.QSpacerItem(20, 40,
-            QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.welcomeTextLayout.addItem(self.welcomeBottomSpacer)
-        self.welcomeLayout.addLayout(self.welcomeTextLayout)
+        self.welcomeLayout.addWidget(self.informationLabel)
+        self.welcomeLayout.addStretch()
         songImportWizard.addPage(self.welcomePage)
+        # Source Page
         self.sourcePage = QtGui.QWizardPage()
         self.sourcePage.setObjectName(u'SourcePage')
         self.sourceLayout = QtGui.QVBoxLayout(self.sourcePage)
-        self.sourceLayout.setSpacing(8)
-        self.sourceLayout.setMargin(20)
         self.sourceLayout.setObjectName(u'SourceLayout')
-        self.formatLayout = QtGui.QHBoxLayout()
-        self.formatLayout.setSpacing(8)
+        self.formatLayout = QtGui.QFormLayout()
         self.formatLayout.setObjectName(u'FormatLayout')
         self.formatLabel = QtGui.QLabel(self.sourcePage)
         self.formatLabel.setObjectName(u'FormatLabel')
-        self.formatLayout.addWidget(self.formatLabel)
         self.formatComboBox = QtGui.QComboBox(self.sourcePage)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
-            QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.formatComboBox.sizePolicy().hasHeightForWidth())
-        self.formatComboBox.setSizePolicy(sizePolicy)
-        self.formatComboBox.setObjectName(u'formatComboBox')
-        self.formatLayout.addWidget(self.formatComboBox)
-        self.formatSpacer = QtGui.QSpacerItem(40, 20,
-            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.formatLayout.addItem(self.formatSpacer)
+        self.formatComboBox.setObjectName(u'FormatComboBox')
+        self.formatLayout.addRow(self.formatLabel, self.formatComboBox)
+        self.formatSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        self.formatLayout.setItem(1, QtGui.QFormLayout.LabelRole,
+            self.formatSpacer)
         self.sourceLayout.addLayout(self.formatLayout)
-        self.formatStackedWidget = QtGui.QStackedWidget(self.sourcePage)
-        self.formatStackedWidget.setObjectName(u'FormatStackedWidget')
+        self.formatStack = QtGui.QStackedLayout()
+        self.formatStack.setObjectName(u'FormatStack')
         # OpenLP 2.0
         self.addSingleFileSelectItem(u'openLP2')
         # openlp.org 1.x
@@ -120,28 +100,26 @@
         self.addMultiFileSelectItem(u'songBeamer')
 #        Commented out for future use.
 #        self.addSingleFileSelectItem(u'csv', u'CSV')
-        self.sourceLayout.addWidget(self.formatStackedWidget)
+        self.sourceLayout.addLayout(self.formatStack)
         songImportWizard.addPage(self.sourcePage)
+        # Import Page
         self.importPage = QtGui.QWizardPage()
-        self.importPage.setObjectName(u'importPage')
+        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.importLayout.setMargin(48)
+        self.importLayout.setObjectName(u'ImportLayout')
         self.importProgressLabel = QtGui.QLabel(self.importPage)
-        self.importProgressLabel.setObjectName(u'importProgressLabel')
+        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.importProgressBar.setObjectName(u'ImportProgressBar')
         self.importLayout.addWidget(self.importProgressBar)
         songImportWizard.addPage(self.importPage)
         self.retranslateUi(songImportWizard)
-        self.formatStackedWidget.setCurrentIndex(0)
+        self.formatStack.setCurrentIndex(0)
         QtCore.QObject.connect(self.formatComboBox,
             QtCore.SIGNAL(u'currentIndexChanged(int)'),
-            self.formatStackedWidget.setCurrentIndex)
+            self.formatStack.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(songImportWizard)
 
     def retranslateUi(self, songImportWizard):
@@ -257,6 +235,19 @@
             translate('SongsPlugin.ImportWizardForm', 'Ready.'))
         self.importProgressBar.setFormat(
             translate('SongsPlugin.ImportWizardForm', '%p%'))
+        # Align all QFormLayouts towards each other.
+        width = max(self.formatLabel.minimumSizeHint().width(),
+            self.openLP2FilenameLabel.minimumSizeHint().width())
+        self.formatSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+        self.openLP2FormLabelSpacer.changeSize(width, 0,
+            QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.openLP1FormLabelSpacer.changeSize(width, 0,
+            QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.ewFormLabelSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Fixed)
+#        self.csvFormLabelSpacer.changeSize(width, 0, QtGui.QSizePolicy.Fixed,
+#            QtGui.QSizePolicy.Fixed)
 
     def addSingleFileSelectItem(self, prefix, obj_prefix=None,
         can_disable=False):
@@ -270,16 +261,13 @@
             importWidget = page
         importLayout = QtGui.QFormLayout(importWidget)
         importLayout.setMargin(0)
-        importLayout.setSpacing(8)
         if can_disable:
             importLayout.setObjectName(obj_prefix + u'ImportLayout')
         else:
             importLayout.setObjectName(obj_prefix + u'Layout')
         filenameLabel = QtGui.QLabel(importWidget)
         filenameLabel.setObjectName(obj_prefix + u'FilenameLabel')
-        importLayout.setWidget(0, QtGui.QFormLayout.LabelRole, filenameLabel)
         fileLayout = QtGui.QHBoxLayout()
-        fileLayout.setSpacing(8)
         fileLayout.setObjectName(obj_prefix + u'FileLayout')
         filenameEdit = QtGui.QLineEdit(importWidget)
         filenameEdit.setObjectName(obj_prefix + u'FilenameEdit')
@@ -288,10 +276,14 @@
         browseButton.setIcon(self.openIcon)
         browseButton.setObjectName(obj_prefix + u'BrowseButton')
         fileLayout.addWidget(browseButton)
-        importLayout.setLayout(0, QtGui.QFormLayout.FieldRole, fileLayout)
-        self.formatStackedWidget.addWidget(page)
+        importLayout.addRow(filenameLabel, fileLayout)
+        formSpacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed,
+            QtGui.QSizePolicy.Minimum)
+        importLayout.setItem(1, QtGui.QFormLayout.LabelRole, formSpacer)
+        self.formatStack.addWidget(page)
         setattr(self, prefix + u'Page', page)
         setattr(self, prefix + u'FilenameLabel', filenameLabel)
+        setattr(self, prefix + u'FormLabelSpacer', formSpacer)
         setattr(self, prefix + u'FileLayout', fileLayout)
         setattr(self, prefix + u'FilenameEdit', filenameEdit)
         setattr(self, prefix + u'BrowseButton', browseButton)
@@ -313,7 +305,6 @@
             importWidget = page
         importLayout = QtGui.QVBoxLayout(importWidget)
         importLayout.setMargin(0)
-        importLayout.setSpacing(8)
         if can_disable:
             importLayout.setObjectName(obj_prefix + u'ImportLayout')
         else:
@@ -324,25 +315,21 @@
         fileListWidget.setObjectName(obj_prefix + u'FileListWidget')
         importLayout.addWidget(fileListWidget)
         buttonLayout = QtGui.QHBoxLayout()
-        buttonLayout.setSpacing(8)
         buttonLayout.setObjectName(obj_prefix + u'ButtonLayout')
         addButton = QtGui.QPushButton(importWidget)
         addButton.setIcon(self.openIcon)
         addButton.setObjectName(obj_prefix + u'AddButton')
         buttonLayout.addWidget(addButton)
-        buttonSpacer = QtGui.QSpacerItem(40, 20,
-            QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        buttonLayout.addItem(buttonSpacer)
+        buttonLayout.addStretch()
         removeButton = QtGui.QPushButton(importWidget)
         removeButton.setIcon(self.deleteIcon)
         removeButton.setObjectName(obj_prefix + u'RemoveButton')
         buttonLayout.addWidget(removeButton)
         importLayout.addLayout(buttonLayout)
-        self.formatStackedWidget.addWidget(page)
+        self.formatStack.addWidget(page)
         setattr(self, prefix + u'Page', page)
         setattr(self, prefix + u'FileListWidget', fileListWidget)
         setattr(self, prefix + u'ButtonLayout', buttonLayout)
-        setattr(self, prefix + u'ButtonSpacer', buttonSpacer)
         setattr(self, prefix + u'AddButton', addButton)
         setattr(self, prefix + u'RemoveButton', removeButton)
         if can_disable:
@@ -361,7 +348,6 @@
         disabledWidget.setObjectName(obj_prefix + u'DisabledWidget')
         disabledLayout = QtGui.QVBoxLayout(disabledWidget)
         disabledLayout.setMargin(0)
-        disabledLayout.setSpacing(8)
         disabledLayout.setObjectName(obj_prefix + u'DisabledLayout')
         disabledLabel = QtGui.QLabel(disabledWidget)
         disabledLabel.setWordWrap(True)
@@ -376,4 +362,4 @@
         setattr(self, prefix + u'DisabledLayout', disabledLayout)
         setattr(self, prefix + u'DisabledLabel', disabledLabel)
         setattr(self, prefix + u'ImportWidget', importWidget)
-        return importWidget
\ No newline at end of file
+        return importWidget

=== modified file 'openlp/plugins/songs/lib/cclifileimport.py'
--- openlp/plugins/songs/lib/cclifileimport.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/lib/cclifileimport.py	2010-12-30 12:06:38 +0000
@@ -86,11 +86,11 @@
                 infile = codecs.open(filename, u'r', details['encoding'])
                 lines = infile.readlines()
                 ext = os.path.splitext(filename)[1]
-                if ext.lower() == ".usr":
+                if ext.lower() == u'.usr':
                     log.info(u'SongSelect .usr format file found %s: ',
                         filename)
                     self.do_import_usr_file(lines)
-                elif ext.lower() == ".txt":
+                elif ext.lower() == u'.txt':
                     log.info(u'SongSelect .txt format file found %s: ',
                         filename)
                     self.do_import_txt_file(lines)
@@ -124,7 +124,7 @@
         ``Title=``
             Contains the song title (e.g. *Title=Above All*)
         ``Author=``
-            Contains a | delimited list of the  song authors
+            Contains a | delimited list of the song authors
             e.g. *Author=LeBlanc, Lenny | Baloche, Paul*
         ``Copyright=``
             Contains a | delimited list of the song copyrights
@@ -184,8 +184,8 @@
                 verse_type = u'O'
                 check_first_verse_line = True
             verse_text = unicode(words_list[counter])
-            verse_text = verse_text.replace("/n",  "\n")
-            verse_lines = verse_text.split(u'\n',  1)
+            verse_text = verse_text.replace(u'/n', u'\n')
+            verse_lines = verse_text.split(u'\n', 1)
             if check_first_verse_line:
                 if verse_lines[0].startswith(u'(PRE-CHORUS'):
                     verse_type = u'P'
@@ -207,7 +207,7 @@
             author_list = song_author.split(u'|')
         for author in author_list:
             seperated = author.split(u',')
-            self.add_author(seperated[1].strip() + " " + seperated[0].strip())
+            self.add_author(seperated[1].strip() + u' ' + seperated[0].strip())
         self.title = song_name
         self.copyright = song_copyright
         self.ccli_number = song_ccli
@@ -337,4 +337,4 @@
         self.copyright = song_copyright
         self.ccli_number = song_ccli
         self.comments = song_comments
-        self.finish()
\ No newline at end of file
+        self.finish()

=== modified file 'openlp/plugins/songs/lib/opensongimport.py'
--- openlp/plugins/songs/lib/opensongimport.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/lib/opensongimport.py	2010-12-30 12:06:38 +0000
@@ -128,7 +128,7 @@
                 numfiles += len(z.infolist())
             else:
                 numfiles += 1
-        log.debug("Total number of files: %d", numfiles)
+        log.debug(u'Total number of files: %d', numfiles)
         self.import_wizard.importProgressBar.setMaximum(numfiles)
         for filename in self.filenames:
             if self.stop_import_flag:
@@ -159,7 +159,7 @@
                     break
             else:
                 # not a zipfile
-                log.info('Direct import %s', filename)
+                log.info(u'Direct import %s', filename)
                 self.import_wizard.incrementProgressBar(
                     unicode(translate('SongsPlugin.ImportWizardForm',
                         'Importing %s...')) % os.path.split(filename)[-1])
@@ -306,4 +306,4 @@
                 log.info(u'Got order %s but not in versetags, dropping this'
                     u'item from presentation order', tag)
             else:
-                self.verse_order_list.append(tag)
\ No newline at end of file
+                self.verse_order_list.append(tag)

=== modified file 'openlp/plugins/songs/lib/songbeamerimport.py'
--- openlp/plugins/songs/lib/songbeamerimport.py	2010-12-27 08:28:33 +0000
+++ openlp/plugins/songs/lib/songbeamerimport.py	2010-12-30 12:06:38 +0000
@@ -85,7 +85,7 @@
         """
         Recieve a single file, or a list of files to import.
         """
-        if isinstance(self.import_source,  list):
+        if isinstance(self.import_source, list):
             self.import_wizard.importProgressBar.setMaximum(
                 len(self.import_source))
             for file in self.import_source:
@@ -96,7 +96,7 @@
                 read_verses = False
                 self.file_name = os.path.split(file)[1]
                 self.import_wizard.incrementProgressBar(
-                    "Importing %s" % (self.file_name),  0)
+                    u'Importing %s' % (self.file_name), 0)
                 if os.path.isfile(file):
                     detect_file = open(file, u'r')
                     details = chardet.detect(detect_file.read(2048))
@@ -292,4 +292,4 @@
                     self.current_verse_type += marks[1]
             return True
         else:
-            return False
\ No newline at end of file
+            return False

=== modified file 'openlp/plugins/songs/lib/wowimport.py'
--- openlp/plugins/songs/lib/wowimport.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/lib/wowimport.py	2010-12-30 12:06:38 +0000
@@ -32,7 +32,7 @@
 
 from openlp.plugins.songs.lib.songimport import SongImport
 
-BLOCK_TYPES = (u'V',  u'C',  u'B')
+BLOCK_TYPES = (u'V', u'C', u'B')
 
 log = logging.getLogger(__name__)
 
@@ -111,7 +111,7 @@
         Recieve a single file, or a list of files to import.
         """
 
-        if isinstance(self.import_source,  list):
+        if isinstance(self.import_source, list):
             self.import_wizard.importProgressBar.setMaximum(
                 len(self.import_source))
             for file in self.import_source:
@@ -119,7 +119,7 @@
                 self.copyright = u''
                 self.file_name = os.path.split(file)[1]
                 self.import_wizard.incrementProgressBar(
-                    "Importing %s" % (self.file_name),  0)
+                    u'Importing %s' % (self.file_name), 0)
                 # Get the song title
                 self.title = self.file_name.rpartition(u'.')[0]
                 self.songData = open(file, 'rb')
@@ -167,5 +167,5 @@
                 self.songData.close()
                 self.finish()
                 self.import_wizard.incrementProgressBar(
-                    "Importing %s" % (self.file_name))
+                    u'Importing %s' % (self.file_name))
             return True


Follow ups