Rearranged the settings tab system to work the same way as the media manager item system.

bzr-revno: 351
This commit is contained in:
Raoul Snyman 2009-02-28 23:19:45 +00:00
parent 3477003106
commit 1c47f553f3
21 changed files with 888 additions and 793 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
<!-- eric4 user project file for project openlp.org 2.0 -->
<!-- Saved: 2009-02-20, 00:23:18 -->
<!-- Saved: 2009-03-01, 01:17:02 -->
<!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
<UserProject version="4.0">
</UserProject>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd">
<!-- eric4 tasks file for project openlp.org 2.0 -->
<!-- Saved: 2009-02-20, 00:23:19 -->
<!-- Saved: 2009-03-01, 01:17:03 -->
<Tasks version="4.2">
<Task priority="1" completed="False" bugfix="False">
<Summary>TODO: what is the tags for bridge, pre-chorus?</Summary>
@ -111,4 +111,31 @@
<Linenumber>534</Linenumber>
</Resource>
</Task>
<Task priority="1" completed="False" bugfix="False">
<Summary>TODO: need some way to make this geometry work properly!</Summary>
<Description></Description>
<Created>2009-03-01, 01:09:34</Created>
<Resource>
<Filename>openlp/core/ui/mainwindow.py</Filename>
<Linenumber>96</Linenumber>
</Resource>
</Task>
<Task priority="1" completed="False" bugfix="False">
<Summary>TODO: need to get rid of this once all plugins are up to date</Summary>
<Description></Description>
<Created>2009-03-01, 01:10:29</Created>
<Resource>
<Filename>openlp/core/pluginmanager.py</Filename>
<Linenumber>86</Linenumber>
</Resource>
</Task>
<Task priority="1" completed="False" bugfix="False">
<Summary>TODO: These shouldn't be called here...</Summary>
<Description></Description>
<Created>2009-03-01, 01:10:29</Created>
<Resource>
<Filename>openlp/core/pluginmanager.py</Filename>
<Linenumber>108</Linenumber>
</Resource>
</Task>
</Tasks>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-4.4.dtd">
<!-- eric4 project file for project openlp.org 2.0 -->
<!-- Saved: 2009-02-20, 00:23:11 -->
<!-- Saved: 2009-03-01, 01:17:00 -->
<!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
<Project version="4.4">
<ProgLanguage mixed="0">Python</ProgLanguage>
@ -26,7 +26,6 @@
<Source>openlp/core/ui/__init__.py</Source>
<Source>openlp/core/ui/mainwindow.py</Source>
<Source>openlp/core/ui/splashscreen.py</Source>
<Source>openlp/core/ui/settings.py</Source>
<Source>openlp/core/ui/alertform.py</Source>
<Source>openlp/core/ui/about.py</Source>
<Source>openlp/plugins/songs/songsplugin.py</Source>
@ -48,7 +47,6 @@
<Source>openlp/core/resources.py</Source>
<Source>openlp/core/lib/__init__.py</Source>
<Source>openlp/core/lib/xmlrootclass.py</Source>
<Source>openlp/core/lib/settingstab.py</Source>
<Source>openlp/core/lib/plugin.py</Source>
<Source>openlp/core/lib/mediamanageritem.py</Source>
<Source>openlp/core/lib/event.py</Source>
@ -122,6 +120,17 @@
<Source>openlp/core/lib/imageserviceitem.py</Source>
<Source>openlp/plugins/bibles/forms/bibleeditdialog.py</Source>
<Source>resources/forms/Ui_editsongdialog.py</Source>
<Source>openlp/core/ui/servicemanager.py</Source>
<Source>openlp/core/lib/toolbar.py</Source>
<Source>resources/forms/bibleimportdialog.py</Source>
<Source>openlp/core/ui/settingsform.py</Source>
<Source>openlp/core/ui/generalform.py</Source>
<Source>openlp/core/lib/settingstabitem.py</Source>
<Source>openlp/core/ui/generaltab.py</Source>
<Source>openlp/core/ui/themestab.py</Source>
<Source>openlp/core/ui/alertstab.py</Source>
<Source>resources/forms/Ui_settings.py</Source>
<Source>openlp/core/ui/settingsdialog.py</Source>
</Sources>
<Forms>
<Form>resources/forms/openlpexportform.ui</Form>
@ -140,7 +149,8 @@
<Form>resources/forms/songbookdialog.ui</Form>
<Form>resources/forms/topicsdialog.ui</Form>
<Form>resources/forms/editsongdialog.ui</Form>
<Form>resources/forms/bibleeditdialog.ui</Form>
<Form>openlp/plugins/bibles/forms/bibleeditdialog.ui</Form>
<Form>resources/forms/settings2.ui</Form>
</Forms>
<Translations>
</Translations>

View File

@ -17,9 +17,13 @@ You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
from PyQt4 import QtCore, QtGui
from render import Renderer
from settingsmanager import SettingsManager
from pluginmanager import PluginManager
__all__ = ['Renderer', 'SettingsManager', 'PluginManager']
__all__ = ['Renderer', 'SettingsManager', 'PluginManager', 'translate']
def translate(context, text):
return QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8)

View File

@ -20,7 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from pluginutils import PluginUtils
from pluginconfig import PluginConfig
from plugin import Plugin
from settingstabitem import SettingsTabItem
from settingstab import SettingsTab
from mediamanageritem import MediaManagerItem
from event import Event
from xmlrootclass import XmlRootClass

View File

@ -21,26 +21,27 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
class SettingsTabItem(QtGui.QWidget):
class SettingsTab(QtGui.QWidget):
"""
SettingsTabItem is a helper widget for plugins to define Tabs for the settings dialog.
SettingsTab is a helper widget for plugins to define Tabs for the settings dialog.
"""
def __init__(self):
def __init__(self, title=None):
"""
Constructor to create the Steetings tab item.
"""
QtGui.QWidget.__init__(self)
self.TabLayout = QtGui.QVBoxLayout(self)
self.TabLayout.setSpacing(0)
self.TabLayout.setMargin(0)
self.tabText = None
self.tabTitle = title
self.setupUi()
self.retranslateUi()
def setTabText(self, text):
self.tabText = text
def add_items(self, items):
if type(items).__name__ == "QWidget":
self.TabLayout.addWidget(items)
else:
for item in items:
self.TabLayout.addWidget(item)
def setTitle(self, title):
self.tabTitle = title
def title(self):
return self.tabTitle
def setupUi(self):
pass
def retranslateUi(self):
pass

View File

@ -47,7 +47,7 @@ class PluginManager(object):
self.plugins = []
# this has to happen after the UI is sroted self.find_plugins(dir)
log.info("Plugin manager done init")
def find_plugins(self, dir, preview_controller, live_controller): # xxx shouldn't dir come from self.basepath
"""
Scan the directory dir for objects inheriting from openlp.plugin
@ -56,7 +56,7 @@ class PluginManager(object):
self.live_controller=live_controller
startdepth=len(os.path.abspath(dir).split(os.sep))
log.debug("find plugins %s at depth %d" %( str(dir), startdepth))
for root, dirs, files in os.walk(dir):
for name in files:
if name.endswith(".py") and not name.startswith("__"):
@ -82,7 +82,8 @@ class PluginManager(object):
try:
plugin = p(self.preview_controller, self.live_controller)
log.debug('loaded plugin' + str(p) + ' with controllers'+str(self.preview_controller)+str(self.live_controller))
except TypeError: # TODO: need to get rid of this once all plugins are up to date
except TypeError:
# TODO: need to get rid of this once all plugins are up to date
plugin = p()
log.debug('loaded plugin' + str(p) + ' with no controllers')
log.debug("Plugin="+str(p))
@ -104,23 +105,22 @@ class PluginManager(object):
if media_manager_item is not None:
log.debug('Inserting media manager item from %s' % plugin.name)
mediatoolbox.addItem(media_manager_item, plugin.icon, media_manager_item.title)
# TODO: These shouldn't be called here...
plugin.initialise()
plugin.load_settings()
def hook_settings_tabs(self, mediatoolbox=None):
def hook_settings_tabs(self, settingsform=None):
"""
Loop through all the plugins. If a plugin has a valid settings tab item,
add it to the settings tab.
"""
want_settings = []
for plugin in self.plugins:
settings_tab_item = plugin.has_settings_tab_item()
#print plugin , settings_tab_item
if settings_tab_item:
settings_tab = plugin.get_settings_tab()
if settings_tab is not None:
log.debug('Inserting settings tab item from %s' % plugin.name)
want_settings.append(plugin)
#mediatoolbox.addItem(media_manager_item, plugin.icon, media_manager_item.title)
return want_settings
settingsform.addTab(settings_tab)
else:
log.debug('No settings in %s' % plugin.name)
def hook_import_menu(self, import_menu):
"""
@ -138,5 +138,5 @@ class PluginManager(object):
for plugin in self.plugins:
plugin.add_export_menu_item(export_menu)
def hook_handle_event(self, event):
def hook_handle_event(self, event):
pass

