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 | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Review via email: mp+10608@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote : | # |
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 |
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.