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"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd"> <!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
<!-- eric4 user project file for project openlp.org 2.0 --> <!-- 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 --> <!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
<UserProject version="4.0"> <UserProject version="4.0">
</UserProject> </UserProject>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd"> <!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd">
<!-- eric4 tasks file for project openlp.org 2.0 --> <!-- 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"> <Tasks version="4.2">
<Task priority="1" completed="False" bugfix="False"> <Task priority="1" completed="False" bugfix="False">
<Summary>TODO: what is the tags for bridge, pre-chorus?</Summary> <Summary>TODO: what is the tags for bridge, pre-chorus?</Summary>
@ -111,4 +111,31 @@
<Linenumber>534</Linenumber> <Linenumber>534</Linenumber>
</Resource> </Resource>
</Task> </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> </Tasks>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-4.4.dtd"> <!DOCTYPE Project SYSTEM "Project-4.4.dtd">
<!-- eric4 project file for project openlp.org 2.0 --> <!-- 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 --> <!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
<Project version="4.4"> <Project version="4.4">
<ProgLanguage mixed="0">Python</ProgLanguage> <ProgLanguage mixed="0">Python</ProgLanguage>
@ -26,7 +26,6 @@
<Source>openlp/core/ui/__init__.py</Source> <Source>openlp/core/ui/__init__.py</Source>
<Source>openlp/core/ui/mainwindow.py</Source> <Source>openlp/core/ui/mainwindow.py</Source>
<Source>openlp/core/ui/splashscreen.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/alertform.py</Source>
<Source>openlp/core/ui/about.py</Source> <Source>openlp/core/ui/about.py</Source>
<Source>openlp/plugins/songs/songsplugin.py</Source> <Source>openlp/plugins/songs/songsplugin.py</Source>
@ -48,7 +47,6 @@
<Source>openlp/core/resources.py</Source> <Source>openlp/core/resources.py</Source>
<Source>openlp/core/lib/__init__.py</Source> <Source>openlp/core/lib/__init__.py</Source>
<Source>openlp/core/lib/xmlrootclass.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/plugin.py</Source>
<Source>openlp/core/lib/mediamanageritem.py</Source> <Source>openlp/core/lib/mediamanageritem.py</Source>
<Source>openlp/core/lib/event.py</Source> <Source>openlp/core/lib/event.py</Source>
@ -122,6 +120,17 @@
<Source>openlp/core/lib/imageserviceitem.py</Source> <Source>openlp/core/lib/imageserviceitem.py</Source>
<Source>openlp/plugins/bibles/forms/bibleeditdialog.py</Source> <Source>openlp/plugins/bibles/forms/bibleeditdialog.py</Source>
<Source>resources/forms/Ui_editsongdialog.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> </Sources>
<Forms> <Forms>
<Form>resources/forms/openlpexportform.ui</Form> <Form>resources/forms/openlpexportform.ui</Form>
@ -140,7 +149,8 @@
<Form>resources/forms/songbookdialog.ui</Form> <Form>resources/forms/songbookdialog.ui</Form>
<Form>resources/forms/topicsdialog.ui</Form> <Form>resources/forms/topicsdialog.ui</Form>
<Form>resources/forms/editsongdialog.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> </Forms>
<Translations> <Translations>
</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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from PyQt4 import QtCore, QtGui
from render import Renderer from render import Renderer
from settingsmanager import SettingsManager from settingsmanager import SettingsManager
from pluginmanager import PluginManager 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 pluginutils import PluginUtils
from pluginconfig import PluginConfig from pluginconfig import PluginConfig
from plugin import Plugin from plugin import Plugin
from settingstabitem import SettingsTabItem from settingstab import SettingsTab
from mediamanageritem import MediaManagerItem from mediamanageritem import MediaManagerItem
from event import Event from event import Event
from xmlrootclass import XmlRootClass from xmlrootclass import XmlRootClass

View File

@ -21,26 +21,27 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.resources import * 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. Constructor to create the Steetings tab item.
""" """
QtGui.QWidget.__init__(self) QtGui.QWidget.__init__(self)
self.TabLayout = QtGui.QVBoxLayout(self) self.tabTitle = title
self.TabLayout.setSpacing(0) self.setupUi()
self.TabLayout.setMargin(0) self.retranslateUi()
self.tabText = None
def setTabText(self, text): def setTitle(self, title):
self.tabText = text self.tabTitle = title
def add_items(self, items): def title(self):
if type(items).__name__ == "QWidget": return self.tabTitle
self.TabLayout.addWidget(items)
else: def setupUi(self):
for item in items: pass
self.TabLayout.addWidget(item)
def retranslateUi(self):
pass

View File

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

View File