View File

@ -20,12 +20,15 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from slidecontroller import SlideController
from splashscreen import SplashScreen
from alertstab import AlertsTab
from generaltab import GeneralTab
from themestab import ThemesTab
from about import AboutForm
from alertform import AlertForm
#from alertform import AlertForm
from generalform import GeneralForm
from settingsform import SettingsForm
from servicemanager import ServiceManager
from mainwindow import MainWindow
__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsForm',
__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm',
'MainWindow', 'SlideController', 'ServiceManager,GeneralForm']

140
openlp/core/ui/alertstab.py Normal file
View File

@ -0,0 +1,140 @@
# -*- 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
"""
from PyQt4 import QtCore, QtGui
from openlp.core import translate
from openlp.core.lib import SettingsTab
from openlp.core.resources import *
class AlertsTab(SettingsTab):
"""
AlertsTab is the alerts settings tab in the settings dialog.
"""
def __init__(self):
SettingsTab.__init__(self, u'Alerts')
def setupUi(self):
self.setObjectName(u'AlertsTab')
self.AlertsLayout = QtGui.QHBoxLayout(self)
self.AlertsLayout.setSpacing(8)
self.AlertsLayout.setMargin(8)
self.AlertsLayout.setObjectName(u'AlertsLayout')
self.AlertLeftColumn = QtGui.QWidget(self)
self.AlertLeftColumn.setObjectName(u'AlertLeftColumn')
self.SlideLeftLayout = QtGui.QVBoxLayout(self.AlertLeftColumn)
self.SlideLeftLayout.setSpacing(8)
self.SlideLeftLayout.setMargin(0)
self.SlideLeftLayout.setObjectName(u'SlideLeftLayout')
self.FontGroupBox = QtGui.QGroupBox(self.AlertLeftColumn)
self.FontGroupBox.setObjectName(u'FontGroupBox')
self.FontLayout = QtGui.QVBoxLayout(self.FontGroupBox)
self.FontLayout.setSpacing(8)
self.FontLayout.setMargin(8)
self.FontLayout.setObjectName(u'FontLayout')
self.FontLabel = QtGui.QLabel(self.FontGroupBox)
self.FontLabel.setObjectName(u'FontLabel')
self.FontLayout.addWidget(self.FontLabel)
self.FontComboBox = QtGui.QFontComboBox(self.FontGroupBox)
self.FontComboBox.setObjectName(u'FontComboBox')
self.FontLayout.addWidget(self.FontComboBox)
self.ColorWidget = QtGui.QWidget(self.FontGroupBox)
self.ColorWidget.setObjectName(u'ColorWidget')
self.ColorLayout = QtGui.QHBoxLayout(self.ColorWidget)
self.ColorLayout.setSpacing(8)
self.ColorLayout.setMargin(0)
self.ColorLayout.setObjectName(u'ColorLayout')
self.FontColorLabel = QtGui.QLabel(self.ColorWidget)
self.FontColorLabel.setObjectName(u'FontColorLabel')
self.ColorLayout.addWidget(self.FontColorLabel)
self.FontColorPanel = QtGui.QGraphicsView(self.ColorWidget)
self.FontColorPanel.setMinimumSize(QtCore.QSize(24, 24))
self.FontColorPanel.setMaximumSize(QtCore.QSize(24, 24))
self.FontColorPanel.setObjectName(u'FontColorPanel')
self.ColorLayout.addWidget(self.FontColorPanel)
self.ColorSpacerItem = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.ColorLayout.addItem(self.ColorSpacerItem)
self.BackgroundColorLabel = QtGui.QLabel(self.ColorWidget)
self.BackgroundColorLabel.setObjectName(u'BackgroundColorLabel')
self.ColorLayout.addWidget(self.BackgroundColorLabel)
self.BackgroundColorPanel = QtGui.QGraphicsView(self.ColorWidget)
self.BackgroundColorPanel.setMinimumSize(QtCore.QSize(24, 24))
self.BackgroundColorPanel.setMaximumSize(QtCore.QSize(24, 24))
self.BackgroundColorPanel.setObjectName(u'BackgroundColorPanel')
self.ColorLayout.addWidget(self.BackgroundColorPanel)
self.FontLayout.addWidget(self.ColorWidget)
self.LengthWidget = QtGui.QWidget(self.FontGroupBox)
self.LengthWidget.setObjectName(u'LengthWidget')
self.LengthLayout = QtGui.QHBoxLayout(self.LengthWidget)
self.LengthLayout.setSpacing(8)
self.LengthLayout.setMargin(0)
self.LengthLayout.setObjectName(u'LengthLayout')
self.LengthLabel = QtGui.QLabel(self.LengthWidget)
self.LengthLabel.setObjectName(u'LengthLabel')
self.LengthLayout.addWidget(self.LengthLabel)
self.LengthSpinBox = QtGui.QSpinBox(self.LengthWidget)
self.LengthSpinBox.setMaximum(180)
self.LengthSpinBox.setProperty(u'value', QtCore.QVariant(5))
self.LengthSpinBox.setObjectName(u'LengthSpinBox')
self.LengthLayout.addWidget(self.LengthSpinBox)
self.LengthSpacer = QtGui.QSpacerItem(147, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.LengthLayout.addItem(self.LengthSpacer)
self.FontLayout.addWidget(self.LengthWidget)
self.SlideLeftLayout.addWidget(self.FontGroupBox)
self.SlideLeftSpacer = QtGui.QSpacerItem(20, 94,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.SlideLeftLayout.addItem(self.SlideLeftSpacer)
self.AlertsLayout.addWidget(self.AlertLeftColumn)
self.SlideRightColumn = QtGui.QWidget(self)
self.SlideRightColumn.setObjectName(u'SlideRightColumn')
self.SlideRightLayout = QtGui.QVBoxLayout(self.SlideRightColumn)
self.SlideRightLayout.setSpacing(8)
self.SlideRightLayout.setMargin(0)
self.SlideRightLayout.setObjectName(u'SlideRightLayout')
self.PreviewGroupBox = QtGui.QGroupBox(self.SlideRightColumn)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.PreviewGroupBox.sizePolicy().hasHeightForWidth())
self.PreviewGroupBox.setSizePolicy(sizePolicy)
self.PreviewGroupBox.setObjectName(u'PreviewGroupBox')
self.PreviewLayout = QtGui.QVBoxLayout(self.PreviewGroupBox)
self.PreviewLayout.setSpacing(8)
self.PreviewLayout.setMargin(8)
self.PreviewLayout.setObjectName(u'PreviewLayout')
self.FontPreview = QtGui.QGraphicsView(self.PreviewGroupBox)
self.FontPreview.setMaximumSize(QtCore.QSize(16777215, 64))
self.FontPreview.setObjectName(u'FontPreview')
self.PreviewLayout.addWidget(self.FontPreview)
self.SlideRightLayout.addWidget(self.PreviewGroupBox)
self.SlideRightSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.SlideRightLayout.addItem(self.SlideRightSpacer)
def retranslateUi(self):
self.FontGroupBox.setTitle(translate(u'AlertsTab', u'Font'))
self.FontLabel.setText(translate(u'AlertsTab', u'Font Name:'))
self.FontColorLabel.setText(translate(u'AlertsTab', u'Font Color:'))
self.BackgroundColorLabel.setText(translate(u'AlertsTab', u'Background Color:'))
self.LengthLabel.setText(translate(u'AlertsTab', u'Display length:'))
self.LengthSpinBox.setSuffix(translate(u'AlertsTab', u's'))
self.PreviewGroupBox.setTitle(translate(u'AlertsTab', u'Preview'))

View File

@ -21,7 +21,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
from openlp.core.lib import SettingsTabItem
from openlp.core.lib import SettingsTab
class GeneralForm(object):
"""
@ -32,9 +32,9 @@ class GeneralForm(object):
def __init__(self):
pass
def get_settings_tab_item(self):
self.SettingsTabItem= SettingsTabItem()
self.DisplayTab = QtGui.QWidget()
self.DisplayTab.setObjectName("DisplayTab")
self.DisplayTabLayout = QtGui.QHBoxLayout(self.DisplayTab)
@ -122,22 +122,22 @@ class GeneralForm(object):
self.MonitorComboBox.setItemText(1, QtGui.QApplication.translate("SettingsForm", "Monitor 2 on X11 Windowing System", None, QtGui.QApplication.UnicodeUTF8))
self.FontSizeGroupBox.setTitle(QtGui.QApplication.translate("SettingsForm", "Font Size", None, QtGui.QApplication.UnicodeUTF8))
self.AutoResizeRadioButton.setText(QtGui.QApplication.translate("SettingsForm", "Automatically resize font to fit text to slide", None, QtGui.QApplication.UnicodeUTF8))
self.WrapLinesRadioButton.setText(QtGui.QApplication.translate("SettingsForm", "Wrap long lines to keep desired font", None, QtGui.QApplication.UnicodeUTF8))
self.WrapLinesRadioButton.setText(QtGui.QApplication.translate("SettingsForm", "Wrap long lines to keep desired font", None, QtGui.QApplication.UnicodeUTF8))
self.SongDisplayGroupBox.setTitle(QtGui.QApplication.translate("SettingsForm", "Song Display", None, QtGui.QApplication.UnicodeUTF8))
self.EnableCreditsCheckBox.setText(QtGui.QApplication.translate("SettingsForm", "Enable displaying of song credits", None, QtGui.QApplication.UnicodeUTF8))
self.BlankScreenGroupBox.setTitle(QtGui.QApplication.translate("SettingsForm", "Blank Screen", None, QtGui.QApplication.UnicodeUTF8))
self.WarningCheckBox.setText(QtGui.QApplication.translate("SettingsForm", "Show warning on startup", None, QtGui.QApplication.UnicodeUTF8))
self.AutoOpenGroupBox.setTitle(QtGui.QApplication.translate("SettingsForm", "Auto Open Last Service", None, QtGui.QApplication.UnicodeUTF8))
self.AutoOpenCheckBox.setText(QtGui.QApplication.translate("SettingsForm", "Automatically open the last service at startup", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "General", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabItem.add_items(self.DisplayTab)
return self.SettingsTabItem
def load_settings(self):
pass
def save_settings(self):
pass

View File

@ -0,0 +1,131 @@
# -*- 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
"""
from PyQt4 import QtCore, QtGui
from openlp.core import translate
from openlp.core.lib import SettingsTab
from openlp.core.resources import *
class GeneralTab(SettingsTab):
"""
GeneralTab is the general settings tab in the settings dialog.
"""
def __init__(self):
SettingsTab.__init__(self, translate(u'GeneralTab', u'General'))
def setupUi(self):
self.setObjectName(u'GeneralTab')
self.GeneralLayout = QtGui.QHBoxLayout(self)
self.GeneralLayout.setSpacing(8)
self.GeneralLayout.setMargin(8)
self.GeneralLayout.setObjectName(u'GeneralLayout')
self.GeneralLeftWidget = QtGui.QWidget(self)
self.GeneralLeftWidget.setObjectName(u'GeneralLeftWidget')
self.GeneralLeftLayout = QtGui.QVBoxLayout(self.GeneralLeftWidget)
self.GeneralLeftLayout.setObjectName(u'GeneralLeftLayout')
self.MonitorGroupBox = QtGui.QGroupBox(self.GeneralLeftWidget)
self.MonitorGroupBox.setObjectName(u'MonitorGroupBox')
self.MonitorLayout = QtGui.QVBoxLayout(self.MonitorGroupBox)
self.MonitorLayout.setSpacing(8)
self.MonitorLayout.setMargin(8)
self.MonitorLayout.setObjectName(u'MonitorLayout')
self.MonitorLabel = QtGui.QLabel(self.MonitorGroupBox)
self.MonitorLabel.setObjectName(u'MonitorLabel')
self.MonitorLayout.addWidget(self.MonitorLabel)
self.MonitorComboBox = QtGui.QComboBox(self.MonitorGroupBox)
self.MonitorComboBox.setObjectName(u'MonitorComboBox')
self.MonitorComboBox.addItem(QtCore.QString())
self.MonitorComboBox.addItem(QtCore.QString())
self.MonitorLayout.addWidget(self.MonitorComboBox)
self.GeneralLeftLayout.addWidget(self.MonitorGroupBox)
self.BlankScreenGroupBox = QtGui.QGroupBox(self.GeneralLeftWidget)
self.BlankScreenGroupBox.setObjectName(u'BlankScreenGroupBox')
self.BlankScreenLayout = QtGui.QVBoxLayout(self.BlankScreenGroupBox)
self.BlankScreenLayout.setSpacing(8)
self.BlankScreenLayout.setMargin(8)
self.BlankScreenLayout.setObjectName(u'BlankScreenLayout')
self.WarningCheckBox = QtGui.QCheckBox(self.BlankScreenGroupBox)
self.WarningCheckBox.setObjectName(u'WarningCheckBox')
self.BlankScreenLayout.addWidget(self.WarningCheckBox)
self.GeneralLeftLayout.addWidget(self.BlankScreenGroupBox)
self.AutoOpenGroupBox = QtGui.QGroupBox(self.GeneralLeftWidget)
self.AutoOpenGroupBox.setObjectName(u'AutoOpenGroupBox')
self.AutoOpenLayout = QtGui.QVBoxLayout(self.AutoOpenGroupBox)
self.AutoOpenLayout.setObjectName(u'AutoOpenLayout')
self.AutoOpenCheckBox = QtGui.QCheckBox(self.AutoOpenGroupBox)
self.AutoOpenCheckBox.setObjectName(u'AutoOpenCheckBox')
self.AutoOpenLayout.addWidget(self.AutoOpenCheckBox)
self.GeneralLeftLayout.addWidget(self.AutoOpenGroupBox)
self.GeneralLeftSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.GeneralLeftLayout.addItem(self.GeneralLeftSpacer)
self.GeneralLayout.addWidget(self.GeneralLeftWidget)
self.GeneralRightWidget = QtGui.QWidget(self)
self.GeneralRightWidget.setObjectName(u'GeneralRightWidget')
self.GeneralRightLayout = QtGui.QVBoxLayout(self.GeneralRightWidget)
self.GeneralRightLayout.setSpacing(8)
self.GeneralRightLayout.setMargin(0)
self.GeneralRightLayout.setObjectName(u'GeneralRightLayout')
self.CCLIGroupBox = QtGui.QGroupBox(self.GeneralRightWidget)
self.CCLIGroupBox.setObjectName(u'CCLIGroupBox')
self.CCLILayout = QtGui.QGridLayout(self.CCLIGroupBox)
self.CCLILayout.setMargin(8)
self.CCLILayout.setSpacing(8)
self.CCLILayout.setObjectName(u'CCLILayout')
self.NumberLabel = QtGui.QLabel(self.CCLIGroupBox)
self.NumberLabel.setObjectName(u'NumberLabel')
self.CCLILayout.addWidget(self.NumberLabel, 0, 0, 1, 1)
self.NumberEdit = QtGui.QLineEdit(self.CCLIGroupBox)
self.NumberEdit.setObjectName(u'NumberEdit')
self.CCLILayout.addWidget(self.NumberEdit, 0, 1, 1, 1)
self.UsernameLabel = QtGui.QLabel(self.CCLIGroupBox)
self.UsernameLabel.setObjectName(u'UsernameLabel')
self.CCLILayout.addWidget(self.UsernameLabel, 1, 0, 1, 1)
self.UsernameEdit = QtGui.QLineEdit(self.CCLIGroupBox)
self.UsernameEdit.setObjectName(u'UsernameEdit')
self.CCLILayout.addWidget(self.UsernameEdit, 1, 1, 1, 1)
self.PasswordLabel = QtGui.QLabel(self.CCLIGroupBox)
self.PasswordLabel.setObjectName(u'PasswordLabel')
self.CCLILayout.addWidget(self.PasswordLabel, 2, 0, 1, 1)
self.PasswordEdit = QtGui.QLineEdit(self.CCLIGroupBox)
self.PasswordEdit.setEchoMode(QtGui.QLineEdit.Password)
self.PasswordEdit.setObjectName(u'PasswordEdit')
self.CCLILayout.addWidget(self.PasswordEdit, 2, 1, 1, 1)
self.GeneralRightLayout.addWidget(self.CCLIGroupBox)
self.GeneralRightSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.GeneralRightLayout.addItem(self.GeneralRightSpacer)
self.GeneralLayout.addWidget(self.GeneralRightWidget)
def retranslateUi(self):
self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))
self.MonitorLabel.setText(translate(u'GeneralTab', u'Select monitor for output display:'))
self.MonitorComboBox.setItemText(0, translate(u'GeneralTab', u'Monitor 1 on X11 Windowing System'))
self.MonitorComboBox.setItemText(1, translate(u'GeneralTab', u'Monitor 2 on X11 Windowing System'))
self.BlankScreenGroupBox.setTitle(translate(u'GeneralTab', u'Blank Screen'))
self.WarningCheckBox.setText(translate(u'GeneralTab', u'Show warning on startup'))
self.AutoOpenGroupBox.setTitle(translate(u'GeneralTab', u'Auto Open Last Service'))
self.AutoOpenCheckBox.setText(translate(u'GeneralTab', u'Automatically open the last service at startup'))
self.CCLIGroupBox.setTitle(translate(u'GeneralTab', u'CCLI Details'))
self.NumberLabel.setText(translate(u'GeneralTab', u'CCLI Number:'))
self.UsernameLabel.setText(translate(u'GeneralTab', u'SongSelect Username:'))
self.PasswordLabel.setText(translate(u'GeneralTab', u'SongSelect Password:'))

View File

@ -25,9 +25,9 @@ from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
from openlp.core.ui import SlideController, ServiceManager
from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController, GeneralForm
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTabItem
from openlp.core.ui import AboutForm, SettingsForm, \
SlideController, ServiceManager, GeneralForm
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab
from openlp.core import PluginManager
import logging
@ -39,35 +39,33 @@ class MainWindow(object):
def __init__(self):
self.main_window = QtGui.QMainWindow()
self.about_form = AboutForm()
self.alert_form = AlertForm()
#self.alert_form = AlertForm()
self.settings_form = SettingsForm()
self.general_form = GeneralForm()
#self.general_form = GeneralForm()
pluginpath = os.path.split(os.path.abspath(__file__))[0]
pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins'))
self.plugin_manager = PluginManager(pluginpath)
self.setupUi()
log.info('')
self.plugin_manager.find_plugins(pluginpath, self.PreviewController, self.LiveController)
log.info("hook Settings")
#Add Core Componets who provide Settings tabs
self.settings_form.add_virtual_plugin(self.general_form)
self.settings_form.add_virtual_plugin(self.alert_form)
#Call hook method to see which plugins have setting tabs.
self.settings_form.receive_plugins(self.plugin_manager.hook_settings_tabs())
self.settings_form.generateUi()
# hook methods have to happen after find_plugins. Find plugins needs the controllers
# hence the hooks have moved front setupUI() to here
# Call the hook method to pull in import menus.
log.info("hook menus")
self.plugin_manager.hook_import_menu(self.FileImportMenu)
#
# Call the hook method to pull in export menus.
self.plugin_manager.hook_import_menu(self.FileExportMenu)
#
# hence the hooks have moved from setupUI() to here
# Find and insert media manager items
log.info("hook media")
self.plugin_manager.hook_media_manager(self.MediaToolBox)
# End adding media manager items.
# Find and insert settings tabs
log.info("hook settings")
self.plugin_manager.hook_settings_tabs(self.settings_form)
# Call the hook method to pull in import menus.
log.info("hook menus")
self.plugin_manager.hook_import_menu(self.FileImportMenu)
# Call the hook method to pull in export menus.
self.plugin_manager.hook_import_menu(self.FileExportMenu)
def setupUi(self):
self.main_window.setObjectName("main_window")
@ -133,7 +131,7 @@ class MainWindow(object):
self.MediaManagerDock.setSizePolicy(sizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/system/system_mediamanager.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.MediaManagerDock.setWindowIcon(icon)
self.MediaManagerDock.setFloating(False)
self.MediaManagerDock.setObjectName("MediaManagerDock")
@ -155,7 +153,7 @@ class MainWindow(object):
self.MediaManagerLayout.addWidget(self.MediaToolBox)
self.MediaManagerDock.setWidget(self.MediaManagerContents)
self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
self.ServiceManagerDock = QtGui.QDockWidget(self.main_window)
ServiceManagerIcon = QtGui.QIcon()
ServiceManagerIcon.addPixmap(QtGui.QPixmap(":/system/system_servicemanager.png"),
@ -428,10 +426,10 @@ class MainWindow(object):
self.main_window.showMaximized()
def onHelpAboutItemClicked(self):
self.about_form.show()
self.about_form.exec_()
def onToolsAlertItemClicked(self):
self.alert_form.show()
self.alert_form.exec_()
def onOptionsSettingsItemClicked(self):
self.settings_form.exec_()

View File

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/home/raoul/Projects/openlp-2/resources/forms/settings.ui'
#
# Created: Sat Feb 28 23:59:58 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_SettingsDialog(object):
def setupUi(self, SettingsDialog):
SettingsDialog.setObjectName(u'SettingsDialog')
SettingsDialog.resize(724, 502)
#icon = QtGui.QIcon()
#icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
#SettingsDialog.setWindowIcon(icon)
self.SettingsLayout = QtGui.QVBoxLayout(SettingsDialog)
self.SettingsLayout.setSpacing(8)
self.SettingsLayout.setMargin(8)
self.SettingsLayout.setObjectName(u'SettingsLayout')
self.SettingsTabWidget = QtGui.QTabWidget(SettingsDialog)
self.SettingsTabWidget.setObjectName(u'SettingsTabWidget')
self.SettingsLayout.addWidget(self.SettingsTabWidget)
self.ButtonsBox = QtGui.QDialogButtonBox(SettingsDialog)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ButtonsBox.sizePolicy().hasHeightForWidth())
self.ButtonsBox.setSizePolicy(sizePolicy)
self.ButtonsBox.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.ButtonsBox.setOrientation(QtCore.Qt.Horizontal)
self.ButtonsBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.ButtonsBox.setObjectName("ButtonsBox")
self.SettingsLayout.addWidget(self.ButtonsBox)
self.retranslateUi(SettingsDialog)
self.SettingsTabWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.ButtonsBox, QtCore.SIGNAL("accepted()"), SettingsDialog.accept)
QtCore.QObject.connect(self.ButtonsBox, QtCore.SIGNAL("rejected()"), SettingsDialog.reject)
QtCore.QMetaObject.connectSlotsByName(SettingsDialog)
def retranslateUi(self, SettingsDialog):
SettingsDialog.setWindowTitle(QtGui.QApplication.translate("SettingsDialog", "Settings", None, QtGui.QApplication.UnicodeUTF8))

View File

@ -17,62 +17,53 @@ 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
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QDialog
from openlp.core.lib import SettingsTabItem
from openlp.core.lib import SettingsTab
from openlp.core.resources import *
from openlp.core.ui import AlertForm
from openlp.core.ui import GeneralTab, ThemesTab, AlertsTab
class SettingsForm(QDialog):
from settingsdialog import Ui_SettingsDialog
log = logging.getLogger('SettingsForm')
class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.first_time = True
self.plugin_list = []
def add_virtual_plugin(self, plugin):
"""
Method to allow Core to register screens to behave like plugins
"""
self.plugin_list.append(plugin)
def receive_plugins(self, plugins):
"""
Method to allow Plugin Manager to add plugins which want settings
"""
print "got plugins ", plugins
for plugin in plugins:
self.plugin_list.append(plugin)
print plugins
def generateUi(self):
"""
Method build UI.
Called by mainmenu AFTER all plugins have been installed.
"""
if self.first_time:
self.setupUi(self)
self.first_time = False
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
# General tab
self.GeneralTab = GeneralTab()
self.addTab(self.GeneralTab)
# Themes tab
self.ThemesTab = ThemesTab()
self.addTab(self.ThemesTab)
# Alerts tab
self.AlertsTab = AlertsTab()
self.addTab(self.AlertsTab)
def onSaveButton(self):
pass
def onResetButton(self):
def addTab(self, tab):
log.info(u'Inserting %s' % tab.title())
self.SettingsTabWidget.addTab(tab, tab.title())
def onSaveButtonClick(self):
pass
def onResetButtonClick(self):
pass
"""
def setupUi(self, SettingsDialog):
SettingsDialog.setObjectName("SettingsDialog")
SettingsDialog.resize(602, 502)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
SettingsDialog.setWindowIcon(icon)
self.SettingsTabWidget = QtGui.QTabWidget(SettingsDialog)
self.SettingsTabWidget.setGeometry(QtCore.QRect(0, 0, 669, 500))
self.SettingsTabWidget.setObjectName("SettingsTabWidget")
self.ThemesTab = QtGui.QWidget()
self.ThemesTab.setObjectName("ThemesTab")
self.ThemesTabLayout = QtGui.QHBoxLayout(self.ThemesTab)
@ -127,7 +118,7 @@ class SettingsForm(QDialog):
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.GlobalLevelLabel)
self.ThemesTabLayout.addWidget(self.LevelGroupBox)
self.SettingsTabWidget.addTab(self.ThemesTab, "")
self.SlideTab = QtGui.QWidget()
self.SlideTab.setObjectName("SlideTab")
self.SlideLayout = QtGui.QHBoxLayout(self.SlideTab)
@ -236,14 +227,14 @@ class SettingsForm(QDialog):
self.SlideRightLayout.addItem(spacerItem5)
self.SlideLayout.addWidget(self.widget)
self.SettingsTabWidget.addTab(self.SlideTab, "")
#### Core Code below here
for plugin in self.plugin_list:
settings_tab_item = plugin.get_settings_tab_item()
if settings_tab_item is not None:
self.SettingsTabWidget.addTab(settings_tab_item, settings_tab_item.tabText)
self.SaveButton = QtGui.QPushButton(SettingsDialog)
self.SaveButton.setGeometry(QtCore.QRect(490, 470, 81, 26))
self.SaveButton.setObjectName("SaveButton")
@ -253,15 +244,15 @@ class SettingsForm(QDialog):
self.ResetButton = QtGui.QPushButton(SettingsDialog)
self.ResetButton.setGeometry(QtCore.QRect(310, 470, 81, 26))
self.ResetButton.setObjectName("ResetButton")
QtCore.QObject.connect(self.CancelButton, QtCore.SIGNAL("clicked()"), self.close)
QtCore.QObject.connect(self.CancelButton, QtCore.SIGNAL("clicked()"), self.close)
self.retranslateUi(SettingsDialog)
self.SettingsTabWidget.setCurrentIndex(5)
QtCore.QMetaObject.connectSlotsByName(SettingsDialog)
def retranslateUi(self, SettingsDialog):
SettingsDialog.setWindowTitle(QtGui.QApplication.translate("SettingsDialog", "Settings", None, QtGui.QApplication.UnicodeUTF8))
SettingsDialog.setWindowTitle(QtGui.QApplication.translate("SettingsDialog", "Settings", None, QtGui.QApplication.UnicodeUTF8))
self.GlobalGroupBox.setTitle(QtGui.QApplication.translate("SettingsDialog", "Global theme", None, QtGui.QApplication.UnicodeUTF8))
self.DefaultComboBox.setItemText(0, QtGui.QApplication.translate("SettingsDialog", "African Sunset", None, QtGui.QApplication.UnicodeUTF8))
@ -290,8 +281,8 @@ class SettingsForm(QDialog):
self.SearchGroupBox_3.setTitle(QtGui.QApplication.translate("SettingsDialog", "Search", None, QtGui.QApplication.UnicodeUTF8))
self.SearchCheckBox_3.setText(QtGui.QApplication.translate("SettingsDialog", "Enabled search-as-you-type", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabWidget.setTabText(self.SettingsTabWidget.indexOf(self.SlideTab), QtGui.QApplication.translate("SettingsDialog", "Songs", None, QtGui.QApplication.UnicodeUTF8))
self.SaveButton.setText(QtGui.QApplication.translate("SettingsDialog", "Save", None, QtGui.QApplication.UnicodeUTF8))
self.CancelButton.setText(QtGui.QApplication.translate("SettingsDialog", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
self.ResetButton.setText(QtGui.QApplication.translate("SettingsDialog", "Reset", None, QtGui.QApplication.UnicodeUTF8))
"""

107
openlp/core/ui/themestab.py Normal file
View File

@ -0,0 +1,107 @@
# -*- 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
"""
from PyQt4 import QtCore, QtGui
from openlp.core import translate
from openlp.core.lib import SettingsTab
from openlp.core.resources import *
class ThemesTab(SettingsTab):
"""
ThemesTab is the theme settings tab in the settings dialog.
"""
def __init__(self):
SettingsTab.__init__(self, u'Themes')
def setupUi(self):
self.setObjectName(u'ThemesTab')
self.ThemesTabLayout = QtGui.QHBoxLayout(self)
self.ThemesTabLayout.setSpacing(8)
self.ThemesTabLayout.setMargin(8)
self.ThemesTabLayout.setObjectName(u'ThemesTabLayout')
self.GlobalGroupBox = QtGui.QGroupBox(self)
self.GlobalGroupBox.setObjectName(u'GlobalGroupBox')
self.GlobalGroupBoxLayout = QtGui.QVBoxLayout(self.GlobalGroupBox)
self.GlobalGroupBoxLayout.setSpacing(8)
self.GlobalGroupBoxLayout.setMargin(8)
self.GlobalGroupBoxLayout.setObjectName(u'GlobalGroupBoxLayout')
self.DefaultComboBox = QtGui.QComboBox(self.GlobalGroupBox)
self.DefaultComboBox.setObjectName(u'DefaultComboBox')
self.DefaultComboBox.addItem(QtCore.QString())
self.DefaultComboBox.addItem(QtCore.QString())
self.DefaultComboBox.addItem(QtCore.QString())
self.GlobalGroupBoxLayout.addWidget(self.DefaultComboBox)
self.DefaultListView = QtGui.QListView(self.GlobalGroupBox)
self.DefaultListView.setObjectName(u'DefaultListView')
self.GlobalGroupBoxLayout.addWidget(self.DefaultListView)
self.ThemesTabLayout.addWidget(self.GlobalGroupBox)
self.LevelGroupBox = QtGui.QGroupBox(self)
self.LevelGroupBox.setObjectName(u'LevelGroupBox')
self.LevelLayout = QtGui.QFormLayout(self.LevelGroupBox)
self.LevelLayout.setLabelAlignment(
QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.LevelLayout.setFormAlignment(
QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.LevelLayout.setMargin(8)
self.LevelLayout.setSpacing(8)
self.LevelLayout.setObjectName(u'LevelLayout')
self.SongLevelRadioButton = QtGui.QRadioButton(self.LevelGroupBox)
self.SongLevelRadioButton.setObjectName(u'SongLevelRadioButton')
self.LevelLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.SongLevelRadioButton)
self.SongLevelLabel = QtGui.QLabel(self.LevelGroupBox)
self.SongLevelLabel.setWordWrap(True)
self.SongLevelLabel.setObjectName(u'SongLevelLabel')
self.LevelLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.SongLevelLabel)
self.ServiceLevelRadioButton = QtGui.QRadioButton(self.LevelGroupBox)
self.ServiceLevelRadioButton.setObjectName(u'ServiceLevelRadioButton')
self.LevelLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.ServiceLevelRadioButton)
self.ServiceLevelLabel = QtGui.QLabel(self.LevelGroupBox)
self.ServiceLevelLabel.setWordWrap(True)
self.ServiceLevelLabel.setObjectName(u'ServiceLevelLabel')
self.LevelLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.ServiceLevelLabel)
self.GlobalLevelRadioButton = QtGui.QRadioButton(self.LevelGroupBox)
self.GlobalLevelRadioButton.setChecked(True)
self.GlobalLevelRadioButton.setObjectName(u'GlobalLevelRadioButton')
self.LevelLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.GlobalLevelRadioButton)
self.GlobalLevelLabel = QtGui.QLabel(self.LevelGroupBox)
self.GlobalLevelLabel.setWordWrap(True)
self.GlobalLevelLabel.setObjectName(u'GlobalLevelLabel')
self.LevelLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.GlobalLevelLabel)
self.ThemesTabLayout.addWidget(self.LevelGroupBox)
def retranslateUi(self):
self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
self.DefaultComboBox.setItemText(0, translate(u'ThemesTab', u'African Sunset'))
self.DefaultComboBox.setItemText(1, translate(u'ThemesTab', u'Snowy Mountains'))
self.DefaultComboBox.setItemText(2, translate(u'ThemesTab', u'Wilderness'))
self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
self.SongLevelRadioButton.setText(translate(u'ThemesTab', u'Song level'))
self.SongLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from each song in the database. If a song doesn\'t have a theme associated with it, then use the service\'s theme. If the service doesn\'t have a theme, then use the global theme.'))
self.ServiceLevelRadioButton.setText(translate(u'ThemesTab', u'Service level'))
self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service , overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.'))
self.GlobalLevelRadioButton.setText(translate(u'ThemesTab', u'Global level'))
self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated wither either the service or the songs.'))

