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
=== modified file 'openlp.pyw'
--- openlp.pyw 2009-08-10 19:11:54 +0000
+++ openlp.pyw 2009-08-24 04:30:04 +0000
@@ -52,7 +52,7 @@
52 pass52 pass
53 #provide a listener for widgets to reqest a screen update.53 #provide a listener for widgets to reqest a screen update.
54 QtCore.QObject.connect(Receiver.get_receiver(),54 QtCore.QObject.connect(Receiver.get_receiver(),
55 QtCore.SIGNAL(u'openlpprocessevents'), self.processEvents)55 QtCore.SIGNAL(u'process_events'), self.processEvents)
56 self.setApplicationName(u'openlp.org')56 self.setApplicationName(u'openlp.org')
57 self.setApplicationVersion(u'1.9.0')57 self.setApplicationVersion(u'1.9.0')
58 self.splash = SplashScreen(self.applicationVersion())58 self.splash = SplashScreen(self.applicationVersion())
5959
=== modified file 'openlp/core/lib/eventreceiver.py'
--- openlp/core/lib/eventreceiver.py 2009-07-10 15:45:17 +0000
+++ openlp/core/lib/eventreceiver.py 2009-08-24 05:10:04 +0000
@@ -32,10 +32,6 @@
32 def send_message(self, event, msg=None):32 def send_message(self, event, msg=None):
33 self.emit(QtCore.SIGNAL(event), msg)33 self.emit(QtCore.SIGNAL(event), msg)
3434
35 def received(self, msg=None):
36 print msg
37
38
39class Receiver():35class Receiver():
40 """36 """
41 Class to allow events to be passed from different parts of the system.37 Class to allow events to be passed from different parts of the system.
@@ -56,9 +52,5 @@
56 Receiver.eventreceiver.send_message(event, msg)52 Receiver.eventreceiver.send_message(event, msg)
5753
58 @staticmethod54 @staticmethod
59 def receive():
60 Receiver.eventreceiver.receive()
61
62 @staticmethod
63 def get_receiver():55 def get_receiver():
64 return Receiver.eventreceiver56 return Receiver.eventreceiver
6557
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py 2009-08-12 04:57:24 +0000
+++ openlp/core/ui/maindisplay.py 2009-08-24 04:30:04 +0000
@@ -21,7 +21,7 @@
21from PyQt4 import QtCore, QtGui21from PyQt4 import QtCore, QtGui
2222
23from time import sleep23from time import sleep
24from openlp.core.lib import translate, EventManager, Event, EventType24from openlp.core.lib import translate, EventManager, Event, EventType, Receiver
2525
26class MainDisplay(QtGui.QWidget):26class MainDisplay(QtGui.QWidget):
27 """27 """
@@ -60,6 +60,8 @@
60 self.timer_id = 060 self.timer_id = 0
61 # Register the main form as an event consumer.61 # Register the main form as an event consumer.
62 self.parent.EventManager.register(self)62 self.parent.EventManager.register(self)
63 QtCore.QObject.connect(Receiver.get_receiver(),
64 QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay)
6365
64 def handle_event(self, event):66 def handle_event(self, event):
65 """67 """
6668
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-08-10 20:10:20 +0000
+++ openlp/core/ui/slidecontroller.py 2009-08-24 05:10:04 +0000
@@ -21,7 +21,7 @@
21import os21import os
2222
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import OpenLPToolbar, translate, buildIcon24from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver
2525
26class SlideList(QtGui.QTableWidget):26class SlideList(QtGui.QTableWidget):
27 """27 """
@@ -64,9 +64,11 @@
64 Set up the Slide Controller.64 Set up the Slide Controller.
65 """65 """
66 self.toolbarList = {}66 self.toolbarList = {}
67 self.previewList = {}
68 QtGui.QWidget.__init__(self, parent)67 QtGui.QWidget.__init__(self, parent)
69 self.isLive = isLive68 self.isLive = isLive
69 self.prefix = u'preview_'
70 if isLive:
71 self.prefix = u'live_'
70 self.parent = parent72 self.parent = parent
71 self.Panel = QtGui.QWidget(parent.ControlSplitter)73 self.Panel = QtGui.QWidget(parent.ControlSplitter)
72 self.Splitter = QtGui.QSplitter(self.Panel)74 self.Splitter = QtGui.QSplitter(self.Panel)
@@ -118,19 +120,40 @@
118 self.grid.setMargin(8)120 self.grid.setMargin(8)
119 self.grid.setObjectName(u'grid')121 self.grid.setObjectName(u'grid')
120 # Actual preview screen122 # Actual preview screen
121 masterPreview = MasterPreview(self.PreviewFrame).getPreview()123 self.SlidePreview = QtGui.QLabel(self.parent)
122 self.registerPreview(u'master', masterPreview)124 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
123 self.SlidePreview = self.retrievePreview(u'master')125 QtGui.QSizePolicy.Fixed)
126 sizePolicy.setHorizontalStretch(0)
127 sizePolicy.setVerticalStretch(0)
128 sizePolicy.setHeightForWidth(
129 self.SlidePreview.sizePolicy().hasHeightForWidth())
130 self.SlidePreview.setSizePolicy(sizePolicy)
131 self.SlidePreview.setFixedSize(QtCore.QSize(250, 210))
132 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
133 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
134 self.SlidePreview.setLineWidth(1)
135 self.SlidePreview.setScaledContents(True)
136 self.SlidePreview.setObjectName(u'SlidePreview')
124 self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)137 self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
125 # Signals138 # Signals
126 QtCore.QObject.connect(self.PreviewListWidget,139 QtCore.QObject.connect(self.PreviewListWidget,
127 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected)140 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
128 QtCore.QObject.connect(self.PreviewListWidget,141 QtCore.QObject.connect(self.PreviewListWidget,
129 QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected)142 QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
130 # Add Late Arrivals143 # Window Event Handlers
131 self.BaseToolbar.PreviewListWidget = self.PreviewListWidget144 QtCore.QObject.connect(Receiver.get_receiver(),
132 self.BaseToolbar.SlidePreview = self.SlidePreview145 QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst)
133 self.BaseToolbar.mainDisplay = self.parent.mainDisplay146 QtCore.QObject.connect(Receiver.get_receiver(),
147 QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious)
148 QtCore.QObject.connect(Receiver.get_receiver(),
149 QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext)
150 QtCore.QObject.connect(Receiver.get_receiver(),
151 QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast)
152 QtCore.QObject.connect(Receiver.get_receiver(),
153 QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop)
154 QtCore.QObject.connect(Receiver.get_receiver(),
155 QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop)
156
134157
135 def registerToolbar(self, handle,controller):158 def registerToolbar(self, handle,controller):
136 """159 """
@@ -144,18 +167,6 @@
144 #store the handle name in lower case so no probems later167 #store the handle name in lower case so no probems later
145 self.toolbarList[handle.lower()] = controller168 self.toolbarList[handle.lower()] = controller
146169
147 def registerPreview(self, handle,controller):
148 """
149 Register a new preview with the controller
150 ``handle``
151 Identifier for the preview being stored this should equal the
152 plugins name.
153 ``controller``
154 The preview class which should extend MasterToolbar
155 """
156 #store the handle name in lower case so no probems later
157 self.previewList[handle.lower()] = controller
158
159 def retrieveToolbar(self, handle):170 def retrieveToolbar(self, handle):
160 """171 """
161 Find the toolbar and return master if none present172 Find the toolbar and return master if none present
@@ -167,38 +178,22 @@
167 toolbar = self.toolbarList[handle.lower()]178 toolbar = self.toolbarList[handle.lower()]
168 except:179 except:
169 toolbar = self.toolbarList[u'master']180 toolbar = self.toolbarList[u'master']
170 toolbar.PreviewListWidget = self.PreviewListWidget
171 toolbar.SlidePreview = self.SlidePreview
172 toolbar.mainDisplay = self.parent.mainDisplay
173 return toolbar181 return toolbar
174182
175 def retrievePreview(self, handle):
176 """
177 Find the preview and return master if none present
178 Add extra information back into toolbar class
179 ``handle``
180 Identifier for the toolbar being requested
181 """
182 try:
183 preview = self.previewList[handle.lower()]
184 except:
185 preview = self.previewList[u'master']
186 return preview
187
188 def addServiceItem(self, item):183 def addServiceItem(self, item):
189 """184 """
190 Method to install the service item into the controller and185 Method to install the service item into the controller and
191 request the correct the toolbar of the plugin186 request the correct the toolbar of the plugin
192 Called by plugins187 Called by plugins
193 """188 """
194 self.SlidePreview = self.retrievePreview(item.shortname)
195 self.BaseToolbar = self.retrieveToolbar(item.shortname)189 self.BaseToolbar = self.retrieveToolbar(item.shortname)
196 self.ControllerLayout.removeWidget(self.Toolbar)190 self.ControllerLayout.removeWidget(self.Toolbar)
197 #remove the old toolbar191 #remove the old toolbar
198 self.Toolbar.clear()192 self.Toolbar.clear()
199 self.Toolbar = self.BaseToolbar.getToolbar()193 self.Toolbar = self.BaseToolbar.getToolbar()
200 self.ControllerLayout.addWidget(self.Toolbar)194 self.ControllerLayout.addWidget(self.Toolbar)
201 self.BaseToolbar.addServiceItem(item)195 item.render()
196 self.displayServiceManagerItems(item, 0)
202197
203 def addServiceManagerItem(self, item, slideno):198 def addServiceManagerItem(self, item, slideno):
204 """199 """
@@ -206,45 +201,133 @@
206 request the correct the toolbar of the plugin201 request the correct the toolbar of the plugin
207 Called by ServiceManager202 Called by ServiceManager
208 """203 """
209 self.SlidePreview = self.retrievePreview(item.shortname)
210 self.BaseToolbar = self.retrieveToolbar(item.shortname)204 self.BaseToolbar = self.retrieveToolbar(item.shortname)
211 self.ControllerLayout.removeWidget(self.Toolbar)205 self.ControllerLayout.removeWidget(self.Toolbar)
212 #remove the old toolbar206 #remove the old toolbar
213 self.Toolbar.clear()207 self.Toolbar.clear()
214 self.Toolbar = self.BaseToolbar.getToolbar()208 self.Toolbar = self.BaseToolbar.getToolbar()
215 self.ControllerLayout.addWidget(self.Toolbar)209 self.ControllerLayout.addWidget(self.Toolbar)
216 self.BaseToolbar.addServiceManagerItem(item, slideno)210 self.displayServiceManagerItems(item, slideno)
217211
218212 def displayServiceManagerItems(self, serviceitem, slideno):
219class MasterPreview(QtCore.QObject):213 """
220 """214 Loads a ServiceItem into the system from ServiceManager
221 Class from which all Previews should extend allowing plugins to215 Display the slide number passed
222 have their own previews216 """
223 """217 log.debug(u'add Service Manager Item')
224 def __init__(self, parent):218 self.serviceitem = serviceitem
225 self.parent = parent219 slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
226 QtCore.QObject.__init__(self)220 slide_width = 300
227 self.definePreview()221 slide_height = slide_width * slide_pixmap.height() / slide_pixmap.width()
228222 self.PreviewListWidget.clear()
229 def getPreview(self):223 self.PreviewListWidget.setRowCount(0)
230 return self.SlidePreview224 self.PreviewListWidget.setColumnWidth(0, slide_width)
231225 for framenumber, frame in enumerate(self.serviceitem.frames):
232 def definePreview(self):226 self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)
233 self.SlidePreview = QtGui.QLabel(self.parent)227 pixmap = QtGui.QPixmap.fromImage(frame[u'image'])
234 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,228 item = QtGui.QTableWidgetItem()
235 QtGui.QSizePolicy.Fixed)229 label = QtGui.QLabel()
236 sizePolicy.setHorizontalStretch(0)230 label.setMargin(8)
237 sizePolicy.setVerticalStretch(0)231 label.setScaledContents(True)
238 sizePolicy.setHeightForWidth(232 label.setPixmap(pixmap)
239 self.SlidePreview.sizePolicy().hasHeightForWidth())233 self.PreviewListWidget.setCellWidget(framenumber, 0, label)
240 self.SlidePreview.setSizePolicy(sizePolicy)234 self.PreviewListWidget.setItem(framenumber, 0, item)
241 self.SlidePreview.setFixedSize(QtCore.QSize(250, 210))235 self.PreviewListWidget.setRowHeight(framenumber, slide_height)
242 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)236 slide_width = self.PreviewListWidget.viewport().size().width()
243 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)237 self.PreviewListWidget.setColumnWidth(0, slide_width)
244 self.SlidePreview.setLineWidth(1)238 if slideno > self.PreviewListWidget.rowCount():
245 self.SlidePreview.setScaledContents(True)239 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
246 self.SlidePreview.setObjectName(u'SlidePreview')240 else:
247241 self.PreviewListWidget.selectRow(slideno)
242 self.onSlideSelected()
243 self.PreviewListWidget.setFocus()
244
245 #Screen event methods
246 def onSlideSelected(self):
247 """
248 Generate the preview when you click on a slide.
249 if this is the Live Controller also display on the screen
250 """
251 row = self.PreviewListWidget.currentRow()
252 if row > -1 and row < self.PreviewListWidget.rowCount():
253 label = self.PreviewListWidget.cellWidget(row, 0)
254 smallframe = label.pixmap()
255 frame = self.serviceitem.frames[row][u'image']
256 self.SlidePreview.setPixmap(smallframe)
257 if self.isLive:
258 self.parent.mainDisplay.frameView(frame)
259
260 def onSlideSelectedFirst(self):
261 """
262 Go to the first slide.
263 """
264 print "oSSF"
265 self.PreviewListWidget.selectRow(0)
266 self.onSlideSelected()
267
268 def onBlankScreen(self):
269 """
270 Blank the screen.
271 """
272 self.parent.mainDisplay.blankDisplay()
273
274 def onSlideSelected(self):
275 """
276 Generate the preview when you click on a slide.
277 if this is the Live Controller also display on the screen
278 """
279 row = self.PreviewListWidget.currentRow()
280 if row > -1 and row < self.PreviewListWidget.rowCount():
281 label = self.PreviewListWidget.cellWidget(row, 0)
282 smallframe = label.pixmap()
283 frame = self.serviceitem.frames[row][u'image']
284 self.SlidePreview.setPixmap(smallframe)
285 if self.isLive:
286 self.parent.mainDisplay.frameView(frame)
287
288 def onSlideSelectedNext(self):
289 """
290 Go to the next slide.
291 """
292 row = self.PreviewListWidget.currentRow() + 1
293 if row == self.PreviewListWidget.rowCount():
294 row = 0
295 self.PreviewListWidget.selectRow(row)
296 self.onSlideSelected()
297
298 def onSlideSelectedPrevious(self):
299 """
300 Go to the previous slide.
301 """
302 row = self.PreviewListWidget.currentRow() - 1
303 if row == -1:
304 row = self.PreviewListWidget.rowCount() - 1
305 self.PreviewListWidget.selectRow(row)
306 self.onSlideSelected()
307
308 def onSlideSelectedLast(self):
309 """
310 Go to the last slide.
311 """
312 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
313 self.onSlideSelected()
314
315 def onStartLoop(self, value):
316 """
317 Go to the last slide.
318 """
319 if self.PreviewListWidget.rowCount() > 1:
320 self.timer_id = self.startTimer(int(value) * 1000)
321
322 def onStopLoop(self):
323 """
324 Go to the last slide.
325 """
326 self.killTimer(self.timer_id)
327
328 def timerEvent(self, event):
329 if event.timerId() == self.timer_id:
330 self.onSlideSelectedNext()
248331
249class MasterToolbar(QtCore.QObject):332class MasterToolbar(QtCore.QObject):
250 """333 """
@@ -255,11 +338,19 @@
255 QtCore.QObject.__init__(self)338 QtCore.QObject.__init__(self)
256 self.PreviewListWidget = QtGui.QListWidget()339 self.PreviewListWidget = QtGui.QListWidget()
257 self.isLive = isLive340 self.isLive = isLive
341 self.prefix = u'preview_'
342 if isLive:
343 self.prefix = u'live_'
258344
259 def getToolbar(self):345 def getToolbar(self):
260 #define toolbar here as it needs to be redefined each time346 #define toolbar here as it needs to be redefined each time
261 #as the clear destroys it.347 #as the clear destroys it.
262 self.defineToolbar()348 self.defineToolbar()
349 self.defineZone1()
350 self.defineZone2()
351 self.defineZone3()
352 self.defineZone4()
353 self.defineZone5()
263 return self.Toolbar354 return self.Toolbar
264355
265 def defineToolbar(self):356 def defineToolbar(self):
@@ -273,130 +364,53 @@
273 self.Toolbar.sizePolicy().hasHeightForWidth())364 self.Toolbar.sizePolicy().hasHeightForWidth())
274 self.Toolbar.setSizePolicy(sizeToolbarPolicy)365 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
275366
367 def defineZone1(self):
368 #Dummy Zone
369 pass
370
371 def defineZone2(self):
276 if self.isLive:372 if self.isLive:
277 self.Toolbar.addToolbarButton(u'First Slide',373 self.Toolbar.addToolbarButton(u'First Slide',
278 u':/slides/slide_first.png',374 u':/slides/slide_first.png',
279 translate(u'SlideController', u'Move to first'),375 translate(u'SlideController', u'Move to first'),
280 self.onSlideSelectedFirst)376 self.onSlideFirst)
281 self.Toolbar.addToolbarButton(u'Previous Slide',377 self.Toolbar.addToolbarButton(u'Previous Slide',
282 u':/slides/slide_previous.png',378 u':/slides/slide_previous.png',
283 translate(u'SlideController', u'Move to previous'),379 translate(u'SlideController', u'Move to previous'),
284 self.onSlideSelectedPrevious)380 self.onSlidePrevious)
285 self.Toolbar.addToolbarButton(u'Next Slide',381 self.Toolbar.addToolbarButton(u'Next Slide',
286 u':/slides/slide_next.png',382 u':/slides/slide_next.png',
287 translate(u'SlideController', u'Move to next'),383 translate(u'SlideController', u'Move to next'),
288 self.onSlideSelectedNext)384 self.onSlideNext)
289 if self.isLive:385 if self.isLive:
290 self.Toolbar.addToolbarButton(u'Last Slide',386 self.Toolbar.addToolbarButton(u'Last Slide',
291 u':/slides/slide_last.png',387 u':/slides/slide_last.png',
292 translate(u'SlideController', u'Move to last'),388 translate(u'SlideController', u'Move to last'),
293 self.onSlideSelectedLast)389 self.onSlideLast)
390
391 def defineZone3(self):
392 #Dummy Zone
393 pass
394
395 def defineZone4(self):
396 if self.isLive:
294 self.Toolbar.addSeparator()397 self.Toolbar.addSeparator()
295 self.Toolbar.addToolbarButton(u'Close Screen',398 self.Toolbar.addToolbarButton(u'Close Screen',
296 u':/slides/slide_close.png',399 u':/slides/slide_close.png',
297 translate(u'SlideController', u'Close Screen'),400 translate(u'SlideController', u'Close Screen'),
298 self.onBlankScreen)401 self.onSlideBlank)
299402
300 def serviceLoaded(self):403 def defineZone5(self):
301 """404 #Dummy Zone
302 method to allow toolbars to know when the service item
303 is fully in place
304 """
305 pass405 pass
306406
307 def onSlideSelectedFirst(self):407 def onSlideFirst(self):
308 """408 Receiver().send_message(u'%sslide_first'% self.prefix)
309 Go to the first slide.409 def onSlidePrevious(self):
310 """410 Receiver().send_message(u'%sslide_previous'% self.prefix)
311 self.PreviewListWidget.selectRow(0)411 def onSlideNext(self):
312 self.onSlideSelected()412 Receiver().send_message(u'%sslide_next'% self.prefix)
313413 def onSlideLast(self):
314 def onSlideSelectedNext(self):414 Receiver().send_message(u'%sslide_last' % self.prefix)
315 """415 def onSlideBlank(self):
316 Go to the next slide.416 Receiver().send_message(u'%sslide_blank' % self.prefix)
317 """
318 row = self.PreviewListWidget.currentRow() + 1
319 if row == self.PreviewListWidget.rowCount():
320 row = 0
321 self.PreviewListWidget.selectRow(row)
322 self.onSlideSelected()
323
324 def onSlideSelectedPrevious(self):
325 """
326 Go to the previous slide.
327 """
328 row = self.PreviewListWidget.currentRow() - 1
329 if row == -1:
330 row = self.PreviewListWidget.rowCount() - 1
331 self.PreviewListWidget.selectRow(row)
332 self.onSlideSelected()
333
334 def onSlideSelectedLast(self):
335 """
336 Go to the last slide.
337 """
338 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
339 self.onSlideSelected()
340
341 def onBlankScreen(self):
342 """
343 Blank the screen.
344 """
345 self.mainDisplay.blankDisplay()
346
347 def onSlideSelected(self):
348 """
349 Generate the preview when you click on a slide.
350 if this is the Live Controller also display on the screen
351 """
352 row = self.PreviewListWidget.currentRow()
353 if row > -1 and row < self.PreviewListWidget.rowCount():
354 label = self.PreviewListWidget.cellWidget(row, 0)
355 smallframe = label.pixmap()
356 frame = self.serviceitem.frames[row][u'image']
357 self.SlidePreview.setPixmap(smallframe)
358 if self.isLive:
359 self.mainDisplay.frameView(frame)
360
361 def addServiceItem(self, serviceitem, slideno = 1):
362 """
363 Loads a ServiceItem into the system from plugins
364 Display the first slide
365 """
366 log.debug(u'add Service Item')
367 serviceitem.render()
368 self.addServiceManagerItem(serviceitem, 0)
369
370 def addServiceManagerItem(self, serviceitem, slideno):
371 """
372 Loads a ServiceItem into the system from ServiceManager
373 Display the slide number passed
374 """
375 log.debug(u'add Service Manager Item')
376 self.serviceitem = serviceitem
377 slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
378 slide_width = 300
379 slide_height = slide_width * slide_pixmap.height() / slide_pixmap.width()
380 self.PreviewListWidget.clear()
381 self.PreviewListWidget.setRowCount(0)
382 self.PreviewListWidget.setColumnWidth(0, slide_width)
383 for framenumber, frame in enumerate(self.serviceitem.frames):
384 self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)
385 pixmap = QtGui.QPixmap.fromImage(frame[u'image'])
386 item = QtGui.QTableWidgetItem()
387 label = QtGui.QLabel()
388 label.setMargin(8)
389 label.setScaledContents(True)
390 label.setPixmap(pixmap)
391 self.PreviewListWidget.setCellWidget(framenumber, 0, label)
392 self.PreviewListWidget.setItem(framenumber, 0, item)
393 self.PreviewListWidget.setRowHeight(framenumber, slide_height)
394 slide_width = self.PreviewListWidget.viewport().size().width()
395 self.PreviewListWidget.setColumnWidth(0, slide_width)
396 if slideno > self.PreviewListWidget.rowCount():
397 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
398 else:
399 self.PreviewListWidget.selectRow(slideno)
400 self.onSlideSelected()
401 self.serviceLoaded()
402 self.PreviewListWidget.setFocus()
403417
=== modified file 'openlp/plugins/bibles/lib/bibleCSVimpl.py'
--- openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-07-09 16:51:25 +0000
+++ openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-08-24 04:30:04 +0000
@@ -60,7 +60,7 @@
60 count += 160 count += 1
61 #Flush the screen events61 #Flush the screen events
62 if count % 3 == 0:62 if count % 3 == 0:
63 Receiver().send_message(u'openlpprocessevents')63 Receiver().send_message(u'process_events')
64 count = 064 count = 0
6565
66 count = 066 count = 0
@@ -83,5 +83,5 @@
83 count += 183 count += 1
84 #Every x verses repaint the screen84 #Every x verses repaint the screen
85 if count % 3 == 0:85 if count % 3 == 0:
86 Receiver().send_message(u'openlpprocessevents')86 Receiver().send_message(u'process_events')
87 count = 087 count = 0
8888
=== modified file 'openlp/plugins/bibles/lib/bibleOSISimpl.py'
--- openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-07-13 20:08:43 +0000
+++ openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-08-24 04:30:04 +0000
@@ -149,13 +149,13 @@
149 self.abbrevOfBible[p[0]], testament)149 self.abbrevOfBible[p[0]], testament)
150 dialogobject.incrementProgressBar(150 dialogobject.incrementProgressBar(
151 self.booksOfBible[p[0]])151 self.booksOfBible[p[0]])
152 Receiver().send_message(u'openlpprocessevents')152 Receiver().send_message(u'process_events')
153 count = 0153 count = 0
154 self.bibledb.add_verse(book.id, p[1], p[2], text)154 self.bibledb.add_verse(book.id, p[1], p[2], text)
155 count += 1155 count += 1
156 #Every 3 verses repaint the screen156 #Every 3 verses repaint the screen
157 if count % 3 == 0:157 if count % 3 == 0:
158 Receiver().send_message(u'openlpprocessevents')158 Receiver().send_message(u'process_events')
159 count = 0159 count = 0
160160
161 def remove_block(self, start_tag, end_tag, text):161 def remove_block(self, start_tag, end_tag, text):
162162
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-08-15 11:02:24 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-08-24 04:30:04 +0000
@@ -252,7 +252,7 @@
252252
253 def setQuickMsg2(self, text):253 def setQuickMsg2(self, text):
254 self.QuickMsg2.setText(translate(u'BibleMediaItem', unicode(text)))254 self.QuickMsg2.setText(translate(u'BibleMediaItem', unicode(text)))
255 Receiver().send_message(u'openlpprocessevents')255 Receiver().send_message(u'process_events')
256 #minor delay to get the events processed256 #minor delay to get the events processed
257 time.sleep(0.5)257 time.sleep(0.5)
258258
259259
=== modified file 'openlp/plugins/images/lib/__init__.py'
--- openlp/plugins/images/lib/__init__.py 2009-07-03 20:32:33 +0000
+++ openlp/plugins/images/lib/__init__.py 2009-08-24 05:13:27 +0000
@@ -18,5 +18,5 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20from mediaitem import ImageMediaItem20from mediaitem import ImageMediaItem
21from imageslidecontroller import ImageToolbar21from imagetoolbar import ImageToolbar
22from imagetab import ImageTab22from imagetab import ImageTab
2323
=== renamed file 'openlp/plugins/images/lib/imageslidecontroller.py' => 'openlp/plugins/images/lib/imagetoolbar.py'
--- openlp/plugins/images/lib/imageslidecontroller.py 2009-08-09 17:58:37 +0000
+++ openlp/plugins/images/lib/imagetoolbar.py 2009-08-24 05:13:27 +0000
@@ -21,7 +21,7 @@
21import os21import os
2222
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import OpenLPToolbar, translate24from openlp.core.lib import OpenLPToolbar, translate, Receiver
25from openlp.core.ui.slidecontroller import MasterToolbar25from openlp.core.ui.slidecontroller import MasterToolbar
2626
27class ImageToolbar(MasterToolbar):27class ImageToolbar(MasterToolbar):
@@ -31,40 +31,8 @@
31 self.parent = parent31 self.parent = parent
32 self.Toolbar = None32 self.Toolbar = None
33 self.isLive = isLive33 self.isLive = isLive
34 self.defineToolbar()
3534
36 def defineToolbar(self):35 def defineZone5(self):
37 # Controller toolbar
38 self.Toolbar = OpenLPToolbar(self)
39 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
40 QtGui.QSizePolicy.Fixed)
41 sizeToolbarPolicy.setHorizontalStretch(0)
42 sizeToolbarPolicy.setVerticalStretch(0)
43 sizeToolbarPolicy.setHeightForWidth(
44 self.Toolbar.sizePolicy().hasHeightForWidth())
45 if self.isLive:
46 self.Toolbar.addToolbarButton(u'First Slide',
47 u':/slides/slide_first.png',
48 translate(u'SlideController', u'Move to first'),
49 self.onSlideSelectedFirst)
50 self.Toolbar.addToolbarButton(u'Previous Slide',
51 u':/slides/slide_previous.png',
52 translate(u'SlideController', u'Move to previous'),
53 self.onSlideSelectedPrevious)
54 self.Toolbar.addToolbarButton(u'Next Slide',
55 u':/slides/slide_next.png',
56 translate(u'SlideController', u'Move to next'),
57 self.onSlideSelectedNext)
58 if self.isLive:
59 self.Toolbar.addToolbarButton(u'Last Slide',
60 u':/slides/slide_last.png',
61 translate(u'SlideController', u'Move to last'),
62 self.onSlideSelectedLast)
63 self.Toolbar.addSeparator()
64 self.Toolbar.addToolbarButton(u'Close Screen',
65 u':/slides/slide_close.png',
66 translate(u'SlideController', u'Close Screen'),
67 self.onBlankScreen)
68 self.Toolbar.addSeparator()36 self.Toolbar.addSeparator()
69 self.Toolbar.addToolbarButton(u'Start Loop',37 self.Toolbar.addToolbarButton(u'Start Loop',
70 u':/media/media_time.png',38 u':/media/media_time.png',
@@ -79,28 +47,17 @@
79 self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)47 self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
80 self.SpinWidget.setDefaultWidget(self.DelaySpinBox)48 self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
81 self.Toolbar.addAction(self.SpinWidget)49 self.Toolbar.addAction(self.SpinWidget)
82 #self.Layout.addWidget(self.Toolbar)50 self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
83 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
84 self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))51 self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
8552
86 def serviceLoaded(self):
87 self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
88 if self.PreviewListWidget.rowCount() == 1:
89 self.DelaySpinBox.setEnabled(False)
90
91 def onStartLoop(self):53 def onStartLoop(self):
92 """54 """
93 Go to the last slide.55 Trigger the slide controller to start to loop passing the delay
94 """56 """
95 if self.PreviewListWidget.rowCount() > 1:57 Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value())
96 self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
9758
98 def onStopLoop(self):59 def onStopLoop(self):
99 """60 """
100 Go to the last slide.61 Trigger the slide controller to stop the loop
101 """62 """
102 self.killTimer(self.timer_id)63 Receiver().send_message(u'%sslide_stop_loop' % self.prefix)
103
104 def timerEvent(self, event):
105 if event.timerId() == self.timer_id:
106 self.onSlideSelectedNext()
10764
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-07-04 05:52:30 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-08-24 17:43:15 +0000
@@ -22,7 +22,7 @@
2222
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon24from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon
25from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar25from openlp.plugins.images.lib.imagetoolbar import ImageToolbar
2626
27# We have to explicitly create separate classes for each plugin27# We have to explicitly create separate classes for each plugin
28# in order for DnD to the Service manager to work correctly.28# in order for DnD to the Service manager to work correctly.
@@ -54,7 +54,7 @@
54 # be instanced by the base MediaManagerItem54 # be instanced by the base MediaManagerItem
55 self.ListViewWithDnD_class = ImageListView55 self.ListViewWithDnD_class = ImageListView
56 self.ServiceItemIconName = u':/media/media_image.png'56 self.ServiceItemIconName = u':/media/media_image.png'
5757 self.servicePath = None
58 MediaManagerItem.__init__(self, parent, icon, title)58 MediaManagerItem.__init__(self, parent, icon, title)
59 #create and install our own slide controller toolbar59 #create and install our own slide controller toolbar
60 imageToolbar = ImageToolbar(self, True)60 imageToolbar = ImageToolbar(self, True)
@@ -63,21 +63,37 @@
63 def initialise(self):63 def initialise(self):
64 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)64 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
65 self.ListView.setIconSize(QtCore.QSize(88,50))65 self.ListView.setIconSize(QtCore.QSize(88,50))
66 self.servicePath = os.path.join(self.parent.config.get_data_path(), u'.thumbnails')
67 if os.path.exists(self.servicePath) == False:
68 os.mkdir(self.servicePath)
66 self.loadList(self.parent.config.load_list(self.ConfigSection))69 self.loadList(self.parent.config.load_list(self.ConfigSection))
6770
68 def onDeleteClick(self):71 def onDeleteClick(self):
69 item = self.ListView.currentItem()72 item = self.ListView.currentItem()
70 if item is not None:73 if item is not None:
74 try:
75 os.remove(os.path.join(self.servicePath, unicode(item.text())))
76 except:
77 #if not present do not worry
78 pass
71 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]79 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
72 row = self.ListView.row(item)80 row = self.ListView.row(item)
73 self.ListView.takeItem(row)81 self.ListView.takeItem(row)
74 self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())82 self.parent.config.set_list(self.ConfigSection, self.getFileList())
7583
76 def loadList(self, list):84 def loadList(self, list):
77 for file in list:85 for file in list:
78 (path, filename) = os.path.split(unicode(file))86 (path, filename) = os.path.split(unicode(file))
87 thumb = os.path.join(self.servicePath, filename)
88 if os.path.exists(thumb):
89 icon = buildIcon(thumb)
90 else:
91 icon = buildIcon(unicode(file))
92 pixmap = icon.pixmap(QtCore.QSize(88,50))
93 ext = os.path.splitext(thumb)[1].lower()
94 pixmap.save(thumb, ext[1:])
79 item_name = QtGui.QListWidgetItem(filename)95 item_name = QtGui.QListWidgetItem(filename)
80 item_name.setIcon(buildIcon(file))96 item_name.setIcon(icon)
81 item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))97 item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
82 self.ListView.addItem(item_name)98 self.ListView.addItem(item_name)
8399
84100
=== modified file 'openlp/plugins/remotes/remoteclient-cli.py'
--- openlp/plugins/remotes/remoteclient-cli.py 2009-08-12 16:29:00 +0000
+++ openlp/plugins/remotes/remoteclient-cli.py 2009-08-24 05:10:04 +0000
@@ -51,6 +51,8 @@
51 help="Action to be undertaken")51 help="Action to be undertaken")
52 parser.add_option("-m", "--message",52 parser.add_option("-m", "--message",
53 help="Message to be passed for the action")53 help="Message to be passed for the action")
54 parser.add_option("-n", "--slidenext",
55 help="Trigger the next slide")
5456
55 (options, args) = parser.parse_args()57 (options, args) = parser.parse_args()
56 if len(args) > 0:58 if len(args) > 0:
@@ -62,6 +64,11 @@
62 elif options.address is None:64 elif options.address is None:
63 parser.print_help()65 parser.print_help()
64 parser.error("IP address missing")66 parser.error("IP address missing")
67 elif options.slidenext is not None:
68 options.event = u'next_slide'
69 options.message = u''
70 text = format_message(options)
71 sendData(options, text)
65 else:72 else:
66 text = format_message(options)73 text = format_message(options)
67 sendData(options, text)74 sendData(options, text)
6875
=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py 2009-08-15 07:33:01 +0000
+++ openlp/plugins/remotes/remoteplugin.py 2009-08-24 05:10:04 +0000
@@ -22,7 +22,7 @@
2222
23from PyQt4 import QtNetwork, QtGui, QtCore23from PyQt4 import QtNetwork, QtGui, QtCore
2424
25from openlp.core.lib import Plugin, Event, EventType25from openlp.core.lib import Plugin, Event, EventType, Receiver
26from openlp.plugins.remotes.lib import RemoteTab26from openlp.plugins.remotes.lib import RemoteTab
2727
28class RemotesPlugin(Plugin):28class RemotesPlugin(Plugin):
@@ -59,7 +59,8 @@
5959
60 if event == u'alert':60 if event == u'alert':
61 self.event_manager.post_event(Event(u'RemotePlugin', EventType.TriggerAlert , unicode(datagram[pos + 1:])))61 self.event_manager.post_event(Event(u'RemotePlugin', EventType.TriggerAlert , unicode(datagram[pos + 1:])))
6262 if event == u'next_slide':
63 Receiver().send_message(u'live_slide_next')
6364
6465
6566