From fab970640204794916170f2b5c3b92edf4aebf59 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Tue, 17 May 2011 21:46:20 -0400 Subject: [PATCH 01/12] this is a test From eedecf643409da5210ef0d0cea433f40401fd12a Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Sat, 21 May 2011 15:01:40 -0400 Subject: [PATCH 02/12] testing --- openlp/core/ui/generaltab.py | 16 +++++++++++++--- openlp/core/ui/slidecontroller.py | 5 +++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 75cb8fa98..0f238ca0a 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -95,7 +95,10 @@ class GeneralTab(SettingsTab): self.settingsLayout.addRow(self.autoUnblankCheckBox) self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') - self.settingsLayout.addRow(self.autoPreviewCheckBox) + self.settingsLayout.addRow(self.autoPreviewCheckBox) + self.stopLoopCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.stopLoopCheckBox.setObjectName(u'stopLoopCheckBox') + self.settingsLayout.addRow(self.stopLoopCheckBox) # Moved here from image tab self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) self.timeoutLabel.setObjectName(u'timeoutLabel') @@ -217,7 +220,9 @@ class GeneralTab(SettingsTab): self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab', 'Unblank display when adding new live item')) self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', - 'Automatically preview next item in service')) + 'Automatically preview next item in service')) + self.stopLoopCheckBox.setText(translate('OpenLP.GeneralTab', + 'Enable slide loop')) self.timeoutLabel.setText(translate('OpenLP.GeneralTab', 'Slide loop delay:')) self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) @@ -269,6 +274,8 @@ class GeneralTab(SettingsTab): self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', QtCore.QVariant(True)).toBool()) self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', + QtCore.QVariant(False)).toBool()) + self.stopLoopCheckBox.setChecked(settings.value(u'stop Loop', QtCore.QVariant(False)).toBool()) self.timeoutSpinBox.setValue(settings.value(u'loop delay', QtCore.QVariant(5)).toInt()[0]) @@ -312,7 +319,9 @@ class GeneralTab(SettingsTab): settings.setValue(u'auto unblank', QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) settings.setValue(u'auto preview', - QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) + QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) + settings.setValue(u'stoploop', + QtCore.QVariant(self.stopLoopCheckBox.isChecked())) settings.setValue(u'loop delay', QtCore.QVariant(self.timeoutSpinBox.value())) settings.setValue(u'ccli number', @@ -378,3 +387,4 @@ class GeneralTab(SettingsTab): Called when the width, height, x position or y position has changed. """ self.display_changed = True + diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c298f897f..66e5f100a 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -935,7 +935,7 @@ class SlideController(QtGui.QWidget): def onSlideSelectedNextNoloop(self): self.onSlideSelectedNext(False) - def onSlideSelectedNext(self, loop=True): + def onSlideSelectedNext(self, loop=QtCore.QSettings().setValue('stop loop', 'stoploop')): """ Go to the next slide. """ @@ -959,7 +959,7 @@ class SlideController(QtGui.QWidget): def onSlideSelectedPreviousNoloop(self): self.onSlideSelectedPrevious(False) - def onSlideSelectedPrevious(self, loop=True): + def onSlideSelectedPrevious(self, loop=QtCore.QSettings().setValue('stop loop', 'stoploop')): """ Go to the previous slide. """ @@ -1168,3 +1168,4 @@ class SlideController(QtGui.QWidget): return HideMode.Screen else: return None + From 33dcf7c439c2ee3c78a7ca54b7c6209ef3b17774 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Sun, 22 May 2011 14:49:16 -0400 Subject: [PATCH 03/12] This is a run of the 'enable slide loop' code that gushie showed me plus my checkbox code for it --- openlp/core/ui/generaltab.py | 778 +++++++++++++++--------------- openlp/core/ui/slidecontroller.py | 4 +- 2 files changed, 391 insertions(+), 391 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 0f238ca0a..e12752338 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -1,390 +1,390 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### -import logging - -from PyQt4 import QtCore, QtGui - -from openlp.core.lib import SettingsTab, Receiver, translate -from openlp.core.lib.ui import UiStrings -from openlp.core.ui import ScreenList - -log = logging.getLogger(__name__) - -class GeneralTab(SettingsTab): - """ - GeneralTab is the general settings tab in the settings dialog. - """ - def __init__(self, parent): - """ - Initialise the general settings tab - """ - self.screens = ScreenList.get_instance() - self.icon_path = u':/icon/openlp-logo-16x16.png' - generalTranslated = translate('GeneralTab', 'General') - SettingsTab.__init__(self, parent, u'General', generalTranslated) - - def setupUi(self): - """ - Create the user interface for the general settings tab - """ - self.setObjectName(u'GeneralTab') - SettingsTab.setupUi(self) - self.monitorGroupBox = QtGui.QGroupBox(self.leftColumn) - self.monitorGroupBox.setObjectName(u'monitorGroupBox') - self.monitorLayout = QtGui.QFormLayout(self.monitorGroupBox) - self.monitorLayout.setObjectName(u'monitorLayout') - self.monitorLabel = QtGui.QLabel(self.monitorGroupBox) - self.monitorLabel.setObjectName(u'monitorLabel') - self.monitorLayout.addRow(self.monitorLabel) - self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox) - self.monitorComboBox.setObjectName(u'monitorComboBox') - self.monitorLayout.addRow(self.monitorComboBox) - self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox) - self.displayOnMonitorCheck.setObjectName(u'monitorComboBox') - self.monitorLayout.addRow(self.displayOnMonitorCheck) - self.leftLayout.addWidget(self.monitorGroupBox) - self.startupGroupBox = QtGui.QGroupBox(self.leftColumn) - self.startupGroupBox.setObjectName(u'startupGroupBox') - self.startupLayout = QtGui.QVBoxLayout(self.startupGroupBox) - self.startupLayout.setObjectName(u'startupLayout') - self.warningCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.warningCheckBox.setObjectName(u'warningCheckBox') - self.startupLayout.addWidget(self.warningCheckBox) - self.autoOpenCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.autoOpenCheckBox.setObjectName(u'autoOpenCheckBox') - self.startupLayout.addWidget(self.autoOpenCheckBox) - self.showSplashCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.showSplashCheckBox.setObjectName(u'showSplashCheckBox') - self.startupLayout.addWidget(self.showSplashCheckBox) - self.checkForUpdatesCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.checkForUpdatesCheckBox.setObjectName(u'checkForUpdatesCheckBox') - self.startupLayout.addWidget(self.checkForUpdatesCheckBox) - self.leftLayout.addWidget(self.startupGroupBox) - self.settingsGroupBox = QtGui.QGroupBox(self.leftColumn) - self.settingsGroupBox.setObjectName(u'settingsGroupBox') - self.settingsLayout = QtGui.QFormLayout(self.settingsGroupBox) - self.settingsLayout.setObjectName(u'settingsLayout') - self.saveCheckServiceCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.saveCheckServiceCheckBox.setObjectName(u'saveCheckServiceCheckBox') - self.settingsLayout.addRow(self.saveCheckServiceCheckBox) - self.autoUnblankCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.autoUnblankCheckBox.setObjectName(u'autoUnblankCheckBox') - self.settingsLayout.addRow(self.autoUnblankCheckBox) - self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') - self.settingsLayout.addRow(self.autoPreviewCheckBox) - self.stopLoopCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.stopLoopCheckBox.setObjectName(u'stopLoopCheckBox') - self.settingsLayout.addRow(self.stopLoopCheckBox) - # Moved here from image tab - self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) - self.timeoutLabel.setObjectName(u'timeoutLabel') - self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) - self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') - self.timeoutSpinBox.setRange(1, 180) - self.settingsLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) - self.leftLayout.addWidget(self.settingsGroupBox) - self.leftLayout.addStretch() - self.ccliGroupBox = QtGui.QGroupBox(self.rightColumn) - self.ccliGroupBox.setObjectName(u'ccliGroupBox') - self.ccliLayout = QtGui.QFormLayout(self.ccliGroupBox) - self.ccliLayout.setObjectName(u'ccliLayout') - self.numberLabel = QtGui.QLabel(self.ccliGroupBox) - self.numberLabel.setObjectName(u'numberLabel') - self.numberEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.numberEdit.setValidator(QtGui.QIntValidator()) - self.numberEdit.setObjectName(u'numberEdit') - self.ccliLayout.addRow(self.numberLabel, self.numberEdit) - self.usernameLabel = QtGui.QLabel(self.ccliGroupBox) - self.usernameLabel.setObjectName(u'usernameLabel') - self.usernameEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.usernameEdit.setObjectName(u'usernameEdit') - self.ccliLayout.addRow(self.usernameLabel, self.usernameEdit) - self.passwordLabel = QtGui.QLabel(self.ccliGroupBox) - self.passwordLabel.setObjectName(u'passwordLabel') - self.passwordEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.passwordEdit.setEchoMode(QtGui.QLineEdit.Password) - self.passwordEdit.setObjectName(u'passwordEdit') - self.ccliLayout.addRow(self.passwordLabel, self.passwordEdit) - self.rightLayout.addWidget(self.ccliGroupBox) - # Moved here from display tab - self.displayGroupBox = QtGui.QGroupBox(self.rightColumn) - self.displayGroupBox.setObjectName(u'displayGroupBox') - self.displayLayout = QtGui.QGridLayout(self.displayGroupBox) - self.displayLayout.setObjectName(u'displayLayout') - self.overrideCheckBox = QtGui.QCheckBox(self.displayGroupBox) - self.overrideCheckBox.setObjectName(u'overrideCheckBox') - self.displayLayout.addWidget(self.overrideCheckBox, 2, 0, 1, 4) - self.rightLayout.addWidget(self.displayGroupBox) - # Custom position - self.customXLabel = QtGui.QLabel(self.displayGroupBox) - self.customXLabel.setObjectName(u'customXLabel') - self.displayLayout.addWidget(self.customXLabel, 3, 0) - self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customXValueEdit.setObjectName(u'customXValueEdit') - self.customXValueEdit.setRange(-9999, 9999) - self.displayLayout.addWidget(self.customXValueEdit, 4, 0) - self.customYLabel = QtGui.QLabel(self.displayGroupBox) - self.customYLabel.setObjectName(u'customYLabel') - self.displayLayout.addWidget(self.customYLabel, 3, 1) - self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customYValueEdit.setObjectName(u'customYValueEdit') - self.customYValueEdit.setRange(-9999, 9999) - self.displayLayout.addWidget(self.customYValueEdit, 4, 1) - self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) - self.customWidthLabel.setObjectName(u'customWidthLabel') - self.displayLayout.addWidget(self.customWidthLabel, 3, 2) - self.customWidthValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customWidthValueEdit.setObjectName(u'customWidthValueEdit') - self.customWidthValueEdit.setMaximum(9999) - self.displayLayout.addWidget(self.customWidthValueEdit, 4, 2) - self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) - self.customHeightLabel.setObjectName(u'customHeightLabel') - self.displayLayout.addWidget(self.customHeightLabel, 3, 3) - self.customHeightValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') - self.customHeightValueEdit.setMaximum(9999) - self.displayLayout.addWidget(self.customHeightValueEdit, 4, 3) - self.rightLayout.addWidget(self.displayGroupBox) - self.rightLayout.addStretch() - # Signals and slots - QtCore.QObject.connect(self.overrideCheckBox, - QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) - QtCore.QObject.connect(self.customHeightValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customWidthValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customYValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customXValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.monitorComboBox, - QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDisplayChanged) - # Reload the tab, as the screen resolution/count may have changed. - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'config_screen_changed'), self.load) - # Remove for now - self.usernameLabel.setVisible(False) - self.usernameEdit.setVisible(False) - self.passwordLabel.setVisible(False) - self.passwordEdit.setVisible(False) - - def retranslateUi(self): - """ - Translate the general settings tab to the currently selected language - """ - self.tabTitleVisible = translate('OpenLP.GeneralTab', 'General') - self.monitorGroupBox.setTitle(translate('OpenLP.GeneralTab', - 'Monitors')) - self.monitorLabel.setText(translate('OpenLP.GeneralTab', - 'Select monitor for output display:')) - self.displayOnMonitorCheck.setText( - translate('OpenLP.GeneralTab', 'Display if a single screen')) - self.startupGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Application Startup')) - self.warningCheckBox.setText( - translate('OpenLP.GeneralTab', 'Show blank screen warning')) - self.autoOpenCheckBox.setText(translate('OpenLP.GeneralTab', - 'Automatically open the last service')) - self.showSplashCheckBox.setText( - translate('OpenLP.GeneralTab', 'Show the splash screen')) - self.checkForUpdatesCheckBox.setText( - translate('OpenLP.GeneralTab', 'Check for updates to OpenLP')) - self.settingsGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Application Settings')) - self.saveCheckServiceCheckBox.setText(translate('OpenLP.GeneralTab', - 'Prompt to save before starting a new service')) - self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab', - 'Unblank display when adding new live item')) - self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', - 'Automatically preview next item in service')) - self.stopLoopCheckBox.setText(translate('OpenLP.GeneralTab', - 'Enable slide loop')) - self.timeoutLabel.setText(translate('OpenLP.GeneralTab', - 'Slide loop delay:')) - self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) - self.ccliGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'CCLI Details')) - self.numberLabel.setText(UiStrings().CCLINumberLabel) - self.usernameLabel.setText( - translate('OpenLP.GeneralTab', 'SongSelect username:')) - self.passwordLabel.setText( - translate('OpenLP.GeneralTab', 'SongSelect password:')) - # Moved from display tab - self.displayGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Display Position')) - self.overrideCheckBox.setText(translate('OpenLP.GeneralTab', - 'Override display position')) - self.customXLabel.setText(translate('OpenLP.GeneralTab', 'X')) - self.customYLabel.setText(translate('OpenLP.GeneralTab', 'Y')) - self.customHeightLabel.setText(translate('OpenLP.GeneralTab', 'Height')) - self.customWidthLabel.setText(translate('OpenLP.GeneralTab', 'Width')) - - def load(self): - """ - Load the settings to populate the form - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - self.monitorComboBox.clear() - self.monitorComboBox.addItems(self.screens.get_screen_list()) - monitorNumber = settings.value(u'monitor', - QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] - self.monitorComboBox.setCurrentIndex(monitorNumber) - self.numberEdit.setText(unicode(settings.value( - u'ccli number', QtCore.QVariant(u'')).toString())) - self.usernameEdit.setText(unicode(settings.value( - u'songselect username', QtCore.QVariant(u'')).toString())) - self.passwordEdit.setText(unicode(settings.value( - u'songselect password', QtCore.QVariant(u'')).toString())) - self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt', - QtCore.QVariant(False)).toBool()) - self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', - QtCore.QVariant(False)).toBool()) - self.displayOnMonitorCheck.setChecked(self.screens.display) - self.warningCheckBox.setChecked(settings.value(u'blank warning', - QtCore.QVariant(False)).toBool()) - self.autoOpenCheckBox.setChecked(settings.value(u'auto open', - QtCore.QVariant(False)).toBool()) - self.showSplashCheckBox.setChecked(settings.value(u'show splash', - QtCore.QVariant(True)).toBool()) - self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', - QtCore.QVariant(True)).toBool()) - self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', - QtCore.QVariant(False)).toBool()) - self.stopLoopCheckBox.setChecked(settings.value(u'stop Loop', - QtCore.QVariant(False)).toBool()) - self.timeoutSpinBox.setValue(settings.value(u'loop delay', - QtCore.QVariant(5)).toInt()[0]) - self.overrideCheckBox.setChecked(settings.value(u'override position', - QtCore.QVariant(False)).toBool()) - self.customXValueEdit.setValue(settings.value(u'x position', - QtCore.QVariant(self.screens.current[u'size'].x())).toInt()[0]) - self.customYValueEdit.setValue(settings.value(u'y position', - QtCore.QVariant(self.screens.current[u'size'].y())).toInt()[0]) - self.customHeightValueEdit.setValue(settings.value(u'height', - QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0]) - self.customWidthValueEdit.setValue(settings.value(u'width', - QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0]) - settings.endGroup() - self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.display_changed = False - - def save(self): - """ - Save the settings from the form - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - settings.setValue(u'monitor', - QtCore.QVariant(self.monitorComboBox.currentIndex())) - settings.setValue(u'display on monitor', - QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) - settings.setValue(u'blank warning', - QtCore.QVariant(self.warningCheckBox.isChecked())) - settings.setValue(u'auto open', - QtCore.QVariant(self.autoOpenCheckBox.isChecked())) - settings.setValue(u'show splash', - QtCore.QVariant(self.showSplashCheckBox.isChecked())) - settings.setValue(u'update check', - QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked())) - settings.setValue(u'save prompt', - QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked())) - settings.setValue(u'auto unblank', - QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) - settings.setValue(u'auto preview', - QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) - settings.setValue(u'stoploop', - QtCore.QVariant(self.stopLoopCheckBox.isChecked())) - settings.setValue(u'loop delay', - QtCore.QVariant(self.timeoutSpinBox.value())) - settings.setValue(u'ccli number', - QtCore.QVariant(self.numberEdit.displayText())) - settings.setValue(u'songselect username', - QtCore.QVariant(self.usernameEdit.displayText())) - settings.setValue(u'songselect password', - QtCore.QVariant(self.passwordEdit.displayText())) - settings.setValue(u'x position', - QtCore.QVariant(self.customXValueEdit.value())) - settings.setValue(u'y position', - QtCore.QVariant(self.customYValueEdit.value())) - settings.setValue(u'height', - QtCore.QVariant(self.customHeightValueEdit.value())) - settings.setValue(u'width', - QtCore.QVariant(self.customWidthValueEdit.value())) - settings.setValue(u'override position', - QtCore.QVariant(self.overrideCheckBox.isChecked())) - settings.endGroup() - # On save update the screens as well - self.postSetUp(True) - - def postSetUp(self, postUpdate=False): - """ - Apply settings after settings tab has loaded and most of the - system so must be delayed - """ - Receiver.send_message(u'slidecontroller_live_spin_delay', - self.timeoutSpinBox.value()) - # Do not continue on start up. - if not postUpdate: - return - self.screens.set_current_display(self.monitorComboBox.currentIndex()) - self.screens.display = self.displayOnMonitorCheck.isChecked() - self.screens.override[u'size'] = QtCore.QRect( - self.customXValueEdit.value(), - self.customYValueEdit.value(), - self.customWidthValueEdit.value(), - self.customHeightValueEdit.value()) - if self.overrideCheckBox.isChecked(): - self.screens.set_override_display() - else: - self.screens.reset_current_display() - if self.display_changed: - Receiver.send_message(u'config_screen_changed') - self.display_changed = False - - def onOverrideCheckBoxToggled(self, checked): - """ - Toggle screen state depending on check box state. - - ``checked`` - The state of the check box (boolean). - """ - self.customXValueEdit.setEnabled(checked) - self.customYValueEdit.setEnabled(checked) - self.customHeightValueEdit.setEnabled(checked) - self.customWidthValueEdit.setEnabled(checked) - self.display_changed = True - - def onDisplayChanged(self): - """ - Called when the width, height, x position or y position has changed. - """ - self.display_changed = True +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +import logging + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import SettingsTab, Receiver, translate +from openlp.core.lib.ui import UiStrings +from openlp.core.ui import ScreenList + +log = logging.getLogger(__name__) + +class GeneralTab(SettingsTab): + """ + GeneralTab is the general settings tab in the settings dialog. + """ + def __init__(self, parent): + """ + Initialise the general settings tab + """ + self.screens = ScreenList.get_instance() + self.icon_path = u':/icon/openlp-logo-16x16.png' + generalTranslated = translate('GeneralTab', 'General') + SettingsTab.__init__(self, parent, u'General', generalTranslated) + + def setupUi(self): + """ + Create the user interface for the general settings tab + """ + self.setObjectName(u'GeneralTab') + SettingsTab.setupUi(self) + self.monitorGroupBox = QtGui.QGroupBox(self.leftColumn) + self.monitorGroupBox.setObjectName(u'monitorGroupBox') + self.monitorLayout = QtGui.QFormLayout(self.monitorGroupBox) + self.monitorLayout.setObjectName(u'monitorLayout') + self.monitorLabel = QtGui.QLabel(self.monitorGroupBox) + self.monitorLabel.setObjectName(u'monitorLabel') + self.monitorLayout.addRow(self.monitorLabel) + self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox) + self.monitorComboBox.setObjectName(u'monitorComboBox') + self.monitorLayout.addRow(self.monitorComboBox) + self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox) + self.displayOnMonitorCheck.setObjectName(u'monitorComboBox') + self.monitorLayout.addRow(self.displayOnMonitorCheck) + self.leftLayout.addWidget(self.monitorGroupBox) + self.startupGroupBox = QtGui.QGroupBox(self.leftColumn) + self.startupGroupBox.setObjectName(u'startupGroupBox') + self.startupLayout = QtGui.QVBoxLayout(self.startupGroupBox) + self.startupLayout.setObjectName(u'startupLayout') + self.warningCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.warningCheckBox.setObjectName(u'warningCheckBox') + self.startupLayout.addWidget(self.warningCheckBox) + self.autoOpenCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.autoOpenCheckBox.setObjectName(u'autoOpenCheckBox') + self.startupLayout.addWidget(self.autoOpenCheckBox) + self.showSplashCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.showSplashCheckBox.setObjectName(u'showSplashCheckBox') + self.startupLayout.addWidget(self.showSplashCheckBox) + self.checkForUpdatesCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.checkForUpdatesCheckBox.setObjectName(u'checkForUpdatesCheckBox') + self.startupLayout.addWidget(self.checkForUpdatesCheckBox) + self.leftLayout.addWidget(self.startupGroupBox) + self.settingsGroupBox = QtGui.QGroupBox(self.leftColumn) + self.settingsGroupBox.setObjectName(u'settingsGroupBox') + self.settingsLayout = QtGui.QFormLayout(self.settingsGroupBox) + self.settingsLayout.setObjectName(u'settingsLayout') + self.saveCheckServiceCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.saveCheckServiceCheckBox.setObjectName(u'saveCheckServiceCheckBox') + self.settingsLayout.addRow(self.saveCheckServiceCheckBox) + self.autoUnblankCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.autoUnblankCheckBox.setObjectName(u'autoUnblankCheckBox') + self.settingsLayout.addRow(self.autoUnblankCheckBox) + self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') + self.settingsLayout.addRow(self.autoPreviewCheckBox) + self.enableLoopCheckbox = QtGui.QCheckBox(self.settingsGroupBox) + self.enableLoopCheckbox.setObjectName(u'enableLoopCheckbox') + self.settingsLayout.addRow(self.enableLoopCheckbox) + # Moved here from image tab + self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) + self.timeoutLabel.setObjectName(u'timeoutLabel') + self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) + self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') + self.timeoutSpinBox.setRange(1, 180) + self.settingsLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) + self.leftLayout.addWidget(self.settingsGroupBox) + self.leftLayout.addStretch() + self.ccliGroupBox = QtGui.QGroupBox(self.rightColumn) + self.ccliGroupBox.setObjectName(u'ccliGroupBox') + self.ccliLayout = QtGui.QFormLayout(self.ccliGroupBox) + self.ccliLayout.setObjectName(u'ccliLayout') + self.numberLabel = QtGui.QLabel(self.ccliGroupBox) + self.numberLabel.setObjectName(u'numberLabel') + self.numberEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.numberEdit.setValidator(QtGui.QIntValidator()) + self.numberEdit.setObjectName(u'numberEdit') + self.ccliLayout.addRow(self.numberLabel, self.numberEdit) + self.usernameLabel = QtGui.QLabel(self.ccliGroupBox) + self.usernameLabel.setObjectName(u'usernameLabel') + self.usernameEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.usernameEdit.setObjectName(u'usernameEdit') + self.ccliLayout.addRow(self.usernameLabel, self.usernameEdit) + self.passwordLabel = QtGui.QLabel(self.ccliGroupBox) + self.passwordLabel.setObjectName(u'passwordLabel') + self.passwordEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.passwordEdit.setEchoMode(QtGui.QLineEdit.Password) + self.passwordEdit.setObjectName(u'passwordEdit') + self.ccliLayout.addRow(self.passwordLabel, self.passwordEdit) + self.rightLayout.addWidget(self.ccliGroupBox) + # Moved here from display tab + self.displayGroupBox = QtGui.QGroupBox(self.rightColumn) + self.displayGroupBox.setObjectName(u'displayGroupBox') + self.displayLayout = QtGui.QGridLayout(self.displayGroupBox) + self.displayLayout.setObjectName(u'displayLayout') + self.overrideCheckBox = QtGui.QCheckBox(self.displayGroupBox) + self.overrideCheckBox.setObjectName(u'overrideCheckBox') + self.displayLayout.addWidget(self.overrideCheckBox, 2, 0, 1, 4) + self.rightLayout.addWidget(self.displayGroupBox) + # Custom position + self.customXLabel = QtGui.QLabel(self.displayGroupBox) + self.customXLabel.setObjectName(u'customXLabel') + self.displayLayout.addWidget(self.customXLabel, 3, 0) + self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customXValueEdit.setObjectName(u'customXValueEdit') + self.customXValueEdit.setRange(-9999, 9999) + self.displayLayout.addWidget(self.customXValueEdit, 4, 0) + self.customYLabel = QtGui.QLabel(self.displayGroupBox) + self.customYLabel.setObjectName(u'customYLabel') + self.displayLayout.addWidget(self.customYLabel, 3, 1) + self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customYValueEdit.setObjectName(u'customYValueEdit') + self.customYValueEdit.setRange(-9999, 9999) + self.displayLayout.addWidget(self.customYValueEdit, 4, 1) + self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) + self.customWidthLabel.setObjectName(u'customWidthLabel') + self.displayLayout.addWidget(self.customWidthLabel, 3, 2) + self.customWidthValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customWidthValueEdit.setObjectName(u'customWidthValueEdit') + self.customWidthValueEdit.setMaximum(9999) + self.displayLayout.addWidget(self.customWidthValueEdit, 4, 2) + self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) + self.customHeightLabel.setObjectName(u'customHeightLabel') + self.displayLayout.addWidget(self.customHeightLabel, 3, 3) + self.customHeightValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') + self.customHeightValueEdit.setMaximum(9999) + self.displayLayout.addWidget(self.customHeightValueEdit, 4, 3) + self.rightLayout.addWidget(self.displayGroupBox) + self.rightLayout.addStretch() + # Signals and slots + QtCore.QObject.connect(self.overrideCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) + QtCore.QObject.connect(self.customHeightValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customWidthValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customYValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customXValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.monitorComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDisplayChanged) + # Reload the tab, as the screen resolution/count may have changed. + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_screen_changed'), self.load) + # Remove for now + self.usernameLabel.setVisible(False) + self.usernameEdit.setVisible(False) + self.passwordLabel.setVisible(False) + self.passwordEdit.setVisible(False) + + def retranslateUi(self): + """ + Translate the general settings tab to the currently selected language + """ + self.tabTitleVisible = translate('OpenLP.GeneralTab', 'General') + self.monitorGroupBox.setTitle(translate('OpenLP.GeneralTab', + 'Monitors')) + self.monitorLabel.setText(translate('OpenLP.GeneralTab', + 'Select monitor for output display:')) + self.displayOnMonitorCheck.setText( + translate('OpenLP.GeneralTab', 'Display if a single screen')) + self.startupGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Application Startup')) + self.warningCheckBox.setText( + translate('OpenLP.GeneralTab', 'Show blank screen warning')) + self.autoOpenCheckBox.setText(translate('OpenLP.GeneralTab', + 'Automatically open the last service')) + self.showSplashCheckBox.setText( + translate('OpenLP.GeneralTab', 'Show the splash screen')) + self.checkForUpdatesCheckBox.setText( + translate('OpenLP.GeneralTab', 'Check for updates to OpenLP')) + self.settingsGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Application Settings')) + self.saveCheckServiceCheckBox.setText(translate('OpenLP.GeneralTab', + 'Prompt to save before starting a new service')) + self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab', + 'Unblank display when adding new live item')) + self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', + 'Automatically preview next item in service')) + self.enableLoopCheckbox.setText(translate('OpenLP.GeneralTab', + 'Enable slide loop')) + self.timeoutLabel.setText(translate('OpenLP.GeneralTab', + 'Slide loop delay:')) + self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) + self.ccliGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'CCLI Details')) + self.numberLabel.setText(UiStrings().CCLINumberLabel) + self.usernameLabel.setText( + translate('OpenLP.GeneralTab', 'SongSelect username:')) + self.passwordLabel.setText( + translate('OpenLP.GeneralTab', 'SongSelect password:')) + # Moved from display tab + self.displayGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Display Position')) + self.overrideCheckBox.setText(translate('OpenLP.GeneralTab', + 'Override display position')) + self.customXLabel.setText(translate('OpenLP.GeneralTab', 'X')) + self.customYLabel.setText(translate('OpenLP.GeneralTab', 'Y')) + self.customHeightLabel.setText(translate('OpenLP.GeneralTab', 'Height')) + self.customWidthLabel.setText(translate('OpenLP.GeneralTab', 'Width')) + + def load(self): + """ + Load the settings to populate the form + """ + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + self.monitorComboBox.clear() + self.monitorComboBox.addItems(self.screens.get_screen_list()) + monitorNumber = settings.value(u'monitor', + QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] + self.monitorComboBox.setCurrentIndex(monitorNumber) + self.numberEdit.setText(unicode(settings.value( + u'ccli number', QtCore.QVariant(u'')).toString())) + self.usernameEdit.setText(unicode(settings.value( + u'songselect username', QtCore.QVariant(u'')).toString())) + self.passwordEdit.setText(unicode(settings.value( + u'songselect password', QtCore.QVariant(u'')).toString())) + self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt', + QtCore.QVariant(False)).toBool()) + self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', + QtCore.QVariant(False)).toBool()) + self.displayOnMonitorCheck.setChecked(self.screens.display) + self.warningCheckBox.setChecked(settings.value(u'blank warning', + QtCore.QVariant(False)).toBool()) + self.autoOpenCheckBox.setChecked(settings.value(u'auto open', + QtCore.QVariant(False)).toBool()) + self.showSplashCheckBox.setChecked(settings.value(u'show splash', + QtCore.QVariant(True)).toBool()) + self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', + QtCore.QVariant(True)).toBool()) + self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', + QtCore.QVariant(False)).toBool()) + self.enableLoopCheckbox.setChecked(settings.value(u'enable slide loop', + QtCore.QVariant(True)).toBool()) + self.timeoutSpinBox.setValue(settings.value(u'loop delay', + QtCore.QVariant(5)).toInt()[0]) + self.overrideCheckBox.setChecked(settings.value(u'override position', + QtCore.QVariant(False)).toBool()) + self.customXValueEdit.setValue(settings.value(u'x position', + QtCore.QVariant(self.screens.current[u'size'].x())).toInt()[0]) + self.customYValueEdit.setValue(settings.value(u'y position', + QtCore.QVariant(self.screens.current[u'size'].y())).toInt()[0]) + self.customHeightValueEdit.setValue(settings.value(u'height', + QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0]) + self.customWidthValueEdit.setValue(settings.value(u'width', + QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0]) + settings.endGroup() + self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.display_changed = False + + def save(self): + """ + Save the settings from the form + """ + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + settings.setValue(u'monitor', + QtCore.QVariant(self.monitorComboBox.currentIndex())) + settings.setValue(u'display on monitor', + QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) + settings.setValue(u'blank warning', + QtCore.QVariant(self.warningCheckBox.isChecked())) + settings.setValue(u'auto open', + QtCore.QVariant(self.autoOpenCheckBox.isChecked())) + settings.setValue(u'show splash', + QtCore.QVariant(self.showSplashCheckBox.isChecked())) + settings.setValue(u'update check', + QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked())) + settings.setValue(u'save prompt', + QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked())) + settings.setValue(u'auto unblank', + QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) + settings.setValue(u'auto preview', + QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) + settings.setValue(u'Enable slide loop', + QtCore.QVariant(self.enableLoopCheckbox.isChecked())) + settings.setValue(u'loop delay', + QtCore.QVariant(self.timeoutSpinBox.value())) + settings.setValue(u'ccli number', + QtCore.QVariant(self.numberEdit.displayText())) + settings.setValue(u'songselect username', + QtCore.QVariant(self.usernameEdit.displayText())) + settings.setValue(u'songselect password', + QtCore.QVariant(self.passwordEdit.displayText())) + settings.setValue(u'x position', + QtCore.QVariant(self.customXValueEdit.value())) + settings.setValue(u'y position', + QtCore.QVariant(self.customYValueEdit.value())) + settings.setValue(u'height', + QtCore.QVariant(self.customHeightValueEdit.value())) + settings.setValue(u'width', + QtCore.QVariant(self.customWidthValueEdit.value())) + settings.setValue(u'override position', + QtCore.QVariant(self.overrideCheckBox.isChecked())) + settings.endGroup() + # On save update the screens as well + self.postSetUp(True) + + def postSetUp(self, postUpdate=False): + """ + Apply settings after settings tab has loaded and most of the + system so must be delayed + """ + Receiver.send_message(u'slidecontroller_live_spin_delay', + self.timeoutSpinBox.value()) + # Do not continue on start up. + if not postUpdate: + return + self.screens.set_current_display(self.monitorComboBox.currentIndex()) + self.screens.display = self.displayOnMonitorCheck.isChecked() + self.screens.override[u'size'] = QtCore.QRect( + self.customXValueEdit.value(), + self.customYValueEdit.value(), + self.customWidthValueEdit.value(), + self.customHeightValueEdit.value()) + if self.overrideCheckBox.isChecked(): + self.screens.set_override_display() + else: + self.screens.reset_current_display() + if self.display_changed: + Receiver.send_message(u'config_screen_changed') + self.display_changed = False + + def onOverrideCheckBoxToggled(self, checked): + """ + Toggle screen state depending on check box state. + + ``checked`` + The state of the check box (boolean). + """ + self.customXValueEdit.setEnabled(checked) + self.customYValueEdit.setEnabled(checked) + self.customHeightValueEdit.setEnabled(checked) + self.customWidthValueEdit.setEnabled(checked) + self.display_changed = True + + def onDisplayChanged(self): + """ + Called when the width, height, x position or y position has changed. + """ + self.display_changed = True diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 66e5f100a..899a283b3 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -935,7 +935,7 @@ class SlideController(QtGui.QWidget): def onSlideSelectedNextNoloop(self): self.onSlideSelectedNext(False) - def onSlideSelectedNext(self, loop=QtCore.QSettings().setValue('stop loop', 'stoploop')): + def onSlideSelectedNext(self, loop=(not QtCore.QSettings().value(u'enable slide loop', QtCore.QVariant(True)).toBool())): """ Go to the next slide. """ @@ -959,7 +959,7 @@ class SlideController(QtGui.QWidget): def onSlideSelectedPreviousNoloop(self): self.onSlideSelectedPrevious(False) - def onSlideSelectedPrevious(self, loop=QtCore.QSettings().setValue('stop loop', 'stoploop')): + def onSlideSelectedPrevious(self, loop=(not QtCore.QSettings().value(u'enable slide loop', QtCore.QVariant(True)).toBool())): """ Go to the previous slide. """ From 6d577395a4ab0a62aabac9e83907b013d2269787 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Sun, 22 May 2011 17:39:37 -0400 Subject: [PATCH 04/12] A switch of code to see if it worked and doesn't for the enable loop --- openlp/core/ui/generaltab.py | 4 ++-- openlp/core/ui/slidecontroller.py | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index e12752338..ad01a592f 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -222,7 +222,7 @@ class GeneralTab(SettingsTab): self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service')) self.enableLoopCheckbox.setText(translate('OpenLP.GeneralTab', - 'Enable slide loop')) + 'enable slide loop')) self.timeoutLabel.setText(translate('OpenLP.GeneralTab', 'Slide loop delay:')) self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) @@ -320,7 +320,7 @@ class GeneralTab(SettingsTab): QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) settings.setValue(u'auto preview', QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) - settings.setValue(u'Enable slide loop', + settings.setValue(u'enable slide loop', QtCore.QVariant(self.enableLoopCheckbox.isChecked())) settings.setValue(u'loop delay', QtCore.QVariant(self.timeoutSpinBox.value())) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 899a283b3..df595fba5 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -935,10 +935,15 @@ class SlideController(QtGui.QWidget): def onSlideSelectedNextNoloop(self): self.onSlideSelectedNext(False) - def onSlideSelectedNext(self, loop=(not QtCore.QSettings().value(u'enable slide loop', QtCore.QVariant(True)).toBool())): + def onSlideSelectedNext(self, loop): """ Go to the next slide. - """ + """ + if checked: + loop = QtCore.QSettings().remove(self.parent.generalSettingsSection + u'general/enable slide loop', QtCore.QVariant(True)).toBool() + else: + loop = QtCore.QSettings().value( + u'general/enable slide loop') if not self.serviceItem: return Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), @@ -959,10 +964,15 @@ class SlideController(QtGui.QWidget): def onSlideSelectedPreviousNoloop(self): self.onSlideSelectedPrevious(False) - def onSlideSelectedPrevious(self, loop=(not QtCore.QSettings().value(u'enable slide loop', QtCore.QVariant(True)).toBool())): + def onSlideSelectedPrevious(self, loop): """ Go to the previous slide. - """ + """ + if checked: + loop = QtCore.QSettings().remove(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() + else: + loop = QtCore.QSettings().value( + u'general/enable slide loop') if not self.serviceItem: return Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), From 6b046d9afb20f67d6b33a10d946a9a37ed810821 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Mon, 23 May 2011 19:23:00 -0400 Subject: [PATCH 05/12] Another try at the code for enabling loop through a checkbox in general settings as the signal but ignores it in slidecontroller for some odd reason acting like it's not there... --- openlp.pyw | 1 + openlp/core/ui/generaltab.py | 2 +- openlp/core/ui/slidecontroller.py | 2334 ++++++++++++++--------------- 3 files changed, 1156 insertions(+), 1181 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 76d334bae..f3b380c7a 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -257,3 +257,4 @@ if __name__ == u'__main__': Instantiate and run the application. """ main() + diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index ad01a592f..8c9336656 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -272,7 +272,7 @@ class GeneralTab(SettingsTab): self.showSplashCheckBox.setChecked(settings.value(u'show splash', QtCore.QVariant(True)).toBool()) self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', - QtCore.QVariant(True)).toBool()) + QtCore.QVariant(False)).toBool()) self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', QtCore.QVariant(False)).toBool()) self.enableLoopCheckbox.setChecked(settings.value(u'enable slide loop', diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index df595fba5..4da75ebb6 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1,1181 +1,1155 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import logging -import os - -from PyQt4 import QtCore, QtGui -from PyQt4.phonon import Phonon - -from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ - ItemCapabilities, translate -from openlp.core.lib.ui import UiStrings, shortcut_action -from openlp.core.ui import HideMode, MainDisplay, ScreenList -from openlp.core.utils.actions import ActionList, CategoryOrder - -log = logging.getLogger(__name__) - -class SlideList(QtGui.QTableWidget): - """ - Customised version of QTableWidget which can respond to keyboard - events. - """ - def __init__(self, parent=None, name=None): - QtGui.QTableWidget.__init__(self, parent.controller) - self.parent = parent - - -class SlideController(QtGui.QWidget): - """ - SlideController is the slide controller widget. This widget is what the - user uses to control the displaying of verses/slides/etc on the screen. - """ - def __init__(self, parent, isLive=False): - """ - Set up the Slide Controller. - """ - QtGui.QWidget.__init__(self, parent) - self.isLive = isLive - self.parent = parent - self.screens = ScreenList.get_instance() - self.ratio = float(self.screens.current[u'size'].width()) / \ - float(self.screens.current[u'size'].height()) - self.image_manager = self.parent.image_manager - self.loopList = [ - u'Start Loop', - u'Loop Separator', - u'Image SpinBox' - ] - self.songEditList = [ - u'Edit Song', - ] - self.volume = 10 - self.timer_id = 0 - self.songEdit = False - self.selectedRow = 0 - self.serviceItem = None - self.alertTab = None - self.panel = QtGui.QWidget(parent.controlSplitter) - self.slideList = {} - # Layout for holding panel - self.panelLayout = QtGui.QVBoxLayout(self.panel) - self.panelLayout.setSpacing(0) - self.panelLayout.setMargin(0) - # Type label for the top of the slide controller - self.typeLabel = QtGui.QLabel(self.panel) - if self.isLive: - self.typeLabel.setText(UiStrings().Live) - self.split = 1 - self.typePrefix = u'live' - else: - self.typeLabel.setText(UiStrings().Preview) - self.split = 0 - self.typePrefix = u'preview' - self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') - self.typeLabel.setAlignment(QtCore.Qt.AlignCenter) - self.panelLayout.addWidget(self.typeLabel) - # Splitter - self.splitter = QtGui.QSplitter(self.panel) - self.splitter.setOrientation(QtCore.Qt.Vertical) - self.panelLayout.addWidget(self.splitter) - # Actual controller section - self.controller = QtGui.QWidget(self.splitter) - self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536)) - self.controller.setSizePolicy( - QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, - QtGui.QSizePolicy.Maximum)) - self.controllerLayout = QtGui.QVBoxLayout(self.controller) - self.controllerLayout.setSpacing(0) - self.controllerLayout.setMargin(0) - # Controller list view - self.previewListWidget = SlideList(self) - self.previewListWidget.setColumnCount(1) - self.previewListWidget.horizontalHeader().setVisible(False) - self.previewListWidget.setColumnWidth(0, self.controller.width()) - self.previewListWidget.isLive = self.isLive - self.previewListWidget.setObjectName(u'PreviewListWidget') - self.previewListWidget.setSelectionBehavior( - QtGui.QAbstractItemView.SelectRows) - self.previewListWidget.setSelectionMode( - QtGui.QAbstractItemView.SingleSelection) - self.previewListWidget.setEditTriggers( - QtGui.QAbstractItemView.NoEditTriggers) - self.previewListWidget.setHorizontalScrollBarPolicy( - QtCore.Qt.ScrollBarAlwaysOff) - self.previewListWidget.setAlternatingRowColors(True) - self.controllerLayout.addWidget(self.previewListWidget) - # Build the full toolbar - self.toolbar = OpenLPToolbar(self) - sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizeToolbarPolicy.setHorizontalStretch(0) - sizeToolbarPolicy.setVerticalStretch(0) - sizeToolbarPolicy.setHeightForWidth( - self.toolbar.sizePolicy().hasHeightForWidth()) - self.toolbar.setSizePolicy(sizeToolbarPolicy) - self.previousItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Previous Slide'), - u':/slides/slide_previous.png', - translate('OpenLP.SlideController', 'Move to previous'), - self.onSlideSelectedPrevious, - shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.nextItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Next Slide'), - u':/slides/slide_next.png', - translate('OpenLP.SlideController', 'Move to next'), - self.onSlideSelectedNext, - shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.toolbar.addToolbarSeparator(u'Close Separator') - if self.isLive: - self.hideMenu = QtGui.QToolButton(self.toolbar) - self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) - self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) - self.hideMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Hide'), self.toolbar)) - self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', - [QtCore.Qt.Key_Period], self.onBlankDisplay, - u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) - self.blankScreen.setText( - translate('OpenLP.SlideController', 'Blank Screen')) - self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', - [QtGui.QKeySequence(u'T')], self.onThemeDisplay, - u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) - self.themeScreen.setText( - translate('OpenLP.SlideController', 'Blank to Theme')) - self.desktopScreen = shortcut_action(self.hideMenu, - u'desktopScreen', [QtGui.QKeySequence(u'D')], - self.onHideDisplay, u':/slides/slide_desktop.png', False, - UiStrings().LiveToolbar) - self.desktopScreen.setText( - translate('OpenLP.SlideController', 'Show Desktop')) - self.hideMenu.setDefaultAction(self.blankScreen) - self.hideMenu.menu().addAction(self.blankScreen) - self.hideMenu.menu().addAction(self.themeScreen) - self.hideMenu.menu().addAction(self.desktopScreen) - self.toolbar.addToolbarSeparator(u'Loop Separator') - startLoop = self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Start Loop', u':/media/media_time.png', - translate('OpenLP.SlideController', 'Start continuous loop'), - self.onStartLoop) - action_list = ActionList.get_instance() - action_list.add_action(startLoop, UiStrings().LiveToolbar) - stopLoop = self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Stop Loop', u':/media/media_stop.png', - translate('OpenLP.SlideController', 'Stop continuous loop'), - self.onStopLoop) - action_list.add_action(stopLoop, UiStrings().LiveToolbar) - self.toogleLoop = shortcut_action(self, u'toogleLoop', - [QtGui.QKeySequence(u'L')], self.onToggleLoop, - category=UiStrings().LiveToolbar) - self.toogleLoop.setText(translate('OpenLP.SlideController', - 'Start/Stop continuous loop')) - self.addAction(self.toogleLoop) - self.delaySpinBox = QtGui.QSpinBox() - self.delaySpinBox.setRange(1, 180) - self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) - self.delaySpinBox.setSuffix(UiStrings().Seconds) - self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', - 'Delay between slides in seconds')) - else: - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Go Live', u':/general/general_live.png', - translate('OpenLP.SlideController', 'Move to live'), - self.onGoLive) - self.toolbar.addToolbarSeparator(u'Close Separator') - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Edit Song', u':/general/general_edit.png', - translate('OpenLP.SlideController', - 'Edit and reload song preview'), - self.onEditSong) - self.controllerLayout.addWidget(self.toolbar) - # Build a Media ToolBar - self.mediabar = OpenLPToolbar(self) - self.mediabar.addToolbarButton( - u'Media Start', u':/slides/media_playback_start.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaPlay) - self.mediabar.addToolbarButton( - u'Media Pause', u':/slides/media_playback_pause.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaPause) - self.mediabar.addToolbarButton( - u'Media Stop', u':/slides/media_playback_stop.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaStop) - if self.isLive: - # Build the Song Toolbar - self.songMenu = QtGui.QToolButton(self.toolbar) - self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) - self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) - self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) - self.songMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Go To'), self.toolbar)) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) - # Build the volumeSlider. - self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) - self.volumeSlider.setTickInterval(1) - self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) - self.volumeSlider.setMinimum(0) - self.volumeSlider.setMaximum(10) - else: - # Build the seekSlider. - self.seekSlider = Phonon.SeekSlider() - self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.seekSlider.setObjectName(u'seekSlider') - self.mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider) - self.volumeSlider = Phonon.VolumeSlider() - self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.volumeSlider.setObjectName(u'volumeSlider') - self.mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) - self.controllerLayout.addWidget(self.mediabar) - # Screen preview area - self.previewFrame = QtGui.QFrame(self.splitter) - self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio)) - self.previewFrame.setMinimumHeight(100) - self.previewFrame.setSizePolicy(QtGui.QSizePolicy( - QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored, - QtGui.QSizePolicy.Label)) - self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel) - self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken) - self.previewFrame.setObjectName(u'PreviewFrame') - self.grid = QtGui.QGridLayout(self.previewFrame) - self.grid.setMargin(8) - self.grid.setObjectName(u'grid') - self.slideLayout = QtGui.QVBoxLayout() - self.slideLayout.setSpacing(0) - self.slideLayout.setMargin(0) - self.slideLayout.setObjectName(u'SlideLayout') - if not self.isLive: - self.mediaObject = Phonon.MediaObject(self) - self.video = Phonon.VideoWidget() - self.video.setVisible(False) - self.audio = Phonon.AudioOutput(Phonon.VideoCategory, - self.mediaObject) - Phonon.createPath(self.mediaObject, self.video) - Phonon.createPath(self.mediaObject, self.audio) - self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) - self.slideLayout.insertWidget(0, self.video) - # Actual preview screen - self.slidePreview = QtGui.QLabel(self) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.slidePreview.sizePolicy().hasHeightForWidth()) - self.slidePreview.setSizePolicy(sizePolicy) - self.slidePreview.setFrameShape(QtGui.QFrame.Box) - self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) - self.slidePreview.setLineWidth(1) - self.slidePreview.setScaledContents(True) - self.slidePreview.setObjectName(u'SlidePreview') - self.slideLayout.insertWidget(0, self.slidePreview) - self.grid.addLayout(self.slideLayout, 0, 0, 1, 1) - # Signals - QtCore.QObject.connect(self.previewListWidget, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) - if self.isLive: - QtCore.QObject.connect(self.volumeSlider, - QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), - self.receiveSpinDelay) - self.toolbar.makeWidgetsInvisible(self.loopList) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - else: - QtCore.QObject.connect(self.previewListWidget, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), - self.onGoLiveClick) - self.toolbar.makeWidgetsInvisible(self.songEditList) - self.mediabar.setVisible(False) - if self.isLive: - self.setLiveHotkeys(self) - self.__addActionsToWidget(self.previewListWidget) - else: - self.setPreviewHotkeys() - self.previewListWidget.addActions( - [self.nextItem, - self.previousItem]) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), - self.onStopLoop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_first' % self.typePrefix), - self.onSlideSelectedFirst) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), - self.onSlideSelectedNext) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), - self.onSlideSelectedPrevious) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next_noloop' % self.typePrefix), - self.onSlideSelectedNextNoloop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_previous_noloop' % - self.typePrefix), - self.onSlideSelectedPreviousNoloop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), - self.onSlideSelectedLast) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), - self.onSlideChange) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), - self.onSlideSelectedIndex) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), - self.onSlideBlank) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), - self.onSlideUnblank) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), - self.onTextRequest) - - def setPreviewHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemPreview') - self.nextItem.setObjectName(u'nextItemPreview') - action_list = ActionList.get_instance() - action_list.add_action(self.previousItem) - action_list.add_action(self.nextItem) - - def setLiveHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemLive') - self.nextItem.setObjectName(u'nextItemLive') - action_list = ActionList.get_instance() - action_list.add_category( - UiStrings().LiveToolbar, CategoryOrder.standardToolbar) - action_list.add_action(self.previousItem) - action_list.add_action(self.nextItem) - self.previousService = shortcut_action(parent, u'previousService', - [QtCore.Qt.Key_Left], self.servicePrevious, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.previousService.setText( - translate('OpenLP.SlideController', 'Previous Service')) - self.nextService = shortcut_action(parent, 'nextService', - [QtCore.Qt.Key_Right], self.serviceNext, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.nextService.setText( - translate('OpenLP.SlideController', 'Next Service')) - self.escapeItem = shortcut_action(parent, 'escapeItem', - [QtCore.Qt.Key_Escape], self.liveEscape, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.escapeItem.setText( - translate('OpenLP.SlideController', 'Escape Item')) - - def liveEscape(self): - self.display.setVisible(False) - self.display.videoStop() - - def servicePrevious(self): - Receiver.send_message('servicemanager_previous_item') - - def serviceNext(self): - Receiver.send_message('servicemanager_next_item') - - def screenSizeChanged(self): - """ - Settings dialog has changed the screen size of adjust output and - screen previews. - """ - # rebuild display as screen size changed - self.display = MainDisplay(self, self.image_manager, self.isLive) - self.display.alertTab = self.alertTab - self.display.setup() - if self.isLive: - self.__addActionsToWidget(self.display) - # The SlidePreview's ratio. - self.ratio = float(self.screens.current[u'size'].width()) / \ - float(self.screens.current[u'size'].height()) - self.previewSizeChanged() - if self.serviceItem: - self.refreshServiceItem() - - def __addActionsToWidget(self, widget): - widget.addActions([ - self.previousItem, self.nextItem, - self.previousService, self.nextService, - self.escapeItem]) - - def previewSizeChanged(self): - """ - Takes care of the SlidePreview's size. Is called when one of the the - splitters is moved or when the screen size is changed. Note, that this - method is (also) called frequently from the mainwindow *paintEvent*. - """ - if self.ratio < float(self.previewFrame.width()) / float( - self.previewFrame.height()): - # We have to take the height as limit. - max_height = self.previewFrame.height() - self.grid.margin() * 2 - self.slidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, - max_height)) - else: - # We have to take the width as limit. - max_width = self.previewFrame.width() - self.grid.margin() * 2 - self.slidePreview.setFixedSize(QtCore.QSize(max_width, - max_width / self.ratio)) - # Make sure that the frames have the correct size. - self.previewListWidget.setColumnWidth(0, - self.previewListWidget.viewport().size().width()) - if self.serviceItem: - # Sort out songs, bibles, etc. - if self.serviceItem.is_text(): - self.previewListWidget.resizeRowsToContents() - else: - # Sort out image heights. - width = self.parent.controlSplitter.sizes()[self.split] - for framenumber in range(len(self.serviceItem.get_frames())): - self.previewListWidget.setRowHeight( - framenumber, width / self.ratio) - - def onSongBarHandler(self): - request = unicode(self.sender().text()) - slideno = self.slideList[request] - self.__updatePreviewSelection(slideno) - self.slideSelected() - - def receiveSpinDelay(self, value): - """ - Adjusts the value of the ``delaySpinBox`` to the given one. - """ - self.delaySpinBox.setValue(int(value)) - - def enableToolBar(self, item): - """ - Allows the toolbars to be reconfigured based on Controller Type - and ServiceItem Type - """ - if self.isLive: - self.enableLiveToolBar(item) - else: - self.enablePreviewToolBar(item) - - def enableLiveToolBar(self, item): - """ - Allows the live toolbar to be customised - """ - self.toolbar.setVisible(True) - self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) - self.toolbar.makeWidgetsInvisible(self.loopList) - self.toogleLoop.setEnabled(False) - self.toolbar.actions[u'Start Loop'].setEnabled(False) - self.toolbar.actions[u'Stop Loop'].setEnabled(False) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - if item.is_text(): - if QtCore.QSettings().value( - self.parent.songsSettingsSection + u'/display songbar', - QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: - self.toolbar.makeWidgetsVisible([u'Song Menu']) - if item.is_capable(ItemCapabilities.AllowsLoop) and \ - len(item.get_frames()) > 1: - self.toolbar.makeWidgetsVisible(self.loopList) - self.toogleLoop.setEnabled(True) - self.toolbar.actions[u'Start Loop'].setEnabled(True) - self.toolbar.actions[u'Stop Loop'].setEnabled(True) - if item.is_media(): - self.toolbar.setVisible(False) - self.mediabar.setVisible(True) - - def enablePreviewToolBar(self, item): - """ - Allows the Preview toolbar to be customised - """ - self.toolbar.setVisible(True) - self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible(self.songEditList) - if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: - self.toolbar.makeWidgetsVisible(self.songEditList) - elif item.is_media(): - self.toolbar.setVisible(False) - self.mediabar.setVisible(True) - self.volumeSlider.setAudioOutput(self.audio) - - def refreshServiceItem(self): - """ - Method to update the service item if the screen has changed - """ - log.debug(u'refreshServiceItem live = %s' % self.isLive) - if self.serviceItem.is_text() or self.serviceItem.is_image(): - item = self.serviceItem - item.render() - self._processItem(item, self.selectedRow) - - def addServiceItem(self, item): - """ - Method to install the service item into the controller - Called by plugins - """ - log.debug(u'addServiceItem live = %s' % self.isLive) - item.render() - slideno = 0 - if self.songEdit: - slideno = self.selectedRow - self.songEdit = False - self._processItem(item, slideno) - - def replaceServiceManagerItem(self, item): - """ - Replacement item following a remote edit - """ - if item.__eq__(self.serviceItem): - self._processItem(item, self.previewListWidget.currentRow()) - - def addServiceManagerItem(self, item, slideno): - """ - Method to install the service item into the controller and - request the correct toolbar for the plugin. - Called by ServiceManager - """ - log.debug(u'addServiceManagerItem live = %s' % self.isLive) - # If no valid slide number is specified we take the first one. - if slideno == -1: - slideno = 0 - # If service item is the same as the current on only change slide - if item.__eq__(self.serviceItem): - self.__checkUpdateSelectedSlide(slideno) - self.slideSelected() - return - self._processItem(item, slideno) - - def _processItem(self, serviceItem, slideno): - """ - Loads a ServiceItem into the system from ServiceManager - Display the slide number passed - """ - log.debug(u'processManagerItem live = %s' % self.isLive) - self.onStopLoop() - old_item = self.serviceItem - self.serviceItem = serviceItem - if old_item and self.isLive and old_item.is_capable( - ItemCapabilities.ProvidesOwnDisplay): - self._resetBlank() - Receiver.send_message(u'%s_start' % serviceItem.name.lower(), - [serviceItem, self.isLive, self.hideMode(), slideno]) - self.slideList = {} - width = self.parent.controlSplitter.sizes()[self.split] - self.previewListWidget.clear() - self.previewListWidget.setRowCount(0) - self.previewListWidget.setColumnWidth(0, width) - if self.isLive: - self.songMenu.menu().clear() - row = 0 - text = [] - for framenumber, frame in enumerate(self.serviceItem.get_frames()): - self.previewListWidget.setRowCount( - self.previewListWidget.rowCount() + 1) - item = QtGui.QTableWidgetItem() - slideHeight = 0 - if self.serviceItem.is_text(): - if frame[u'verseTag']: - # These tags are already translated. - verse_def = frame[u'verseTag'] - verse_def = u'%s%s' % (verse_def[0], verse_def[1:]) - two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:]) - row = two_line_def - if self.isLive: - if verse_def not in self.slideList: - self.slideList[verse_def] = framenumber - self.songMenu.menu().addAction(verse_def, - self.onSongBarHandler) - else: - row += 1 - item.setText(frame[u'text']) - else: - label = QtGui.QLabel() - label.setMargin(4) - label.setScaledContents(True) - if self.serviceItem.is_command(): - image = resize_image(frame[u'image'], - self.parent.renderer.width, - self.parent.renderer.height) - else: - # If current slide set background to image - if framenumber == slideno: - self.serviceItem.bg_image_bytes = \ - self.image_manager.get_image_bytes(frame[u'title']) - image = self.image_manager.get_image(frame[u'title']) - label.setPixmap(QtGui.QPixmap.fromImage(image)) - self.previewListWidget.setCellWidget(framenumber, 0, label) - slideHeight = width * self.parent.renderer.screen_ratio - row += 1 - text.append(unicode(row)) - self.previewListWidget.setItem(framenumber, 0, item) - if slideHeight != 0: - self.previewListWidget.setRowHeight(framenumber, slideHeight) - self.previewListWidget.setVerticalHeaderLabels(text) - if self.serviceItem.is_text(): - self.previewListWidget.resizeRowsToContents() - self.previewListWidget.setColumnWidth(0, - self.previewListWidget.viewport().size().width()) - self.__updatePreviewSelection(slideno) - self.enableToolBar(serviceItem) - # Pass to display for viewing. - # Postpone image build, we need to do this later to avoid the theme - # flashing on the screen - if not self.serviceItem.is_image(): - self.display.buildHtml(self.serviceItem) - if serviceItem.is_media(): - self.onMediaStart(serviceItem) - self.slideSelected(True) - self.previewListWidget.setFocus() - if old_item: - # Close the old item after the new one is opened - # This avoids the service theme/desktop flashing on screen - # However opening a new item of the same type will automatically - # close the previous, so make sure we don't close the new one. - if old_item.is_command() and not serviceItem.is_command(): - Receiver.send_message(u'%s_stop' % - old_item.name.lower(), [old_item, self.isLive]) - if old_item.is_media() and not serviceItem.is_media(): - self.onMediaClose() - Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, - [serviceItem]) - - def __updatePreviewSelection(self, slideno): - """ - Utility method to update the selected slide in the list. - """ - if slideno > self.previewListWidget.rowCount(): - self.previewListWidget.selectRow( - self.previewListWidget.rowCount() - 1) - else: - self.__checkUpdateSelectedSlide(slideno) - - def onTextRequest(self): - """ - Return the text for the current item in controller - """ - data = [] - if self.serviceItem: - for framenumber, frame in enumerate(self.serviceItem.get_frames()): - dataItem = {} - if self.serviceItem.is_text(): - dataItem[u'tag'] = unicode(frame[u'verseTag']) - dataItem[u'text'] = unicode(frame[u'html']) - else: - dataItem[u'tag'] = unicode(framenumber) - dataItem[u'text'] = u'' - dataItem[u'selected'] = \ - (self.previewListWidget.currentRow() == framenumber) - data.append(dataItem) - Receiver.send_message(u'slidecontroller_%s_text_response' - % self.typePrefix, data) - - # Screen event methods - def onSlideSelectedFirst(self): - """ - Go to the first slide. - """ - if not self.serviceItem: - return - if self.serviceItem.is_command(): - Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - self.updatePreview() - else: - self.previewListWidget.selectRow(0) - self.slideSelected() - - def onSlideSelectedIndex(self, message): - """ - Go to the requested slide - """ - index = int(message[0]) - if not self.serviceItem: - return - if self.serviceItem.is_command(): - Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, index]) - self.updatePreview() - else: - self.__checkUpdateSelectedSlide(index) - self.slideSelected() - - def mainDisplaySetBackground(self): - """ - Allow the main display to blank the main display at startup time - """ - log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) - display_type = QtCore.QSettings().value( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'')).toString() - if not self.display.primary: - # Order done to handle initial conversion - if display_type == u'themed': - self.onThemeDisplay(True) - elif display_type == u'hidden': - self.onHideDisplay(True) - else: - self.onBlankDisplay(True) - - def onSlideBlank(self): - """ - Handle the slidecontroller blank event - """ - self.onBlankDisplay(True) - - def onSlideUnblank(self): - """ - Handle the slidecontroller unblank event - """ - self.onBlankDisplay(False) - - def onBlankDisplay(self, checked=None): - """ - Handle the blank screen button actions - """ - if checked is None: - checked = self.blankScreen.isChecked() - log.debug(u'onBlankDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.blankScreen) - self.blankScreen.setChecked(checked) - self.themeScreen.setChecked(False) - self.desktopScreen.setChecked(False) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'blanked')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin() - self.updatePreview() - - def onThemeDisplay(self, checked=None): - """ - Handle the Theme screen button - """ - if checked is None: - checked = self.themeScreen.isChecked() - log.debug(u'onThemeDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.themeScreen) - self.blankScreen.setChecked(False) - self.themeScreen.setChecked(checked) - self.desktopScreen.setChecked(False) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'themed')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin() - self.updatePreview() - - def onHideDisplay(self, checked=None): - """ - Handle the Hide screen button - """ - if checked is None: - checked = self.desktopScreen.isChecked() - log.debug(u'onHideDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.desktopScreen) - self.blankScreen.setChecked(False) - self.themeScreen.setChecked(False) - self.desktopScreen.setChecked(checked) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'hidden')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.hidePlugin(checked) - self.updatePreview() - - def blankPlugin(self): - """ - Blank/Hide the display screen within a plugin if required. - """ - hide_mode = self.hideMode() - log.debug(u'blankPlugin %s ', hide_mode) - if self.serviceItem is not None: - if hide_mode: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_hide', hide_mode) - Receiver.send_message(u'%s_blank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, hide_mode]) - else: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_show') - Receiver.send_message(u'%s_unblank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - - def hidePlugin(self, hide): - """ - Tell the plugin to hide the display screen. - """ - log.debug(u'hidePlugin %s ', hide) - if self.serviceItem is not None: - if hide: - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) - Receiver.send_message(u'%s_hide' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - else: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_show') - Receiver.send_message(u'%s_unblank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - - def onSlideSelected(self, start=False): - """ - Slide selected in controller - """ - self.slideSelected() - - def slideSelected(self, start=False): - """ - Generate the preview when you click on a slide. - if this is the Live Controller also display on the screen - """ - row = self.previewListWidget.currentRow() - self.selectedRow = 0 - if row > -1 and row < self.previewListWidget.rowCount(): - if self.serviceItem.is_command(): - if self.isLive and not start: - Receiver.send_message( - u'%s_slide' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, row]) - self.updatePreview() - else: - toDisplay = self.serviceItem.get_rendered_frame(row) - if self.serviceItem.is_text(): - frame = self.display.text(toDisplay) - else: - if start: - self.display.buildHtml(self.serviceItem, toDisplay) - frame = self.display.preview() - else: - frame = self.display.image(toDisplay) - # reset the store used to display first image - self.serviceItem.bg_image_bytes = None - self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) - self.selectedRow = row - self.__checkUpdateSelectedSlide(row) - Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, - row) - - def onSlideChange(self, row): - """ - The slide has been changed. Update the slidecontroller accordingly - """ - self.__checkUpdateSelectedSlide(row) - self.updatePreview() - Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, - row) - - def updatePreview(self): - """ - This updates the preview frame, for example after changing a slide or - using *Blank to Theme*. - """ - log.debug(u'updatePreview %s ' % self.screens.current[u'primary']) - if not self.screens.current[u'primary'] and self.serviceItem and \ - self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): - # Grab now, but try again in a couple of seconds if slide change - # is slow - QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) - QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) - else: - self.slidePreview.setPixmap( - QtGui.QPixmap.fromImage(self.display.preview())) - - def grabMainDisplay(self): - """ - Creates an image of the current screen and updates the preview frame. - """ - winid = QtGui.QApplication.desktop().winId() - rect = self.screens.current[u'size'] - winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), - rect.y(), rect.width(), rect.height()) - self.slidePreview.setPixmap(winimg) - - def onSlideSelectedNextNoloop(self): - self.onSlideSelectedNext(False) - - def onSlideSelectedNext(self, loop): - """ - Go to the next slide. - """ - if checked: - loop = QtCore.QSettings().remove(self.parent.generalSettingsSection + u'general/enable slide loop', QtCore.QVariant(True)).toBool() - else: - loop = QtCore.QSettings().value( - u'general/enable slide loop') - if not self.serviceItem: - return - Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command() and self.isLive: - self.updatePreview() - else: - row = self.previewListWidget.currentRow() + 1 - if row == self.previewListWidget.rowCount(): - if loop: - row = 0 - else: - Receiver.send_message('servicemanager_next_item') - return - self.__checkUpdateSelectedSlide(row) - self.slideSelected() - - def onSlideSelectedPreviousNoloop(self): - self.onSlideSelectedPrevious(False) - - def onSlideSelectedPrevious(self, loop): - """ - Go to the previous slide. - """ - if checked: - loop = QtCore.QSettings().remove(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() - else: - loop = QtCore.QSettings().value( - u'general/enable slide loop') - if not self.serviceItem: - return - Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command() and self.isLive: - self.updatePreview() - else: - row = self.previewListWidget.currentRow() - 1 - if row == -1: - if loop: - row = self.previewListWidget.rowCount() - 1 - else: - row = 0 - self.__checkUpdateSelectedSlide(row) - self.slideSelected() - - def __checkUpdateSelectedSlide(self, row): - if row + 1 < self.previewListWidget.rowCount(): - self.previewListWidget.scrollToItem( - self.previewListWidget.item(row + 1, 0)) - self.previewListWidget.selectRow(row) - - def onSlideSelectedLast(self): - """ - Go to the last slide. - """ - if not self.serviceItem: - return - Receiver.send_message(u'%s_last' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command(): - self.updatePreview() - else: - self.previewListWidget.selectRow( - self.previewListWidget.rowCount() - 1) - self.slideSelected() - - def onToggleLoop(self, toggled): - """ - Toggles the loop state. - """ - if self.toolbar.actions[u'Start Loop'].isVisible(): - self.onStartLoop() - else: - self.onStopLoop() - - def onStartLoop(self): - """ - Start the timer loop running and store the timer id - """ - if self.previewListWidget.rowCount() > 1: - self.timer_id = self.startTimer( - int(self.delaySpinBox.value()) * 1000) - self.toolbar.actions[u'Stop Loop'].setVisible(True) - self.toolbar.actions[u'Start Loop'].setVisible(False) - - def onStopLoop(self): - """ - Stop the timer loop running - """ - if self.timer_id != 0: - self.killTimer(self.timer_id) - self.timer_id = 0 - self.toolbar.actions[u'Start Loop'].setVisible(True) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - - def timerEvent(self, event): - """ - If the timer event is for this window select next slide - """ - if event.timerId() == self.timer_id: - self.onSlideSelectedNext() - - def onEditSong(self): - """ - From the preview display requires the service Item to be editied - """ - self.songEdit = True - Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), - u'P:%s' % self.serviceItem.edit_id) - - def onGoLiveClick(self): - """ - triggered by clicking the Preview slide items - """ - if QtCore.QSettings().value(u'advanced/double click live', - QtCore.QVariant(False)).toBool(): - self.onGoLive() - - def onGoLive(self): - """ - If preview copy slide item to live - """ - row = self.previewListWidget.currentRow() - if row > -1 and row < self.previewListWidget.rowCount(): - if self.serviceItem.from_service: - Receiver.send_message('servicemanager_preview_live', - u'%s:%s' % (self.serviceItem._uuid, row)) - else: - self.parent.liveController.addServiceManagerItem( - self.serviceItem, row) - - def onMediaStart(self, item): - """ - Respond to the arrival of a media service item - """ - log.debug(u'SlideController onMediaStart') - file = os.path.join(item.get_frame_path(), item.get_frame_title()) - if self.isLive: - self.display.video(file, self.volume) - self.volumeSlider.setValue(self.volume) - else: - self.mediaObject.stop() - self.mediaObject.clearQueue() - self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) - self.seekSlider.setMediaObject(self.mediaObject) - self.seekSlider.show() - self.onMediaPlay() - - def mediaVolume(self): - """ - Respond to the release of Volume Slider - """ - log.debug(u'SlideController mediaVolume') - self.volume = self.volumeSlider.value() - self.display.videoVolume(self.volume) - - def onMediaPause(self): - """ - Respond to the Pause from the media Toolbar - """ - log.debug(u'SlideController onMediaPause') - if self.isLive: - self.display.videoPause() - else: - self.mediaObject.pause() - - def onMediaPlay(self): - """ - Respond to the Play from the media Toolbar - """ - log.debug(u'SlideController onMediaPlay') - if self.isLive: - self.display.videoPlay() - else: - self.slidePreview.hide() - self.video.show() - self.mediaObject.play() - - def onMediaStop(self): - """ - Respond to the Stop from the media Toolbar - """ - log.debug(u'SlideController onMediaStop') - if self.isLive: - self.display.videoStop() - else: - self.mediaObject.stop() - self.video.hide() - self.slidePreview.clear() - self.slidePreview.show() - - def onMediaClose(self): - """ - Respond to a request to close the Video - """ - log.debug(u'SlideController onMediaStop') - if self.isLive: - self.display.resetVideo() - else: - self.mediaObject.stop() - self.mediaObject.clearQueue() - self.video.hide() - self.slidePreview.clear() - self.slidePreview.show() - - def _resetBlank(self): - """ - Used by command items which provide their own displays to reset the - screen hide attributes - """ - hide_mode = self.hideMode() - if hide_mode == HideMode.Blank: - self.onBlankDisplay(True) - elif hide_mode == HideMode.Theme: - self.onThemeDisplay(True) - elif hide_mode == HideMode.Screen: - self.onHideDisplay(True) - else: - self.hidePlugin(False) - - def hideMode(self): - """ - Determine what the hide mode should be according to the blank button - """ - if not self.isLive: - return None - elif self.blankScreen.isChecked(): - return HideMode.Blank - elif self.themeScreen.isChecked(): - return HideMode.Theme - elif self.desktopScreen.isChecked(): - return HideMode.Screen - else: - return None +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +import logging +import os + +from PyQt4 import QtCore, QtGui +from PyQt4.phonon import Phonon + +from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ + ItemCapabilities, translate +from openlp.core.lib.ui import UiStrings, shortcut_action +from openlp.core.ui import HideMode, MainDisplay, ScreenList +from openlp.core.utils.actions import ActionList, CategoryOrder + +log = logging.getLogger(__name__) + +class SlideList(QtGui.QTableWidget): + """ + Customised version of QTableWidget which can respond to keyboard + events. + """ + def __init__(self, parent=None, name=None): + QtGui.QTableWidget.__init__(self, parent.controller) + self.parent = parent + + +class SlideController(QtGui.QWidget): + """ + SlideController is the slide controller widget. This widget is what the + user uses to control the displaying of verses/slides/etc on the screen. + """ + def __init__(self, parent, isLive=False): + """ + Set up the Slide Controller. + """ + QtGui.QWidget.__init__(self, parent) + self.isLive = isLive + self.parent = parent + self.screens = ScreenList.get_instance() + self.ratio = float(self.screens.current[u'size'].width()) / \ + float(self.screens.current[u'size'].height()) + self.image_manager = self.parent.image_manager + self.loopList = [ + u'Start Loop', + u'Loop Separator', + u'Image SpinBox' + ] + self.songEditList = [ + u'Edit Song', + ] + self.volume = 10 + self.timer_id = 0 + self.songEdit = False + self.selectedRow = 0 + self.serviceItem = None + self.alertTab = None + self.panel = QtGui.QWidget(parent.controlSplitter) + self.slideList = {} + # Layout for holding panel + self.panelLayout = QtGui.QVBoxLayout(self.panel) + self.panelLayout.setSpacing(0) + self.panelLayout.setMargin(0) + # Type label for the top of the slide controller + self.typeLabel = QtGui.QLabel(self.panel) + if self.isLive: + self.typeLabel.setText(UiStrings().Live) + self.split = 1 + self.typePrefix = u'live' + else: + self.typeLabel.setText(UiStrings().Preview) + self.split = 0 + self.typePrefix = u'preview' + self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') + self.typeLabel.setAlignment(QtCore.Qt.AlignCenter) + self.panelLayout.addWidget(self.typeLabel) + # Splitter + self.splitter = QtGui.QSplitter(self.panel) + self.splitter.setOrientation(QtCore.Qt.Vertical) + self.panelLayout.addWidget(self.splitter) + # Actual controller section + self.controller = QtGui.QWidget(self.splitter) + self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536)) + self.controller.setSizePolicy( + QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, + QtGui.QSizePolicy.Maximum)) + self.controllerLayout = QtGui.QVBoxLayout(self.controller) + self.controllerLayout.setSpacing(0) + self.controllerLayout.setMargin(0) + # Controller list view + self.previewListWidget = SlideList(self) + self.previewListWidget.setColumnCount(1) + self.previewListWidget.horizontalHeader().setVisible(False) + self.previewListWidget.setColumnWidth(0, self.controller.width()) + self.previewListWidget.isLive = self.isLive + self.previewListWidget.setObjectName(u'PreviewListWidget') + self.previewListWidget.setSelectionBehavior( + QtGui.QAbstractItemView.SelectRows) + self.previewListWidget.setSelectionMode( + QtGui.QAbstractItemView.SingleSelection) + self.previewListWidget.setEditTriggers( + QtGui.QAbstractItemView.NoEditTriggers) + self.previewListWidget.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) + self.previewListWidget.setAlternatingRowColors(True) + self.controllerLayout.addWidget(self.previewListWidget) + # Build the full toolbar + self.toolbar = OpenLPToolbar(self) + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizeToolbarPolicy.setHorizontalStretch(0) + sizeToolbarPolicy.setVerticalStretch(0) + sizeToolbarPolicy.setHeightForWidth( + self.toolbar.sizePolicy().hasHeightForWidth()) + self.toolbar.setSizePolicy(sizeToolbarPolicy) + self.previousItem = self.toolbar.addToolbarButton( + translate('OpenLP.SlideController', 'Previous Slide'), + u':/slides/slide_previous.png', + translate('OpenLP.SlideController', 'Move to previous'), + self.onSlideSelectedPrevious, + shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.nextItem = self.toolbar.addToolbarButton( + translate('OpenLP.SlideController', 'Next Slide'), + u':/slides/slide_next.png', + translate('OpenLP.SlideController', 'Move to next'), + self.onSlideSelectedNext, + shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.toolbar.addToolbarSeparator(u'Close Separator') + if self.isLive: + self.hideMenu = QtGui.QToolButton(self.toolbar) + self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) + self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) + self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) + self.hideMenu.setMenu(QtGui.QMenu( + translate('OpenLP.SlideController', 'Hide'), self.toolbar)) + self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', + [QtCore.Qt.Key_Period], self.onBlankDisplay, + u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) + self.blankScreen.setText( + translate('OpenLP.SlideController', 'Blank Screen')) + self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', + [QtGui.QKeySequence(u'T')], self.onThemeDisplay, + u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) + self.themeScreen.setText( + translate('OpenLP.SlideController', 'Blank to Theme')) + self.desktopScreen = shortcut_action(self.hideMenu, + u'desktopScreen', [QtGui.QKeySequence(u'D')], + self.onHideDisplay, u':/slides/slide_desktop.png', False, + UiStrings().LiveToolbar) + self.desktopScreen.setText( + translate('OpenLP.SlideController', 'Show Desktop')) + self.hideMenu.setDefaultAction(self.blankScreen) + self.hideMenu.menu().addAction(self.blankScreen) + self.hideMenu.menu().addAction(self.themeScreen) + self.hideMenu.menu().addAction(self.desktopScreen) + self.toolbar.addToolbarSeparator(u'Loop Separator') + startLoop = self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Start Loop', u':/media/media_time.png', + translate('OpenLP.SlideController', 'Start continuous loop'), + self.onStartLoop) + action_list = ActionList.get_instance() + action_list.add_action(startLoop, UiStrings().LiveToolbar) + stopLoop = self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Stop Loop', u':/media/media_stop.png', + translate('OpenLP.SlideController', 'Stop continuous loop'), + self.onStopLoop) + action_list.add_action(stopLoop, UiStrings().LiveToolbar) + self.toogleLoop = shortcut_action(self, u'toogleLoop', + [QtGui.QKeySequence(u'L')], self.onToggleLoop, + category=UiStrings().LiveToolbar) + self.toogleLoop.setText(translate('OpenLP.SlideController', + 'Start/Stop continuous loop')) + self.addAction(self.toogleLoop) + self.delaySpinBox = QtGui.QSpinBox() + self.delaySpinBox.setRange(1, 180) + self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) + self.delaySpinBox.setSuffix(UiStrings().Seconds) + self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', + 'Delay between slides in seconds')) + else: + self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Go Live', u':/general/general_live.png', + translate('OpenLP.SlideController', 'Move to live'), + self.onGoLive) + self.toolbar.addToolbarSeparator(u'Close Separator') + self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Edit Song', u':/general/general_edit.png', + translate('OpenLP.SlideController', + 'Edit and reload song preview'), + self.onEditSong) + self.controllerLayout.addWidget(self.toolbar) + # Build a Media ToolBar + self.mediabar = OpenLPToolbar(self) + self.mediabar.addToolbarButton( + u'Media Start', u':/slides/media_playback_start.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaPlay) + self.mediabar.addToolbarButton( + u'Media Pause', u':/slides/media_playback_pause.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaPause) + self.mediabar.addToolbarButton( + u'Media Stop', u':/slides/media_playback_stop.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaStop) + if self.isLive: + # Build the Song Toolbar + self.songMenu = QtGui.QToolButton(self.toolbar) + self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) + self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) + self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) + self.songMenu.setMenu(QtGui.QMenu( + translate('OpenLP.SlideController', 'Go To'), self.toolbar)) + self.toolbar.makeWidgetsInvisible([u'Song Menu']) + # Build the volumeSlider. + self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) + self.volumeSlider.setTickInterval(1) + self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) + self.volumeSlider.setMinimum(0) + self.volumeSlider.setMaximum(10) + else: + # Build the seekSlider. + self.seekSlider = Phonon.SeekSlider() + self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.seekSlider.setObjectName(u'seekSlider') + self.mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider) + self.volumeSlider = Phonon.VolumeSlider() + self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.volumeSlider.setObjectName(u'volumeSlider') + self.mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) + self.controllerLayout.addWidget(self.mediabar) + # Screen preview area + self.previewFrame = QtGui.QFrame(self.splitter) + self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio)) + self.previewFrame.setMinimumHeight(100) + self.previewFrame.setSizePolicy(QtGui.QSizePolicy( + QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored, + QtGui.QSizePolicy.Label)) + self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken) + self.previewFrame.setObjectName(u'PreviewFrame') + self.grid = QtGui.QGridLayout(self.previewFrame) + self.grid.setMargin(8) + self.grid.setObjectName(u'grid') + self.slideLayout = QtGui.QVBoxLayout() + self.slideLayout.setSpacing(0) + self.slideLayout.setMargin(0) + self.slideLayout.setObjectName(u'SlideLayout') + if not self.isLive: + self.mediaObject = Phonon.MediaObject(self) + self.video = Phonon.VideoWidget() + self.video.setVisible(False) + self.audio = Phonon.AudioOutput(Phonon.VideoCategory, + self.mediaObject) + Phonon.createPath(self.mediaObject, self.video) + Phonon.createPath(self.mediaObject, self.audio) + self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) + self.slideLayout.insertWidget(0, self.video) + # Actual preview screen + self.slidePreview = QtGui.QLabel(self) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.slidePreview.sizePolicy().hasHeightForWidth()) + self.slidePreview.setSizePolicy(sizePolicy) + self.slidePreview.setFrameShape(QtGui.QFrame.Box) + self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) + self.slidePreview.setLineWidth(1) + self.slidePreview.setScaledContents(True) + self.slidePreview.setObjectName(u'SlidePreview') + self.slideLayout.insertWidget(0, self.slidePreview) + self.grid.addLayout(self.slideLayout, 0, 0, 1, 1) + # Signals + QtCore.QObject.connect(self.previewListWidget, + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) + if self.isLive: + QtCore.QObject.connect(self.volumeSlider, + QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), + self.receiveSpinDelay) + self.toolbar.makeWidgetsInvisible(self.loopList) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + else: + QtCore.QObject.connect(self.previewListWidget, + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), + self.onGoLiveClick) + self.toolbar.makeWidgetsInvisible(self.songEditList) + self.mediabar.setVisible(False) + if self.isLive: + self.setLiveHotkeys(self) + self.__addActionsToWidget(self.previewListWidget) + else: + self.setPreviewHotkeys() + self.previewListWidget.addActions( + [self.nextItem, + self.previousItem]) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), + self.onStopLoop) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_first' % self.typePrefix), + self.onSlideSelectedFirst) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), + self.onSlideSelectedNext) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), + self.onSlideSelectedPrevious) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), + self.onSlideSelectedLast) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), + self.onSlideChange) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), + self.onSlideSelectedIndex) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), + self.onSlideBlank) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), + self.onSlideUnblank) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), + self.onTextRequest) + + def setPreviewHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemPreview') + self.nextItem.setObjectName(u'nextItemPreview') + action_list = ActionList.get_instance() + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) + + def setLiveHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemLive') + self.nextItem.setObjectName(u'nextItemLive') + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings().LiveToolbar, CategoryOrder.standardToolbar) + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) + self.previousService = shortcut_action(parent, u'previousService', + [QtCore.Qt.Key_Left], self.servicePrevious, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.previousService.setText( + translate('OpenLP.SlideController', 'Previous Service')) + self.nextService = shortcut_action(parent, 'nextService', + [QtCore.Qt.Key_Right], self.serviceNext, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.nextService.setText( + translate('OpenLP.SlideController', 'Next Service')) + self.escapeItem = shortcut_action(parent, 'escapeItem', + [QtCore.Qt.Key_Escape], self.liveEscape, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.escapeItem.setText( + translate('OpenLP.SlideController', 'Escape Item')) + + def liveEscape(self): + self.display.setVisible(False) + self.display.videoStop() + + def servicePrevious(self): + Receiver.send_message('servicemanager_previous_item') + + def serviceNext(self): + Receiver.send_message('servicemanager_next_item') + + def screenSizeChanged(self): + """ + Settings dialog has changed the screen size of adjust output and + screen previews. + """ + # rebuild display as screen size changed + self.display = MainDisplay(self, self.image_manager, self.isLive) + self.display.alertTab = self.alertTab + self.display.setup() + if self.isLive: + self.__addActionsToWidget(self.display) + # The SlidePreview's ratio. + self.ratio = float(self.screens.current[u'size'].width()) / \ + float(self.screens.current[u'size'].height()) + self.previewSizeChanged() + if self.serviceItem: + self.refreshServiceItem() + + def __addActionsToWidget(self, widget): + widget.addActions([ + self.previousItem, self.nextItem, + self.previousService, self.nextService, + self.escapeItem]) + + def previewSizeChanged(self): + """ + Takes care of the SlidePreview's size. Is called when one of the the + splitters is moved or when the screen size is changed. Note, that this + method is (also) called frequently from the mainwindow *paintEvent*. + """ + if self.ratio < float(self.previewFrame.width()) / float( + self.previewFrame.height()): + # We have to take the height as limit. + max_height = self.previewFrame.height() - self.grid.margin() * 2 + self.slidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, + max_height)) + else: + # We have to take the width as limit. + max_width = self.previewFrame.width() - self.grid.margin() * 2 + self.slidePreview.setFixedSize(QtCore.QSize(max_width, + max_width / self.ratio)) + # Make sure that the frames have the correct size. + self.previewListWidget.setColumnWidth(0, + self.previewListWidget.viewport().size().width()) + if self.serviceItem: + # Sort out songs, bibles, etc. + if self.serviceItem.is_text(): + self.previewListWidget.resizeRowsToContents() + else: + # Sort out image heights. + width = self.parent.controlSplitter.sizes()[self.split] + for framenumber in range(len(self.serviceItem.get_frames())): + self.previewListWidget.setRowHeight( + framenumber, width / self.ratio) + + def onSongBarHandler(self): + request = unicode(self.sender().text()) + slideno = self.slideList[request] + self.__updatePreviewSelection(slideno) + self.slideSelected() + + def receiveSpinDelay(self, value): + """ + Adjusts the value of the ``delaySpinBox`` to the given one. + """ + self.delaySpinBox.setValue(int(value)) + + def enableToolBar(self, item): + """ + Allows the toolbars to be reconfigured based on Controller Type + and ServiceItem Type + """ + if self.isLive: + self.enableLiveToolBar(item) + else: + self.enablePreviewToolBar(item) + + def enableLiveToolBar(self, item): + """ + Allows the live toolbar to be customised + """ + self.toolbar.setVisible(True) + self.mediabar.setVisible(False) + self.toolbar.makeWidgetsInvisible([u'Song Menu']) + self.toolbar.makeWidgetsInvisible(self.loopList) + self.toogleLoop.setEnabled(False) + self.toolbar.actions[u'Start Loop'].setEnabled(False) + self.toolbar.actions[u'Stop Loop'].setEnabled(False) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + if item.is_text(): + if QtCore.QSettings().value( + self.parent.songsSettingsSection + u'/display songbar', + QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: + self.toolbar.makeWidgetsVisible([u'Song Menu']) + if item.is_capable(ItemCapabilities.AllowsLoop) and \ + len(item.get_frames()) > 1: + self.toolbar.makeWidgetsVisible(self.loopList) + self.toogleLoop.setEnabled(True) + self.toolbar.actions[u'Start Loop'].setEnabled(True) + self.toolbar.actions[u'Stop Loop'].setEnabled(True) + if item.is_media(): + self.toolbar.setVisible(False) + self.mediabar.setVisible(True) + + def enablePreviewToolBar(self, item): + """ + Allows the Preview toolbar to be customised + """ + self.toolbar.setVisible(True) + self.mediabar.setVisible(False) + self.toolbar.makeWidgetsInvisible(self.songEditList) + if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: + self.toolbar.makeWidgetsVisible(self.songEditList) + elif item.is_media(): + self.toolbar.setVisible(False) + self.mediabar.setVisible(True) + self.volumeSlider.setAudioOutput(self.audio) + + def refreshServiceItem(self): + """ + Method to update the service item if the screen has changed + """ + log.debug(u'refreshServiceItem live = %s' % self.isLive) + if self.serviceItem.is_text() or self.serviceItem.is_image(): + item = self.serviceItem + item.render() + self._processItem(item, self.selectedRow) + + def addServiceItem(self, item): + """ + Method to install the service item into the controller + Called by plugins + """ + log.debug(u'addServiceItem live = %s' % self.isLive) + item.render() + slideno = 0 + if self.songEdit: + slideno = self.selectedRow + self.songEdit = False + self._processItem(item, slideno) + + def replaceServiceManagerItem(self, item): + """ + Replacement item following a remote edit + """ + if item.__eq__(self.serviceItem): + self._processItem(item, self.previewListWidget.currentRow()) + + def addServiceManagerItem(self, item, slideno): + """ + Method to install the service item into the controller and + request the correct toolbar for the plugin. + Called by ServiceManager + """ + log.debug(u'addServiceManagerItem live = %s' % self.isLive) + # If no valid slide number is specified we take the first one. + if slideno == -1: + slideno = 0 + # If service item is the same as the current on only change slide + if item.__eq__(self.serviceItem): + self.__checkUpdateSelectedSlide(slideno) + self.slideSelected() + return + self._processItem(item, slideno) + + def _processItem(self, serviceItem, slideno): + """ + Loads a ServiceItem into the system from ServiceManager + Display the slide number passed + """ + log.debug(u'processManagerItem live = %s' % self.isLive) + self.onStopLoop() + old_item = self.serviceItem + self.serviceItem = serviceItem + if old_item and self.isLive and old_item.is_capable( + ItemCapabilities.ProvidesOwnDisplay): + self._resetBlank() + Receiver.send_message(u'%s_start' % serviceItem.name.lower(), + [serviceItem, self.isLive, self.hideMode(), slideno]) + self.slideList = {} + width = self.parent.controlSplitter.sizes()[self.split] + self.previewListWidget.clear() + self.previewListWidget.setRowCount(0) + self.previewListWidget.setColumnWidth(0, width) + if self.isLive: + self.songMenu.menu().clear() + row = 0 + text = [] + for framenumber, frame in enumerate(self.serviceItem.get_frames()): + self.previewListWidget.setRowCount( + self.previewListWidget.rowCount() + 1) + item = QtGui.QTableWidgetItem() + slideHeight = 0 + if self.serviceItem.is_text(): + if frame[u'verseTag']: + # These tags are already translated. + verse_def = frame[u'verseTag'] + verse_def = u'%s%s' % (verse_def[0], verse_def[1:]) + two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:]) + row = two_line_def + if self.isLive: + if verse_def not in self.slideList: + self.slideList[verse_def] = framenumber + self.songMenu.menu().addAction(verse_def, + self.onSongBarHandler) + else: + row += 1 + item.setText(frame[u'text']) + else: + label = QtGui.QLabel() + label.setMargin(4) + label.setScaledContents(True) + if self.serviceItem.is_command(): + image = resize_image(frame[u'image'], + self.parent.renderer.width, + self.parent.renderer.height) + else: + # If current slide set background to image + if framenumber == slideno: + self.serviceItem.bg_image_bytes = \ + self.image_manager.get_image_bytes(frame[u'title']) + image = self.image_manager.get_image(frame[u'title']) + label.setPixmap(QtGui.QPixmap.fromImage(image)) + self.previewListWidget.setCellWidget(framenumber, 0, label) + slideHeight = width * self.parent.renderer.screen_ratio + row += 1 + text.append(unicode(row)) + self.previewListWidget.setItem(framenumber, 0, item) + if slideHeight != 0: + self.previewListWidget.setRowHeight(framenumber, slideHeight) + self.previewListWidget.setVerticalHeaderLabels(text) + if self.serviceItem.is_text(): + self.previewListWidget.resizeRowsToContents() + self.previewListWidget.setColumnWidth(0, + self.previewListWidget.viewport().size().width()) + self.__updatePreviewSelection(slideno) + self.enableToolBar(serviceItem) + # Pass to display for viewing. + # Postpone image build, we need to do this later to avoid the theme + # flashing on the screen + if not self.serviceItem.is_image(): + self.display.buildHtml(self.serviceItem) + if serviceItem.is_media(): + self.onMediaStart(serviceItem) + self.slideSelected(True) + self.previewListWidget.setFocus() + if old_item: + # Close the old item after the new one is opened + # This avoids the service theme/desktop flashing on screen + # However opening a new item of the same type will automatically + # close the previous, so make sure we don't close the new one. + if old_item.is_command() and not serviceItem.is_command(): + Receiver.send_message(u'%s_stop' % + old_item.name.lower(), [old_item, self.isLive]) + if old_item.is_media() and not serviceItem.is_media(): + self.onMediaClose() + Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, + [serviceItem]) + + def __updatePreviewSelection(self, slideno): + """ + Utility method to update the selected slide in the list. + """ + if slideno > self.previewListWidget.rowCount(): + self.previewListWidget.selectRow( + self.previewListWidget.rowCount() - 1) + else: + self.__checkUpdateSelectedSlide(slideno) + + def onTextRequest(self): + """ + Return the text for the current item in controller + """ + data = [] + if self.serviceItem: + for framenumber, frame in enumerate(self.serviceItem.get_frames()): + dataItem = {} + if self.serviceItem.is_text(): + dataItem[u'tag'] = unicode(frame[u'verseTag']) + dataItem[u'text'] = unicode(frame[u'html']) + else: + dataItem[u'tag'] = unicode(framenumber) + dataItem[u'text'] = u'' + dataItem[u'selected'] = \ + (self.previewListWidget.currentRow() == framenumber) + data.append(dataItem) + Receiver.send_message(u'slidecontroller_%s_text_response' + % self.typePrefix, data) + + # Screen event methods + def onSlideSelectedFirst(self): + """ + Go to the first slide. + """ + if not self.serviceItem: + return + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + self.updatePreview() + else: + self.previewListWidget.selectRow(0) + self.slideSelected() + + def onSlideSelectedIndex(self, message): + """ + Go to the requested slide + """ + index = int(message[0]) + if not self.serviceItem: + return + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, index]) + self.updatePreview() + else: + self.__checkUpdateSelectedSlide(index) + self.slideSelected() + + def mainDisplaySetBackground(self): + """ + Allow the main display to blank the main display at startup time + """ + log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) + display_type = QtCore.QSettings().value( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'')).toString() + if not self.display.primary: + # Order done to handle initial conversion + if display_type == u'themed': + self.onThemeDisplay(True) + elif display_type == u'hidden': + self.onHideDisplay(True) + else: + self.onBlankDisplay(True) + + def onSlideBlank(self): + """ + Handle the slidecontroller blank event + """ + self.onBlankDisplay(True) + + def onSlideUnblank(self): + """ + Handle the slidecontroller unblank event + """ + self.onBlankDisplay(False) + + def onBlankDisplay(self, checked=None): + """ + Handle the blank screen button actions + """ + if checked is None: + checked = self.blankScreen.isChecked() + log.debug(u'onBlankDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.blankScreen) + self.blankScreen.setChecked(checked) + self.themeScreen.setChecked(False) + self.desktopScreen.setChecked(False) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'blanked')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.blankPlugin() + self.updatePreview() + + def onThemeDisplay(self, checked=None): + """ + Handle the Theme screen button + """ + if checked is None: + checked = self.themeScreen.isChecked() + log.debug(u'onThemeDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.themeScreen) + self.blankScreen.setChecked(False) + self.themeScreen.setChecked(checked) + self.desktopScreen.setChecked(False) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'themed')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.blankPlugin() + self.updatePreview() + + def onHideDisplay(self, checked=None): + """ + Handle the Hide screen button + """ + if checked is None: + checked = self.desktopScreen.isChecked() + log.debug(u'onHideDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.desktopScreen) + self.blankScreen.setChecked(False) + self.themeScreen.setChecked(False) + self.desktopScreen.setChecked(checked) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'hidden')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.hidePlugin(checked) + self.updatePreview() + + def blankPlugin(self): + """ + Blank/Hide the display screen within a plugin if required. + """ + hide_mode = self.hideMode() + log.debug(u'blankPlugin %s ', hide_mode) + if self.serviceItem is not None: + if hide_mode: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_hide', hide_mode) + Receiver.send_message(u'%s_blank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, hide_mode]) + else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') + Receiver.send_message(u'%s_unblank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + + def hidePlugin(self, hide): + """ + Tell the plugin to hide the display screen. + """ + log.debug(u'hidePlugin %s ', hide) + if self.serviceItem is not None: + if hide: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + Receiver.send_message(u'%s_hide' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') + Receiver.send_message(u'%s_unblank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + + def onSlideSelected(self, start=False): + """ + Slide selected in controller + """ + self.slideSelected() + + def slideSelected(self, start=False): + """ + Generate the preview when you click on a slide. + if this is the Live Controller also display on the screen + """ + row = self.previewListWidget.currentRow() + self.selectedRow = 0 + if row > -1 and row < self.previewListWidget.rowCount(): + if self.serviceItem.is_command(): + if self.isLive and not start: + Receiver.send_message( + u'%s_slide' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, row]) + self.updatePreview() + else: + toDisplay = self.serviceItem.get_rendered_frame(row) + if self.serviceItem.is_text(): + frame = self.display.text(toDisplay) + else: + if start: + self.display.buildHtml(self.serviceItem, toDisplay) + frame = self.display.preview() + else: + frame = self.display.image(toDisplay) + # reset the store used to display first image + self.serviceItem.bg_image_bytes = None + self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.selectedRow = row + self.__checkUpdateSelectedSlide(row) + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, + row) + + def onSlideChange(self, row): + """ + The slide has been changed. Update the slidecontroller accordingly + """ + self.__checkUpdateSelectedSlide(row) + self.updatePreview() + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, + row) + + def updatePreview(self): + """ + This updates the preview frame, for example after changing a slide or + using *Blank to Theme*. + """ + log.debug(u'updatePreview %s ' % self.screens.current[u'primary']) + if not self.screens.current[u'primary'] and self.serviceItem and \ + self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): + # Grab now, but try again in a couple of seconds if slide change + # is slow + QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) + QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) + else: + self.slidePreview.setPixmap( + QtGui.QPixmap.fromImage(self.display.preview())) + + def grabMainDisplay(self): + """ + Creates an image of the current screen and updates the preview frame. + """ + winid = QtGui.QApplication.desktop().winId() + rect = self.screens.current[u'size'] + winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), + rect.y(), rect.width(), rect.height()) + self.slidePreview.setPixmap(winimg) + def onSlideSelectedNext(self): + """ + Go to the next slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command() and self.isLive: + self.updatePreview() + else: + row = self.previewListWidget.currentRow() + 1 + if row == self.previewListWidget.rowCount(): + if QtCore.QSettings().value(u'generalSettingsSection/enable slide loop', QtCore.QVariant(True)).toBool(): + row = 0 + else: + Receiver.send_message('servicemanager_next_item') + return + self.__checkUpdateSelectedSlide(row) + self.slideSelected() + def onSlideSelectedPrevious(self): + """ + Go to the previous slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command() and self.isLive: + self.updatePreview() + else: + row = self.previewListWidget.currentRow() - 1 + if row == -1: + if QtCore.QSettings().value(u'generalSettingsSection/enable slide loop', QtCore.QVariant(True)).toBool(): + row = self.previewListWidget.rowCount() - 1 + else: + row = 0 + self.__checkUpdateSelectedSlide(row) + self.slideSelected() + + def __checkUpdateSelectedSlide(self, row): + if row + 1 < self.previewListWidget.rowCount(): + self.previewListWidget.scrollToItem( + self.previewListWidget.item(row + 1, 0)) + self.previewListWidget.selectRow(row) + + def onSlideSelectedLast(self): + """ + Go to the last slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_last' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command(): + self.updatePreview() + else: + self.previewListWidget.selectRow( + self.previewListWidget.rowCount() - 1) + self.slideSelected() + + def onToggleLoop(self, toggled): + """ + Toggles the loop state. + """ + if self.toolbar.actions[u'Start Loop'].isVisible(): + self.onStartLoop() + else: + self.onStopLoop() + + def onStartLoop(self): + """ + Start the timer loop running and store the timer id + """ + if self.previewListWidget.rowCount() > 1: + self.timer_id = self.startTimer( + int(self.delaySpinBox.value()) * 1000) + self.toolbar.actions[u'Stop Loop'].setVisible(True) + self.toolbar.actions[u'Start Loop'].setVisible(False) + + def onStopLoop(self): + """ + Stop the timer loop running + """ + if self.timer_id != 0: + self.killTimer(self.timer_id) + self.timer_id = 0 + self.toolbar.actions[u'Start Loop'].setVisible(True) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + + def timerEvent(self, event): + """ + If the timer event is for this window select next slide + """ + if event.timerId() == self.timer_id: + self.onSlideSelectedNext() + + def onEditSong(self): + """ + From the preview display requires the service Item to be editied + """ + self.songEdit = True + Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), + u'P:%s' % self.serviceItem.edit_id) + + def onGoLiveClick(self): + """ + triggered by clicking the Preview slide items + """ + if QtCore.QSettings().value(u'advanced/double click live', + QtCore.QVariant(False)).toBool(): + self.onGoLive() + + def onGoLive(self): + """ + If preview copy slide item to live + """ + row = self.previewListWidget.currentRow() + if row > -1 and row < self.previewListWidget.rowCount(): + if self.serviceItem.from_service: + Receiver.send_message('servicemanager_preview_live', + u'%s:%s' % (self.serviceItem._uuid, row)) + else: + self.parent.liveController.addServiceManagerItem( + self.serviceItem, row) + + def onMediaStart(self, item): + """ + Respond to the arrival of a media service item + """ + log.debug(u'SlideController onMediaStart') + file = os.path.join(item.get_frame_path(), item.get_frame_title()) + if self.isLive: + self.display.video(file, self.volume) + self.volumeSlider.setValue(self.volume) + else: + self.mediaObject.stop() + self.mediaObject.clearQueue() + self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) + self.seekSlider.setMediaObject(self.mediaObject) + self.seekSlider.show() + self.onMediaPlay() + + def mediaVolume(self): + """ + Respond to the release of Volume Slider + """ + log.debug(u'SlideController mediaVolume') + self.volume = self.volumeSlider.value() + self.display.videoVolume(self.volume) + + def onMediaPause(self): + """ + Respond to the Pause from the media Toolbar + """ + log.debug(u'SlideController onMediaPause') + if self.isLive: + self.display.videoPause() + else: + self.mediaObject.pause() + + def onMediaPlay(self): + """ + Respond to the Play from the media Toolbar + """ + log.debug(u'SlideController onMediaPlay') + if self.isLive: + self.display.videoPlay() + else: + self.slidePreview.hide() + self.video.show() + self.mediaObject.play() + + def onMediaStop(self): + """ + Respond to the Stop from the media Toolbar + """ + log.debug(u'SlideController onMediaStop') + if self.isLive: + self.display.videoStop() + else: + self.mediaObject.stop() + self.video.hide() + self.slidePreview.clear() + self.slidePreview.show() + + def onMediaClose(self): + """ + Respond to a request to close the Video + """ + log.debug(u'SlideController onMediaStop') + if self.isLive: + self.display.resetVideo() + else: + self.mediaObject.stop() + self.mediaObject.clearQueue() + self.video.hide() + self.slidePreview.clear() + self.slidePreview.show() + + def _resetBlank(self): + """ + Used by command items which provide their own displays to reset the + screen hide attributes + """ + hide_mode = self.hideMode() + if hide_mode == HideMode.Blank: + self.onBlankDisplay(True) + elif hide_mode == HideMode.Theme: + self.onThemeDisplay(True) + elif hide_mode == HideMode.Screen: + self.onHideDisplay(True) + else: + self.hidePlugin(False) + + def hideMode(self): + """ + Determine what the hide mode should be according to the blank button + """ + if not self.isLive: + return None + elif self.blankScreen.isChecked(): + return HideMode.Blank + elif self.themeScreen.isChecked(): + return HideMode.Theme + elif self.desktopScreen.isChecked(): + return HideMode.Screen + else: + return None From 541feef8ea07185a9ffc0031dbe1b6cd41daf15d Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Tue, 24 May 2011 07:23:55 -0400 Subject: [PATCH 06/12] Another try at the code for enabling loop through a checkbox, seems to work as far as i see --- openlp/core/ui/slidecontroller.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4da75ebb6..722905c0b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -928,6 +928,7 @@ class SlideController(QtGui.QWidget): """ Go to the next slide. """ + loopcheck = QtCore.QSettings().value( self.parent.generalSettingsSection + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool) if not self.serviceItem: return Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), @@ -937,10 +938,9 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() + 1 if row == self.previewListWidget.rowCount(): - if QtCore.QSettings().value(u'generalSettingsSection/enable slide loop', QtCore.QVariant(True)).toBool(): + if loopcheck == True: row = 0 else: - Receiver.send_message('servicemanager_next_item') return self.__checkUpdateSelectedSlide(row) self.slideSelected() @@ -948,6 +948,7 @@ class SlideController(QtGui.QWidget): """ Go to the previous slide. """ + loopcheck =QtCore.QSettings().value( self.parent.generalSettingsSection + u'enable slide loop', QtCore.QVariant(True).toBool) if not self.serviceItem: return Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), @@ -957,10 +958,10 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() - 1 if row == -1: - if QtCore.QSettings().value(u'generalSettingsSection/enable slide loop', QtCore.QVariant(True)).toBool(): + if loopcheck == True: row = self.previewListWidget.rowCount() - 1 else: - row = 0 + return self.__checkUpdateSelectedSlide(row) self.slideSelected() From b92b733828595284fc61529ff9d076d10381e50e Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Tue, 24 May 2011 18:32:30 -0400 Subject: [PATCH 07/12] corrections and enable slide loop updates --- openlp.pyw | 1 - openlp/core/ui/generaltab.py | 780 +++++----- openlp/core/ui/slidecontroller.py | 2314 +++++++++++++++-------------- 3 files changed, 1548 insertions(+), 1547 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index f3b380c7a..76d334bae 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -257,4 +257,3 @@ if __name__ == u'__main__': Instantiate and run the application. """ main() - diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 8c9336656..95e8dda4e 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -1,390 +1,390 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### -import logging - -from PyQt4 import QtCore, QtGui - -from openlp.core.lib import SettingsTab, Receiver, translate -from openlp.core.lib.ui import UiStrings -from openlp.core.ui import ScreenList - -log = logging.getLogger(__name__) - -class GeneralTab(SettingsTab): - """ - GeneralTab is the general settings tab in the settings dialog. - """ - def __init__(self, parent): - """ - Initialise the general settings tab - """ - self.screens = ScreenList.get_instance() - self.icon_path = u':/icon/openlp-logo-16x16.png' - generalTranslated = translate('GeneralTab', 'General') - SettingsTab.__init__(self, parent, u'General', generalTranslated) - - def setupUi(self): - """ - Create the user interface for the general settings tab - """ - self.setObjectName(u'GeneralTab') - SettingsTab.setupUi(self) - self.monitorGroupBox = QtGui.QGroupBox(self.leftColumn) - self.monitorGroupBox.setObjectName(u'monitorGroupBox') - self.monitorLayout = QtGui.QFormLayout(self.monitorGroupBox) - self.monitorLayout.setObjectName(u'monitorLayout') - self.monitorLabel = QtGui.QLabel(self.monitorGroupBox) - self.monitorLabel.setObjectName(u'monitorLabel') - self.monitorLayout.addRow(self.monitorLabel) - self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox) - self.monitorComboBox.setObjectName(u'monitorComboBox') - self.monitorLayout.addRow(self.monitorComboBox) - self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox) - self.displayOnMonitorCheck.setObjectName(u'monitorComboBox') - self.monitorLayout.addRow(self.displayOnMonitorCheck) - self.leftLayout.addWidget(self.monitorGroupBox) - self.startupGroupBox = QtGui.QGroupBox(self.leftColumn) - self.startupGroupBox.setObjectName(u'startupGroupBox') - self.startupLayout = QtGui.QVBoxLayout(self.startupGroupBox) - self.startupLayout.setObjectName(u'startupLayout') - self.warningCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.warningCheckBox.setObjectName(u'warningCheckBox') - self.startupLayout.addWidget(self.warningCheckBox) - self.autoOpenCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.autoOpenCheckBox.setObjectName(u'autoOpenCheckBox') - self.startupLayout.addWidget(self.autoOpenCheckBox) - self.showSplashCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.showSplashCheckBox.setObjectName(u'showSplashCheckBox') - self.startupLayout.addWidget(self.showSplashCheckBox) - self.checkForUpdatesCheckBox = QtGui.QCheckBox(self.startupGroupBox) - self.checkForUpdatesCheckBox.setObjectName(u'checkForUpdatesCheckBox') - self.startupLayout.addWidget(self.checkForUpdatesCheckBox) - self.leftLayout.addWidget(self.startupGroupBox) - self.settingsGroupBox = QtGui.QGroupBox(self.leftColumn) - self.settingsGroupBox.setObjectName(u'settingsGroupBox') - self.settingsLayout = QtGui.QFormLayout(self.settingsGroupBox) - self.settingsLayout.setObjectName(u'settingsLayout') - self.saveCheckServiceCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.saveCheckServiceCheckBox.setObjectName(u'saveCheckServiceCheckBox') - self.settingsLayout.addRow(self.saveCheckServiceCheckBox) - self.autoUnblankCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.autoUnblankCheckBox.setObjectName(u'autoUnblankCheckBox') - self.settingsLayout.addRow(self.autoUnblankCheckBox) - self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) - self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') - self.settingsLayout.addRow(self.autoPreviewCheckBox) - self.enableLoopCheckbox = QtGui.QCheckBox(self.settingsGroupBox) - self.enableLoopCheckbox.setObjectName(u'enableLoopCheckbox') - self.settingsLayout.addRow(self.enableLoopCheckbox) - # Moved here from image tab - self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) - self.timeoutLabel.setObjectName(u'timeoutLabel') - self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) - self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') - self.timeoutSpinBox.setRange(1, 180) - self.settingsLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) - self.leftLayout.addWidget(self.settingsGroupBox) - self.leftLayout.addStretch() - self.ccliGroupBox = QtGui.QGroupBox(self.rightColumn) - self.ccliGroupBox.setObjectName(u'ccliGroupBox') - self.ccliLayout = QtGui.QFormLayout(self.ccliGroupBox) - self.ccliLayout.setObjectName(u'ccliLayout') - self.numberLabel = QtGui.QLabel(self.ccliGroupBox) - self.numberLabel.setObjectName(u'numberLabel') - self.numberEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.numberEdit.setValidator(QtGui.QIntValidator()) - self.numberEdit.setObjectName(u'numberEdit') - self.ccliLayout.addRow(self.numberLabel, self.numberEdit) - self.usernameLabel = QtGui.QLabel(self.ccliGroupBox) - self.usernameLabel.setObjectName(u'usernameLabel') - self.usernameEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.usernameEdit.setObjectName(u'usernameEdit') - self.ccliLayout.addRow(self.usernameLabel, self.usernameEdit) - self.passwordLabel = QtGui.QLabel(self.ccliGroupBox) - self.passwordLabel.setObjectName(u'passwordLabel') - self.passwordEdit = QtGui.QLineEdit(self.ccliGroupBox) - self.passwordEdit.setEchoMode(QtGui.QLineEdit.Password) - self.passwordEdit.setObjectName(u'passwordEdit') - self.ccliLayout.addRow(self.passwordLabel, self.passwordEdit) - self.rightLayout.addWidget(self.ccliGroupBox) - # Moved here from display tab - self.displayGroupBox = QtGui.QGroupBox(self.rightColumn) - self.displayGroupBox.setObjectName(u'displayGroupBox') - self.displayLayout = QtGui.QGridLayout(self.displayGroupBox) - self.displayLayout.setObjectName(u'displayLayout') - self.overrideCheckBox = QtGui.QCheckBox(self.displayGroupBox) - self.overrideCheckBox.setObjectName(u'overrideCheckBox') - self.displayLayout.addWidget(self.overrideCheckBox, 2, 0, 1, 4) - self.rightLayout.addWidget(self.displayGroupBox) - # Custom position - self.customXLabel = QtGui.QLabel(self.displayGroupBox) - self.customXLabel.setObjectName(u'customXLabel') - self.displayLayout.addWidget(self.customXLabel, 3, 0) - self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customXValueEdit.setObjectName(u'customXValueEdit') - self.customXValueEdit.setRange(-9999, 9999) - self.displayLayout.addWidget(self.customXValueEdit, 4, 0) - self.customYLabel = QtGui.QLabel(self.displayGroupBox) - self.customYLabel.setObjectName(u'customYLabel') - self.displayLayout.addWidget(self.customYLabel, 3, 1) - self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customYValueEdit.setObjectName(u'customYValueEdit') - self.customYValueEdit.setRange(-9999, 9999) - self.displayLayout.addWidget(self.customYValueEdit, 4, 1) - self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) - self.customWidthLabel.setObjectName(u'customWidthLabel') - self.displayLayout.addWidget(self.customWidthLabel, 3, 2) - self.customWidthValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customWidthValueEdit.setObjectName(u'customWidthValueEdit') - self.customWidthValueEdit.setMaximum(9999) - self.displayLayout.addWidget(self.customWidthValueEdit, 4, 2) - self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) - self.customHeightLabel.setObjectName(u'customHeightLabel') - self.displayLayout.addWidget(self.customHeightLabel, 3, 3) - self.customHeightValueEdit = QtGui.QSpinBox(self.displayGroupBox) - self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') - self.customHeightValueEdit.setMaximum(9999) - self.displayLayout.addWidget(self.customHeightValueEdit, 4, 3) - self.rightLayout.addWidget(self.displayGroupBox) - self.rightLayout.addStretch() - # Signals and slots - QtCore.QObject.connect(self.overrideCheckBox, - QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) - QtCore.QObject.connect(self.customHeightValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customWidthValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customYValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.customXValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) - QtCore.QObject.connect(self.monitorComboBox, - QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDisplayChanged) - # Reload the tab, as the screen resolution/count may have changed. - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'config_screen_changed'), self.load) - # Remove for now - self.usernameLabel.setVisible(False) - self.usernameEdit.setVisible(False) - self.passwordLabel.setVisible(False) - self.passwordEdit.setVisible(False) - - def retranslateUi(self): - """ - Translate the general settings tab to the currently selected language - """ - self.tabTitleVisible = translate('OpenLP.GeneralTab', 'General') - self.monitorGroupBox.setTitle(translate('OpenLP.GeneralTab', - 'Monitors')) - self.monitorLabel.setText(translate('OpenLP.GeneralTab', - 'Select monitor for output display:')) - self.displayOnMonitorCheck.setText( - translate('OpenLP.GeneralTab', 'Display if a single screen')) - self.startupGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Application Startup')) - self.warningCheckBox.setText( - translate('OpenLP.GeneralTab', 'Show blank screen warning')) - self.autoOpenCheckBox.setText(translate('OpenLP.GeneralTab', - 'Automatically open the last service')) - self.showSplashCheckBox.setText( - translate('OpenLP.GeneralTab', 'Show the splash screen')) - self.checkForUpdatesCheckBox.setText( - translate('OpenLP.GeneralTab', 'Check for updates to OpenLP')) - self.settingsGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Application Settings')) - self.saveCheckServiceCheckBox.setText(translate('OpenLP.GeneralTab', - 'Prompt to save before starting a new service')) - self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab', - 'Unblank display when adding new live item')) - self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', - 'Automatically preview next item in service')) - self.enableLoopCheckbox.setText(translate('OpenLP.GeneralTab', - 'enable slide loop')) - self.timeoutLabel.setText(translate('OpenLP.GeneralTab', - 'Slide loop delay:')) - self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) - self.ccliGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'CCLI Details')) - self.numberLabel.setText(UiStrings().CCLINumberLabel) - self.usernameLabel.setText( - translate('OpenLP.GeneralTab', 'SongSelect username:')) - self.passwordLabel.setText( - translate('OpenLP.GeneralTab', 'SongSelect password:')) - # Moved from display tab - self.displayGroupBox.setTitle( - translate('OpenLP.GeneralTab', 'Display Position')) - self.overrideCheckBox.setText(translate('OpenLP.GeneralTab', - 'Override display position')) - self.customXLabel.setText(translate('OpenLP.GeneralTab', 'X')) - self.customYLabel.setText(translate('OpenLP.GeneralTab', 'Y')) - self.customHeightLabel.setText(translate('OpenLP.GeneralTab', 'Height')) - self.customWidthLabel.setText(translate('OpenLP.GeneralTab', 'Width')) - - def load(self): - """ - Load the settings to populate the form - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - self.monitorComboBox.clear() - self.monitorComboBox.addItems(self.screens.get_screen_list()) - monitorNumber = settings.value(u'monitor', - QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] - self.monitorComboBox.setCurrentIndex(monitorNumber) - self.numberEdit.setText(unicode(settings.value( - u'ccli number', QtCore.QVariant(u'')).toString())) - self.usernameEdit.setText(unicode(settings.value( - u'songselect username', QtCore.QVariant(u'')).toString())) - self.passwordEdit.setText(unicode(settings.value( - u'songselect password', QtCore.QVariant(u'')).toString())) - self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt', - QtCore.QVariant(False)).toBool()) - self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', - QtCore.QVariant(False)).toBool()) - self.displayOnMonitorCheck.setChecked(self.screens.display) - self.warningCheckBox.setChecked(settings.value(u'blank warning', - QtCore.QVariant(False)).toBool()) - self.autoOpenCheckBox.setChecked(settings.value(u'auto open', - QtCore.QVariant(False)).toBool()) - self.showSplashCheckBox.setChecked(settings.value(u'show splash', - QtCore.QVariant(True)).toBool()) - self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', - QtCore.QVariant(False)).toBool()) - self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', - QtCore.QVariant(False)).toBool()) - self.enableLoopCheckbox.setChecked(settings.value(u'enable slide loop', - QtCore.QVariant(True)).toBool()) - self.timeoutSpinBox.setValue(settings.value(u'loop delay', - QtCore.QVariant(5)).toInt()[0]) - self.overrideCheckBox.setChecked(settings.value(u'override position', - QtCore.QVariant(False)).toBool()) - self.customXValueEdit.setValue(settings.value(u'x position', - QtCore.QVariant(self.screens.current[u'size'].x())).toInt()[0]) - self.customYValueEdit.setValue(settings.value(u'y position', - QtCore.QVariant(self.screens.current[u'size'].y())).toInt()[0]) - self.customHeightValueEdit.setValue(settings.value(u'height', - QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0]) - self.customWidthValueEdit.setValue(settings.value(u'width', - QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0]) - settings.endGroup() - self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.display_changed = False - - def save(self): - """ - Save the settings from the form - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - settings.setValue(u'monitor', - QtCore.QVariant(self.monitorComboBox.currentIndex())) - settings.setValue(u'display on monitor', - QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) - settings.setValue(u'blank warning', - QtCore.QVariant(self.warningCheckBox.isChecked())) - settings.setValue(u'auto open', - QtCore.QVariant(self.autoOpenCheckBox.isChecked())) - settings.setValue(u'show splash', - QtCore.QVariant(self.showSplashCheckBox.isChecked())) - settings.setValue(u'update check', - QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked())) - settings.setValue(u'save prompt', - QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked())) - settings.setValue(u'auto unblank', - QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) - settings.setValue(u'auto preview', - QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) - settings.setValue(u'enable slide loop', - QtCore.QVariant(self.enableLoopCheckbox.isChecked())) - settings.setValue(u'loop delay', - QtCore.QVariant(self.timeoutSpinBox.value())) - settings.setValue(u'ccli number', - QtCore.QVariant(self.numberEdit.displayText())) - settings.setValue(u'songselect username', - QtCore.QVariant(self.usernameEdit.displayText())) - settings.setValue(u'songselect password', - QtCore.QVariant(self.passwordEdit.displayText())) - settings.setValue(u'x position', - QtCore.QVariant(self.customXValueEdit.value())) - settings.setValue(u'y position', - QtCore.QVariant(self.customYValueEdit.value())) - settings.setValue(u'height', - QtCore.QVariant(self.customHeightValueEdit.value())) - settings.setValue(u'width', - QtCore.QVariant(self.customWidthValueEdit.value())) - settings.setValue(u'override position', - QtCore.QVariant(self.overrideCheckBox.isChecked())) - settings.endGroup() - # On save update the screens as well - self.postSetUp(True) - - def postSetUp(self, postUpdate=False): - """ - Apply settings after settings tab has loaded and most of the - system so must be delayed - """ - Receiver.send_message(u'slidecontroller_live_spin_delay', - self.timeoutSpinBox.value()) - # Do not continue on start up. - if not postUpdate: - return - self.screens.set_current_display(self.monitorComboBox.currentIndex()) - self.screens.display = self.displayOnMonitorCheck.isChecked() - self.screens.override[u'size'] = QtCore.QRect( - self.customXValueEdit.value(), - self.customYValueEdit.value(), - self.customWidthValueEdit.value(), - self.customHeightValueEdit.value()) - if self.overrideCheckBox.isChecked(): - self.screens.set_override_display() - else: - self.screens.reset_current_display() - if self.display_changed: - Receiver.send_message(u'config_screen_changed') - self.display_changed = False - - def onOverrideCheckBoxToggled(self, checked): - """ - Toggle screen state depending on check box state. - - ``checked`` - The state of the check box (boolean). - """ - self.customXValueEdit.setEnabled(checked) - self.customYValueEdit.setEnabled(checked) - self.customHeightValueEdit.setEnabled(checked) - self.customWidthValueEdit.setEnabled(checked) - self.display_changed = True - - def onDisplayChanged(self): - """ - Called when the width, height, x position or y position has changed. - """ - self.display_changed = True - +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +import logging + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import SettingsTab, Receiver, translate +from openlp.core.lib.ui import UiStrings +from openlp.core.ui import ScreenList + +log = logging.getLogger(__name__) + +class GeneralTab(SettingsTab): + """ + GeneralTab is the general settings tab in the settings dialog. + """ + def __init__(self, parent): + """ + Initialise the general settings tab + """ + self.screens = ScreenList.get_instance() + self.icon_path = u':/icon/openlp-logo-16x16.png' + generalTranslated = translate('GeneralTab', 'General') + SettingsTab.__init__(self, parent, u'General', generalTranslated) + + def setupUi(self): + """ + Create the user interface for the general settings tab + """ + self.setObjectName(u'GeneralTab') + SettingsTab.setupUi(self) + self.monitorGroupBox = QtGui.QGroupBox(self.leftColumn) + self.monitorGroupBox.setObjectName(u'monitorGroupBox') + self.monitorLayout = QtGui.QFormLayout(self.monitorGroupBox) + self.monitorLayout.setObjectName(u'monitorLayout') + self.monitorLabel = QtGui.QLabel(self.monitorGroupBox) + self.monitorLabel.setObjectName(u'monitorLabel') + self.monitorLayout.addRow(self.monitorLabel) + self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox) + self.monitorComboBox.setObjectName(u'monitorComboBox') + self.monitorLayout.addRow(self.monitorComboBox) + self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox) + self.displayOnMonitorCheck.setObjectName(u'monitorComboBox') + self.monitorLayout.addRow(self.displayOnMonitorCheck) + self.leftLayout.addWidget(self.monitorGroupBox) + self.startupGroupBox = QtGui.QGroupBox(self.leftColumn) + self.startupGroupBox.setObjectName(u'startupGroupBox') + self.startupLayout = QtGui.QVBoxLayout(self.startupGroupBox) + self.startupLayout.setObjectName(u'startupLayout') + self.warningCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.warningCheckBox.setObjectName(u'warningCheckBox') + self.startupLayout.addWidget(self.warningCheckBox) + self.autoOpenCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.autoOpenCheckBox.setObjectName(u'autoOpenCheckBox') + self.startupLayout.addWidget(self.autoOpenCheckBox) + self.showSplashCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.showSplashCheckBox.setObjectName(u'showSplashCheckBox') + self.startupLayout.addWidget(self.showSplashCheckBox) + self.checkForUpdatesCheckBox = QtGui.QCheckBox(self.startupGroupBox) + self.checkForUpdatesCheckBox.setObjectName(u'checkForUpdatesCheckBox') + self.startupLayout.addWidget(self.checkForUpdatesCheckBox) + self.leftLayout.addWidget(self.startupGroupBox) + self.settingsGroupBox = QtGui.QGroupBox(self.leftColumn) + self.settingsGroupBox.setObjectName(u'settingsGroupBox') + self.settingsLayout = QtGui.QFormLayout(self.settingsGroupBox) + self.settingsLayout.setObjectName(u'settingsLayout') + self.saveCheckServiceCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.saveCheckServiceCheckBox.setObjectName(u'saveCheckServiceCheckBox') + self.settingsLayout.addRow(self.saveCheckServiceCheckBox) + self.autoUnblankCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.autoUnblankCheckBox.setObjectName(u'autoUnblankCheckBox') + self.settingsLayout.addRow(self.autoUnblankCheckBox) + self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox') + self.settingsLayout.addRow(self.autoPreviewCheckBox) + self.enableLoopCheckBox = QtGui.QCheckBox(self.settingsGroupBox) + self.enableLoopCheckBox.setObjectName(u'enableLoopCheckBox') + self.settingsLayout.addRow(self.enableLoopCheckBox) + # Moved here from image tab + self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox) + self.timeoutLabel.setObjectName(u'timeoutLabel') + self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) + self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') + self.timeoutSpinBox.setRange(1, 180) + self.settingsLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) + self.leftLayout.addWidget(self.settingsGroupBox) + self.leftLayout.addStretch() + self.ccliGroupBox = QtGui.QGroupBox(self.rightColumn) + self.ccliGroupBox.setObjectName(u'ccliGroupBox') + self.ccliLayout = QtGui.QFormLayout(self.ccliGroupBox) + self.ccliLayout.setObjectName(u'ccliLayout') + self.numberLabel = QtGui.QLabel(self.ccliGroupBox) + self.numberLabel.setObjectName(u'numberLabel') + self.numberEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.numberEdit.setValidator(QtGui.QIntValidator()) + self.numberEdit.setObjectName(u'numberEdit') + self.ccliLayout.addRow(self.numberLabel, self.numberEdit) + self.usernameLabel = QtGui.QLabel(self.ccliGroupBox) + self.usernameLabel.setObjectName(u'usernameLabel') + self.usernameEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.usernameEdit.setObjectName(u'usernameEdit') + self.ccliLayout.addRow(self.usernameLabel, self.usernameEdit) + self.passwordLabel = QtGui.QLabel(self.ccliGroupBox) + self.passwordLabel.setObjectName(u'passwordLabel') + self.passwordEdit = QtGui.QLineEdit(self.ccliGroupBox) + self.passwordEdit.setEchoMode(QtGui.QLineEdit.Password) + self.passwordEdit.setObjectName(u'passwordEdit') + self.ccliLayout.addRow(self.passwordLabel, self.passwordEdit) + self.rightLayout.addWidget(self.ccliGroupBox) + # Moved here from display tab + self.displayGroupBox = QtGui.QGroupBox(self.rightColumn) + self.displayGroupBox.setObjectName(u'displayGroupBox') + self.displayLayout = QtGui.QGridLayout(self.displayGroupBox) + self.displayLayout.setObjectName(u'displayLayout') + self.overrideCheckBox = QtGui.QCheckBox(self.displayGroupBox) + self.overrideCheckBox.setObjectName(u'overrideCheckBox') + self.displayLayout.addWidget(self.overrideCheckBox, 2, 0, 1, 4) + self.rightLayout.addWidget(self.displayGroupBox) + # Custom position + self.customXLabel = QtGui.QLabel(self.displayGroupBox) + self.customXLabel.setObjectName(u'customXLabel') + self.displayLayout.addWidget(self.customXLabel, 3, 0) + self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customXValueEdit.setObjectName(u'customXValueEdit') + self.customXValueEdit.setRange(-9999, 9999) + self.displayLayout.addWidget(self.customXValueEdit, 4, 0) + self.customYLabel = QtGui.QLabel(self.displayGroupBox) + self.customYLabel.setObjectName(u'customYLabel') + self.displayLayout.addWidget(self.customYLabel, 3, 1) + self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customYValueEdit.setObjectName(u'customYValueEdit') + self.customYValueEdit.setRange(-9999, 9999) + self.displayLayout.addWidget(self.customYValueEdit, 4, 1) + self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) + self.customWidthLabel.setObjectName(u'customWidthLabel') + self.displayLayout.addWidget(self.customWidthLabel, 3, 2) + self.customWidthValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customWidthValueEdit.setObjectName(u'customWidthValueEdit') + self.customWidthValueEdit.setMaximum(9999) + self.displayLayout.addWidget(self.customWidthValueEdit, 4, 2) + self.customHeightLabel = QtGui.QLabel(self.displayGroupBox) + self.customHeightLabel.setObjectName(u'customHeightLabel') + self.displayLayout.addWidget(self.customHeightLabel, 3, 3) + self.customHeightValueEdit = QtGui.QSpinBox(self.displayGroupBox) + self.customHeightValueEdit.setObjectName(u'customHeightValueEdit') + self.customHeightValueEdit.setMaximum(9999) + self.displayLayout.addWidget(self.customHeightValueEdit, 4, 3) + self.rightLayout.addWidget(self.displayGroupBox) + self.rightLayout.addStretch() + # Signals and slots + QtCore.QObject.connect(self.overrideCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) + QtCore.QObject.connect(self.customHeightValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customWidthValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customYValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.customXValueEdit, + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.monitorComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDisplayChanged) + # Reload the tab, as the screen resolution/count may have changed. + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_screen_changed'), self.load) + # Remove for now + self.usernameLabel.setVisible(False) + self.usernameEdit.setVisible(False) + self.passwordLabel.setVisible(False) + self.passwordEdit.setVisible(False) + + def retranslateUi(self): + """ + Translate the general settings tab to the currently selected language + """ + self.tabTitleVisible = translate('OpenLP.GeneralTab', 'General') + self.monitorGroupBox.setTitle(translate('OpenLP.GeneralTab', + 'Monitors')) + self.monitorLabel.setText(translate('OpenLP.GeneralTab', + 'Select monitor for output display:')) + self.displayOnMonitorCheck.setText( + translate('OpenLP.GeneralTab', 'Display if a single screen')) + self.startupGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Application Startup')) + self.warningCheckBox.setText( + translate('OpenLP.GeneralTab', 'Show blank screen warning')) + self.autoOpenCheckBox.setText(translate('OpenLP.GeneralTab', + 'Automatically open the last service')) + self.showSplashCheckBox.setText( + translate('OpenLP.GeneralTab', 'Show the splash screen')) + self.checkForUpdatesCheckBox.setText( + translate('OpenLP.GeneralTab', 'Check for updates to OpenLP')) + self.settingsGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Application Settings')) + self.saveCheckServiceCheckBox.setText(translate('OpenLP.GeneralTab', + 'Prompt to save before starting a new service')) + self.autoUnblankCheckBox.setText(translate('OpenLP.GeneralTab', + 'Unblank display when adding new live item')) + self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab', + 'Automatically preview next item in service')) + self.enableLoopCheckBox.setText(translate('OpenLP.GeneralTab', + 'Enable slide loop')) + self.timeoutLabel.setText(translate('OpenLP.GeneralTab', + 'Slide loop delay:')) + self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) + self.ccliGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'CCLI Details')) + self.numberLabel.setText(UiStrings().CCLINumberLabel) + self.usernameLabel.setText( + translate('OpenLP.GeneralTab', 'SongSelect username:')) + self.passwordLabel.setText( + translate('OpenLP.GeneralTab', 'SongSelect password:')) + # Moved from display tab + self.displayGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Display Position')) + self.overrideCheckBox.setText(translate('OpenLP.GeneralTab', + 'Override display position')) + self.customXLabel.setText(translate('OpenLP.GeneralTab', 'X')) + self.customYLabel.setText(translate('OpenLP.GeneralTab', 'Y')) + self.customHeightLabel.setText(translate('OpenLP.GeneralTab', 'Height')) + self.customWidthLabel.setText(translate('OpenLP.GeneralTab', 'Width')) + + def load(self): + """ + Load the settings to populate the form + """ + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + self.monitorComboBox.clear() + self.monitorComboBox.addItems(self.screens.get_screen_list()) + monitorNumber = settings.value(u'monitor', + QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] + self.monitorComboBox.setCurrentIndex(monitorNumber) + self.numberEdit.setText(unicode(settings.value( + u'ccli number', QtCore.QVariant(u'')).toString())) + self.usernameEdit.setText(unicode(settings.value( + u'songselect username', QtCore.QVariant(u'')).toString())) + self.passwordEdit.setText(unicode(settings.value( + u'songselect password', QtCore.QVariant(u'')).toString())) + self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt', + QtCore.QVariant(False)).toBool()) + self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', + QtCore.QVariant(False)).toBool()) + self.displayOnMonitorCheck.setChecked(self.screens.display) + self.warningCheckBox.setChecked(settings.value(u'blank warning', + QtCore.QVariant(False)).toBool()) + self.autoOpenCheckBox.setChecked(settings.value(u'auto open', + QtCore.QVariant(False)).toBool()) + self.showSplashCheckBox.setChecked(settings.value(u'show splash', + QtCore.QVariant(True)).toBool()) + self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', + QtCore.QVariant(True)).toBool()) + self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', + QtCore.QVariant(False)).toBool()) + self.enableLoopCheckBox.setChecked(settings.value(u'enable slide loop', + QtCore.QVariant(True)).toBool()) + self.timeoutSpinBox.setValue(settings.value(u'loop delay', + QtCore.QVariant(5)).toInt()[0]) + self.overrideCheckBox.setChecked(settings.value(u'override position', + QtCore.QVariant(False)).toBool()) + self.customXValueEdit.setValue(settings.value(u'x position', + QtCore.QVariant(self.screens.current[u'size'].x())).toInt()[0]) + self.customYValueEdit.setValue(settings.value(u'y position', + QtCore.QVariant(self.screens.current[u'size'].y())).toInt()[0]) + self.customHeightValueEdit.setValue(settings.value(u'height', + QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0]) + self.customWidthValueEdit.setValue(settings.value(u'width', + QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0]) + settings.endGroup() + self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.display_changed = False + + def save(self): + """ + Save the settings from the form + """ + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + settings.setValue(u'monitor', + QtCore.QVariant(self.monitorComboBox.currentIndex())) + settings.setValue(u'display on monitor', + QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) + settings.setValue(u'blank warning', + QtCore.QVariant(self.warningCheckBox.isChecked())) + settings.setValue(u'auto open', + QtCore.QVariant(self.autoOpenCheckBox.isChecked())) + settings.setValue(u'show splash', + QtCore.QVariant(self.showSplashCheckBox.isChecked())) + settings.setValue(u'update check', + QtCore.QVariant(self.checkForUpdatesCheckBox.isChecked())) + settings.setValue(u'save prompt', + QtCore.QVariant(self.saveCheckServiceCheckBox.isChecked())) + settings.setValue(u'auto unblank', + QtCore.QVariant(self.autoUnblankCheckBox.isChecked())) + settings.setValue(u'auto preview', + QtCore.QVariant(self.autoPreviewCheckBox.isChecked())) + settings.setValue(u'enable slide loop', + QtCore.QVariant(self.enableLoopCheckBox.isChecked())) + settings.setValue(u'loop delay', + QtCore.QVariant(self.timeoutSpinBox.value())) + settings.setValue(u'ccli number', + QtCore.QVariant(self.numberEdit.displayText())) + settings.setValue(u'songselect username', + QtCore.QVariant(self.usernameEdit.displayText())) + settings.setValue(u'songselect password', + QtCore.QVariant(self.passwordEdit.displayText())) + settings.setValue(u'x position', + QtCore.QVariant(self.customXValueEdit.value())) + settings.setValue(u'y position', + QtCore.QVariant(self.customYValueEdit.value())) + settings.setValue(u'height', + QtCore.QVariant(self.customHeightValueEdit.value())) + settings.setValue(u'width', + QtCore.QVariant(self.customWidthValueEdit.value())) + settings.setValue(u'override position', + QtCore.QVariant(self.overrideCheckBox.isChecked())) + settings.endGroup() + # On save update the screens as well + self.postSetUp(True) + + def postSetUp(self, postUpdate=False): + """ + Apply settings after settings tab has loaded and most of the + system so must be delayed + """ + Receiver.send_message(u'slidecontroller_live_spin_delay', + self.timeoutSpinBox.value()) + # Do not continue on start up. + if not postUpdate: + return + self.screens.set_current_display(self.monitorComboBox.currentIndex()) + self.screens.display = self.displayOnMonitorCheck.isChecked() + self.screens.override[u'size'] = QtCore.QRect( + self.customXValueEdit.value(), + self.customYValueEdit.value(), + self.customWidthValueEdit.value(), + self.customHeightValueEdit.value()) + if self.overrideCheckBox.isChecked(): + self.screens.set_override_display() + else: + self.screens.reset_current_display() + if self.display_changed: + Receiver.send_message(u'config_screen_changed') + self.display_changed = False + + def onOverrideCheckBoxToggled(self, checked): + """ + Toggle screen state depending on check box state. + + ``checked`` + The state of the check box (boolean). + """ + self.customXValueEdit.setEnabled(checked) + self.customYValueEdit.setEnabled(checked) + self.customHeightValueEdit.setEnabled(checked) + self.customWidthValueEdit.setEnabled(checked) + self.display_changed = True + + def onDisplayChanged(self): + """ + Called when the width, height, x position or y position has changed. + """ + self.display_changed = True + diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 722905c0b..4a0a3bf39 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1,1156 +1,1158 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2011 Raoul Snyman # -# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # -# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # -# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import logging -import os - -from PyQt4 import QtCore, QtGui -from PyQt4.phonon import Phonon - -from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ - ItemCapabilities, translate -from openlp.core.lib.ui import UiStrings, shortcut_action -from openlp.core.ui import HideMode, MainDisplay, ScreenList -from openlp.core.utils.actions import ActionList, CategoryOrder - -log = logging.getLogger(__name__) - -class SlideList(QtGui.QTableWidget): - """ - Customised version of QTableWidget which can respond to keyboard - events. - """ - def __init__(self, parent=None, name=None): - QtGui.QTableWidget.__init__(self, parent.controller) - self.parent = parent - - -class SlideController(QtGui.QWidget): - """ - SlideController is the slide controller widget. This widget is what the - user uses to control the displaying of verses/slides/etc on the screen. - """ - def __init__(self, parent, isLive=False): - """ - Set up the Slide Controller. - """ - QtGui.QWidget.__init__(self, parent) - self.isLive = isLive - self.parent = parent - self.screens = ScreenList.get_instance() - self.ratio = float(self.screens.current[u'size'].width()) / \ - float(self.screens.current[u'size'].height()) - self.image_manager = self.parent.image_manager - self.loopList = [ - u'Start Loop', - u'Loop Separator', - u'Image SpinBox' - ] - self.songEditList = [ - u'Edit Song', - ] - self.volume = 10 - self.timer_id = 0 - self.songEdit = False - self.selectedRow = 0 - self.serviceItem = None - self.alertTab = None - self.panel = QtGui.QWidget(parent.controlSplitter) - self.slideList = {} - # Layout for holding panel - self.panelLayout = QtGui.QVBoxLayout(self.panel) - self.panelLayout.setSpacing(0) - self.panelLayout.setMargin(0) - # Type label for the top of the slide controller - self.typeLabel = QtGui.QLabel(self.panel) - if self.isLive: - self.typeLabel.setText(UiStrings().Live) - self.split = 1 - self.typePrefix = u'live' - else: - self.typeLabel.setText(UiStrings().Preview) - self.split = 0 - self.typePrefix = u'preview' - self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') - self.typeLabel.setAlignment(QtCore.Qt.AlignCenter) - self.panelLayout.addWidget(self.typeLabel) - # Splitter - self.splitter = QtGui.QSplitter(self.panel) - self.splitter.setOrientation(QtCore.Qt.Vertical) - self.panelLayout.addWidget(self.splitter) - # Actual controller section - self.controller = QtGui.QWidget(self.splitter) - self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536)) - self.controller.setSizePolicy( - QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, - QtGui.QSizePolicy.Maximum)) - self.controllerLayout = QtGui.QVBoxLayout(self.controller) - self.controllerLayout.setSpacing(0) - self.controllerLayout.setMargin(0) - # Controller list view - self.previewListWidget = SlideList(self) - self.previewListWidget.setColumnCount(1) - self.previewListWidget.horizontalHeader().setVisible(False) - self.previewListWidget.setColumnWidth(0, self.controller.width()) - self.previewListWidget.isLive = self.isLive - self.previewListWidget.setObjectName(u'PreviewListWidget') - self.previewListWidget.setSelectionBehavior( - QtGui.QAbstractItemView.SelectRows) - self.previewListWidget.setSelectionMode( - QtGui.QAbstractItemView.SingleSelection) - self.previewListWidget.setEditTriggers( - QtGui.QAbstractItemView.NoEditTriggers) - self.previewListWidget.setHorizontalScrollBarPolicy( - QtCore.Qt.ScrollBarAlwaysOff) - self.previewListWidget.setAlternatingRowColors(True) - self.controllerLayout.addWidget(self.previewListWidget) - # Build the full toolbar - self.toolbar = OpenLPToolbar(self) - sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizeToolbarPolicy.setHorizontalStretch(0) - sizeToolbarPolicy.setVerticalStretch(0) - sizeToolbarPolicy.setHeightForWidth( - self.toolbar.sizePolicy().hasHeightForWidth()) - self.toolbar.setSizePolicy(sizeToolbarPolicy) - self.previousItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Previous Slide'), - u':/slides/slide_previous.png', - translate('OpenLP.SlideController', 'Move to previous'), - self.onSlideSelectedPrevious, - shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.nextItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Next Slide'), - u':/slides/slide_next.png', - translate('OpenLP.SlideController', 'Move to next'), - self.onSlideSelectedNext, - shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.toolbar.addToolbarSeparator(u'Close Separator') - if self.isLive: - self.hideMenu = QtGui.QToolButton(self.toolbar) - self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) - self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) - self.hideMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Hide'), self.toolbar)) - self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', - [QtCore.Qt.Key_Period], self.onBlankDisplay, - u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) - self.blankScreen.setText( - translate('OpenLP.SlideController', 'Blank Screen')) - self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', - [QtGui.QKeySequence(u'T')], self.onThemeDisplay, - u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) - self.themeScreen.setText( - translate('OpenLP.SlideController', 'Blank to Theme')) - self.desktopScreen = shortcut_action(self.hideMenu, - u'desktopScreen', [QtGui.QKeySequence(u'D')], - self.onHideDisplay, u':/slides/slide_desktop.png', False, - UiStrings().LiveToolbar) - self.desktopScreen.setText( - translate('OpenLP.SlideController', 'Show Desktop')) - self.hideMenu.setDefaultAction(self.blankScreen) - self.hideMenu.menu().addAction(self.blankScreen) - self.hideMenu.menu().addAction(self.themeScreen) - self.hideMenu.menu().addAction(self.desktopScreen) - self.toolbar.addToolbarSeparator(u'Loop Separator') - startLoop = self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Start Loop', u':/media/media_time.png', - translate('OpenLP.SlideController', 'Start continuous loop'), - self.onStartLoop) - action_list = ActionList.get_instance() - action_list.add_action(startLoop, UiStrings().LiveToolbar) - stopLoop = self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Stop Loop', u':/media/media_stop.png', - translate('OpenLP.SlideController', 'Stop continuous loop'), - self.onStopLoop) - action_list.add_action(stopLoop, UiStrings().LiveToolbar) - self.toogleLoop = shortcut_action(self, u'toogleLoop', - [QtGui.QKeySequence(u'L')], self.onToggleLoop, - category=UiStrings().LiveToolbar) - self.toogleLoop.setText(translate('OpenLP.SlideController', - 'Start/Stop continuous loop')) - self.addAction(self.toogleLoop) - self.delaySpinBox = QtGui.QSpinBox() - self.delaySpinBox.setRange(1, 180) - self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) - self.delaySpinBox.setSuffix(UiStrings().Seconds) - self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', - 'Delay between slides in seconds')) - else: - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Go Live', u':/general/general_live.png', - translate('OpenLP.SlideController', 'Move to live'), - self.onGoLive) - self.toolbar.addToolbarSeparator(u'Close Separator') - self.toolbar.addToolbarButton( - # Does not need translating - control string. - u'Edit Song', u':/general/general_edit.png', - translate('OpenLP.SlideController', - 'Edit and reload song preview'), - self.onEditSong) - self.controllerLayout.addWidget(self.toolbar) - # Build a Media ToolBar - self.mediabar = OpenLPToolbar(self) - self.mediabar.addToolbarButton( - u'Media Start', u':/slides/media_playback_start.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaPlay) - self.mediabar.addToolbarButton( - u'Media Pause', u':/slides/media_playback_pause.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaPause) - self.mediabar.addToolbarButton( - u'Media Stop', u':/slides/media_playback_stop.png', - translate('OpenLP.SlideController', 'Start playing media'), - self.onMediaStop) - if self.isLive: - # Build the Song Toolbar - self.songMenu = QtGui.QToolButton(self.toolbar) - self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) - self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) - self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) - self.songMenu.setMenu(QtGui.QMenu( - translate('OpenLP.SlideController', 'Go To'), self.toolbar)) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) - # Build the volumeSlider. - self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) - self.volumeSlider.setTickInterval(1) - self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) - self.volumeSlider.setMinimum(0) - self.volumeSlider.setMaximum(10) - else: - # Build the seekSlider. - self.seekSlider = Phonon.SeekSlider() - self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.seekSlider.setObjectName(u'seekSlider') - self.mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider) - self.volumeSlider = Phonon.VolumeSlider() - self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) - self.volumeSlider.setObjectName(u'volumeSlider') - self.mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) - self.controllerLayout.addWidget(self.mediabar) - # Screen preview area - self.previewFrame = QtGui.QFrame(self.splitter) - self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio)) - self.previewFrame.setMinimumHeight(100) - self.previewFrame.setSizePolicy(QtGui.QSizePolicy( - QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored, - QtGui.QSizePolicy.Label)) - self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel) - self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken) - self.previewFrame.setObjectName(u'PreviewFrame') - self.grid = QtGui.QGridLayout(self.previewFrame) - self.grid.setMargin(8) - self.grid.setObjectName(u'grid') - self.slideLayout = QtGui.QVBoxLayout() - self.slideLayout.setSpacing(0) - self.slideLayout.setMargin(0) - self.slideLayout.setObjectName(u'SlideLayout') - if not self.isLive: - self.mediaObject = Phonon.MediaObject(self) - self.video = Phonon.VideoWidget() - self.video.setVisible(False) - self.audio = Phonon.AudioOutput(Phonon.VideoCategory, - self.mediaObject) - Phonon.createPath(self.mediaObject, self.video) - Phonon.createPath(self.mediaObject, self.audio) - self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) - self.slideLayout.insertWidget(0, self.video) - # Actual preview screen - self.slidePreview = QtGui.QLabel(self) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.slidePreview.sizePolicy().hasHeightForWidth()) - self.slidePreview.setSizePolicy(sizePolicy) - self.slidePreview.setFrameShape(QtGui.QFrame.Box) - self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) - self.slidePreview.setLineWidth(1) - self.slidePreview.setScaledContents(True) - self.slidePreview.setObjectName(u'SlidePreview') - self.slideLayout.insertWidget(0, self.slidePreview) - self.grid.addLayout(self.slideLayout, 0, 0, 1, 1) - # Signals - QtCore.QObject.connect(self.previewListWidget, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) - if self.isLive: - QtCore.QObject.connect(self.volumeSlider, - QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), - self.receiveSpinDelay) - self.toolbar.makeWidgetsInvisible(self.loopList) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - else: - QtCore.QObject.connect(self.previewListWidget, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), - self.onGoLiveClick) - self.toolbar.makeWidgetsInvisible(self.songEditList) - self.mediabar.setVisible(False) - if self.isLive: - self.setLiveHotkeys(self) - self.__addActionsToWidget(self.previewListWidget) - else: - self.setPreviewHotkeys() - self.previewListWidget.addActions( - [self.nextItem, - self.previousItem]) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), - self.onStopLoop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_first' % self.typePrefix), - self.onSlideSelectedFirst) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), - self.onSlideSelectedNext) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), - self.onSlideSelectedPrevious) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), - self.onSlideSelectedLast) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), - self.onSlideChange) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), - self.onSlideSelectedIndex) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), - self.onSlideBlank) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), - self.onSlideUnblank) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), - self.onTextRequest) - - def setPreviewHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemPreview') - self.nextItem.setObjectName(u'nextItemPreview') - action_list = ActionList.get_instance() - action_list.add_action(self.previousItem) - action_list.add_action(self.nextItem) - - def setLiveHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemLive') - self.nextItem.setObjectName(u'nextItemLive') - action_list = ActionList.get_instance() - action_list.add_category( - UiStrings().LiveToolbar, CategoryOrder.standardToolbar) - action_list.add_action(self.previousItem) - action_list.add_action(self.nextItem) - self.previousService = shortcut_action(parent, u'previousService', - [QtCore.Qt.Key_Left], self.servicePrevious, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.previousService.setText( - translate('OpenLP.SlideController', 'Previous Service')) - self.nextService = shortcut_action(parent, 'nextService', - [QtCore.Qt.Key_Right], self.serviceNext, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.nextService.setText( - translate('OpenLP.SlideController', 'Next Service')) - self.escapeItem = shortcut_action(parent, 'escapeItem', - [QtCore.Qt.Key_Escape], self.liveEscape, - category=UiStrings().LiveToolbar, - context=QtCore.Qt.WidgetWithChildrenShortcut) - self.escapeItem.setText( - translate('OpenLP.SlideController', 'Escape Item')) - - def liveEscape(self): - self.display.setVisible(False) - self.display.videoStop() - - def servicePrevious(self): - Receiver.send_message('servicemanager_previous_item') - - def serviceNext(self): - Receiver.send_message('servicemanager_next_item') - - def screenSizeChanged(self): - """ - Settings dialog has changed the screen size of adjust output and - screen previews. - """ - # rebuild display as screen size changed - self.display = MainDisplay(self, self.image_manager, self.isLive) - self.display.alertTab = self.alertTab - self.display.setup() - if self.isLive: - self.__addActionsToWidget(self.display) - # The SlidePreview's ratio. - self.ratio = float(self.screens.current[u'size'].width()) / \ - float(self.screens.current[u'size'].height()) - self.previewSizeChanged() - if self.serviceItem: - self.refreshServiceItem() - - def __addActionsToWidget(self, widget): - widget.addActions([ - self.previousItem, self.nextItem, - self.previousService, self.nextService, - self.escapeItem]) - - def previewSizeChanged(self): - """ - Takes care of the SlidePreview's size. Is called when one of the the - splitters is moved or when the screen size is changed. Note, that this - method is (also) called frequently from the mainwindow *paintEvent*. - """ - if self.ratio < float(self.previewFrame.width()) / float( - self.previewFrame.height()): - # We have to take the height as limit. - max_height = self.previewFrame.height() - self.grid.margin() * 2 - self.slidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, - max_height)) - else: - # We have to take the width as limit. - max_width = self.previewFrame.width() - self.grid.margin() * 2 - self.slidePreview.setFixedSize(QtCore.QSize(max_width, - max_width / self.ratio)) - # Make sure that the frames have the correct size. - self.previewListWidget.setColumnWidth(0, - self.previewListWidget.viewport().size().width()) - if self.serviceItem: - # Sort out songs, bibles, etc. - if self.serviceItem.is_text(): - self.previewListWidget.resizeRowsToContents() - else: - # Sort out image heights. - width = self.parent.controlSplitter.sizes()[self.split] - for framenumber in range(len(self.serviceItem.get_frames())): - self.previewListWidget.setRowHeight( - framenumber, width / self.ratio) - - def onSongBarHandler(self): - request = unicode(self.sender().text()) - slideno = self.slideList[request] - self.__updatePreviewSelection(slideno) - self.slideSelected() - - def receiveSpinDelay(self, value): - """ - Adjusts the value of the ``delaySpinBox`` to the given one. - """ - self.delaySpinBox.setValue(int(value)) - - def enableToolBar(self, item): - """ - Allows the toolbars to be reconfigured based on Controller Type - and ServiceItem Type - """ - if self.isLive: - self.enableLiveToolBar(item) - else: - self.enablePreviewToolBar(item) - - def enableLiveToolBar(self, item): - """ - Allows the live toolbar to be customised - """ - self.toolbar.setVisible(True) - self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible([u'Song Menu']) - self.toolbar.makeWidgetsInvisible(self.loopList) - self.toogleLoop.setEnabled(False) - self.toolbar.actions[u'Start Loop'].setEnabled(False) - self.toolbar.actions[u'Stop Loop'].setEnabled(False) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - if item.is_text(): - if QtCore.QSettings().value( - self.parent.songsSettingsSection + u'/display songbar', - QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: - self.toolbar.makeWidgetsVisible([u'Song Menu']) - if item.is_capable(ItemCapabilities.AllowsLoop) and \ - len(item.get_frames()) > 1: - self.toolbar.makeWidgetsVisible(self.loopList) - self.toogleLoop.setEnabled(True) - self.toolbar.actions[u'Start Loop'].setEnabled(True) - self.toolbar.actions[u'Stop Loop'].setEnabled(True) - if item.is_media(): - self.toolbar.setVisible(False) - self.mediabar.setVisible(True) - - def enablePreviewToolBar(self, item): - """ - Allows the Preview toolbar to be customised - """ - self.toolbar.setVisible(True) - self.mediabar.setVisible(False) - self.toolbar.makeWidgetsInvisible(self.songEditList) - if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: - self.toolbar.makeWidgetsVisible(self.songEditList) - elif item.is_media(): - self.toolbar.setVisible(False) - self.mediabar.setVisible(True) - self.volumeSlider.setAudioOutput(self.audio) - - def refreshServiceItem(self): - """ - Method to update the service item if the screen has changed - """ - log.debug(u'refreshServiceItem live = %s' % self.isLive) - if self.serviceItem.is_text() or self.serviceItem.is_image(): - item = self.serviceItem - item.render() - self._processItem(item, self.selectedRow) - - def addServiceItem(self, item): - """ - Method to install the service item into the controller - Called by plugins - """ - log.debug(u'addServiceItem live = %s' % self.isLive) - item.render() - slideno = 0 - if self.songEdit: - slideno = self.selectedRow - self.songEdit = False - self._processItem(item, slideno) - - def replaceServiceManagerItem(self, item): - """ - Replacement item following a remote edit - """ - if item.__eq__(self.serviceItem): - self._processItem(item, self.previewListWidget.currentRow()) - - def addServiceManagerItem(self, item, slideno): - """ - Method to install the service item into the controller and - request the correct toolbar for the plugin. - Called by ServiceManager - """ - log.debug(u'addServiceManagerItem live = %s' % self.isLive) - # If no valid slide number is specified we take the first one. - if slideno == -1: - slideno = 0 - # If service item is the same as the current on only change slide - if item.__eq__(self.serviceItem): - self.__checkUpdateSelectedSlide(slideno) - self.slideSelected() - return - self._processItem(item, slideno) - - def _processItem(self, serviceItem, slideno): - """ - Loads a ServiceItem into the system from ServiceManager - Display the slide number passed - """ - log.debug(u'processManagerItem live = %s' % self.isLive) - self.onStopLoop() - old_item = self.serviceItem - self.serviceItem = serviceItem - if old_item and self.isLive and old_item.is_capable( - ItemCapabilities.ProvidesOwnDisplay): - self._resetBlank() - Receiver.send_message(u'%s_start' % serviceItem.name.lower(), - [serviceItem, self.isLive, self.hideMode(), slideno]) - self.slideList = {} - width = self.parent.controlSplitter.sizes()[self.split] - self.previewListWidget.clear() - self.previewListWidget.setRowCount(0) - self.previewListWidget.setColumnWidth(0, width) - if self.isLive: - self.songMenu.menu().clear() - row = 0 - text = [] - for framenumber, frame in enumerate(self.serviceItem.get_frames()): - self.previewListWidget.setRowCount( - self.previewListWidget.rowCount() + 1) - item = QtGui.QTableWidgetItem() - slideHeight = 0 - if self.serviceItem.is_text(): - if frame[u'verseTag']: - # These tags are already translated. - verse_def = frame[u'verseTag'] - verse_def = u'%s%s' % (verse_def[0], verse_def[1:]) - two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:]) - row = two_line_def - if self.isLive: - if verse_def not in self.slideList: - self.slideList[verse_def] = framenumber - self.songMenu.menu().addAction(verse_def, - self.onSongBarHandler) - else: - row += 1 - item.setText(frame[u'text']) - else: - label = QtGui.QLabel() - label.setMargin(4) - label.setScaledContents(True) - if self.serviceItem.is_command(): - image = resize_image(frame[u'image'], - self.parent.renderer.width, - self.parent.renderer.height) - else: - # If current slide set background to image - if framenumber == slideno: - self.serviceItem.bg_image_bytes = \ - self.image_manager.get_image_bytes(frame[u'title']) - image = self.image_manager.get_image(frame[u'title']) - label.setPixmap(QtGui.QPixmap.fromImage(image)) - self.previewListWidget.setCellWidget(framenumber, 0, label) - slideHeight = width * self.parent.renderer.screen_ratio - row += 1 - text.append(unicode(row)) - self.previewListWidget.setItem(framenumber, 0, item) - if slideHeight != 0: - self.previewListWidget.setRowHeight(framenumber, slideHeight) - self.previewListWidget.setVerticalHeaderLabels(text) - if self.serviceItem.is_text(): - self.previewListWidget.resizeRowsToContents() - self.previewListWidget.setColumnWidth(0, - self.previewListWidget.viewport().size().width()) - self.__updatePreviewSelection(slideno) - self.enableToolBar(serviceItem) - # Pass to display for viewing. - # Postpone image build, we need to do this later to avoid the theme - # flashing on the screen - if not self.serviceItem.is_image(): - self.display.buildHtml(self.serviceItem) - if serviceItem.is_media(): - self.onMediaStart(serviceItem) - self.slideSelected(True) - self.previewListWidget.setFocus() - if old_item: - # Close the old item after the new one is opened - # This avoids the service theme/desktop flashing on screen - # However opening a new item of the same type will automatically - # close the previous, so make sure we don't close the new one. - if old_item.is_command() and not serviceItem.is_command(): - Receiver.send_message(u'%s_stop' % - old_item.name.lower(), [old_item, self.isLive]) - if old_item.is_media() and not serviceItem.is_media(): - self.onMediaClose() - Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, - [serviceItem]) - - def __updatePreviewSelection(self, slideno): - """ - Utility method to update the selected slide in the list. - """ - if slideno > self.previewListWidget.rowCount(): - self.previewListWidget.selectRow( - self.previewListWidget.rowCount() - 1) - else: - self.__checkUpdateSelectedSlide(slideno) - - def onTextRequest(self): - """ - Return the text for the current item in controller - """ - data = [] - if self.serviceItem: - for framenumber, frame in enumerate(self.serviceItem.get_frames()): - dataItem = {} - if self.serviceItem.is_text(): - dataItem[u'tag'] = unicode(frame[u'verseTag']) - dataItem[u'text'] = unicode(frame[u'html']) - else: - dataItem[u'tag'] = unicode(framenumber) - dataItem[u'text'] = u'' - dataItem[u'selected'] = \ - (self.previewListWidget.currentRow() == framenumber) - data.append(dataItem) - Receiver.send_message(u'slidecontroller_%s_text_response' - % self.typePrefix, data) - - # Screen event methods - def onSlideSelectedFirst(self): - """ - Go to the first slide. - """ - if not self.serviceItem: - return - if self.serviceItem.is_command(): - Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - self.updatePreview() - else: - self.previewListWidget.selectRow(0) - self.slideSelected() - - def onSlideSelectedIndex(self, message): - """ - Go to the requested slide - """ - index = int(message[0]) - if not self.serviceItem: - return - if self.serviceItem.is_command(): - Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, index]) - self.updatePreview() - else: - self.__checkUpdateSelectedSlide(index) - self.slideSelected() - - def mainDisplaySetBackground(self): - """ - Allow the main display to blank the main display at startup time - """ - log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) - display_type = QtCore.QSettings().value( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'')).toString() - if not self.display.primary: - # Order done to handle initial conversion - if display_type == u'themed': - self.onThemeDisplay(True) - elif display_type == u'hidden': - self.onHideDisplay(True) - else: - self.onBlankDisplay(True) - - def onSlideBlank(self): - """ - Handle the slidecontroller blank event - """ - self.onBlankDisplay(True) - - def onSlideUnblank(self): - """ - Handle the slidecontroller unblank event - """ - self.onBlankDisplay(False) - - def onBlankDisplay(self, checked=None): - """ - Handle the blank screen button actions - """ - if checked is None: - checked = self.blankScreen.isChecked() - log.debug(u'onBlankDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.blankScreen) - self.blankScreen.setChecked(checked) - self.themeScreen.setChecked(False) - self.desktopScreen.setChecked(False) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'blanked')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin() - self.updatePreview() - - def onThemeDisplay(self, checked=None): - """ - Handle the Theme screen button - """ - if checked is None: - checked = self.themeScreen.isChecked() - log.debug(u'onThemeDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.themeScreen) - self.blankScreen.setChecked(False) - self.themeScreen.setChecked(checked) - self.desktopScreen.setChecked(False) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'themed')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin() - self.updatePreview() - - def onHideDisplay(self, checked=None): - """ - Handle the Hide screen button - """ - if checked is None: - checked = self.desktopScreen.isChecked() - log.debug(u'onHideDisplay %s' % checked) - self.hideMenu.setDefaultAction(self.desktopScreen) - self.blankScreen.setChecked(False) - self.themeScreen.setChecked(False) - self.desktopScreen.setChecked(checked) - if checked: - QtCore.QSettings().setValue( - self.parent.generalSettingsSection + u'/screen blank', - QtCore.QVariant(u'hidden')) - else: - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') - self.hidePlugin(checked) - self.updatePreview() - - def blankPlugin(self): - """ - Blank/Hide the display screen within a plugin if required. - """ - hide_mode = self.hideMode() - log.debug(u'blankPlugin %s ', hide_mode) - if self.serviceItem is not None: - if hide_mode: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_hide', hide_mode) - Receiver.send_message(u'%s_blank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, hide_mode]) - else: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_show') - Receiver.send_message(u'%s_unblank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - - def hidePlugin(self, hide): - """ - Tell the plugin to hide the display screen. - """ - log.debug(u'hidePlugin %s ', hide) - if self.serviceItem is not None: - if hide: - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) - Receiver.send_message(u'%s_hide' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - else: - if not self.serviceItem.is_command(): - Receiver.send_message(u'maindisplay_show') - Receiver.send_message(u'%s_unblank' - % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - - def onSlideSelected(self, start=False): - """ - Slide selected in controller - """ - self.slideSelected() - - def slideSelected(self, start=False): - """ - Generate the preview when you click on a slide. - if this is the Live Controller also display on the screen - """ - row = self.previewListWidget.currentRow() - self.selectedRow = 0 - if row > -1 and row < self.previewListWidget.rowCount(): - if self.serviceItem.is_command(): - if self.isLive and not start: - Receiver.send_message( - u'%s_slide' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive, row]) - self.updatePreview() - else: - toDisplay = self.serviceItem.get_rendered_frame(row) - if self.serviceItem.is_text(): - frame = self.display.text(toDisplay) - else: - if start: - self.display.buildHtml(self.serviceItem, toDisplay) - frame = self.display.preview() - else: - frame = self.display.image(toDisplay) - # reset the store used to display first image - self.serviceItem.bg_image_bytes = None - self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) - self.selectedRow = row - self.__checkUpdateSelectedSlide(row) - Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, - row) - - def onSlideChange(self, row): - """ - The slide has been changed. Update the slidecontroller accordingly - """ - self.__checkUpdateSelectedSlide(row) - self.updatePreview() - Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, - row) - - def updatePreview(self): - """ - This updates the preview frame, for example after changing a slide or - using *Blank to Theme*. - """ - log.debug(u'updatePreview %s ' % self.screens.current[u'primary']) - if not self.screens.current[u'primary'] and self.serviceItem and \ - self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): - # Grab now, but try again in a couple of seconds if slide change - # is slow - QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) - QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) - else: - self.slidePreview.setPixmap( - QtGui.QPixmap.fromImage(self.display.preview())) - - def grabMainDisplay(self): - """ - Creates an image of the current screen and updates the preview frame. - """ - winid = QtGui.QApplication.desktop().winId() - rect = self.screens.current[u'size'] - winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), - rect.y(), rect.width(), rect.height()) - self.slidePreview.setPixmap(winimg) - def onSlideSelectedNext(self): - """ - Go to the next slide. - """ - loopcheck = QtCore.QSettings().value( self.parent.generalSettingsSection + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool) - if not self.serviceItem: - return - Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command() and self.isLive: - self.updatePreview() - else: - row = self.previewListWidget.currentRow() + 1 - if row == self.previewListWidget.rowCount(): - if loopcheck == True: - row = 0 - else: - return - self.__checkUpdateSelectedSlide(row) - self.slideSelected() - def onSlideSelectedPrevious(self): - """ - Go to the previous slide. - """ - loopcheck =QtCore.QSettings().value( self.parent.generalSettingsSection + u'enable slide loop', QtCore.QVariant(True).toBool) - if not self.serviceItem: - return - Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command() and self.isLive: - self.updatePreview() - else: - row = self.previewListWidget.currentRow() - 1 - if row == -1: - if loopcheck == True: - row = self.previewListWidget.rowCount() - 1 - else: - return - self.__checkUpdateSelectedSlide(row) - self.slideSelected() - - def __checkUpdateSelectedSlide(self, row): - if row + 1 < self.previewListWidget.rowCount(): - self.previewListWidget.scrollToItem( - self.previewListWidget.item(row + 1, 0)) - self.previewListWidget.selectRow(row) - - def onSlideSelectedLast(self): - """ - Go to the last slide. - """ - if not self.serviceItem: - return - Receiver.send_message(u'%s_last' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) - if self.serviceItem.is_command(): - self.updatePreview() - else: - self.previewListWidget.selectRow( - self.previewListWidget.rowCount() - 1) - self.slideSelected() - - def onToggleLoop(self, toggled): - """ - Toggles the loop state. - """ - if self.toolbar.actions[u'Start Loop'].isVisible(): - self.onStartLoop() - else: - self.onStopLoop() - - def onStartLoop(self): - """ - Start the timer loop running and store the timer id - """ - if self.previewListWidget.rowCount() > 1: - self.timer_id = self.startTimer( - int(self.delaySpinBox.value()) * 1000) - self.toolbar.actions[u'Stop Loop'].setVisible(True) - self.toolbar.actions[u'Start Loop'].setVisible(False) - - def onStopLoop(self): - """ - Stop the timer loop running - """ - if self.timer_id != 0: - self.killTimer(self.timer_id) - self.timer_id = 0 - self.toolbar.actions[u'Start Loop'].setVisible(True) - self.toolbar.actions[u'Stop Loop'].setVisible(False) - - def timerEvent(self, event): - """ - If the timer event is for this window select next slide - """ - if event.timerId() == self.timer_id: - self.onSlideSelectedNext() - - def onEditSong(self): - """ - From the preview display requires the service Item to be editied - """ - self.songEdit = True - Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), - u'P:%s' % self.serviceItem.edit_id) - - def onGoLiveClick(self): - """ - triggered by clicking the Preview slide items - """ - if QtCore.QSettings().value(u'advanced/double click live', - QtCore.QVariant(False)).toBool(): - self.onGoLive() - - def onGoLive(self): - """ - If preview copy slide item to live - """ - row = self.previewListWidget.currentRow() - if row > -1 and row < self.previewListWidget.rowCount(): - if self.serviceItem.from_service: - Receiver.send_message('servicemanager_preview_live', - u'%s:%s' % (self.serviceItem._uuid, row)) - else: - self.parent.liveController.addServiceManagerItem( - self.serviceItem, row) - - def onMediaStart(self, item): - """ - Respond to the arrival of a media service item - """ - log.debug(u'SlideController onMediaStart') - file = os.path.join(item.get_frame_path(), item.get_frame_title()) - if self.isLive: - self.display.video(file, self.volume) - self.volumeSlider.setValue(self.volume) - else: - self.mediaObject.stop() - self.mediaObject.clearQueue() - self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) - self.seekSlider.setMediaObject(self.mediaObject) - self.seekSlider.show() - self.onMediaPlay() - - def mediaVolume(self): - """ - Respond to the release of Volume Slider - """ - log.debug(u'SlideController mediaVolume') - self.volume = self.volumeSlider.value() - self.display.videoVolume(self.volume) - - def onMediaPause(self): - """ - Respond to the Pause from the media Toolbar - """ - log.debug(u'SlideController onMediaPause') - if self.isLive: - self.display.videoPause() - else: - self.mediaObject.pause() - - def onMediaPlay(self): - """ - Respond to the Play from the media Toolbar - """ - log.debug(u'SlideController onMediaPlay') - if self.isLive: - self.display.videoPlay() - else: - self.slidePreview.hide() - self.video.show() - self.mediaObject.play() - - def onMediaStop(self): - """ - Respond to the Stop from the media Toolbar - """ - log.debug(u'SlideController onMediaStop') - if self.isLive: - self.display.videoStop() - else: - self.mediaObject.stop() - self.video.hide() - self.slidePreview.clear() - self.slidePreview.show() - - def onMediaClose(self): - """ - Respond to a request to close the Video - """ - log.debug(u'SlideController onMediaStop') - if self.isLive: - self.display.resetVideo() - else: - self.mediaObject.stop() - self.mediaObject.clearQueue() - self.video.hide() - self.slidePreview.clear() - self.slidePreview.show() - - def _resetBlank(self): - """ - Used by command items which provide their own displays to reset the - screen hide attributes - """ - hide_mode = self.hideMode() - if hide_mode == HideMode.Blank: - self.onBlankDisplay(True) - elif hide_mode == HideMode.Theme: - self.onThemeDisplay(True) - elif hide_mode == HideMode.Screen: - self.onHideDisplay(True) - else: - self.hidePlugin(False) - - def hideMode(self): - """ - Determine what the hide mode should be according to the blank button - """ - if not self.isLive: - return None - elif self.blankScreen.isChecked(): - return HideMode.Blank - elif self.themeScreen.isChecked(): - return HideMode.Theme - elif self.desktopScreen.isChecked(): - return HideMode.Screen - else: - return None +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, # +# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +import logging +import os + +from PyQt4 import QtCore, QtGui +from PyQt4.phonon import Phonon + +from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ + ItemCapabilities, translate +from openlp.core.lib.ui import UiStrings, shortcut_action +from openlp.core.ui import HideMode, MainDisplay, ScreenList +from openlp.core.utils.actions import ActionList, CategoryOrder + +log = logging.getLogger(__name__) + +class SlideList(QtGui.QTableWidget): + """ + Customised version of QTableWidget which can respond to keyboard + events. + """ + def __init__(self, parent=None, name=None): + QtGui.QTableWidget.__init__(self, parent.controller) + self.parent = parent + + +class SlideController(QtGui.QWidget): + """ + SlideController is the slide controller widget. This widget is what the + user uses to control the displaying of verses/slides/etc on the screen. + """ + def __init__(self, parent, isLive=False): + """ + Set up the Slide Controller. + """ + QtGui.QWidget.__init__(self, parent) + self.isLive = isLive + self.parent = parent + self.screens = ScreenList.get_instance() + self.ratio = float(self.screens.current[u'size'].width()) / \ + float(self.screens.current[u'size'].height()) + self.image_manager = self.parent.image_manager + self.loopList = [ + u'Start Loop', + u'Loop Separator', + u'Image SpinBox' + ] + self.songEditList = [ + u'Edit Song', + ] + self.volume = 10 + self.timer_id = 0 + self.songEdit = False + self.selectedRow = 0 + self.serviceItem = None + self.alertTab = None + self.panel = QtGui.QWidget(parent.controlSplitter) + self.slideList = {} + # Layout for holding panel + self.panelLayout = QtGui.QVBoxLayout(self.panel) + self.panelLayout.setSpacing(0) + self.panelLayout.setMargin(0) + # Type label for the top of the slide controller + self.typeLabel = QtGui.QLabel(self.panel) + if self.isLive: + self.typeLabel.setText(UiStrings().Live) + self.split = 1 + self.typePrefix = u'live' + else: + self.typeLabel.setText(UiStrings().Preview) + self.split = 0 + self.typePrefix = u'preview' + self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') + self.typeLabel.setAlignment(QtCore.Qt.AlignCenter) + self.panelLayout.addWidget(self.typeLabel) + # Splitter + self.splitter = QtGui.QSplitter(self.panel) + self.splitter.setOrientation(QtCore.Qt.Vertical) + self.panelLayout.addWidget(self.splitter) + # Actual controller section + self.controller = QtGui.QWidget(self.splitter) + self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536)) + self.controller.setSizePolicy( + QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, + QtGui.QSizePolicy.Maximum)) + self.controllerLayout = QtGui.QVBoxLayout(self.controller) + self.controllerLayout.setSpacing(0) + self.controllerLayout.setMargin(0) + # Controller list view + self.previewListWidget = SlideList(self) + self.previewListWidget.setColumnCount(1) + self.previewListWidget.horizontalHeader().setVisible(False) + self.previewListWidget.setColumnWidth(0, self.controller.width()) + self.previewListWidget.isLive = self.isLive + self.previewListWidget.setObjectName(u'PreviewListWidget') + self.previewListWidget.setSelectionBehavior( + QtGui.QAbstractItemView.SelectRows) + self.previewListWidget.setSelectionMode( + QtGui.QAbstractItemView.SingleSelection) + self.previewListWidget.setEditTriggers( + QtGui.QAbstractItemView.NoEditTriggers) + self.previewListWidget.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) + self.previewListWidget.setAlternatingRowColors(True) + self.controllerLayout.addWidget(self.previewListWidget) + # Build the full toolbar + self.toolbar = OpenLPToolbar(self) + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizeToolbarPolicy.setHorizontalStretch(0) + sizeToolbarPolicy.setVerticalStretch(0) + sizeToolbarPolicy.setHeightForWidth( + self.toolbar.sizePolicy().hasHeightForWidth()) + self.toolbar.setSizePolicy(sizeToolbarPolicy) + self.previousItem = self.toolbar.addToolbarButton( + translate('OpenLP.SlideController', 'Previous Slide'), + u':/slides/slide_previous.png', + translate('OpenLP.SlideController', 'Move to previous'), + self.onSlideSelectedPrevious, + shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.nextItem = self.toolbar.addToolbarButton( + translate('OpenLP.SlideController', 'Next Slide'), + u':/slides/slide_next.png', + translate('OpenLP.SlideController', 'Move to next'), + self.onSlideSelectedNext, + shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.toolbar.addToolbarSeparator(u'Close Separator') + if self.isLive: + self.hideMenu = QtGui.QToolButton(self.toolbar) + self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) + self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) + self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) + self.hideMenu.setMenu(QtGui.QMenu( + translate('OpenLP.SlideController', 'Hide'), self.toolbar)) + self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', + [QtCore.Qt.Key_Period], self.onBlankDisplay, + u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) + self.blankScreen.setText( + translate('OpenLP.SlideController', 'Blank Screen')) + self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', + [QtGui.QKeySequence(u'T')], self.onThemeDisplay, + u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) + self.themeScreen.setText( + translate('OpenLP.SlideController', 'Blank to Theme')) + self.desktopScreen = shortcut_action(self.hideMenu, + u'desktopScreen', [QtGui.QKeySequence(u'D')], + self.onHideDisplay, u':/slides/slide_desktop.png', False, + UiStrings().LiveToolbar) + self.desktopScreen.setText( + translate('OpenLP.SlideController', 'Show Desktop')) + self.hideMenu.setDefaultAction(self.blankScreen) + self.hideMenu.menu().addAction(self.blankScreen) + self.hideMenu.menu().addAction(self.themeScreen) + self.hideMenu.menu().addAction(self.desktopScreen) + self.toolbar.addToolbarSeparator(u'Loop Separator') + startLoop = self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Start Loop', u':/media/media_time.png', + translate('OpenLP.SlideController', 'Start continuous loop'), + self.onStartLoop) + action_list = ActionList.get_instance() + action_list.add_action(startLoop, UiStrings().LiveToolbar) + stopLoop = self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Stop Loop', u':/media/media_stop.png', + translate('OpenLP.SlideController', 'Stop continuous loop'), + self.onStopLoop) + action_list.add_action(stopLoop, UiStrings().LiveToolbar) + self.toogleLoop = shortcut_action(self, u'toogleLoop', + [QtGui.QKeySequence(u'L')], self.onToggleLoop, + category=UiStrings().LiveToolbar) + self.toogleLoop.setText(translate('OpenLP.SlideController', + 'Start/Stop continuous loop')) + self.addAction(self.toogleLoop) + self.delaySpinBox = QtGui.QSpinBox() + self.delaySpinBox.setRange(1, 180) + self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) + self.delaySpinBox.setSuffix(UiStrings().Seconds) + self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', + 'Delay between slides in seconds')) + else: + self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Go Live', u':/general/general_live.png', + translate('OpenLP.SlideController', 'Move to live'), + self.onGoLive) + self.toolbar.addToolbarSeparator(u'Close Separator') + self.toolbar.addToolbarButton( + # Does not need translating - control string. + u'Edit Song', u':/general/general_edit.png', + translate('OpenLP.SlideController', + 'Edit and reload song preview'), + self.onEditSong) + self.controllerLayout.addWidget(self.toolbar) + # Build a Media ToolBar + self.mediabar = OpenLPToolbar(self) + self.mediabar.addToolbarButton( + u'Media Start', u':/slides/media_playback_start.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaPlay) + self.mediabar.addToolbarButton( + u'Media Pause', u':/slides/media_playback_pause.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaPause) + self.mediabar.addToolbarButton( + u'Media Stop', u':/slides/media_playback_stop.png', + translate('OpenLP.SlideController', 'Start playing media'), + self.onMediaStop) + if self.isLive: + # Build the Song Toolbar + self.songMenu = QtGui.QToolButton(self.toolbar) + self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) + self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) + self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) + self.songMenu.setMenu(QtGui.QMenu( + translate('OpenLP.SlideController', 'Go To'), self.toolbar)) + self.toolbar.makeWidgetsInvisible([u'Song Menu']) + # Build the volumeSlider. + self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) + self.volumeSlider.setTickInterval(1) + self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove) + self.volumeSlider.setMinimum(0) + self.volumeSlider.setMaximum(10) + else: + # Build the seekSlider. + self.seekSlider = Phonon.SeekSlider() + self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.seekSlider.setObjectName(u'seekSlider') + self.mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider) + self.volumeSlider = Phonon.VolumeSlider() + self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.volumeSlider.setObjectName(u'volumeSlider') + self.mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider) + self.controllerLayout.addWidget(self.mediabar) + # Screen preview area + self.previewFrame = QtGui.QFrame(self.splitter) + self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio)) + self.previewFrame.setMinimumHeight(100) + self.previewFrame.setSizePolicy(QtGui.QSizePolicy( + QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored, + QtGui.QSizePolicy.Label)) + self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken) + self.previewFrame.setObjectName(u'PreviewFrame') + self.grid = QtGui.QGridLayout(self.previewFrame) + self.grid.setMargin(8) + self.grid.setObjectName(u'grid') + self.slideLayout = QtGui.QVBoxLayout() + self.slideLayout.setSpacing(0) + self.slideLayout.setMargin(0) + self.slideLayout.setObjectName(u'SlideLayout') + if not self.isLive: + self.mediaObject = Phonon.MediaObject(self) + self.video = Phonon.VideoWidget() + self.video.setVisible(False) + self.audio = Phonon.AudioOutput(Phonon.VideoCategory, + self.mediaObject) + Phonon.createPath(self.mediaObject, self.video) + Phonon.createPath(self.mediaObject, self.audio) + self.video.setGeometry(QtCore.QRect(0, 0, 300, 225)) + self.slideLayout.insertWidget(0, self.video) + # Actual preview screen + self.slidePreview = QtGui.QLabel(self) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.slidePreview.sizePolicy().hasHeightForWidth()) + self.slidePreview.setSizePolicy(sizePolicy) + self.slidePreview.setFrameShape(QtGui.QFrame.Box) + self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) + self.slidePreview.setLineWidth(1) + self.slidePreview.setScaledContents(True) + self.slidePreview.setObjectName(u'SlidePreview') + self.slideLayout.insertWidget(0, self.slidePreview) + self.grid.addLayout(self.slideLayout, 0, 0, 1, 1) + # Signals + QtCore.QObject.connect(self.previewListWidget, + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) + if self.isLive: + QtCore.QObject.connect(self.volumeSlider, + QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), + self.receiveSpinDelay) + self.toolbar.makeWidgetsInvisible(self.loopList) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + else: + QtCore.QObject.connect(self.previewListWidget, + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), + self.onGoLiveClick) + self.toolbar.makeWidgetsInvisible(self.songEditList) + self.mediabar.setVisible(False) + if self.isLive: + self.setLiveHotkeys(self) + self.__addActionsToWidget(self.previewListWidget) + else: + self.setPreviewHotkeys() + self.previewListWidget.addActions( + [self.nextItem, + self.previousItem]) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), + self.onStopLoop) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_first' % self.typePrefix), + self.onSlideSelectedFirst) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), + self.onSlideSelectedNext) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), + self.onSlideSelectedPrevious) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), + self.onSlideSelectedLast) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), + self.onSlideChange) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), + self.onSlideSelectedIndex) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), + self.onSlideBlank) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), + self.onSlideUnblank) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), + self.onTextRequest) + + def setPreviewHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemPreview') + self.nextItem.setObjectName(u'nextItemPreview') + action_list = ActionList.get_instance() + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) + + def setLiveHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemLive') + self.nextItem.setObjectName(u'nextItemLive') + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings().LiveToolbar, CategoryOrder.standardToolbar) + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) + self.previousService = shortcut_action(parent, u'previousService', + [QtCore.Qt.Key_Left], self.servicePrevious, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.previousService.setText( + translate('OpenLP.SlideController', 'Previous Service')) + self.nextService = shortcut_action(parent, 'nextService', + [QtCore.Qt.Key_Right], self.serviceNext, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.nextService.setText( + translate('OpenLP.SlideController', 'Next Service')) + self.escapeItem = shortcut_action(parent, 'escapeItem', + [QtCore.Qt.Key_Escape], self.liveEscape, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.escapeItem.setText( + translate('OpenLP.SlideController', 'Escape Item')) + + def liveEscape(self): + self.display.setVisible(False) + self.display.videoStop() + + def servicePrevious(self): + Receiver.send_message('servicemanager_previous_item') + + def serviceNext(self): + Receiver.send_message('servicemanager_next_item') + + def screenSizeChanged(self): + """ + Settings dialog has changed the screen size of adjust output and + screen previews. + """ + # rebuild display as screen size changed + self.display = MainDisplay(self, self.image_manager, self.isLive) + self.display.alertTab = self.alertTab + self.display.setup() + if self.isLive: + self.__addActionsToWidget(self.display) + # The SlidePreview's ratio. + self.ratio = float(self.screens.current[u'size'].width()) / \ + float(self.screens.current[u'size'].height()) + self.previewSizeChanged() + if self.serviceItem: + self.refreshServiceItem() + + def __addActionsToWidget(self, widget): + widget.addActions([ + self.previousItem, self.nextItem, + self.previousService, self.nextService, + self.escapeItem]) + + def previewSizeChanged(self): + """ + Takes care of the SlidePreview's size. Is called when one of the the + splitters is moved or when the screen size is changed. Note, that this + method is (also) called frequently from the mainwindow *paintEvent*. + """ + if self.ratio < float(self.previewFrame.width()) / float( + self.previewFrame.height()): + # We have to take the height as limit. + max_height = self.previewFrame.height() - self.grid.margin() * 2 + self.slidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, + max_height)) + else: + # We have to take the width as limit. + max_width = self.previewFrame.width() - self.grid.margin() * 2 + self.slidePreview.setFixedSize(QtCore.QSize(max_width, + max_width / self.ratio)) + # Make sure that the frames have the correct size. + self.previewListWidget.setColumnWidth(0, + self.previewListWidget.viewport().size().width()) + if self.serviceItem: + # Sort out songs, bibles, etc. + if self.serviceItem.is_text(): + self.previewListWidget.resizeRowsToContents() + else: + # Sort out image heights. + width = self.parent.controlSplitter.sizes()[self.split] + for framenumber in range(len(self.serviceItem.get_frames())): + self.previewListWidget.setRowHeight( + framenumber, width / self.ratio) + + def onSongBarHandler(self): + request = unicode(self.sender().text()) + slideno = self.slideList[request] + self.__updatePreviewSelection(slideno) + self.slideSelected() + + def receiveSpinDelay(self, value): + """ + Adjusts the value of the ``delaySpinBox`` to the given one. + """ + self.delaySpinBox.setValue(int(value)) + + def enableToolBar(self, item): + """ + Allows the toolbars to be reconfigured based on Controller Type + and ServiceItem Type + """ + if self.isLive: + self.enableLiveToolBar(item) + else: + self.enablePreviewToolBar(item) + + def enableLiveToolBar(self, item): + """ + Allows the live toolbar to be customised + """ + self.toolbar.setVisible(True) + self.mediabar.setVisible(False) + self.toolbar.makeWidgetsInvisible([u'Song Menu']) + self.toolbar.makeWidgetsInvisible(self.loopList) + self.toogleLoop.setEnabled(False) + self.toolbar.actions[u'Start Loop'].setEnabled(False) + self.toolbar.actions[u'Stop Loop'].setEnabled(False) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + if item.is_text(): + if QtCore.QSettings().value( + self.parent.songsSettingsSection + u'/display songbar', + QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: + self.toolbar.makeWidgetsVisible([u'Song Menu']) + if item.is_capable(ItemCapabilities.AllowsLoop) and \ + len(item.get_frames()) > 1: + self.toolbar.makeWidgetsVisible(self.loopList) + self.toogleLoop.setEnabled(True) + self.toolbar.actions[u'Start Loop'].setEnabled(True) + self.toolbar.actions[u'Stop Loop'].setEnabled(True) + if item.is_media(): + self.toolbar.setVisible(False) + self.mediabar.setVisible(True) + + def enablePreviewToolBar(self, item): + """ + Allows the Preview toolbar to be customised + """ + self.toolbar.setVisible(True) + self.mediabar.setVisible(False) + self.toolbar.makeWidgetsInvisible(self.songEditList) + if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: + self.toolbar.makeWidgetsVisible(self.songEditList) + elif item.is_media(): + self.toolbar.setVisible(False) + self.mediabar.setVisible(True) + self.volumeSlider.setAudioOutput(self.audio) + + def refreshServiceItem(self): + """ + Method to update the service item if the screen has changed + """ + log.debug(u'refreshServiceItem live = %s' % self.isLive) + if self.serviceItem.is_text() or self.serviceItem.is_image(): + item = self.serviceItem + item.render() + self._processItem(item, self.selectedRow) + + def addServiceItem(self, item): + """ + Method to install the service item into the controller + Called by plugins + """ + log.debug(u'addServiceItem live = %s' % self.isLive) + item.render() + slideno = 0 + if self.songEdit: + slideno = self.selectedRow + self.songEdit = False + self._processItem(item, slideno) + + def replaceServiceManagerItem(self, item): + """ + Replacement item following a remote edit + """ + if item.__eq__(self.serviceItem): + self._processItem(item, self.previewListWidget.currentRow()) + + def addServiceManagerItem(self, item, slideno): + """ + Method to install the service item into the controller and + request the correct toolbar for the plugin. + Called by ServiceManager + """ + log.debug(u'addServiceManagerItem live = %s' % self.isLive) + # If no valid slide number is specified we take the first one. + if slideno == -1: + slideno = 0 + # If service item is the same as the current on only change slide + if item.__eq__(self.serviceItem): + self.__checkUpdateSelectedSlide(slideno) + self.slideSelected() + return + self._processItem(item, slideno) + + def _processItem(self, serviceItem, slideno): + """ + Loads a ServiceItem into the system from ServiceManager + Display the slide number passed + """ + log.debug(u'processManagerItem live = %s' % self.isLive) + self.onStopLoop() + old_item = self.serviceItem + self.serviceItem = serviceItem + if old_item and self.isLive and old_item.is_capable( + ItemCapabilities.ProvidesOwnDisplay): + self._resetBlank() + Receiver.send_message(u'%s_start' % serviceItem.name.lower(), + [serviceItem, self.isLive, self.hideMode(), slideno]) + self.slideList = {} + width = self.parent.controlSplitter.sizes()[self.split] + self.previewListWidget.clear() + self.previewListWidget.setRowCount(0) + self.previewListWidget.setColumnWidth(0, width) + if self.isLive: + self.songMenu.menu().clear() + row = 0 + text = [] + for framenumber, frame in enumerate(self.serviceItem.get_frames()): + self.previewListWidget.setRowCount( + self.previewListWidget.rowCount() + 1) + item = QtGui.QTableWidgetItem() + slideHeight = 0 + if self.serviceItem.is_text(): + if frame[u'verseTag']: + # These tags are already translated. + verse_def = frame[u'verseTag'] + verse_def = u'%s%s' % (verse_def[0], verse_def[1:]) + two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:]) + row = two_line_def + if self.isLive: + if verse_def not in self.slideList: + self.slideList[verse_def] = framenumber + self.songMenu.menu().addAction(verse_def, + self.onSongBarHandler) + else: + row += 1 + item.setText(frame[u'text']) + else: + label = QtGui.QLabel() + label.setMargin(4) + label.setScaledContents(True) + if self.serviceItem.is_command(): + image = resize_image(frame[u'image'], + self.parent.renderer.width, + self.parent.renderer.height) + else: + # If current slide set background to image + if framenumber == slideno: + self.serviceItem.bg_image_bytes = \ + self.image_manager.get_image_bytes(frame[u'title']) + image = self.image_manager.get_image(frame[u'title']) + label.setPixmap(QtGui.QPixmap.fromImage(image)) + self.previewListWidget.setCellWidget(framenumber, 0, label) + slideHeight = width * self.parent.renderer.screen_ratio + row += 1 + text.append(unicode(row)) + self.previewListWidget.setItem(framenumber, 0, item) + if slideHeight != 0: + self.previewListWidget.setRowHeight(framenumber, slideHeight) + self.previewListWidget.setVerticalHeaderLabels(text) + if self.serviceItem.is_text(): + self.previewListWidget.resizeRowsToContents() + self.previewListWidget.setColumnWidth(0, + self.previewListWidget.viewport().size().width()) + self.__updatePreviewSelection(slideno) + self.enableToolBar(serviceItem) + # Pass to display for viewing. + # Postpone image build, we need to do this later to avoid the theme + # flashing on the screen + if not self.serviceItem.is_image(): + self.display.buildHtml(self.serviceItem) + if serviceItem.is_media(): + self.onMediaStart(serviceItem) + self.slideSelected(True) + self.previewListWidget.setFocus() + if old_item: + # Close the old item after the new one is opened + # This avoids the service theme/desktop flashing on screen + # However opening a new item of the same type will automatically + # close the previous, so make sure we don't close the new one. + if old_item.is_command() and not serviceItem.is_command(): + Receiver.send_message(u'%s_stop' % + old_item.name.lower(), [old_item, self.isLive]) + if old_item.is_media() and not serviceItem.is_media(): + self.onMediaClose() + Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, + [serviceItem]) + + def __updatePreviewSelection(self, slideno): + """ + Utility method to update the selected slide in the list. + """ + if slideno > self.previewListWidget.rowCount(): + self.previewListWidget.selectRow( + self.previewListWidget.rowCount() - 1) + else: + self.__checkUpdateSelectedSlide(slideno) + + def onTextRequest(self): + """ + Return the text for the current item in controller + """ + data = [] + if self.serviceItem: + for framenumber, frame in enumerate(self.serviceItem.get_frames()): + dataItem = {} + if self.serviceItem.is_text(): + dataItem[u'tag'] = unicode(frame[u'verseTag']) + dataItem[u'text'] = unicode(frame[u'html']) + else: + dataItem[u'tag'] = unicode(framenumber) + dataItem[u'text'] = u'' + dataItem[u'selected'] = \ + (self.previewListWidget.currentRow() == framenumber) + data.append(dataItem) + Receiver.send_message(u'slidecontroller_%s_text_response' + % self.typePrefix, data) + + # Screen event methods + def onSlideSelectedFirst(self): + """ + Go to the first slide. + """ + if not self.serviceItem: + return + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + self.updatePreview() + else: + self.previewListWidget.selectRow(0) + self.slideSelected() + + def onSlideSelectedIndex(self, message): + """ + Go to the requested slide + """ + index = int(message[0]) + if not self.serviceItem: + return + if self.serviceItem.is_command(): + Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, index]) + self.updatePreview() + else: + self.__checkUpdateSelectedSlide(index) + self.slideSelected() + + def mainDisplaySetBackground(self): + """ + Allow the main display to blank the main display at startup time + """ + log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) + display_type = QtCore.QSettings().value( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'')).toString() + if not self.display.primary: + # Order done to handle initial conversion + if display_type == u'themed': + self.onThemeDisplay(True) + elif display_type == u'hidden': + self.onHideDisplay(True) + else: + self.onBlankDisplay(True) + + def onSlideBlank(self): + """ + Handle the slidecontroller blank event + """ + self.onBlankDisplay(True) + + def onSlideUnblank(self): + """ + Handle the slidecontroller unblank event + """ + self.onBlankDisplay(False) + + def onBlankDisplay(self, checked=None): + """ + Handle the blank screen button actions + """ + if checked is None: + checked = self.blankScreen.isChecked() + log.debug(u'onBlankDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.blankScreen) + self.blankScreen.setChecked(checked) + self.themeScreen.setChecked(False) + self.desktopScreen.setChecked(False) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'blanked')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.blankPlugin() + self.updatePreview() + + def onThemeDisplay(self, checked=None): + """ + Handle the Theme screen button + """ + if checked is None: + checked = self.themeScreen.isChecked() + log.debug(u'onThemeDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.themeScreen) + self.blankScreen.setChecked(False) + self.themeScreen.setChecked(checked) + self.desktopScreen.setChecked(False) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'themed')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.blankPlugin() + self.updatePreview() + + def onHideDisplay(self, checked=None): + """ + Handle the Hide screen button + """ + if checked is None: + checked = self.desktopScreen.isChecked() + log.debug(u'onHideDisplay %s' % checked) + self.hideMenu.setDefaultAction(self.desktopScreen) + self.blankScreen.setChecked(False) + self.themeScreen.setChecked(False) + self.desktopScreen.setChecked(checked) + if checked: + QtCore.QSettings().setValue( + self.parent.generalSettingsSection + u'/screen blank', + QtCore.QVariant(u'hidden')) + else: + QtCore.QSettings().remove( + self.parent.generalSettingsSection + u'/screen blank') + self.hidePlugin(checked) + self.updatePreview() + + def blankPlugin(self): + """ + Blank/Hide the display screen within a plugin if required. + """ + hide_mode = self.hideMode() + log.debug(u'blankPlugin %s ', hide_mode) + if self.serviceItem is not None: + if hide_mode: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_hide', hide_mode) + Receiver.send_message(u'%s_blank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, hide_mode]) + else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') + Receiver.send_message(u'%s_unblank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + + def hidePlugin(self, hide): + """ + Tell the plugin to hide the display screen. + """ + log.debug(u'hidePlugin %s ', hide) + if self.serviceItem is not None: + if hide: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + Receiver.send_message(u'%s_hide' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') + Receiver.send_message(u'%s_unblank' + % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + + def onSlideSelected(self, start=False): + """ + Slide selected in controller + """ + self.slideSelected() + + def slideSelected(self, start=False): + """ + Generate the preview when you click on a slide. + if this is the Live Controller also display on the screen + """ + row = self.previewListWidget.currentRow() + self.selectedRow = 0 + if row > -1 and row < self.previewListWidget.rowCount(): + if self.serviceItem.is_command(): + if self.isLive and not start: + Receiver.send_message( + u'%s_slide' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive, row]) + self.updatePreview() + else: + toDisplay = self.serviceItem.get_rendered_frame(row) + if self.serviceItem.is_text(): + frame = self.display.text(toDisplay) + else: + if start: + self.display.buildHtml(self.serviceItem, toDisplay) + frame = self.display.preview() + else: + frame = self.display.image(toDisplay) + # reset the store used to display first image + self.serviceItem.bg_image_bytes = None + self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.selectedRow = row + self.__checkUpdateSelectedSlide(row) + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, + row) + + def onSlideChange(self, row): + """ + The slide has been changed. Update the slidecontroller accordingly + """ + self.__checkUpdateSelectedSlide(row) + self.updatePreview() + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, + row) + + def updatePreview(self): + """ + This updates the preview frame, for example after changing a slide or + using *Blank to Theme*. + """ + log.debug(u'updatePreview %s ' % self.screens.current[u'primary']) + if not self.screens.current[u'primary'] and self.serviceItem and \ + self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): + # Grab now, but try again in a couple of seconds if slide change + # is slow + QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) + QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) + else: + self.slidePreview.setPixmap( + QtGui.QPixmap.fromImage(self.display.preview())) + + def grabMainDisplay(self): + """ + Creates an image of the current screen and updates the preview frame. + """ + winid = QtGui.QApplication.desktop().winId() + rect = self.screens.current[u'size'] + winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), + rect.y(), rect.width(), rect.height()) + self.slidePreview.setPixmap(winimg) + + def onSlideSelectedNext(self): + """ + Go to the next slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command() and self.isLive: + self.updatePreview() + else: + row = self.previewListWidget.currentRow() + 1 + if row == self.previewListWidget.rowCount(): + if QtCore.QSettings().value(self.parent.generalSettingsSection + + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool): + row = 0 + else: + return + self.__checkUpdateSelectedSlide(row) + self.slideSelected() + + def onSlideSelectedPrevious(self): + """ + Go to the previous slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command() and self.isLive: + self.updatePreview() + else: + row = self.previewListWidget.currentRow() - 1 + if row == -1: + if QtCore.QSettings().value(self.parent.generalSettingsSection + + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool): + row = self.previewListWidget.rowCount() - 1 + else: + return + self.__checkUpdateSelectedSlide(row) + self.slideSelected() + + def __checkUpdateSelectedSlide(self, row): + if row + 1 < self.previewListWidget.rowCount(): + self.previewListWidget.scrollToItem( + self.previewListWidget.item(row + 1, 0)) + self.previewListWidget.selectRow(row) + + def onSlideSelectedLast(self): + """ + Go to the last slide. + """ + if not self.serviceItem: + return + Receiver.send_message(u'%s_last' % self.serviceItem.name.lower(), + [self.serviceItem, self.isLive]) + if self.serviceItem.is_command(): + self.updatePreview() + else: + self.previewListWidget.selectRow( + self.previewListWidget.rowCount() - 1) + self.slideSelected() + + def onToggleLoop(self, toggled): + """ + Toggles the loop state. + """ + if self.toolbar.actions[u'Start Loop'].isVisible(): + self.onStartLoop() + else: + self.onStopLoop() + + def onStartLoop(self): + """ + Start the timer loop running and store the timer id + """ + if self.previewListWidget.rowCount() > 1: + self.timer_id = self.startTimer( + int(self.delaySpinBox.value()) * 1000) + self.toolbar.actions[u'Stop Loop'].setVisible(True) + self.toolbar.actions[u'Start Loop'].setVisible(False) + + def onStopLoop(self): + """ + Stop the timer loop running + """ + if self.timer_id != 0: + self.killTimer(self.timer_id) + self.timer_id = 0 + self.toolbar.actions[u'Start Loop'].setVisible(True) + self.toolbar.actions[u'Stop Loop'].setVisible(False) + + def timerEvent(self, event): + """ + If the timer event is for this window select next slide + """ + if event.timerId() == self.timer_id: + self.onSlideSelectedNext() + + def onEditSong(self): + """ + From the preview display requires the service Item to be editied + """ + self.songEdit = True + Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), + u'P:%s' % self.serviceItem.edit_id) + + def onGoLiveClick(self): + """ + triggered by clicking the Preview slide items + """ + if QtCore.QSettings().value(u'advanced/double click live', + QtCore.QVariant(False)).toBool(): + self.onGoLive() + + def onGoLive(self): + """ + If preview copy slide item to live + """ + row = self.previewListWidget.currentRow() + if row > -1 and row < self.previewListWidget.rowCount(): + if self.serviceItem.from_service: + Receiver.send_message('servicemanager_preview_live', + u'%s:%s' % (self.serviceItem._uuid, row)) + else: + self.parent.liveController.addServiceManagerItem( + self.serviceItem, row) + + def onMediaStart(self, item): + """ + Respond to the arrival of a media service item + """ + log.debug(u'SlideController onMediaStart') + file = os.path.join(item.get_frame_path(), item.get_frame_title()) + if self.isLive: + self.display.video(file, self.volume) + self.volumeSlider.setValue(self.volume) + else: + self.mediaObject.stop() + self.mediaObject.clearQueue() + self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) + self.seekSlider.setMediaObject(self.mediaObject) + self.seekSlider.show() + self.onMediaPlay() + + def mediaVolume(self): + """ + Respond to the release of Volume Slider + """ + log.debug(u'SlideController mediaVolume') + self.volume = self.volumeSlider.value() + self.display.videoVolume(self.volume) + + def onMediaPause(self): + """ + Respond to the Pause from the media Toolbar + """ + log.debug(u'SlideController onMediaPause') + if self.isLive: + self.display.videoPause() + else: + self.mediaObject.pause() + + def onMediaPlay(self): + """ + Respond to the Play from the media Toolbar + """ + log.debug(u'SlideController onMediaPlay') + if self.isLive: + self.display.videoPlay() + else: + self.slidePreview.hide() + self.video.show() + self.mediaObject.play() + + def onMediaStop(self): + """ + Respond to the Stop from the media Toolbar + """ + log.debug(u'SlideController onMediaStop') + if self.isLive: + self.display.videoStop() + else: + self.mediaObject.stop() + self.video.hide() + self.slidePreview.clear() + self.slidePreview.show() + + def onMediaClose(self): + """ + Respond to a request to close the Video + """ + log.debug(u'SlideController onMediaStop') + if self.isLive: + self.display.resetVideo() + else: + self.mediaObject.stop() + self.mediaObject.clearQueue() + self.video.hide() + self.slidePreview.clear() + self.slidePreview.show() + + def _resetBlank(self): + """ + Used by command items which provide their own displays to reset the + screen hide attributes + """ + hide_mode = self.hideMode() + if hide_mode == HideMode.Blank: + self.onBlankDisplay(True) + elif hide_mode == HideMode.Theme: + self.onThemeDisplay(True) + elif hide_mode == HideMode.Screen: + self.onHideDisplay(True) + else: + self.hidePlugin(False) + + def hideMode(self): + """ + Determine what the hide mode should be according to the blank button + """ + if not self.isLive: + return None + elif self.blankScreen.isChecked(): + return HideMode.Blank + elif self.themeScreen.isChecked(): + return HideMode.Theme + elif self.desktopScreen.isChecked(): + return HideMode.Screen + else: + return None From 0a5155b822891e3e7cecceb434b68e4c2c91e1a4 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Wed, 25 May 2011 20:11:56 -0400 Subject: [PATCH 08/12] Final changes to enabling looping of slides now it works --- openlp/core/ui/slidecontroller.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4a0a3bf39..90c7abf85 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -937,12 +937,12 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: row = self.previewListWidget.currentRow() + 1 + enable_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() if row == self.previewListWidget.rowCount(): - if QtCore.QSettings().value(self.parent.generalSettingsSection - + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool): + if enable_loop: row = 0 else: - return + pass self.__checkUpdateSelectedSlide(row) self.slideSelected() @@ -959,11 +959,11 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() - 1 if row == -1: - if QtCore.QSettings().value(self.parent.generalSettingsSection - + u'generalSettingsSection/enable slide loop', QtCore.QVariant(True).toBool): + enable_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() + if enable_loop: row = self.previewListWidget.rowCount() - 1 else: - return + row = 0 self.__checkUpdateSelectedSlide(row) self.slideSelected() From 9221c8cb60c0a5ce21f01edde1a76fab8001f039 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Thu, 26 May 2011 06:37:36 -0400 Subject: [PATCH 09/12] Corrections to the code, enable_loop is now can_loop, and fits the 80 character line requirement as best i could get it too --- openlp/core/ui/slidecontroller.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 90c7abf85..8260ce222 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -937,12 +937,13 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: row = self.previewListWidget.currentRow() + 1 - enable_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() + can_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool() if row == self.previewListWidget.rowCount(): - if enable_loop: + if can_loop: row = 0 else: - pass + row = self.previewListWidget.rowCount() - 1 self.__checkUpdateSelectedSlide(row) self.slideSelected() @@ -959,8 +960,9 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() - 1 if row == -1: - enable_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + u'/enable slide loop', QtCore.QVariant(True)).toBool() - if enable_loop: + can_loop = QtCore.QSettings().value(self.parent.generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool() + if can_loop: row = self.previewListWidget.rowCount() - 1 else: row = 0 From 254bac86d46669407c13a7d327e135cac4fa59b0 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Thu, 26 May 2011 06:56:21 -0400 Subject: [PATCH 10/12] Corrections to the code, enable_loop is now can_loop, and fits the 80 character line requirement as best i could get it too and gets rid of the odd emtpy line in generaltab.py --- openlp/core/ui/generaltab.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 95e8dda4e..dad6ab339 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -387,4 +387,3 @@ class GeneralTab(SettingsTab): Called when the width, height, x position or y position has changed. """ self.display_changed = True - From 6b90adea6edfc5d6fcc827f31fe5c377064b10c6 Mon Sep 17 00:00:00 2001 From: Josh Miller Date: Thu, 26 May 2011 07:01:48 -0400 Subject: [PATCH 11/12] Corrections to the code, enable_loop is now can_loop, and fits the 80 character line requirement as best i could get it too and gets rid of the odd emtpy line in generaltab.py and changes can_loop directly to the setting required --- openlp/core/ui/slidecontroller.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8260ce222..782684b45 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -937,10 +937,9 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: row = self.previewListWidget.currentRow() + 1 - can_loop = QtCore.QSettings().value(self.parent.generalSettingsSection - + u'/enable slide loop', QtCore.QVariant(True)).toBool() if row == self.previewListWidget.rowCount(): - if can_loop: + if QtCore.QSettings().value(self.parent.generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool(): row = 0 else: row = self.previewListWidget.rowCount() - 1 @@ -960,9 +959,8 @@ class SlideController(QtGui.QWidget): else: row = self.previewListWidget.currentRow() - 1 if row == -1: - can_loop = QtCore.QSettings().value(self.parent.generalSettingsSection - + u'/enable slide loop', QtCore.QVariant(True)).toBool() - if can_loop: + if QtCore.QSettings().value(self.parent.generalSettingsSection + + u'/enable slide loop', QtCore.QVariant(True)).toBool(): row = self.previewListWidget.rowCount() - 1 else: row = 0 From acdbefd922a69f8704126cac2edf95825a8eb5e0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 26 May 2011 18:11:22 +0100 Subject: [PATCH 12/12] Fixes --- openlp.pyw | 2 +- openlp/__init__.py | 2 +- openlp/core/__init__.py | 2 +- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/db.py | 2 +- openlp/core/lib/displaytags.py | 2 +- openlp/core/lib/dockwidget.py | 2 +- openlp/core/lib/eventreceiver.py | 2 +- openlp/core/lib/htmlbuilder.py | 2 +- openlp/core/lib/imagemanager.py | 2 +- openlp/core/lib/listwidgetwithdnd.py | 2 +- openlp/core/lib/mediamanageritem.py | 2 +- openlp/core/lib/plugin.py | 2 +- openlp/core/lib/pluginmanager.py | 2 +- openlp/core/lib/renderer.py | 2 +- openlp/core/lib/searchedit.py | 2 +- openlp/core/lib/serviceitem.py | 2 +- openlp/core/lib/settingsmanager.py | 2 +- openlp/core/lib/settingstab.py | 2 +- openlp/core/lib/spelltextedit.py | 2 +- openlp/core/lib/theme.py | 2 +- openlp/core/lib/toolbar.py | 2 +- openlp/core/lib/ui.py | 2 +- openlp/core/theme/__init__.py | 2 +- openlp/core/theme/theme.py | 2 +- openlp/core/ui/__init__.py | 2 +- openlp/core/ui/aboutdialog.py | 6 +++--- openlp/core/ui/aboutform.py | 2 +- openlp/core/ui/advancedtab.py | 2 +- openlp/core/ui/displaytagdialog.py | 2 +- openlp/core/ui/displaytagform.py | 2 +- openlp/core/ui/exceptiondialog.py | 2 +- openlp/core/ui/exceptionform.py | 2 +- openlp/core/ui/filerenamedialog.py | 2 +- openlp/core/ui/filerenameform.py | 2 +- openlp/core/ui/firsttimeform.py | 2 +- openlp/core/ui/firsttimelanguagedialog.py | 2 +- openlp/core/ui/firsttimelanguageform.py | 2 +- openlp/core/ui/firsttimewizard.py | 2 +- openlp/core/ui/generaltab.py | 2 +- openlp/core/ui/maindisplay.py | 2 +- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/mediadockmanager.py | 2 +- openlp/core/ui/plugindialog.py | 2 +- openlp/core/ui/pluginform.py | 2 +- openlp/core/ui/printservicedialog.py | 2 +- openlp/core/ui/printserviceform.py | 2 +- openlp/core/ui/screen.py | 2 +- openlp/core/ui/serviceitemeditdialog.py | 2 +- openlp/core/ui/serviceitemeditform.py | 2 +- openlp/core/ui/servicemanager.py | 2 +- openlp/core/ui/servicenoteform.py | 2 +- openlp/core/ui/settingsdialog.py | 2 +- openlp/core/ui/settingsform.py | 2 +- openlp/core/ui/shortcutlistdialog.py | 2 +- openlp/core/ui/shortcutlistform.py | 2 +- openlp/core/ui/slidecontroller.py | 2 +- openlp/core/ui/splashscreen.py | 2 +- openlp/core/ui/starttimedialog.py | 2 +- openlp/core/ui/starttimeform.py | 2 +- openlp/core/ui/themeform.py | 2 +- openlp/core/ui/thememanager.py | 2 +- openlp/core/ui/themestab.py | 2 +- openlp/core/ui/themewizard.py | 2 +- openlp/core/ui/wizard.py | 2 +- openlp/core/utils/__init__.py | 2 +- openlp/core/utils/actions.py | 2 +- openlp/core/utils/languagemanager.py | 2 +- openlp/plugins/__init__.py | 2 +- openlp/plugins/alerts/__init__.py | 2 +- openlp/plugins/alerts/alertsplugin.py | 2 +- openlp/plugins/alerts/forms/__init__.py | 2 +- openlp/plugins/alerts/forms/alertdialog.py | 2 +- openlp/plugins/alerts/forms/alertform.py | 2 +- openlp/plugins/alerts/lib/__init__.py | 2 +- openlp/plugins/alerts/lib/alertsmanager.py | 2 +- openlp/plugins/alerts/lib/alertstab.py | 2 +- openlp/plugins/alerts/lib/db.py | 2 +- openlp/plugins/bibles/__init__.py | 2 +- openlp/plugins/bibles/bibleplugin.py | 2 +- openlp/plugins/bibles/forms/__init__.py | 2 +- openlp/plugins/bibles/forms/bibleimportform.py | 2 +- openlp/plugins/bibles/lib/__init__.py | 2 +- openlp/plugins/bibles/lib/biblestab.py | 2 +- openlp/plugins/bibles/lib/csvbible.py | 2 +- openlp/plugins/bibles/lib/db.py | 2 +- openlp/plugins/bibles/lib/http.py | 2 +- openlp/plugins/bibles/lib/manager.py | 2 +- openlp/plugins/bibles/lib/mediaitem.py | 2 +- openlp/plugins/bibles/lib/openlp1.py | 2 +- openlp/plugins/bibles/lib/opensong.py | 2 +- openlp/plugins/bibles/lib/osis.py | 2 +- openlp/plugins/bibles/lib/versereferencelist.py | 2 +- openlp/plugins/custom/__init__.py | 2 +- openlp/plugins/custom/customplugin.py | 2 +- openlp/plugins/custom/forms/__init__.py | 2 +- openlp/plugins/custom/forms/editcustomdialog.py | 2 +- openlp/plugins/custom/forms/editcustomform.py | 2 +- openlp/plugins/custom/forms/editcustomslidedialog.py | 2 +- openlp/plugins/custom/forms/editcustomslideform.py | 2 +- openlp/plugins/custom/lib/__init__.py | 2 +- openlp/plugins/custom/lib/customtab.py | 2 +- openlp/plugins/custom/lib/customxmlhandler.py | 2 +- openlp/plugins/custom/lib/db.py | 2 +- openlp/plugins/custom/lib/mediaitem.py | 2 +- openlp/plugins/images/__init__.py | 2 +- openlp/plugins/images/imageplugin.py | 2 +- openlp/plugins/images/lib/__init__.py | 2 +- openlp/plugins/images/lib/mediaitem.py | 2 +- openlp/plugins/media/__init__.py | 2 +- openlp/plugins/media/lib/__init__.py | 2 +- openlp/plugins/media/lib/mediaitem.py | 2 +- openlp/plugins/media/lib/mediatab.py | 2 +- openlp/plugins/media/mediaplugin.py | 2 +- openlp/plugins/presentations/__init__.py | 2 +- openlp/plugins/presentations/lib/__init__.py | 2 +- openlp/plugins/presentations/lib/impresscontroller.py | 2 +- openlp/plugins/presentations/lib/mediaitem.py | 2 +- openlp/plugins/presentations/lib/messagelistener.py | 2 +- openlp/plugins/presentations/lib/powerpointcontroller.py | 2 +- openlp/plugins/presentations/lib/pptviewcontroller.py | 2 +- openlp/plugins/presentations/lib/pptviewlib/ppttest.py | 2 +- openlp/plugins/presentations/lib/presentationcontroller.py | 2 +- openlp/plugins/presentations/lib/presentationtab.py | 2 +- openlp/plugins/presentations/presentationplugin.py | 2 +- openlp/plugins/remotes/__init__.py | 2 +- openlp/plugins/remotes/lib/__init__.py | 2 +- openlp/plugins/remotes/lib/httpserver.py | 2 +- openlp/plugins/remotes/lib/remotetab.py | 2 +- openlp/plugins/remotes/remoteplugin.py | 2 +- openlp/plugins/songs/__init__.py | 2 +- openlp/plugins/songs/forms/__init__.py | 2 +- openlp/plugins/songs/forms/authorsdialog.py | 2 +- openlp/plugins/songs/forms/authorsform.py | 2 +- openlp/plugins/songs/forms/editsongdialog.py | 2 +- openlp/plugins/songs/forms/editsongform.py | 2 +- openlp/plugins/songs/forms/editversedialog.py | 2 +- openlp/plugins/songs/forms/editverseform.py | 2 +- openlp/plugins/songs/forms/songbookdialog.py | 2 +- openlp/plugins/songs/forms/songbookform.py | 2 +- openlp/plugins/songs/forms/songexportform.py | 2 +- openlp/plugins/songs/forms/songimportform.py | 2 +- openlp/plugins/songs/forms/songmaintenancedialog.py | 2 +- openlp/plugins/songs/forms/songmaintenanceform.py | 2 +- openlp/plugins/songs/forms/topicsdialog.py | 2 +- openlp/plugins/songs/forms/topicsform.py | 2 +- openlp/plugins/songs/lib/__init__.py | 2 +- openlp/plugins/songs/lib/cclifileimport.py | 2 +- openlp/plugins/songs/lib/db.py | 2 +- openlp/plugins/songs/lib/easislidesimport.py | 2 +- openlp/plugins/songs/lib/ewimport.py | 2 +- openlp/plugins/songs/lib/foilpresenterimport.py | 2 +- openlp/plugins/songs/lib/importer.py | 2 +- openlp/plugins/songs/lib/mediaitem.py | 2 +- openlp/plugins/songs/lib/olp1import.py | 2 +- openlp/plugins/songs/lib/olpimport.py | 2 +- openlp/plugins/songs/lib/oooimport.py | 2 +- openlp/plugins/songs/lib/openlyricsexport.py | 2 +- openlp/plugins/songs/lib/openlyricsimport.py | 2 +- openlp/plugins/songs/lib/opensongimport.py | 2 +- openlp/plugins/songs/lib/sofimport.py | 2 +- openlp/plugins/songs/lib/songbeamerimport.py | 2 +- openlp/plugins/songs/lib/songimport.py | 2 +- openlp/plugins/songs/lib/songshowplusimport.py | 2 +- openlp/plugins/songs/lib/songstab.py | 2 +- openlp/plugins/songs/lib/ui.py | 2 +- openlp/plugins/songs/lib/wowimport.py | 2 +- openlp/plugins/songs/lib/xml.py | 2 +- openlp/plugins/songs/songsplugin.py | 2 +- openlp/plugins/songusage/__init__.py | 2 +- openlp/plugins/songusage/forms/__init__.py | 2 +- openlp/plugins/songusage/forms/songusagedeletedialog.py | 2 +- openlp/plugins/songusage/forms/songusagedeleteform.py | 2 +- openlp/plugins/songusage/forms/songusagedetaildialog.py | 2 +- openlp/plugins/songusage/forms/songusagedetailform.py | 2 +- openlp/plugins/songusage/lib/__init__.py | 2 +- openlp/plugins/songusage/lib/db.py | 2 +- openlp/plugins/songusage/songusageplugin.py | 2 +- setup.py | 2 +- 179 files changed, 181 insertions(+), 181 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 93337e8e9..f796fa45f 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -8,7 +8,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/__init__.py b/openlp/__init__.py index a7080a5ca..d48d3f28a 100644 --- a/openlp/__init__.py +++ b/openlp/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index 7cae05ab3..a6c804a99 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 56300fc62..35cd14bd2 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index e6ab584d7..5b03e5fa4 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/displaytags.py b/openlp/core/lib/displaytags.py index 785ef1c70..c59f6e868 100644 --- a/openlp/core/lib/displaytags.py +++ b/openlp/core/lib/displaytags.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index c1b8fae3d..5c461bbf8 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index fd2dff6c4..0de1a6e0b 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index fad2be519..cf7e73648 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 3b18bd014..214fa4bda 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/listwidgetwithdnd.py b/openlp/core/lib/listwidgetwithdnd.py index dc2128f25..5ebc7bfb7 100644 --- a/openlp/core/lib/listwidgetwithdnd.py +++ b/openlp/core/lib/listwidgetwithdnd.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 06e7a313c..9b76447ff 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 62110fea7..0417446c1 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index ffb7774a8..6a77939e1 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index f97719128..079a9aa9c 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index 6fcb973f2..8c18ab09b 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 8b89ce3ff..37723321c 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 6d3d86a82..7eff1c00a 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index aa5c7dfcf..c5fd86697 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 9e8b54aec..84cb30af6 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index c3d860666..b9e588f15 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 622220cec..9f9ab5197 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 9e7512cfe..5055bb619 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/theme/__init__.py b/openlp/core/theme/__init__.py index e9a32167d..1b0999c6c 100644 --- a/openlp/core/theme/__init__.py +++ b/openlp/core/theme/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index 175dd4212..9a0bee2c2 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 661d45632..1555c134c 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index d4a51d203..7855d2c2a 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # @@ -116,7 +116,7 @@ class Ui_AboutDialog(object): u'Scott "sguerrieri" Guerrieri', u'Matthias "matthub" Hub', u'Meinert "m2j" Jordan', u'Armin "orangeshirt" K\xf6hler', u'Joshua "milleja46" Miller', - u'Stevan "smpettit" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', + u'Stevan "StevanP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', u'Christian "crichter" Richter', u'Philip "Phill" Ridout', u'Jeffrey "whydoubt" Smith', u'Maikel Stuivenberg', u'Frode "frodus" Woldsund'] @@ -230,7 +230,7 @@ class Ui_AboutDialog(object): 'Portions copyright \xa9 2004-2011 %s')) % (u'Raoul Snyman', u'Tim Bentley, Jonathan Corwin, Michael Gorven, Gerald Britton, ' u'Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin K\xf6hler, ' - u'Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias ' + u'Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias ' u'P\xf5ldaru, Christian Richter, Philip Ridout, Jeffrey Smith, ' u'Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund') licence = translate('OpenLP.AboutForm', diff --git a/openlp/core/ui/aboutform.py b/openlp/core/ui/aboutform.py index f92efbdfe..f3e809ebc 100644 --- a/openlp/core/ui/aboutform.py +++ b/openlp/core/ui/aboutform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 63aec4003..bad1ea822 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/displaytagdialog.py index 2758989c2..f501f03f6 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/displaytagdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/displaytagform.py b/openlp/core/ui/displaytagform.py index 1ac67284f..78a78f8fa 100644 --- a/openlp/core/ui/displaytagform.py +++ b/openlp/core/ui/displaytagform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/exceptiondialog.py b/openlp/core/ui/exceptiondialog.py index 274478312..58669b96c 100644 --- a/openlp/core/ui/exceptiondialog.py +++ b/openlp/core/ui/exceptiondialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 755168142..69f3c14af 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/filerenamedialog.py b/openlp/core/ui/filerenamedialog.py index acdcc1ab0..cca7bcd16 100644 --- a/openlp/core/ui/filerenamedialog.py +++ b/openlp/core/ui/filerenamedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/filerenameform.py b/openlp/core/ui/filerenameform.py index 08c8de53c..d1516a18c 100644 --- a/openlp/core/ui/filerenameform.py +++ b/openlp/core/ui/filerenameform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index e6a34e9e8..3b006bf5e 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/firsttimelanguagedialog.py b/openlp/core/ui/firsttimelanguagedialog.py index bd8b3bdec..8a891780d 100644 --- a/openlp/core/ui/firsttimelanguagedialog.py +++ b/openlp/core/ui/firsttimelanguagedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/firsttimelanguageform.py b/openlp/core/ui/firsttimelanguageform.py index 81c7f5b4b..3661ba51b 100644 --- a/openlp/core/ui/firsttimelanguageform.py +++ b/openlp/core/ui/firsttimelanguageform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 533aba467..6852d533a 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index e19eca41f..05a4be414 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index afe30f499..dc7c28ded 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index a4cc2ed06..82f1b9253 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index 1c762468a..f22ec0b92 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index b00422a71..08683a2b6 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index 754aef036..0f7f6dbeb 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index e2ed7ead1..4afd58b74 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 7dc1a09c5..09ae8857f 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 2f99c3a16..2b6e10644 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/serviceitemeditdialog.py b/openlp/core/ui/serviceitemeditdialog.py index 827f76367..febc01524 100644 --- a/openlp/core/ui/serviceitemeditdialog.py +++ b/openlp/core/ui/serviceitemeditdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 1b229daf7..e05f4751e 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 9a530d075..7851e5e41 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/servicenoteform.py b/openlp/core/ui/servicenoteform.py index 3c202c4b1..9a6cb4e22 100644 --- a/openlp/core/ui/servicenoteform.py +++ b/openlp/core/ui/servicenoteform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 72e6b260f..6bdf4f749 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 98417077e..5ecb61c3f 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 1e3de964e..b98df4cf4 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 373494a91..d679d6cfa 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 6e915352b..feb67d72f 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/splashscreen.py b/openlp/core/ui/splashscreen.py index 43401bbbb..1d4c845d0 100644 --- a/openlp/core/ui/splashscreen.py +++ b/openlp/core/ui/splashscreen.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/starttimedialog.py b/openlp/core/ui/starttimedialog.py index 4a06cabd1..42d151dcc 100644 --- a/openlp/core/ui/starttimedialog.py +++ b/openlp/core/ui/starttimedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index 931d1e40a..e33f88da0 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index da9295279..bae3e8692 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 924a1a49f..4dabcfdf7 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 46150c4ac..709b3ad80 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 281c9a5da..2f75a01c2 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index c4dd18bf4..6275b64b6 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index ef6e37d74..4ef445e36 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index c999c4504..b34ed4c9b 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 3e2f3d1a7..0c0a4ed56 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/__init__.py b/openlp/plugins/__init__.py index 8bd9f40b8..fec8ebe71 100644 --- a/openlp/plugins/__init__.py +++ b/openlp/plugins/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/__init__.py b/openlp/plugins/alerts/__init__.py index 3072148b9..c8e82eaa2 100644 --- a/openlp/plugins/alerts/__init__.py +++ b/openlp/plugins/alerts/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 4afdf2981..9a61ff7d6 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/forms/__init__.py b/openlp/plugins/alerts/forms/__init__.py index 0dd20ca69..4c9b353d4 100644 --- a/openlp/plugins/alerts/forms/__init__.py +++ b/openlp/plugins/alerts/forms/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/forms/alertdialog.py b/openlp/plugins/alerts/forms/alertdialog.py index 53d38263f..8ee777ebe 100644 --- a/openlp/plugins/alerts/forms/alertdialog.py +++ b/openlp/plugins/alerts/forms/alertdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 6c2932923..13cb4503a 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/lib/__init__.py b/openlp/plugins/alerts/lib/__init__.py index 83acee990..2ac257585 100644 --- a/openlp/plugins/alerts/lib/__init__.py +++ b/openlp/plugins/alerts/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 6ff038c62..c55e76ef7 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 01a9c853f..31e59a35d 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/alerts/lib/db.py b/openlp/plugins/alerts/lib/db.py index 58f6cb092..b70dbffd2 100644 --- a/openlp/plugins/alerts/lib/db.py +++ b/openlp/plugins/alerts/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/__init__.py b/openlp/plugins/bibles/__init__.py index 0dc4208c6..273148af2 100644 --- a/openlp/plugins/bibles/__init__.py +++ b/openlp/plugins/bibles/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 5ee031932..2deb86cc1 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/forms/__init__.py b/openlp/plugins/bibles/forms/__init__.py index d13e049d3..83b444394 100644 --- a/openlp/plugins/bibles/forms/__init__.py +++ b/openlp/plugins/bibles/forms/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index ffbf6dbb1..e05e29d57 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index b62a9f791..9fda8fbd6 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index dbfb3fd97..321148a22 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index ffe03908d..37764108a 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index e494f16ea..c896528ea 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 44b2d33a7..b66aa0373 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 1991f646d..e367e091e 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 6d434725e..b245f7241 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/openlp1.py b/openlp/plugins/bibles/lib/openlp1.py index 27e99d03b..c3a1c9f68 100644 --- a/openlp/plugins/bibles/lib/openlp1.py +++ b/openlp/plugins/bibles/lib/openlp1.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 01c181c23..115b08e42 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 85a368853..958d70d90 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/bibles/lib/versereferencelist.py b/openlp/plugins/bibles/lib/versereferencelist.py index af9af0268..c51eb106e 100644 --- a/openlp/plugins/bibles/lib/versereferencelist.py +++ b/openlp/plugins/bibles/lib/versereferencelist.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/__init__.py b/openlp/plugins/custom/__init__.py index 1cf34bfe0..82729a11c 100644 --- a/openlp/plugins/custom/__init__.py +++ b/openlp/plugins/custom/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index b3e208b13..887f813fa 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/forms/__init__.py b/openlp/plugins/custom/forms/__init__.py index 67c02fa19..53953c428 100644 --- a/openlp/plugins/custom/forms/__init__.py +++ b/openlp/plugins/custom/forms/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 08855cc4a..418c7ea76 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 0561298fe..5a23e2066 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/forms/editcustomslidedialog.py b/openlp/plugins/custom/forms/editcustomslidedialog.py index 6eda83d1d..165e6d847 100644 --- a/openlp/plugins/custom/forms/editcustomslidedialog.py +++ b/openlp/plugins/custom/forms/editcustomslidedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/forms/editcustomslideform.py b/openlp/plugins/custom/forms/editcustomslideform.py index 769b543dc..d8087dc2c 100644 --- a/openlp/plugins/custom/forms/editcustomslideform.py +++ b/openlp/plugins/custom/forms/editcustomslideform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/lib/__init__.py b/openlp/plugins/custom/lib/__init__.py index 4df4ede3d..678c0065c 100644 --- a/openlp/plugins/custom/lib/__init__.py +++ b/openlp/plugins/custom/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index a35ddbc38..fb83fab81 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/lib/customxmlhandler.py b/openlp/plugins/custom/lib/customxmlhandler.py index 836a14ec9..e1021fdad 100644 --- a/openlp/plugins/custom/lib/customxmlhandler.py +++ b/openlp/plugins/custom/lib/customxmlhandler.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/lib/db.py b/openlp/plugins/custom/lib/db.py index b276e78f2..83f298856 100644 --- a/openlp/plugins/custom/lib/db.py +++ b/openlp/plugins/custom/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 380b137ea..91af98bea 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/images/__init__.py b/openlp/plugins/images/__init__.py index 17a8d80da..5d9f77ab9 100644 --- a/openlp/plugins/images/__init__.py +++ b/openlp/plugins/images/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 63f488b13..3a05f7923 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index 341ace05d..370dba7b0 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 9f8724c94..f760a984e 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/media/__init__.py b/openlp/plugins/media/__init__.py index 1d451f137..24dc4554a 100644 --- a/openlp/plugins/media/__init__.py +++ b/openlp/plugins/media/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/media/lib/__init__.py b/openlp/plugins/media/lib/__init__.py index b7fca8470..434eec67a 100644 --- a/openlp/plugins/media/lib/__init__.py +++ b/openlp/plugins/media/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 20765504a..9dc17f4d3 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 32b1da226..2e11cdd6b 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 3cd463c8b..e27f73634 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/__init__.py b/openlp/plugins/presentations/__init__.py index a433e7b23..573716b93 100644 --- a/openlp/plugins/presentations/__init__.py +++ b/openlp/plugins/presentations/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/__init__.py b/openlp/plugins/presentations/lib/__init__.py index 0dbe58490..154709800 100644 --- a/openlp/plugins/presentations/lib/__init__.py +++ b/openlp/plugins/presentations/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 7ec01187e..0d0cc43a3 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index c0c5b2c8e..b757b5bfd 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 238e2cfc0..6b2c9cbd2 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 1eb458ba9..fb2ce7bcc 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 36191f8aa..7e2336b75 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py index 7ef7d4654..fe483655c 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py +++ b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index d5629be12..63bd44cc4 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index be553d3f2..5579a2a99 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 0253796a8..171039d15 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/remotes/__init__.py b/openlp/plugins/remotes/__init__.py index fee1b76ff..b4a914d45 100644 --- a/openlp/plugins/remotes/__init__.py +++ b/openlp/plugins/remotes/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/remotes/lib/__init__.py b/openlp/plugins/remotes/lib/__init__.py index cb29f3cfe..c364b4be3 100644 --- a/openlp/plugins/remotes/lib/__init__.py +++ b/openlp/plugins/remotes/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 545cb0144..0ff8bc32e 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 84097ee9c..5041b49e2 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 3ce29889e..8eec7516d 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/__init__.py b/openlp/plugins/songs/__init__.py index 52b8ad06e..79e071eeb 100644 --- a/openlp/plugins/songs/__init__.py +++ b/openlp/plugins/songs/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index e7817b8d1..a224bf00e 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/authorsdialog.py b/openlp/plugins/songs/forms/authorsdialog.py index ec9d8bcf6..8b56b0e65 100644 --- a/openlp/plugins/songs/forms/authorsdialog.py +++ b/openlp/plugins/songs/forms/authorsdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 57577e55c..bcc1b7235 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 88ad40daa..0d864bba8 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 480055a8e..ba4afdfe7 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 495a03be9..16579f6a9 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index d13ff884d..f604f0c5b 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songbookdialog.py b/openlp/plugins/songs/forms/songbookdialog.py index 5508c93c9..68709009b 100644 --- a/openlp/plugins/songs/forms/songbookdialog.py +++ b/openlp/plugins/songs/forms/songbookdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index 343b5b6e3..e927e9bde 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index d2dd4fb67..58550c710 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index ec2c7774b..46d9f1c83 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songmaintenancedialog.py b/openlp/plugins/songs/forms/songmaintenancedialog.py index 0ac0a8925..88fafefad 100644 --- a/openlp/plugins/songs/forms/songmaintenancedialog.py +++ b/openlp/plugins/songs/forms/songmaintenancedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index cc0bae8bc..22e47d7b4 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/topicsdialog.py b/openlp/plugins/songs/forms/topicsdialog.py index cff8ee4c5..3cf298cfc 100644 --- a/openlp/plugins/songs/forms/topicsdialog.py +++ b/openlp/plugins/songs/forms/topicsdialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index 35e543ee4..88149264a 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index a529464df..9e068e7f1 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 6f500dc28..11bb429a8 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/db.py b/openlp/plugins/songs/lib/db.py index 4e3f5b503..5a9be63e3 100644 --- a/openlp/plugins/songs/lib/db.py +++ b/openlp/plugins/songs/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index eb7127f62..11a68c2d8 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 64cabfc32..7d2658245 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index b8c9a6a2a..b78c91762 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 2723ef626..cf2d3f536 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 278d9bf5d..cc36f983a 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 2ae37cca4..022c05414 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index e58567f1c..b617734bd 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 292c94401..34765274d 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index 4f589c474..d12674116 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index 1d03149a5..abd419ec0 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 03b5e9a67..162a0e651 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index ded1ceb65..013a8b0b5 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 97b165c0c..258ed23b4 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 3d3292f0b..ef142c8f8 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d7c4eb30c..b4a7e5061 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 28954b33a..a65e21a28 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/ui.py b/openlp/plugins/songs/lib/ui.py index af8aa1361..1db226b7a 100644 --- a/openlp/plugins/songs/lib/ui.py +++ b/openlp/plugins/songs/lib/ui.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index fbbf60b95..73c851038 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index b49fa2893..7bcf56aa1 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 98f15e32e..696431870 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/__init__.py b/openlp/plugins/songusage/__init__.py index e1ab42f0c..ed9dd1fe6 100644 --- a/openlp/plugins/songusage/__init__.py +++ b/openlp/plugins/songusage/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/forms/__init__.py b/openlp/plugins/songusage/forms/__init__.py index ea03b20c4..f382b0bb9 100644 --- a/openlp/plugins/songusage/forms/__init__.py +++ b/openlp/plugins/songusage/forms/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/forms/songusagedeletedialog.py b/openlp/plugins/songusage/forms/songusagedeletedialog.py index ed527ebae..ec93cc780 100644 --- a/openlp/plugins/songusage/forms/songusagedeletedialog.py +++ b/openlp/plugins/songusage/forms/songusagedeletedialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/forms/songusagedeleteform.py b/openlp/plugins/songusage/forms/songusagedeleteform.py index d9e24fa43..9eea0a6da 100644 --- a/openlp/plugins/songusage/forms/songusagedeleteform.py +++ b/openlp/plugins/songusage/forms/songusagedeleteform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/forms/songusagedetaildialog.py b/openlp/plugins/songusage/forms/songusagedetaildialog.py index 4e8e1eb37..e06127ae8 100644 --- a/openlp/plugins/songusage/forms/songusagedetaildialog.py +++ b/openlp/plugins/songusage/forms/songusagedetaildialog.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 3a889c1cc..3f90961b0 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/lib/__init__.py b/openlp/plugins/songusage/lib/__init__.py index 34fc155dd..3c9c20ecd 100644 --- a/openlp/plugins/songusage/lib/__init__.py +++ b/openlp/plugins/songusage/lib/__init__.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/lib/db.py b/openlp/plugins/songusage/lib/db.py index 0c59156fc..2c6c4fa6c 100644 --- a/openlp/plugins/songusage/lib/db.py +++ b/openlp/plugins/songusage/lib/db.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 77c31705f..7d05e0add 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -7,7 +7,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- # diff --git a/setup.py b/setup.py index 618bbb487..98bf98054 100755 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ # Copyright (c) 2008-2011 Raoul Snyman # # Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # # Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # -# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # # Põldaru, Christian Richter, Philip Ridout, Jeffrey Smith, Maikel # # Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # # --------------------------------------------------------------------------- #