View File

@ -24,9 +24,9 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import *
from openlp.core.resources import *
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem, Receiver, SettingsTabItem
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem, Receiver
from openlp.plugins.bibles.lib import BibleManager
from openlp.plugins.bibles.lib import BibleManager, BiblesTab
from openlp.plugins.bibles.forms import BibleImportForm
from openlp.plugins.bibles.lib.tables import *
@ -47,15 +47,12 @@ class BiblePlugin(Plugin, PluginUtils):
#Register the bible Manager
self.biblemanager = BibleManager(self.config)
self.search_results = {} # place to store the search results
QtCore.QObject.connect(Receiver().get_receiver(),QtCore.SIGNAL("openlpreloadbibles"),self.reload_bibles)
QtCore.QObject.connect(Receiver().get_receiver(),
QtCore.SIGNAL("openlpreloadbibles"), self.reload_bibles)
def has_settings_tab_item(self):
return True
def get_settings_tab_item(self):
self.SettingsTabItem= SettingsTabItem()
def get_settings_tab(self):
self.BiblesTab = BiblesTab()
"""
self.Bibles = QtGui.QWidget()
self.Bibles.setObjectName("Bibles")
self.formLayout_3 = QtGui.QFormLayout(self.Bibles)
@ -131,11 +128,11 @@ class BiblePlugin(Plugin, PluginUtils):
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-style:italic;\">Changes don\'t affect verses already in the service</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.SearchGroupBox_2.setTitle(QtGui.QApplication.translate("SettingsForm", "Search", None, QtGui.QApplication.UnicodeUTF8))
self.SearchCheckBox_2.setText(QtGui.QApplication.translate("SettingsForm", "Enabled search-as-you-type", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabItem.add_items(self.Bibles)
self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "Bibles", None, QtGui.QApplication.UnicodeUTF8))
return self.SettingsTabItem
"""
return self.BiblesTab
def get_media_manager_item(self):
# Create the MediaManagerItem object
@ -213,7 +210,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.SearchTabWidget.addTab(self.QuickTab, 'Quick')
QuickSpacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.QuickLayout.addItem(QuickSpacerItem, 4, 2, 1, 1)
# Add the Advanced Search tab
self.AdvancedTab = QtGui.QWidget()
self.AdvancedTab.setObjectName('AdvancedTab')
@ -271,13 +268,13 @@ class BiblePlugin(Plugin, PluginUtils):
self.ClearAdvancedSearchComboBox = QtGui.QComboBox(self.QuickTab)
self.ClearAdvancedSearchComboBox.setObjectName('ClearAdvancedSearchComboBox')
self.AdvancedLayout.addWidget(self.ClearAdvancedSearchComboBox, 5, 2, 1, 1)
self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab)
self.AdvancedSearchButton.setObjectName('AdvancedSearchButton')
self.AdvancedSearchButton.setText('Search')
self.AdvancedLayout.addWidget(self.AdvancedSearchButton, 5, 3, 1, 1)
self.SearchTabWidget.addTab(self.AdvancedTab, 'Advanced')
# Add the search tab widget to the page layout
self.MediaManagerItem.PageLayout.addWidget(self.SearchTabWidget)
@ -306,7 +303,7 @@ class BiblePlugin(Plugin, PluginUtils):
##############Buttons
QtCore.QObject.connect(self.AdvancedSearchButton, QtCore.SIGNAL("pressed()"), self.onAdvancedSearchButton)
QtCore.QObject.connect(self.QuickSearchButton, QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
##############Context Menus
self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
@ -322,7 +319,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.ImportBibleItem.setText(QtGui.QApplication.translate("main_window", "&Bible", None, QtGui.QApplication.UnicodeUTF8))
# Signals and slots
QtCore.QObject.connect(self.ImportBibleItem, QtCore.SIGNAL("triggered()"), self.onBibleNewClick)
def add_export_menu_item(self, export_menu):
self.ExportBibleItem = QtGui.QAction(export_menu)
self.ExportBibleItem.setObjectName("ExportBibleItem")
@ -331,35 +328,35 @@ class BiblePlugin(Plugin, PluginUtils):
def initialise(self):
self._initialise_form() # build the form
def _initialise_form(self):
log.debug("_initialise_form")
self.QuickSearchComboBox.clear()
self.QuickVersionComboBox.clear()
self.AdvancedVersionComboBox.clear()
self.ClearQuickSearchComboBox.clear()
self.ClearAdvancedSearchComboBox.clear()
self.QuickSearchComboBox.addItem(u"Verse Search")
self.ClearAdvancedSearchComboBox.clear()
self.QuickSearchComboBox.addItem(u"Verse Search")
self.QuickSearchComboBox.addItem(u"Text Search")
self.ClearQuickSearchComboBox.addItem(u"Clear")
self.ClearQuickSearchComboBox.addItem(u"Keep")
self.ClearAdvancedSearchComboBox.addItem(u"Clear")
self.ClearQuickSearchComboBox.addItem(u"Clear")
self.ClearQuickSearchComboBox.addItem(u"Keep")
self.ClearAdvancedSearchComboBox.addItem(u"Clear")
self.ClearAdvancedSearchComboBox.addItem(u"Keep")
bibles = self.biblemanager.get_bibles("full")
for b in bibles: # load bibles into the combo boxes
self.QuickVersionComboBox.addItem(b)
bibles = self.biblemanager.get_bibles("partial") # Without HTTP
first = True
for b in bibles: # load bibles into the combo boxes
self.AdvancedVersionComboBox.addItem(b)
self.AdvancedVersionComboBox.addItem(b)
if first:
first = False
self._initialise_bible_advanced(b) # use the first bible as the trigger
self._initialise_bible_advanced(b) # use the first bible as the trigger
def onAdvancedVersionComboBox(self):
self._initialise_bible_advanced(str(self.AdvancedVersionComboBox.currentText())) # restet the bible info
pass
@ -374,7 +371,7 @@ class BiblePlugin(Plugin, PluginUtils):
def onBibleLiveClick(self):
pass
def onBibleAddClick(self):
pass
@ -382,7 +379,7 @@ class BiblePlugin(Plugin, PluginUtils):
self._save_settings()
def onSettingsResetButton(self):
self._load_reset_settings()
self._load_reset_settings()
def onAdvancedFromVerse(self):
frm = self.AdvancedFromVerse.currentText()
@ -407,7 +404,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.search_results = self.biblemanager.get_verse_text(bible, book, chapter_from, chapter_to, verse_from, verse_to)
if self.ClearAdvancedSearchComboBox.currentText() == u"Clear":
self.BibleListView.clear() # clear the results
self.BibleListView.setRowCount(0)
self.BibleListView.setRowCount(0)
self._display_results(bible)
def onAdvancedFromChapter(self):
@ -423,11 +420,11 @@ class BiblePlugin(Plugin, PluginUtils):
self.log.debug("onQuickSearchButton")
bible = str(self.QuickVersionComboBox.currentText())
text = str(self.QuickSearchEdit.displayText())
if self.ClearQuickSearchComboBox.currentText() == u"Clear":
self.BibleListView.clear() # clear the results
self.BibleListView.setRowCount(0)
self.BibleListView.setRowCount(0)
if self.QuickSearchComboBox.currentText() == u"Text Search":
self.search_results = self.biblemanager.get_verse_from_text(bible,text)
else:
@ -469,11 +466,11 @@ class BiblePlugin(Plugin, PluginUtils):
loc += verse
loc += closing
return loc
def reload_bibles(self):
self.biblemanager.reload_bibles()
self._initialise_form()
def _initialise_bible_advanced(self, bible):
log.debug("_initialise_bible_advanced %s ", bible)
currentBook = str(self.AdvancedBookComboBox.currentText())
@ -512,7 +509,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.BibleListView.setItem(row_count , 0, table_data)
table_data = QtGui.QTableWidgetItem(str(book + " " +str(chap) + ":"+ str(vse)) + " ("+str(bible)+")")
self.BibleListView.setItem(row_count , 1, table_data)
self.BibleListView.setRowHeight(row_count, 20)
self.BibleListView.setRowHeight(row_count, 20)
def _search_using_bible_reference(self, bible, search):
book = ""
@ -528,7 +525,7 @@ class BiblePlugin(Plugin, PluginUtils):
for i in range (len(search)-1, 0, -1): # 0 index arrays
if search[i] == " ":
book = search[:i]
search = search[i:] # remove book from string
search = search[i:] # remove book from string
break
search = search.replace("v", ":") # allow V or v for verse instead of :
search = search.replace("V", ":") # allow V or v for verse instead of :
@ -551,7 +548,7 @@ class BiblePlugin(Plugin, PluginUtils):
sp = search.split("-") #find first
#print sp, len(sp)
sp1 = sp[0].split(":")
#print sp1, len(sp1)
#print sp1, len(sp1)
if len(sp1) == 1:
start_chapter = sp1[0]
start_verse = 1
@ -563,7 +560,7 @@ class BiblePlugin(Plugin, PluginUtils):
end_verse = start_verse
else:
sp1 = sp[1].split(":")
#print sp1, len(sp1)
#print sp1, len(sp1)
if len(sp1) == 1:
end_chapter = sp1[0]
end_verse = 1
@ -584,13 +581,13 @@ class BiblePlugin(Plugin, PluginUtils):
#print "message = " + str(message)
#print "search = " + str(original)
#print "results = " + str(book) + " @ "+ str(start_chapter)+" @ "+ str(end_chapter)+" @ "+ str(start_verse)+ " @ "+ str(end_verse)
if message == None:
self.search_results = None
self.search_results = self.biblemanager.get_verse_text(bible, book,int(start_chapter), int(end_chapter), int(start_verse), int(end_verse))
else:
reply = QtGui.QMessageBox.information(self.MediaManagerItem,"Information",message)
def load_settings(self):
pass
# self.SettingsOutputStyleComboBox.setCurrentIndex(int(self.config.get_config("bible_output_style", 0)))
@ -599,7 +596,7 @@ class BiblePlugin(Plugin, PluginUtils):
# self.SettingsNewChapterCheck.setCheckState(int(self.config.get_config("bible_new_chapter", 0)))
# except:
# pass
def save_settings(self):
pass
# self.config.set_config("bible_output_style", str(self.SettingsOutputStyleComboBox.currentIndex()))
@ -607,10 +604,10 @@ class BiblePlugin(Plugin, PluginUtils):
# self.config.set_config("bible_new_chapter", str(self.SettingsNewChapterCheck.checkState()))
# self.SettingsOutputStyleComboBox.clear()
# self.SettingsVerseStyleComboBox.clear()
# self.SettingsVerseStyleComboBox.clear()
# self.SettingsOutputStyleComboBox.addItem(u"Continuous")
# self.SettingsOutputStyleComboBox.addItem(u"Paragraph")
# self.SettingsOutputStyleComboBox.addItem(u"Paragraph")
# self.SettingsVerseStyleComboBox.addItem(u"No Brackets")
# self.SettingsVerseStyleComboBox.addItem(u"( and )")
# self.SettingsVerseStyleComboBox.addItem(u"{ and }")
@ -620,4 +617,4 @@ class BiblePlugin(Plugin, PluginUtils):
def define_tab(self):
pass
# QtCore.QObject.connect(self.SettingsResetButton, QtCore.SIGNAL("pressed()"), self.onSettingsResetButton)
# QtCore.QObject.connect(self.SettingsSaveButton, QtCore.SIGNAL("pressed()"), self.onSettingsSaveButton)
# QtCore.QObject.connect(self.SettingsSaveButton, QtCore.SIGNAL("pressed()"), self.onSettingsSaveButton)

View File

@ -20,5 +20,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from common import BibleCommon
from manager import BibleManager
from biblestab import BiblesTab
__all__ = ['BibleCommon', 'BibleManager']
__all__ = ['BibleCommon', 'BibleManager', 'BiblesTab']

View File

@ -0,0 +1,35 @@
# -*- 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
"""
from PyQt4 import QtCore, QtGui
from openlp.core import translate
from openlp.core.lib import SettingsTab
from openlp.core.resources import *
class BiblesTab(SettingsTab):
"""
BiblesTab is the Bibles settings tab in the settings dialog.
"""
def __init__(self):
SettingsTab.__init__(self, u'Bibles')
def setupUi(self):
self.setObjectName(u'BiblesTab')

View File

@ -18,8 +18,6 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
from PyQt4 import Qt, QtCore, QtGui
from PyQt4.QtGui import QDialog
from PyQt4.QtCore import pyqtSignature
from authorsform import AuthorsForm
from topicsform import TopicsForm
@ -27,7 +25,7 @@ from songbookform import SongBookForm
from editsongdialog import Ui_EditSongDialog
class EditSongForm(QDialog, Ui_EditSongDialog):
class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
"""
Class documentation goes here.
"""
@ -35,11 +33,12 @@ class EditSongForm(QDialog, Ui_EditSongDialog):
"""
Constructor
"""
QDialog.__init__(self, parent)
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
# Connecting signals and slots
QtCore.QObject.connect(self.AddAuthorsButton, QtCore.SIGNAL('clicked()'), self.onAddAuthorsButtonClicked)
QtCore.QObject.connect(self.AddTopicButton, QtCore.SIGNAL('clicked()'), self.onAddTopicButtonClicked)
QtCore.QObject.connect(self.AddSongBookButton, QtCore.SIGNAL('clicked()'), self.onAddSongBookButtonClicked)
QtCore.QObject.connect(self.CopyrightInsertItem, QtCore.SIGNAL('clicked()'), self.onCopyrightInsertItemTriggered)
# Create other objects and forms
self.songmanager = songmanager
@ -98,8 +97,7 @@ class EditSongForm(QDialog, Ui_EditSongDialog):
self.topics_form.load_form()
self.topics_form.exec_()
@pyqtSignature("")
def on_AddSongBookButton_clicked(self):
def onAddSongBookButtonClicked(self):
"""
Slot documentation goes here.
"""

View File

@ -21,7 +21,7 @@ import os
from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem, SettingsTabItem
from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem, SettingsTab
class VideoPlugin(Plugin, PluginUtils):
def __init__(self):
@ -32,14 +32,10 @@ class VideoPlugin(Plugin, PluginUtils):
self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap(':/media/media_video.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
def has_settings_tab_item(self):
return True
def get_settings_tab_item(self):
self.SettingsTabItem= SettingsTabItem()
def get_settings_tab(self):
self.VideosTab = SettingsTab(u'Videos')
"""
self.Videos = QtGui.QWidget()
self.Videos.setObjectName("Videos")
@ -58,13 +54,13 @@ class VideoPlugin(Plugin, PluginUtils):
self.UseVMRLabel = QtGui.QLabel(self.VideoModeGroupBox)
self.UseVMRLabel.setObjectName("UseVMRLabel")
self.VideoModeLayout.addWidget(self.UseVMRLabel)
self.VideoLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.VideoModeGroupBox)
self.SettingsTabItem.add_items(self.Videos)
self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "Videos", None, QtGui.QApplication.UnicodeUTF8))
self.VideoModeGroupBox.setTitle(QtGui.QApplication.translate("SettingsForm", "Video Mode", None, QtGui.QApplication.UnicodeUTF8))
self.UseVMRCheckBox.setText(QtGui.QApplication.translate("SettingsForm", "Use Video Mode Rendering", None, QtGui.QApplication.UnicodeUTF8))
self.UseVMRLabel.setText(QtGui.QApplication.translate("SettingsForm", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
@ -72,9 +68,9 @@ class VideoPlugin(Plugin, PluginUtils):
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'DejaVu Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-style:italic;\">No video preview available with VMR enabled</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
return self.SettingsTabItem
"""
return self.VideosTab
def get_media_manager_item(self):
# Create the MediaManagerItem object
self.MediaManagerItem = MediaManagerItem(self.icon, 'Videos')
@ -105,49 +101,49 @@ class VideoPlugin(Plugin, PluginUtils):
self.VideoListView.setColumnHidden(0, True)
self.VideoListView.setColumnWidth(1, 275)
self.VideoListView.setShowGrid(False)
self.VideoListView.setSortingEnabled(False)
self.VideoListView.setSortingEnabled(False)
self.VideoListView.setAlternatingRowColors(True)
self.VideoListView.verticalHeader().setVisible(False)
self.VideoListView.horizontalHeader().setVisible(False)
self.VideoListView.horizontalHeader().setVisible(False)
self.VideoListView.setAlternatingRowColors(True)
self.VideoListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.VideoListView.setObjectName("VideoListView")
self.MediaManagerItem.PageLayout.addWidget(self.VideoListView)
#define and add the context menu
self.VideoListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_preview.png', "&Preview Video", self.onVideoPreviewClick))
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_live.png', "&Show Live", self.onVideoLiveClick))
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_add.png', "&Add to Service", self.onVideoAddClick))
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_preview.png', "&Preview Video", self.onVideoPreviewClick))
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_live.png', "&Show Live", self.onVideoLiveClick))
self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_add.png', "&Add to Service", self.onVideoAddClick))
return self.MediaManagerItem
def initialise(self):
list = self._load_display_list()
self._load_video_list(list)
self._load_video_list(list)
def onVideoNewClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.avi *.mpeg)")
if len(files) > 0:
self._load_video_list(files)
self._save_last_directory(files[0])
self._save_display_list(self.VideoListView)
self._save_display_list(self.VideoListView)
def _load_video_list(self, list):
for f in list:
file_path , file_name = os.path.split(str(f))
file_path , file_name = os.path.split(str(f))
count = self.VideoListView.rowCount()
self.VideoListView.setRowCount(count+1)
row_item = QtGui.QTableWidgetItem(str(f))
self.VideoListView.setItem(count , 0, row_item)
row_item = QtGui.QTableWidgetItem(str(file_name))
self.VideoListView.setItem(count , 1, row_item)
self.VideoListView.setRowHeight(count, 20)
self.VideoListView.setRowHeight(count, 20)
def onVideoDeleteClick(self):
cr = self.VideoListView.currentRow()
self.VideoListView.removeRow(int(cr))
self._save_display_list(self.VideoListView)
self._save_display_list(self.VideoListView)
def onVideoPreviewClick(self):
pass

View File

@ -28,6 +28,186 @@
<property name="currentIndex" >
<number>0</number>
</property>
<widget class="QWidget" name="GeneralTab" >
<attribute name="title" >
<string>General</string>
</attribute>
<layout class="QHBoxLayout" name="GeneralLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="GeneralLeftWidget" >
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QGroupBox" name="MonitorGroupBox" >
<property name="title" >
<string>Monitors</string>
</property>
<layout class="QVBoxLayout" name="MonitorLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QLabel" name="MonitorLabel" >
<property name="text" >
<string>Select monitor for output display:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="MonitorComboBox" >
<item>
<property name="text" >
<string>Monitor 1 on X11 Windowing System</string>
</property>
</item>
<item>
<property name="text" >
<string>Monitor 2 on X11 Windowing System</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="BlankScreenGroupBox" >
<property name="title" >
<string>Blank Screen</string>
</property>
<layout class="QVBoxLayout" name="BlankScreenLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="WarningCheckBox" >
<property name="text" >
<string>Show warning on startup</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="AutoOpenGroupBox" >
<property name="title" >
<string>Auto Open Last Service</string>
</property>
<layout class="QVBoxLayout" name="AutoOpenLayout" >
<item>
<widget class="QCheckBox" name="AutoOpenCheckBox" >
<property name="text" >
<string>Automatically open the last service at startup</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="GeneralLeftSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="GeneralRightWidget" >
<layout class="QVBoxLayout" name="GeneralRightLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="CCLIGroupBox" >
<property name="title" >
<string>CCLI Details</string>
</property>
<layout class="QGridLayout" name="CCLILayout" >
<property name="margin" >
<number>8</number>
</property>
<property name="spacing" >
<number>8</number>
</property>
<item row="0" column="0" >
<widget class="QLabel" name="NumberLabel" >
<property name="text" >
<string>CCLI Number:</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="NumberEdit" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="UsernameLabel" >
<property name="text" >
<string>SongSelect Username:</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="UsernameEdit" />
</item>
<item row="2" column="0" >
<widget class="QLabel" name="PasswordLabel" >
<property name="text" >
<string>SongSelect Password:</string>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QLineEdit" name="PasswordEdit" >
<property name="echoMode" >
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="GeneralRightSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="ThemesTab" >
<attribute name="title" >
<string>Themes</string>
@ -156,11 +336,11 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="DisplayTab" >
<widget class="QWidget" name="AlertsTab" >
<attribute name="title" >
<string>Display</string>
<string>Alerts</string>
</attribute>
<layout class="QHBoxLayout" name="DisplayTabLayout" >
<layout class="QHBoxLayout" name="AlertsLayout" >
<property name="spacing" >
<number>8</number>
</property>
@ -168,336 +348,7 @@
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="LeftColumn" >
<layout class="QVBoxLayout" name="LeftColumnLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="MonitorGroupBox" >
<property name="title" >
<string>Monitors</string>
</property>
<layout class="QVBoxLayout" name="MonitorLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QLabel" name="MonitorLabel" >
<property name="text" >
<string>Select monitor for output display:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="MonitorComboBox" >
<item>
<property name="text" >
<string>Monitor 1 on X11 Windowing System</string>
</property>
</item>
<item>
<property name="text" >
<string>Monitor 2 on X11 Windowing System</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="FontSizeGroupBox" >
<property name="title" >
<string>Font Size</string>
</property>
<layout class="QVBoxLayout" name="FontSizeLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QRadioButton" name="AutoResizeRadioButton" >
<property name="text" >
<string>Automatically resize font to fit text to slide</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="WrapLinesRadioButton" >
<property name="text" >
<string>Wrap long lines to keep desired font</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="SongDisplayGroupBox" >
<property name="title" >
<string>Song Display</string>
</property>
<layout class="QVBoxLayout" name="SongDisplayLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="EnableCreditsCheckBox" >
<property name="text" >
<string>Enable displaying of song credits</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="DisplayLeftSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="RightColumn" >
<layout class="QVBoxLayout" name="RightColumnLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="VerseDisplayGroupBox" >
<property name="title" >
<string>Verse Display</string>
</property>
<layout class="QVBoxLayout" name="VerseDisplayLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="VerseTypeWidget" >
<layout class="QHBoxLayout" name="VerseTypeLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="VerseRadioButton" >
<property name="text" >
<string>Verse style</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="ParagraphRadioButton" >
<property name="text" >
<string>Paragraph style</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="NewChaptersCheckBox" >
<property name="text" >
<string>Only show new chapter numbers</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="DisplayStyleWidget" >
<layout class="QHBoxLayout" name="DisplayStyleLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QLabel" name="DisplayStyleLabel" >
<property name="text" >
<string>Display Style:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="DisplayStyleComboBox" >
<item>
<property name="text" >
<string>No brackets</string>
</property>
</item>
<item>
<property name="text" >
<string>( and )</string>
</property>
</item>
<item>
<property name="text" >
<string>{ and }</string>
</property>
</item>
<item>
<property name="text" >
<string>[ and ]</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="DisplayStyleSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="ChangeNoteLabel" >
<property name="text" >
<string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
p, li { white-space: pre-wrap; }
&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;">
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-style:italic;">Changes don't affect verses already in the service&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="BlankScreenGroupBox" >
<property name="title" >
<string>Blank Screen</string>
</property>
<layout class="QVBoxLayout" name="BlankScreenLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="WarningCheckBox" >
<property name="text" >
<string>Show warning on startup</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="VideoModeGroupBox" >
<property name="title" >
<string>Video Mode</string>
</property>
<layout class="QVBoxLayout" name="VideoModeLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="UseVMRCheckBox" >
<property name="text" >
<string>Use Video Mode Rendering</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="UseVMRLabel" >
<property name="text" >
<string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
p, li { white-space: pre-wrap; }
&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;">
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-style:italic;">No video preview available with VMR enabled&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="DisplayRightSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="SlideTab" >
<attribute name="title" >
<string>Slide</string>
</attribute>
<layout class="QHBoxLayout" name="SlideLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="SlideLeftColumn" >
<widget class="QWidget" native="1" name="AlertLeftColumn" >
<layout class="QVBoxLayout" name="SlideLeftLayout" >
<property name="spacing" >
<number>8</number>
@ -506,11 +357,11 @@ p, li { white-space: pre-wrap; }
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="AlertGroupBox" >
<widget class="QGroupBox" name="FontGroupBox" >
<property name="title" >
<string>Alerts</string>
<string>Font</string>
</property>
<layout class="QVBoxLayout" name="AlertLayout" >
<layout class="QVBoxLayout" name="FontLayout" >
<property name="spacing" >
<number>8</number>
</property>
@ -598,16 +449,6 @@ p, li { white-space: pre-wrap; }
</layout>
</widget>
</item>
<item>
<widget class="QGraphicsView" name="FontPreview" >
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>64</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="LengthWidget" >
<layout class="QHBoxLayout" name="LengthLayout" >
@ -673,7 +514,7 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="widget" >
<widget class="QWidget" native="1" name="SlideRightColumn" >
<layout class="QVBoxLayout" name="SlideRightLayout" >
<property name="spacing" >
<number>8</number>
@ -682,11 +523,17 @@ p, li { white-space: pre-wrap; }
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="SongWizardGroupBox" >
<property name="title" >
<string>Song Wizard</string>
<widget class="QGroupBox" name="PreviewGroupBox" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="SongWizardLayout" >
<property name="title" >
<string>Preview</string>
</property>
<layout class="QVBoxLayout" name="PreviewLayout" >
<property name="spacing" >
<number>8</number>
</property>
@ -694,101 +541,12 @@ p, li { white-space: pre-wrap; }
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="SongWizardCheckBox" >
<property name="text" >
<string>Use the Song Wizard to add songs</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="SlideWrapAroundGroupBox" >
<property name="title" >
<string>Slide Wrap Around</string>
</property>
<layout class="QVBoxLayout" name="SlideWrapAroundLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QCheckBox" name="SlideWrapAroundCheckBox" >
<property name="text" >
<string>Enable slide wrap around</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="TimedCyclingGroupBox" >
<property name="title" >
<string>Timed Cycling</string>
</property>
<layout class="QVBoxLayout" name="TimedCyclingLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="IntervalWidget" >
<layout class="QHBoxLayout" name="IntervalLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QLabel" name="UpdateIntervalLabel" >
<property name="text" >
<string>Update interval:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="IntervalSpinBox" >
<property name="suffix" >
<string>s</string>
</property>
<property name="maximum" >
<number>600</number>
</property>
<property name="value" >
<number>30</number>
</property>
</widget>
</item>
<item>
<spacer name="IntervalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>139</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="EnabledCyclingCheckBox" >
<property name="text" >
<string>Enable timed cycling</string>
<widget class="QGraphicsView" name="FontPreview" >
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>64</height>
</size>
</property>
</widget>
</item>
@ -813,153 +571,6 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</widget>
<widget class="QWidget" name="GeneralTab" >
<attribute name="title" >
<string>General</string>
</attribute>
<layout class="QHBoxLayout" name="GeneralLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="GeneralLeftWidget" >
<layout class="QVBoxLayout" name="GeneralLeftLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="CCLIGroupBox" >
<property name="title" >
<string>CCLI Details</string>
</property>
<layout class="QGridLayout" name="CCLILayout" >
<property name="margin" >
<number>8</number>
</property>
<property name="spacing" >
<number>8</number>
</property>
<item row="0" column="0" >
<widget class="QLabel" name="NumberLabel" >
<property name="text" >
<string>CCLI Number:</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="NumberEdit" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="UsernameLabel" >
<property name="text" >
<string>SongSelect Username:</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="UsernameEdit" />
</item>
<item row="2" column="0" >
<widget class="QLabel" name="PasswordLabel" >
<property name="text" >
<string>SongSelect Password:</string>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QLineEdit" name="PasswordEdit" >
<property name="echoMode" >
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="GeneralLeftSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="GeneralRightWidget" >
<layout class="QVBoxLayout" name="GeneralRightLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="AutoOpenGroupBox" >
<property name="title" >
<string>Auto Open Last Service</string>
</property>
<layout class="QVBoxLayout" name="AutoOpenLayout" >
<item>
<widget class="QCheckBox" name="AutoOpenCheckBox" >
<property name="text" >
<string>Automatically open the last service at startup</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="SearchGroupBox" >
<property name="title" >
<string>Search</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QCheckBox" name="SearchCheckBox" >
<property name="text" >
<string>Enabled search-as-you-type</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="GeneralRightSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>