← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~openlp-w/openlp/secondTheme into lp:openlp

 

Christian Wöhr has proposed merging lp:~openlp-w/openlp/secondTheme into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~openlp-w/openlp/secondTheme/+merge/294047

This Branch has a Solution for dual language support of Songs.

It has an extension to the Themewizard and the Songedit (editverseform.py).

This way we are using a now reserved Tag secondTheme.
SecondTheme is using the CSS of a second Fontset that can be configured in the Theme via Themewizard.
This way you don't need to go through all songs in case you are changing the apparance of your service.


-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~openlp-w/openlp/secondTheme into lp:openlp.
=== modified file 'openlp/core/common/uistrings.py'
--- openlp/core/common/uistrings.py	2016-04-16 19:51:35 +0000
+++ openlp/core/common/uistrings.py	2016-05-06 20:11:35 +0000
@@ -78,6 +78,7 @@
         self.EmptyField = translate('OpenLP.Ui', 'Empty Field')
         self.Error = translate('OpenLP.Ui', 'Error')
         self.Export = translate('OpenLP.Ui', 'Export')
+        self.Format = translate('OpenLP.Ui', 'Format')
         self.File = translate('OpenLP.Ui', 'File')
         self.FileNotFound = translate('OpenLP.Ui', 'File Not Found')
         self.FileNotFoundMessage = translate('OpenLP.Ui', 'File %s not found.\nPlease try selecting it individually.')

=== modified file 'openlp/core/lib/formattingtags.py'
--- openlp/core/lib/formattingtags.py	2015-12-31 22:46:06 +0000
+++ openlp/core/lib/formattingtags.py	2016-05-06 20:11:35 +0000
@@ -22,10 +22,10 @@
 """
 Provide HTML Tag management and Formatting Tag access class
 """
-import json
+import json, os
 
-from openlp.core.common import Settings
-from openlp.core.lib import translate
+from openlp.core.common import Settings, AppLocation
+from openlp.core.lib import translate, theme, get_text_file_string
 
 
 class FormattingTags(object):
@@ -57,6 +57,26 @@
         """
         Load the Tags from store so can be used in the system or used to update the display.
         """
+        theme_data = theme.ThemeXML()
+        theme_data.path = AppLocation.get_section_data_path('themes')
+        theme_data.theme_name = Settings().value('servicemanager/service theme')
+        xml_file = os.path.join(theme_data.path, str(theme_data.theme_name), str(theme_data.theme_name) + '.xml')
+        xml = get_text_file_string(xml_file)
+        theme_data.parse(xml)
+        
+        text = '<span style="font:%spt %s; -webkit-text-fill-color:%s; ' % (theme_data.font_second_size, theme_data.font_second_name, theme_data.font_second_color)
+        text+= 'line-height: %spt;'  % (theme_data.font_second_line_adjustment)
+        if theme_data.font_second_italics:
+            text += 'font-style:italic; '
+        if theme_data.font_second_bold:
+            text += 'font-weight:bold; '
+        if theme_data.font_second_shadow:
+            text += 'text-shadow: %spt %spt %s; ' % (theme_data.font_second_shadow_size, theme_data.font_second_shadow_size, theme_data.font_second_shadow_color)
+        if theme_data.font_second_outline:
+            text += 'text-outline: %spt %spt %s; ' % (theme_data.font_second_outline_size, theme_data.font_second_outline_size, theme_data.font_second_outline_color)
+        text += 'text-nothing:%s; ' % (theme_data.theme_name)
+        text += '">'
+        
         temporary_tags = [tag for tag in FormattingTags.html_expands if tag.get('temporary')]
         FormattingTags.html_expands = []
         base_tags = []
@@ -150,6 +170,12 @@
             'start tag': '{br}', 'start html': '<br>', 'end tag': '',
             'end html': '', 'protected': True,
             'temporary': False})
+        base_tags.append({
+            'desc': translate('OpenLP.FormattingTags', 'secondary Theme'),
+            'start tag': '{secondTheme}',
+            'start html': text,
+            'end tag': '{/secondTheme}', 'end html': '</span>', 'protected': True,
+            'temporary': False})
         FormattingTags.add_html_tags(base_tags)
         FormattingTags.add_html_tags(temporary_tags)
         user_expands_string = str(Settings().value('formattingTags/html_tags'))

=== modified file 'openlp/core/lib/json/theme.json'
--- openlp/core/lib/json/theme.json	2013-10-18 18:10:47 +0000
+++ openlp/core/lib/json/theme.json	2016-05-06 20:11:35 +0000
@@ -53,6 +53,26 @@
             "width": 1004,
             "x": 10,
             "y": 10
+        },
+        "second": {
+            "bold": false,
+            "color": "#FFFFFF",
+            "height": 690,
+            "italics": false,
+            "line_adjustment": 0,
+            "location": "",
+            "name": "Arial",
+            "outline": false,
+            "outline_color": "#000000",
+            "outline_size": 2,
+            "override": false,
+            "shadow": true,
+            "shadow_color": "#000000",
+            "shadow_size": 5,
+            "size": 40,
+            "width": 1004,
+            "x": 10,
+            "y": 10
         }
     },
     "theme_name": ""

=== modified file 'openlp/core/lib/theme.py'
--- openlp/core/lib/theme.py	2015-12-31 22:46:06 +0000
+++ openlp/core/lib/theme.py	2016-05-06 20:11:35 +0000
@@ -318,6 +318,69 @@
         element.appendChild(value)
         background.appendChild(element)
 
