← Back to team overview

openlp-core team mailing list archive

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

 

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

    Requested reviews:
    OpenLP Core (openlp-core)

-- 
https://code.launchpad.net/~trb143/openlp/fixes/+merge/14045
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/eventreceiver.py'
--- openlp/core/lib/eventreceiver.py	2009-10-25 14:39:45 +0000
+++ openlp/core/lib/eventreceiver.py	2009-10-27 18:25:19 +0000
@@ -78,7 +78,7 @@
     ``{plugin}_stop``
         Requests a plugin to handle a stop event
 
-    ``audit_live``
+    ``songusage_live``
         Sends live song audit requests to the audit component
 
     ``audit_changed``
@@ -154,4 +154,4 @@
         """
         Get the global ``eventreceiver`` instance.
         """
-        return Receiver.eventreceiver
+        return Receiver.eventreceiver
\ No newline at end of file

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2009-10-25 16:12:41 +0000
+++ openlp/core/ui/mainwindow.py	2009-10-27 18:25:19 +0000
@@ -529,7 +529,7 @@
         version = check_latest_version(self.generalConfig, applicationVersion)
         if applicationVersion != version:
             version_text = unicode(self.trUtf8(u'OpenLP version %s has been updated '
-                u'to version %s'))
+                u'to version %s\nWould you like to get it?'))
             QtGui.QMessageBox.question(None,
                 self.trUtf8(u'OpenLP Version Updated'),
                 version_text % (applicationVersion, version),

=== modified file 'openlp/core/ui/plugindialog.py'
--- openlp/core/ui/plugindialog.py	2009-10-24 16:40:36 +0000
+++ openlp/core/ui/plugindialog.py	2009-10-27 18:25:19 +0000
@@ -105,4 +105,3 @@
         self.StatusLabel.setText(self.trUtf8(u'Status:'))
         self.StatusComboBox.setItemText(0, self.trUtf8(u'Active'))
         self.StatusComboBox.setItemText(1, self.trUtf8(u'Inactive'))
-

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2009-10-25 21:36:04 +0000
+++ openlp/core/ui/slidecontroller.py	2009-10-27 18:25:19 +0000
@@ -26,7 +26,7 @@
 import time
 
 from PyQt4 import QtCore, QtGui
-from openlp.core.lib import OpenLPToolbar, Receiver, ServiceType
+from openlp.core.lib import OpenLPToolbar, Receiver, ServiceType, str_to_bool, PluginConfig
 
 class SlideList(QtGui.QTableWidget):
     """
@@ -72,6 +72,7 @@
         self.settingsmanager = settingsmanager
         self.isLive = isLive
         self.parent = parent
+        self.songsconfig = PluginConfig(u'Songs')
         self.image_list = [
             u'Start Loop',
             u'Stop Loop',
@@ -119,6 +120,7 @@
         self.PreviewListWidget.setColumnWidth(1, self.Controller.width())
         self.PreviewListWidget.isLive = self.isLive
         self.PreviewListWidget.setObjectName(u'PreviewListWidget')
+        self.PreviewListWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
         self.ControllerLayout.addWidget(self.PreviewListWidget)
         # Build the full toolbar
         self.Toolbar = OpenLPToolbar(self)
@@ -169,8 +171,25 @@
                 u'Image SpinBox', self.DelaySpinBox)
             self.DelaySpinBox.setSuffix(self.trUtf8(u's'))
             self.DelaySpinBox.setToolTip(self.trUtf8(u'Delay between slides in seconds'))
-
         self.ControllerLayout.addWidget(self.Toolbar)
+        # Build the Song Toolbar
+        if isLive:
+            self.Songbar = OpenLPToolbar(self)
+            self.Songbar.addToolbarButton(
+                u'Bridge',  u':/media/media_time.png',
+                self.trUtf8(u'Bridge'),
+                self.onSongBarHandler)
+            self.Songbar.addToolbarButton(
+                u'Chorus',  u':/media/media_time.png',
+                self.trUtf8(u'Chorus'),
+                self.onSongBarHandler)
+            for verse in range(1, 9):
+                self.Songbar.addToolbarButton(
+                    unicode(verse),  u':/media/media_time.png',
+                    unicode(self.trUtf8(u'Verse %s'))%verse,
+                    self.onSongBarHandler)
+            self.ControllerLayout.addWidget(self.Songbar)
+            self.Songbar.setVisible(False)
         # Screen preview area
         self.PreviewFrame = QtGui.QFrame(self.Splitter)
         self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
@@ -225,6 +244,21 @@
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'slidecontroller_change'), self.onSlideChange)
 
+    def onSongBarHandler(self):
+        request = self.sender().text()
+        if request == u'Bridge':
+            pass
+        elif request == u'Chorus':
+            pass
+        else:
+            #Remember list is 1 out!
+            slideno = int(request) - 1
+            if slideno > self.PreviewListWidget.rowCount():
+                self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
+            else:
+                self.PreviewListWidget.selectRow(slideno)
+            self.onSlideSelected()
+
     def receiveSpinDelay(self, value):
         self.DelaySpinBox.setValue(int(value))
 
@@ -244,6 +278,11 @@
         """
         if item.service_item_type == ServiceType.Text:
             self.Toolbar.makeWidgetsInvisible(self.image_list)
+            if item.name == u'Songs' and \
+                str_to_bool(self.songsconfig.get_config(u'display songbar', True)):
+                self.Songbar.setVisible(True)
+            else:
+                self.Songbar.setVisible(False)
         elif item.service_item_type == ServiceType.Image:
             #Not sensible to allow loops with 1 frame
             if len(item.frames) > 1:
@@ -349,8 +388,8 @@
         self.onSlideSelected()
         self.PreviewListWidget.setFocus()
         log.info(u'Display Rendering took %4s' % (time.time() - before))
-        if self.serviceitem.audit != u'':
-            Receiver().send_message(u'audit_live', self.serviceitem.audit)
+        if self.serviceitem.audit != u'' and self.isLive:
+            Receiver().send_message(u'songusage_live', self.serviceitem.audit)
         log.debug(u'displayServiceManagerItems End')
 
     #Screen event methods

=== removed file 'openlp/plugins/audit/forms/auditdetaildialog.py'
--- openlp/plugins/audit/forms/auditdetaildialog.py	2009-10-23 18:48:49 +0000
+++ openlp/plugins/audit/forms/auditdetaildialog.py	1970-01-01 00:00:00 +0000
@@ -1,181 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'auditdetaildialog.ui'
-#
-# Created: Sun Oct 11 11:40:02 2009
-#      by: PyQt4 UI code generator 4.5.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_AuditDetailDialog(object):
-    def setupUi(self, AuditDetailDialog):
-        AuditDetailDialog.setObjectName(u'AuditDetailDialog')
-        AuditDetailDialog.resize(593, 501)
-        self.buttonBox = QtGui.QDialogButtonBox(AuditDetailDialog)
-        self.buttonBox.setGeometry(QtCore.QRect(420, 470, 170, 25))
-        self.buttonBox.setStandardButtons(
-            QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName(u'buttonBox')
-        self.FileGroupBox = QtGui.QGroupBox(AuditDetailDialog)
-        self.FileGroupBox.setGeometry(QtCore.QRect(10, 370, 571, 70))
-        self.FileGroupBox.setObjectName(u'FileGroupBox')
-        self.verticalLayout_4 = QtGui.QVBoxLayout(self.FileGroupBox)
-        self.verticalLayout_4.setObjectName(u'verticalLayout_4')
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName(u'horizontalLayout')
-        self.FileLineEdit = QtGui.QLineEdit(self.FileGroupBox)
-        self.FileLineEdit.setObjectName(u'FileLineEdit')
-        self.horizontalLayout.addWidget(self.FileLineEdit)
-        self.SaveFilePushButton = QtGui.QPushButton(self.FileGroupBox)
-        icon = QtGui.QIcon()
-        icon.addPixmap(QtGui.QPixmap(u':/exports/export_load.png'),
-            QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.SaveFilePushButton.setIcon(icon)
-        self.SaveFilePushButton.setObjectName(u'SaveFilePushButton')
-        self.horizontalLayout.addWidget(self.SaveFilePushButton)
-        self.verticalLayout_4.addLayout(self.horizontalLayout)
-        self.layoutWidget = QtGui.QWidget(AuditDetailDialog)
-        self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 561, 361))
-        self.layoutWidget.setObjectName(u'layoutWidget')
-        self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget)
-        self.verticalLayout_3.setObjectName(u'verticalLayout_3')
-        self.ReportTypeGroup = QtGui.QGroupBox(self.layoutWidget)
-        self.ReportTypeGroup.setObjectName(u'ReportTypeGroup')
-        self.layoutWidget1 = QtGui.QWidget(self.ReportTypeGroup)
-        self.layoutWidget1.setGeometry(QtCore.QRect(50, 40, 481, 23))
-        self.layoutWidget1.setObjectName(u'layoutWidget1')
-        self.ReportHorizontalLayout = QtGui.QHBoxLayout(self.layoutWidget1)
-        self.ReportHorizontalLayout.setObjectName(u'ReportHorizontalLayout')
-        self.SummaryReport = QtGui.QRadioButton(self.layoutWidget1)
-        self.SummaryReport.setObjectName(u'SummaryReport')
-        self.ReportHorizontalLayout.addWidget(self.SummaryReport)
-        self.DetailedReport = QtGui.QRadioButton(self.layoutWidget1)
-        self.DetailedReport.setChecked(True)
-        self.DetailedReport.setObjectName(u'DetailedReport')
-        self.ReportHorizontalLayout.addWidget(self.DetailedReport)
-        self.verticalLayout_3.addWidget(self.ReportTypeGroup)
-        self.DateRangeGroupBox = QtGui.QGroupBox(self.layoutWidget)
-        self.DateRangeGroupBox.setObjectName(u'DateRangeGroupBox')
-        self.verticalLayout_2 = QtGui.QVBoxLayout(self.DateRangeGroupBox)
-        self.verticalLayout_2.setObjectName(u'verticalLayout_2')
-        self.DateHorizontalLayout = QtGui.QHBoxLayout()
-        self.DateHorizontalLayout.setObjectName(u'DateHorizontalLayout')
-        self.FromDateEdit = QtGui.QDateEdit(self.DateRangeGroupBox)
-        self.FromDateEdit.setCalendarPopup(True)
-        self.FromDateEdit.setObjectName(u'FromDateEdit')
-        self.DateHorizontalLayout.addWidget(self.FromDateEdit)
-        self.To = QtGui.QLabel(self.DateRangeGroupBox)
-        self.To.setObjectName(u'To')
-        self.DateHorizontalLayout.addWidget(self.To)
-        self.ToDateEdit = QtGui.QDateEdit(self.DateRangeGroupBox)
-        self.ToDateEdit.setCalendarPopup(True)
-        self.ToDateEdit.setObjectName(u'ToDateEdit')
-        self.DateHorizontalLayout.addWidget(self.ToDateEdit)
-        self.verticalLayout_2.addLayout(self.DateHorizontalLayout)
-        self.verticalLayout_3.addWidget(self.DateRangeGroupBox)
-        self.TimePeriodGroupBox = QtGui.QGroupBox(self.layoutWidget)
-        self.TimePeriodGroupBox.setObjectName(u'TimePeriodGroupBox')
-        self.verticalLayout = QtGui.QVBoxLayout(self.TimePeriodGroupBox)
-        self.verticalLayout.setObjectName(u'verticalLayout')
-        self.FirstHorizontalLayout = QtGui.QHBoxLayout()
-        self.FirstHorizontalLayout.setObjectName(u'FirstHorizontalLayout')
-        self.FirstCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
-        self.FirstCheckBox.setChecked(True)
-        self.FirstCheckBox.setObjectName(u'FirstCheckBox')
-        self.FirstHorizontalLayout.addWidget(self.FirstCheckBox)
-        self.FirstFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.FirstFromTimeEdit.setTime(QtCore.QTime(9, 0, 0))
-        self.FirstFromTimeEdit.setObjectName(u'FirstFromTimeEdit')
-        self.FirstHorizontalLayout.addWidget(self.FirstFromTimeEdit)
-        self.FirstTo = QtGui.QLabel(self.TimePeriodGroupBox)
-        self.FirstTo.setObjectName(u'FirstTo')
-        self.FirstHorizontalLayout.addWidget(self.FirstTo)
-        self.FirstToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.FirstToTimeEdit.setCalendarPopup(True)
-        self.FirstToTimeEdit.setTime(QtCore.QTime(10, 0, 0))
-        self.FirstToTimeEdit.setObjectName(u'FirstToTimeEdit')
-        self.FirstHorizontalLayout.addWidget(self.FirstToTimeEdit)
-        self.verticalLayout.addLayout(self.FirstHorizontalLayout)
-        self.SecondHorizontalLayout = QtGui.QHBoxLayout()
-        self.SecondHorizontalLayout.setObjectName(u'SecondHorizontalLayout')
-        self.SecondCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
-        self.SecondCheckBox.setChecked(True)
-        self.SecondCheckBox.setObjectName(u'SecondCheckBox')
-        self.SecondHorizontalLayout.addWidget(self.SecondCheckBox)
-        self.SecondFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.SecondFromTimeEdit.setTime(QtCore.QTime(10, 45, 0))
-        self.SecondFromTimeEdit.setObjectName(u'SecondFromTimeEdit')
-        self.SecondHorizontalLayout.addWidget(self.SecondFromTimeEdit)
-        self.SecondTo = QtGui.QLabel(self.TimePeriodGroupBox)
-        self.SecondTo.setObjectName(u'SecondTo')
-        self.SecondHorizontalLayout.addWidget(self.SecondTo)
-        self.SecondToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.SecondToTimeEdit.setObjectName(u'SecondToTimeEdit')
-        self.SecondHorizontalLayout.addWidget(self.SecondToTimeEdit)
-        self.verticalLayout.addLayout(self.SecondHorizontalLayout)
-        self.ThirdHorizontalLayout = QtGui.QHBoxLayout()
-        self.ThirdHorizontalLayout.setObjectName(u'ThirdHorizontalLayout')
-        self.ThirdCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
-        self.ThirdCheckBox.setChecked(True)
-        self.ThirdCheckBox.setObjectName(u'ThirdCheckBox')
-        self.ThirdHorizontalLayout.addWidget(self.ThirdCheckBox)
-        self.ThirdFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.ThirdFromTimeEdit.setTime(QtCore.QTime(18, 30, 0))
-        self.ThirdFromTimeEdit.setObjectName(u'ThirdFromTimeEdit')
-        self.ThirdHorizontalLayout.addWidget(self.ThirdFromTimeEdit)
-        self.ThirdTo = QtGui.QLabel(self.TimePeriodGroupBox)
-        self.ThirdTo.setObjectName(u'ThirdTo')
-        self.ThirdHorizontalLayout.addWidget(self.ThirdTo)
-        self.ThirdToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
-        self.ThirdToTimeEdit.setTime(QtCore.QTime(19, 30, 0))
-        self.ThirdToTimeEdit.setObjectName(u'ThirdToTimeEdit')
-        self.ThirdHorizontalLayout.addWidget(self.ThirdToTimeEdit)
-        self.verticalLayout.addLayout(self.ThirdHorizontalLayout)
-        self.verticalLayout_3.addWidget(self.TimePeriodGroupBox)
-
-        self.retranslateUi(AuditDetailDialog)
-        QtCore.QObject.connect(
-            self.buttonBox, QtCore.SIGNAL(u'accepted()'),
-            AuditDetailDialog.accept)
-        QtCore.QObject.connect(
-            self.buttonBox, QtCore.SIGNAL(u'rejected()'),
-            AuditDetailDialog.close)
-        QtCore.QObject.connect(
-            self.FirstCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
-            AuditDetailDialog.changeFirstService)
-        QtCore.QObject.connect(
-            self.SecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
-            AuditDetailDialog.changeSecondService)
-        QtCore.QObject.connect(
-            self.ThirdCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
-            AuditDetailDialog.changeThirdService)
-        QtCore.QObject.connect(
-            self.SaveFilePushButton, QtCore.SIGNAL(u'pressed()'),
-            AuditDetailDialog.defineOutputLocation)
-        QtCore.QMetaObject.connectSlotsByName(AuditDetailDialog)
-
-    def retranslateUi(self, AuditDetailDialog):
-        AuditDetailDialog.setWindowTitle(self.trUtf8(u'Audit Detail Extraction'))
-        self.FileGroupBox.setTitle(self.trUtf8(u'Report Location'))
-        self.ReportTypeGroup.setTitle(self.trUtf8(u'Report Type'))
-        self.SummaryReport.setText(self.trUtf8(u'Summary'))
-        self.DetailedReport.setText(self.trUtf8(u'Detailed'))
-        self.DateRangeGroupBox.setTitle(self.trUtf8(u'Select Date Range'))
-        self.FromDateEdit.setDisplayFormat(self.trUtf8(u'dd/MM/yyyy'))
-        self.To.setText(self.trUtf8(u'to'))
-        self.ToDateEdit.setDisplayFormat(self.trUtf8(u'dd/MM/yyyy'))
-        self.TimePeriodGroupBox.setTitle(self.trUtf8(u'Select Time Periods'))
-        self.FirstCheckBox.setText(self.trUtf8(u'First Service'))
-        self.FirstFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
-        self.FirstTo.setText(self.trUtf8(u'to'))
-        self.FirstToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
-        self.SecondCheckBox.setText(self.trUtf8(u'Second Service'))
-        self.SecondFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
-        self.SecondTo.setText(self.trUtf8(u'to'))
-        self.SecondToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
-        self.ThirdCheckBox.setText(self.trUtf8(u'Third Service'))
-        self.ThirdFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
-        self.ThirdTo.setText(self.trUtf8(u'to'))
-        self.ThirdToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))

