← Back to team overview

openlp-core team mailing list archive

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

 

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

    Requested reviews:
    OpenLP Core (openlp-core)


Small changes in this merge
* make start up message smoother by using a thread
* update plugins to 1.9.1 and make active by default.
* Alerts now delayed by presentations
* Extra keys added to control song, bibles etc.
* ability to split versions by prod and dev to stop confusion later!
* Updated remote client so it works 
* cleaned up the logging levels  
-- 
https://code.launchpad.net/~trb143/openlp/working/+merge/18762
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp.pyw'
--- openlp.pyw	2010-02-06 13:39:14 +0000
+++ openlp.pyw	2010-02-06 15:08:13 +0000
@@ -91,7 +91,7 @@
                     u'version': bits[0],
                     u'build': bits[1]
                 }
-            log.info(u'Openlp version %s build %s' % (
+            log.warn(u'Openlp version %s build %s' % (
                 app_version[u'version'], app_version[u'build']))
         except:
                 app_version = {
@@ -136,7 +136,7 @@
             # now kill the splashscreen
             self.splash.finish(self.mainWindow)
         self.mainWindow.repaint()
-        self.mainWindow.versionCheck()
+        self.mainWindow.versionThread()
         return self.exec_()
 
 def main():

=== modified file 'openlp/core/lib/pluginmanager.py'
--- openlp/core/lib/pluginmanager.py	2009-12-31 12:52:01 +0000
+++ openlp/core/lib/pluginmanager.py	2010-02-06 15:08:13 +0000
@@ -54,7 +54,7 @@
         log.debug(u'Base path %s ', self.basepath)
         self.plugins = []
         # this has to happen after the UI is sorted self.find_plugins(dir)
-        log.info(u'Plugin manager done init')
+        log.warn(u'Plugin manager Initialised')
 
     def find_plugins(self, dir, plugin_helpers):
         """
@@ -200,6 +200,7 @@
                 % (plugin.name, plugin.is_active()))
             if plugin.is_active():
                 plugin.initialise()
+                log.warn(u'Initialisation Complete for %s ' % plugin.name)
             if not plugin.is_active():
                 plugin.remove_toolbox_item()
 
@@ -211,4 +212,5 @@
         log.info(u'finalising plugins')
         for plugin in self.plugins:
             if plugin.is_active():
-                plugin.finalise()
\ No newline at end of file
+                plugin.finalise()
+                log.warn(u'Finalisation Complete for %s ' % plugin.name)

=== modified file 'openlp/core/ui/__init__.py'
--- openlp/core/ui/__init__.py	2010-01-22 18:59:36 +0000
+++ openlp/core/ui/__init__.py	2010-02-06 15:08:13 +0000
@@ -42,4 +42,4 @@
 
 __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MainWindow',
     'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager',
-    'AmendThemeForm', 'MediaDockManager', 'ThemeLevel']
+    'AmendThemeForm', 'MediaDockManager']

=== modified file 'openlp/core/ui/alertform.py'
--- openlp/core/ui/alertform.py	2009-12-31 12:52:01 +0000
+++ openlp/core/ui/alertform.py	2010-02-06 15:08:13 +0000
@@ -99,4 +99,4 @@
         self.CancelButton.setText(self.trUtf8('Cancel'))
 
     def onDisplayClicked(self):
-        self.parent.mainDisplay.displayAlert(unicode(self.AlertEntryEditItem.text()))
\ No newline at end of file
+        self.parent.mainDisplay.displayAlert(unicode(self.AlertEntryEditItem.text()))

=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py	2010-01-28 17:36:13 +0000
+++ openlp/core/ui/maindisplay.py	2010-02-06 15:08:13 +0000
@@ -44,6 +44,11 @@
     def __init__(self, parent=None, name=None):
         QtGui.QWidget.__init__(self, parent)
         self.parent = parent
+        self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item',
+                           QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop',
+                           QtCore.Qt.Key_Enter: 'live_slidecontroller_next_noloop',
+                           QtCore.Qt.Key_0: 'servicemanager_next_item',
+                           QtCore.Qt.Key_Backspace: 'live_slidecontroller_previous_noloop'}
 
     def keyPressEvent(self, event):
         if type(event) == QtGui.QKeyEvent:
@@ -60,6 +65,9 @@
             elif event.key() == QtCore.Qt.Key_PageDown:
                 Receiver.send_message(u'live_slidecontroller_last')
                 event.accept()
+            elif event.key() in self.hotkey_map:
+                Receiver.send_message(self.hotkey_map[event.key()]);
+                event.accept()
             elif event.key() == QtCore.Qt.Key_Escape:
                 self.resetDisplay()
                 event.accept()
@@ -194,22 +202,21 @@
             self.showFullScreen()
 
     def hideDisplay(self):
+        self.mediaLoaded = True
         self.setVisible(False)
 
     def showDisplay(self):
+        self.mediaLoaded = False
         if not self.primary:
             self.setVisible(True)
             self.showFullScreen()
+        self.generateAlert()
 
     def addImageWithText(self, frame):
         frame = resize_image(frame,
                     self.screen[u'size'].width(),
                     self.screen[u'size'].height() )
         self.display_image.setPixmap(QtGui.QPixmap.fromImage(frame))
-#        self.display_image.show()
-#        if not self.isVisible():
-#            self.setVisible(True)
-#            self.showFullScreen()
 
     def frameView(self, frame, transition=False):
         """

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2010-01-28 11:46:25 +0000
+++ openlp/core/ui/mainwindow.py	2010-02-06 15:08:13 +0000
@@ -25,6 +25,7 @@
 
 import os
 import logging
+import time
 
 from PyQt4 import QtCore, QtGui
 
@@ -50,6 +51,15 @@
     border-color: palette(light);
   }
 """
+class versionThread(QtCore.QThread):
+    def __init__(self, parent):
+        QtCore.QThread.__init__(self, parent)
+        self.parent = parent
+    def run (self):
+        time.sleep(2)
+        Receiver.send_message(u'version_check')
+
+
 class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         """
@@ -483,6 +493,8 @@
             QtCore.SIGNAL(u'triggered()'), self.onOptionsSettingsItemClicked)
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'update_global_theme'), self.defaultThemeChanged)
+        QtCore.QObject.connect(Receiver.get_receiver(),
+            QtCore.SIGNAL(u'version_check'), self.versionCheck)
         QtCore.QObject.connect(self.FileNewItem,
             QtCore.SIGNAL(u'triggered()'),
             self.ServiceManagerContents.onNewService)