+    def add_font2(self, name, color, size, override, fonttype='second', bold='False', italics='False',
+                 line_adjustment=0, xpos=0, ypos=0, width=0, height=0, outline='False', outline_color='#ffffff',
+                 outline_pixel=2, shadow='False', shadow_color='#ffffff', shadow_pixel=5):
+        """
+        Add a Font.
+
+        :param name: The name of the font.
+        :param color: The colour of the font.
+        :param size: The size of the font.
+        :param override: Whether or not to override the default positioning of the theme.
+        :param fonttype: The type of font, ``main`` or ``footer``. Defaults to ``main``.
+        :param bold:
+        :param italics: The weight of then font Defaults to 50 Normal
+        :param line_adjustment: Does the font render to italics Defaults to 0 Normal
+        :param xpos: The X position of the text block.
+        :param ypos: The Y position of the text block.
+        :param width: The width of the text block.
+        :param height: The height of the text block.
+        :param outline: Whether or not to show an outline.
+        :param outline_color: The colour of the outline.
+        :param outline_pixel:  How big the Shadow is
+        :param shadow: Whether or not to show a shadow.
+        :param shadow_color: The colour of the shadow.
+        :param shadow_pixel: How big the Shadow is
+        """
+        background = self.theme_xml.createElement('font')
+        background.setAttribute('type', fonttype)
+        self.theme.appendChild(background)
+        # Create Font name element
+        self.child_element(background, 'name', name)
+        # Create Font color element
+        self.child_element(background, 'color', str(color))
+        # Create Proportion name element
+        self.child_element(background, 'size', str(size))
+        # Create weight name element
+        self.child_element(background, 'bold', str(bold))
+        # Create italics name element
+        self.child_element(background, 'italics', str(italics))
+        # Create indentation name element
+        self.child_element(background, 'line_adjustment', str(line_adjustment))
+        # Create Location element
+        element = self.theme_xml.createElement('location')
+        element.setAttribute('override', str(override))
+        element.setAttribute('x', str(xpos))
+        element.setAttribute('y', str(ypos))
+        element.setAttribute('width', str(width))
+        element.setAttribute('height', str(height))
+        background.appendChild(element)
+        # Shadow
+        element = self.theme_xml.createElement('shadow')
+        element.setAttribute('shadowColor', str(shadow_color))
+        element.setAttribute('shadowSize', str(shadow_pixel))
+        value = self.theme_xml.createTextNode(str(shadow))
+        element.appendChild(value)
+        background.appendChild(element)
+        # Outline
+        element = self.theme_xml.createElement('outline')
+        element.setAttribute('outlineColor', str(outline_color))
+        element.setAttribute('outlineSize', str(outline_pixel))
+        value = self.theme_xml.createTextNode(str(outline))
+        element.appendChild(value)
+        background.appendChild(element)
+
     def add_display(self, horizontal, vertical, transition):
         """
         Add a Display options.
@@ -427,6 +490,16 @@
                     master = parent.tag
                 if parent.tag == 'background':
                     master = parent.tag
+            if parent is not None:
+                if parent.tag == 'font2':
+                    master = parent.tag + '_' + parent.attrib['type']
+                # set up Outline and Shadow Tags and move to font_main
+                if parent.tag == 'display':
+                    if element.tag.startswith('shadow') or element.tag.startswith('outline'):
+                        self._create_attr('font_second', element.tag, element.text)
+                    master = parent.tag
+                if parent.tag == 'background':
+                    master = parent.tag
             if master:
                 self._create_attr(master, element.tag, element.text)
                 if element.attrib:
@@ -533,6 +606,25 @@
             self.font_main_shadow_color,
             self.font_main_shadow_size
         )
+        self.add_font2(
+            self.font_second_name,
+            self.font_second_color,
+            self.font_second_size,
+            self.font_second_override, 'second',
+            self.font_second_bold,
+            self.font_second_italics,
+            self.font_second_line_adjustment,
+            self.font_second_x,
+            self.font_second_y,
+            self.font_second_width,
+            self.font_second_height,
+            self.font_second_outline,
+            self.font_second_outline_color,
+            self.font_second_outline_size,
+            self.font_second_shadow,
+            self.font_second_shadow_color,
+            self.font_second_shadow_size
+        )
         self.add_font(
             self.font_footer_name,
             self.font_footer_color,

=== modified file 'openlp/core/ui/themeform.py'
--- openlp/core/ui/themeform.py	2016-04-17 18:57:03 +0000
+++ openlp/core/ui/themeform.py	2016-05-06 20:11:35 +0000
@@ -28,6 +28,7 @@
 from PyQt5 import QtCore, QtGui, QtWidgets
 
 from openlp.core.common import Registry, RegistryProperties, UiStrings, translate, get_images_filter, is_not_image_file
+from openlp.core.lib import FormattingTags
 from openlp.core.lib.theme import BackgroundType, BackgroundGradientType
 from openlp.core.lib.ui import critical_error_message_box
 from openlp.core.ui import ThemeLayoutForm
@@ -71,8 +72,11 @@
         self.image_browse_button.clicked.connect(self.on_image_browse_button_clicked)
         self.image_file_edit.editingFinished.connect(self.on_image_file_edit_editing_finished)
         self.main_color_button.colorChanged.connect(self.on_main_color_changed)
+        self.main_color_button_6.colorChanged.connect(self.on_second_color_changed)
         self.outline_color_button.colorChanged.connect(self.on_outline_color_changed)
+        self.outline_color_button_7.colorChanged.connect(self.on_second_outline_color_changed)
         self.shadow_color_button.colorChanged.connect(self.on_shadow_color_changed)
+        self.shadow_color_button_7.colorChanged.connect(self.on_second_shadow_color_changed)
         self.outline_check_box.stateChanged.connect(self.on_outline_check_check_box_state_changed)
         self.shadow_check_box.stateChanged.connect(self.on_shadow_check_check_box_state_changed)
         self.footer_color_button.colorChanged.connect(self.on_footer_color_changed)
@@ -96,6 +100,7 @@
         self.restart()
         self.set_background_page_values()
         self.set_main_area_page_values()
+        self.set_second_area_page_values()
         self.set_footer_area_page_values()
         self.set_alignment_page_values()
         self.set_position_page_values()
@@ -123,6 +128,17 @@
         self.main_area_page.registerField('shadow_color_button', self.shadow_color_button)
         self.main_area_page.registerField('shadow_size_spin_box', self.shadow_size_spin_box)
         self.main_area_page.registerField('footer_size_spin_box', self.footer_size_spin_box)
+        self.second_area_page.registerField('main_size_spin_box_6', self.main_size_spin_box_6)
+        self.second_area_page.registerField('main_color_button_6', self.main_color_button_6)
+        self.second_area_page.registerField('line_spacing_spin_box_2', self.line_spacing_spin_box_2)
+        self.second_area_page.registerField('outline_check_box_2', self.outline_check_box_2)
+        self.second_area_page.registerField('outline_color_button_7', self.outline_color_button_7)
+        self.second_area_page.registerField('outline_size_spin_box_7', self.outline_size_spin_box_7)
+        self.second_area_page.registerField('shadow_check_box_2', self.shadow_check_box_2)
+        self.second_area_page.registerField('main_bold_check_box_6', self.main_bold_check_box_6)
+        self.second_area_page.registerField('main_italics_check_box_6', self.main_italics_check_box_6)
+        self.second_area_page.registerField('shadow_color_button_7', self.shadow_color_button_7)
+        self.second_area_page.registerField('shadow_size_spin_box_7', self.shadow_size_spin_box_7);
         self.area_position_page.registerField('main_position_x', self.main_x_spin_box)
         self.area_position_page.registerField('main_position_y', self.main_y_spin_box)
         self.area_position_page.registerField('main_position_width', self.main_width_spin_box)
@@ -285,6 +301,8 @@
             self.set_background_page_values()
         elif wizard_page == self.main_area_page:
             self.set_main_area_page_values()
+        elif wizard_page == self.second_area_page:
+            self.set_second_area_page_values()
         elif wizard_page == self.footer_area_page:
             self.set_footer_area_page_values()
         elif wizard_page == self.alignment_page:
@@ -337,6 +355,25 @@
         self.setField('main_bold_check_box', self.theme.font_main_bold)
         self.setField('main_italics_check_box', self.theme.font_main_italics)
 
+    def set_second_area_page_values(self):
+        """
+        Handle the display and state of the Main Area page.
+        """
+        self.second_font_combo_box.setCurrentFont(QtGui.QFont(self.theme.font_second_name))
+
+        self.setField('main_size_spin_box_6', self.theme.font_second_size)
+        self.main_color_button_6.color = self.theme.font_second_color;
+        self.setField('line_spacing_spin_box_2', self.theme.font_second_line_adjustment)
+        self.setField('outline_check_box_2', self.theme.font_second_outline)
+        self.outline_color_button.color_7 = self.theme.font_second_outline_color
+        self.setField('outline_size_spin_box_7', self.theme.font_second_outline_size)
+        self.setField('shadow_check_box_2', self.theme.font_second_shadow)
+        self.shadow_color_button_7.color = self.theme.font_second_shadow_color
+        self.setField('shadow_size_spin_box_7', self.theme.font_second_shadow_size)
+        self.setField('main_bold_check_box_6', self.theme.font_second_bold)
+        self.setField('main_italics_check_box_6', self.theme.font_second_italics)
+
+
     def set_footer_area_page_values(self):
         """
         Handle the display and state of the Footer Area page.