=== removed file 'openlp/plugins/audit/forms/auditdetailform.py'
--- openlp/plugins/audit/forms/auditdetailform.py	2009-10-25 14:41:15 +0000
+++ openlp/plugins/audit/forms/auditdetailform.py	1970-01-01 00:00:00 +0000
@@ -1,122 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2009 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, Carsten      #
-# Tinggaard, Jon Tibble, Jonathan Corwin, Maikel Stuivenberg, Scott Guerrieri #
-# --------------------------------------------------------------------------- #
-# This program is free software; you can redistribute it and/or modify it     #
-# under the terms of the GNU General Public License as published by the Free  #
-# Software Foundation; version 2 of the License.                              #
-#                                                                             #
-# This program is distributed in the hope that it will be useful, but WITHOUT #
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
-# more details.                                                               #
-#                                                                             #
-# You should have received a copy of the GNU General Public License along     #
-# with this program; if not, write to the Free Software Foundation, Inc., 59  #
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
-###############################################################################
-
-from PyQt4 import QtCore, QtGui
-
-from auditdetaildialog import Ui_AuditDetailDialog
-
-class AuditDetailForm(QtGui.QDialog, Ui_AuditDetailDialog):
-    """
-    Class documentation goes here.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        """
-        QtGui.QDialog.__init__(self, None)
-        self.parent = parent
-        self.setupUi(self)
-
-    def initialise(self):
-        self.FirstCheckBox.setCheckState(
-            int(self.parent.config.get_config(u'first service', QtCore.Qt.Checked)))
-        self.SecondCheckBox.setCheckState(
-            int(self.parent.config.get_config(u'second service', QtCore.Qt.Checked)))
-        self.ThirdCheckBox.setCheckState(
-            int(self.parent.config.get_config(u'third service', QtCore.Qt.Checked)))
-        year = QtCore.QDate().currentDate().year()
-        if QtCore.QDate().currentDate().month() < 9:
-            year -= 1
-        toDate = QtCore.QDate(year, 8, 31)
-        fromDate = QtCore.QDate(year - 1, 9, 1)
-        self.FromDateEdit.setDate(fromDate)
-        self.ToDateEdit.setDate(toDate)
-        self.FileLineEdit.setText(self.parent.config.get_last_dir(1))
-        self.resetWindow()
-
-    def changeFirstService(self, value):
-        self.parent.config.set_config(u'first service', value)
-        self.resetWindow()
-
-    def changeSecondService(self, value):
-        self.parent.config.set_config(u'second service', value)
-        self.resetWindow()
-
-    def changeThirdService(self, value):
-        self.parent.config.set_config(u'third service', value)
-        self.resetWindow()
-
-    def defineOutputLocation(self):
-        path = QtGui.QFileDialog.getExistingDirectory(self,
-            self.trUtf8(u'Output File Location'),
-            self.parent.config.get_last_dir(1) )
-        path = unicode(path)
-        if path != u'':
-            self.parent.config.set_last_dir(path, 1)
-            self.FileLineEdit.setText(path)
-
-    def resetWindow(self):
-        if self.FirstCheckBox.checkState() == QtCore.Qt.Unchecked:
-            self.FirstFromTimeEdit.setEnabled(False)
-            self.FirstToTimeEdit.setEnabled(False)
-        else:
-            self.FirstFromTimeEdit.setEnabled(True)
-            self.FirstToTimeEdit.setEnabled(True)
-        if self.SecondCheckBox.checkState() == QtCore.Qt.Unchecked:
-            self.SecondFromTimeEdit.setEnabled(False)
-            self.SecondToTimeEdit.setEnabled(False)
-        else:
-            self.SecondFromTimeEdit.setEnabled(True)
-            self.SecondToTimeEdit.setEnabled(True)
-        if self.ThirdCheckBox.checkState() == QtCore.Qt.Unchecked:
-            self.ThirdFromTimeEdit.setEnabled(False)
-            self.ThirdToTimeEdit.setEnabled(False)
-        else:
-            self.ThirdFromTimeEdit.setEnabled(True)
-            self.ThirdToTimeEdit.setEnabled(True)
-
-    def accept(self):
-        print self.DetailedReport.isChecked()
-        print self.SummaryReport.isChecked()
-        print self.FromDateEdit.date()
-        print self.ToDateEdit.date()
-        if self.DetailedReport.isChecked():
-            self.detailedReport()
-        else:
-            self.summaryReport()
-        self.close()
-
-    def detailedReport(self):
-        print "detailed"
-        filename = u'audit_det_%s_%s.txt' % \
-            (self.FromDateEdit.date().toString(u'ddMMyyyy'),
-             self.ToDateEdit.date().toString(u'ddMMyyyy'))
-        print filename
-
-    def summaryReport(self):
-        print "summary"
-        filename = u'audit_sum_%s_%s.txt' % \
-            (self.FromDateEdit.date().toString(u'ddMMyyyy'),
-             self.ToDateEdit.date().toString(u'ddMMyyyy'))
-        print filename