@@ -582,6 +594,10 @@
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
 
+    def versionThread(self):
+        vT = versionThread(self)
+        vT.start()
+
     def onHelpAboutItemClicked(self):
         """
         Show the About form

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2010-02-02 18:16:11 +0000
+++ openlp/core/ui/servicemanager.py	2010-02-06 15:08:13 +0000
@@ -227,6 +227,8 @@
             QtCore.SIGNAL(u'remote_edit_clear'), self.onRemoteEditClear)
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'presentation types'), self.onPresentationTypes)
+        QtCore.QObject.connect(Receiver.get_receiver(),
+            QtCore.SIGNAL(u'servicemanager_next_item'), self.nextItem)
         # Last little bits of setting up
         self.config = PluginConfig(u'ServiceManager')
         self.servicePath = self.config.get_data_path()
@@ -236,12 +238,31 @@
     def onPresentationTypes(self, presentation_types):
         self.presentation_types = presentation_types
 
+    def nextItem(self):
+        """
+        Called by the SlideController to select the
+        next service item
+        """
+        if len(self.ServiceManagerList.selectedItems()) == 0:
+            return
+        selected = self.ServiceManagerList.selectedItems()[0]
+        lookFor = 0
+        serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList)
+        while serviceIterator.value():
+            if lookFor == 1 and serviceIterator.value().parent() is None:
+                self.ServiceManagerList.setCurrentItem(serviceIterator.value())
+                self.makeLive()
+                return
+            if serviceIterator.value() == selected:
+                lookFor = 1
+            serviceIterator += 1
+
     def onMoveSelectionUp(self):
         """
         Moves the selection up the window
         Called by the up arrow
         """
-        serviceIterator = QTreeWidgetItemIterator(self.ServiceManagerList)
+        serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList)
         tempItem = None
         setLastItem = False
         while serviceIterator:
@@ -266,7 +287,7 @@
         Moves the selection down the window
         Called by the down arrow
         """
