← Back to team overview

openlp-core team mailing list archive

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

 

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

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

Add Theme Editing (Start of)
Changes to XML handling for Themes
Add Theme event handling for plugins so they know when the theme list has changed

-- 
https://code.launchpad.net/~trb143/openlp/ThemeManager2/+merge/5460
Your team openlp.org Core is subscribed to branch lp:openlp.
=== modified file 'openlp.pyw'
--- openlp.pyw	2009-03-10 16:46:25 +0000
+++ openlp.pyw	2009-04-10 05:59:40 +0000
@@ -26,29 +26,37 @@
 from openlp.core.lib import Receiver
 
 logging.basicConfig(level=logging.DEBUG,
-                format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
-                datefmt='%m-%d %H:%M',
-                filename='openlp.log',
-                filemode='w')
+                format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
+                datefmt=u'%m-%d %H:%M',
+                filename=u'openlp.log',
+                filemode=u'w')
 
 from openlp.core.resources import *
 from openlp.core.ui import MainWindow, SplashScreen
 
 class OpenLP(QtGui.QApplication):
+    global log
+    log=logging.getLogger(u'OpenLP Application')
+    log.info(u'Application Loaded')
 
     def run(self):
         #provide a listener for widgets to reqest a screen update.
         QtCore.QObject.connect(Receiver.get_receiver(),
-            QtCore.SIGNAL('openlpprocessevents'), self.processEvents)
+            QtCore.SIGNAL(u'openlpprocessevents'), self.processEvents)
 
-        self.setApplicationName('openlp.org')
-        self.setApplicationVersion('1.9.0')
+        self.setApplicationName(u'openlp.org')
+        self.setApplicationVersion(u'1.9.0')
         self.splash = SplashScreen()
         self.splash.show()
         # make sure Qt really display the splash screen
         self.processEvents()
-        # start tha main app window
-        self.main_window = MainWindow()
+        screens = []
+        # Decide how many screens we have and their size
+        for i in range (0 ,  self.desktop().numScreens()):
+            screens.insert(i, (i+1, self.desktop().availableGeometry(i+1)))
+            log.info(u'Screen %d found with resolution %s', i+1, self.desktop().availableGeometry(i+1))
+        # start the main app window
+        self.main_window = MainWindow(screens)
         self.main_window.show()
         # now kill the splashscreen
         self.splash.finish(self.main_window.main_window)

=== modified file 'openlp/core/lib/themexmlhandler.py'
--- openlp/core/lib/themexmlhandler.py	2009-04-07 19:45:21 +0000
+++ openlp/core/lib/themexmlhandler.py	2009-04-11 07:33:45 +0000
@@ -52,23 +52,30 @@
         background.setAttribute(u'type', u'solid')
         self.theme.appendChild(background)
 
-        color = self.theme_xml.createElement(u'color')
+        color = self.theme_xml.createElement(u'color1')
         bkc = self.theme_xml.createTextNode(bkcolor)
         color.appendChild(bkc)
         background.appendChild(color)
 
+        color = self.theme_xml.createElement(u'color2')
+        background.appendChild(color)
+
+        color = self.theme_xml.createElement(u'direction')
+        background.appendChild(color)
+
+
     def add_background_gradient(self, startcolor, endcolor, direction):
         background = self.theme_xml.createElement(u'background')
         background.setAttribute(u'mode', u'opaque')
-        background.setAttribute(u'type', u'Gradient')
+        background.setAttribute(u'type', u'gradient')
         self.theme.appendChild(background)
 
-        color = self.theme_xml.createElement(u'startColor')
+        color = self.theme_xml.createElement(u'color1')
         bkc = self.theme_xml.createTextNode(startcolor)
         color.appendChild(bkc)
         background.appendChild(color)
 
-        color = self.theme_xml.createElement(u'endColor')
+        color = self.theme_xml.createElement(u'color2')
         bkc = self.theme_xml.createTextNode(endcolor)
         color.appendChild(bkc)
         background.appendChild(color)
@@ -89,7 +96,7 @@
         color.appendChild(bkc)
         background.appendChild(color)
 
-    def add_font(self, fontname, fontcolor, fontproportion, fonttype=u'main'):
+    def add_font(self, fontname, fontcolor, fontproportion, override, fonttype=u'main', xpos=0, ypos=0 ,width=0, height=0):
         background = self.theme_xml.createElement(u'font')
         background.setAttribute(u'type',fonttype)
         self.theme.appendChild(background)
@@ -109,6 +116,14 @@
         name.appendChild(fn)
         background.appendChild(name)
 
+        name = self.theme_xml.createElement(u'location')
+        name.setAttribute(u'override',override)
+        name.setAttribute(u'x',str(xpos))
+        name.setAttribute(u'y',str(ypos))
+        name.setAttribute(u'width',str(width))
+        name.setAttribute(u'height',str(height))
+        background.appendChild(name)
+
     def add_display(self, shadow, shadowColor, outline, outlineColor, horizontal, vertical, wrap):
         background = self.theme_xml.createElement(u'display')
         self.theme.appendChild(background)

=== modified file 'openlp/core/render.py'
--- openlp/core/render.py	2009-04-06 18:45:45 +0000
+++ openlp/core/render.py	2009-04-11 07:33:45 +0000
@@ -23,7 +23,7 @@
 from PyQt4 import QtGui, QtCore, Qt
 
 from copy import copy
-from interpolate import interpolate
+#from interpolate import interpolate
 
 class Renderer:
 
@@ -116,9 +116,10 @@
         retval=self._render_lines(words)
         return retval
 
-    def set_text_rectangle(self, rect):
+    def set_text_rectangle(self, rect_main, rect_footer):
         """ Sets the rectangle within which text should be rendered"""
-        self._rect=rect
+        self._rect=rect_main
+        self._rect_footer=rect_footer
 
     def _render_background(self):
         assert(self._theme)
@@ -127,8 +128,8 @@
         p=QtGui.QPainter()
         p.begin(self._paint)
         if self._theme.background_type == u'solid':
-            p.fillRect(self._paint.rect(), QtGui.QColor(self._theme.background_color))
-        elif self._theme.background_type == u'Gradient' : # gradient
+            p.fillRect(self._paint.rect(), QtGui.QColor(self._theme.background_color1))
+        elif self._theme.background_type == u'gradient' : # gradient
             gradient = None
             if self._theme.background_direction == u'vertical':
                 w = int(self._paint.width())/2
@@ -141,8 +142,8 @@
                 h = int(self._paint.height())/2
                 gradient = QtGui.QRadialGradient(w, h, w) # Circular
 
-            gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
-            gradient.setColorAt(1, QtGui.QColor(self._theme.background_endColor))
+            gradient.setColorAt(0, QtGui.QColor(self._theme.background_color1))
+            gradient.setColorAt(1, QtGui.QColor(self._theme.background_color2))
 
             p.setBrush(QtGui.QBrush(gradient))
             rectPath = QtGui.QPainterPath()
@@ -230,29 +231,40 @@
 
         return retval
 
-    def _render_lines(self, lines):
+    def _correctAlignment(self, rect, bbox):
+        x=rect.left()
+        if int(self._theme.display_verticalAlign) == 0: # top align
+            y = rect.top()
+        elif int(self._theme.display_verticalAlign) == 1: # bottom align
+            y=rect.bottom()-bbox.height()
+        elif int(t.display_verticalAlign) == 2: # centre align
+            y=rect.top()+(rect.height()-bbox.height())/2
+        else:
+            assert(0, u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)
+        return x, y
+
+    def _render_lines(self, lines, lines1=None):
         """render a set of lines according to the theme, return bounding box"""
         #log.debug(u'_render_lines %s', lines)
 
-        bbox=self._render_lines_unaligned(lines)
+        bbox=self._render_lines_unaligned(lines, False) # Main font
+        if lines1 is not None:
+            bbox1=self._render_lines_unaligned(lines1, True) # Footer Font
 
-        t=self._theme
-        x=self._rect.left()
-        if int(t.display_verticalAlign) == 0: # top align
-            y = self._rect.top()
-        elif int(t.display_verticalAlign) == 1: # bottom align
-            y=self._rect.bottom()-bbox.height()
-        elif int(t.display_verticalAlign) == 2: # centre align
-            y=self._rect.top()+(self._rect.height()-bbox.height())/2
-        else:
-            assert(0, u'Invalid value for theme.VerticalAlign:%s' % t.display_verticalAlign)
+        # put stuff on background so need to reset before doing the job properly.
         self._render_background()
-        bbox=self._render_lines_unaligned(lines, (x,y))
+        x, y = self._correctAlignment(self._rect, bbox)
+        bbox=self._render_lines_unaligned(lines, False,  (x,y))
+
+        if lines1 is not None:
+            x, y = self._correctAlignment(self._rect_footer, bbox1)
+            bbox=self._render_lines_unaligned(lines1, True, (x,y) )
+
         log.debug(u'render lines DONE')
 
         return bbox
 