=== modified file 'openlp/plugins/bibles/forms/bibleimportdialog.py'
--- openlp/plugins/bibles/forms/bibleimportdialog.py	2009-10-23 13:17:43 +0000
+++ openlp/plugins/bibles/forms/bibleimportdialog.py	2009-10-27 18:25:19 +0000
@@ -162,6 +162,7 @@
         self.LocationComboBox = QtGui.QComboBox(self.OptionsGroupBox)
         self.LocationComboBox.setObjectName(u'LocationComboBox')
         self.LocationComboBox.addItem(QtCore.QString())
+        self.LocationComboBox.addItem(QtCore.QString())
         self.horizontalLayout_4.addWidget(self.LocationComboBox)
         self.verticalLayout.addLayout(self.horizontalLayout_4)
         self.horizontalLayout_5 = QtGui.QHBoxLayout()
@@ -173,6 +174,7 @@
         self.BibleComboBox.setObjectName(u'BibleComboBox')
         self.BibleComboBox.addItem(QtCore.QString())
         self.BibleComboBox.setItemText(0, u'')
+        self.BibleComboBox.setItemText(1, u'')
         self.BibleComboBox.addItem(QtCore.QString())
         self.BibleComboBox.addItem(QtCore.QString())
         self.horizontalLayout_5.addWidget(self.BibleComboBox)
@@ -246,6 +248,7 @@
         self.OptionsGroupBox.setTitle(self.trUtf8(u'Download Options'))
         self.LocationLabel.setText(self.trUtf8(u'Location:'))
         self.LocationComboBox.setItemText(0, self.trUtf8(u'Crosswalk'))
+        self.LocationComboBox.setItemText(1, self.trUtf8(u'BibleGateway'))
         self.BibleLabel.setText(self.trUtf8(u'Bible:'))
         self.BibleComboBox.setItemText(1, self.trUtf8(u'NIV'))
         self.BibleComboBox.setItemText(2, self.trUtf8(u'KJV'))

=== modified file 'openlp/plugins/bibles/lib/bibleHTTPimpl.py'
--- openlp/plugins/bibles/lib/bibleHTTPimpl.py	2009-09-28 20:45:04 +0000
+++ openlp/plugins/bibles/lib/bibleHTTPimpl.py	2009-10-27 18:25:19 +0000
@@ -35,56 +35,60 @@
         log.debug(u'init %s', proxyurl)
         self.proxyurl = proxyurl
 
-    def get_bible_chapter(self, version, bookid, bookname, chapter) :
+    def get_bible_chapter(self, version, bookname, chapter) :
         """
         Access and decode bibles via the BibleGateway website
 
         ``Version``
             The version of the bible like 31 for New International version
 
-        ``bookid``
-            Book id for the book of the bible - eg 1 for Genesis
-
         ``bookname``
-            Not used
+            Name of the Book
 
         ``chapter``
             Chapter number
         """
-        log.debug(u'get_bible_chapter %s,%s,%s,%s',
-            version, bookid, bookname, chapter)
-        urlstring = u'http://www.biblegateway.com/passage/?book_id=' + \
-            unicode(bookid) + u'&chapter' + unicode(chapter) + u'&version=' + \
-            unicode(version)
+        log.debug(u'get_bible_chapter %s,%s,%s',
+            version, bookname, chapter)
+        version=u'nasb'
+        urlstring = \
+            u'http://www.biblegateway.com/passage/?search=%s %s&version=%s' % \
+                (bookname, unicode(chapter) , version)
         xml_string = self._get_web_text(urlstring, self.proxyurl)
-        VerseSearch = u'class=' + u'"' + u'sup' + u'"' + u'>'
+        #print xml_string
+        verseSearch = u'<sup class=\"versenum'
+        verseFootnote = u'<sup class=\'footnote'
         verse = 1
-        i = xml_string.find(u'result-text-style-normal')
+        i = xml_string.find(u'result-text-style-normal') + 26
         xml_string = xml_string[i:len(xml_string)]
-        versePos = xml_string.find(VerseSearch)
+        versePos = xml_string.find(verseSearch)
         bible = {}
         while versePos > -1:
             # clear out string
             verseText = u''
-            versePos = xml_string.find(u'</span', versePos)
-            i = xml_string.find(VerseSearch, versePos+1)
+            versePos = xml_string.find(u'</sup>', versePos) + 6
+            i = xml_string.find(verseSearch, versePos + 1)
             if i == -1:
-                i = xml_string.find(u'</div', versePos+1)
-                j = xml_string.find(u'<strong', versePos+1)
+                i = xml_string.find(u'</div', versePos + 1)
+                j = xml_string.find(u'<strong', versePos + 1)
                 if j > 0 and j < i:
                     i = j
                 verseText = xml_string[versePos + 7 : i ]
                 bible[verse] = self._clean_text(verseText) # store the verse
                 versePos = -1
             else:
-                i = xml_string[:i].rfind(u'<span') + 1
-                verseText = xml_string[versePos + 7 : i - 1] # Loose </span>
-                # Chop off verse 1
-                xml_string = xml_string[i - 1 :len(xml_string)]
-                versePos = xml_string.find(VerseSearch) #look for the next verse
+                verseText = xml_string[versePos: i]
+                start_tag = verseText.find(verseFootnote)
+                while start_tag > -1:
+                    end_tag = verseText.find(u'</sup>')
+                    verseText = verseText[:start_tag] + verseText[end_tag + 6:len(verseText)]
+                    start_tag = verseText.find(verseFootnote)
+                # Chop off verse and start again
+                xml_string = xml_string[i:]
+                versePos = xml_string.find(verseSearch) #look for the next verse
                 bible[verse] = self._clean_text(verseText) # store the verse
                 verse += 1