-        serviceIterator = QTreeWidgetItemIterator(self.ServiceManagerList)
+        serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList)
         firstItem = serviceIterator
         setSelected = False
         while serviceIterator:

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2010-01-24 16:28:18 +0000
+++ openlp/core/ui/slidecontroller.py	2010-02-06 15:08:13 +0000
@@ -41,6 +41,11 @@
     def __init__(self, parent=None, name=None):
         QtGui.QTableWidget.__init__(self, parent.Controller)
         self.parent = parent
+        self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item',
+                           QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop',
+                           QtCore.Qt.Key_Enter: 'live_slidecontroller_next_noloop',
+                           QtCore.Qt.Key_0: 'servicemanager_next_item',
+                           QtCore.Qt.Key_Backspace: 'live_slidecontroller_previous_noloop'}
 
     def keyPressEvent(self, event):
         if type(event) == QtGui.QKeyEvent:
@@ -57,6 +62,9 @@
             elif event.key() == QtCore.Qt.Key_PageDown:
                 self.parent.onSlideSelectedLast()
                 event.accept()
+            elif event.key() in self.hotkey_map and self.parent.isLive:
+                Receiver.send_message(self.hotkey_map[event.key()]);
+                event.accept()
             event.ignore()
         else:
             event.ignore()
@@ -278,6 +286,11 @@
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'%s_previous' % prefix), self.onSlideSelectedPrevious)
         QtCore.QObject.connect(Receiver.get_receiver(),
+            QtCore.SIGNAL(u'%s_next_noloop' % prefix), self.onSlideSelectedNextNoloop)
+        QtCore.QObject.connect(Receiver.get_receiver(),
+            QtCore.SIGNAL(u'%s_previous_noloop' % prefix),
+            self.onSlideSelectedPreviousNoloop)
+        QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'%s_last' % prefix), self.onSlideSelectedLast)
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'%s_change' % prefix), self.onSlideChange)
@@ -561,7 +574,10 @@
             rect.y(), rect.width(), rect.height())
         self.SlidePreview.setPixmap(winimg)
 
-    def onSlideSelectedNext(self):
+    def onSlideSelectedNextNoloop(self):
+        self.onSlideSelectedNext(False)
+
+    def onSlideSelectedNext(self, loop=True):
         """
         Go to the next slide.
         """
@@ -574,11 +590,18 @@
         else:
             row = self.PreviewListWidget.currentRow() + 1
             if row == self.PreviewListWidget.rowCount():
-                row = 0
+                if loop:
+                    row = 0
+                else:
+                    Receiver.send_message('servicemanager_next_item')
+                    return
             self.PreviewListWidget.selectRow(row)
             self.onSlideSelected()
 
-    def onSlideSelectedPrevious(self):
+    def onSlideSelectedPreviousNoloop(self):
+        self.onSlideSelectedPrevious(False)
+
+    def onSlideSelectedPrevious(self, loop=True):
         """
         Go to the previous slide.
         """
@@ -591,7 +614,10 @@
         else:
             row = self.PreviewListWidget.currentRow() - 1
             if row == -1:
-                row = self.PreviewListWidget.rowCount() - 1
+                if loop:
+                    row = self.PreviewListWidget.rowCount() - 1
+                else:
+                    row = 0
             self.PreviewListWidget.selectRow(row)
             self.onSlideSelected()
 

=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py	2009-12-31 12:52:01 +0000
+++ openlp/core/utils/__init__.py	2010-02-06 15:08:13 +0000
@@ -37,12 +37,14 @@
 
 def check_latest_version(config, current_version):
     version_string = current_version
+    #set to prod in the distribution confif file.
+    environment = config.get_config(u'run environment', u'dev')
     last_test = config.get_config(u'last version test', datetime.now().date())
     this_test = unicode(datetime.now().date())
     config.set_config(u'last version test', this_test)
     if last_test != this_test:
         version_string = u''
-        req = urllib2.Request(u'http://www.openlp.org/files/version.txt')
+        req = urllib2.Request(u'http://www.openlp.org/files/%s_version.txt' % environment)
         req.add_header(u'User-Agent', u'OpenLP/%s' % current_version)
         try:
             handle = urllib2.urlopen(req, None)

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2010-02-04 17:38:21 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2010-02-06 15:08:13 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, build_icon
+from openlp.core.lib import Plugin, build_icon, PluginStatus
 from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem
 
 class BiblePlugin(Plugin):