-    def _render_lines_unaligned(self, lines, tlcorner=(0,0)):
+    def _render_lines_unaligned(self, lines,  footer,  tlcorner=(0,0)):
 
         """Given a list of lines to render, render each one in turn
         (using the _render_single_line fn - which may result in going
@@ -269,7 +281,7 @@
                 continue
             # render after current bottom, but at original left edge
             # keep track of right edge to see which is biggest
-            (thisx, bry) = self._render_single_line(line, (x,bry))
+            (thisx, bry) = self._render_single_line(line, footer, (x,bry))
             if (thisx > brx):
                 brx=thisx
         retval=QtCore.QRect(x,y,brx-x, bry-y)
@@ -283,7 +295,7 @@
 
         return  retval
 
-    def _render_single_line(self, line, tlcorner=(0,0)):
+    def _render_single_line(self, line, footer, tlcorner=(0,0)):
 
         """render a single line of words onto the DC, top left corner
         specified.
@@ -307,7 +319,7 @@
         lines=[]
         maxx=self._rect.width(); maxy=self._rect.height();
         while (len(words)>0):
-            w,h=self._get_extent_and_render(thisline)
+            w,h=self._get_extent_and_render(thisline, footer)
             rhs=w+x
             if rhs < maxx-self._right_margin:
                 lines.append(thisline)
@@ -327,7 +339,7 @@
         for linenum in range(len(lines)):
             line=lines[linenum]
             #find out how wide line is
-            w,h=self._get_extent_and_render(line, tlcorner=(x,y), draw=False)
+            w,h=self._get_extent_and_render(line, footer,  tlcorner=(x,y), draw=False)
 
             if t.display_shadow:
                 w+=self._shadow_offset
@@ -351,20 +363,20 @@
                 rightextent=x+w
             # now draw the text, and any outlines/shadows
             if t.display_shadow:
-                self._get_extent_and_render(line, tlcorner=(x+self._shadow_offset,y+self._shadow_offset),
+                self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset),
                     draw=True, color = t.display_shadow_color)
             if t.display_outline:
-                self._get_extent_and_render(line, (x+self._outline_offset,y), draw=True, color = t.display_outline_color)
-                self._get_extent_and_render(line, (x,y+self._outline_offset), draw=True, color = t.display_outline_color)
-                self._get_extent_and_render(line, (x,y-self._outline_offset), draw=True, color = t.display_outline_color)
-                self._get_extent_and_render(line, (x-self._outline_offset,y), draw=True, color = t.display_outline_color)
+                self._get_extent_and_render(line, footer,(x+self._outline_offset,y), draw=True, color = t.display_outline_color)
+                self._get_extent_and_render(line, footer,(x,y+self._outline_offset), draw=True, color = t.display_outline_color)
+                self._get_extent_and_render(line, footer,(x,y-self._outline_offset), draw=True, color = t.display_outline_color)
+                self._get_extent_and_render(line, footer,(x-self._outline_offset,y), draw=True, color = t.display_outline_color)
                 if self._outline_offset > 1:
-                    self._get_extent_and_render(line, (x+self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color)
-                    self._get_extent_and_render(line, (x-self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color)
-                    self._get_extent_and_render(line, (x+self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color)
-                    self._get_extent_and_render(line, (x-self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color)
+                    self._get_extent_and_render(line, footer,(x+self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color)
+                    self._get_extent_and_render(line, footer,(x-self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color)
+                    self._get_extent_and_render(line, footer,(x+self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color)
+                    self._get_extent_and_render(line, footer,(x-self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color)
 
-            self._get_extent_and_render(line, tlcorner=(x,y), draw=True)
+            self._get_extent_and_render(line, footer,tlcorner=(x,y), draw=True)
 #             log.debug(u'Line %2d: Render '%s' at (%d, %d) wh=(%d,%d)' % ( linenum, line, x, y,w,h)
             y += h
             if linenum == 0:
@@ -381,7 +393,7 @@
         return brcorner
 
     # xxx this is what to override for an SDL version
-    def _get_extent_and_render(self, line, tlcorner=(0,0), draw=False, color=None, footer=False):
+    def _get_extent_and_render(self, line, footer,  tlcorner=(0,0), draw=False, color=None):
         """Find bounding box of text  - as render_single_line.
         If draw is set, actually draw the text to the current DC as well
 

=== added file 'openlp/core/ui/amendthemedialog.py'
--- openlp/core/ui/amendthemedialog.py	1970-01-01 00:00:00 +0000
+++ openlp/core/ui/amendthemedialog.py	2009-04-11 05:43:52 +0000
@@ -0,0 +1,392 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'amendthemedialog.ui'
+#
+# Created: Fri Apr 10 20:38:33 2009
+#      by: PyQt4 UI code generator 4.4.4
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_AmendThemeDialog(object):
+    def setupUi(self, AmendThemeDialog):
+        AmendThemeDialog.setObjectName("AmendThemeDialog")
+        AmendThemeDialog.resize(752, 533)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        AmendThemeDialog.setWindowIcon(icon)
+        self.ThemeButtonBox = QtGui.QDialogButtonBox(AmendThemeDialog)
+        self.ThemeButtonBox.setGeometry(QtCore.QRect(580, 500, 156, 26))
+        self.ThemeButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
+        self.ThemeButtonBox.setObjectName("ThemeButtonBox")
+        self.layoutWidget = QtGui.QWidget(AmendThemeDialog)
+        self.layoutWidget.setGeometry(QtCore.QRect(50, 20, 441, 41))
+        self.layoutWidget.setObjectName("layoutWidget")
+        self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.ThemeNameLabel = QtGui.QLabel(self.layoutWidget)
+        self.ThemeNameLabel.setObjectName("ThemeNameLabel")
+        self.horizontalLayout.addWidget(self.ThemeNameLabel)
+        self.ThemeNameEdit = QtGui.QLineEdit(self.layoutWidget)
+        self.ThemeNameEdit.setObjectName("ThemeNameEdit")
+        self.horizontalLayout.addWidget(self.ThemeNameEdit)
+        self.widget = QtGui.QWidget(AmendThemeDialog)
+        self.widget.setGeometry(QtCore.QRect(31, 71, 721, 411))
+        self.widget.setObjectName("widget")
+        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.widget)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.LeftSide = QtGui.QWidget(self.widget)
+        self.LeftSide.setObjectName("LeftSide")
+        self.tabWidget = QtGui.QTabWidget(self.LeftSide)
+        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 341, 401))
+        self.tabWidget.setObjectName("tabWidget")
+        self.BackgroundTab = QtGui.QWidget()
+        self.BackgroundTab.setObjectName("BackgroundTab")
+        self.layoutWidget1 = QtGui.QWidget(self.BackgroundTab)
+        self.layoutWidget1.setGeometry(QtCore.QRect(10, 10, 321, 351))
+        self.layoutWidget1.setObjectName("layoutWidget1")
+        self.gridLayout = QtGui.QGridLayout(self.layoutWidget1)
+        self.gridLayout.setObjectName("gridLayout")
+        self.BackgroundLabel = QtGui.QLabel(self.layoutWidget1)
+        self.BackgroundLabel.setObjectName("BackgroundLabel")
+        self.gridLayout.addWidget(self.BackgroundLabel, 0, 0, 1, 2)
+        self.BackgroundComboBox = QtGui.QComboBox(self.layoutWidget1)
+        self.BackgroundComboBox.setObjectName("BackgroundComboBox")
+        self.BackgroundComboBox.addItem(QtCore.QString())
+        self.BackgroundComboBox.addItem(QtCore.QString())
+        self.gridLayout.addWidget(self.BackgroundComboBox, 0, 2, 1, 2)
+        self.BackgroundTypeLabel = QtGui.QLabel(self.layoutWidget1)
+        self.BackgroundTypeLabel.setObjectName("BackgroundTypeLabel")
+        self.gridLayout.addWidget(self.BackgroundTypeLabel, 1, 0, 1, 2)
+        self.BackgroundTypeComboBox = QtGui.QComboBox(self.layoutWidget1)
+        self.BackgroundTypeComboBox.setObjectName("BackgroundTypeComboBox")
+        self.BackgroundTypeComboBox.addItem(QtCore.QString())
+        self.BackgroundTypeComboBox.addItem(QtCore.QString())
+        self.BackgroundTypeComboBox.addItem(QtCore.QString())
+        self.gridLayout.addWidget(self.BackgroundTypeComboBox, 1, 2, 1, 2)
+        self.Color1Label = QtGui.QLabel(self.layoutWidget1)
+        self.Color1Label.setObjectName("Color1Label")
+        self.gridLayout.addWidget(self.Color1Label, 2, 0, 1, 1)
+        self.Color1PushButton = QtGui.QPushButton(self.layoutWidget1)
+        self.Color1PushButton.setObjectName("Color1PushButton")
+        self.gridLayout.addWidget(self.Color1PushButton, 2, 2, 1, 2)
+        self.Color2Label = QtGui.QLabel(self.layoutWidget1)
+        self.Color2Label.setObjectName("Color2Label")
+        self.gridLayout.addWidget(self.Color2Label, 3, 0, 1, 1)
+        self.Color2PushButton = QtGui.QPushButton(self.layoutWidget1)
+        self.Color2PushButton.setObjectName("Color2PushButton")
+        self.gridLayout.addWidget(self.Color2PushButton, 3, 2, 1, 2)
+        self.ImageLabel = QtGui.QLabel(self.layoutWidget1)
+        self.ImageLabel.setObjectName("ImageLabel")
+        self.gridLayout.addWidget(self.ImageLabel, 4, 0, 1, 1)
+        self.ImageLineEdit = QtGui.QLineEdit(self.layoutWidget1)
+        self.ImageLineEdit.setObjectName("ImageLineEdit")
+        self.gridLayout.addWidget(self.ImageLineEdit, 4, 1, 1, 2)
+        self.ImagePushButton = QtGui.QPushButton(self.layoutWidget1)
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/services/service_open.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.ImagePushButton.setIcon(icon1)
+        self.ImagePushButton.setObjectName("ImagePushButton")
+        self.gridLayout.addWidget(self.ImagePushButton, 4, 3, 1, 1)
+        self.GradientLabel = QtGui.QLabel(self.layoutWidget1)
+        self.GradientLabel.setObjectName("GradientLabel")
+        self.gridLayout.addWidget(self.GradientLabel, 5, 0, 1, 1)
+        self.GradientComboBox = QtGui.QComboBox(self.layoutWidget1)
+        self.GradientComboBox.setObjectName("GradientComboBox")
+        self.GradientComboBox.addItem(QtCore.QString())
+        self.GradientComboBox.addItem(QtCore.QString())
+        self.GradientComboBox.addItem(QtCore.QString())
+        self.gridLayout.addWidget(self.GradientComboBox, 5, 2, 1, 2)
+        self.tabWidget.addTab(self.BackgroundTab, "")
+        self.FontMainTab = QtGui.QWidget()
+        self.FontMainTab.setObjectName("FontMainTab")
+        self.MainFontGroupBox = QtGui.QGroupBox(self.FontMainTab)
+        self.MainFontGroupBox.setGeometry(QtCore.QRect(20, 10, 307, 119))
+        self.MainFontGroupBox.setObjectName("MainFontGroupBox")
+        self.gridLayout_2 = QtGui.QGridLayout(self.MainFontGroupBox)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.MainFontlabel = QtGui.QLabel(self.MainFontGroupBox)
+        self.MainFontlabel.setObjectName("MainFontlabel")
+        self.gridLayout_2.addWidget(self.MainFontlabel, 0, 0, 1, 1)
+        self.MainFontComboBox = QtGui.QFontComboBox(self.MainFontGroupBox)
+        self.MainFontComboBox.setObjectName("MainFontComboBox")
+        self.gridLayout_2.addWidget(self.MainFontComboBox, 0, 1, 1, 2)
+        self.MainFontColorLabel = QtGui.QLabel(self.MainFontGroupBox)
+        self.MainFontColorLabel.setObjectName("MainFontColorLabel")
+        self.gridLayout_2.addWidget(self.MainFontColorLabel, 1, 0, 1, 1)
+        self.MainFontColorPushButton = QtGui.QPushButton(self.MainFontGroupBox)
+        self.MainFontColorPushButton.setObjectName("MainFontColorPushButton")
+        self.gridLayout_2.addWidget(self.MainFontColorPushButton, 1, 2, 1, 1)
+        self.MainFontSize = QtGui.QLabel(self.MainFontGroupBox)
+        self.MainFontSize.setObjectName("MainFontSize")
+        self.gridLayout_2.addWidget(self.MainFontSize, 2, 0, 1, 1)
+        self.MainFontSizeLineEdit = QtGui.QLineEdit(self.MainFontGroupBox)
+        self.MainFontSizeLineEdit.setObjectName("MainFontSizeLineEdit")
+        self.gridLayout_2.addWidget(self.MainFontSizeLineEdit, 2, 1, 1, 1)
+        self.MainFontlSlider = QtGui.QSlider(self.MainFontGroupBox)
+        self.MainFontlSlider.setProperty("value", QtCore.QVariant(15))
+        self.MainFontlSlider.setMaximum(40)
+        self.MainFontlSlider.setOrientation(QtCore.Qt.Horizontal)
+        self.MainFontlSlider.setTickPosition(QtGui.QSlider.TicksBelow)
+        self.MainFontlSlider.setTickInterval(5)
+        self.MainFontlSlider.setObjectName("MainFontlSlider")
+        self.gridLayout_2.addWidget(self.MainFontlSlider, 2, 2, 1, 1)
+        self.FooterFontGroupBox = QtGui.QGroupBox(self.FontMainTab)
+        self.FooterFontGroupBox.setGeometry(QtCore.QRect(20, 160, 301, 190))
+        self.FooterFontGroupBox.setObjectName("FooterFontGroupBox")
+        self.verticalLayout = QtGui.QVBoxLayout(self.FooterFontGroupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.FontMainUseDefault = QtGui.QCheckBox(self.FooterFontGroupBox)
+        self.FontMainUseDefault.setTristate(False)
+        self.FontMainUseDefault.setObjectName("FontMainUseDefault")
+        self.verticalLayout.addWidget(self.FontMainUseDefault)
+        self.horizontalLayout_3 = QtGui.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.FontMainXLabel = QtGui.QLabel(self.FooterFontGroupBox)
+        self.FontMainXLabel.setObjectName("FontMainXLabel")
+        self.horizontalLayout_3.addWidget(self.FontMainXLabel)
+        self.FontMainXEdit = QtGui.QLineEdit(self.FooterFontGroupBox)
+        self.FontMainXEdit.setObjectName("FontMainXEdit")
+        self.horizontalLayout_3.addWidget(self.FontMainXEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_3)
+        self.horizontalLayout_4 = QtGui.QHBoxLayout()
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.FontMainYLabel = QtGui.QLabel(self.FooterFontGroupBox)
+        self.FontMainYLabel.setObjectName("FontMainYLabel")
+        self.horizontalLayout_4.addWidget(self.FontMainYLabel)
+        self.FontMainYEdit = QtGui.QLineEdit(self.FooterFontGroupBox)
+        self.FontMainYEdit.setObjectName("FontMainYEdit")
+        self.horizontalLayout_4.addWidget(self.FontMainYEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_4)
+        self.horizontalLayout_5 = QtGui.QHBoxLayout()
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.FontMainWidthLabel = QtGui.QLabel(self.FooterFontGroupBox)
+        self.FontMainWidthLabel.setObjectName("FontMainWidthLabel")
+        self.horizontalLayout_5.addWidget(self.FontMainWidthLabel)
+        self.FontMainWidthEdit = QtGui.QLineEdit(self.FooterFontGroupBox)
+        self.FontMainWidthEdit.setObjectName("FontMainWidthEdit")
+        self.horizontalLayout_5.addWidget(self.FontMainWidthEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_5)
+        self.horizontalLayout_6 = QtGui.QHBoxLayout()
+        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+        self.FontMainHeightLabel = QtGui.QLabel(self.FooterFontGroupBox)
+        self.FontMainHeightLabel.setObjectName("FontMainHeightLabel")
+        self.horizontalLayout_6.addWidget(self.FontMainHeightLabel)
+        self.FontMainHeightEdit = QtGui.QLineEdit(self.FooterFontGroupBox)
+        self.FontMainHeightEdit.setObjectName("FontMainHeightEdit")
+        self.horizontalLayout_6.addWidget(self.FontMainHeightEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_6)
+        self.tabWidget.addTab(self.FontMainTab, "")
+        self.FontFooterTab = QtGui.QWidget()
+        self.FontFooterTab.setObjectName("FontFooterTab")
+        self.FooterFontGroupBox_2 = QtGui.QGroupBox(self.FontFooterTab)
+        self.FooterFontGroupBox_2.setGeometry(QtCore.QRect(20, 160, 301, 190))
+        self.FooterFontGroupBox_2.setObjectName("FooterFontGroupBox_2")
+        self.verticalLayout_2 = QtGui.QVBoxLayout(self.FooterFontGroupBox_2)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.FontMainUseDefault_2 = QtGui.QCheckBox(self.FooterFontGroupBox_2)
+        self.FontMainUseDefault_2.setTristate(False)
+        self.FontMainUseDefault_2.setObjectName("FontMainUseDefault_2")
+        self.verticalLayout_2.addWidget(self.FontMainUseDefault_2)
+        self.horizontalLayout_7 = QtGui.QHBoxLayout()
+        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+        self.FontFooterXLabel = QtGui.QLabel(self.FooterFontGroupBox_2)
+        self.FontFooterXLabel.setObjectName("FontFooterXLabel")
+        self.horizontalLayout_7.addWidget(self.FontFooterXLabel)
+        self.FontFooterXEdit = QtGui.QLineEdit(self.FooterFontGroupBox_2)
+        self.FontFooterXEdit.setObjectName("FontFooterXEdit")
+        self.horizontalLayout_7.addWidget(self.FontFooterXEdit)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_7)
+        self.horizontalLayout_8 = QtGui.QHBoxLayout()
+        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+        self.FontFooterYLabel = QtGui.QLabel(self.FooterFontGroupBox_2)
+        self.FontFooterYLabel.setObjectName("FontFooterYLabel")
+        self.horizontalLayout_8.addWidget(self.FontFooterYLabel)
+        self.FontFooterYEdit = QtGui.QLineEdit(self.FooterFontGroupBox_2)
+        self.FontFooterYEdit.setObjectName("FontFooterYEdit")
+        self.horizontalLayout_8.addWidget(self.FontFooterYEdit)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_8)
+        self.horizontalLayout_9 = QtGui.QHBoxLayout()
+        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
+        self.FontFooterWidthLabel = QtGui.QLabel(self.FooterFontGroupBox_2)
+        self.FontFooterWidthLabel.setObjectName("FontFooterWidthLabel")
+        self.horizontalLayout_9.addWidget(self.FontFooterWidthLabel)
+        self.FontFooterWidthEdit = QtGui.QLineEdit(self.FooterFontGroupBox_2)
+        self.FontFooterWidthEdit.setObjectName("FontFooterWidthEdit")
+        self.horizontalLayout_9.addWidget(self.FontFooterWidthEdit)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_9)
+        self.horizontalLayout_10 = QtGui.QHBoxLayout()
+        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
+        self.FontFooterHeightLabel = QtGui.QLabel(self.FooterFontGroupBox_2)
+        self.FontFooterHeightLabel.setObjectName("FontFooterHeightLabel")
+        self.horizontalLayout_10.addWidget(self.FontFooterHeightLabel)
+        self.FontFooterHeightEdit = QtGui.QLineEdit(self.FooterFontGroupBox_2)
+        self.FontFooterHeightEdit.setObjectName("FontFooterHeightEdit")
+        self.horizontalLayout_10.addWidget(self.FontFooterHeightEdit)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_10)
+        self.FooterFontGroupBox_3 = QtGui.QGroupBox(self.FontFooterTab)
+        self.FooterFontGroupBox_3.setGeometry(QtCore.QRect(20, 10, 307, 119))
+        self.FooterFontGroupBox_3.setObjectName("FooterFontGroupBox_3")
+        self.gridLayout_3 = QtGui.QGridLayout(self.FooterFontGroupBox_3)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.FontFooterlabel = QtGui.QLabel(self.FooterFontGroupBox_3)
+        self.FontFooterlabel.setObjectName("FontFooterlabel")
+        self.gridLayout_3.addWidget(self.FontFooterlabel, 0, 0, 1, 1)
+        self.FontFooterComboBox = QtGui.QFontComboBox(self.FooterFontGroupBox_3)
+        self.FontFooterComboBox.setObjectName("FontFooterComboBox")
+        self.gridLayout_3.addWidget(self.FontFooterComboBox, 0, 1, 1, 2)
+        self.FontFooterColorLabel = QtGui.QLabel(self.FooterFontGroupBox_3)
+        self.FontFooterColorLabel.setObjectName("FontFooterColorLabel")
+        self.gridLayout_3.addWidget(self.FontFooterColorLabel, 1, 0, 1, 1)
+        self.FontFooterColorPushButton = QtGui.QPushButton(self.FooterFontGroupBox_3)
+        self.FontFooterColorPushButton.setObjectName("FontFooterColorPushButton")
+        self.gridLayout_3.addWidget(self.FontFooterColorPushButton, 1, 2, 1, 1)
+        self.FontFooterSizeLabel = QtGui.QLabel(self.FooterFontGroupBox_3)
+        self.FontFooterSizeLabel.setObjectName("FontFooterSizeLabel")
+        self.gridLayout_3.addWidget(self.FontFooterSizeLabel, 2, 0, 1, 1)
+        self.FontFooterSizeLineEdit = QtGui.QLineEdit(self.FooterFontGroupBox_3)
+        self.FontFooterSizeLineEdit.setObjectName("FontFooterSizeLineEdit")
+        self.gridLayout_3.addWidget(self.FontFooterSizeLineEdit, 2, 1, 1, 1)
+        self.FontFooterSlider = QtGui.QSlider(self.FooterFontGroupBox_3)
+        self.FontFooterSlider.setProperty("value", QtCore.QVariant(15))
+        self.FontFooterSlider.setMaximum(40)
+        self.FontFooterSlider.setOrientation(QtCore.Qt.Horizontal)
+        self.FontFooterSlider.setTickPosition(QtGui.QSlider.TicksBelow)
+        self.FontFooterSlider.setTickInterval(5)
+        self.FontFooterSlider.setObjectName("FontFooterSlider")
+        self.gridLayout_3.addWidget(self.FontFooterSlider, 2, 2, 1, 1)
+        self.tabWidget.addTab(self.FontFooterTab, "")
+        self.OptionsTab = QtGui.QWidget()
+        self.OptionsTab.setObjectName("OptionsTab")
+        self.ShadowGroupBox = QtGui.QGroupBox(self.OptionsTab)
+        self.ShadowGroupBox.setGeometry(QtCore.QRect(20, 10, 301, 80))
+        self.ShadowGroupBox.setObjectName("ShadowGroupBox")
+        self.layoutWidget2 = QtGui.QWidget(self.ShadowGroupBox)
+        self.layoutWidget2.setGeometry(QtCore.QRect(10, 20, 281, 58))
+        self.layoutWidget2.setObjectName("layoutWidget2")
+        self.formLayout = QtGui.QFormLayout(self.layoutWidget2)
+        self.formLayout.setObjectName("formLayout")
+        self.ShadowCheckBox = QtGui.QCheckBox(self.layoutWidget2)
+        self.ShadowCheckBox.setObjectName("ShadowCheckBox")
+        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ShadowCheckBox)
+        self.ShadowColorLabel = QtGui.QLabel(self.layoutWidget2)
+        self.ShadowColorLabel.setObjectName("ShadowColorLabel")
+        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.ShadowColorLabel)
+        self.ShadowColorPushButton = QtGui.QPushButton(self.layoutWidget2)
+        self.ShadowColorPushButton.setObjectName("ShadowColorPushButton")
+        self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.ShadowColorPushButton)
+        self.AlignmentGroupBox = QtGui.QGroupBox(self.OptionsTab)
+        self.AlignmentGroupBox.setGeometry(QtCore.QRect(10, 200, 321, 161))
+        self.AlignmentGroupBox.setObjectName("AlignmentGroupBox")
+        self.gridLayout_4 = QtGui.QGridLayout(self.AlignmentGroupBox)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.HorizontalLabel = QtGui.QLabel(self.AlignmentGroupBox)
+        self.HorizontalLabel.setObjectName("HorizontalLabel")
+        self.gridLayout_4.addWidget(self.HorizontalLabel, 0, 0, 1, 1)
+        self.HorizontalComboBox = QtGui.QComboBox(self.AlignmentGroupBox)
+        self.HorizontalComboBox.setObjectName("HorizontalComboBox")
+        self.HorizontalComboBox.addItem(QtCore.QString())
+        self.HorizontalComboBox.addItem(QtCore.QString())
+        self.HorizontalComboBox.addItem(QtCore.QString())
+        self.gridLayout_4.addWidget(self.HorizontalComboBox, 0, 1, 1, 1)
+        self.VerticalLabel = QtGui.QLabel(self.AlignmentGroupBox)
+        self.VerticalLabel.setObjectName("VerticalLabel")
+        self.gridLayout_4.addWidget(self.VerticalLabel, 1, 0, 1, 1)
+        self.VerticalComboBox = QtGui.QComboBox(self.AlignmentGroupBox)
+        self.VerticalComboBox.setObjectName("VerticalComboBox")
+        self.VerticalComboBox.addItem(QtCore.QString())
+        self.VerticalComboBox.addItem(QtCore.QString())
+        self.VerticalComboBox.addItem(QtCore.QString())
+        self.gridLayout_4.addWidget(self.VerticalComboBox, 1, 1, 1, 1)
+        self.OutlineGroupBox = QtGui.QGroupBox(self.OptionsTab)
+        self.OutlineGroupBox.setGeometry(QtCore.QRect(20, 110, 301, 80))
+        self.OutlineGroupBox.setObjectName("OutlineGroupBox")
+        self.layoutWidget_3 = QtGui.QWidget(self.OutlineGroupBox)
+        self.layoutWidget_3.setGeometry(QtCore.QRect(10, 20, 281, 58))
+        self.layoutWidget_3.setObjectName("layoutWidget_3")
+        self.OutlineformLayout = QtGui.QFormLayout(self.layoutWidget_3)
+        self.OutlineformLayout.setObjectName("OutlineformLayout")
+        self.OutlineCheckBox = QtGui.QCheckBox(self.layoutWidget_3)
+        self.OutlineCheckBox.setObjectName("OutlineCheckBox")
+        self.OutlineformLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.OutlineCheckBox)
+        self.OutlineColorLabel = QtGui.QLabel(self.layoutWidget_3)
+        self.OutlineColorLabel.setObjectName("OutlineColorLabel")
+        self.OutlineformLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.OutlineColorLabel)
+        self.OutlineColorPushButton = QtGui.QPushButton(self.layoutWidget_3)
+        self.OutlineColorPushButton.setObjectName("OutlineColorPushButton")
+        self.OutlineformLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.OutlineColorPushButton)
+        self.tabWidget.addTab(self.OptionsTab, "")
+        self.horizontalLayout_2.addWidget(self.LeftSide)
+        self.RightSide = QtGui.QWidget(self.widget)
+        self.RightSide.setObjectName("RightSide")
+        self.ThemePreview = QtGui.QLabel(self.RightSide)
+        self.ThemePreview.setGeometry(QtCore.QRect(20, 60, 311, 271))
+        self.ThemePreview.setFrameShape(QtGui.QFrame.Box)
+        self.ThemePreview.setFrameShadow(QtGui.QFrame.Raised)
+        self.ThemePreview.setLineWidth(2)
+        self.ThemePreview.setScaledContents(True)
+        self.ThemePreview.setObjectName("ThemePreview")
+        self.horizontalLayout_2.addWidget(self.RightSide)
+
+        self.retranslateUi(AmendThemeDialog)
+        self.tabWidget.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(AmendThemeDialog)
+
+    def retranslateUi(self, AmendThemeDialog):
+        AmendThemeDialog.setWindowTitle(QtGui.QApplication.translate("AmendThemeDialog", "Theme Maintance", None, QtGui.QApplication.UnicodeUTF8))
+        self.ThemeNameLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Theme Name", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Background:", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundComboBox.setItemText(0, QtGui.QApplication.translate("AmendThemeDialog", "Opaque", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundComboBox.setItemText(1, QtGui.QApplication.translate("AmendThemeDialog", "Transparent", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundTypeLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Background Type:", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundTypeComboBox.setItemText(0, QtGui.QApplication.translate("AmendThemeDialog", "Solid Color", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundTypeComboBox.setItemText(1, QtGui.QApplication.translate("AmendThemeDialog", "Gradient", None, QtGui.QApplication.UnicodeUTF8))
+        self.BackgroundTypeComboBox.setItemText(2, QtGui.QApplication.translate("AmendThemeDialog", "Image", None, QtGui.QApplication.UnicodeUTF8))
+        self.Color1Label.setText(QtGui.QApplication.translate("AmendThemeDialog", "<Color1>", None, QtGui.QApplication.UnicodeUTF8))
+        self.Color2Label.setText(QtGui.QApplication.translate("AmendThemeDialog", "<Color2>", None, QtGui.QApplication.UnicodeUTF8))
+        self.ImageLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Image:", None, QtGui.QApplication.UnicodeUTF8))
+        self.GradientLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Gradient :", None, QtGui.QApplication.UnicodeUTF8))
+        self.GradientComboBox.setItemText(0, QtGui.QApplication.translate("AmendThemeDialog", "Horizontal", None, QtGui.QApplication.UnicodeUTF8))
+        self.GradientComboBox.setItemText(1, QtGui.QApplication.translate("AmendThemeDialog", "Vertical", None, QtGui.QApplication.UnicodeUTF8))
+        self.GradientComboBox.setItemText(2, QtGui.QApplication.translate("AmendThemeDialog", "Circular", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.BackgroundTab), QtGui.QApplication.translate("AmendThemeDialog", "Background", None, QtGui.QApplication.UnicodeUTF8))
+        self.MainFontGroupBox.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Main Font", None, QtGui.QApplication.UnicodeUTF8))
+        self.MainFontlabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Font:", None, QtGui.QApplication.UnicodeUTF8))
+        self.MainFontColorLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Font Color", None, QtGui.QApplication.UnicodeUTF8))
+        self.MainFontSize.setText(QtGui.QApplication.translate("AmendThemeDialog", "Size:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FooterFontGroupBox.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Display Location", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainUseDefault.setText(QtGui.QApplication.translate("AmendThemeDialog", "Use default location", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainXLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "X Position:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainYLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Y Position:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainWidthLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Width", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainHeightLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Height", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.FontMainTab), QtGui.QApplication.translate("AmendThemeDialog", "Font Main", None, QtGui.QApplication.UnicodeUTF8))
+        self.FooterFontGroupBox_2.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Display Location", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontMainUseDefault_2.setText(QtGui.QApplication.translate("AmendThemeDialog", "Use default location", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterXLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "X Position:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterYLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Y Position:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterWidthLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Width", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterHeightLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Height", None, QtGui.QApplication.UnicodeUTF8))
+        self.FooterFontGroupBox_3.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Footer Font", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterlabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Font:", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterColorLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Font Color", None, QtGui.QApplication.UnicodeUTF8))
+        self.FontFooterSizeLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Size:", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.FontFooterTab), QtGui.QApplication.translate("AmendThemeDialog", "Font Footer", None, QtGui.QApplication.UnicodeUTF8))
+        self.ShadowGroupBox.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Shadow", None, QtGui.QApplication.UnicodeUTF8))
+        self.ShadowCheckBox.setText(QtGui.QApplication.translate("AmendThemeDialog", "Use Shadow", None, QtGui.QApplication.UnicodeUTF8))
+        self.ShadowColorLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Shadow Color:", None, QtGui.QApplication.UnicodeUTF8))
+        self.AlignmentGroupBox.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Alignment", None, QtGui.QApplication.UnicodeUTF8))
+        self.HorizontalLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Horizontal Align:", None, QtGui.QApplication.UnicodeUTF8))
+        self.HorizontalComboBox.setItemText(0, QtGui.QApplication.translate("AmendThemeDialog", "Left", None, QtGui.QApplication.UnicodeUTF8))
+        self.HorizontalComboBox.setItemText(1, QtGui.QApplication.translate("AmendThemeDialog", "Right", None, QtGui.QApplication.UnicodeUTF8))
+        self.HorizontalComboBox.setItemText(2, QtGui.QApplication.translate("AmendThemeDialog", "Center", None, QtGui.QApplication.UnicodeUTF8))
+        self.VerticalLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Vertical Align:", None, QtGui.QApplication.UnicodeUTF8))
+        self.VerticalComboBox.setItemText(0, QtGui.QApplication.translate("AmendThemeDialog", "Top", None, QtGui.QApplication.UnicodeUTF8))
+        self.VerticalComboBox.setItemText(1, QtGui.QApplication.translate("AmendThemeDialog", "Middle", None, QtGui.QApplication.UnicodeUTF8))
+        self.VerticalComboBox.setItemText(2, QtGui.QApplication.translate("AmendThemeDialog", "Bottom", None, QtGui.QApplication.UnicodeUTF8))
+        self.OutlineGroupBox.setTitle(QtGui.QApplication.translate("AmendThemeDialog", "Outline", None, QtGui.QApplication.UnicodeUTF8))
+        self.OutlineCheckBox.setText(QtGui.QApplication.translate("AmendThemeDialog", "Use Outline", None, QtGui.QApplication.UnicodeUTF8))
+        self.OutlineColorLabel.setText(QtGui.QApplication.translate("AmendThemeDialog", "Outline Color:", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.OptionsTab), QtGui.QApplication.translate("AmendThemeDialog", "Alignment", None, QtGui.QApplication.UnicodeUTF8))
+

=== added file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py	1970-01-01 00:00:00 +0000
+++ openlp/core/ui/amendthemeform.py	2009-04-11 15:16:02 +0000
@@ -0,0 +1,229 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+"""
+OpenLP - Open Source Lyrics Projection
+Copyright (c) 2008 Raoul Snyman
+Portions copyright (c) 2008 Martin Thompson, Tim Bentley,
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; version 2 of the License.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+"""
+import logging
+import os, os.path
+
+from PyQt4 import QtCore, QtGui
+from PyQt4.QtGui import QColor, QFont
+from openlp.core.lib import ThemeXML
+from openlp.core import fileToXML
+from openlp.core import Renderer
+from openlp.core import translate
+
+from amendthemedialog import Ui_AmendThemeDialog
+
+log = logging.getLogger(u'AmendThemeForm')
+
+class AmendThemeForm(QtGui.QDialog,  Ui_AmendThemeDialog):
+
+    def __init__(self, parent=None):
+        QtGui.QDialog.__init__(self, parent)
+        self.setupUi(self)
+
+        #define signals
+        #Exits
+        QtCore.QObject.connect(self.ThemeButtonBox, QtCore.SIGNAL("accepted()"), self.accept)
+        QtCore.QObject.connect(self.ThemeButtonBox, QtCore.SIGNAL("rejected()"), self.close)
+        #Buttons
+        QtCore.QObject.connect(self.Color1PushButton ,
+            QtCore.SIGNAL("pressed()"), self.onColor1PushButtonClicked)
+        QtCore.QObject.connect(self.Color2PushButton ,
+            QtCore.SIGNAL("pressed()"), self.onColor2PushButtonClicked)
+        QtCore.QObject.connect(self.MainFontColorPushButton,
+            QtCore.SIGNAL("pressed()"), self.onMainFontColorPushButtonClicked)
+        QtCore.QObject.connect(self.FontFooterColorPushButton,
+            QtCore.SIGNAL("pressed()"), self.onFontFooterColorPushButtonClicked)
+        #Combo boxes
+        QtCore.QObject.connect(self.BackgroundComboBox,
+            QtCore.SIGNAL("activated(int)"), self.onBackgroundComboBoxSelected)
+        QtCore.QObject.connect(self.BackgroundTypeComboBox,
+            QtCore.SIGNAL("activated(int)"), self.onBackgroundTypeComboBoxSelected)
+        QtCore.QObject.connect(self.GradientComboBox,
+            QtCore.SIGNAL("activated(int)"), self.onGradientComboBoxSelected)
+
+
+    def accept(self):
+        return QtGui.QDialog.accept(self)
+
+    def themePath(self, path):
+        self.path = path
+
+    def loadTheme(self, theme):
+        self.theme = ThemeXML()
+        if theme == None:
+            self.theme.parse(self.baseTheme())
+        else:
+            xml_file = os.path.join(self.path, theme, theme+u'.xml')
+            xml = fileToXML(xml_file)
+            self.theme.parse(xml)
+        self.paintUi(self.theme)
+        self.generateImage(self.theme)
+
+    def onGradientComboBoxSelected(self):
+        if self.GradientComboBox.currentIndex() == 0: # Horizontal
+            self.theme.background_direction = u'horizontal'
+        elif self.GradientComboBox.currentIndex() == 1: # vertical
+            self.theme.background_direction = u'vertical'
+        else:
+            self.theme.background_direction = u'circular'
+        self.stateChanging(self.theme)
+        self.generateImage(self.theme)
+
+    def onBackgroundComboBoxSelected(self):
+        if self.BackgroundComboBox.currentIndex() == 0: # Opaque
+            self.theme.background_mode = u'opaque'
+        else:
+            self.theme.background_mode = u'transparent'
+        self.stateChanging(self.theme)
+        self.generateImage(self.theme)
+
+    def onBackgroundTypeComboBoxSelected(self):
+        if self.BackgroundTypeComboBox.currentIndex() == 0: # Solid
+            self.theme.background_type = u'solid'
+        elif self.BackgroundTypeComboBox.currentIndex() == 1: # Gradient
+            self.theme.background_type = u'gradient'
+            if self.theme.background_direction == None: # never defined
+                self.theme.background_direction = u'horizontal'
+                self.theme.background_color2 = u'#000000'
+        else:
+            self.theme.background_type = u'image'
+        self.stateChanging(self.theme)
+        self.generateImage(self.theme)
+
+    def onColor1PushButtonClicked(self):
+        self.theme.background_color1 = QtGui.QColorDialog.getColor(
+            QColor(self.theme.background_color1), self).name()
+        self.Color1PushButton.setStyleSheet(
+            'background-color: %s' % str(self.theme.background_color1))
+
+        self.generateImage(self.theme)
+
+    def onColor2PushButtonClicked(self):
+        self.theme.background_color2 = QtGui.QColorDialog.getColor(
+            QColor(self.theme.background_color2), self).name()
+        self.Color2PushButton.setStyleSheet(
+            'background-color: %s' % str(self.theme.background_color2))
+
+        self.generateImage(self.theme)
+
+    def onMainFontColorPushButtonClicked(self):
+        self.theme.font_main_color = QtGui.QColorDialog.getColor(
+            QColor(self.theme.font_main_color), self).name()
+
+        self.MainFontColorPushButton.setStyleSheet(
+            'background-color: %s' % str(self.theme.font_main_color))
+        self.generateImage(self.theme)
+
+    def onFontFooterColorPushButtonClicked(self):
+        self.theme.font_footer_color = QtGui.QColorDialog.getColor(
+            QColor(self.theme.font_footer_color), self).name()
+
+        self.FontFooterColorPushButton.setStyleSheet(
+            'background-color: %s' % str(self.theme.font_footer_color))
+        self.generateImage(self.theme)
+
+    def baseTheme(self):
+        log.debug(u'base Theme')
+        newtheme = ThemeXML()
+        newtheme.new_document(u'New Theme')
+        newtheme.add_background_solid(str(u'#000000'))
+        newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(30), u'False')
+        newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(12), u'False', u'footer')
+        newtheme.add_display(str(False), str(u'#FFFFFF'), str(False), str(u'#FFFFFF'),
+            str(0), str(0), str(0))
+
+        return newtheme.extract_xml()
+
+    def paintUi(self, theme):
+        print theme  # leave as helpful for initial development
+        self.stateChanging(theme)
+        self.BackgroundTypeComboBox.setCurrentIndex(0)
+        self.BackgroundComboBox.setCurrentIndex(0)
+        self.GradientComboBox.setCurrentIndex(0)
+        self.MainFontColorPushButton.setStyleSheet(
+            'background-color: %s' % str(theme.font_main_color))
+        self.FontFooterColorPushButton.setStyleSheet(
+            'background-color: %s' % str(theme.font_footer_color))
+
+    def stateChanging(self, theme):
+        if theme.background_type == u'solid':
+            self.Color1PushButton.setStyleSheet(
+                'background-color: %s' % str(theme.background_color1))
+            self.Color1Label.setText(translate(u'ThemeManager', u'Background Font:'))
+            self.Color1Label.setVisible(True)
+            self.Color1PushButton.setVisible(True)
+            self.Color2Label.setVisible(False)
+            self.Color2PushButton.setVisible(False)
+        elif theme.background_type == u'gradient':
+            self.Color1PushButton.setStyleSheet(
+                'background-color: %s' % str(theme.background_color1))
+            self.Color2PushButton.setStyleSheet(
+                'background-color: %s' % str(theme.background_color2))
+            self.Color1Label.setText(translate(u'ThemeManager', u'First  Color:'))
+            self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:'))
+            self.Color1Label.setVisible(True)
+            self.Color1PushButton.setVisible(True)
+            self.Color2Label.setVisible(True)
+            self.Color2PushButton.setVisible(True)
+        else: # must be image
+            self.Color1Label.setVisible(False)
+            self.Color1PushButton.setVisible(False)
+            self.Color2Label.setVisible(False)
+            self.Color2PushButton.setVisible(False)
+
+    def generateImage(self, theme):
+        log.debug(u'generateImage %s ',  theme)
+        #theme = ThemeXML()
+        #theme.parse(theme_xml)
+        #print theme
+        size=QtCore.QSize(800,600)
+        frame=TstFrame(size)
+        frame=frame
+        paintdest=frame.GetPixmap()
+        r=Renderer()
+        r.set_paint_dest(paintdest)
+
+        r.set_theme(theme) # set default theme
+        r._render_background()
+        r.set_text_rectangle(QtCore.QRect(0,0, size.width()-1, size.height()-1), QtCore.QRect(10,560, size.width()-1, size.height()-1))
+
+        lines=[]
+        lines.append(u'Amazing Grace!')
+        lines.append(u'How sweet the sound')
+        lines.append(u'To save a wretch like me;')
+        lines.append(u'I once was lost but now am found,')
+        lines.append(u'Was blind, but now I see.')
+        lines1=[]
+        lines1.append(u'Amazing Grace (John Newton)' )
+        lines1.append(u'CCLI xxx (c)Openlp.org')
+
+        answer=r._render_lines(lines, lines1)
+
+        self.ThemePreview.setPixmap(frame.GetPixmap())
+
+class TstFrame:
+    def __init__(self, size):
+        """Create the DemoPanel."""
+        self.width=size.width();
+        self.height=size.height();
+        # create something to be painted into
+        self._Buffer = QtGui.QPixmap(self.width, self.height)
+    def GetPixmap(self):
+        return self._Buffer

=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py	2009-03-01 14:36:49 +0000
+++ openlp/core/ui/generaltab.py	2009-04-10 05:59:40 +0000
@@ -28,8 +28,9 @@
     """
     GeneralTab is the general settings tab in the settings dialog.
     """
-    def __init__(self):
+    def __init__(self, screen_list):
         SettingsTab.__init__(self, translate(u'GeneralTab', u'General'))
+        self.screen_list = screen_list
 
     def setupUi(self):
         self.setObjectName(u'GeneralTab')

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2009-04-06 18:45:45 +0000
+++ openlp/core/ui/mainwindow.py	2009-04-09 18:50:20 +0000
@@ -37,12 +37,13 @@
     log=logging.getLogger(u'MainWindow')
     log.info(u'MainWindow loaded')
 
-    def __init__(self):
+    def __init__(self, screens):
         self.main_window = QtGui.QMainWindow()
+        self.screen_list = screens
         self.EventManager = EventManager()
         self.alert_form = AlertForm()
         self.about_form = AboutForm()
-        self.settings_form = SettingsForm()
+        self.settings_form = SettingsForm(self.screen_list)
 
         pluginpath = os.path.split(os.path.abspath(__file__))[0]
         pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins'))

=== modified file 'openlp/core/ui/settingsform.py'
--- openlp/core/ui/settingsform.py	2009-03-23 19:17:07 +0000
+++ openlp/core/ui/settingsform.py	2009-04-09 18:50:20 +0000
@@ -31,18 +31,18 @@
 
 class SettingsForm(QtGui.QDialog,  Ui_SettingsDialog):
 
-    def __init__(self, parent=None):
+    def __init__(self, screen_list, parent=None):
         QtGui.QDialog.__init__(self, parent)
         self.setupUi(self)
         # General tab
-        self.GeneralTab = GeneralTab()
+        self.GeneralTab = GeneralTab(screen_list)
         self.addTab(self.GeneralTab)
         # Themes tab
         self.ThemesTab = ThemesTab()
         self.addTab(self.ThemesTab)
         # Alert tab
         self.AlertsTab = AlertsTab()
-        self.addTab(self.AlertsTab)        
+        self.addTab(self.AlertsTab)
 
     def addTab(self, tab):
         log.info(u'Inserting %s' % tab.title())

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2009-04-07 19:45:21 +0000
+++ openlp/core/ui/thememanager.py	2009-04-11 15:16:02 +0000
@@ -128,7 +128,11 @@
         for i in self.items:
             yield i
 
-    def item(self, row):
+    def getValue(self, index):
+        row = index.row()
+        return self.items[row]
+
+    def getItem(self, row):
         log.info(u'Get Item:%d -> %s' %(row, str(self.items)))
         return self.items[row]
 
@@ -177,6 +181,7 @@
         self.themelist= []
         self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
         self.checkThemesExists(self.path)
+        self.amendThemeForm.themePath(self.path)
 
     def setEventManager(self, eventManager):
         self.eventManager = eventManager
@@ -186,7 +191,10 @@
         self.amendThemeForm.exec_()
 
     def onEditTheme(self):
-        self.amendThemeForm.loadTheme(theme)
+        items = self.ThemeListView.selectedIndexes()
+        for item in items:
+            data = self.Theme_data.getValue(item)
+            self.amendThemeForm.loadTheme(data[3])
         self.amendThemeForm.exec_()
 
     def onDeleteTheme(self):
@@ -276,8 +284,8 @@
         else:
             newtheme.add_background_image(str(t.BackgroundParameter1))
 
-        newtheme.add_font(str(t.FontName), str(t.FontColor.name()), str(t.FontProportion * 2))
-        newtheme.add_font(str(t.FontName), str(t.FontColor.name()), str(12), u'footer')
+        newtheme.add_font(str(t.FontName), str(t.FontColor.name()), str(t.FontProportion * 2), u'False')
+        newtheme.add_font(str(t.FontName), str(t.FontColor.name()), str(12), u'False', u'footer')
         outline = False
         shadow = False
         if t.Shadow == 1:
@@ -302,7 +310,7 @@
 
         r.set_theme(theme) # set default theme
         r._render_background()
-        r.set_text_rectangle(QtCore.QRect(0,0, size.width()-1, size.height()-1))
+        r.set_text_rectangle(QtCore.QRect(0,0, size.width()-1, size.height()-1), QtCore.QRect(10,560, size.width()-1, size.height()-1))
 
         lines=[]
         lines.append(u'Amazing Grace!')
@@ -310,17 +318,18 @@
         lines.append(u'To save a wretch like me;')
         lines.append(u'I once was lost but now am found,')
         lines.append(u'Was blind, but now I see.')
+        lines1=[]
+        lines1.append(u'Amazing Grace (John Newton)' )
+        lines1.append(u'CCLI xxx (c)Openlp.org')
 
-        answer=r._render_lines(lines)
-        r._get_extent_and_render(u'Amazing Grace (John Newton) ', (10, 560), True, None, True)
-        r._get_extent_and_render(u'CCLI xxx (c)Openlp.org', (10, 580), True, None, True)
+        answer=r._render_lines(lines, lines1)
 
         im=frame.GetPixmap().toImage()
-        testpathname=os.path.join(dir, name+u'.png')
-        if os.path.exists(testpathname):
-            os.unlink(testpathname)
-        im.save(testpathname, u'png')
-        log.debug(u'Theme image written to %s',testpathname)
+        samplepathname=os.path.join(dir, name+u'.png')
+        if os.path.exists(samplepathname):
+            os.unlink(samplepathname)
+        im.save(samplepathname, u'png')
+        log.debug(u'Theme image written to %s',samplepathname)
 
 
 class TstFrame:

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2009-03-22 07:13:34 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2009-04-10 06:06:41 +0000
@@ -24,7 +24,8 @@
 from PyQt4.QtGui import *
 
 from openlp.core.resources import *
-from openlp.core.lib import Plugin
+from openlp.core.lib import Plugin, Event
+from openlp.core.lib import EventType
 
 from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem
 from openlp.plugins.bibles.lib.tables import *
@@ -76,4 +77,13 @@
     def onBibleNewClick(self):
         self.bibleimportform = BibleImportForm(self.config, self.biblemanager, self)
         self.bibleimportform.exec_()
-        pass  
+        pass
+
+    def handle_event(self, event):
+        """
+        Handle the event contained in the event object.
+        """
+        log.debug(u'Handle event called with event %s'%event.event_type)
+        if event.event_type == EventType.ThemeListChanged:
+            log.debug(u'New Theme request received')
+            #self.edit_custom_form.loadThemes(self.theme_manager.getThemes())

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2009-04-07 19:03:36 +0000
+++ openlp/plugins/custom/customplugin.py	2009-04-10 06:06:41 +0000
@@ -56,7 +56,7 @@
         """
         Handle the event contained in the event object.
         """
-        log.debug(u'Handle event called with event %s' %event.event_type)
+        log.debug(u'Handle event called with event %s'%event.event_type)
         if event.event_type == EventType.ThemeListChanged:
             log.debug(u'New Theme request received')
             self.edit_custom_form.loadThemes(self.theme_manager.getThemes())

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2009-03-22 07:13:34 +0000
+++ openlp/plugins/songs/songsplugin.py	2009-04-10 06:06:41 +0000
@@ -22,7 +22,8 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.resources import *
-from openlp.core.lib import Plugin
+from openlp.core.lib import Plugin, Event
+from openlp.core.lib import EventType
 from openlp.plugins.songs.lib import SongManager, SongsTab, SongMediaItem
 from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \
     OpenSongImportForm, OpenLPExportForm
@@ -122,3 +123,12 @@
 
     def onExportOpenSongItemClicked(self):
         self.opensong_export_form.show()
+
+    def handle_event(self, event):
+        """
+        Handle the event contained in the event object.
+        """
+        log.debug(u'Handle event called with event %s'%event.event_type)
+        if event.event_type == EventType.ThemeListChanged:
+            log.debug(u'New Theme request received')
+            #self.edit_custom_form.loadThemes(self.theme_manager.getThemes())

=== added file 'resources/forms/amendthemedialog.ui'
--- resources/forms/amendthemedialog.ui	1970-01-01 00:00:00 +0000
+++ resources/forms/amendthemedialog.ui	2009-04-11 05:43:52 +0000
@@ -0,0 +1,729 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AmendThemeDialog</class>
+ <widget class="QWidget" name="AmendThemeDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>752</width>
+    <height>533</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Theme Maintance</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="../images/openlp-2.qrc">
+    <normaloff>:/icon/openlp.org-icon-32.bmp</normaloff>:/icon/openlp.org-icon-32.bmp</iconset>
+  </property>
+  <widget class="QDialogButtonBox" name="ThemeButtonBox">
+   <property name="geometry">
+    <rect>
+     <x>580</x>
+     <y>500</y>
+     <width>156</width>
+     <height>26</height>
+    </rect>
+   </property>
+   <property name="standardButtons">
+    <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+   </property>
+  </widget>
+  <widget class="QWidget" name="layoutWidget">
+   <property name="geometry">
+    <rect>
+     <x>50</x>
+     <y>20</y>
+     <width>441</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <layout class="QHBoxLayout" name="horizontalLayout">
+    <item>
+     <widget class="QLabel" name="ThemeNameLabel">
+      <property name="text">
+       <string>Theme Name</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QLineEdit" name="ThemeNameEdit"/>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QWidget" name="">
+   <property name="geometry">
+    <rect>
+     <x>31</x>
+     <y>71</y>
+     <width>721</width>
+     <height>411</height>
+    </rect>
+   </property>
+   <layout class="QHBoxLayout" name="horizontalLayout_2">
+    <item>
+     <widget class="QWidget" name="LeftSide" native="true">
+      <widget class="QTabWidget" name="tabWidget">
+       <property name="geometry">
+        <rect>
+         <x>0</x>
+         <y>0</y>
+         <width>341</width>
+         <height>401</height>
+        </rect>
+       </property>
+       <property name="currentIndex">
+        <number>0</number>
+       </property>
+       <widget class="QWidget" name="BackgroundTab">
+        <attribute name="title">
+         <string>Background</string>
+        </attribute>
+        <widget class="QWidget" name="layoutWidget">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>10</y>
+           <width>321</width>
+           <height>351</height>
+          </rect>
+         </property>
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0" colspan="2">
+           <widget class="QLabel" name="BackgroundLabel">
+            <property name="text">
+             <string>Background:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="2" colspan="2">
+           <widget class="QComboBox" name="BackgroundComboBox">
+            <item>
+             <property name="text">
+              <string>Opaque</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Transparent</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="1" column="0" colspan="2">
+           <widget class="QLabel" name="BackgroundTypeLabel">
+            <property name="text">
+             <string>Background Type:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2" colspan="2">
+           <widget class="QComboBox" name="BackgroundTypeComboBox">
+            <item>
+             <property name="text">
+              <string>Solid Color</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Gradient</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Image</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QLabel" name="Color1Label">
+            <property name="text">
+             <string>&lt;Color1&gt;</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="2" colspan="2">
+           <widget class="QPushButton" name="Color1PushButton">
+            <property name="text">
+             <string/>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0">
+           <widget class="QLabel" name="Color2Label">
+            <property name="text">
+             <string>&lt;Color2&gt;</string>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="2" colspan="2">
+           <widget class="QPushButton" name="Color2PushButton">
+            <property name="text">
+             <string/>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="0">
+           <widget class="QLabel" name="ImageLabel">
+            <property name="text">
+             <string>Image:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="1" colspan="2">
+           <widget class="QLineEdit" name="ImageLineEdit"/>
+          </item>
+          <item row="4" column="3">
+           <widget class="QPushButton" name="ImagePushButton">
+            <property name="text">
+             <string/>
+            </property>
+            <property name="icon">
+             <iconset resource="../images/openlp-2.qrc">
+              <normaloff>:/services/service_open.png</normaloff>:/services/service_open.png</iconset>
+            </property>
+           </widget>
+          </item>
+          <item row="5" column="0">
+           <widget class="QLabel" name="GradientLabel">
+            <property name="text">
+             <string>Gradient :</string>
+            </property>
+           </widget>
+          </item>
+          <item row="5" column="2" colspan="2">
+           <widget class="QComboBox" name="GradientComboBox">
+            <item>
+             <property name="text">
+              <string>Horizontal</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Vertical</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Circular</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+       <widget class="QWidget" name="FontMainTab">
+        <attribute name="title">
+         <string>Font Main</string>
+        </attribute>
+        <widget class="QGroupBox" name="MainFontGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>10</y>
+           <width>307</width>
+           <height>119</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Main Font</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0">
+           <widget class="QLabel" name="MainFontlabel">
+            <property name="text">
+             <string>Font:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1" colspan="2">
+           <widget class="QFontComboBox" name="MainFontComboBox"/>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="MainFontColorLabel">
+            <property name="text">
+             <string>Font Color</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2">
+           <widget class="QPushButton" name="MainFontColorPushButton">
+            <property name="text">
+             <string/>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QLabel" name="MainFontSize">
+            <property name="text">
+             <string>Size:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QLineEdit" name="MainFontSizeLineEdit"/>
+          </item>
+          <item row="2" column="2">
+           <widget class="QSlider" name="MainFontlSlider">
+            <property name="value">
+             <number>15</number>
+            </property>
+            <property name="maximum">
+             <number>40</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="tickPosition">
+             <enum>QSlider::TicksBelow</enum>
+            </property>
+            <property name="tickInterval">
+             <number>5</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+        <widget class="QGroupBox" name="FooterFontGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>160</y>
+           <width>301</width>
+           <height>190</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Display Location</string>
+         </property>
+         <layout class="QVBoxLayout" name="verticalLayout">
+          <item>
+           <widget class="QCheckBox" name="FontMainUseDefault">
+            <property name="text">
+             <string>Use default location</string>
+            </property>
+            <property name="tristate">
+             <bool>false</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_3">
+            <item>
+             <widget class="QLabel" name="FontMainXLabel">
+              <property name="text">
+               <string>X Position:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontMainXEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_4">
+            <item>
+             <widget class="QLabel" name="FontMainYLabel">
+              <property name="text">
+               <string>Y Position:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontMainYEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_5">
+            <item>
+             <widget class="QLabel" name="FontMainWidthLabel">
+              <property name="text">
+               <string>Width</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontMainWidthEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_6">
+            <item>
+             <widget class="QLabel" name="FontMainHeightLabel">
+              <property name="text">
+               <string>Height</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontMainHeightEdit"/>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+       <widget class="QWidget" name="FontFooterTab">
+        <attribute name="title">
+         <string>Font Footer</string>
+        </attribute>
+        <widget class="QGroupBox" name="FooterFontGroupBox_2">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>160</y>
+           <width>301</width>
+           <height>190</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Display Location</string>
+         </property>
+         <layout class="QVBoxLayout" name="verticalLayout_2">
+          <item>
+           <widget class="QCheckBox" name="FontMainUseDefault_2">
+            <property name="text">
+             <string>Use default location</string>
+            </property>
+            <property name="tristate">
+             <bool>false</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_7">
+            <item>
+             <widget class="QLabel" name="FontFooterXLabel">
+              <property name="text">
+               <string>X Position:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontFooterXEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_8">
+            <item>
+             <widget class="QLabel" name="FontFooterYLabel">
+              <property name="text">
+               <string>Y Position:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontFooterYEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_9">
+            <item>
+             <widget class="QLabel" name="FontFooterWidthLabel">
+              <property name="text">
+               <string>Width</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontFooterWidthEdit"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_10">
+            <item>
+             <widget class="QLabel" name="FontFooterHeightLabel">
+              <property name="text">
+               <string>Height</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="FontFooterHeightEdit"/>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+        <widget class="QGroupBox" name="FooterFontGroupBox_3">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>10</y>
+           <width>307</width>
+           <height>119</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Footer Font</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_3">
+          <item row="0" column="0">
+           <widget class="QLabel" name="FontFooterlabel">
+            <property name="text">
+             <string>Font:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1" colspan="2">
+           <widget class="QFontComboBox" name="FontFooterComboBox"/>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="FontFooterColorLabel">
+            <property name="text">
+             <string>Font Color</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2">
+           <widget class="QPushButton" name="FontFooterColorPushButton">
+            <property name="text">
+             <string/>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QLabel" name="FontFooterSizeLabel">
+            <property name="text">
+             <string>Size:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QLineEdit" name="FontFooterSizeLineEdit"/>
+          </item>
+          <item row="2" column="2">
+           <widget class="QSlider" name="FontFooterSlider">
+            <property name="value">
+             <number>15</number>
+            </property>
+            <property name="maximum">
+             <number>40</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="tickPosition">
+             <enum>QSlider::TicksBelow</enum>
+            </property>
+            <property name="tickInterval">
+             <number>5</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+       <widget class="QWidget" name="OptionsTab">
+        <attribute name="title">
+         <string>Alignment</string>
+        </attribute>
+        <widget class="QGroupBox" name="ShadowGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>10</y>
+           <width>301</width>
+           <height>80</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Shadow</string>
+         </property>
+         <widget class="QWidget" name="layoutWidget">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>20</y>
+            <width>281</width>
+            <height>58</height>
+           </rect>
+          </property>
+          <layout class="QFormLayout" name="formLayout">
+           <item row="0" column="0">
+            <widget class="QCheckBox" name="ShadowCheckBox">
+             <property name="text">
+              <string>Use Shadow</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="ShadowColorLabel">
+             <property name="text">
+              <string>Shadow Color:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QPushButton" name="ShadowColorPushButton">
+             <property name="text">
+              <string/>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </widget>
+        <widget class="QGroupBox" name="AlignmentGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>200</y>
+           <width>321</width>
+           <height>161</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Alignment</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_4">
+          <item row="0" column="0">
+           <widget class="QLabel" name="HorizontalLabel">
+            <property name="text">
+             <string>Horizontal Align:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QComboBox" name="HorizontalComboBox">
+            <item>
+             <property name="text">
+              <string>Left</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Right</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Center</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="VerticalLabel">
+            <property name="text">
+             <string>Vertical Align:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QComboBox" name="VerticalComboBox">
+            <item>
+             <property name="text">
+              <string>Top</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Middle</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Bottom</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+        <widget class="QGroupBox" name="OutlineGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>110</y>
+           <width>301</width>
+           <height>80</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>Outline</string>
+         </property>
+         <widget class="QWidget" name="layoutWidget_3">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>20</y>
+            <width>281</width>
+            <height>58</height>
+           </rect>
+          </property>
+          <layout class="QFormLayout" name="OutlineformLayout">
+           <item row="0" column="0">
+            <widget class="QCheckBox" name="OutlineCheckBox">
+             <property name="text">
+              <string>Use Outline</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="OutlineColorLabel">
+             <property name="text">
+              <string>Outline Color:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QPushButton" name="OutlineColorPushButton">
+             <property name="text">
+              <string/>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </widget>
+       </widget>
+      </widget>
+     </widget>
+    </item>
+    <item>
+     <widget class="QWidget" name="RightSide" native="true">
+      <widget class="QLabel" name="ThemePreview">
+       <property name="geometry">
+        <rect>
+         <x>20</x>
+         <y>60</y>
+         <width>311</width>
+         <height>271</height>
+        </rect>
+       </property>
+       <property name="frameShape">
+        <enum>QFrame::Box</enum>
+       </property>
+       <property name="frameShadow">
+        <enum>QFrame::Raised</enum>
+       </property>
+       <property name="lineWidth">
+        <number>2</number>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources>
+  <include location="../images/openlp-2.qrc"/>
+ </resources>
+ <connections/>
+</ui>


Follow ups