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

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

Fix up the slide controller to fit better with the planned design.
Fix the Image Plugin to work with new slide controller
Fix the Image Plugin so it loads images faster and fix bug in delete code.

Revision history for this message
Raoul Snyman (raoul-snyman) :
review: Approve
lp:~trb143/openlp/bugfixes updated
511. By Tim Bentley

SlideController clean up
Image Plugin Cleanup

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-08-10 19:11:54 +0000
3+++ openlp.pyw 2009-08-24 04:30:04 +0000
4@@ -52,7 +52,7 @@
5 pass
6 #provide a listener for widgets to reqest a screen update.
7 QtCore.QObject.connect(Receiver.get_receiver(),
8- QtCore.SIGNAL(u'openlpprocessevents'), self.processEvents)
9+ QtCore.SIGNAL(u'process_events'), self.processEvents)
10 self.setApplicationName(u'openlp.org')
11 self.setApplicationVersion(u'1.9.0')
12 self.splash = SplashScreen(self.applicationVersion())
13
14=== modified file 'openlp/core/lib/eventreceiver.py'
15--- openlp/core/lib/eventreceiver.py 2009-07-10 15:45:17 +0000
16+++ openlp/core/lib/eventreceiver.py 2009-08-24 05:10:04 +0000
17@@ -32,10 +32,6 @@
18 def send_message(self, event, msg=None):
19 self.emit(QtCore.SIGNAL(event), msg)
20
21- def received(self, msg=None):
22- print msg
23-
24-
25 class Receiver():
26 """
27 Class to allow events to be passed from different parts of the system.
28@@ -56,9 +52,5 @@
29 Receiver.eventreceiver.send_message(event, msg)
30
31 @staticmethod
32- def receive():
33- Receiver.eventreceiver.receive()
34-
35- @staticmethod
36 def get_receiver():
37 return Receiver.eventreceiver
38
39=== modified file 'openlp/core/ui/maindisplay.py'
40--- openlp/core/ui/maindisplay.py 2009-08-12 04:57:24 +0000
41+++ openlp/core/ui/maindisplay.py 2009-08-24 04:30:04 +0000
42@@ -21,7 +21,7 @@
43 from PyQt4 import QtCore, QtGui
44
45 from time import sleep
46-from openlp.core.lib import translate, EventManager, Event, EventType
47+from openlp.core.lib import translate, EventManager, Event, EventType, Receiver
48
49 class MainDisplay(QtGui.QWidget):
50 """
51@@ -60,6 +60,8 @@
52 self.timer_id = 0
53 # Register the main form as an event consumer.
54 self.parent.EventManager.register(self)
55+ QtCore.QObject.connect(Receiver.get_receiver(),
56+ QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay)
57
58 def handle_event(self, event):
59 """
60
61=== modified file 'openlp/core/ui/slidecontroller.py'
62--- openlp/core/ui/slidecontroller.py 2009-08-10 20:10:20 +0000
63+++ openlp/core/ui/slidecontroller.py 2009-08-24 05:10:04 +0000
64@@ -21,7 +21,7 @@
65 import os
66
67 from PyQt4 import QtCore, QtGui
68-from openlp.core.lib import OpenLPToolbar, translate, buildIcon
69+from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver
70
71 class SlideList(QtGui.QTableWidget):
72 """
73@@ -64,9 +64,11 @@
74 Set up the Slide Controller.
75 """
76 self.toolbarList = {}
77- self.previewList = {}
78 QtGui.QWidget.__init__(self, parent)
79 self.isLive = isLive
80+ self.prefix = u'preview_'
81+ if isLive:
82+ self.prefix = u'live_'
83 self.parent = parent
84 self.Panel = QtGui.QWidget(parent.ControlSplitter)
85 self.Splitter = QtGui.QSplitter(self.Panel)
86@@ -118,19 +120,40 @@
87 self.grid.setMargin(8)
88 self.grid.setObjectName(u'grid')
89 # Actual preview screen
90- masterPreview = MasterPreview(self.PreviewFrame).getPreview()
91- self.registerPreview(u'master', masterPreview)
92- self.SlidePreview = self.retrievePreview(u'master')
93+ self.SlidePreview = QtGui.QLabel(self.parent)
94+ sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
95+ QtGui.QSizePolicy.Fixed)
96+ sizePolicy.setHorizontalStretch(0)
97+ sizePolicy.setVerticalStretch(0)
98+ sizePolicy.setHeightForWidth(
99+ self.SlidePreview.sizePolicy().hasHeightForWidth())
100+ self.SlidePreview.setSizePolicy(sizePolicy)
101+ self.SlidePreview.setFixedSize(QtCore.QSize(250, 210))
102+ self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
103+ self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
104+ self.SlidePreview.setLineWidth(1)
105+ self.SlidePreview.setScaledContents(True)
106+ self.SlidePreview.setObjectName(u'SlidePreview')
107 self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
108 # Signals
109 QtCore.QObject.connect(self.PreviewListWidget,
110- QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected)
111+ QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
112 QtCore.QObject.connect(self.PreviewListWidget,
113- QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected)
114- # Add Late Arrivals
115- self.BaseToolbar.PreviewListWidget = self.PreviewListWidget
116- self.BaseToolbar.SlidePreview = self.SlidePreview
117- self.BaseToolbar.mainDisplay = self.parent.mainDisplay
118+ QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
119+ # Window Event Handlers
120+ QtCore.QObject.connect(Receiver.get_receiver(),
121+ QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst)
122+ QtCore.QObject.connect(Receiver.get_receiver(),
123+ QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious)
124+ QtCore.QObject.connect(Receiver.get_receiver(),
125+ QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext)
126+ QtCore.QObject.connect(Receiver.get_receiver(),
127+ QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast)
128+ QtCore.QObject.connect(Receiver.get_receiver(),
129+ QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop)
130+ QtCore.QObject.connect(Receiver.get_receiver(),
131+ QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop)
132+
133
134 def registerToolbar(self, handle,controller):
135 """
136@@ -144,18 +167,6 @@
137 #store the handle name in lower case so no probems later
138 self.toolbarList[handle.lower()] = controller
139
140- def registerPreview(self, handle,controller):
141- """
142- Register a new preview with the controller
143- ``handle``
144- Identifier for the preview being stored this should equal the
145- plugins name.
146- ``controller``
147- The preview class which should extend MasterToolbar
148- """
149- #store the handle name in lower case so no probems later
150- self.previewList[handle.lower()] = controller
151-
152 def retrieveToolbar(self, handle):
153 """
154 Find the toolbar and return master if none present
155@@ -167,38 +178,22 @@
156 toolbar = self.toolbarList[handle.lower()]
157 except:
158 toolbar = self.toolbarList[u'master']
159- toolbar.PreviewListWidget = self.PreviewListWidget
160- toolbar.SlidePreview = self.SlidePreview
161- toolbar.mainDisplay = self.parent.mainDisplay
162 return toolbar
163
164- def retrievePreview(self, handle):
165- """
166- Find the preview and return master if none present
167- Add extra information back into toolbar class
168- ``handle``
169- Identifier for the toolbar being requested
170- """
171- try:
172- preview = self.previewList[handle.lower()]
173- except:
174- preview = self.previewList[u'master']
175- return preview
176-
177 def addServiceItem(self, item):
178 """
179 Method to install the service item into the controller and
180 request the correct the toolbar of the plugin
181 Called by plugins
182 """
183- self.SlidePreview = self.retrievePreview(item.shortname)
184 self.BaseToolbar = self.retrieveToolbar(item.shortname)
185 self.ControllerLayout.removeWidget(self.Toolbar)
186 #remove the old toolbar
187 self.Toolbar.clear()
188 self.Toolbar = self.BaseToolbar.getToolbar()
189 self.ControllerLayout.addWidget(self.Toolbar)
190- self.BaseToolbar.addServiceItem(item)
191+ item.render()
192+ self.displayServiceManagerItems(item, 0)
193
194 def addServiceManagerItem(self, item, slideno):
195 """
196@@ -206,45 +201,133 @@
197 request the correct the toolbar of the plugin
198 Called by ServiceManager
199 """
200- self.SlidePreview = self.retrievePreview(item.shortname)
201 self.BaseToolbar = self.retrieveToolbar(item.shortname)
202 self.ControllerLayout.removeWidget(self.Toolbar)
203 #remove the old toolbar
204 self.Toolbar.clear()
205 self.Toolbar = self.BaseToolbar.getToolbar()
206 self.ControllerLayout.addWidget(self.Toolbar)
207- self.BaseToolbar.addServiceManagerItem(item, slideno)
208-
209-
210-class MasterPreview(QtCore.QObject):
211- """
212- Class from which all Previews should extend allowing plugins to
213- have their own previews
214- """
215- def __init__(self, parent):
216- self.parent = parent
217- QtCore.QObject.__init__(self)
218- self.definePreview()
219-
220- def getPreview(self):
221- return self.SlidePreview
222-
223- def definePreview(self):
224- self.SlidePreview = QtGui.QLabel(self.parent)
225- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
226- QtGui.QSizePolicy.Fixed)
227- sizePolicy.setHorizontalStretch(0)
228- sizePolicy.setVerticalStretch(0)
229- sizePolicy.setHeightForWidth(
230- self.SlidePreview.sizePolicy().hasHeightForWidth())
231- self.SlidePreview.setSizePolicy(sizePolicy)
232- self.SlidePreview.setFixedSize(QtCore.QSize(250, 210))
233- self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
234- self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
235- self.SlidePreview.setLineWidth(1)
236- self.SlidePreview.setScaledContents(True)
237- self.SlidePreview.setObjectName(u'SlidePreview')
238-
239+ self.displayServiceManagerItems(item, slideno)
240+
241+ def displayServiceManagerItems(self, serviceitem, slideno):
242+ """
243+ Loads a ServiceItem into the system from ServiceManager
244+ Display the slide number passed
245+ """
246+ log.debug(u'add Service Manager Item')
247+ self.serviceitem = serviceitem
248+ slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
249+ slide_width = 300
250+ slide_height = slide_width * slide_pixmap.height() / slide_pixmap.width()
251+ self.PreviewListWidget.clear()
252+ self.PreviewListWidget.setRowCount(0)
253+ self.PreviewListWidget.setColumnWidth(0, slide_width)
254+ for framenumber, frame in enumerate(self.serviceitem.frames):
255+ self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)
256+ pixmap = QtGui.QPixmap.fromImage(frame[u'image'])
257+ item = QtGui.QTableWidgetItem()
258+ label = QtGui.QLabel()
259+ label.setMargin(8)
260+ label.setScaledContents(True)
261+ label.setPixmap(pixmap)
262+ self.PreviewListWidget.setCellWidget(framenumber, 0, label)
263+ self.PreviewListWidget.setItem(framenumber, 0, item)
264+ self.PreviewListWidget.setRowHeight(framenumber, slide_height)
265+ slide_width = self.PreviewListWidget.viewport().size().width()
266+ self.PreviewListWidget.setColumnWidth(0, slide_width)
267+ if slideno > self.PreviewListWidget.rowCount():
268+ self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
269+ else:
270+ self.PreviewListWidget.selectRow(slideno)
271+ self.onSlideSelected()
272+ self.PreviewListWidget.setFocus()
273+
274+ #Screen event methods
275+ def onSlideSelected(self):
276+ """
277+ Generate the preview when you click on a slide.
278+ if this is the Live Controller also display on the screen
279+ """
280+ row = self.PreviewListWidget.currentRow()
281+ if row > -1 and row < self.PreviewListWidget.rowCount():
282+ label = self.PreviewListWidget.cellWidget(row, 0)
283+ smallframe = label.pixmap()
284+ frame = self.serviceitem.frames[row][u'image']
285+ self.SlidePreview.setPixmap(smallframe)
286+ if self.isLive:
287+ self.parent.mainDisplay.frameView(frame)
288+
289+ def onSlideSelectedFirst(self):
290+ """
291+ Go to the first slide.
292+ """
293+ print "oSSF"
294+ self.PreviewListWidget.selectRow(0)
295+ self.onSlideSelected()
296+
297+ def onBlankScreen(self):
298+ """
299+ Blank the screen.
300+ """
301+ self.parent.mainDisplay.blankDisplay()
302+
303+ def onSlideSelected(self):
304+ """
305+ Generate the preview when you click on a slide.
306+ if this is the Live Controller also display on the screen
307+ """
308+ row = self.PreviewListWidget.currentRow()
309+ if row > -1 and row < self.PreviewListWidget.rowCount():
310+ label = self.PreviewListWidget.cellWidget(row, 0)
311+ smallframe = label.pixmap()
312+ frame = self.serviceitem.frames[row][u'image']
313+ self.SlidePreview.setPixmap(smallframe)
314+ if self.isLive:
315+ self.parent.mainDisplay.frameView(frame)
316+
317+ def onSlideSelectedNext(self):
318+ """
319+ Go to the next slide.
320+ """
321+ row = self.PreviewListWidget.currentRow() + 1
322+ if row == self.PreviewListWidget.rowCount():
323+ row = 0
324+ self.PreviewListWidget.selectRow(row)
325+ self.onSlideSelected()
326+
327+ def onSlideSelectedPrevious(self):
328+ """
329+ Go to the previous slide.
330+ """
331+ row = self.PreviewListWidget.currentRow() - 1
332+ if row == -1:
333+ row = self.PreviewListWidget.rowCount() - 1
334+ self.PreviewListWidget.selectRow(row)
335+ self.onSlideSelected()
336+
337+ def onSlideSelectedLast(self):
338+ """
339+ Go to the last slide.
340+ """
341+ self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
342+ self.onSlideSelected()
343+
344+ def onStartLoop(self, value):
345+ """
346+ Go to the last slide.
347+ """
348+ if self.PreviewListWidget.rowCount() > 1:
349+ self.timer_id = self.startTimer(int(value) * 1000)
350+
351+ def onStopLoop(self):
352+ """
353+ Go to the last slide.
354+ """
355+ self.killTimer(self.timer_id)
356+
357+ def timerEvent(self, event):
358+ if event.timerId() == self.timer_id:
359+ self.onSlideSelectedNext()
360
361 class MasterToolbar(QtCore.QObject):
362 """
363@@ -255,11 +338,19 @@
364 QtCore.QObject.__init__(self)
365 self.PreviewListWidget = QtGui.QListWidget()
366 self.isLive = isLive
367+ self.prefix = u'preview_'
368+ if isLive:
369+ self.prefix = u'live_'
370
371 def getToolbar(self):
372 #define toolbar here as it needs to be redefined each time
373 #as the clear destroys it.
374 self.defineToolbar()
375+ self.defineZone1()
376+ self.defineZone2()
377+ self.defineZone3()
378+ self.defineZone4()
379+ self.defineZone5()
380 return self.Toolbar
381
382 def defineToolbar(self):
383@@ -273,130 +364,53 @@
384 self.Toolbar.sizePolicy().hasHeightForWidth())
385 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
386
387+ def defineZone1(self):
388+ #Dummy Zone
389+ pass
390+
391+ def defineZone2(self):
392 if self.isLive:
393 self.Toolbar.addToolbarButton(u'First Slide',
394 u':/slides/slide_first.png',
395 translate(u'SlideController', u'Move to first'),
396- self.onSlideSelectedFirst)
397+ self.onSlideFirst)
398 self.Toolbar.addToolbarButton(u'Previous Slide',
399 u':/slides/slide_previous.png',
400 translate(u'SlideController', u'Move to previous'),
401- self.onSlideSelectedPrevious)
402+ self.onSlidePrevious)
403 self.Toolbar.addToolbarButton(u'Next Slide',
404 u':/slides/slide_next.png',
405 translate(u'SlideController', u'Move to next'),
406- self.onSlideSelectedNext)
407+ self.onSlideNext)
408 if self.isLive:
409 self.Toolbar.addToolbarButton(u'Last Slide',
410 u':/slides/slide_last.png',
411 translate(u'SlideController', u'Move to last'),
412- self.onSlideSelectedLast)
413+ self.onSlideLast)
414+
415+ def defineZone3(self):
416+ #Dummy Zone
417+ pass
418+
419+ def defineZone4(self):
420+ if self.isLive:
421 self.Toolbar.addSeparator()
422 self.Toolbar.addToolbarButton(u'Close Screen',
423 u':/slides/slide_close.png',
424 translate(u'SlideController', u'Close Screen'),
425- self.onBlankScreen)
426+ self.onSlideBlank)
427
428- def serviceLoaded(self):
429- """
430- method to allow toolbars to know when the service item
431- is fully in place
432- """
433+ def defineZone5(self):
434+ #Dummy Zone
435 pass
436
437- def onSlideSelectedFirst(self):
438- """
439- Go to the first slide.
440- """
441- self.PreviewListWidget.selectRow(0)
442- self.onSlideSelected()
443-
444- def onSlideSelectedNext(self):
445- """
446- Go to the next slide.
447- """
448- row = self.PreviewListWidget.currentRow() + 1
449- if row == self.PreviewListWidget.rowCount():
450- row = 0
451- self.PreviewListWidget.selectRow(row)
452- self.onSlideSelected()
453-
454- def onSlideSelectedPrevious(self):
455- """
456- Go to the previous slide.
457- """
458- row = self.PreviewListWidget.currentRow() - 1
459- if row == -1:
460- row = self.PreviewListWidget.rowCount() - 1
461- self.PreviewListWidget.selectRow(row)
462- self.onSlideSelected()
463-
464- def onSlideSelectedLast(self):
465- """
466- Go to the last slide.
467- """
468- self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
469- self.onSlideSelected()
470-
471- def onBlankScreen(self):
472- """
473- Blank the screen.
474- """
475- self.mainDisplay.blankDisplay()
476-
477- def onSlideSelected(self):
478- """
479- Generate the preview when you click on a slide.
480- if this is the Live Controller also display on the screen
481- """
482- row = self.PreviewListWidget.currentRow()
483- if row > -1 and row < self.PreviewListWidget.rowCount():
484- label = self.PreviewListWidget.cellWidget(row, 0)
485- smallframe = label.pixmap()
486- frame = self.serviceitem.frames[row][u'image']
487- self.SlidePreview.setPixmap(smallframe)
488- if self.isLive:
489- self.mainDisplay.frameView(frame)
490-
491- def addServiceItem(self, serviceitem, slideno = 1):
492- """
493- Loads a ServiceItem into the system from plugins
494- Display the first slide
495- """
496- log.debug(u'add Service Item')
497- serviceitem.render()
498- self.addServiceManagerItem(serviceitem, 0)
499-
500- def addServiceManagerItem(self, serviceitem, slideno):
501- """
502- Loads a ServiceItem into the system from ServiceManager
503- Display the slide number passed
504- """
505- log.debug(u'add Service Manager Item')
506- self.serviceitem = serviceitem
507- slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
508- slide_width = 300
509- slide_height = slide_width * slide_pixmap.height() / slide_pixmap.width()
510- self.PreviewListWidget.clear()
511- self.PreviewListWidget.setRowCount(0)
512- self.PreviewListWidget.setColumnWidth(0, slide_width)
513- for framenumber, frame in enumerate(self.serviceitem.frames):
514- self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)
515- pixmap = QtGui.QPixmap.fromImage(frame[u'image'])
516- item = QtGui.QTableWidgetItem()
517- label = QtGui.QLabel()
518- label.setMargin(8)
519- label.setScaledContents(True)
520- label.setPixmap(pixmap)
521- self.PreviewListWidget.setCellWidget(framenumber, 0, label)
522- self.PreviewListWidget.setItem(framenumber, 0, item)
523- self.PreviewListWidget.setRowHeight(framenumber, slide_height)
524- slide_width = self.PreviewListWidget.viewport().size().width()
525- self.PreviewListWidget.setColumnWidth(0, slide_width)
526- if slideno > self.PreviewListWidget.rowCount():
527- self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
528- else:
529- self.PreviewListWidget.selectRow(slideno)
530- self.onSlideSelected()
531- self.serviceLoaded()
532- self.PreviewListWidget.setFocus()
533+ def onSlideFirst(self):
534+ Receiver().send_message(u'%sslide_first'% self.prefix)
535+ def onSlidePrevious(self):
536+ Receiver().send_message(u'%sslide_previous'% self.prefix)
537+ def onSlideNext(self):
538+ Receiver().send_message(u'%sslide_next'% self.prefix)
539+ def onSlideLast(self):
540+ Receiver().send_message(u'%sslide_last' % self.prefix)
541+ def onSlideBlank(self):
542+ Receiver().send_message(u'%sslide_blank' % self.prefix)
543
544=== modified file 'openlp/plugins/bibles/lib/bibleCSVimpl.py'
545--- openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-07-09 16:51:25 +0000
546+++ openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-08-24 04:30:04 +0000
547@@ -60,7 +60,7 @@
548 count += 1
549 #Flush the screen events
550 if count % 3 == 0:
551- Receiver().send_message(u'openlpprocessevents')
552+ Receiver().send_message(u'process_events')
553 count = 0
554
555 count = 0
556@@ -83,5 +83,5 @@
557 count += 1
558 #Every x verses repaint the screen
559 if count % 3 == 0:
560- Receiver().send_message(u'openlpprocessevents')
561+ Receiver().send_message(u'process_events')
562 count = 0
563
564=== modified file 'openlp/plugins/bibles/lib/bibleOSISimpl.py'
565--- openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-07-13 20:08:43 +0000
566+++ openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-08-24 04:30:04 +0000
567@@ -149,13 +149,13 @@
568 self.abbrevOfBible[p[0]], testament)
569 dialogobject.incrementProgressBar(
570 self.booksOfBible[p[0]])
571- Receiver().send_message(u'openlpprocessevents')
572+ Receiver().send_message(u'process_events')
573 count = 0
574 self.bibledb.add_verse(book.id, p[1], p[2], text)
575 count += 1
576 #Every 3 verses repaint the screen
577 if count % 3 == 0:
578- Receiver().send_message(u'openlpprocessevents')
579+ Receiver().send_message(u'process_events')
580 count = 0
581
582 def remove_block(self, start_tag, end_tag, text):
583
584=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
585--- openlp/plugins/bibles/lib/mediaitem.py 2009-08-15 11:02:24 +0000
586+++ openlp/plugins/bibles/lib/mediaitem.py 2009-08-24 04:30:04 +0000
587@@ -252,7 +252,7 @@
588
589 def setQuickMsg2(self, text):
590 self.QuickMsg2.setText(translate(u'BibleMediaItem', unicode(text)))
591- Receiver().send_message(u'openlpprocessevents')
592+ Receiver().send_message(u'process_events')
593 #minor delay to get the events processed
594 time.sleep(0.5)
595
596
597=== modified file 'openlp/plugins/images/lib/__init__.py'
598--- openlp/plugins/images/lib/__init__.py 2009-07-03 20:32:33 +0000
599+++ openlp/plugins/images/lib/__init__.py 2009-08-24 05:13:27 +0000
600@@ -18,5 +18,5 @@
601 Place, Suite 330, Boston, MA 02111-1307 USA
602 """
603 from mediaitem import ImageMediaItem
604-from imageslidecontroller import ImageToolbar
605+from imagetoolbar import ImageToolbar
606 from imagetab import ImageTab
607
608=== renamed file 'openlp/plugins/images/lib/imageslidecontroller.py' => 'openlp/plugins/images/lib/imagetoolbar.py'
609--- openlp/plugins/images/lib/imageslidecontroller.py 2009-08-09 17:58:37 +0000
610+++ openlp/plugins/images/lib/imagetoolbar.py 2009-08-24 05:13:27 +0000
611@@ -21,7 +21,7 @@
612 import os
613
614 from PyQt4 import QtCore, QtGui
615-from openlp.core.lib import OpenLPToolbar, translate
616+from openlp.core.lib import OpenLPToolbar, translate, Receiver
617 from openlp.core.ui.slidecontroller import MasterToolbar
618
619 class ImageToolbar(MasterToolbar):
620@@ -31,40 +31,8 @@
621 self.parent = parent
622 self.Toolbar = None
623 self.isLive = isLive
624- self.defineToolbar()
625
626- def defineToolbar(self):
627- # Controller toolbar
628- self.Toolbar = OpenLPToolbar(self)
629- sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
630- QtGui.QSizePolicy.Fixed)
631- sizeToolbarPolicy.setHorizontalStretch(0)
632- sizeToolbarPolicy.setVerticalStretch(0)
633- sizeToolbarPolicy.setHeightForWidth(
634- self.Toolbar.sizePolicy().hasHeightForWidth())
635- if self.isLive:
636- self.Toolbar.addToolbarButton(u'First Slide',
637- u':/slides/slide_first.png',
638- translate(u'SlideController', u'Move to first'),
639- self.onSlideSelectedFirst)
640- self.Toolbar.addToolbarButton(u'Previous Slide',
641- u':/slides/slide_previous.png',
642- translate(u'SlideController', u'Move to previous'),
643- self.onSlideSelectedPrevious)
644- self.Toolbar.addToolbarButton(u'Next Slide',
645- u':/slides/slide_next.png',
646- translate(u'SlideController', u'Move to next'),
647- self.onSlideSelectedNext)
648- if self.isLive:
649- self.Toolbar.addToolbarButton(u'Last Slide',
650- u':/slides/slide_last.png',
651- translate(u'SlideController', u'Move to last'),
652- self.onSlideSelectedLast)
653- self.Toolbar.addSeparator()
654- self.Toolbar.addToolbarButton(u'Close Screen',
655- u':/slides/slide_close.png',
656- translate(u'SlideController', u'Close Screen'),
657- self.onBlankScreen)
658+ def defineZone5(self):
659 self.Toolbar.addSeparator()
660 self.Toolbar.addToolbarButton(u'Start Loop',
661 u':/media/media_time.png',
662@@ -79,28 +47,17 @@
663 self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
664 self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
665 self.Toolbar.addAction(self.SpinWidget)
666- #self.Layout.addWidget(self.Toolbar)
667- self.Toolbar.setSizePolicy(sizeToolbarPolicy)
668+ self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
669 self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
670
671- def serviceLoaded(self):
672- self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
673- if self.PreviewListWidget.rowCount() == 1:
674- self.DelaySpinBox.setEnabled(False)
675-
676 def onStartLoop(self):
677 """
678- Go to the last slide.
679+ Trigger the slide controller to start to loop passing the delay
680 """
681- if self.PreviewListWidget.rowCount() > 1:
682- self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
683+ Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value())
684
685 def onStopLoop(self):
686 """
687- Go to the last slide.
688+ Trigger the slide controller to stop the loop
689 """
690- self.killTimer(self.timer_id)
691-
692- def timerEvent(self, event):
693- if event.timerId() == self.timer_id:
694- self.onSlideSelectedNext()
695+ Receiver().send_message(u'%sslide_stop_loop' % self.prefix)
696
697=== modified file 'openlp/plugins/images/lib/mediaitem.py'
698--- openlp/plugins/images/lib/mediaitem.py 2009-07-04 05:52:30 +0000
699+++ openlp/plugins/images/lib/mediaitem.py 2009-08-24 17:43:15 +0000
700@@ -22,7 +22,7 @@
701
702 from PyQt4 import QtCore, QtGui
703 from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon
704-from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar
705+from openlp.plugins.images.lib.imagetoolbar import ImageToolbar
706
707 # We have to explicitly create separate classes for each plugin
708 # in order for DnD to the Service manager to work correctly.
709@@ -54,7 +54,7 @@
710 # be instanced by the base MediaManagerItem
711 self.ListViewWithDnD_class = ImageListView
712 self.ServiceItemIconName = u':/media/media_image.png'
713-
714+ self.servicePath = None
715 MediaManagerItem.__init__(self, parent, icon, title)
716 #create and install our own slide controller toolbar
717 imageToolbar = ImageToolbar(self, True)
718@@ -63,21 +63,37 @@
719 def initialise(self):
720 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
721 self.ListView.setIconSize(QtCore.QSize(88,50))
722+ self.servicePath = os.path.join(self.parent.config.get_data_path(), u'.thumbnails')
723+ if os.path.exists(self.servicePath) == False:
724+ os.mkdir(self.servicePath)
725 self.loadList(self.parent.config.load_list(self.ConfigSection))
726
727 def onDeleteClick(self):
728 item = self.ListView.currentItem()
729 if item is not None:
730+ try:
731+ os.remove(os.path.join(self.servicePath, unicode(item.text())))
732+ except:
733+ #if not present do not worry
734+ pass
735 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
736 row = self.ListView.row(item)
737 self.ListView.takeItem(row)
738- self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
739+ self.parent.config.set_list(self.ConfigSection, self.getFileList())
740
741 def loadList(self, list):
742 for file in list:
743 (path, filename) = os.path.split(unicode(file))
744+ thumb = os.path.join(self.servicePath, filename)
745+ if os.path.exists(thumb):
746+ icon = buildIcon(thumb)
747+ else:
748+ icon = buildIcon(unicode(file))
749+ pixmap = icon.pixmap(QtCore.QSize(88,50))
750+ ext = os.path.splitext(thumb)[1].lower()
751+ pixmap.save(thumb, ext[1:])
752 item_name = QtGui.QListWidgetItem(filename)
753- item_name.setIcon(buildIcon(file))
754+ item_name.setIcon(icon)
755 item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
756 self.ListView.addItem(item_name)
757
758
759=== modified file 'openlp/plugins/remotes/remoteclient-cli.py'
760--- openlp/plugins/remotes/remoteclient-cli.py 2009-08-12 16:29:00 +0000
761+++ openlp/plugins/remotes/remoteclient-cli.py 2009-08-24 05:10:04 +0000
762@@ -51,6 +51,8 @@
763 help="Action to be undertaken")
764 parser.add_option("-m", "--message",
765 help="Message to be passed for the action")
766+ parser.add_option("-n", "--slidenext",
767+ help="Trigger the next slide")
768
769 (options, args) = parser.parse_args()
770 if len(args) > 0:
771@@ -62,6 +64,11 @@
772 elif options.address is None:
773 parser.print_help()
774 parser.error("IP address missing")
775+ elif options.slidenext is not None:
776+ options.event = u'next_slide'
777+ options.message = u''
778+ text = format_message(options)
779+ sendData(options, text)
780 else:
781 text = format_message(options)
782 sendData(options, text)
783
784=== modified file 'openlp/plugins/remotes/remoteplugin.py'
785--- openlp/plugins/remotes/remoteplugin.py 2009-08-15 07:33:01 +0000
786+++ openlp/plugins/remotes/remoteplugin.py 2009-08-24 05:10:04 +0000
787@@ -22,7 +22,7 @@
788
789 from PyQt4 import QtNetwork, QtGui, QtCore
790
791-from openlp.core.lib import Plugin, Event, EventType
792+from openlp.core.lib import Plugin, Event, EventType, Receiver
793 from openlp.plugins.remotes.lib import RemoteTab
794
795 class RemotesPlugin(Plugin):
796@@ -59,7 +59,8 @@
797
798 if event == u'alert':
799 self.event_manager.post_event(Event(u'RemotePlugin', EventType.TriggerAlert , unicode(datagram[pos + 1:])))
800-
801+ if event == u'next_slide':
802+ Receiver().send_message(u'live_slide_next')
803
804
805