@@ -36,10 +36,11 @@
     log.info(u'Bible Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'Bibles', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Bibles', u'1.9.1', plugin_helpers)
         self.weight = -9
         self.icon = build_icon(u':/media/media_bible.png')
         #Register the bible Manager
+        self.status = PluginStatus.Active
         self.manager = None
 
     def initialise(self):
@@ -91,4 +92,3 @@
             'plugin allows bible verses from different sources to be '
             'displayed on the screen during the service.')
         return about_text
-

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/custom/customplugin.py	2010-02-06 15:08:13 +0000
@@ -26,7 +26,7 @@
 import logging
 
 from forms import EditCustomForm
-from openlp.core.lib import Plugin, build_icon
+from openlp.core.lib import Plugin, build_icon, PluginStatus
 from openlp.plugins.custom.lib import CustomManager, CustomMediaItem, CustomTab
 
 
@@ -45,11 +45,12 @@
     log.info(u'Custom Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'Custom', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Custom', u'1.9.1', plugin_helpers)
         self.weight = -5
         self.custommanager = CustomManager(self.config)
         self.edit_custom_form = EditCustomForm(self.custommanager)
         self.icon = build_icon(u':/media/media_custom.png')
+        self.status = PluginStatus.Active
 
     def get_settings_tab(self):
         return CustomTab(self.name)
@@ -72,4 +73,4 @@
             'allows slides to be displayed on the screen in the same way '
             'songs are.  This plugin provides greater freedom over the '
             'songs plugin.<br>')
-        return about_text
\ No newline at end of file
+        return about_text

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/images/imageplugin.py	2010-02-06 15:08:13 +0000
@@ -25,7 +25,7 @@
 
 import logging
 
-from openlp.core.lib import Plugin, build_icon
+from openlp.core.lib import Plugin, build_icon, PluginStatus
 from openlp.plugins.images.lib import ImageMediaItem, ImageTab
 
 class ImagePlugin(Plugin):
@@ -34,9 +34,10 @@
     log.info(u'Image Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'Images', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Images', u'1.9.1', plugin_helpers)
         self.weight = -7
         self.icon = build_icon(u':/media/media_image.png')
+        self.status = PluginStatus.Active
 
     def initialise(self):
         log.info(u'Plugin Initialising')
@@ -62,4 +63,4 @@
             '<i>Override background</i> is chosen and an image is selected '
             'any somgs which are rendered will use the selected image from '
             'the background instead of the one provied by the theme.<br>')
-        return about_text
\ No newline at end of file
+        return about_text

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/media/mediaplugin.py	2010-02-06 15:08:13 +0000
@@ -25,7 +25,7 @@
 
 import logging
 
-from openlp.core.lib import Plugin, build_icon
+from openlp.core.lib import Plugin, build_icon, PluginStatus
 from openlp.plugins.media.lib import MediaMediaItem
 
 class MediaPlugin(Plugin):
@@ -34,11 +34,12 @@
     log.info(u'Media Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'Media', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Media', u'1.9.1', plugin_helpers)
         self.weight = -6
         self.icon = build_icon(u':/media/media_video.png')
         # passed with drag and drop messages
         self.dnd_id = u'Media'
+        self.status = PluginStatus.Active
 
     def initialise(self):
         log.info(u'Plugin Initialising')
@@ -56,4 +57,4 @@
     def about(self):
         about_text = self.trUtf8('<b>Media Plugin</b><br>This plugin '
             'allows the playing of audio and video media')
-        return about_text
\ No newline at end of file
+        return about_text

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2010-01-29 13:06:47 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2010-02-06 15:08:13 +0000
@@ -26,7 +26,7 @@
 import os
 import logging
 
-from openlp.core.lib import Plugin, build_icon, Receiver
+from openlp.core.lib import Plugin, build_icon, Receiver, PluginStatus
 from openlp.plugins.presentations.lib import *
 
 class PresentationPlugin(Plugin):