-        return bible
+        return SearchResults(bookname, chapter, bible)
 
 class CWExtract(BibleCommon):
     global log
@@ -95,26 +99,23 @@
         log.debug(u'init %s', proxyurl)
         self.proxyurl = proxyurl
 
-    def get_bible_chapter(self, version, bookid, bookname, chapter) :
-        log.debug(u'getBibleChapter %s,%s,%s,%s',
-            version, bookid, bookname, chapter)
+    def get_bible_chapter(self, version, bookname, chapter) :
+        log.debug(u'getBibleChapter %s,%s,%s',
+            version,bookname, chapter)
         """
         Access and decode bibles via the Crosswalk website
 
         ``version``
             The version of the bible like niv for New International Version
 
-        ``bookid``
-            Not used
-
         ``bookname``
             Text name of in english e.g. 'gen' for Genesis
 
         ``chapter``
             Chapter number
         """
-        log.debug(u'get_bible_chapter %s,%s,%s,%s',
-            version, bookid, bookname, chapter)
+        log.debug(u'get_bible_chapter %s,%s,%s',
+            version, bookname, chapter)
         bookname = bookname.replace(u' ', u'')
         urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word=%s+%d&version=%s'\
             % (bookname, chapter, version)
@@ -206,18 +207,18 @@
         log.debug(u'set_bible_source %s', biblesource)
         self.biblesource = biblesource
 
-    def get_bible_chapter(self, version, bookid, bookname, chapter):
+    def get_bible_chapter(self, version, bookname, chapter):
         """
         Receive the request and call the relevant handler methods
         """
-        log.debug(u'get_bible_chapter %s,%s,%s,%s',
-            version, bookid, bookname, chapter)
+        log.debug(u'get_bible_chapter %s,%s,%s',
+            version, bookname, chapter)
         log.debug(u'biblesource = %s', self.biblesource)
         try:
             if self.biblesource.lower() == u'crosswalk':
                 ev = CWExtract(self.proxyurl)
             else:
                 ev = BGExtract(self.proxyurl)
-            return ev.get_bible_chapter(self.bibleid, bookid, bookname, chapter)
+            return ev.get_bible_chapter(self.bibleid, bookname, chapter)
         except:
             log.exception("Failed to get bible chapter")

=== modified file 'openlp/plugins/bibles/lib/common.py'
--- openlp/plugins/bibles/lib/common.py	2009-10-14 18:27:44 +0000
+++ openlp/plugins/bibles/lib/common.py	2009-10-27 18:25:19 +0000
@@ -163,5 +163,5 @@
             text = text[:start_tag] + text[end_tag + 1:]
             start_tag = text.find(u'<')
         text = text.replace(u'>', u'')
-        return text.rstrip()
+        return text.rstrip().lstrip()
 

=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py	2009-10-24 16:40:36 +0000
+++ openlp/plugins/bibles/lib/manager.py	2009-10-27 18:25:19 +0000
@@ -351,10 +351,10 @@
                 log.debug(u'get_verse_text : new book')
                 for chapter in range(schapter, echapter + 1):
                     self.media.setQuickMessage(
-                        self.trUtf8(u'Downloading %s: %s') % (bookname, chapter))
+                        unicode(self.media.trUtf8(u'Downloading %s: %s')) % (bookname, chapter))
                     search_results = \
                         self.bible_http_cache[bible].get_bible_chapter(
-                            bible, 0, bookname, chapter)
+                            bible, bookname, chapter)
                     if search_results.has_verselist() :
                         ## We have found a book of the bible lets check to see
                         ## if it was there.  By reusing the returned book name
@@ -380,7 +380,7 @@
                                 book.id, chapter)
                             if v is None:
                                 self.media.setQuickMessage(
-                                    self.trUtf8(u'%Downloading %s: %s')\
+                                    unicode(self.media.trUtf8(u'%Downloading %s: %s'))\
                                         % (bookname, chapter))
                                 self.bible_db_cache[bible].create_chapter(
                                     book.id, chapter,
@@ -392,11 +392,12 @@
                         book.id, chapter)
                     if v is None:
                         try:
-                            self.media.setQuickMessage \
-                                (u'Downloading %s: %s'% (bookname, chapter))
+                            self.media.setQuickMessage(\
+                                 unicode(self.media.trUtf8(u'Downloading %s: %s'))
+                                         % (bookname, chapter))
                             search_results = \
                                 self.bible_http_cache[bible].get_bible_chapter(
-                                    bible, book.id, bookname, chapter)
+                                    bible, bookname, chapter)
                             if search_results.has_verselist():
                                 self.bible_db_cache[bible].create_chapter(
                                     book.id, search_results.get_chapter(),

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2009-10-25 18:07:23 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2009-10-27 18:25:19 +0000
@@ -65,6 +65,8 @@
             QtCore.SIGNAL(u'clicked()'), self.onCopyrightInsertButtonTriggered)
         QtCore.QObject.connect(self.VerseAddButton,
             QtCore.SIGNAL(u'clicked()'), self.onVerseAddButtonClicked)