@ -20,12 +20,15 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from slidecontroller import SlideController from slidecontroller import SlideController
from splashscreen import SplashScreen from splashscreen import SplashScreen
from alertstab import AlertsTab
from generaltab import GeneralTab
from themestab import ThemesTab
from about import AboutForm from about import AboutForm
from alertform import AlertForm #from alertform import AlertForm
from generalform import GeneralForm from generalform import GeneralForm
from settingsform import SettingsForm from settingsform import SettingsForm
from servicemanager import ServiceManager from servicemanager import ServiceManager
from mainwindow import MainWindow from mainwindow import MainWindow
__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsForm', __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm',
'MainWindow', 'SlideController', 'ServiceManager,GeneralForm'] '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 PyQt4 import QtCore, QtGui
from openlp.core.resources import * from openlp.core.resources import *
from openlp.core.lib import SettingsTabItem from openlp.core.lib import SettingsTab
class GeneralForm(object): class GeneralForm(object):
""" """
@ -32,9 +32,9 @@ class GeneralForm(object):
def __init__(self): def __init__(self):
pass pass
def get_settings_tab_item(self): def get_settings_tab_item(self):
self.SettingsTabItem= SettingsTabItem() self.SettingsTabItem= SettingsTabItem()
self.DisplayTab = QtGui.QWidget() self.DisplayTab = QtGui.QWidget()
self.DisplayTab.setObjectName("DisplayTab") self.DisplayTab.setObjectName("DisplayTab")
self.DisplayTabLayout = QtGui.QHBoxLayout(self.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.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.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.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.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.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.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.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.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.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.setTabText(QtGui.QApplication.translate("SettingsForm", "General", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabItem.add_items(self.DisplayTab) self.SettingsTabItem.add_items(self.DisplayTab)
return self.SettingsTabItem return self.SettingsTabItem
def load_settings(self): def load_settings(self):
pass pass
def save_settings(self): def save_settings(self):
pass 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.resources import *
from openlp.core.ui import SlideController, ServiceManager from openlp.core.ui import AboutForm, SettingsForm, \
from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController, GeneralForm SlideController, ServiceManager, GeneralForm
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTabItem from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab
from openlp.core import PluginManager from openlp.core import PluginManager
import logging import logging
@ -39,35 +39,33 @@ class MainWindow(object):
def __init__(self): def __init__(self):
self.main_window = QtGui.QMainWindow() self.main_window = QtGui.QMainWindow()
self.about_form = AboutForm() self.about_form = AboutForm()
self.alert_form = AlertForm() #self.alert_form = AlertForm()
self.settings_form = SettingsForm() self.settings_form = SettingsForm()
self.general_form = GeneralForm() #self.general_form = GeneralForm()
pluginpath = os.path.split(os.path.abspath(__file__))[0] pluginpath = os.path.split(os.path.abspath(__file__))[0]
pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins')) pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins'))
self.plugin_manager = PluginManager(pluginpath) self.plugin_manager = PluginManager(pluginpath)
self.setupUi() self.setupUi()
log.info('')
self.plugin_manager.find_plugins(pluginpath, self.PreviewController, self.LiveController) 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 # hook methods have to happen after find_plugins. Find plugins needs the controllers
# hence the hooks have moved front setupUI() to here # hence the hooks have moved from setupUI() to here
# Call the hook method to pull in import menus.
log.info("hook menus") # Find and insert media manager items
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)
#
log.info("hook media") log.info("hook media")
self.plugin_manager.hook_media_manager(self.MediaToolBox) 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): def setupUi(self):
self.main_window.setObjectName("main_window") self.main_window.setObjectName("main_window")
@ -133,7 +131,7 @@ class MainWindow(object):
self.MediaManagerDock.setSizePolicy(sizePolicy) self.MediaManagerDock.setSizePolicy(sizePolicy)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/system/system_mediamanager.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(":/system/system_mediamanager.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.MediaManagerDock.setWindowIcon(icon) self.MediaManagerDock.setWindowIcon(icon)
self.MediaManagerDock.setFloating(False) self.MediaManagerDock.setFloating(False)
self.MediaManagerDock.setObjectName("MediaManagerDock") self.MediaManagerDock.setObjectName("MediaManagerDock")
@ -155,7 +153,7 @@ class MainWindow(object):
self.MediaManagerLayout.addWidget(self.MediaToolBox) self.MediaManagerLayout.addWidget(self.MediaToolBox)
self.MediaManagerDock.setWidget(self.MediaManagerContents) self.MediaManagerDock.setWidget(self.MediaManagerContents)
self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
self.ServiceManagerDock = QtGui.QDockWidget(self.main_window) self.ServiceManagerDock = QtGui.QDockWidget(self.main_window)
ServiceManagerIcon = QtGui.QIcon() ServiceManagerIcon = QtGui.QIcon()
ServiceManagerIcon.addPixmap(QtGui.QPixmap(":/system/system_servicemanager.png"), ServiceManagerIcon.addPixmap(QtGui.QPixmap(":/system/system_servicemanager.png"),
@ -428,10 +426,10 @@ class MainWindow(object):
self.main_window.showMaximized() self.main_window.showMaximized()
def onHelpAboutItemClicked(self): def onHelpAboutItemClicked(self):
self.about_form.show() self.about_form.exec_()
def onToolsAlertItemClicked(self): def onToolsAlertItemClicked(self):
self.alert_form.show() self.alert_form.exec_()
def onOptionsSettingsItemClicked(self): def onOptionsSettingsItemClicked(self):
self.settings_form.exec_() 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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import logging
from PyQt4 import QtCore, QtGui 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.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): def __init__(self, parent=None):
QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.first_time = True self.setupUi(self)
self.plugin_list = [] # General tab
self.GeneralTab = GeneralTab()
def add_virtual_plugin(self, plugin): self.addTab(self.GeneralTab)
""" # Themes tab
Method to allow Core to register screens to behave like plugins self.ThemesTab = ThemesTab()
""" self.addTab(self.ThemesTab)
self.plugin_list.append(plugin) # Alerts tab
self.AlertsTab = AlertsTab()
def receive_plugins(self, plugins): self.addTab(self.AlertsTab)
"""
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
def onSaveButton(self): def addTab(self, tab):
pass log.info(u'Inserting %s' % tab.title())
def onResetButton(self): self.SettingsTabWidget.addTab(tab, tab.title())
def onSaveButtonClick(self):
pass pass
def onResetButtonClick(self):
pass
"""
def setupUi(self, SettingsDialog): def setupUi(self, SettingsDialog):
SettingsDialog.setObjectName("SettingsDialog") SettingsDialog.setObjectName("SettingsDialog")
SettingsDialog.resize(602, 502) SettingsDialog.resize(602, 502)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
SettingsDialog.setWindowIcon(icon) SettingsDialog.setWindowIcon(icon)
self.SettingsTabWidget = QtGui.QTabWidget(SettingsDialog) self.SettingsTabWidget = QtGui.QTabWidget(SettingsDialog)
self.SettingsTabWidget.setGeometry(QtCore.QRect(0, 0, 669, 500)) self.SettingsTabWidget.setGeometry(QtCore.QRect(0, 0, 669, 500))
self.SettingsTabWidget.setObjectName("SettingsTabWidget") self.SettingsTabWidget.setObjectName("SettingsTabWidget")
self.ThemesTab = QtGui.QWidget() self.ThemesTab = QtGui.QWidget()
self.ThemesTab.setObjectName("ThemesTab") self.ThemesTab.setObjectName("ThemesTab")
self.ThemesTabLayout = QtGui.QHBoxLayout(self.ThemesTab) self.ThemesTabLayout = QtGui.QHBoxLayout(self.ThemesTab)
@ -127,7 +118,7 @@ class SettingsForm(QDialog):
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.GlobalLevelLabel) self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.GlobalLevelLabel)
self.ThemesTabLayout.addWidget(self.LevelGroupBox) self.ThemesTabLayout.addWidget(self.LevelGroupBox)
self.SettingsTabWidget.addTab(self.ThemesTab, "") self.SettingsTabWidget.addTab(self.ThemesTab, "")
self.SlideTab = QtGui.QWidget() self.SlideTab = QtGui.QWidget()
self.SlideTab.setObjectName("SlideTab") self.SlideTab.setObjectName("SlideTab")
self.SlideLayout = QtGui.QHBoxLayout(self.SlideTab) self.SlideLayout = QtGui.QHBoxLayout(self.SlideTab)
@ -236,14 +227,14 @@ class SettingsForm(QDialog):
self.SlideRightLayout.addItem(spacerItem5) self.SlideRightLayout.addItem(spacerItem5)
self.SlideLayout.addWidget(self.widget) self.SlideLayout.addWidget(self.widget)
self.SettingsTabWidget.addTab(self.SlideTab, "") self.SettingsTabWidget.addTab(self.SlideTab, "")
#### Core Code below here #### Core Code below here
for plugin in self.plugin_list: for plugin in self.plugin_list:
settings_tab_item = plugin.get_settings_tab_item() settings_tab_item = plugin.get_settings_tab_item()
if settings_tab_item is not None: if settings_tab_item is not None:
self.SettingsTabWidget.addTab(settings_tab_item, settings_tab_item.tabText) self.SettingsTabWidget.addTab(settings_tab_item, settings_tab_item.tabText)
self.SaveButton = QtGui.QPushButton(SettingsDialog) self.SaveButton = QtGui.QPushButton(SettingsDialog)
self.SaveButton.setGeometry(QtCore.QRect(490, 470, 81, 26)) self.SaveButton.setGeometry(QtCore.QRect(490, 470, 81, 26))
self.SaveButton.setObjectName("SaveButton") self.SaveButton.setObjectName("SaveButton")
@ -253,15 +244,15 @@ class SettingsForm(QDialog):
self.ResetButton = QtGui.QPushButton(SettingsDialog) self.ResetButton = QtGui.QPushButton(SettingsDialog)
self.ResetButton.setGeometry(QtCore.QRect(310, 470, 81, 26)) self.ResetButton.setGeometry(QtCore.QRect(310, 470, 81, 26))
self.ResetButton.setObjectName("ResetButton") 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.retranslateUi(SettingsDialog)
self.SettingsTabWidget.setCurrentIndex(5) self.SettingsTabWidget.setCurrentIndex(5)
QtCore.QMetaObject.connectSlotsByName(SettingsDialog) QtCore.QMetaObject.connectSlotsByName(SettingsDialog)
def retranslateUi(self, 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.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)) 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.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.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.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.SaveButton.setText(QtGui.QApplication.translate("SettingsDialog", "Save", None, QtGui.QApplication.UnicodeUTF8))
self.CancelButton.setText(QtGui.QApplication.translate("SettingsDialog", "Cancel", 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)) 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 PyQt4.QtGui import *
from openlp.core.resources 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.forms import BibleImportForm
from openlp.plugins.bibles.lib.tables import * from openlp.plugins.bibles.lib.tables import *
@ -47,15 +47,12 @@ class BiblePlugin(Plugin, PluginUtils):
#Register the bible Manager #Register the bible Manager
self.biblemanager = BibleManager(self.config) self.biblemanager = BibleManager(self.config)
self.search_results = {} # place to store the search results 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): def get_settings_tab(self):
return True self.BiblesTab = BiblesTab()
"""
def get_settings_tab_item(self):
self.SettingsTabItem= SettingsTabItem()
self.Bibles = QtGui.QWidget() self.Bibles = QtGui.QWidget()
self.Bibles.setObjectName("Bibles") self.Bibles.setObjectName("Bibles")
self.formLayout_3 = QtGui.QFormLayout(self.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)) "<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.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.SearchCheckBox_2.setText(QtGui.QApplication.translate("SettingsForm", "Enabled search-as-you-type", None, QtGui.QApplication.UnicodeUTF8))
self.SettingsTabItem.add_items(self.Bibles) self.SettingsTabItem.add_items(self.Bibles)
self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "Bibles", None, QtGui.QApplication.UnicodeUTF8)) self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "Bibles", None, QtGui.QApplication.UnicodeUTF8))
"""
return self.SettingsTabItem return self.BiblesTab
def get_media_manager_item(self): def get_media_manager_item(self):
# Create the MediaManagerItem object # Create the MediaManagerItem object
@ -213,7 +210,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.SearchTabWidget.addTab(self.QuickTab, 'Quick') self.SearchTabWidget.addTab(self.QuickTab, 'Quick')
QuickSpacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) QuickSpacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.QuickLayout.addItem(QuickSpacerItem, 4, 2, 1, 1) self.QuickLayout.addItem(QuickSpacerItem, 4, 2, 1, 1)
# Add the Advanced Search tab # Add the Advanced Search tab
self.AdvancedTab = QtGui.QWidget() self.AdvancedTab = QtGui.QWidget()
self.AdvancedTab.setObjectName('AdvancedTab') self.AdvancedTab.setObjectName('AdvancedTab')
@ -271,13 +268,13 @@ class BiblePlugin(Plugin, PluginUtils):
self.ClearAdvancedSearchComboBox = QtGui.QComboBox(self.QuickTab) self.ClearAdvancedSearchComboBox = QtGui.QComboBox(self.QuickTab)
self.ClearAdvancedSearchComboBox.setObjectName('ClearAdvancedSearchComboBox') self.ClearAdvancedSearchComboBox.setObjectName('ClearAdvancedSearchComboBox')
self.AdvancedLayout.addWidget(self.ClearAdvancedSearchComboBox, 5, 2, 1, 1) self.AdvancedLayout.addWidget(self.ClearAdvancedSearchComboBox, 5, 2, 1, 1)
self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab) self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab)
self.AdvancedSearchButton.setObjectName('AdvancedSearchButton') self.AdvancedSearchButton.setObjectName('AdvancedSearchButton')
self.AdvancedSearchButton.setText('Search') self.AdvancedSearchButton.setText('Search')
self.AdvancedLayout.addWidget(self.AdvancedSearchButton, 5, 3, 1, 1) self.AdvancedLayout.addWidget(self.AdvancedSearchButton, 5, 3, 1, 1)
self.SearchTabWidget.addTab(self.AdvancedTab, 'Advanced') self.SearchTabWidget.addTab(self.AdvancedTab, 'Advanced')
# Add the search tab widget to the page layout # Add the search tab widget to the page layout
self.MediaManagerItem.PageLayout.addWidget(self.SearchTabWidget) self.MediaManagerItem.PageLayout.addWidget(self.SearchTabWidget)
@ -306,7 +303,7 @@ class BiblePlugin(Plugin, PluginUtils):
##############Buttons ##############Buttons
QtCore.QObject.connect(self.AdvancedSearchButton, QtCore.SIGNAL("pressed()"), self.onAdvancedSearchButton) QtCore.QObject.connect(self.AdvancedSearchButton, QtCore.SIGNAL("pressed()"), self.onAdvancedSearchButton)
QtCore.QObject.connect(self.QuickSearchButton, QtCore.SIGNAL("pressed()"), self.onQuickSearchButton) QtCore.QObject.connect(self.QuickSearchButton, QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
##############Context Menus ##############Context Menus
self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) 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)) self.ImportBibleItem.setText(QtGui.QApplication.translate("main_window", "&Bible", None, QtGui.QApplication.UnicodeUTF8))
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.ImportBibleItem, QtCore.SIGNAL("triggered()"), self.onBibleNewClick) QtCore.QObject.connect(self.ImportBibleItem, QtCore.SIGNAL("triggered()"), self.onBibleNewClick)
def add_export_menu_item(self, export_menu): def add_export_menu_item(self, export_menu):
self.ExportBibleItem = QtGui.QAction(export_menu) self.ExportBibleItem = QtGui.QAction(export_menu)
self.ExportBibleItem.setObjectName("ExportBibleItem") self.ExportBibleItem.setObjectName("ExportBibleItem")
@ -331,35 +328,35 @@ class BiblePlugin(Plugin, PluginUtils):
def initialise(self): def initialise(self):
self._initialise_form() # build the form self._initialise_form() # build the form
def _initialise_form(self): def _initialise_form(self):
log.debug("_initialise_form") log.debug("_initialise_form")
self.QuickSearchComboBox.clear() self.QuickSearchComboBox.clear()
self.QuickVersionComboBox.clear() self.QuickVersionComboBox.clear()
self.AdvancedVersionComboBox.clear() self.AdvancedVersionComboBox.clear()
self.ClearQuickSearchComboBox.clear() self.ClearQuickSearchComboBox.clear()
self.ClearAdvancedSearchComboBox.clear() self.ClearAdvancedSearchComboBox.clear()
self.QuickSearchComboBox.addItem(u"Verse Search") self.QuickSearchComboBox.addItem(u"Verse Search")
self.QuickSearchComboBox.addItem(u"Text Search") self.QuickSearchComboBox.addItem(u"Text Search")
self.ClearQuickSearchComboBox.addItem(u"Clear") self.ClearQuickSearchComboBox.addItem(u"Clear")
self.ClearQuickSearchComboBox.addItem(u"Keep") self.ClearQuickSearchComboBox.addItem(u"Keep")
self.ClearAdvancedSearchComboBox.addItem(u"Clear") self.ClearAdvancedSearchComboBox.addItem(u"Clear")
self.ClearAdvancedSearchComboBox.addItem(u"Keep") self.ClearAdvancedSearchComboBox.addItem(u"Keep")
bibles = self.biblemanager.get_bibles("full") bibles = self.biblemanager.get_bibles("full")
for b in bibles: # load bibles into the combo boxes for b in bibles: # load bibles into the combo boxes
self.QuickVersionComboBox.addItem(b) self.QuickVersionComboBox.addItem(b)
bibles = self.biblemanager.get_bibles("partial") # Without HTTP bibles = self.biblemanager.get_bibles("partial") # Without HTTP
first = True first = True
for b in bibles: # load bibles into the combo boxes for b in bibles: # load bibles into the combo boxes
self.AdvancedVersionComboBox.addItem(b) self.AdvancedVersionComboBox.addItem(b)
if first: if first:
first = False 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): def onAdvancedVersionComboBox(self):
self._initialise_bible_advanced(str(self.AdvancedVersionComboBox.currentText())) # restet the bible info self._initialise_bible_advanced(str(self.AdvancedVersionComboBox.currentText())) # restet the bible info
pass pass
@ -374,7 +371,7 @@ class BiblePlugin(Plugin, PluginUtils):
def onBibleLiveClick(self): def onBibleLiveClick(self):
pass pass
def onBibleAddClick(self): def onBibleAddClick(self):
pass pass
@ -382,7 +379,7 @@ class BiblePlugin(Plugin, PluginUtils):
self._save_settings() self._save_settings()
def onSettingsResetButton(self): def onSettingsResetButton(self):
self._load_reset_settings() self._load_reset_settings()
def onAdvancedFromVerse(self): def onAdvancedFromVerse(self):
frm = self.AdvancedFromVerse.currentText() 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) self.search_results = self.biblemanager.get_verse_text(bible, book, chapter_from, chapter_to, verse_from, verse_to)
if self.ClearAdvancedSearchComboBox.currentText() == u"Clear": if self.ClearAdvancedSearchComboBox.currentText() == u"Clear":
self.BibleListView.clear() # clear the results self.BibleListView.clear() # clear the results
self.BibleListView.setRowCount(0) self.BibleListView.setRowCount(0)
self._display_results(bible) self._display_results(bible)
def onAdvancedFromChapter(self): def onAdvancedFromChapter(self):
@ -423,11 +420,11 @@ class BiblePlugin(Plugin, PluginUtils):
self.log.debug("onQuickSearchButton") self.log.debug("onQuickSearchButton")
bible = str(self.QuickVersionComboBox.currentText()) bible = str(self.QuickVersionComboBox.currentText())
text = str(self.QuickSearchEdit.displayText()) text = str(self.QuickSearchEdit.displayText())
if self.ClearQuickSearchComboBox.currentText() == u"Clear": if self.ClearQuickSearchComboBox.currentText() == u"Clear":
self.BibleListView.clear() # clear the results self.BibleListView.clear() # clear the results
self.BibleListView.setRowCount(0) self.BibleListView.setRowCount(0)
if self.QuickSearchComboBox.currentText() == u"Text Search": if self.QuickSearchComboBox.currentText() == u"Text Search":
self.search_results = self.biblemanager.get_verse_from_text(bible,text) self.search_results = self.biblemanager.get_verse_from_text(bible,text)
else: else:
@ -469,11 +466,11 @@ class BiblePlugin(Plugin, PluginUtils):
loc += verse loc += verse
loc += closing loc += closing
return loc return loc
def reload_bibles(self): def reload_bibles(self):
self.biblemanager.reload_bibles() self.biblemanager.reload_bibles()
self._initialise_form() self._initialise_form()
def _initialise_bible_advanced(self, bible): def _initialise_bible_advanced(self, bible):
log.debug("_initialise_bible_advanced %s ", bible) log.debug("_initialise_bible_advanced %s ", bible)
currentBook = str(self.AdvancedBookComboBox.currentText()) currentBook = str(self.AdvancedBookComboBox.currentText())
@ -512,7 +509,7 @@ class BiblePlugin(Plugin, PluginUtils):
self.BibleListView.setItem(row_count , 0, table_data) self.BibleListView.setItem(row_count , 0, table_data)
table_data = QtGui.QTableWidgetItem(str(book + " " +str(chap) + ":"+ str(vse)) + " ("+str(bible)+")") table_data = QtGui.QTableWidgetItem(str(book + " " +str(chap) + ":"+ str(vse)) + " ("+str(bible)+")")
self.BibleListView.setItem(row_count , 1, table_data) 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): def _search_using_bible_reference(self, bible, search):
book = "" book = ""
@ -528,7 +525,7 @@ class BiblePlugin(Plugin, PluginUtils):
for i in range (len(search)-1, 0, -1): # 0 index arrays for i in range (len(search)-1, 0, -1): # 0 index arrays
if search[i] == " ": if search[i] == " ":
book = search[:i] book = search[:i]
search = search[i:] # remove book from string search = search[i:] # remove book from string
break 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 :
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 sp = search.split("-") #find first
#print sp, len(sp) #print sp, len(sp)
sp1 = sp[0].split(":") sp1 = sp[0].split(":")
#print sp1, len(sp1) #print sp1, len(sp1)
if len(sp1) == 1: if len(sp1) == 1:
start_chapter = sp1[0] start_chapter = sp1[0]
start_verse = 1 start_verse = 1
@ -563,7 +560,7 @@ class BiblePlugin(Plugin, PluginUtils):
end_verse = start_verse end_verse = start_verse
else: else:
sp1 = sp[1].split(":") sp1 = sp[1].split(":")
#print sp1, len(sp1) #print sp1, len(sp1)
if len(sp1) == 1: if len(sp1) == 1:
end_chapter = sp1[0] end_chapter = sp1[0]
end_verse = 1 end_verse = 1
@ -584,13 +581,13 @@ class BiblePlugin(Plugin, PluginUtils):
#print "message = " + str(message) #print "message = " + str(message)
#print "search = " + str(original) #print "search = " + str(original)
#print "results = " + str(book) + " @ "+ str(start_chapter)+" @ "+ str(end_chapter)+" @ "+ str(start_verse)+ " @ "+ str(end_verse) #print "results = " + str(book) + " @ "+ str(start_chapter)+" @ "+ str(end_chapter)+" @ "+ str(start_verse)+ " @ "+ str(end_verse)
if message == None: if message == None:
self.search_results = 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)) self.search_results = self.biblemanager.get_verse_text(bible, book,int(start_chapter), int(end_chapter), int(start_verse), int(end_verse))
else: else:
reply = QtGui.QMessageBox.information(self.MediaManagerItem,"Information",message) reply = QtGui.QMessageBox.information(self.MediaManagerItem,"Information",message)
def load_settings(self): def load_settings(self):
pass pass
# self.SettingsOutputStyleComboBox.setCurrentIndex(int(self.config.get_config("bible_output_style", 0))) # 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))) # self.SettingsNewChapterCheck.setCheckState(int(self.config.get_config("bible_new_chapter", 0)))
# except: # except:
# pass # pass
def save_settings(self): def save_settings(self):
pass pass
# self.config.set_config("bible_output_style", str(self.SettingsOutputStyleComboBox.currentIndex())) # 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.config.set_config("bible_new_chapter", str(self.SettingsNewChapterCheck.checkState()))
# self.SettingsOutputStyleComboBox.clear() # self.SettingsOutputStyleComboBox.clear()
# self.SettingsVerseStyleComboBox.clear() # self.SettingsVerseStyleComboBox.clear()
# self.SettingsOutputStyleComboBox.addItem(u"Continuous") # 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"No Brackets")
# self.SettingsVerseStyleComboBox.addItem(u"( and )") # self.SettingsVerseStyleComboBox.addItem(u"( and )")
# self.SettingsVerseStyleComboBox.addItem(u"{ and }") # self.SettingsVerseStyleComboBox.addItem(u"{ and }")
@ -620,4 +617,4 @@ class BiblePlugin(Plugin, PluginUtils):
def define_tab(self): def define_tab(self):
pass pass
# QtCore.QObject.connect(self.SettingsResetButton, QtCore.SIGNAL("pressed()"), self.onSettingsResetButton) # 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 common import BibleCommon
from manager import BibleManager 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 Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from PyQt4 import Qt, QtCore, QtGui from PyQt4 import Qt, QtCore, QtGui
from PyQt4.QtGui import QDialog
from PyQt4.QtCore import pyqtSignature
from authorsform import AuthorsForm from authorsform import AuthorsForm
from topicsform import TopicsForm from topicsform import TopicsForm
@ -27,7 +25,7 @@ from songbookform import SongBookForm
from editsongdialog import Ui_EditSongDialog from editsongdialog import Ui_EditSongDialog
class EditSongForm(QDialog, Ui_EditSongDialog): class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
""" """
Class documentation goes here. Class documentation goes here.
""" """
@ -35,11 +33,12 @@ class EditSongForm(QDialog, Ui_EditSongDialog):
""" """
Constructor Constructor
""" """
QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
# Connecting signals and slots # Connecting signals and slots
QtCore.QObject.connect(self.AddAuthorsButton, QtCore.SIGNAL('clicked()'), self.onAddAuthorsButtonClicked) QtCore.QObject.connect(self.AddAuthorsButton, QtCore.SIGNAL('clicked()'), self.onAddAuthorsButtonClicked)
QtCore.QObject.connect(self.AddTopicButton, QtCore.SIGNAL('clicked()'), self.onAddTopicButtonClicked) 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) QtCore.QObject.connect(self.CopyrightInsertItem, QtCore.SIGNAL('clicked()'), self.onCopyrightInsertItemTriggered)
# Create other objects and forms # Create other objects and forms
self.songmanager = songmanager self.songmanager = songmanager
@ -98,8 +97,7 @@ class EditSongForm(QDialog, Ui_EditSongDialog):
self.topics_form.load_form() self.topics_form.load_form()
self.topics_form.exec_() self.topics_form.exec_()
@pyqtSignature("") def onAddSongBookButtonClicked(self):
def on_AddSongBookButton_clicked(self):
""" """
Slot documentation goes here. Slot documentation goes here.
""" """

