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

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/servicing2
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~trb143/openlp/servicing2
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Martin Thompson (community) Approve
Review via email: mp+8325@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

File and Function cleanups
Improvements from last merge
OOS saving required now.

Revision history for this message
Martin Thompson (mjthompson) :
review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Looks fine.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cnvdb.py'
2--- cnvdb.py 2009-07-02 19:10:14 +0000
3+++ cnvdb.py 2009-07-06 16:34:13 +0000
4@@ -31,7 +31,7 @@
5 writefile = codecs.open(outname, 'w', encoding='utf-8')
6 for line in infile:
7 #replace the quotes with quotes
8- line, replace("''", "'")
9+ line = line.replace(u'\'\'', u'\'')
10 writefile.write(line)
11 infile.close()
12 writefile.close()
13
14=== modified file 'openlp/core/lib/plugin.py'
15--- openlp/core/lib/plugin.py 2009-06-28 06:54:12 +0000
16+++ openlp/core/lib/plugin.py 2009-07-06 16:34:13 +0000
17@@ -102,7 +102,6 @@
18 self.render_manager = plugin_helpers[u'render']
19 self.service_manager = plugin_helpers[u'service']
20 self.settings = plugin_helpers[u'settings']
21- self.slideManager = plugin_helpers[u'slideManager']
22 self.dnd_id=None
23
24 def check_pre_conditions(self):
25
26=== modified file 'openlp/core/ui/__init__.py'
27--- openlp/core/ui/__init__.py 2009-07-03 19:08:21 +0000
28+++ openlp/core/ui/__init__.py 2009-07-06 16:34:13 +0000
29@@ -18,7 +18,6 @@
30 Place, Suite 330, Boston, MA 02111-1307 USA
31 """
32 from slidecontroller import MasterToolbar
33-from slidecontrollermanager import SlideControllerManager
34 from maindisplay import MainDisplay
35 from amendthemeform import AmendThemeForm
36 from slidecontroller import SlideController
37
38=== modified file 'openlp/core/ui/amendthemeform.py'
39--- openlp/core/ui/amendthemeform.py 2009-06-16 18:21:24 +0000
40+++ openlp/core/ui/amendthemeform.py 2009-07-06 16:34:13 +0000
41@@ -128,9 +128,7 @@
42 unicode(self.theme.display_outline), unicode(self.theme.display_outline_color),
43 unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign),
44 unicode(self.theme.display_wrapStyle))
45-
46 theme = new_theme.extract_xml()
47-
48 self.thememanager.saveTheme(theme_name, theme, save_from, save_to)
49 return QtGui.QDialog.accept(self)
50
51@@ -526,4 +524,4 @@
52 def previewTheme(self, theme):
53 if self.allowPreview:
54 frame = self.thememanager.generateImage(theme)
55- self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
56\ No newline at end of file
57+ self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
58
59=== modified file 'openlp/core/ui/mainwindow.py'
60--- openlp/core/ui/mainwindow.py 2009-07-03 19:08:21 +0000
61+++ openlp/core/ui/mainwindow.py 2009-07-07 16:35:01 +0000
62@@ -23,7 +23,7 @@
63 from PyQt4 import QtCore, QtGui
64
65 from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \
66- ThemeManager, MainDisplay, SlideController, SlideControllerManager
67+ ThemeManager, MainDisplay, SlideController
68 from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \
69 EventManager, RenderManager, PluginConfig
70 from openlp.core import PluginManager
71@@ -41,6 +41,7 @@
72 This constructor sets up the interface, the various managers, and the
73 plugins.
74 """
75+ self.oosNotSaved = False
76 self.mainWindow = QtGui.QMainWindow()
77 self.mainWindow.__class__.closeEvent = self.onCloseEvent
78 self.mainDisplay = MainDisplay(None, screens)
79@@ -50,7 +51,6 @@
80 self.alertForm = AlertForm(self)
81 self.aboutForm = AboutForm()
82 self.settingsForm = SettingsForm(self.screenList, self)
83- self.slideControllerManager = SlideControllerManager(self)
84 # Set up the path with plugins
85 pluginpath = os.path.split(os.path.abspath(__file__))[0]
86 pluginpath = os.path.abspath(
87@@ -73,7 +73,6 @@
88 self.plugin_helpers[u'render'] = self.RenderManager
89 self.plugin_helpers[u'service'] = self.ServiceManagerContents
90 self.plugin_helpers[u'settings'] = self.settingsForm
91- self.plugin_helpers[u'slideManager'] = self.slideControllerManager
92 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
93 self.EventManager)
94 # hook methods have to happen after find_plugins. Find plugins needs the
95@@ -129,8 +128,46 @@
96 """
97 Hook to close the main window and display windows on exit
98 """
99- self.mainDisplay.close()
100- event.accept()
101+ if self.oosNotSaved == True:
102+ box = QtGui.QMessageBox()
103+ box.setWindowTitle(translate(u'mainWindow', u'Question?'))
104+ box.setText(translate(u'mainWindow', u'Save changes to Order of Service?'))
105+ box.setIcon(QtGui.QMessageBox.Question)
106+ box.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel);
107+ box.setDefaultButton(QtGui.QMessageBox.Save);
108+ ret = box.exec_()
109+ if ret == QtGui.QMessageBox.Save:
110+ self.ServiceManagerContents.onSaveService()
111+ self.mainDisplay.close()
112+ event.accept()
113+ elif ret == QtGui.QMessageBox.Discard:
114+ self.mainDisplay.close()
115+ event.accept()
116+ else:
117+ event.ignore()
118+ else:
119+ self.mainDisplay.close()
120+ event.accept()
121+
122+ def OosChanged(self, reset = False, oosName = None):
123+ """
124+ Hook to change the title if the OOS has been changed
125+ reset - tells if the OOS has been cleared or saved
126+ oosName - is the name of the OOS (if it has one)
127+ """
128+ if reset == True:
129+ self.oosNotSaved = False
130+ if oosName is None:
131+ title = self.mainTitle
132+ else:
133+ title = self.mainTitle + u' - (' + oosName + u')'
134+ else:
135+ self.oosNotSaved = True
136+ if oosName is None:
137+ title = self.mainTitle + u' - *'
138+ else:
139+ title = self.mainTitle + u' - *(' + oosName + u')'
140+ self.mainWindow.setWindowTitle(title)
141
142 def setupUi(self):
143 """
144@@ -411,7 +448,8 @@
145 """
146 Set up the translation system
147 """
148- self.mainWindow.setWindowTitle(translate(u'mainWindow', u'OpenLP 2.0'))
149+ self.mainTitle = translate(u'mainWindow', u'OpenLP 2.0')
150+ self.mainWindow.setWindowTitle(self.mainTitle)
151 self.FileMenu.setTitle(translate(u'mainWindow', u'&File'))
152 self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import'))
153 self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export'))
154
155=== modified file 'openlp/core/ui/servicemanager.py'
156--- openlp/core/ui/servicemanager.py 2009-06-29 17:37:46 +0000
157+++ openlp/core/ui/servicemanager.py 2009-07-07 16:35:01 +0000
158@@ -63,6 +63,7 @@
159 QtGui.QWidget.__init__(self)
160 self.parent = parent
161 self.serviceItems = []
162+ self.serviceName = u''
163 self.Layout = QtGui.QVBoxLayout(self)
164 self.Layout.setSpacing(0)
165 self.Layout.setMargin(0)
166@@ -151,6 +152,7 @@
167 self.serviceItems.remove(self.serviceItems[item])
168 self.serviceItems.insert(0, temp)
169 self.repaintServiceList()
170+ self.parent.OosChanged(False, self.serviceName)
171
172 def onServiceUp(self):
173 """
174@@ -163,6 +165,7 @@
175 self.serviceItems.remove(self.serviceItems[item])
176 self.serviceItems.insert(item - 1, temp)
177 self.repaintServiceList()
178+ self.parent.OosChanged(False, self.serviceName)
179
180 def onServiceDown(self):
181 """
182@@ -175,6 +178,7 @@
183 self.serviceItems.remove(self.serviceItems[item])
184 self.serviceItems.insert(item + 1, temp)
185 self.repaintServiceList()
186+ self.parent.OosChanged(False, self.serviceName)
187
188 def onServiceEnd(self):
189 """
190@@ -186,6 +190,7 @@
191 self.serviceItems.remove(self.serviceItems[item])
192 self.serviceItems.insert(len(self.serviceItems), temp)
193 self.repaintServiceList()
194+ self.parent.OosChanged(False, self.serviceName)
195
196 def onNewService(self):
197 """
198@@ -193,6 +198,8 @@
199 """
200 self.ServiceManagerList.clear()
201 self.serviceItems = []
202+ self.serviceName = u''
203+ self.parent.OosChanged(True, self.serviceName)
204
205 def onDeleteFromService(self):
206 """
207@@ -202,6 +209,7 @@
208 if item is not -1:
209 self.serviceItems.remove(self.serviceItems[item])
210 self.repaintServiceList()
211+ self.parent.OosChanged(False, self.serviceName)
212
213 def repaintServiceList(self):
214 #Correct order of idems in array
215@@ -252,6 +260,7 @@
216 os.remove(servicefile)
217 except:
218 pass #if not present do not worry
219+ self.parent.OosChanged(True, self.serviceName)
220
221 def onLoadService(self):
222 """
223@@ -260,6 +269,7 @@
224 filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(),
225 u'Services (*.oos)')
226 filename = unicode(filename)
227+ name = filename.split(os.path.sep)
228 if filename != u'':
229 self.config.set_last_dir(filename)
230 zip = zipfile.ZipFile(unicode(filename))
231@@ -279,7 +289,6 @@
232 f.close()
233 self.onNewService()
234 for item in items:
235- #print item
236 serviceitem = ServiceItem()
237 serviceitem.RenderManager = self.parent.RenderManager
238 serviceitem.set_from_oos(item, self.servicePath )
239@@ -287,7 +296,10 @@
240 try:
241 os.remove(p_file)
242 except:
243- pass #if not present do not worry
244+ #if not present do not worry
245+ pass
246+ self.serviceName = name[len(name) - 1]
247+ self.parent.OosChanged(True, self.serviceName)
248
249 def onThemeComboBoxSelected(self, currentIndex):
250 """
251@@ -323,6 +335,7 @@
252 treewidgetitem1.setText(0,text[:40])
253 treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
254 count = count + 1
255+ self.parent.OosChanged(False, self.serviceName)
256
257 def makePreview(self):
258 """
259
260=== modified file 'openlp/core/ui/slidecontroller.py'
261--- openlp/core/ui/slidecontroller.py 2009-07-03 20:32:33 +0000
262+++ openlp/core/ui/slidecontroller.py 2009-07-06 16:34:13 +0000
263@@ -183,7 +183,7 @@
264
265 class MasterToolbar(QtCore.QObject):
266 """
267- Class from which all tollbars should extend
268+ Class from which all toolbars should extend
269 """
270 def __init__(self, isLive):
271 self.Toolbar = None
272@@ -232,6 +232,13 @@
273 translate(u'SlideController', u'Close Screen'),
274 self.onBlankScreen)
275
276+ def serviceLoaded(self):
277+ """
278+ method to allow toolbars to know when the service item
279+ is fully in place
280+ """
281+ pass
282+
283 def onSlideSelectedFirst(self):
284 """
285 Go to the first slide.
286@@ -325,3 +332,4 @@
287 else:
288 self.PreviewListWidget.selectRow(slideno)
289 self.onSlideSelected()
290+ self.serviceLoaded()
291
292=== removed file 'openlp/core/ui/slidecontrollermanager.py'
293--- openlp/core/ui/slidecontrollermanager.py 2009-06-28 06:54:12 +0000
294+++ openlp/core/ui/slidecontrollermanager.py 1970-01-01 00:00:00 +0000
295@@ -1,52 +0,0 @@
296-# -*- coding: utf-8 -*-
297-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
298-"""
299-OpenLP - Open Source Lyrics Projection
300-Copyright (c) 2008 Raoul Snyman
301-Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
302-
303-This program is free software; you can redistribute it and/or modify it under
304-the terms of the GNU General Public License as published by the Free Software
305-Foundation; version 2 of the License.
306-
307-This program is distributed in the hope that it will be useful, but WITHOUT ANY
308-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
309-PARTICULAR PURPOSE. See the GNU General Public License for more details.
310-
311-You should have received a copy of the GNU General Public License along with
312-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
313-Place, Suite 330, Boston, MA 02111-1307 USA
314-"""
315-import logging
316-import os
317-
318-class SlideControllerManager():
319- """
320- This class controls which SlideController is availabe to the
321- main window
322- """
323- global log
324- log = logging.getLogger(u'SlideControllerManager')
325-
326- def __init__(self, parent):
327- """
328- Set up the Slide Controller. Manager
329- """
330- self.parent = parent
331- self.live = {}
332- self.preview = {}
333-
334- def add_controllers(self, handle, preview, live):
335- self.live[handle] = live
336- self.preview[handle] = preview
337- print self.live
338-
339- def getPreviewController(self, handle):
340- return self.preview[handle]
341-
342- def getLiveController(self, handle):
343- print "---"
344- print self.live
345- print handle
346- print self.live[handle]
347- return self.live[handle]
348
349=== modified file 'openlp/core/ui/thememanager.py'
350--- openlp/core/ui/thememanager.py 2009-07-02 19:04:50 +0000
351+++ openlp/core/ui/thememanager.py 2009-07-06 16:34:13 +0000
352@@ -21,109 +21,16 @@
353 import sys
354 import zipfile
355 import shutil
356+import logging
357
358-from time import sleep
359 from xml.etree.ElementTree import ElementTree, XML
360 from PyQt4 import QtCore, QtGui
361
362 from openlp.core.ui import AmendThemeForm, ServiceManager
363 from openlp.core.theme import Theme
364-from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml
365+from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml, buildIcon
366 from openlp.core.utils import ConfigHelper
367
368-import logging
369-
370-class ThemeData(QtCore.QAbstractListModel):
371- """
372- Tree of items for an order of Theme.
373- Includes methods for reading and writing the contents to an OOS file
374- Root contains a list of ThemeItems
375- """
376- global log
377- log = logging.getLogger(u'ThemeData')
378-
379- def __init__(self):
380- QtCore.QAbstractListModel.__init__(self)
381- self.items = []
382- self.rowheight = 50
383- self.maximagewidth = self.rowheight * 16 / 9.0;
384- log.info(u'Starting')
385-
386- def clearItems(self):
387- self.items = []
388-
389- def rowCount(self, parent):
390- return len(self.items)
391-
392- def insertRow(self, row, filename):
393- self.beginInsertRows(QtCore.QModelIndex(), row, row)
394- log.debug(u'insert row %d:%s' % (row, filename))
395- (prefix, shortfilename) = os.path.split(unicode(filename))
396- log.debug(u'shortfilename = %s' % shortfilename)
397- theme = shortfilename.split(u'.')
398- # create a preview image
399- if os.path.exists(filename):
400- preview = QtGui.QImage(unicode(filename))
401- width = self.maximagewidth
402- height = self.rowheight
403- preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
404- realwidth = preview.width()
405- realheight = preview.height()
406- # and move it to the centre of the preview space
407- pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
408- pixmap.fill(QtCore.Qt.black)
409- painter = QtGui.QPainter(pixmap)
410- painter.drawImage((width - realwidth) / 2, (height - realheight) / 2, preview)
411- else:
412- width = self.maximagewidth
413- height = self.rowheight
414- pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
415- pixmap.fill(QtCore.Qt.black)
416- # finally create the row
417- self.items.insert(row, (filename, pixmap, shortfilename, theme[0]))
418- log.debug(u'Items: %s' % self.items)
419- self.endInsertRows()
420-
421- def removeRow(self, row):
422- self.beginRemoveRows(QtCore.QModelIndex(), row, row)
423- self.items.pop(row)
424- self.endRemoveRows()
425-
426- def addRow(self, item):
427- self.insertRow(len(self.items), item)
428-
429- def data(self, index, role):
430- row = index.row()
431- if row > len(self.items):
432- # if the last row is selected and deleted, we then get called with an empty row!
433- return QtCore.QVariant()
434- if role == QtCore.Qt.DisplayRole:
435- retval = self.items[row][3]
436- elif role == QtCore.Qt.DecorationRole:
437- retval = self.items[row][1]
438- else:
439- retval = QtCore.QVariant()
440- if type(retval) is not type(QtCore.QVariant):
441- return QtCore.QVariant(retval)
442- else:
443- return retval
444-
445- def __iter__(self):
446- for item in self.items:
447- yield item
448-
449- def getValue(self, index):
450- row = index.row()
451- return self.items[row]
452-
453- def getItem(self, row):
454- log.info(u'Get Item:%d -> %s' % (row, unicode(self.items)))
455- return self.items[row]
456-
457- def getList(self):
458- filelist = [item[3] for item in self.items]
459- return filelist
460-
461 class ThemeManager(QtGui.QWidget):
462 """
463 Manages the orders of Theme.
464@@ -157,13 +64,10 @@
465 translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
466 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
467 self.Layout.addWidget(self.Toolbar)
468-
469- self.ThemeListView = QtGui.QListView(self)
470- self.themeData = ThemeData()
471- self.ThemeListView.setModel(self.themeData)
472- self.ThemeListView.setAlternatingRowColors(True)
473- self.Layout.addWidget(self.ThemeListView)
474-
475+ self.ThemeListWidget = QtGui.QListWidget(self)
476+ self.ThemeListWidget.setAlternatingRowColors(True)
477+ self.ThemeListWidget.setIconSize(QtCore.QSize(88,50))
478+ self.Layout.addWidget(self.ThemeListWidget)
479 self.themelist = []
480 self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
481 self.checkThemesExists(self.path)
482@@ -174,21 +78,18 @@
483 self.amendThemeForm.exec_()
484
485 def onEditTheme(self):
486- items = self.ThemeListView.selectedIndexes()
487- if len(items) > 0:
488- for item in items:
489- data = self.themeData.getValue(item)
490- self.amendThemeForm.loadTheme(data[3])
491+ item = self.ThemeListWidget.currentItem()
492+ if item is not None:
493+ self.amendThemeForm.loadTheme(unicode(item.text()))
494 self.amendThemeForm.exec_()
495
496 def onDeleteTheme(self):
497- items = self.ThemeListView.selectedIndexes()
498- if len(items) > 0:
499- theme = u''
500- for item in items:
501- data = self.themeData.getValue(item)
502- theme = data[3]
503+ item = self.ThemeListWidget.currentItem()
504+ if item is not None:
505+ theme = unicode(item.text())
506 th = theme + u'.png'
507+ row = self.ThemeListWidget.row(item)
508+ self.ThemeListWidget.takeItem(row)
509 try:
510 os.remove(os.path.join(self.path, th))
511 except:
512@@ -199,8 +100,6 @@
513 except:
514 #if not present do not worry
515 pass
516- self.themeData.clearItems()
517- self.loadThemes()
518
519 def onExportTheme(self):
520 pass
521@@ -213,24 +112,37 @@
522 if len(files) > 0:
523 for file in files:
524 self.unzipTheme(file, self.path)
525- self.themeData.clearItems()
526 self.loadThemes()
527
528 def loadThemes(self):
529+ """
530+ Loads the theme lists and triggers updates accross
531+ the whole system using direct calls or core functions
532+ and events for the plugins.
533+ The plugins will call back in to get the real list if they want it.
534+ """
535 log.debug(u'Load themes from dir')
536+ self.themelist = []
537+ self.ThemeListWidget.clear()
538 for root, dirs, files in os.walk(self.path):
539 for name in files:
540 if name.endswith(u'.png'):
541- #check to see file is in route directory
542+ #check to see file is in theme root directory
543 theme = os.path.join(self.path, name)
544 if os.path.exists(theme):
545- self.themeData.addRow(theme)
546+ (path, filename) = os.path.split(unicode(file))
547+ textName = os.path.splitext(name)[0]
548+ item_name = QtGui.QListWidgetItem(textName)
549+ item_name.setIcon(buildIcon(theme))
550+ item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(textName))
551+ self.ThemeListWidget.addItem(item_name)
552+ self.themelist.append(textName)
553 self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
554 self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
555 self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
556
557 def getThemes(self):
558- return self.themeData.getList()
559+ return self.themelist
560
561 def getThemeData(self, themename):
562 log.debug(u'getthemedata for theme %s', themename)
563@@ -337,6 +249,10 @@
564 return newtheme.extract_xml()
565
566 def saveTheme(self, name, theme_xml, image_from, image_to) :
567+ """
568+ Called by thememaintenance Dialog to save the theme
569+ and to trigger the reload of the theme list
570+ """
571 log.debug(u'saveTheme %s %s', name, theme_xml)
572 theme_dir = os.path.join(self.path, name)
573 if os.path.exists(theme_dir) == False:
574@@ -348,7 +264,6 @@
575 if image_from is not None and image_from != image_to:
576 shutil.copyfile(image_from, image_to)
577 self.generateAndSaveImage(self.path, name, theme_xml)
578- self.themeData.clearItems()
579 self.loadThemes()
580
581 def generateAndSaveImage(self, dir, name, theme_xml):
582@@ -357,7 +272,6 @@
583 theme.parse(theme_xml)
584 theme.extend_image_filename(dir)
585 frame = self.generateImage(theme)
586- #im = frame.toImage()
587 samplepathname = os.path.join(self.path, name + u'.png')
588 if os.path.exists(samplepathname):
589 os.unlink(samplepathname)
590@@ -365,6 +279,9 @@
591 log.debug(u'Theme image written to %s', samplepathname)
592
593 def generateImage(self, themedata):
594+ """
595+ Call the RenderManager to build a Sample Image
596+ """
597 log.debug(u'generateImage %s ', themedata)
598 frame = self.parent.RenderManager.generate_preview(themedata)
599 return frame
600
601=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
602--- openlp/plugins/bibles/lib/mediaitem.py 2009-07-04 05:52:30 +0000
603+++ openlp/plugins/bibles/lib/mediaitem.py 2009-07-07 16:35:01 +0000
604@@ -494,7 +494,7 @@
605 if end_verse == '':
606 end_verse = 99
607 if start_chapter == '':
608- message = u'No chapter found for search'
609+ message = u'No chapter found for search criteria'
610 #print 'message = ' + unicode(message)
611 #print 'search = ' + unicode(original)
612 #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
613
614=== modified file 'openlp/plugins/images/lib/imageslidecontroller.py'
615--- openlp/plugins/images/lib/imageslidecontroller.py 2009-07-03 20:32:33 +0000
616+++ openlp/plugins/images/lib/imageslidecontroller.py 2009-07-06 16:34:13 +0000
617@@ -74,14 +74,26 @@
618 u':/media/media_stop.png',
619 translate(u'SlideController', u'Stop continuous loop'),
620 self.onStopLoop)
621+ self.Toolbar.addSeparator()
622+ self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar)
623+ self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
624+ self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
625+ self.Toolbar.addAction(self.SpinWidget)
626+ #self.Layout.addWidget(self.Toolbar)
627 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
628+ self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
629+
630+ def serviceLoaded(self):
631+ self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
632+ if self.PreviewListWidget.rowCount() == 1:
633+ self.DelaySpinBox.setEnabled(False)
634
635 def onStartLoop(self):
636 """
637 Go to the last slide.
638 """
639- delay = self.parent.parent.ImageTab.loop_delay
640- self.timer_id = self.startTimer(delay * 1000)
641+ if self.PreviewListWidget.rowCount() > 1:
642+ self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
643
644 def onStopLoop(self):
645 """
646@@ -92,4 +104,3 @@
647 def timerEvent(self, event):
648 if event.timerId() == self.timer_id:
649 self.onSlideSelectedNext()
650-
651
652=== modified file 'openlp/plugins/images/lib/imagetab.py'
653--- openlp/plugins/images/lib/imagetab.py 2009-07-03 20:33:41 +0000
654+++ openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000
655@@ -49,7 +49,6 @@
656 self.TimeoutSpacer = QtGui.QSpacerItem(147, 20,
657 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
658 self.TimeoutLayout.addItem(self.TimeoutSpacer)
659-
660 self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox)
661 # Signals and slots
662 QtCore.QObject.connect(self.TimeoutSpinBox,
663@@ -57,6 +56,7 @@
664
665 def retranslateUi(self):
666 self.TimeoutLabel.setText(translate(u'ImageTab', u'Slide Loop Delay:'))
667+ self.TimeoutSpinBox.setSuffix(translate(u'ImageTab', u's'))
668
669 def onTimeoutSpinBoxChanged(self):
670 self.loop_delay = self.TimeoutSpinBox.value()