+        QtCore.QObject.connect(self.VerseListWidget,
+            QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onVerseEditButtonClicked)
         QtCore.QObject.connect(self.VerseEditButton,
             QtCore.SIGNAL(u'clicked()'), self.onVerseEditButtonClicked)
         QtCore.QObject.connect(self.VerseEditAllButton,
@@ -94,7 +96,7 @@
         QtCore.QObject.connect(self.VerseOrderEdit,
             QtCore.SIGNAL(u'lostFocus()'), self.onVerseOrderEditLostFocus)
         previewButton = QtGui.QPushButton()
-        previewButton.setText(self.trUtf8(u'Save & Preview'))
+        previewButton.setText(self.trUtf8(u'Save && Preview'))
         self.ButtonBox.addButton(previewButton, QtGui.QDialogButtonBox.ActionRole)
         QtCore.QObject.connect(self.ButtonBox,
             QtCore.SIGNAL(u'clicked(QAbstractButton*)'), self.onPreview)

=== modified file 'openlp/plugins/songs/lib/songstab.py'
--- openlp/plugins/songs/lib/songstab.py	2009-10-24 16:40:36 +0000
+++ openlp/plugins/songs/lib/songstab.py	2009-10-27 18:25:19 +0000
@@ -46,26 +46,43 @@
         self.SearchAsTypeCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
         self.SearchAsTypeCheckBox.setObjectName(u'SearchAsTypeCheckBox')
         self.SongsModeLayout.addWidget(self.SearchAsTypeCheckBox)
+        self.SongBarActiveCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
+        self.SongBarActiveCheckBox.setObjectName(u'SearchAsTypeCheckBox')
+        self.SongsModeLayout.addWidget(self.SongBarActiveCheckBox)
         self.SongsLayout.setWidget(
             0, QtGui.QFormLayout.LabelRole, self.SongsModeGroupBox)
         QtCore.QObject.connect(self.SearchAsTypeCheckBox,
             QtCore.SIGNAL(u'stateChanged(int)'),
             self.onSearchAsTypeCheckBoxChanged)
+        QtCore.QObject.connect(self.SongBarActiveCheckBox,
+            QtCore.SIGNAL(u'stateChanged(int)'),
+            self.SongBarActiveCheckBoxChanged)
 
     def retranslateUi(self):
         self.SongsModeGroupBox.setTitle(self.trUtf8(u'Songs Mode'))
         self.SearchAsTypeCheckBox.setText(self.trUtf8(u'Enable search as you type:'))
+        self.SongBarActiveCheckBox.setText(self.trUtf8(u'Display Verses on Live Tool bar:'))
 
     def onSearchAsTypeCheckBoxChanged(self, check_state):
-        self.bible_search = False
-        # we have a set value convert to True/False
-        if check_state == QtCore.Qt.Checked:
-            self.bible_search = True
+        self.song_search = False
+        # we have a set value convert to True/False
+        if check_state == QtCore.Qt.Checked:
+            self.song_search = True
+
+    def SongBarActiveCheckBoxChanged(self, check_state):
+        self.song_bar = False
+        # we have a set value convert to True/False
+        if check_state == QtCore.Qt.Checked:
+            self.song_bar = True
 
     def load(self):
-        self.bible_search = str_to_bool(
-            self.config.get_config(u'search as type', u'False'))
-        self.SearchAsTypeCheckBox.setChecked(self.bible_search)
+        self.song_search = str_to_bool(
+            self.config.get_config(u'search as type', False))
+        self.song_bar = str_to_bool(
+            self.config.get_config(u'display songbar', True))
+        self.SearchAsTypeCheckBox.setChecked(self.song_search)
+        self.SongBarActiveCheckBox.setChecked(self.song_bar)
 
     def save(self):
-        self.config.set_config(u'search as type', unicode(self.bible_search))
+        self.config.set_config(u'search as type', unicode(self.song_search))
+        self.config.set_config(u'display songbar', unicode(self.song_bar))

=== renamed directory 'openlp/plugins/audit' => 'openlp/plugins/songusage'
=== modified file 'openlp/plugins/songusage/forms/__init__.py'
--- openlp/plugins/audit/forms/__init__.py	2009-09-25 20:12:35 +0000
+++ openlp/plugins/songusage/forms/__init__.py	2009-10-27 18:25:19 +0000
@@ -22,5 +22,5 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 
-from auditdeleteform import AuditDeleteForm
-from auditdetailform import AuditDetailForm
+from songusagedeleteform import SongUsageDeleteForm
+from songusagedetailform import SongUsageDetailForm

=== renamed file 'openlp/plugins/audit/forms/auditdeletedialog.py' => 'openlp/plugins/songusage/forms/songusagedeletedialog.py'
--- openlp/plugins/audit/forms/auditdeletedialog.py	2009-10-23 18:48:49 +0000
+++ openlp/plugins/songusage/forms/songusagedeletedialog.py	2009-10-27 18:25:19 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-class Ui_AuditDeleteDialog(object):
+class Ui_SongUsageDeleteDialog(object):
     def setupUi(self, AuditDeleteDialog):
         AuditDeleteDialog.setObjectName(u'AuditDeleteDialog')
         AuditDeleteDialog.resize(291, 243)

=== renamed file 'openlp/plugins/audit/forms/auditdeleteform.py' => 'openlp/plugins/songusage/forms/songusagedeleteform.py'
--- openlp/plugins/audit/forms/auditdeleteform.py	2009-10-24 16:40:36 +0000
+++ openlp/plugins/songusage/forms/songusagedeleteform.py	2009-10-27 18:25:19 +0000
@@ -26,9 +26,9 @@
 
 from PyQt4 import QtGui
 
-from auditdeletedialog import Ui_AuditDeleteDialog
+from songusagedeletedialog import Ui_SongUsageDeleteDialog
 
-class AuditDeleteForm(QtGui.QDialog, Ui_AuditDeleteDialog):
+class SongUsageDeleteForm(QtGui.QDialog, Ui_SongUsageDeleteDialog):
     """
     Class documentation goes here.
     """

=== added file 'openlp/plugins/songusage/forms/songusagedetaildialog.py'
--- openlp/plugins/songusage/forms/songusagedetaildialog.py	1970-01-01 00:00:00 +0000
+++ openlp/plugins/songusage/forms/songusagedetaildialog.py	2009-10-27 18:25:19 +0000
@@ -0,0 +1,181 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'auditdetaildialog.ui'
+#
+# Created: Sun Oct 11 11:40:02 2009
+#      by: PyQt4 UI code generator 4.5.4
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_SongUsageDetailDialog(object):
+    def setupUi(self, AuditDetailDialog):
+        AuditDetailDialog.setObjectName(u'AuditDetailDialog')
+        AuditDetailDialog.resize(593, 501)
+        self.buttonBox = QtGui.QDialogButtonBox(AuditDetailDialog)
+        self.buttonBox.setGeometry(QtCore.QRect(420, 470, 170, 25))
+        self.buttonBox.setStandardButtons(
+            QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName(u'buttonBox')
+        self.FileGroupBox = QtGui.QGroupBox(AuditDetailDialog)
+        self.FileGroupBox.setGeometry(QtCore.QRect(10, 370, 571, 70))
+        self.FileGroupBox.setObjectName(u'FileGroupBox')
+        self.verticalLayout_4 = QtGui.QVBoxLayout(self.FileGroupBox)
+        self.verticalLayout_4.setObjectName(u'verticalLayout_4')
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName(u'horizontalLayout')
+        self.FileLineEdit = QtGui.QLineEdit(self.FileGroupBox)
+        self.FileLineEdit.setObjectName(u'FileLineEdit')
+        self.horizontalLayout.addWidget(self.FileLineEdit)
+        self.SaveFilePushButton = QtGui.QPushButton(self.FileGroupBox)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(u':/exports/export_load.png'),
+            QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.SaveFilePushButton.setIcon(icon)
+        self.SaveFilePushButton.setObjectName(u'SaveFilePushButton')
+        self.horizontalLayout.addWidget(self.SaveFilePushButton)
+        self.verticalLayout_4.addLayout(self.horizontalLayout)
+        self.layoutWidget = QtGui.QWidget(AuditDetailDialog)
+        self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 561, 361))
+        self.layoutWidget.setObjectName(u'layoutWidget')
+        self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget)
+        self.verticalLayout_3.setObjectName(u'verticalLayout_3')
+        self.ReportTypeGroup = QtGui.QGroupBox(self.layoutWidget)
+        self.ReportTypeGroup.setObjectName(u'ReportTypeGroup')
+        self.layoutWidget1 = QtGui.QWidget(self.ReportTypeGroup)
+        self.layoutWidget1.setGeometry(QtCore.QRect(50, 40, 481, 23))
+        self.layoutWidget1.setObjectName(u'layoutWidget1')
+        self.ReportHorizontalLayout = QtGui.QHBoxLayout(self.layoutWidget1)
+        self.ReportHorizontalLayout.setObjectName(u'ReportHorizontalLayout')
+        self.SummaryReport = QtGui.QRadioButton(self.layoutWidget1)
+        self.SummaryReport.setObjectName(u'SummaryReport')
+        self.ReportHorizontalLayout.addWidget(self.SummaryReport)
+        self.DetailedReport = QtGui.QRadioButton(self.layoutWidget1)
+        self.DetailedReport.setChecked(True)
+        self.DetailedReport.setObjectName(u'DetailedReport')
+        self.ReportHorizontalLayout.addWidget(self.DetailedReport)
+        self.verticalLayout_3.addWidget(self.ReportTypeGroup)
+        self.DateRangeGroupBox = QtGui.QGroupBox(self.layoutWidget)
+        self.DateRangeGroupBox.setObjectName(u'DateRangeGroupBox')
+        self.verticalLayout_2 = QtGui.QVBoxLayout(self.DateRangeGroupBox)
+        self.verticalLayout_2.setObjectName(u'verticalLayout_2')
+        self.DateHorizontalLayout = QtGui.QHBoxLayout()
+        self.DateHorizontalLayout.setObjectName(u'DateHorizontalLayout')
+        self.FromDateEdit = QtGui.QDateEdit(self.DateRangeGroupBox)
+        self.FromDateEdit.setCalendarPopup(True)
+        self.FromDateEdit.setObjectName(u'FromDateEdit')
+        self.DateHorizontalLayout.addWidget(self.FromDateEdit)
+        self.To = QtGui.QLabel(self.DateRangeGroupBox)
+        self.To.setObjectName(u'To')
+        self.DateHorizontalLayout.addWidget(self.To)
+        self.ToDateEdit = QtGui.QDateEdit(self.DateRangeGroupBox)
+        self.ToDateEdit.setCalendarPopup(True)
+        self.ToDateEdit.setObjectName(u'ToDateEdit')
+        self.DateHorizontalLayout.addWidget(self.ToDateEdit)
+        self.verticalLayout_2.addLayout(self.DateHorizontalLayout)
+        self.verticalLayout_3.addWidget(self.DateRangeGroupBox)
+        self.TimePeriodGroupBox = QtGui.QGroupBox(self.layoutWidget)
+        self.TimePeriodGroupBox.setObjectName(u'TimePeriodGroupBox')
+        self.verticalLayout = QtGui.QVBoxLayout(self.TimePeriodGroupBox)
+        self.verticalLayout.setObjectName(u'verticalLayout')
+        self.FirstHorizontalLayout = QtGui.QHBoxLayout()
+        self.FirstHorizontalLayout.setObjectName(u'FirstHorizontalLayout')
+        self.FirstCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
+        self.FirstCheckBox.setChecked(True)
+        self.FirstCheckBox.setObjectName(u'FirstCheckBox')
+        self.FirstHorizontalLayout.addWidget(self.FirstCheckBox)
+        self.FirstFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.FirstFromTimeEdit.setTime(QtCore.QTime(9, 0, 0))
+        self.FirstFromTimeEdit.setObjectName(u'FirstFromTimeEdit')
+        self.FirstHorizontalLayout.addWidget(self.FirstFromTimeEdit)
+        self.FirstTo = QtGui.QLabel(self.TimePeriodGroupBox)
+        self.FirstTo.setObjectName(u'FirstTo')
+        self.FirstHorizontalLayout.addWidget(self.FirstTo)
+        self.FirstToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.FirstToTimeEdit.setCalendarPopup(True)
+        self.FirstToTimeEdit.setTime(QtCore.QTime(10, 0, 0))
+        self.FirstToTimeEdit.setObjectName(u'FirstToTimeEdit')
+        self.FirstHorizontalLayout.addWidget(self.FirstToTimeEdit)
+        self.verticalLayout.addLayout(self.FirstHorizontalLayout)
+        self.SecondHorizontalLayout = QtGui.QHBoxLayout()
+        self.SecondHorizontalLayout.setObjectName(u'SecondHorizontalLayout')
+        self.SecondCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
+        self.SecondCheckBox.setChecked(True)
+        self.SecondCheckBox.setObjectName(u'SecondCheckBox')
+        self.SecondHorizontalLayout.addWidget(self.SecondCheckBox)
+        self.SecondFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.SecondFromTimeEdit.setTime(QtCore.QTime(10, 45, 0))
+        self.SecondFromTimeEdit.setObjectName(u'SecondFromTimeEdit')
+        self.SecondHorizontalLayout.addWidget(self.SecondFromTimeEdit)
+        self.SecondTo = QtGui.QLabel(self.TimePeriodGroupBox)
+        self.SecondTo.setObjectName(u'SecondTo')
+        self.SecondHorizontalLayout.addWidget(self.SecondTo)
+        self.SecondToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.SecondToTimeEdit.setObjectName(u'SecondToTimeEdit')
+        self.SecondHorizontalLayout.addWidget(self.SecondToTimeEdit)
+        self.verticalLayout.addLayout(self.SecondHorizontalLayout)
+        self.ThirdHorizontalLayout = QtGui.QHBoxLayout()
+        self.ThirdHorizontalLayout.setObjectName(u'ThirdHorizontalLayout')
+        self.ThirdCheckBox = QtGui.QCheckBox(self.TimePeriodGroupBox)
+        self.ThirdCheckBox.setChecked(True)
+        self.ThirdCheckBox.setObjectName(u'ThirdCheckBox')
+        self.ThirdHorizontalLayout.addWidget(self.ThirdCheckBox)
+        self.ThirdFromTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.ThirdFromTimeEdit.setTime(QtCore.QTime(18, 30, 0))
+        self.ThirdFromTimeEdit.setObjectName(u'ThirdFromTimeEdit')
+        self.ThirdHorizontalLayout.addWidget(self.ThirdFromTimeEdit)
+        self.ThirdTo = QtGui.QLabel(self.TimePeriodGroupBox)
+        self.ThirdTo.setObjectName(u'ThirdTo')
+        self.ThirdHorizontalLayout.addWidget(self.ThirdTo)
+        self.ThirdToTimeEdit = QtGui.QTimeEdit(self.TimePeriodGroupBox)
+        self.ThirdToTimeEdit.setTime(QtCore.QTime(19, 30, 0))
+        self.ThirdToTimeEdit.setObjectName(u'ThirdToTimeEdit')
+        self.ThirdHorizontalLayout.addWidget(self.ThirdToTimeEdit)
+        self.verticalLayout.addLayout(self.ThirdHorizontalLayout)
+        self.verticalLayout_3.addWidget(self.TimePeriodGroupBox)
+
+        self.retranslateUi(AuditDetailDialog)
+        QtCore.QObject.connect(
+            self.buttonBox, QtCore.SIGNAL(u'accepted()'),
+            AuditDetailDialog.accept)
+        QtCore.QObject.connect(
+            self.buttonBox, QtCore.SIGNAL(u'rejected()'),
+            AuditDetailDialog.close)
+        QtCore.QObject.connect(
+            self.FirstCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
+            AuditDetailDialog.changeFirstService)
+        QtCore.QObject.connect(
+            self.SecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
+            AuditDetailDialog.changeSecondService)
+        QtCore.QObject.connect(
+            self.ThirdCheckBox, QtCore.SIGNAL(u'stateChanged(int)'),
+            AuditDetailDialog.changeThirdService)
+        QtCore.QObject.connect(
+            self.SaveFilePushButton, QtCore.SIGNAL(u'pressed()'),
+            AuditDetailDialog.defineOutputLocation)
+        QtCore.QMetaObject.connectSlotsByName(AuditDetailDialog)
+
+    def retranslateUi(self, AuditDetailDialog):
+        AuditDetailDialog.setWindowTitle(self.trUtf8(u'Audit Detail Extraction'))
+        self.FileGroupBox.setTitle(self.trUtf8(u'Report Location'))
+        self.ReportTypeGroup.setTitle(self.trUtf8(u'Report Type'))
+        self.SummaryReport.setText(self.trUtf8(u'Summary'))
+        self.DetailedReport.setText(self.trUtf8(u'Detailed'))
+        self.DateRangeGroupBox.setTitle(self.trUtf8(u'Select Date Range'))
+        self.FromDateEdit.setDisplayFormat(self.trUtf8(u'dd/MM/yyyy'))
+        self.To.setText(self.trUtf8(u'to'))
+        self.ToDateEdit.setDisplayFormat(self.trUtf8(u'dd/MM/yyyy'))
+        self.TimePeriodGroupBox.setTitle(self.trUtf8(u'Select Time Periods'))
+        self.FirstCheckBox.setText(self.trUtf8(u'First Service'))
+        self.FirstFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
+        self.FirstTo.setText(self.trUtf8(u'to'))
+        self.FirstToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
+        self.SecondCheckBox.setText(self.trUtf8(u'Second Service'))
+        self.SecondFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
+        self.SecondTo.setText(self.trUtf8(u'to'))
+        self.SecondToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
+        self.ThirdCheckBox.setText(self.trUtf8(u'Third Service'))
+        self.ThirdFromTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))
+        self.ThirdTo.setText(self.trUtf8(u'to'))
+        self.ThirdToTimeEdit.setDisplayFormat(self.trUtf8(u'hh:mm AP'))