View File

@ -21,7 +21,7 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.resources import * 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): class VideoPlugin(Plugin, PluginUtils):
def __init__(self): def __init__(self):
@ -32,14 +32,10 @@ class VideoPlugin(Plugin, PluginUtils):
self.icon = QtGui.QIcon() self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap(':/media/media_video.png'), self.icon.addPixmap(QtGui.QPixmap(':/media/media_video.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off) QtGui.QIcon.Normal, QtGui.QIcon.Off)
def has_settings_tab_item(self):
return True
def get_settings_tab_item(self): def get_settings_tab(self):
self.VideosTab = SettingsTab(u'Videos')
self.SettingsTabItem= SettingsTabItem() """
self.Videos = QtGui.QWidget() self.Videos = QtGui.QWidget()
self.Videos.setObjectName("Videos") self.Videos.setObjectName("Videos")
@ -58,13 +54,13 @@ class VideoPlugin(Plugin, PluginUtils):
self.UseVMRLabel = QtGui.QLabel(self.VideoModeGroupBox) self.UseVMRLabel = QtGui.QLabel(self.VideoModeGroupBox)
self.UseVMRLabel.setObjectName("UseVMRLabel") self.UseVMRLabel.setObjectName("UseVMRLabel")
self.VideoModeLayout.addWidget(self.UseVMRLabel) self.VideoModeLayout.addWidget(self.UseVMRLabel)
self.VideoLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.VideoModeGroupBox) self.VideoLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.VideoModeGroupBox)
self.SettingsTabItem.add_items(self.Videos) self.SettingsTabItem.add_items(self.Videos)
self.SettingsTabItem.setTabText(QtGui.QApplication.translate("SettingsForm", "Videos", None, QtGui.QApplication.UnicodeUTF8)) 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.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.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" 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" "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" "</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)) "<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): def get_media_manager_item(self):
# Create the MediaManagerItem object # Create the MediaManagerItem object
self.MediaManagerItem = MediaManagerItem(self.icon, 'Videos') self.MediaManagerItem = MediaManagerItem(self.icon, 'Videos')
@ -105,49 +101,49 @@ class VideoPlugin(Plugin, PluginUtils):
self.VideoListView.setColumnHidden(0, True) self.VideoListView.setColumnHidden(0, True)
self.VideoListView.setColumnWidth(1, 275) self.VideoListView.setColumnWidth(1, 275)
self.VideoListView.setShowGrid(False) self.VideoListView.setShowGrid(False)
self.VideoListView.setSortingEnabled(False) self.VideoListView.setSortingEnabled(False)
self.VideoListView.setAlternatingRowColors(True) self.VideoListView.setAlternatingRowColors(True)
self.VideoListView.verticalHeader().setVisible(False) self.VideoListView.verticalHeader().setVisible(False)
self.VideoListView.horizontalHeader().setVisible(False) self.VideoListView.horizontalHeader().setVisible(False)
self.VideoListView.setAlternatingRowColors(True) self.VideoListView.setAlternatingRowColors(True)
self.VideoListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) self.VideoListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.VideoListView.setObjectName("VideoListView") self.VideoListView.setObjectName("VideoListView")
self.MediaManagerItem.PageLayout.addWidget(self.VideoListView) self.MediaManagerItem.PageLayout.addWidget(self.VideoListView)
#define and add the context menu #define and add the context menu
self.VideoListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) 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_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_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_add.png', "&Add to Service", self.onVideoAddClick))
return self.MediaManagerItem return self.MediaManagerItem
def initialise(self): def initialise(self):
list = self._load_display_list() list = self._load_display_list()
self._load_video_list(list) self._load_video_list(list)
def onVideoNewClick(self): def onVideoNewClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.avi *.mpeg)") files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.avi *.mpeg)")
if len(files) > 0: if len(files) > 0:
self._load_video_list(files) self._load_video_list(files)
self._save_last_directory(files[0]) self._save_last_directory(files[0])
self._save_display_list(self.VideoListView) self._save_display_list(self.VideoListView)
def _load_video_list(self, list): def _load_video_list(self, list):
for f in 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() count = self.VideoListView.rowCount()
self.VideoListView.setRowCount(count+1) self.VideoListView.setRowCount(count+1)
row_item = QtGui.QTableWidgetItem(str(f)) row_item = QtGui.QTableWidgetItem(str(f))
self.VideoListView.setItem(count , 0, row_item) self.VideoListView.setItem(count , 0, row_item)
row_item = QtGui.QTableWidgetItem(str(file_name)) row_item = QtGui.QTableWidgetItem(str(file_name))
self.VideoListView.setItem(count , 1, row_item) self.VideoListView.setItem(count , 1, row_item)
self.VideoListView.setRowHeight(count, 20) self.VideoListView.setRowHeight(count, 20)
def onVideoDeleteClick(self): def onVideoDeleteClick(self):
cr = self.VideoListView.currentRow() cr = self.VideoListView.currentRow()
self.VideoListView.removeRow(int(cr)) self.VideoListView.removeRow(int(cr))
self._save_display_list(self.VideoListView) self._save_display_list(self.VideoListView)
def onVideoPreviewClick(self): def onVideoPreviewClick(self):
pass pass

View File

@ -28,6 +28,186 @@
<property name="currentIndex" > <property name="currentIndex" >
<number>0</number> <number>0</number>
</property> </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" > <widget class="QWidget" name="ThemesTab" >
<attribute name="title" > <attribute name="title" >
<string>Themes</string> <string>Themes</string>
@ -156,11 +336,11 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="DisplayTab" > <widget class="QWidget" name="AlertsTab" >
<attribute name="title" > <attribute name="title" >
<string>Display</string> <string>Alerts</string>
</attribute> </attribute>
<layout class="QHBoxLayout" name="DisplayTabLayout" > <layout class="QHBoxLayout" name="AlertsLayout" >
<property name="spacing" > <property name="spacing" >
<number>8</number> <number>8</number>
</property> </property>
@ -168,336 +348,7 @@
<number>8</number> <number>8</number>
</property> </property>
<item> <item>
<widget class="QWidget" native="1" name="LeftColumn" > <widget class="QWidget" native="1" name="AlertLeftColumn" >
<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" >
<layout class="QVBoxLayout" name="SlideLeftLayout" > <layout class="QVBoxLayout" name="SlideLeftLayout" >
<property name="spacing" > <property name="spacing" >
<number>8</number> <number>8</number>
@ -506,11 +357,11 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QGroupBox" name="AlertGroupBox" > <widget class="QGroupBox" name="FontGroupBox" >
<property name="title" > <property name="title" >
<string>Alerts</string> <string>Font</string>
</property> </property>
<layout class="QVBoxLayout" name="AlertLayout" > <layout class="QVBoxLayout" name="FontLayout" >
<property name="spacing" > <property name="spacing" >
<number>8</number> <number>8</number>
</property> </property>
@ -598,16 +449,6 @@ p, li { white-space: pre-wrap; }
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGraphicsView" name="FontPreview" >
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>64</height>
</size>
</property>
</widget>
</item>
<item> <item>
<widget class="QWidget" native="1" name="LengthWidget" > <widget class="QWidget" native="1" name="LengthWidget" >
<layout class="QHBoxLayout" name="LengthLayout" > <layout class="QHBoxLayout" name="LengthLayout" >
@ -673,7 +514,7 @@ p, li { white-space: pre-wrap; }
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QWidget" native="1" name="widget" > <widget class="QWidget" native="1" name="SlideRightColumn" >
<layout class="QVBoxLayout" name="SlideRightLayout" > <layout class="QVBoxLayout" name="SlideRightLayout" >
<property name="spacing" > <property name="spacing" >
<number>8</number> <number>8</number>
@ -682,11 +523,17 @@ p, li { white-space: pre-wrap; }
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QGroupBox" name="SongWizardGroupBox" > <widget class="QGroupBox" name="PreviewGroupBox" >
<property name="title" > <property name="sizePolicy" >
<string>Song Wizard</string> <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<layout class="QVBoxLayout" name="SongWizardLayout" > <property name="title" >
<string>Preview</string>
</property>
<layout class="QVBoxLayout" name="PreviewLayout" >
<property name="spacing" > <property name="spacing" >
<number>8</number> <number>8</number>
</property> </property>
@ -694,101 +541,12 @@ p, li { white-space: pre-wrap; }
<number>8</number> <number>8</number>
</property> </property>
<item> <item>
<widget class="QCheckBox" name="SongWizardCheckBox" > <widget class="QGraphicsView" name="FontPreview" >
<property name="text" > <property name="maximumSize" >
<string>Use the Song Wizard to add songs</string> <size>
</property> <width>16777215</width>
<property name="checked" > <height>64</height>
<bool>true</bool> </size>
</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>
</property> </property>
</widget> </widget>
</item> </item>
@ -813,153 +571,6 @@ p, li { white-space: pre-wrap; }
</item> </item>
</layout> </layout>
</widget> </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> </widget>
</item> </item>
<item> <item>