@@ -37,9 +37,10 @@
     def __init__(self, plugin_helpers):
         log.debug(u'Initialised')
         self.controllers = {}
-        Plugin.__init__(self, u'Presentations', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Presentations', u'1.9.1', plugin_helpers)
         self.weight = -8
         self.icon = build_icon(u':/media/media_presentation.png')
+        self.status = PluginStatus.Active
 
     def get_settings_tab(self):
         """

=== renamed file 'openlp/plugins/remotes/remoteclient-cli.py' => 'openlp/plugins/remotes/remoteclient.py'
--- openlp/plugins/remotes/remoteclient-cli.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/remotes/remoteclient.py	2010-02-06 15:08:13 +0000
@@ -28,7 +28,6 @@
 import sys
 from optparse import OptionParser
 
-
 def sendData(options, message):
     addr = (options.address, options.port)
     try:
@@ -47,34 +46,23 @@
     parser.add_option("-v", "--verbose",
                       action="store_true", dest="verbose", default=True,
                       help="make lots of noise [%default]")
-    parser.add_option("-p", "--port",
-                      default=4316,
+    parser.add_option("-p", "--port", default=4316,
                       help="IP Port number %default ")
     parser.add_option("-a", "--address",
                       help="Recipient address ")
-    parser.add_option("-e", "--event",
-                      default=u'Alert',
-                      help="Action to be undertaken")
     parser.add_option("-m", "--message",
                       help="Message to be passed for the action")
-    parser.add_option("-n", "--slidenext",
-                      help="Trigger the next slide")
 
     (options, args) = parser.parse_args()
     if len(args) > 0:
         parser.print_help()
         parser.error("incorrect number of arguments")
+    elif options.address is None:
+        parser.print_help()
+        parser.error("IP address missing")
     elif options.message is None:
         parser.print_help()
         parser.error("No message passed")
-    elif options.address is None:
-        parser.print_help()
-        parser.error("IP address missing")
-    elif options.slidenext:
-        options.event = u'next_slide'
-        options.message = u''
-        text = format_message(options)
-        sendData(options, text)
     else:
         text = format_message(options)
         sendData(options, text)

=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/remotes/remoteplugin.py	2010-02-06 15:08:13 +0000
@@ -37,7 +37,7 @@
     log.info(u'Remote Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'Remotes', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Remotes', u'1.9.1', plugin_helpers)
         self.weight = -1
         self.server = None
 
@@ -83,4 +83,4 @@
             'provides the ability to send messages to a running version of '
             'openlp on a different computer.<br>The Primary use for this '
             'would be to send alerts from a creche')
-        return about_text
\ No newline at end of file
+        return about_text

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2009-12-02 08:35:02 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2010-02-06 15:08:13 +0000
@@ -1,113 +1,129 @@
 # -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
 
-# Form implementation generated from reading ui file 'editversedialog.ui'
-#
-# Created: Wed Dec  2 08:14:47 2009
-#      by: PyQt4 UI code generator 4.6.2
-#
-# WARNING! All changes made in this file will be lost!
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2010 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael      #
+# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble,   #
+# Carsten Tinggaard                                                           #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it     #
+# under the terms of the GNU General Public License as published by the Free  #
+# Software Foundation; version 2 of the License.                              #
+#                                                                             #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
+# more details.                                                               #
+#                                                                             #
+# You should have received a copy of the GNU General Public License along     #
+# with this program; if not, write to the Free Software Foundation, Inc., 59  #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
+###############################################################################
 
 from PyQt4 import QtCore, QtGui
 
 class Ui_EditVerseDialog(object):
     def setupUi(self, EditVerseDialog):
-        EditVerseDialog.setObjectName("EditVerseDialog")
+        EditVerseDialog.setObjectName(u'EditVerseDialog')
         EditVerseDialog.resize(500, 521)
         EditVerseDialog.setModal(True)
         self.layoutWidget = QtGui.QWidget(EditVerseDialog)
         self.layoutWidget.setGeometry(QtCore.QRect(11, 1, 471, 491))
-        self.layoutWidget.setObjectName("layoutWidget")
+        self.layoutWidget.setObjectName(u'layoutWidget')
         self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget)
-        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.verticalLayout_3.setObjectName(u'verticalLayout_3')
         self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.horizontalLayout.setObjectName(u'horizontalLayout')
         self.verticalLayout = QtGui.QVBoxLayout()
-        self.verticalLayout.setObjectName("verticalLayout")
+        self.verticalLayout.setObjectName(u'verticalLayout')
         self.VerseTypeLabel = QtGui.QLabel(self.layoutWidget)
         self.VerseTypeLabel.setTextFormat(QtCore.Qt.PlainText)
         self.VerseTypeLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.VerseTypeLabel.setObjectName("VerseTypeLabel")
+        self.VerseTypeLabel.setObjectName(u'VerseTypeLabel')
         self.verticalLayout.addWidget(self.VerseTypeLabel)
         self.VerseListComboBox = QtGui.QComboBox(self.layoutWidget)
-        self.VerseListComboBox.setObjectName("VerseListComboBox")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
-        self.VerseListComboBox.addItem("")
+        self.VerseListComboBox.setObjectName(u'VerseListComboBox')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
+        self.VerseListComboBox.addItem(u'')
         self.verticalLayout.addWidget(self.VerseListComboBox)
         self.horizontalLayout.addLayout(self.verticalLayout)
         self.verticalLayout_2 = QtGui.QVBoxLayout()
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.verticalLayout_2.setObjectName(u'verticalLayout_2')
         self.VerseNumberLabel = QtGui.QLabel(self.layoutWidget)
         self.VerseNumberLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.VerseNumberLabel.setObjectName("VerseNumberLabel")
+        self.VerseNumberLabel.setObjectName(u'VerseNumberLabel')
         self.verticalLayout_2.addWidget(self.VerseNumberLabel)
         self.SubVerseListComboBox = QtGui.QComboBox(self.layoutWidget)
-        self.SubVerseListComboBox.setObjectName("SubVerseListComboBox")
+        self.SubVerseListComboBox.setObjectName(u'SubVerseListComboBox')
         self.verticalLayout_2.addWidget(self.SubVerseListComboBox)
         self.horizontalLayout.addLayout(self.verticalLayout_2)
         self.verticalLayout_3.addLayout(self.horizontalLayout)
         self.VerseTextEdit = QtGui.QTextEdit(self.layoutWidget)
         self.VerseTextEdit.setAcceptRichText(False)
-        self.VerseTextEdit.setObjectName("VerseTextEdit")
+        self.VerseTextEdit.setObjectName(u'VerseTextEdit')
         self.verticalLayout_3.addWidget(self.VerseTextEdit)
         self.horizontalLayout_2 = QtGui.QHBoxLayout()
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.horizontalLayout_2.setObjectName(u'horizontalLayout_2')
         self.addBridge = QtGui.QPushButton(self.layoutWidget)
-        self.addBridge.setObjectName("addBridge")
+        self.addBridge.setObjectName(u'addBridge')
         self.horizontalLayout_2.addWidget(self.addBridge)
         self.addVerse = QtGui.QPushButton(self.layoutWidget)
-        self.addVerse.setObjectName("addVerse")
+        self.addVerse.setObjectName(u'addVerse')
         self.horizontalLayout_2.addWidget(self.addVerse)
         self.addChorus = QtGui.QPushButton(self.layoutWidget)
-        self.addChorus.setObjectName("addChorus")
+        self.addChorus.setObjectName(u'addChorus')
         self.horizontalLayout_2.addWidget(self.addChorus)
         self.verticalLayout_3.addLayout(self.horizontalLayout_2)
         self.horizontalLayout_3 = QtGui.QHBoxLayout()
-        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.horizontalLayout_3.setObjectName(u'horizontalLayout_3')
         self.addPreChorus = QtGui.QPushButton(self.layoutWidget)
-        self.addPreChorus.setObjectName("addPreChorus")
+        self.addPreChorus.setObjectName(u'addPreChorus')
         self.horizontalLayout_3.addWidget(self.addPreChorus)
         self.addIntro = QtGui.QPushButton(self.layoutWidget)
-        self.addIntro.setObjectName("addIntro")
+        self.addIntro.setObjectName(u'addIntro')
         self.horizontalLayout_3.addWidget(self.addIntro)
         self.addOther = QtGui.QPushButton(self.layoutWidget)
-        self.addOther.setObjectName("addOther")
+        self.addOther.setObjectName(u'addOther')
         self.horizontalLayout_3.addWidget(self.addOther)
         self.addEnding = QtGui.QPushButton(self.layoutWidget)
-        self.addEnding.setObjectName("addEnding")
+        self.addEnding.setObjectName(u'addEnding')
         self.horizontalLayout_3.addWidget(self.addEnding)
         self.verticalLayout_3.addLayout(self.horizontalLayout_3)
         self.ButtonBox = QtGui.QDialogButtonBox(self.layoutWidget)
         self.ButtonBox.setOrientation(QtCore.Qt.Horizontal)
         self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save)
-        self.ButtonBox.setObjectName("ButtonBox")
+        self.ButtonBox.setObjectName(u'ButtonBox')
         self.verticalLayout_3.addWidget(self.ButtonBox)
 
         self.retranslateUi(EditVerseDialog)
-        QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), EditVerseDialog.accept)
-        QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("rejected()"), EditVerseDialog.reject)
+        QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), EditVerseDialog.accept)
+        QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'rejected()'), EditVerseDialog.reject)
         QtCore.QMetaObject.connectSlotsByName(EditVerseDialog)
 
     def retranslateUi(self, EditVerseDialog):
-        EditVerseDialog.setWindowTitle(QtGui.QApplication.translate("EditVerseDialog", "Edit Verse", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseTypeLabel.setText(QtGui.QApplication.translate("EditVerseDialog", "Verse Type", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(0, QtGui.QApplication.translate("EditVerseDialog", "Intro", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(1, QtGui.QApplication.translate("EditVerseDialog", "Verse", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(2, QtGui.QApplication.translate("EditVerseDialog", "Pre-Chorus", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(4, QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(5, QtGui.QApplication.translate("EditVerseDialog", "Ending", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseListComboBox.setItemText(6, QtGui.QApplication.translate("EditVerseDialog", "Other", None, QtGui.QApplication.UnicodeUTF8))
-        self.VerseNumberLabel.setText(QtGui.QApplication.translate("EditVerseDialog", "Number", None, QtGui.QApplication.UnicodeUTF8))
-        self.addBridge.setText(QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
-        self.addVerse.setText(QtGui.QApplication.translate("EditVerseDialog", "Verse", None, QtGui.QApplication.UnicodeUTF8))
-        self.addChorus.setText(QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
-        self.addPreChorus.setText(QtGui.QApplication.translate("EditVerseDialog", "Pre-Chorus", None, QtGui.QApplication.UnicodeUTF8))
-        self.addIntro.setText(QtGui.QApplication.translate("EditVerseDialog", "Intro", None, QtGui.QApplication.UnicodeUTF8))
-        self.addOther.setText(QtGui.QApplication.translate("EditVerseDialog", "Other", None, QtGui.QApplication.UnicodeUTF8))
-        self.addEnding.setText(QtGui.QApplication.translate("EditVerseDialog", "Ending", None, QtGui.QApplication.UnicodeUTF8))
+        EditVerseDialog.setWindowTitle(self.trUtf8('Edit Verse'))
+        self.VerseTypeLabel.setText(self.trUtf8('Verse Type'))
+        self.VerseListComboBox.setItemText(0, self.trUtf8('Intro'))
+        self.VerseListComboBox.setItemText(1, self.trUtf8('Verse'))
+        self.VerseListComboBox.setItemText(2, self.trUtf8('Pre-Chorus'))
+        self.VerseListComboBox.setItemText(3, self.trUtf8('Chorus'))
+        self.VerseListComboBox.setItemText(4, self.trUtf8('Bridge'))
+        self.VerseListComboBox.setItemText(5, self.trUtf8('Ending'))
+        self.VerseListComboBox.setItemText(6, self.trUtf8('Other'))
+        self.VerseNumberLabel.setText(self.trUtf8('Number'))
+        self.addBridge.setText(self.trUtf8('Bridge'))
+        self.addVerse.setText(self.trUtf8('Verse'))
+        self.addChorus.setText(self.trUtf8('Chorus'))
+        self.addPreChorus.setText(self.trUtf8('Pre-Chorus'))
+        self.addIntro.setText(self.trUtf8('Intro'))
+        self.addOther.setText(self.trUtf8('Other'))
+        self.addEnding.setText(self.trUtf8('Ending'))
 

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2009-12-31 12:52:01 +0000
+++ openlp/plugins/songs/songsplugin.py	2010-02-06 15:08:13 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, build_icon
+from openlp.core.lib import Plugin, build_icon, PluginStatus
 from openlp.plugins.songs.lib import SongManager, SongMediaItem, SongsTab
 from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \
     OpenSongImportForm, OpenLPExportForm
@@ -49,7 +49,7 @@
         """
         Create and set up the Songs plugin.
         """
-        Plugin.__init__(self, u'Songs', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'Songs', u'1.9.1', plugin_helpers)
         self.weight = -10
         self.songmanager = SongManager(self.config)
         self.openlp_import_form = OpenLPImportForm()
@@ -57,6 +57,7 @@
         self.openlp_export_form = OpenLPExportForm()
         self.opensong_export_form = OpenSongExportForm()
         self.icon = build_icon(u':/media/media_song.png')
+        self.status = PluginStatus.Active
 
     def get_settings_tab(self):
         return SongsTab(self.name)
@@ -178,4 +179,4 @@
     def about(self):
         about_text = self.trUtf8('<b>Song Plugin</b> <br>This plugin allows '
             'Songs to be managed and displayed.<br>')
-        return about_text
\ No newline at end of file
+        return about_text

=== modified file 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/songusage/songusageplugin.py	2010-01-28 07:15:23 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2010-02-06 15:08:13 +0000
@@ -39,7 +39,7 @@
     log.info(u'SongUsage Plugin loaded')
 
     def __init__(self, plugin_helpers):
-        Plugin.__init__(self, u'SongUsage', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'SongUsage', u'1.9.1', plugin_helpers)
         self.weight = -4
         self.icon = build_icon(u':/media/media_image.png')
         self.songusagemanager = None

=== modified file 'resources/.config/openlp/openlp.conf'
--- resources/.config/openlp/openlp.conf	2009-10-14 19:18:09 +0000
+++ resources/.config/openlp/openlp.conf	2010-02-06 15:08:13 +0000
@@ -1,77 +1,73 @@
-[audit]
-first service = 2
-db type = sqlite
-audit active = False
-second service = 2
-audit_status = 0
-data path = audit
-
 [bibles]
 display new chapter = False
 display brackets = 0
-verse layout style = 0
-bible theme = 0
-search as type = True
-bibles_status = 0
+dual bibles = False
+db type = sqlite
+bible theme = 
+verse layout style = 1
+status = 1
 data path = bibles
 
 [media]
-use mode layout = False
-media_status = 1
-
-[image]
-loop delay = 5
+status = 1
 
 [alerts]
 font color = #ffffff
+background color = #660000
 font face = Sans Serif
 timeout = 5
-background color = #660000
 
-[user interface]
-display previewpanel = True
-display thememanager = True
-display servicemanager = True
-display mediamanager = True
+[remotes]
+remote port = 4316
 
 [presentations]
+status = 1
+impress = 0
 data path = presentations
-impress = 0
+powerpoint = 0
+powerpoint viewer = 0
 
 [custom]
+status = 1
+display footer = True
 data path = custom
 db type = sqlite
-custom_status = 0
 
 [themes]
+global theme = 
 data path = themes
-theme global theme = 
-theme global style = Global
+theme level = 1
+
+[images]
+status = 1
+data path = images
+loop delay = 5
+
+[user interface]
+theme manager = True
+media manager = True
+preview panel = True
+service manager = True
 
 [servicemanager]
 data path = servicemanager
-theme service theme = 
-
-[remotes]
-remotes_status = 1
-remote port = 4316
-
-[images]
-images_status = 1
 
 [general]
 monitor = 0
+run environment = dev
+ccli number = 
+blank warning = False
 show splash = True
-application version test = 2009-10-14
-user name = 
-application version = 1.9.0-600
-warning = False
+last version test = 2010-02-05
+songselect username = 
+save prompt = False
+songselect password = 
 auto open = False
-password = 
-ccl number = XXX
 
 [songs]
-songs_status = 0
+status = 1
+search as type = False
+display songbar = True
 data path = songs
 db type = sqlite
 


Follow ups