=== added file 'openlp/plugins/songusage/forms/songusagedetailform.py'
--- openlp/plugins/songusage/forms/songusagedetailform.py	1970-01-01 00:00:00 +0000
+++ openlp/plugins/songusage/forms/songusagedetailform.py	2009-10-27 18:25:19 +0000
@@ -0,0 +1,127 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2009 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, Carsten      #
+# Tinggaard, Jon Tibble, Jonathan Corwin, Maikel Stuivenberg, Scott Guerrieri #
+# --------------------------------------------------------------------------- #
+# 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 os
+
+from PyQt4 import QtCore, QtGui
+
+from songusagedetaildialog import Ui_SongUsageDetailDialog
+
+class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog):
+    """
+    Class documentation goes here.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        """
+        QtGui.QDialog.__init__(self, None)
+        self.parent = parent
+        self.setupUi(self)
+
+    def initialise(self):
+        self.FirstCheckBox.setCheckState(
+            int(self.parent.config.get_config(u'first service', QtCore.Qt.Checked)))
+        self.SecondCheckBox.setCheckState(
+            int(self.parent.config.get_config(u'second service', QtCore.Qt.Checked)))
+        self.ThirdCheckBox.setCheckState(
+            int(self.parent.config.get_config(u'third service', QtCore.Qt.Checked)))
+        year = QtCore.QDate().currentDate().year()
+        if QtCore.QDate().currentDate().month() < 9:
+            year -= 1
+        toDate = QtCore.QDate(year, 8, 31)
+        fromDate = QtCore.QDate(year - 1, 9, 1)
+        self.FromDateEdit.setDate(fromDate)
+        self.ToDateEdit.setDate(toDate)
+        self.FileLineEdit.setText(self.parent.config.get_last_dir(1))
+        self.resetWindow()
+
+    def changeFirstService(self, value):
+        self.parent.config.set_config(u'first service', value)
+        self.resetWindow()
+
+    def changeSecondService(self, value):
+        self.parent.config.set_config(u'second service', value)
+        self.resetWindow()
+
+    def changeThirdService(self, value):
+        self.parent.config.set_config(u'third service', value)
+        self.resetWindow()
+
+    def defineOutputLocation(self):
+        path = QtGui.QFileDialog.getExistingDirectory(self,
+            self.trUtf8(u'Output File Location'),
+            self.parent.config.get_last_dir(1) )
+        path = unicode(path)
+        if path != u'':
+            self.parent.config.set_last_dir(path, 1)
+            self.FileLineEdit.setText(path)
+
+    def resetWindow(self):
+        if self.FirstCheckBox.checkState() == QtCore.Qt.Unchecked:
+            self.FirstFromTimeEdit.setEnabled(False)
+            self.FirstToTimeEdit.setEnabled(False)
+        else:
+            self.FirstFromTimeEdit.setEnabled(True)
+            self.FirstToTimeEdit.setEnabled(True)
+        if self.SecondCheckBox.checkState() == QtCore.Qt.Unchecked:
+            self.SecondFromTimeEdit.setEnabled(False)
+            self.SecondToTimeEdit.setEnabled(False)
+        else:
+            self.SecondFromTimeEdit.setEnabled(True)
+            self.SecondToTimeEdit.setEnabled(True)
+        if self.ThirdCheckBox.checkState() == QtCore.Qt.Unchecked:
+            self.ThirdFromTimeEdit.setEnabled(False)
+            self.ThirdToTimeEdit.setEnabled(False)
+        else:
+            self.ThirdFromTimeEdit.setEnabled(True)
+            self.ThirdToTimeEdit.setEnabled(True)
+
+    def accept(self):
+        if self.DetailedReport.isChecked():
+            self.detailedReport()
+        else:
+            self.summaryReport()
+        self.close()
+
+    def detailedReport(self):
+        print "detailed"
+        filename = u'audit_det_%s_%s.txt' % \
+            (self.FromDateEdit.date().toString(u'ddMMyyyy'),
+             self.ToDateEdit.date().toString(u'ddMMyyyy'))
+        audits = self.parent.auditmanager.get_all_audits()
+        outname = os.path.join(unicode(self.FileLineEdit.text()), filename)
+        file = open(outname, u'w')
+        for audit in audits:
+            record = u'\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n' % \
+                (audit.auditdate,audit.audittime, audit.title,
+                 audit.copyright, audit.ccl_number , audit.authors)
+            file.write(record)
+        file.close()
+
+    def summaryReport(self):
+        print "summary"
+        filename = u'audit_sum_%s_%s.txt' % \
+            (self.FromDateEdit.date().toString(u'ddMMyyyy'),
+             self.ToDateEdit.date().toString(u'ddMMyyyy'))
+        print filename