@@ -450,18 +487,36 @@
         """
         self.theme.font_main_color = color
 
+    def on_second_color_changed(self, color):
+        """
+        Set the main colour value
+        """
+        self.theme.font_second_color = color
+
     def on_outline_color_changed(self, color):
         """
         Set the outline colour value
         """
         self.theme.font_main_outline_color = color
 
+    def on_second_outline_color_changed(self, color):
+        """
+        Set the outline colour value
+        """
+        self.theme.font_second_outline_color = color
+
     def on_shadow_color_changed(self, color):
         """
         Set the shadow colour value
         """
         self.theme.font_main_shadow_color = color
 
+    def on_second_shadow_color_changed(self, color):
+        """
+        Set the shadow colour value
+        """
+        self.theme.font_second_shadow_color = color
+
     def on_footer_color_changed(self, color):
         """
         Set the footer colour value
@@ -484,6 +539,13 @@
         self.theme.font_main_shadow_size = self.field('shadow_size_spin_box')
         self.theme.font_main_bold = self.field('main_bold_check_box')
         self.theme.font_main_italics = self.field('main_italics_check_box')
+        self.theme.font_second_name = self.second_font_combo_box.currentFont().family()
+        self.theme.font_second_size = self.field('main_size_spin_box_6')
+        self.theme.font_second_line_adjustment = self.field('line_spacing_spin_box_2')
+        self.theme.font_second_outline_size = self.field('outline_size_spin_box_7')
+        self.theme.font_second_shadow_size = self.field('shadow_size_spin_box_7')
+        self.theme.font_second_bold = self.field('main_bold_check_box_6')
+        self.theme.font_second_italics = self.field('main_italics_check_box_6')
         # footer page
         self.theme.font_footer_name = self.footer_font_combo_box.currentFont().family()
         self.theme.font_footer_size = self.field('footer_size_spin_box')
@@ -526,4 +588,5 @@
         if not self.edit_mode and not self.theme_manager.check_if_theme_exists(self.theme.theme_name):
             return
         self.theme_manager.save_theme(self.theme, save_from, save_to)
+        FormattingTags.load_tags()
         return QtWidgets.QDialog.accept(self)

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2016-04-17 19:32:15 +0000
+++ openlp/core/ui/thememanager.py	2016-05-06 20:11:35 +0000
@@ -32,7 +32,7 @@
 from openlp.core.common import Registry, RegistryProperties, AppLocation, Settings, OpenLPMixin, RegistryMixin, \
     check_directory_exists, UiStrings, translate, is_win, get_filesystem_encoding, delete_file
 from openlp.core.lib import FileDialog, ImageSource, ValidationError, get_text_file_string, build_icon, \
-    check_item_selected, create_thumb, validate_thumb
+    check_item_selected, create_thumb, validate_thumb, FormattingTags
 from openlp.core.lib.theme import ThemeXML, BackgroundType
 from openlp.core.lib.ui import critical_error_message_box, create_widget_action
 from openlp.core.ui import FileRenameForm, ThemeForm
