Merge lp:~trb143/openlp/bitsandbobs into lp:openlp

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/bitsandbobs
Merge into: lp:openlp
Diff against target: 953 lines
18 files modified
openlp.pyw (+2/-1)
openlp/core/lib/dockwidget.py (+0/-5)
openlp/core/lib/mediamanageritem.py (+4/-4)
openlp/core/lib/pluginmanager.py (+1/-1)
openlp/core/lib/settingsmanager.py (+0/-10)
openlp/core/ui/mainwindow.py (+14/-1)
openlp/core/ui/pluginform.py (+5/-1)
openlp/core/ui/servicemanager.py (+45/-17)
openlp/core/ui/settingsform.py (+0/-15)
openlp/core/ui/thememanager.py (+30/-7)
openlp/core/utils/__init__.py (+21/-0)
openlp/plugins/audit/auditplugin.py (+4/-26)
openlp/plugins/audit/forms/auditdeletedialog.py (+4/-4)
openlp/plugins/audit/forms/auditdeleteform.py (+1/-1)
openlp/plugins/audit/forms/auditdetaildialog.py (+7/-3)
openlp/plugins/audit/forms/auditdetailform.py (+38/-199)
resources/forms/auditdeletedialog.ui (+14/-8)
resources/forms/auditdetaildialog.ui (+70/-2)
To merge this branch: bzr merge lp:~trb143/openlp/bitsandbobs
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Review via email: mp+13200@code.launchpad.net

This proposal supersedes a proposal from 2009-10-11.

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote : Posted in a previous version of this proposal

New toys:

Fixed Themes so default can be exported
Fixed Plugin list so can_be_disabled works
Fixed up drap and drop in service manager. New items and moving items around
Added version checking at start up once per day only.
Started to clean up Audit a bit.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

Two things...

Firstly, is there a reason for a whole object to check the latest version? Why not just put
a "check_version" function in the utils/__init__.py file?

Secondly, our coding standards say that only Qt-derivative classes should use camelCase method names. For all pure-Python objects, we use under_score method names.

review: Needs Fixing
Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

Also, there are various other bits and pieces of coding-style fixes.

No spaces between parent, = and None

 def __init__(self, parent = None):

Should be:

 def __init__(self, parent=None):

Even if it's not your code, please fix it when you see it.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Looks much better thanks. Just two comments...

1. When wanting to construct a string, rather use string formatting, like so:

    u':' +self.IconPath+u'_new.png'

   becomes

    u':%s_new.png' % self.IconPath

2. Can we rather use Firefox's agent string, or make up a better one than IE 5.5 ? Also, I
   think urllib/urllib2 might have a default agent string, which might be better.

review: Approve
lp:~trb143/openlp/bitsandbobs updated
596. By Jonathan Corwin

More Presentation fixes

597. By Tim Bentley