=== modified file 'openlp/plugins/songusage/lib/__init__.py'
--- openlp/plugins/audit/lib/__init__.py	2009-10-03 11:07:58 +0000
+++ openlp/plugins/songusage/lib/__init__.py	2009-10-27 18:25:19 +0000
@@ -22,4 +22,4 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 
-from manager import AuditManager
+from manager import SongUsageManager

=== modified file 'openlp/plugins/songusage/lib/classes.py'
--- openlp/plugins/audit/lib/classes.py	2009-09-25 04:34:13 +0000
+++ openlp/plugins/songusage/lib/classes.py	2009-10-27 18:25:19 +0000
@@ -38,7 +38,7 @@
             me.__setattr__(key, kwargs[key])
         return me
 
-class AuditItem(BaseModel):
+class SongUsageItem(BaseModel):
     """
     Audit model
     """

=== modified file 'openlp/plugins/songusage/lib/manager.py'
--- openlp/plugins/audit/lib/manager.py	2009-09-28 20:45:04 +0000
+++ openlp/plugins/songusage/lib/manager.py	2009-10-27 18:25:19 +0000
@@ -24,17 +24,17 @@
 
 import logging
 
-from openlp.plugins.audit.lib.models import init_models, metadata, AuditItem
+from openlp.plugins.songusage.lib.models import init_models, metadata, SongUsageItem
 
-class AuditManager():
+class SongUsageManager():
     """
     The Song Manager provides a central location for all database code. This
     class takes care of connecting to the database and running all the queries.
     """
 
     global log
-    log = logging.getLogger(u'AuditManager')
-    log.info(u'Audit manager loaded')
+    log = logging.getLogger(u'SongUsageManager')
+    log.info(u'SongUsage manager loaded')
 
     def __init__(self, config):
         """
@@ -42,11 +42,11 @@
         don't exist.
         """
         self.config = config
-        log.debug(u'Audit Initialising')
+        log.debug(u'SongUsage Initialising')
         self.db_url = u''
         db_type = self.config.get_config(u'db type', u'sqlite')
         if db_type == u'sqlite':
-            self.db_url = u'sqlite:///%s/audit.sqlite' % \
+            self.db_url = u'sqlite:///%s/songusage.sqlite' % \
                 self.config.get_data_path()
         else:
             self.db_url = u'%s://%s:%s@%s/%s' % \
@@ -57,76 +57,78 @@
         self.session = init_models(self.db_url)
         metadata.create_all(checkfirst=True)
 
-        log.debug(u'Audit Initialised')
-
-    def get_all_audits(self):
-        """
-        Returns the details of a audit
-        """
-        return self.session.query(AuditItem).order_by(AuditItem.title).all()
-
-    def insert_audit(self, audititem):
-        """
-        Saves an audit to the database
-        """
-        log.debug(u'Audit added')
+        log.debug(u'SongUsage Initialised')
+
+    def get_all_songusage(self):
+        """
+        Returns the details of SongUsage
+        """
+        return self.session.query(SongUsageItem).\
+            order_by(SongUsageItem.usagedate, SongUsageItem.usagetime ).all()
+
+    def insert_songusage(self, songusageitem):
+        """
+        Saves an SongUsage to the database
+        """
+        log.debug(u'SongUsage added')
         try:
-            self.session.add(audititem)
+            self.session.add(songusageitem)
             self.session.commit()
             return True
         except:
             self.session.rollback()
-            log.exception(u'Audit item failed to save')
+            log.exception(u'SongUsage item failed to save')
             return False
 
-    def get_audit(self, id=None):
+    def get_songusage(self, id=None):
         """
-        Returns the details of an audit
+        Returns the details of a SongUsage
         """
         if id is None:
-            return AuditItem()
+            return SongUsageItem()
         else:
-            return self.session.query(AuditItem).get(id)
+            return self.session.query(SongUsageItem).get(id)
 
-    def delete_audit(self, id):
+    def delete_songusage(self, id):
         """
-        Delete a audit record
+        Delete a SongUsage record
         """
         if id !=0:
-            audititem = self.get_audit(id)
+            songusageitem = self.get_songusage(id)
             try:
-                self.session.delete(audititem)
+                self.session.delete(songusageitem)
                 self.session.commit()
                 return True
             except:
                 self.session.rollback()
-                log.excertion(u'Audit Item failed to delete')
+                log.excertion(u'SongUsage Item failed to delete')
                 return False
         else:
             return True
 
     def delete_all(self):
         """
-        Delete all audit records
+        Delete all Song Usage records
         """
         try:
-            self.session.query(AuditItem).delete(synchronize_session=False)
+            self.session.query(SongUsageItem).delete(synchronize_session=False)
             self.session.commit()
             return True
         except:
             self.session.rollback()
-            log.excertion(u'Failed to delete all audit items')
+            log.excertion(u'Failed to delete all Song Usage items')
             return False
 
     def delete_to_date(self, date):
         """
-        Delete audit records before given date
+        Delete SongUsage records before given date
         """
         try:
-            self.session.query(AuditItem).filter(AuditItem.auditdate <= date).delete(synchronize_session=False)
+            self.session.query(SongUsageItem).\
+                filter(SongUsageItem.usagedate <= date).delete(synchronize_session=False)
             self.session.commit()
             return True
         except:
             self.session.rollback()
-            log.excertion(u'Failed to delete all audit items to %s' % date)
+            log.excertion(u'Failed to delete all Song Usage items to %s' % date)
             return False

=== modified file 'openlp/plugins/songusage/lib/models.py'
--- openlp/plugins/audit/lib/models.py	2009-09-25 00:43:42 +0000
+++ openlp/plugins/songusage/lib/models.py	2009-10-27 18:25:19 +0000
@@ -25,14 +25,14 @@
 from sqlalchemy import create_engine
 from sqlalchemy.orm import scoped_session, sessionmaker, mapper
 
-from openlp.plugins.audit.lib.meta import metadata
-from openlp.plugins.audit.lib.tables import *
-from openlp.plugins.audit.lib.classes import *
+from openlp.plugins.songusage.lib.meta import metadata
+from openlp.plugins.songusage.lib.tables import *
+from openlp.plugins.songusage.lib.classes import *
 
 def init_models(url):
     engine = create_engine(url)
     metadata.bind = engine
     session = scoped_session(sessionmaker(autoflush=True, autocommit=False,
                                           bind=engine))
-    mapper(AuditItem, audit_table)
+    mapper(SongUsageItem, songusage_table)
     return session

=== modified file 'openlp/plugins/songusage/lib/tables.py'
--- openlp/plugins/audit/lib/tables.py	2009-09-25 00:43:42 +0000
+++ openlp/plugins/songusage/lib/tables.py	2009-10-27 18:25:20 +0000
@@ -24,13 +24,13 @@
 
 from sqlalchemy import Column, Table, types
 
-from openlp.plugins.audit.lib.meta import metadata
+from openlp.plugins.songusage.lib.meta import metadata
 