@@ -626,6 +626,7 @@
         :param image_from: Where the theme image is currently located.
         :param image_to: Where the Theme Image is to be saved to
         """
+        FormattingTags().load_tags()
         self._write_theme(theme, image_from, image_to)
         if theme.background_type == BackgroundType.to_string(BackgroundType.Image):
             self.image_manager.update_image_border(theme.background_filename,

=== modified file 'openlp/core/ui/themewizard.py'
--- openlp/core/ui/themewizard.py	2016-04-17 18:57:03 +0000
+++ openlp/core/ui/themewizard.py	2016-05-06 20:11:35 +0000
@@ -217,6 +217,90 @@
         self.shadow_layout.addWidget(self.shadow_size_spin_box)
         self.main_area_layout.addRow(self.shadow_check_box, self.shadow_layout)
         theme_wizard.addPage(self.main_area_page)
+        # Second Area Page
+
+        self.second_area_page = QtWidgets.QWizardPage()
+        self.second_area_page.setObjectName('second_area_page')
+        self.second_area_layout_7 = QtWidgets.QFormLayout(self.second_area_page)
+        self.second_area_layout_7.setObjectName('second_area_layout_7')
+        self.second_font_label = QtWidgets.QLabel(self.second_area_page)
+        self.second_font_label.setObjectName('main_font_label_2')
+        self.second_font_combo_box = QtWidgets.QFontComboBox(self.second_area_page)
+        self.second_font_combo_box.setObjectName('second_font_combo_box')
+        self.second_area_layout_7.addRow(self.second_font_label, self.second_font_combo_box)
+        self.second_color_label = QtWidgets.QLabel(self.second_area_page)
+        self.second_color_label.setObjectName('main_color_label_2')
+        self.second_properties_layout = QtWidgets.QHBoxLayout()
+        self.second_properties_layout.setObjectName('second_properties_layout')
+        self.main_color_button_6 = ColorButton(self.second_area_page)
+        self.main_color_button_6.setObjectName('main_color_button_6')
+        self.second_properties_layout.addWidget(self.main_color_button_6)
+        self.second_properties_layout.addSpacing(20)
+        self.main_bold_check_box_6 = QtWidgets.QCheckBox(self.second_area_page)
+        self.main_bold_check_box_6.setObjectName('main_bold_check_box_6')
+        self.second_properties_layout.addWidget(self.main_bold_check_box_6)
+        self.second_properties_layout.addSpacing(20)
+        self.main_italics_check_box_6 = QtWidgets.QCheckBox(self.second_area_page)
+        self.main_italics_check_box_6.setObjectName('main_italics_check_box_6')
+        self.second_properties_layout.addWidget(self.main_italics_check_box_6)
+        self.second_area_layout_7.addRow(self.second_color_label, self.second_properties_layout)
+        self.second_size_label = QtWidgets.QLabel(self.second_area_page)
+        self.second_size_label.setObjectName('main_size_label')
+        self.main_size_layout_6 = QtWidgets.QHBoxLayout()
+        self.main_size_layout_6.setObjectName('second_size_layout')
+        self.main_size_spin_box_6 = QtWidgets.QSpinBox(self.second_area_page)
+        self.main_size_spin_box_6.setMaximum(999)
+        self.main_size_spin_box_6.setValue(16)
+        self.main_size_spin_box_6.setObjectName('main_size_spin_box_6')
+        self.main_size_layout_6.addWidget(self.main_size_spin_box_6)
+        self.main_line_count_label_6 = QtWidgets.QLabel(self.second_area_page)
+        self.main_line_count_label_6.setObjectName('main_line_count_label')
+        self.main_size_layout_6.addWidget(self.main_line_count_label_6)
+        self.second_area_layout_7.addRow(self.second_size_label, self.main_size_layout_6)
+
+        self.line_spacing_label_2 = QtWidgets.QLabel(self.second_area_page)
+        self.line_spacing_label_2.setObjectName('line_spacing_label')
+        self.line_spacing_spin_box_2 = QtWidgets.QSpinBox(self.second_area_page)
+        self.line_spacing_spin_box_2.setMinimum(-250)
+        self.line_spacing_spin_box_2.setMaximum(250)
+        self.line_spacing_spin_box_2.setObjectName('line_spacing_spin_box_2')
+        self.second_area_layout_7.addRow(self.line_spacing_label_2, self.line_spacing_spin_box_2)
+        self.outline_check_box_2 = QtWidgets.QCheckBox(self.second_area_page)
+        self.outline_check_box_2.setObjectName('outline_check_box_2')
+        self.outline_layout_7 = QtWidgets.QHBoxLayout()
+        self.outline_layout_7.setObjectName('outline_layout_7')
+        self.outline_color_button_7 = ColorButton(self.second_area_page)
+        self.outline_color_button_7.setEnabled(False)
+        self.outline_color_button_7.setObjectName('outline_color_button_7')
+        self.outline_layout_7.addWidget(self.outline_color_button_7)
+        self.outline_layout_7.addSpacing(20)
+        self.outline_size_label_7 = QtWidgets.QLabel(self.second_area_page)
+        self.outline_size_label_7.setObjectName('outline_size_label')
+        self.outline_layout_7.addWidget(self.outline_size_label_7)
+        self.outline_size_spin_box_7 = QtWidgets.QSpinBox(self.second_area_page)
+        self.outline_size_spin_box_7.setEnabled(False)
+        self.outline_size_spin_box_7.setObjectName('outline_size_spin_box_7')
+        self.outline_layout_7.addWidget(self.outline_size_spin_box_7)
+        self.second_area_layout_7.addRow(self.outline_check_box_2, self.outline_layout_7)
+        self.shadow_check_box_2 = QtWidgets.QCheckBox(self.second_area_page)
+        self.shadow_check_box_2.setObjectName('shadow_check_box_2')
+        self.shadow_layout_7 = QtWidgets.QHBoxLayout()
+        self.shadow_layout_7.setObjectName('shadow_layout_7')
+        self.shadow_color_button_7 = ColorButton(self.second_area_page)
+        self.shadow_color_button_7.setEnabled(False)
+        self.shadow_color_button_7.setObjectName('shadow_color_button_7')
+        self.shadow_layout_7.addWidget(self.shadow_color_button_7)
+        self.shadow_layout_7.addSpacing(20)
+        self.shadow_size_label_7 = QtWidgets.QLabel(self.second_area_page)
+        self.shadow_size_label_7.setObjectName('shadow_size_label')
+        self.shadow_layout_7.addWidget(self.shadow_size_label_7)
+        self.shadow_size_spin_box_7 = QtWidgets.QSpinBox(self.second_area_page)
+        self.shadow_size_spin_box_7.setEnabled(False)
+        self.shadow_size_spin_box_7.setObjectName('shadow_size_spin_box_7')
+        self.shadow_layout_7.addWidget(self.shadow_size_spin_box_7)
+        self.second_area_layout_7.addRow(self.shadow_check_box_2, self.shadow_layout_7)
+        theme_wizard.addPage(self.second_area_page)
+
         # Footer Area Page
         self.footer_area_page = QtWidgets.QWizardPage()
         self.footer_area_page.setObjectName('footer_area_page')
@@ -365,8 +449,12 @@
         self.background_combo_box.currentIndexChanged.connect(self.background_stack.setCurrentIndex)
         self.outline_check_box.toggled.connect(self.outline_color_button.setEnabled)
         self.outline_check_box.toggled.connect(self.outline_size_spin_box.setEnabled)
+        self.outline_check_box_2.toggled.connect(self.outline_color_button_7.setEnabled)
+        self.outline_check_box_2.toggled.connect(self.outline_size_spin_box_7.setEnabled)
         self.shadow_check_box.toggled.connect(self.shadow_color_button.setEnabled)
         self.shadow_check_box.toggled.connect(self.shadow_size_spin_box.setEnabled)
+        self.shadow_check_box_2.toggled.connect(self.shadow_color_button_7.setEnabled)
+        self.shadow_check_box_2.toggled.connect(self.shadow_size_spin_box_7.setEnabled)
         self.main_position_check_box.toggled.connect(self.main_x_spin_box.setDisabled)
         self.main_position_check_box.toggled.connect(self.main_y_spin_box.setDisabled)
         self.main_position_check_box.toggled.connect(self.main_width_spin_box.setDisabled)
@@ -430,6 +518,23 @@
         self.shadow_size_spin_box.setSuffix(UiStrings().FontSizePtUnit)
         self.main_bold_check_box.setText(translate('OpenLP.ThemeWizard', 'Bold'))
         self.main_italics_check_box.setText(translate('OpenLP.ThemeWizard', 'Italic'))
+        self.second_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Second Area Font Details'))
+        self.second_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
+                                                  'characteristics for the secondary Display text'))
+        self.second_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:'))
+        self.second_color_label.setText(translate('OpenLP.ThemeWizard', 'color:'))
+        self.second_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:'))
+        self.main_size_spin_box_6.setSuffix(UiStrings().FontSizePtUnit)
+        self.line_spacing_label_2.setText(translate('OpenLP.ThemeWizard', 'Line Spacing:'))
+        self.line_spacing_spin_box_2.setSuffix(UiStrings().FontSizePtUnit)
+        self.outline_check_box_2.setText(translate('OpenLP.ThemeWizard', '&Outline:'))
+        self.outline_size_label_7.setText(translate('OpenLP.ThemeWizard', 'Size:'))
+        self.outline_size_spin_box_7.setSuffix(UiStrings().FontSizePtUnit)
+        self.shadow_check_box_2.setText(translate('OpenLP.ThemeWizard', '&Shadow:'))
+        self.shadow_size_label_7.setText(translate('OpenLP.ThemeWizard', 'Size:'))
+        self.shadow_size_spin_box_7.setSuffix(UiStrings().FontSizePtUnit)
+        self.main_bold_check_box_6.setText(translate('OpenLP.ThemeWizard', 'Bold'))
+        self.main_italics_check_box_6.setText(translate('OpenLP.ThemeWizard', 'Italic'))
         self.footer_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Footer Area Font Details'))
         self.footer_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
                                                     'characteristics for the Footer text'))

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2015-12-31 22:46:06 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2016-05-06 20:11:35 +0000
@@ -40,6 +40,9 @@
         self.dialog_layout.addWidget(self.verse_text_edit)
         self.verse_type_layout = QtWidgets.QHBoxLayout()
         self.verse_type_layout.setObjectName('verse_type_layout')
+        self.format_button = QtWidgets.QPushButton(edit_verse_dialog)
+        self.format_button.setObjectName('format_button')
+        self.verse_type_layout.addWidget(self.format_button);
         self.split_button = QtWidgets.QPushButton(edit_verse_dialog)
         self.split_button.setIcon(build_icon(':/general/general_add.png'))
         self.split_button.setObjectName('split_button')
@@ -78,6 +81,7 @@
         self.verse_type_combo_box.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other])
         self.split_button.setText(UiStrings().Split)
         self.split_button.setToolTip(UiStrings().SplitToolTip)
+        self.format_button.setText(UiStrings().Format)
         self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert'))
         self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm',
                                       'Split a slide into two by inserting a verse splitter.'))

=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py	2016-01-09 16:26:14 +0000
+++ openlp/plugins/songs/forms/editverseform.py	2016-05-06 20:11:35 +0000
@@ -46,6 +46,7 @@
         self.has_single_verse = False
         self.insert_button.clicked.connect(self.on_insert_button_clicked)
         self.split_button.clicked.connect(self.on_split_button_clicked)
+        self.format_button.clicked.connect(self.on_format_button_clicked)
         self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
         self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed)
 
@@ -169,3 +170,77 @@
         if not text.startswith('---['):
             text = '---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text)
         return text
+
+    def on_format_button_clicked(self):
+        text = self.verse_text_edit.toPlainText()
+        position = self.verse_text_edit.textCursor().position()
+        length = len(text)
+        textarray = text.splitlines()
+        textarray2 = []
+        counter = 0
+        slot_counter = -1
+        slot_counter2 = 0
+        slot = 0
+        line2 = ""
+        newtext = ""
+        for line in textarray:
+            counter += len(line)+1
+            line2 = line.replace(" ","")
+            newtext += line+'\n'
+            if len(line2) == 0 or line2.find('[---]')>-1 or line2.find('---[')>-1 or line2.find('{/secondTheme}')>-1:
+                if counter >= position:
+                    if slot_counter == -1:
+                        slot_counter = slot
+                textarray2.append(newtext)
+                newtext = ""
+                slot += 1
+        textarray2.append(newtext)
+        new = textarray2[slot_counter]
+        slot_counter2 = slot_counter +1
+        match =''.join(textarray2[slot_counter2:])
+        match.replace(" ","")
+        match.replace("\n","")
+        if new.find("{secondTheme}")>-1:
+            if new.find("{/secondTheme}")>-1:
+                new = new.replace("{/secondTheme}\n","\n")
+                new = new.replace("{secondTheme}","")
+                new = new.replace("{/secondTheme}","")
+        else:
+            if new.endswith('[---]\n'):
+                new = new.replace('[---]',"")
+                if new.find('---[')>-1:
+                    temp = "{secondTheme}" + new[:new.find('---[')] + "{/secondTheme}" + new[new.find('---['):]
+                else:
+                    temp = "{secondTheme}" + new + "{/secondTheme}"
+                temp = temp.replace("\n\n{/secondTheme}","{/secondTheme}\n[---]\n")
+                new = temp
+            else:
+                if new.startswith('[---]'):
+                        temp = "[---]" + "{secondTheme}" + new + "{/secondTheme}"
+                        temp = temp.replace("\n\n{/secondTheme}","{/secondTheme}\n\n")
+                        new = temp
+                else:
+                    if match == '':
+                        if new.find('---[')>-1:
+                            temp = "{secondTheme}" + new[:new.find('---[')] + "{/secondTheme}\n" + new[new.find('---['):]
+                        else:
+                            temp = "{secondTheme}" + new + "{/secondTheme}"
+                        temp = temp.replace("\n\n{/secondTheme}","{/secondTheme}")
+                        temp = temp.replace("\n{/secondTheme}","{/secondTheme}")
+                        temp = temp.replace("\n\n---[","\n---[")
+                        new = temp
+                    else:
+                        if new.find('---[')>-1:
+                            temp = "{secondTheme}" + new[:new.find('---[')] + "{/secondTheme}\n" + new[new.find('---['):]
+                        else:
+                            temp = "{secondTheme}" + new + "{/secondTheme}"
+                        temp = temp.replace("\n\n{/secondTheme}","{/secondTheme}\n\n")
+                        temp = temp.replace("\n{/secondTheme}","{/secondTheme}\n")
+                        temp = temp.replace("\n\n---[","\n---[")
+                        new = temp
+        textarray2[slot_counter] = new
+        self.verse_text_edit.setPlainText(''.join(textarray2))
+        textCursor = self.verse_text_edit.textCursor()
+        textCursor.setPosition(position)
+        self.verse_text_edit.setTextCursor(textCursor)
+        self.verse_text_edit.setFocus()

=== modified file 'resources/forms/editversedialog.ui'
--- resources/forms/editversedialog.ui	2010-09-14 18:18:47 +0000
+++ resources/forms/editversedialog.ui	2016-05-06 20:11:35 +0000
@@ -20,7 +20,16 @@
    <property name="spacing">
     <number>8</number>
    </property>
-   <property name="margin">
+   <property name="leftMargin">
+    <number>8</number>
+   </property>
+   <property name="topMargin">
+    <number>8</number>
+   </property>
+   <property name="rightMargin">
+    <number>8</number>
+   </property>
+   <property name="bottomMargin">
     <number>8</number>
    </property>
    <item>
@@ -85,17 +94,6 @@
       <widget class="QSpinBox" name="VerseNumberBox"/>
      </item>
      <item>
-      <widget class="QPushButton" name="InsertButton">
-       <property name="text">
-        <string>Insert</string>
-       </property>
-       <property name="icon">
-        <iconset resource="../images/openlp-2.qrc">
-         <normaloff>:/general/general_add.png</normaloff>:/general/general_add.png</iconset>
-       </property>
-      </widget>
-     </item>
-     <item>
       <spacer name="VerseTypeSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -108,6 +106,24 @@
        </property>
       </spacer>
      </item>
+     <item>
+      <widget class="QPushButton" name="secondary">
+       <property name="text">
+        <string>secondary</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="InsertButton">
+       <property name="text">
+        <string>Insert</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../images/openlp-2.qrc">
+         <normaloff>:/general/general_add.png</normaloff>:/general/general_add.png</iconset>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>

=== modified file 'resources/forms/themewizard.ui'
--- resources/forms/themewizard.ui	2010-12-27 21:53:02 +0000
+++ resources/forms/themewizard.ui	2016-05-06 20:11:35 +0000
@@ -34,6 +34,16 @@
      <number>8</number>
     </property>
     <property name="margin">
+    <property name="leftMargin">
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+     <number>0</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+    </property>
+    <property name="bottomMargin">
      <number>0</number>
     </property>
     <item>
@@ -138,6 +148,16 @@
      <number>8</number>
     </property>
     <property name="margin">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
+    </property>
+    <property name="rightMargin">
+     <number>20</number>
+    </property>
+    <property name="bottomMargin">
      <number>20</number>
     </property>
     <item>
@@ -150,6 +170,9 @@
         <property name="text">
          <string>Background type:</string>
         </property>
+        <property name="buddy">
+         <cstring>backgroundTypeComboBox</cstring>
+        </property>
        </widget>
       </item>
       <item>
@@ -190,6 +213,7 @@
      <widget class="QStackedWidget" name="backgroundStackedWidget">
       <property name="currentIndex">
        <number>0</number>
+       <number>2</number>
       </property>
       <widget class="QWidget" name="colorPage">
        <layout class="QFormLayout" name="colorLayout">
@@ -200,6 +224,16 @@
          <number>8</number>
         </property>
         <property name="margin">
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
          <number>0</number>
         </property>
         <item row="0" column="0">
@@ -216,6 +250,9 @@
           <property name="alignment">
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
+          <property name="buddy">
+           <cstring>colorButton</cstring>
+          </property>
          </widget>
         </item>
         <item row="0" column="1">
@@ -236,6 +273,16 @@
          <number>8</number>
         </property>
         <property name="margin">
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
          <number>0</number>
         </property>
         <item row="0" column="0">
@@ -252,6 +299,9 @@
           <property name="alignment">
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
+          <property name="buddy">
+           <cstring>gradientStartButton</cstring>
+          </property>
          </widget>
         </item>
         <item row="0" column="1">
@@ -275,6 +325,9 @@
           <property name="alignment">
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
+          <property name="buddy">
+           <cstring>gradientEndButton</cstring>
+          </property>
          </widget>
         </item>
         <item row="1" column="1">
@@ -298,6 +351,9 @@
           <property name="alignment">
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
+          <property name="buddy">
+           <cstring>gradientComboBox</cstring>
+          </property>
          </widget>
         </item>
         <item row="2" column="1">
@@ -340,6 +396,16 @@
          <number>8</number>
         </property>
         <property name="margin">
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
          <number>0</number>
         </property>
         <item row="0" column="0">
@@ -356,6 +422,9 @@
           <property name="alignment">
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
+          <property name="buddy">
+           <cstring>imageLineEdit</cstring>
+          </property>
          </widget>
         </item>
         <item row="0" column="1">
@@ -395,13 +464,25 @@
    <layout class="QFormLayout" name="mainAreaLayout">
     <property name="horizontalSpacing">
      <number>8</number>
+   <layout class="QGridLayout" name="gridLayout">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
     </property>
     <property name="verticalSpacing">
      <number>8</number>
+    <property name="rightMargin">
+     <number>20</number>
     </property>
     <property name="margin">
+    <property name="bottomMargin">
      <number>20</number>
     </property>
+    <property name="spacing">
+     <number>8</number>
+    </property>
     <item row="0" column="0">
      <widget class="QLabel" name="mainFontLabel">
       <property name="minimumSize">
@@ -416,6 +497,9 @@
       <property name="alignment">
        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
       </property>
+      <property name="buddy">
+       <cstring>mainFontComboBox</cstring>
+      </property>
      </widget>
     </item>
     <item row="0" column="1">
@@ -426,6 +510,9 @@
       <property name="text">
        <string>Color:</string>
       </property>
+      <property name="buddy">
+       <cstring>mainColorPushButton</cstring>
+      </property>
      </widget>
     </item>
     <item row="1" column="1">
@@ -461,6 +548,9 @@
       <property name="text">
        <string>Size:</string>
       </property>
+      <property name="buddy">
+       <cstring>mainSizeSpinBox</cstring>
+      </property>
      </widget>
     </item>
     <item row="2" column="1">
@@ -469,6 +559,16 @@
        <number>8</number>
       </property>
       <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item>
@@ -510,6 +610,9 @@
       <property name="text">
        <string>Line Spacing:</string>
       </property>
+      <property name="buddy">
+       <cstring>lineSpacingSpinBox</cstring>
+      </property>
      </widget>
     </item>
     <item row="3" column="1">
@@ -549,6 +652,9 @@
         <property name="text">
          <string>Size:</string>
         </property>
+        <property name="buddy">
+         <cstring>outlineSizeSpinBox</cstring>
+        </property>
        </widget>
       </item>
       <item>
@@ -584,6 +690,9 @@
         <property name="text">
          <string>Size:</string>
         </property>
+        <property name="buddy">
+         <cstring>shadowSizeSpinBox</cstring>
+        </property>
        </widget>
       </item>
       <item>
@@ -597,6 +706,324 @@
     </item>
    </layout>
   </widget>
+  <widget class="QWizardPage" name="secondAreaPage">
+   <property name="focusPolicy">
+    <enum>Qt::WheelFocus</enum>
+   </property>
+   <property name="contextMenuPolicy">
+    <enum>Qt::NoContextMenu</enum>
+   </property>
+   <property name="toolTipDuration">
+    <number>2</number>
+   </property>
+   <property name="title">
+    <string>Second Area Font Details</string>
+   </property>
+   <property name="subTitle">
+    <string>Define the font and display characteristics for the secondary Display text</string>
+   </property>
+   <widget class="QLabel" name="mainSizeLabel_2">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>118</y>
+      <width>217</width>
+      <height>22</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Size:</string>
+    </property>
+    <property name="buddy">
+     <cstring>mainSizeSpinBox_6</cstring>
+    </property>
+   </widget>
+   <widget class="QLabel" name="lineSpacingLabel_2">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>148</y>
+      <width>217</width>
+      <height>20</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Line Spacing:</string>
+    </property>
+    <property name="buddy">
+     <cstring>lineSpacingSpinBox_2</cstring>
+    </property>
+   </widget>
+   <widget class="QCheckBox" name="shadowCheckBox_2">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>213</y>
+      <width>217</width>
+      <height>17</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>&amp;Shadow_2:</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="mainFontLabel_2">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>20</y>
+      <width>211</width>
+      <height>20</height>
+     </rect>
+    </property>
+    <property name="minimumSize">
+     <size>
+      <width>103</width>
+      <height>0</height>
+     </size>
+    </property>
+    <property name="text">
+     <string>Font:</string>
+    </property>
+    <property name="alignment">
+     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+    </property>
+    <property name="buddy">
+     <cstring>secondFontComboBox</cstring>
+    </property>
+   </widget>
+   <widget class="QLabel" name="mainColorLabel_2">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>85</y>
+      <width>217</width>
+      <height>25</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Color:</string>
+    </property>
+    <property name="buddy">
+     <cstring>mainColorPushButton_6</cstring>
+    </property>
+   </widget>
+   <widget class="QCheckBox" name="outlineCheckBox_2">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>180</y>
+      <width>217</width>
+      <height>17</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>&amp;Outline_2:</string>
+    </property>
+   </widget>
+   <widget class="QFontComboBox" name="secondFontComboBox">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>20</y>
+      <width>217</width>
+      <height>20</height>
+     </rect>
+    </property>
+   </widget>
+   <widget class="QWidget" name="layoutWidget">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>80</y>
+      <width>171</width>
+      <height>25</height>
+     </rect>
+    </property>
+    <layout class="QHBoxLayout" name="fontPropertiesLayout_6">
+     <property name="spacing">
+      <number>24</number>
+     </property>
+     <item>
+      <widget class="QPushButton" name="mainColorPushButton_6">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="boldCheckBox_6">
+       <property name="text">
+        <string>Bold</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="italicsCheckBox_6">
+       <property name="text">
+        <string>Italic</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+   <widget class="QWidget" name="layoutWidget_2">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>120</y>
+      <width>172</width>
+      <height>22</height>
+     </rect>
+    </property>
+    <layout class="QHBoxLayout" name="mainSizeLayout_6">
+     <property name="spacing">
+      <number>8</number>
+     </property>
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QSpinBox" name="mainSizeSpinBox_6">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>70</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="suffix">
+        <string>pt</string>
+       </property>
+       <property name="maximum">
+        <number>999</number>
+       </property>
+       <property name="value">
+        <number>16</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="mainLineCountLabel_6">
+       <property name="text">
+        <string>(%d lines per slide)</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+   <widget class="QSpinBox" name="lineSpacingSpinBox_2">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>150</y>
+      <width>217</width>
+      <height>20</height>
+     </rect>
+    </property>
+    <property name="suffix">
+     <string>pt</string>
+    </property>
+    <property name="minimum">
+     <number>-50</number>
+    </property>
+    <property name="maximum">
+     <number>50</number>
+    </property>
+   </widget>
+   <widget class="QWidget" name="layoutWidget_3">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>180</y>
+      <width>116</width>
+      <height>25</height>
+     </rect>
+    </property>
+    <layout class="QHBoxLayout" name="outlineLayout_7">
+     <item>
+      <widget class="QPushButton" name="outlineColorPushButton_7">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="outlineSizeLabel_7">
+       <property name="text">
+        <string>Size:</string>
+       </property>
+       <property name="buddy">
+        <cstring>outlineSizeSpinBox_7</cstring>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="outlineSizeSpinBox_7">
+       <property name="suffix">
+        <string>pt</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+   <widget class="QWidget" name="layoutWidget_4">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>210</y>
+      <width>116</width>
+      <height>25</height>
+     </rect>
+    </property>
+    <layout class="QHBoxLayout" name="shadowLayout_7">
+     <item>
+      <widget class="QPushButton" name="shadowColorPushButton_7">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="shadowSizeLabel_7">
+       <property name="text">
+        <string>Size:</string>
+       </property>
+       <property name="buddy">
+        <cstring>shadowSizeSpinBox_7</cstring>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="shadowSizeSpinBox_7">
+       <property name="suffix">
+        <string>pt</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+  </widget>
   <widget class="QWizardPage" name="footerAreaPage">
    <property name="title">
     <string>Footer Area Font Details</string>
@@ -614,7 +1041,16 @@
     <property name="verticalSpacing">
      <number>8</number>
     </property>
-    <property name="margin">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
+    </property>
+    <property name="rightMargin">
+     <number>20</number>
+    </property>
+    <property name="bottomMargin">
      <number>20</number>
     </property>
     <item row="0" column="0">
@@ -631,6 +1067,9 @@
       <property name="alignment">
        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
       </property>
+      <property name="buddy">
+       <cstring>footerFontComboBox</cstring>
+      </property>
      </widget>
     </item>
     <item row="0" column="1">
@@ -641,6 +1080,9 @@
       <property name="text">
        <string>Color:</string>
       </property>
+      <property name="buddy">
+       <cstring>footerColorPushButton</cstring>
+      </property>
      </widget>
     </item>
     <item row="1" column="1">
@@ -655,6 +1097,9 @@
       <property name="text">
        <string>Size:</string>
       </property>
+      <property name="buddy">
+       <cstring>footerSizeSpinBox</cstring>
+      </property>
      </widget>
     </item>
     <item row="2" column="1">
@@ -698,7 +1143,16 @@
     <property name="verticalSpacing">
      <number>8</number>
     </property>
-    <property name="margin">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
+    </property>
+    <property name="rightMargin">
+     <number>20</number>
+    </property>
+    <property name="bottomMargin">
      <number>20</number>
     </property>
     <item row="0" column="0">
@@ -782,7 +1236,16 @@
     <string>Allows you to change and move the Main and Footer areas.</string>
    </property>
    <layout class="QGridLayout" name="areaPositionLayout">
-    <property name="margin">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
+    </property>
+    <property name="rightMargin">
+     <number>20</number>
+    </property>
+    <property name="bottomMargin">
      <number>20</number>
     </property>
     <property name="spacing">
@@ -806,7 +1269,16 @@
        <property name="verticalSpacing">
         <number>8</number>
        </property>
-       <property name="margin">
+       <property name="leftMargin">
+        <number>8</number>
+       </property>
+       <property name="topMargin">
+        <number>8</number>
+       </property>
+       <property name="rightMargin">
+        <number>8</number>
+       </property>
+       <property name="bottomMargin">
         <number>8</number>
        </property>
        <item row="0" column="1">
@@ -974,7 +1446,16 @@
        <property name="verticalSpacing">
         <number>8</number>
        </property>
-       <property name="margin">
+       <property name="leftMargin">
+        <number>8</number>
+       </property>
+       <property name="topMargin">
+        <number>8</number>
+       </property>
+       <property name="rightMargin">
+        <number>8</number>
+       </property>
+       <property name="bottomMargin">
         <number>8</number>
        </property>
        <item row="1" column="0">
@@ -1125,7 +1606,16 @@
     <property name="spacing">
      <number>8</number>
     </property>
-    <property name="margin">
+    <property name="leftMargin">
+     <number>20</number>
+    </property>
+    <property name="topMargin">
+     <number>20</number>
+    </property>
+    <property name="rightMargin">
+     <number>20</number>
+    </property>
+    <property name="bottomMargin">
      <number>20</number>
     </property>
     <item>
@@ -1229,6 +1719,7 @@
  </widget>
  <resources>
   <include location="../images/openlp-2.qrc"/>
+  <include location="../../../../../.designer/images/openlp-2.qrc"/>
  </resources>
  <connections>
   <connection>
@@ -1239,11 +1730,11 @@
    <hints>
     <hint type="sourcelabel">
      <x>455</x>
-     <y>368</y>
+     <y>359</y>
     </hint>
     <hint type="destinationlabel">
      <x>483</x>
-     <y>401</y>
+     <y>359</y>
     </hint>
    </hints>
   </connection>
@@ -1254,8 +1745,8 @@
    <slot>setCurrentIndex(int)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>178</x>
-     <y>78</y>
+     <x>198</x>
+     <y>93</y>
     </hint>
     <hint type="destinationlabel">
      <x>249</x>


Follow ups