Various changes and fixes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp.pyw'
2--- openlp.pyw 2009-09-29 12:51:38 +0000
3+++ openlp.pyw 2009-10-12 05:00:34 +0000
4@@ -49,6 +49,7 @@
5 """
6 Run the OpenLP application.
7 """
8+ applicationVersion = u'1.9.0'
9 #set the default string encoding
10 try:
11 sys.setappdefaultencoding(u'utf-8')
12@@ -58,7 +59,7 @@
13 QtCore.QObject.connect(Receiver.get_receiver(),
14 QtCore.SIGNAL(u'process_events'), self.processEvents)
15 self.setApplicationName(u'OpenLP')
16- self.setApplicationVersion(u'1.9.0')
17+ self.setApplicationVersion(applicationVersion)
18 show_splash = str_to_bool(ConfigHelper.get_registry().get_value(
19 u'general', u'show splash', True))
20 if show_splash:
21
22=== modified file 'openlp/core/lib/dockwidget.py'
23--- openlp/core/lib/dockwidget.py 2009-09-29 12:51:38 +0000
24+++ openlp/core/lib/dockwidget.py 2009-10-12 05:00:34 +0000
25@@ -46,8 +46,3 @@
26 self.parent.settingsmanager.setUIItemVisibility(
27 self.objectName(), False)
28 event.accept()
29-
30- def resizeEvent(self, event):
31- if self.objectName() == u'MediaManagerDock':
32- if event.size().width() != event.oldSize().width():
33- self.parent.settingsmanager.setDockbarLeft(event.size().width())
34
35=== modified file 'openlp/core/lib/mediamanageritem.py'
36--- openlp/core/lib/mediamanageritem.py 2009-10-03 13:08:18 +0000
37+++ openlp/core/lib/mediamanageritem.py 2009-10-12 05:00:34 +0000
38@@ -281,22 +281,22 @@
39 self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
40 if self.hasEditIcon:
41 self.ListView.addAction(contextMenuAction(self.ListView,
42- ':' +self.IconPath+u'_new.png',
43+ u':' +self.IconPath+u'_new.png',
44 translate(self.TranslationContext,
45 u'&Edit ' + self.PluginTextShort),
46 self.onEditClick))
47 self.ListView.addAction(contextMenuSeparator(self.ListView))
48 self.ListView.addAction(contextMenuAction(
49- self.ListView, ':/system/system_preview.png',
50+ self.ListView, u':/system/system_preview.png',
51 translate(self.TranslationContext,
52 u'&Preview ' + self.PluginTextShort),
53 self.onPreviewClick))
54 self.ListView.addAction(contextMenuAction(
55- self.ListView, ':/system/system_live.png',
56+ self.ListView, u':/system/system_live.png',
57 translate(self.TranslationContext, u'&Show Live'),
58 self.onLiveClick))
59 self.ListView.addAction(contextMenuAction(
60- self.ListView, ':/system/system_add.png',
61+ self.ListView, u':/system/system_add.png',
62 translate(self.TranslationContext, u'&Add to Service'),
63 self.onAddClick))
64 QtCore.QObject.connect(self.ListView,
65
66=== modified file 'openlp/core/lib/pluginmanager.py'
67--- openlp/core/lib/pluginmanager.py 2009-10-10 04:56:06 +0000
68+++ openlp/core/lib/pluginmanager.py 2009-10-12 05:00:34 +0000
69@@ -90,7 +90,7 @@
70 try:
71 __import__(modulename, globals(), locals(), [])
72 except ImportError, e:
73- log.error(u'Failed to import module %s on path %s for reason %s',
74+ log.exception(u'Failed to import module %s on path %s for reason %s',
75 modulename, path, e.args[0])
76 plugin_classes = Plugin.__subclasses__()
77 self.plugins = []
78
79=== modified file 'openlp/core/lib/settingsmanager.py'
80--- openlp/core/lib/settingsmanager.py 2009-09-29 17:05:34 +0000
81+++ openlp/core/lib/settingsmanager.py 2009-10-12 05:00:34 +0000
82@@ -46,11 +46,6 @@
83 self.mainwindow_left = mainwindow_docbars
84 self.mainwindow_right = mainwindow_docbars
85
86- #self.mainwindow_left = int( ConfigHelper.get_config(
87- # u'user interface', u'mediamanager left', self.mainwindow_left))
88- #self.mainwindow_right = int( ConfigHelper.get_config(
89- # u'user interface', u'mediamanager right', self.mainwindow_right))
90-
91 self.slidecontroller = (self.width - (
92 self.mainwindow_left + self.mainwindow_right) - 100 ) / 2
93 self.slidecontroller_image = self.slidecontroller - 50
94@@ -79,8 +74,3 @@
95 def togglePreviewPanel(self, isVisible):
96 ConfigHelper.set_config(u'user interface', u'display previewpanel',
97 isVisible)
98-
99- def setDockbarLeft(self, value):
100- #ConfigHelper.set_config(u'user interface', u'mediamanager left', value)
101- pass
102-
103
104=== modified file 'openlp/core/ui/mainwindow.py'
105--- openlp/core/ui/mainwindow.py 2009-10-10 12:10:05 +0000
106+++ openlp/core/ui/mainwindow.py 2009-10-12 05:00:34 +0000
107@@ -33,7 +33,7 @@
108 from openlp.core.lib import translate, RenderManager, PluginConfig, \
109 OpenLPDockWidget, SettingsManager, PluginManager, Receiver, \
110 buildIcon
111-
112+from openlp.core.utils import check_latest_version
113
114 class Ui_MainWindow(object):
115 def setupUi(self, MainWindow):
116@@ -524,6 +524,19 @@
117 self.ThemeManagerContents.loadThemes()
118 log.info(u'Load data from Settings')
119 self.settingsForm.postSetUp()
120+ self.versionCheck()
121+
122+ def versionCheck(self):
123+ applicationVersion = self.generalConfig.get_config(u'Application version', u'1.9.0-595')
124+ version = check_latest_version(self.generalConfig, applicationVersion)
125+ if applicationVersion != version:
126+ QtGui.QMessageBox.question(None,
127+ translate(u'mainWindow', u'OpenLP version Updated'),
128+ translate(u'mainWindow', u'OpenLP version %s has been updated to version %s'
129+ % (applicationVersion, version)),
130+ QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
131+ QtGui.QMessageBox.Ok)
132+ self.generalConfig.set_config(u'Application version', version)
133
134
135 def getMonitorNumber(self):
136
137=== modified file 'openlp/core/ui/pluginform.py'
138--- openlp/core/ui/pluginform.py 2009-10-08 19:58:49 +0000
139+++ openlp/core/ui/pluginform.py 2009-10-12 05:00:34 +0000
140@@ -83,7 +83,11 @@
141 log.debug('PluginStatus: %s', str(self.activePlugin.status))
142 self.VersionNumberLabel.setText(self.activePlugin.version)
143 self.AboutTextBrowser.setHtml(self.activePlugin.about())
144- self.StatusComboBox.setCurrentIndex(int(self.activePlugin.status))
145+ if self.activePlugin.can_be_disabled():
146+ self.StatusComboBox.setCurrentIndex(int(self.activePlugin.status))
147+ self.StatusComboBox.setEnabled(True)
148+ else:
149+ self.StatusComboBox.setEnabled(False)
150
151 def onPluginListWidgetSelectionChanged(self):
152 if self.PluginListWidget.currentItem() is None:
153
154=== modified file 'openlp/core/ui/servicemanager.py'
155--- openlp/core/ui/servicemanager.py 2009-10-01 16:56:42 +0000
156+++ openlp/core/ui/servicemanager.py 2009-10-12 05:00:34 +0000
157@@ -66,6 +66,20 @@
158 else:
159 event.ignore()
160
161+ def mouseMoveEvent(self, event):
162+ """
163+ Drag and drop event does not care what data is selected
164+ as the recipient will use events to request the data move
165+ just tell it what plugin to call
166+ """
167+ if event.buttons() != QtCore.Qt.LeftButton:
168+ return
169+ drag = QtGui.QDrag(self)
170+ mimeData = QtCore.QMimeData()
171+ drag.setMimeData(mimeData)
172+ mimeData.setText(u'ServiceManager')
173+ dropAction = drag.start(QtCore.Qt.CopyAction)
174+
175 class Iter(QtGui.QTreeWidgetItemIterator):
176 def __init__(self, *args):
177 QtGui.QTreeWidgetItemIterator.__init__(self, *args)
178@@ -490,23 +504,16 @@
179 Service Item to be added
180
181 """
182- self.serviceItems.append({u'data': item,
183- u'order': len(self.serviceItems)+1, u'expanded':True})
184- treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
185- treewidgetitem.setText(0,item.title)
186- treewidgetitem.setIcon(0,item.iconic_representation)
187- treewidgetitem.setData(0, QtCore.Qt.UserRole,
188- QtCore.QVariant(len(self.serviceItems)))
189- treewidgetitem.setExpanded(True)
190+ sitem, count = self.findServiceItem()
191 item.render()
192- count = 0
193- for frame in item.frames:
194- treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
195- text = frame[u'title']
196- treewidgetitem1.setText(0,text[:40])
197- treewidgetitem1.setData(0, QtCore.Qt.UserRole,
198- QtCore.QVariant(count))
199- count = count + 1
200+ if sitem == -1:
201+ self.serviceItems.append({u'data': item,
202+ u'order': len(self.serviceItems) + 1, u'expanded':True})
203+ self.repaintServiceList(len(self.serviceItems) + 1, 0)
204+ else:
205+ self.serviceItems.insert(sitem + 1, {u'data': item,
206+ u'order': len(self.serviceItems)+1, u'expanded':True})
207+ self.repaintServiceList(sitem + 1, 0)
208 self.parent.serviceChanged(False, self.serviceName)
209
210 def makePreview(self):
211@@ -565,7 +572,28 @@
212 link = event.mimeData()
213 if link.hasText():
214 plugin = event.mimeData().text()
215- Receiver().send_message(u'%s_add_service_item' % plugin)
216+ if plugin == u'ServiceManager':
217+ startpos, startCount = self.findServiceItem()
218+ item = self.ServiceManagerList.itemAt(event.pos())
219+ if item == None:
220+ endpos = len(self.serviceItems)
221+ else:
222+ parentitem = item.parent()
223+ if parentitem is None:
224+ endpos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
225+ else:
226+ endpos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
227+ endpos -= 1
228+ if endpos < startpos:
229+ newpos = endpos
230+ else:
231+ newpos = endpos + 1
232+ serviceItem = self.serviceItems[startpos]
233+ self.serviceItems.remove(serviceItem)
234+ self.serviceItems.insert(newpos, serviceItem)
235+ self.repaintServiceList(endpos, startCount)
236+ else:
237+ Receiver().send_message(u'%s_add_service_item' % plugin)
238
239 def updateThemeList(self, theme_list):
240 """
241
242=== modified file 'openlp/core/ui/settingsform.py'
243--- openlp/core/ui/settingsform.py 2009-10-10 04:56:06 +0000
244+++ openlp/core/ui/settingsform.py 2009-10-12 05:00:34 +0000
245@@ -53,28 +53,13 @@
246 def insertTab(self, tab, location):
247 log.debug(u'Inserting %s tab' % tab.title())
248 self.SettingsTabWidget.insertTab(location + 13, tab, tab.title())
249- #for tab_index in range(0, self.SettingsTabWidget.count()):
250- #print self.SettingsTabWidget.widget(tab_index).title()
251- #if self.SettingsTabWidget.widget(tab_index).title() == name:
252- #print "Insert match"
253- #print self.SettingsTabWidget.widget(tab_index).isVisible()
254- #self.SettingsTabWidget.setTabEnabled(tab_index, True)
255- #self.SettingsTabWidget.removeTab(tab_index)
256- #print self.SettingsTabWidget.widget(tab_index).isVisible()
257-
258
259 def removeTab(self, name):
260 log.debug(u'remove %s tab' % name)
261- #print ">>>>>>>>>>> remove settings"
262 for tab_index in range(0, self.SettingsTabWidget.count()):
263 if self.SettingsTabWidget.widget(tab_index) is not None:
264- #print "rt", self.SettingsTabWidget.widget(tab_index).title(), name
265 if self.SettingsTabWidget.widget(tab_index).title() == name:
266- #print "remove match"
267- #print self.SettingsTabWidget.widget(tab_index).isVisible()
268- #self.SettingsTabWidget.setTabEnabled(tab_index, False)
269 self.SettingsTabWidget.removeTab(tab_index)
270- #print self.SettingsTabWidget.widget(tab_index).isVisible()
271
272 def accept(self):
273 for tab_index in range(0, self.SettingsTabWidget.count()):
274
275=== modified file 'openlp/core/ui/thememanager.py'
276--- openlp/core/ui/thememanager.py 2009-09-25 00:43:42 +0000
277+++ openlp/core/ui/thememanager.py 2009-10-12 05:00:34 +0000
278@@ -33,7 +33,8 @@
279 from openlp.core.ui import AmendThemeForm
280 from openlp.core.theme import Theme
281 from openlp.core.lib import PluginConfig, OpenLPToolbar, ThemeXML, translate, \
282- str_to_bool, file_to_xml, buildIcon, Receiver
283+ str_to_bool, file_to_xml, buildIcon, Receiver, contextMenuAction, \
284+ contextMenuSeparator
285 from openlp.core.utils import ConfigHelper
286
287 class ThemeManager(QtGui.QWidget):
288@@ -77,6 +78,25 @@
289 self.ThemeListWidget.setAlternatingRowColors(True)
290 self.ThemeListWidget.setIconSize(QtCore.QSize(88,50))
291 self.Layout.addWidget(self.ThemeListWidget)
292+ self.ThemeListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
293+ self.ThemeListWidget.addAction(contextMenuAction(self.ThemeListWidget,
294+ u':/themes/theme_edit.png',
295+ translate(u'ThemeManager', u'Edit a theme'),
296+ self.onEditTheme))
297+ self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget))
298+ self.ThemeListWidget.addAction(contextMenuAction(self.ThemeListWidget,
299+ u':/themes/theme_delete.png',
300+ translate(u'ThemeManager', u'Delete theme'),
301+ self.onDeleteTheme))
302+ self.ThemeListWidget.addAction(contextMenuAction(self.ThemeListWidget,
303+ u':/themes/theme_export.png',
304+ translate(u'ThemeManager', u'Make Global'),
305+ self.changeGlobalFromScreen))
306+ self.ThemeListWidget.addAction(contextMenuAction(self.ThemeListWidget,
307+ u':/themes/theme_export.png',
308+ translate(u'ThemeManager', u'Export theme'),
309+ self.onExportTheme))
310+ self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget))
311 #Signals
312 QtCore.QObject.connect(self.ThemeListWidget,
313 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
314@@ -109,8 +129,9 @@
315 u'default'))
316 self.ThemeListWidget.item(count).setText(name)
317
318- def changeGlobalFromScreen(self, index):
319+ def changeGlobalFromScreen(self, index = -1):
320 log.debug(u'changeGlobalFromScreen %s', index)
321+ selected_row = self.ThemeListWidget.currentRow()
322 for count in range (0, self.ThemeListWidget.count()):
323 item = self.ThemeListWidget.item(count)
324 oldName = item.text()
325@@ -119,7 +140,7 @@
326 self.ThemeListWidget.item(count).setText(
327 unicode(item.data(QtCore.Qt.UserRole).toString()))
328 #Set the new name
329- if count == index.row():
330+ if count == selected_row:
331 self.global_theme = unicode(
332 self.ThemeListWidget.item(count).text())
333 name = u'%s (%s)' % (self.global_theme,
334@@ -186,14 +207,15 @@
335 u'You have not selected a theme!'),
336 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
337 return
338- theme = unicode(item.text())
339+ theme = unicode(item.data(QtCore.Qt.UserRole).toString())
340 path = QtGui.QFileDialog.getExistingDirectory(self,
341- u'Save Theme',self.config.get_last_dir(1) )
342+ u'Save Theme - (%s)' % theme,
343+ self.config.get_last_dir(1) )
344 path = unicode(path)
345 if path != u'':
346 self.config.set_last_dir(path, 1)
347 themePath = os.path.join(path, theme + u'.theme')
348- zip = zipfile.ZipFile(themePath, 'w')
349+ zip = zipfile.ZipFile(themePath, u'w')
350 source = os.path.join(self.path, theme)
351 for root, dirs, files in os.walk(source):
352 for name in files:
353@@ -203,7 +225,8 @@
354
355 def onImportTheme(self):
356 files = QtGui.QFileDialog.getOpenFileNames(None,
357- translate(u'ThemeManager', u'Select Theme Import File'),
358+ translate(u'ThemeManager',
359+ u'Select Theme Import File'),
360 self.path, u'Theme (*.*)')
361 log.info(u'New Themes %s', unicode(files))
362 if len(files) > 0:
363
364=== modified file 'openlp/core/utils/__init__.py'
365--- openlp/core/utils/__init__.py 2009-09-08 19:58:05 +0000
366+++ openlp/core/utils/__init__.py 2009-10-12 05:00:34 +0000
367@@ -21,8 +21,29 @@
368 # with this program; if not, write to the Free Software Foundation, Inc., 59 #
369 # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
370 ###############################################################################
371+import logging
372+import urllib2
373+from datetime import datetime
374
375 from registry import Registry
376 from confighelper import ConfigHelper
377
378 __all__ = ['Registry', 'ConfigHelper']
379+
380+def check_latest_version(config, current_version):
381+ version_string = current_version
382+ lastTest = config.get_config(u'Application version Test', datetime.now().date())
383+ thisTest = unicode(datetime.now().date())
384+ config.set_config(u'Application version Test', thisTest)
385+ if lastTest != thisTest:
386+ version_string = u''
387+ req = urllib2.Request(u'http://www.openlp.org/files/version.txt')
388+ req.add_header(u'User-Agent', u'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
389+ try:
390+ handle = urllib2.urlopen(req, None, 1)
391+ html = handle.read()
392+ version_string = unicode(html).rstrip()
393+ except IOError, e:
394+ if hasattr(e, u'reason'):
395+ log.exception(u'Reason for failure: %s', e.reason)
396+ return version_string
397
398=== modified file 'openlp/plugins/audit/auditplugin.py'
399--- openlp/plugins/audit/auditplugin.py 2009-10-03 18:39:44 +0000
400+++ openlp/plugins/audit/auditplugin.py 2009-10-12 05:00:34 +0000
401@@ -64,14 +64,7 @@
402 self.AuditMenu.setObjectName(u'AuditMenu')
403 self.AuditMenu.setTitle(
404 translate(u'AuditPlugin', u'&Audit'))
405- #Audit Delete All
406- self.AuditDeleteAll = QtGui.QAction(tools_menu)
407- self.AuditDeleteAll.setText(
408- translate(u'AuditPlugin', u'Au&dit Delete all'))
409- self.AuditDeleteAll.setStatusTip(
410- translate(u'AuditPlugin', u'Deleted all Audit records'))
411- self.AuditDeleteAll.setObjectName(u'AuditDeleteAll')
412- #Audit Delete
413+ #Audit Delete
414 self.AuditDelete = QtGui.QAction(tools_menu)
415 self.AuditDelete.setText(
416 translate(u'AuditPlugin', u'Audit &Delete'))
417@@ -81,9 +74,9 @@
418 #Audit Report
419 self.AuditReport = QtGui.QAction(tools_menu)
420 self.AuditReport.setText(
421- translate(u'AuditPlugin', u'Au&dit &Report'))
422+ translate(u'AuditPlugin', u'Au&dit &Extract'))
423 self.AuditReport.setStatusTip(
424- translate(u'AuditPlugin', u'Generate Reports on Audit Data'))
425+ translate(u'AuditPlugin', u'Generate Extracts on Audit Data'))
426 self.AuditReport.setObjectName(u'AuditReport')
427 #Audit activation
428 AuditIcon = buildIcon(u':/tools/tools_alert.png')
429@@ -100,9 +93,7 @@
430 self.toolsMenu.addAction(self.AuditMenu.menuAction())
431 self.AuditMenu.addAction(self.AuditStatus)
432 self.AuditMenu.addSeparator()
433- self.AuditMenu.addAction(self.AuditDeleteAll)
434 self.AuditMenu.addAction(self.AuditDelete)
435- self.AuditMenu.addSeparator()
436 self.AuditMenu.addAction(self.AuditReport)
437 # Signals and slots
438 QtCore.QObject.connect(self.AuditStatus,
439@@ -111,8 +102,6 @@
440 QtCore.QObject.connect(self.AuditStatus,
441 QtCore.SIGNAL(u'triggered(bool)'),
442 self.toggleAuditState)
443- QtCore.QObject.connect(self.AuditDeleteAll,
444- QtCore.SIGNAL(u'triggered()'), self.onAuditDeleteAll)
445 QtCore.QObject.connect(self.AuditDelete,
446 QtCore.SIGNAL(u'triggered()'), self.onAuditDelete)
447 QtCore.QObject.connect(self.AuditReport,
448@@ -132,7 +121,7 @@
449 if self.auditmanager is None:
450 self.auditmanager = AuditManager(self.config)
451 self.auditdeleteform = AuditDeleteForm(self.auditmanager)
452- self.auditdetailform = AuditDetailForm(self.auditmanager)
453+ self.auditdetailform = AuditDetailForm(self)
454 self.AuditMenu.menuAction().setVisible(True)
455
456 def finalise(self):
457@@ -170,17 +159,6 @@
458 self.config.get_config(u'audit active', False))
459 self.AuditStatus.setEnabled(True)
460
461- def onAuditDeleteAll(self):
462- ret = QtGui.QMessageBox.question(None,
463- translate(u'mainWindow', u'Delete All Audit Events?'),
464- translate(u'mainWindow', u'Are you sure you want to delete all Audit Data?'),
465- QtGui.QMessageBox.StandardButtons(
466- QtGui.QMessageBox.Ok |
467- QtGui.QMessageBox.Cancel),
468- QtGui.QMessageBox.Cancel)
469- if ret == QtGui.QMessageBox.Ok:
470- self.auditmanager.delete_all()
471-
472 def onAuditDelete(self):
473 self.auditdeleteform.exec_()
474
475
476=== modified file 'openlp/plugins/audit/forms/auditdeletedialog.py'
477--- openlp/plugins/audit/forms/auditdeletedialog.py 2009-09-25 20:12:35 +0000
478+++ openlp/plugins/audit/forms/auditdeletedialog.py 2009-10-12 05:00:34 +0000
479@@ -2,7 +2,7 @@
480
481 # Form implementation generated from reading ui file 'auditdeletedialog.ui'
482 #
483-# Created: Fri Sep 25 21:03:48 2009
484+# Created: Sun Oct 11 11:34:45 2009
485 # by: PyQt4 UI code generator 4.5.4
486 #
487 # WARNING! All changes made in this file will be lost!
488@@ -12,7 +12,7 @@
489 class Ui_AuditDeleteDialog(object):
490 def setupUi(self, AuditDeleteDialog):
491 AuditDeleteDialog.setObjectName("AuditDeleteDialog")
492- AuditDeleteDialog.resize(291, 202)
493+ AuditDeleteDialog.resize(291, 243)
494 self.layoutWidget = QtGui.QWidget(AuditDeleteDialog)
495 self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 247, 181))
496 self.layoutWidget.setObjectName("layoutWidget")
497@@ -24,10 +24,10 @@
498 self.DeleteCalendar.setVerticalHeaderFormat(QtGui.QCalendarWidget.NoVerticalHeader)
499 self.DeleteCalendar.setObjectName("DeleteCalendar")
500 self.verticalLayout.addWidget(self.DeleteCalendar)
501- self.buttonBox = QtGui.QDialogButtonBox(self.layoutWidget)
502+ self.buttonBox = QtGui.QDialogButtonBox(AuditDeleteDialog)
503+ self.buttonBox.setGeometry(QtCore.QRect(30, 210, 245, 25))
504 self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
505 self.buttonBox.setObjectName("buttonBox")
506- self.verticalLayout.addWidget(self.buttonBox)
507
508 self.retranslateUi(AuditDeleteDialog)
509 QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), AuditDeleteDialog.accept)
510
511=== modified file 'openlp/plugins/audit/forms/auditdeleteform.py'
512--- openlp/plugins/audit/forms/auditdeleteform.py 2009-09-29 02:54:32 +0000
513+++ openlp/plugins/audit/forms/auditdeleteform.py 2009-10-12 05:00:34 +0000
514@@ -34,7 +34,7 @@
515 """
516 Class documentation goes here.
517 """
518- def __init__(self, auditmanager, parent = None):
519+ def __init__(self, auditmanager, parent=None):
520 """
521 Constructor
522 """
523
524=== modified file 'openlp/plugins/audit/forms/auditdetaildialog.py'
525--- openlp/plugins/audit/forms/auditdetaildialog.py 2009-09-25 20:12:35 +0000
526+++ openlp/plugins/audit/forms/auditdetaildialog.py 2009-10-12 05:00:34 +0000
527@@ -2,7 +2,7 @@
528
529 # Form implementation generated from reading ui file 'auditdetaildialog.ui'
530 #
531-# Created: Fri Sep 25 21:04:08 2009
532+# Created: Sun Oct 11 11:40:02 2009
533 # by: PyQt4 UI code generator 4.5.4
534 #
535 # WARNING! All changes made in this file will be lost!
536@@ -136,6 +136,10 @@
537 self.retranslateUi(AuditDetailDialog)
538 QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), AuditDetailDialog.accept)
539 QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), AuditDetailDialog.close)
540+ QtCore.QObject.connect(self.FirstCheckBox, QtCore.SIGNAL("stateChanged(int)"), AuditDetailDialog.changeFirstService)
541+ QtCore.QObject.connect(self.SecondCheckBox, QtCore.SIGNAL("stateChanged(int)"), AuditDetailDialog.changeSecondService)
542+ QtCore.QObject.connect(self.ThirdCheckBox, QtCore.SIGNAL("stateChanged(int)"), AuditDetailDialog.changeThirdService)
543+ QtCore.QObject.connect(self.SaveFilePushButton, QtCore.SIGNAL("pressed()"), AuditDetailDialog.defineOutputLocation)
544 QtCore.QMetaObject.connectSlotsByName(AuditDetailDialog)
545
546 def retranslateUi(self, AuditDetailDialog):
547@@ -144,11 +148,11 @@
548 self.ReportTypeGroup.setTitle(QtGui.QApplication.translate("AuditDetailDialog", "Report Type", None, QtGui.QApplication.UnicodeUTF8))
549 self.SummaryReport.setText(QtGui.QApplication.translate("AuditDetailDialog", "Summary", None, QtGui.QApplication.UnicodeUTF8))
550 self.DetailedReport.setText(QtGui.QApplication.translate("AuditDetailDialog", "Detailed", None, QtGui.QApplication.UnicodeUTF8))
551- self.DateRangeGroupBox.setTitle(QtGui.QApplication.translate("AuditDetailDialog", "Date Range", None, QtGui.QApplication.UnicodeUTF8))
552+ self.DateRangeGroupBox.setTitle(QtGui.QApplication.translate("AuditDetailDialog", "Select Date Range", None, QtGui.QApplication.UnicodeUTF8))
553 self.FromDateEdit.setDisplayFormat(QtGui.QApplication.translate("AuditDetailDialog", "dd/MM/yyyy", None, QtGui.QApplication.UnicodeUTF8))
554 self.To.setText(QtGui.QApplication.translate("AuditDetailDialog", "to", None, QtGui.QApplication.UnicodeUTF8))
555 self.ToDateEdit.setDisplayFormat(QtGui.QApplication.translate("AuditDetailDialog", "dd/MM/yyyy", None, QtGui.QApplication.UnicodeUTF8))
556- self.TimePeriodGroupBox.setTitle(QtGui.QApplication.translate("AuditDetailDialog", "Time Periods", None, QtGui.QApplication.UnicodeUTF8))
557+ self.TimePeriodGroupBox.setTitle(QtGui.QApplication.translate("AuditDetailDialog", "Select Time Periods", None, QtGui.QApplication.UnicodeUTF8))
558 self.FirstCheckBox.setText(QtGui.QApplication.translate("AuditDetailDialog", "First Service", None, QtGui.QApplication.UnicodeUTF8))
559 self.FirstFromTimeEdit.setDisplayFormat(QtGui.QApplication.translate("AuditDetailDialog", "hh:mm AP", None, QtGui.QApplication.UnicodeUTF8))
560 self.FirstTo.setText(QtGui.QApplication.translate("AuditDetailDialog", "to", None, QtGui.QApplication.UnicodeUTF8))
561
562=== modified file 'openlp/plugins/audit/forms/auditdetailform.py'
563--- openlp/plugins/audit/forms/auditdetailform.py 2009-09-25 20:12:35 +0000
564+++ openlp/plugins/audit/forms/auditdetailform.py 2009-10-12 05:00:34 +0000
565@@ -32,209 +32,48 @@
566 """
567 Class documentation goes here.
568 """
569- def __init__(self, auditmanager, parent = None):
570+ def __init__(self, parent=None):
571 """
572 Constructor
573 """
574- QtGui.QDialog.__init__(self, parent)
575- #self.parent = parent
576+ QtGui.QDialog.__init__(self, None)
577+ self.parent = parent
578 self.setupUi(self)
579-# # Connecting signals and slots
580-# QtCore.QObject.connect(self.buttonBox,
581-# QtCore.SIGNAL(u'rejected()'), self.rejected)
582-# QtCore.QObject.connect(self.buttonBox,
583-# QtCore.SIGNAL(u'accepted()'), self.accept)
584-# QtCore.QObject.connect(self.AddButton,
585-# QtCore.SIGNAL(u'pressed()'), self.onAddButtonPressed)
586-# QtCore.QObject.connect(self.EditButton,
587-# QtCore.SIGNAL(u'pressed()'), self.onEditButtonPressed)
588-# QtCore.QObject.connect(self.EditAllButton,
589-# QtCore.SIGNAL(u'pressed()'), self.onEditAllButtonPressed)
590-# QtCore.QObject.connect(self.SaveButton,
591-# QtCore.SIGNAL(u'pressed()'), self.onSaveButtonPressed)
592-# QtCore.QObject.connect(self.DeleteButton,
593-# QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonPressed)
594-# QtCore.QObject.connect(self.ClearButton,
595-# QtCore.SIGNAL(u'pressed()'), self.onClearButtonPressed)
596-# QtCore.QObject.connect(self.UpButton,
597-# QtCore.SIGNAL(u'pressed()'), self.onUpButtonPressed)
598-# QtCore.QObject.connect(self.DownButton,
599-# QtCore.SIGNAL(u'pressed()'), self.onDownButtonPressed)
600-#
601-# QtCore.QObject.connect(self.VerseListView,
602-# QtCore.SIGNAL(u'itemDoubleClicked(QListWidgetItem*)'),
603-# self.onVerseListViewSelected)
604-# QtCore.QObject.connect(self.VerseListView,
605-# QtCore.SIGNAL(u'itemClicked(QListWidgetItem*)'),
606-# self.onVerseListViewPressed)
607-# QtCore.QObject.connect(Receiver.get_receiver(),
608-# QtCore.SIGNAL(u'update_themes'), self.loadThemes)
609-# # Create other objects and forms
610-# self.custommanager = custommanager
611 self.initialise()
612
613 def initialise(self):
614- pass
615-# self.editAll = False
616-# self.DeleteButton.setEnabled(False)
617-# self.EditButton.setEnabled(False)
618-# self.EditAllButton.setEnabled(True)
619-# self.SaveButton.setEnabled(False)
620-# self.ClearButton.setEnabled(False)
621-# self.TitleEdit.setText(u'')
622-# self.CreditEdit.setText(u'')
623-# self.VerseTextEdit.clear()
624-# self.VerseListView.clear()
625-# #make sure we have a new item
626-# self.customSlide = CustomSlide()
627-# self.ThemeComboBox.addItem(u'')
628-#
629-# def loadThemes(self, themelist):
630-# self.ThemeComboBox.clear()
631-# self.ThemeComboBox.addItem(u'')
632-# for themename in themelist:
633-# self.ThemeComboBox.addItem(themename)
634-#
635-# def loadCustom(self, id):
636-# self.customSlide = CustomSlide()
637-# self.initialise()
638-# if id != 0:
639-# self.customSlide = self.custommanager.get_custom(id)
640-# self.TitleEdit.setText(self.customSlide.title)
641-# self.CreditEdit.setText(self.customSlide.credits)
642-#
643-# songXML = SongXMLParser(self.customSlide.text)
644-# verseList = songXML.get_verses()
645-# for verse in verseList:
646-# self.VerseListView.addItem(verse[1])
647-# theme = unicode(self.customSlide.theme_name)
648-# id = self.ThemeComboBox.findText(theme, QtCore.Qt.MatchExactly)
649-# if id == -1:
650-# id = 0 # Not Found
651-# self.ThemeComboBox.setCurrentIndex(id)
652-# else:
653-# self.ThemeComboBox.setCurrentIndex(0)
654-#
655-# def accept(self):
656-# valid, message = self._validate()
657-# if not valid:
658-# QtGui.QMessageBox.critical(self,
659-# translate(u'customEditDialog', u'Error'), message,
660-# QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
661-# return
662-# sxml = SongXMLBuilder()
663-# sxml.new_document()
664-# sxml.add_lyrics_to_song()
665-# count = 1
666-# for i in range (0, self.VerseListView.count()):
667-# sxml.add_verse_to_lyrics(
668-# u'custom', unicode(count),
669-# unicode(self.VerseListView.item(i).text()))
670-# count += 1
671-# self.customSlide.title = unicode(self.TitleEdit.displayText())
672-# self.customSlide.text = unicode(sxml.extract_xml())
673-# self.customSlide.credits = unicode(self.CreditEdit.displayText())
674-# self.customSlide.theme_name = unicode(self.ThemeComboBox.currentText())
675-# self.custommanager.save_slide(self.customSlide)
676-# self.close()
677-#
678-# def rejected(self):
679-# self.close()
680-#
681-# def onUpButtonPressed(self):
682-# selectedRow = self.VerseListView.currentRow()
683-# if selectedRow != 0:
684-# qw = self.VerseListView.takeItem(selectedRow)
685-# self.VerseListView.insertItem(selectedRow - 1, qw)
686-# self.VerseListView.setCurrentRow(selectedRow - 1)
687-#
688-# def onDownButtonPressed(self):
689-# selectedRow = self.VerseListView.currentRow()
690-# # zero base arrays
691-# if selectedRow != self.VerseListView.count() - 1:
692-# qw = self.VerseListView.takeItem(selectedRow)
693-# self.VerseListView.insertItem(selectedRow + 1, qw)
694-# self.VerseListView.setCurrentRow(selectedRow + 1)
695-#
696-# def onClearButtonPressed(self):
697-# self.VerseTextEdit.clear()
698-# self.editAll = False
699-# self.AddButton.setEnabled(True)
700-# self.EditAllButton.setEnabled(True)
701-# self.SaveButton.setEnabled(False)
702-#
703-# def onVerseListViewPressed(self, item):
704-# self.DeleteButton.setEnabled(True)
705-# self.EditButton.setEnabled(True)
706-#
707-# def onVerseListViewSelected(self, item):
708-# self.editText(item.text())
709-#
710-# def onAddButtonPressed(self):
711-# self.VerseListView.addItem(self.VerseTextEdit.toPlainText())
712-# self.DeleteButton.setEnabled(False)
713-# self.VerseTextEdit.clear()
714-#
715-# def onEditButtonPressed(self):
716-# self.editText(self.VerseListView.currentItem().text())
717-#
718-# def onEditAllButtonPressed(self):
719-# self.editAll = True
720-# self.AddButton.setEnabled(False)
721-# if self.VerseListView.count() > 0:
722-# verse_list = u''
723-# for row in range(0, self.VerseListView.count()):
724-# item = self.VerseListView.item(row)
725-# verse_list += item.text()
726-# verse_list += u'\n---\n'
727-# self.editText(verse_list)
728-#
729-# def editText(self, text):
730-# self.beforeText = text
731-# self.VerseTextEdit.setPlainText(text)
732-# self.DeleteButton.setEnabled(False)
733-# self.EditButton.setEnabled(False)
734-# self.EditAllButton.setEnabled(False)
735-# self.SaveButton.setEnabled(True)
736-# self.ClearButton.setEnabled(True)
737-#
738-# def onSaveButtonPressed(self):
739-# if self.editAll:
740-# self.VerseListView.clear()
741-# for row in unicode(self.VerseTextEdit.toPlainText()).split(u'\n---\n'):
742-# self.VerseListView.addItem(row)
743-# else:
744-# self.VerseListView.currentItem().setText(
745-# self.VerseTextEdit.toPlainText())
746-# #number of lines has change
747-# if len(self.beforeText.split(u'\n')) != \
748-# len(self.VerseTextEdit.toPlainText().split(u'\n')):
749-# tempList = {}
750-# for row in range(0, self.VerseListView.count()):
751-# tempList[row] = self.VerseListView.item(row).text()
752-# self.VerseListView.clear()
753-# for row in range (0, len(tempList)):
754-# self.VerseListView.addItem(tempList[row])
755-# self.VerseListView.repaint()
756-# self.AddButton.setEnabled(True)
757-# self.SaveButton.setEnabled(False)
758-# self.EditButton.setEnabled(False)
759-# self.EditAllButton.setEnabled(True)
760-# self.VerseTextEdit.clear()
761-#
762-# def onDeleteButtonPressed(self):
763-# self.VerseListView.takeItem(self.VerseListView.currentRow())
764-# self.EditButton.setEnabled(False)
765-# self.EditAllButton.setEnabled(True)
766-#
767-# def _validate(self):
768-# if len(self.TitleEdit.displayText()) == 0:
769-# self.TitleEdit.setFocus()
770-# return False, translate(
771-# u'customEditDialog', u'You need to enter a title \n')
772-# # must have 1 slide
773-# if self.VerseListView.count() == 0:
774-# self.VerseTextEdit.setFocus()
775-# return False, translate(
776-# u'customEditDialog', u'You need to enter a slide \n')
777-# return True, u''
778+ self.firstService = \
779+ int(self.parent.config.get_config(u'first service', QtCore.Qt.Checked))
780+ self.secondService = \
781+ int(self.parent.config.get_config(u'second service', QtCore.Qt.Checked))
782+ self.resetWindow()
783+
784+ def changeFirstService(self, value):
785+ self.firstService = value
786+ self.parent.config.set_config(u'first service', value)
787+ self.resetWindow()
788+
789+ def changeSecondService(self, value):
790+ self.secondService = value
791+ self.parent.config.set_config(u'second service', value)
792+ self.resetWindow()
793+
794+ def changeThirdService(self, value):
795+ pass
796+
797+ def defineOutputLocation(self):
798+ pass
799+
800+ def resetWindow(self):
801+ if self.firstService == QtCore.Qt.Unchecked:
802+ self.FirstFromTimeEdit.setEnabled(False)
803+ self.FirstToTimeEdit.setEnabled(False)
804+ else:
805+ self.FirstFromTimeEdit.setEnabled(True)
806+ self.FirstToTimeEdit.setEnabled(True)
807+ if self.secondService == QtCore.Qt.Unchecked:
808+ self.SecondFromTimeEdit.setEnabled(False)
809+ self.SecondToTimeEdit.setEnabled(False)
810+ else:
811+ self.SecondFromTimeEdit.setEnabled(True)
812+ self.SecondToTimeEdit.setEnabled(True)
813
814=== modified file 'resources/forms/auditdeletedialog.ui'
815--- resources/forms/auditdeletedialog.ui 2009-09-25 20:12:35 +0000
816+++ resources/forms/auditdeletedialog.ui 2009-10-12 05:00:34 +0000
817@@ -7,7 +7,7 @@
818 <x>0</x>
819 <y>0</y>
820 <width>291</width>
821- <height>202</height>
822+ <height>243</height>
823 </rect>
824 </property>
825 <property name="windowTitle">
826@@ -36,15 +36,21 @@
827 </property>
828 </widget>
829 </item>
830- <item>
831- <widget class="QDialogButtonBox" name="buttonBox">
832- <property name="standardButtons">
833- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
834- </property>
835- </widget>
836- </item>
837 </layout>
838 </widget>
839+ <widget class="QDialogButtonBox" name="buttonBox">
840+ <property name="geometry">
841+ <rect>
842+ <x>30</x>
843+ <y>210</y>
844+ <width>245</width>
845+ <height>25</height>
846+ </rect>
847+ </property>
848+ <property name="standardButtons">
849+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
850+ </property>
851+ </widget>
852 </widget>
853 <resources/>
854 <connections>
855
856=== modified file 'resources/forms/auditdetaildialog.ui'
857--- resources/forms/auditdetaildialog.ui 2009-09-26 06:46:26 +0000
858+++ resources/forms/auditdetaildialog.ui 2009-10-12 05:00:34 +0000
859@@ -108,7 +108,7 @@
860 <item>
861 <widget class="QGroupBox" name="DateRangeGroupBox">
862 <property name="title">
863- <string>Date Range</string>
864+ <string>Select Date Range</string>
865 </property>
866 <layout class="QVBoxLayout" name="verticalLayout_2">
867 <item>
868@@ -148,7 +148,7 @@
869 <item>
870 <widget class="QGroupBox" name="TimePeriodGroupBox">
871 <property name="title">
872- <string>Time Periods</string>
873+ <string>Select Time Periods</string>
874 </property>
875 <layout class="QVBoxLayout" name="verticalLayout">
876 <item>
877@@ -336,8 +336,76 @@
878 </hint>
879 </hints>
880 </connection>
881+ <connection>
882+ <sender>FirstCheckBox</sender>
883+ <signal>stateChanged(int)</signal>
884+ <receiver>AuditDetailDialog</receiver>
885+ <slot>changeFirstService(int)</slot>
886+ <hints>
887+ <hint type="sourcelabel">
888+ <x>26</x>
889+ <y>285</y>
890+ </hint>
891+ <hint type="destinationlabel">
892+ <x>136</x>
893+ <y>483</y>
894+ </hint>
895+ </hints>
896+ </connection>
897+ <connection>
898+ <sender>SecondCheckBox</sender>
899+ <signal>stateChanged(int)</signal>
900+ <receiver>AuditDetailDialog</receiver>
901+ <slot>changeSecondService(int)</slot>
902+ <hints>
903+ <hint type="sourcelabel">
904+ <x>41</x>
905+ <y>323</y>
906+ </hint>
907+ <hint type="destinationlabel">
908+ <x>103</x>
909+ <y>494</y>
910+ </hint>
911+ </hints>
912+ </connection>
913+ <connection>
914+ <sender>ThirdCheckBox</sender>
915+ <signal>stateChanged(int)</signal>
916+ <receiver>AuditDetailDialog</receiver>
917+ <slot>changeThirdService(int)</slot>
918+ <hints>
919+ <hint type="sourcelabel">
920+ <x>38</x>
921+ <y>351</y>
922+ </hint>
923+ <hint type="destinationlabel">
924+ <x>155</x>
925+ <y>463</y>
926+ </hint>
927+ </hints>
928+ </connection>
929+ <connection>
930+ <sender>SaveFilePushButton</sender>
931+ <signal>pressed()</signal>
932+ <receiver>AuditDetailDialog</receiver>
933+ <slot>defineOutputLocation()</slot>
934+ <hints>
935+ <hint type="sourcelabel">
936+ <x>538</x>
937+ <y>419</y>
938+ </hint>
939+ <hint type="destinationlabel">
940+ <x>385</x>
941+ <y>480</y>
942+ </hint>
943+ </hints>
944+ </connection>
945 </connections>
946 <slots>
947 <slot>accept()</slot>
948+ <slot>changeFirstService(int)</slot>
949+ <slot>changeSecondService(int)</slot>
950+ <slot>changeThirdService(int)</slot>
951+ <slot>defineOutputLocation()</slot>
952 </slots>
953 </ui>