-# Definition of the "songs" table
-audit_table = Table(u'audit_data', metadata,
+# Definition of the "songusage" table
+songusage_table = Table(u'songusage_data', metadata,
     Column(u'id', types.Integer(), primary_key=True),
-    Column(u'auditdate', types.Date, index=True, nullable=False),
-    Column(u'audittime', types.Time, index=True, nullable=False),
+    Column(u'usagedate', types.Date, index=True, nullable=False),
+    Column(u'usagetime', types.Time, index=True, nullable=False),
     Column(u'title', types.Unicode(255), nullable=False),
     Column(u'authors', types.Unicode(255), nullable=False),
     Column(u'copyright', types.Unicode(255)),

=== renamed file 'openlp/plugins/audit/auditplugin.py' => 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/audit/auditplugin.py	2009-10-25 14:41:15 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2009-10-27 18:25:19 +0000
@@ -28,30 +28,30 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import Plugin, Receiver, str_to_bool, buildIcon
-from openlp.plugins.audit.lib import AuditManager
-from openlp.plugins.audit.forms import AuditDetailForm, AuditDeleteForm
-from openlp.plugins.audit.lib.models import AuditItem
+from openlp.plugins.songusage.lib import SongUsageManager
+from openlp.plugins.songusage.forms import SongUsageDetailForm, SongUsageDeleteForm
+from openlp.plugins.songusage.lib.models import SongUsageItem
 
-class AuditPlugin(Plugin):
+class SongUsagePlugin(Plugin):
     global log
-    log = logging.getLogger(u'AuditPlugin')
-    log.info(u'Audit Plugin loaded')
+    log = logging.getLogger(u'SongUsagePlugin')
+    log.info(u'SongUsage Plugin loaded')
 
     def __init__(self, plugin_helpers):
         # Call the parent constructor
-        Plugin.__init__(self, u'Audit', u'1.9.0', plugin_helpers)
+        Plugin.__init__(self, u'SongUsage', u'1.9.0', plugin_helpers)
         self.weight = -4
         # Create the plugin icon
         self.icon = buildIcon(u':/media/media_image.png')
-        self.auditmanager = None
-        self.auditActive = False
+        self.songusagemanager = None
+        self.songusageActive = False
 
     def can_be_disabled(self):
         return True
 
     def add_tools_menu_item(self, tools_menu):
         """
-        Give the Audit plugin the opportunity to add items to the
+        Give the SongUsage plugin the opportunity to add items to the
         **Tools** menu.
 
         ``tools_menu``
@@ -60,110 +60,99 @@
         """
         log.info(u'add tools menu')
         self.toolsMenu = tools_menu
-        self.AuditMenu = QtGui.QMenu(tools_menu)
-        self.AuditMenu.setObjectName(u'AuditMenu')
-        self.AuditMenu.setTitle(tools_menu.trUtf8(u'&Audit'))
-         #Audit Delete
-        self.AuditDelete = QtGui.QAction(tools_menu)
-        self.AuditDelete.setText(tools_menu.trUtf8(u'Audit &Delete'))
-        self.AuditDelete.setStatusTip(
-            tools_menu.trUtf8(u'Delete all audit data to sepecified date'))
-        self.AuditDelete.setObjectName(u'AuditDelete')
-        #Audit Report
-        self.AuditReport = QtGui.QAction(tools_menu)
-        self.AuditReport.setText(tools_menu.trUtf8(u'Au&dit &Extract'))
-        self.AuditReport.setStatusTip(
-            tools_menu.trUtf8(u'Generate Extracts on Audit Data'))
-        self.AuditReport.setObjectName(u'AuditReport')
-        #Audit activation
-        AuditIcon = buildIcon(u':/tools/tools_alert.png')
-        self.AuditStatus = QtGui.QAction(tools_menu)
-        self.AuditStatus.setIcon(AuditIcon)
-        self.AuditStatus.setCheckable(True)
-        self.AuditStatus.setChecked(False)
-        self.AuditStatus.setText(tools_menu.trUtf8(u'A&udit Status'))
-        self.AuditStatus.setStatusTip(
-            tools_menu.trUtf8(u'Start/Stop live song auditing'))
-        self.AuditStatus.setShortcut(u'F4')
-        self.AuditStatus.setObjectName(u'AuditStatus')
+        self.SongUsageMenu = QtGui.QMenu(tools_menu)
+        self.SongUsageMenu.setObjectName(u'SongUsageMenu')
+        self.SongUsageMenu.setTitle(tools_menu.trUtf8(u'&Song Usage'))
+         #SongUsage Delete
+        self.SongUsageDelete = QtGui.QAction(tools_menu)
+        self.SongUsageDelete.setText(tools_menu.trUtf8(u'&Delete recorded data'))
+        self.SongUsageDelete.setStatusTip(
+            tools_menu.trUtf8(u'Delete sing usage to sepecified date'))
+        self.SongUsageDelete.setObjectName(u'SongUsageDelete')
+        #SongUsage Report
+        self.SongUsageReport = QtGui.QAction(tools_menu)
+        self.SongUsageReport.setText(tools_menu.trUtf8(u'&Extract recoreded data'))
+        self.SongUsageReport.setStatusTip(
+            tools_menu.trUtf8(u'Generate Extracts on Song Usage'))
+        self.SongUsageReport.setObjectName(u'SongUsageReport')
+        #SongUsage activation
+        SongUsageIcon = buildIcon(u':/tools/tools_alert.png')
+        self.SongUsageStatus = QtGui.QAction(tools_menu)
+        self.SongUsageStatus.setIcon(SongUsageIcon)
+        self.SongUsageStatus.setCheckable(True)
+        self.SongUsageStatus.setChecked(False)
+        self.SongUsageStatus.setText(tools_menu.trUtf8(u'Song Usage Status'))
+        self.SongUsageStatus.setStatusTip(
+            tools_menu.trUtf8(u'Start/Stop live song usage recording'))
+        self.SongUsageStatus.setShortcut(u'F4')
+        self.SongUsageStatus.setObjectName(u'SongUsageStatus')
         #Add Menus together
-        self.toolsMenu.addAction(self.AuditMenu.menuAction())
-        self.AuditMenu.addAction(self.AuditStatus)
-        self.AuditMenu.addSeparator()
-        self.AuditMenu.addAction(self.AuditDelete)
-        self.AuditMenu.addAction(self.AuditReport)
+        self.toolsMenu.addAction(self.SongUsageMenu.menuAction())
+        self.SongUsageMenu.addAction(self.SongUsageStatus)
+        self.SongUsageMenu.addSeparator()
+        self.SongUsageMenu.addAction(self.SongUsageDelete)
+        self.SongUsageMenu.addAction(self.SongUsageReport)
         # Signals and slots
-        QtCore.QObject.connect(self.AuditStatus,
+        QtCore.QObject.connect(self.SongUsageStatus,
             QtCore.SIGNAL(u'visibilityChanged(bool)'),
-            self.AuditStatus.setChecked)
-        QtCore.QObject.connect(self.AuditStatus,
+            self.SongUsageStatus.setChecked)
+        QtCore.QObject.connect(self.SongUsageStatus,
             QtCore.SIGNAL(u'triggered(bool)'),
-            self.toggleAuditState)
-        QtCore.QObject.connect(self.AuditDelete,
-            QtCore.SIGNAL(u'triggered()'), self.onAuditDelete)
-        QtCore.QObject.connect(self.AuditReport,
-            QtCore.SIGNAL(u'triggered()'), self.onAuditReport)
-        self.AuditMenu.menuAction().setVisible(False)
+            self.toggleSongUsageState)
+        QtCore.QObject.connect(self.SongUsageDelete,
+            QtCore.SIGNAL(u'triggered()'), self.onSongUsageDelete)
+        QtCore.QObject.connect(self.SongUsageReport,
+            QtCore.SIGNAL(u'triggered()'), self.onSongUsageReport)
+        self.SongUsageMenu.menuAction().setVisible(False)
 
     def initialise(self):
-        log.info(u'audit Initialising')
+        log.info(u'SongUsage Initialising')
         Plugin.initialise(self)
         QtCore.QObject.connect(Receiver.get_receiver(),
-            QtCore.SIGNAL(u'audit_live'), self.onReceiveAudit)
-        QtCore.QObject.connect(Receiver.get_receiver(),
-            QtCore.SIGNAL(u'audit_changed'), self.onUpdateAudit)
-        self.auditActive = str_to_bool(
+            QtCore.SIGNAL(u'songusage_live'), self.onReceiveSongUsage)
+        self.SongUsageActive = str_to_bool(
             self.config.get_config(u'audit active', False))
-        self.AuditStatus.setChecked(self.auditActive)
-        if self.auditmanager is None:
-            self.auditmanager = AuditManager(self.config)
-        self.auditdeleteform = AuditDeleteForm(self.auditmanager)
-        self.auditdetailform = AuditDetailForm(self)
-        self.AuditMenu.menuAction().setVisible(True)
+        self.SongUsageStatus.setChecked(self.SongUsageActive)
+        if self.songusagemanager is None:
+            self.songusagemanager = SongUsageManager(self.config)
+        self.SongUsagedeleteform = SongUsageDeleteForm(self.songusagemanager)
+        self.SongUsagedetailform = SongUsageDetailForm(self)
+        self.SongUsageMenu.menuAction().setVisible(True)
 
     def finalise(self):
         log.info(u'Plugin Finalise')
-        self.AuditMenu.menuAction().setVisible(False)
+        self.SongUsageMenu.menuAction().setVisible(False)
         #stop any events being processed
-        self.auditActive = False
-
-    def toggleAuditState(self):
-        self.auditActive = not self.auditActive
-        self.config.set_config(u'audit active', self.auditActive)
-
-    def onReceiveAudit(self, auditData):
-        """
-        Audit a live song from SlideController
-        """
-        if self.auditActive:
-            audititem = AuditItem()
-            audititem.auditdate = datetime.today()
-            audititem.audittime = datetime.now().time()
-            audititem.title = auditData[0]
-            audititem.copyright = auditData[2]
-            audititem.ccl_number = auditData[3]
-            audititem.authors = u''
-            for author in auditData[1]:
-                audititem.authors += author + u' '
-            self.auditmanager.insert_audit(audititem)
-
-    def onUpdateAudit(self):
-        """
-        Someone may have changed to audit details
-        Sort out the file and the auditing state
-        """
-        self.auditActive = str_to_bool(
-            self.config.get_config(u'audit active', False))
-        self.AuditStatus.setEnabled(True)
-
-    def onAuditDelete(self):
-        self.auditdeleteform.exec_()
-
-    def onAuditReport(self):
-        self.auditdetailform.initialise()
-        self.auditdetailform.exec_()
+        self.SongUsageActive = False
+
+    def toggleSongUsageState(self):
+        self.SongUsageActive = not self.SongUsageActive
+        self.config.set_config(u'SongUsage active', self.SongUsageActive)
+
+    def onReceiveSongUsage(self, SongUsageData):
+        """
+        SongUsage a live song from SlideController
+        """
+        if self.SongUsageActive:
+            SongUsageitem = SongUsageItem()
+            SongUsageitem.usagedate = datetime.today()
+            SongUsageitem.usagetime = datetime.now().time()
+            SongUsageitem.title = SongUsageData[0]
+            SongUsageitem.copyright = SongUsageData[2]
+            SongUsageitem.ccl_number = SongUsageData[3]
+            SongUsageitem.authors = u''
+            for author in SongUsageData[1]:
+                SongUsageitem.authors += author + u' '
+            self.songusagemanager.insert_SongUsage(SongUsageitem)
+
+    def onSongUsageDelete(self):
+        self.SongUsagedeleteform.exec_()
+
+    def onSongUsageReport(self):
+        self.SongUsagedetailform.initialise()
+        self.SongUsagedetailform.exec_()
 
     def about(self):
-        about_text = u'<b>Audit Plugin</b><br />This plugin records the use '\
+        about_text = u'<b>SongUsage Plugin</b><br />This plugin records the use '\
             u'of songs and when they have been used during a live service'
         return about_text


Follow ups