Status: | Merged |
---|---|
Approved by: | Raoul Snyman |
Approved revision: | no longer in the revision history of the source branch. |
Merged at revision: | not available |
Proposed branch: | lp:~trb143/openlp/servicing |
Merge into: | lp:openlp |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~trb143/openlp/servicing |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Michael Gorven (community) | Approve | ||
Raoul Snyman | Approve | ||
Review via email:
|
Commit message
Description of the change
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Tim Bentley (trb143) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Raoul Snyman (raoul-snyman) wrote : | # |
Just a note about making some things a little more Pythonic:
28 frame = QtGui.QPixmap(
29 self.renderer.
Could be written so:
28 self.renderer.
The usual style police ;-)
39 answer=
You don't really need BOTH of these? Surely just one can be used? And I prefer the top one, as it adds less pollution to the local namespace (I've noticed this in other code too).
64 from PyQt4 import QtCore, QtGui
65 from PyQt4.QtCore import *
66 from PyQt4.QtGui import *
- 439. By Raoul Snyman
-
Added images
- 440. By Raoul Snyman
-
Merged Jonathan Corwin's changes to the database migration script.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Michael Gorven (mgorven) wrote : | # |
+ if type(icon) is QtGui.QIcon:
+ elif type(icon) is types.StringType or type(icon) is
types.UnicodeType:
I think the Right Way is isinstance(). Also, "basestring" matches both str and
unicode strings.
if isinstance(icon, QtGui.QIcon):
elif isinstance(icon, basestring):
review approve
- 441. By Tim Bentley
-
Start adding serviceitem code and SlideController code.
Fix some Theme bugs as well
Preview Diff
1 | === modified file 'openlp/core/lib/plugin.py' |
2 | --- openlp/core/lib/plugin.py 2009-04-25 06:11:15 +0000 |
3 | +++ openlp/core/lib/plugin.py 2009-05-02 18:56:27 +0000 |
4 | @@ -93,6 +93,7 @@ |
5 | self.theme_manager=plugin_helpers[u'theme'] |
6 | self.event_manager=plugin_helpers[u'event'] |
7 | self.render_manager=plugin_helpers[u'render'] |
8 | + self.service_manager=plugin_helpers[u'service'] |
9 | |
10 | def check_pre_conditions(self): |
11 | """ |
12 | |
13 | === modified file 'openlp/core/lib/rendermanager.py' |
14 | --- openlp/core/lib/rendermanager.py 2009-05-01 17:36:51 +0000 |
15 | +++ openlp/core/lib/rendermanager.py 2009-05-02 11:16:08 +0000 |
16 | @@ -76,7 +76,6 @@ |
17 | def generate_preview(self, themedata): |
18 | self.calculate_default(QtCore.QSize(800,600)) |
19 | self.renderer.set_theme(themedata) |
20 | - |
21 | self.build_text_rectangle(themedata) |
22 | |
23 | frame = QtGui.QPixmap(self.width, self.height) |
24 | @@ -96,14 +95,19 @@ |
25 | |
26 | def format_slide(self, words, footer): |
27 | self.calculate_default(QtCore.QSize(800,600)) |
28 | + frame = QtGui.QPixmap(self.width, self.height) |
29 | + self.renderer.set_paint_dest(frame) |
30 | return self.renderer.format_slide(words, footer) |
31 | |
32 | def generate_slide(self,main_text, footer_text, preview=True): |
33 | if preview == True: |
34 | self.calculate_default(QtCore.QSize(800,600)) |
35 | |
36 | + frame = QtGui.QPixmap(self.width, self.height) |
37 | + self.renderer.set_paint_dest(frame) |
38 | + |
39 | answer=self.renderer.render_lines(main_text, footer_text) |
40 | - return self.frame |
41 | + return frame |
42 | |
43 | def calculate_default(self, screen): |
44 | self.width = screen.width() |
45 | |
46 | === modified file 'openlp/core/lib/serviceitem.py' |
47 | --- openlp/core/lib/serviceitem.py 2009-03-04 21:54:00 +0000 |
48 | +++ openlp/core/lib/serviceitem.py 2009-05-02 18:56:27 +0000 |
49 | @@ -3,7 +3,7 @@ |
50 | """ |
51 | OpenLP - Open Source Lyrics Projection |
52 | Copyright (c) 2008 Raoul Snyman |
53 | -Portions copyright (c) 2008 Martin Thompson, Tim Bentley |
54 | +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley |
55 | |
56 | This program is free software; you can redistribute it and/or modify it under |
57 | the terms of the GNU General Public License as published by the Free Software |
58 | @@ -17,31 +17,68 @@ |
59 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
60 | Place, Suite 330, Boston, MA 02111-1307 USA |
61 | """ |
62 | +import logging |
63 | +import types |
64 | +from PyQt4 import QtCore, QtGui |
65 | from PyQt4.QtCore import * |
66 | from PyQt4.QtGui import * |
67 | |
68 | -class ServiceItem(QAbstractItemModel): |
69 | +class ServiceItem(): |
70 | """ |
71 | The service item is a base class for the plugins to use to interact with |
72 | the service manager, the slide controller, and the projection screen |
73 | compositor. |
74 | """ |
75 | + global log |
76 | + log=logging.getLogger(u'ServiceItem') |
77 | + log.info(u'Service Item created') |
78 | |
79 | def __init__(self, hostplugin): |
80 | """ |
81 | Init Method |
82 | """ |
83 | - self.plugin=hostplugin |
84 | - self.shortname=hostplugin.name |
85 | - self.items=[] |
86 | - self.iconic_representation=None |
87 | - |
88 | + self.plugin = hostplugin |
89 | + self.shortname = hostplugin.name |
90 | + self.title = u'' |
91 | + self.items = [] |
92 | + self.iconic_representation = None |
93 | + self.raw_slides = None |
94 | + self.format_slides = [] |
95 | + self.frames = [] |
96 | + self.raw_footer = None |
97 | + self.theme = None |
98 | + log.debug(u'Service item created for %s', self.shortname) |
99 | + |
100 | + def addIcon(self, icon): |
101 | + ButtonIcon = None |
102 | + if type(icon) is QtGui.QIcon: |
103 | + ButtonIcon = icon |
104 | + elif type(icon) is types.StringType or type(icon) is types.UnicodeType: |
105 | + ButtonIcon = QtGui.QIcon() |
106 | + if icon.startswith(u':/'): |
107 | + ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, |
108 | + QtGui.QIcon.Off) |
109 | + else: |
110 | + ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), |
111 | + QtGui.QIcon.Normal, QtGui.QIcon.Off) |
112 | + self.iconic_representation = ButtonIcon |
113 | + |
114 | def render(self): |
115 | """ |
116 | The render method is what the plugin uses to render it's meda to the |
117 | screen. |
118 | """ |
119 | - pass |
120 | + log.debug(u'Render called') |
121 | + if self.theme == None: |
122 | + self.render_manager.set_override_theme(None) |
123 | + else: |
124 | + self.render_manager.set_override_theme(self.theme) |
125 | + |
126 | + for slide in self.raw_slides: |
127 | + self.format_slides.append(self.render_manager.format_slide(slide, False)) |
128 | + for slide in self.format_slides: |
129 | + |
130 | + self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False)) |
131 | |
132 | def get_parent_node(self): |
133 | """ |
134 | @@ -64,7 +101,7 @@ |
135 | """ |
136 | pass |
137 | |
138 | - def set_from_plugin(self, data): |
139 | + def set_from_plugin(self): |
140 | """ |
141 | Takes data from the plugin media chooser |
142 | """ |
143 | |
144 | === modified file 'openlp/core/ui/maindisplay.py' |
145 | --- openlp/core/ui/maindisplay.py 2009-05-01 11:50:09 +0000 |
146 | +++ openlp/core/ui/maindisplay.py 2009-05-03 07:20:15 +0000 |
147 | @@ -45,14 +45,14 @@ |
148 | screen = scrn |
149 | break |
150 | self.setGeometry(screen['size']) |
151 | + self.display.setGeometry(screen['size']) |
152 | if not screen['primary']: |
153 | self.showFullScreen() |
154 | else: |
155 | - self.hide() |
156 | + self.showMinimized() |
157 | |
158 | def frameView(self, frame): |
159 | - self.display.setGeometry(0, 0, imagesize.width(), imagesize.height()) |
160 | - self.display.setPixmap(QtGui.QPixmap(frame)) |
161 | + self.display.setPixmap(frame) |
162 | |
163 | def kill(self): |
164 | pass |
165 | |
166 | === modified file 'openlp/core/ui/mainwindow.py' |
167 | --- openlp/core/ui/mainwindow.py 2009-05-01 22:26:43 +0000 |
168 | +++ openlp/core/ui/mainwindow.py 2009-05-03 07:20:15 +0000 |
169 | @@ -60,8 +60,9 @@ |
170 | self.plugin_helpers[u'preview'] = self.PreviewController |
171 | self.plugin_helpers[u'live'] = self.LiveController |
172 | self.plugin_helpers[u'event'] = self.EventManager |
173 | - self.plugin_helpers[u'theme'] = self.ThemeManagerContents # Theme manger |
174 | + self.plugin_helpers[u'theme'] = self.ThemeManagerContents |
175 | self.plugin_helpers[u'render'] = self.RenderManager |
176 | + self.plugin_helpers[u'service'] = self.ServiceManagerContents |
177 | |
178 | self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager) |
179 | # hook methods have to happen after find_plugins. Find plugins needs the controllers |
180 | @@ -94,6 +95,12 @@ |
181 | self.ThemeManagerContents.serviceManager = self.ServiceManagerContents |
182 | self.ThemeManagerContents.loadThemes() |
183 | |
184 | + # Initialise SlideControllers |
185 | + log.info(u'Set Up SlideControllers') |
186 | + self.PreviewController.isLive = False |
187 | + self.LiveController.isLive = True |
188 | + self.LiveController.mainDisplay = self.main_display |
189 | + |
190 | def setupUi(self): |
191 | self.main_window.setObjectName(u'main_window') |
192 | self.main_window.resize(1087, 847) |
193 | |
194 | === modified file 'openlp/core/ui/servicemanager.py' |
195 | --- openlp/core/ui/servicemanager.py 2009-04-30 21:02:28 +0000 |
196 | +++ openlp/core/ui/servicemanager.py 2009-05-02 18:56:27 +0000 |
197 | @@ -46,20 +46,25 @@ |
198 | QAbstractItemModel.__init__(self) |
199 | self.items=[] |
200 | log.info("Starting") |
201 | + |
202 | def columnCount(self, parent): |
203 | return 1; # always only a single column (for now) |
204 | + |
205 | def rowCount(self, parent): |
206 | return len(self.items) |
207 | + |
208 | def insertRow(self, row, service_item): |
209 | -# self.beginInsertRows(QModelIndex(),row,row) |
210 | - log.info("insert row %d:%s"%(row,service_item)) |
211 | + self.beginInsertRows(QModelIndex(),row,row) |
212 | + log.info("insert row %s:%s" % (row,service_item)) |
213 | self.items.insert(row, service_item) |
214 | log.info("Items: %s" % self.items) |
215 | -# self.endInsertRows() |
216 | + self.endInsertRows() |
217 | + |
218 | def removeRow(self, row): |
219 | self.beginRemoveRows(QModelIndex(), row,row) |
220 | self.items.pop(row) |
221 | self.endRemoveRows() |
222 | + |
223 | def addRow(self, item): |
224 | self.insertRow(len(self.items), item) |
225 | |
226 | @@ -68,16 +73,18 @@ |
227 | |
228 | def parent(self, index=QModelIndex()): |
229 | return QModelIndex() # no children as yet |
230 | + |
231 | def data(self, index, role): |
232 | """ |
233 | Called by the service manager to draw us in the service window |
234 | """ |
235 | + log.debug(u'data %s %d', index, role) |
236 | row=index.row() |
237 | if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row! |
238 | return QVariant() |
239 | item=self.items[row] |
240 | if role==Qt.DisplayRole: |
241 | - retval= item.pluginname + ":" + item.shortname |
242 | + retval= item.title + u':' + item.shortname |
243 | elif role == Qt.DecorationRole: |
244 | retval = item.iconic_representation |
245 | elif role == Qt.ToolTipRole: |
246 | @@ -139,6 +146,7 @@ |
247 | self.service_data=ServiceData() |
248 | self.TreeView.setModel(self.service_data) |
249 | self.Layout.addWidget(self.TreeView) |
250 | + |
251 | QtCore.QObject.connect(self.ThemeComboBox, |
252 | QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected) |
253 | |
254 | @@ -159,6 +167,7 @@ |
255 | # if currently selected is of correct type, add it to it |
256 | log.info("row:%d"%row) |
257 | selected_item=self.service_data.item(row) |
258 | + |
259 | if type(selected_item) == type(item): |
260 | log.info("Add to existing item") |
261 | selected_item.add(item) |
262 | |
263 | === modified file 'openlp/core/ui/slidecontroller.py' |
264 | --- openlp/core/ui/slidecontroller.py 2009-04-30 21:02:28 +0000 |
265 | +++ openlp/core/ui/slidecontroller.py 2009-05-03 07:20:15 +0000 |
266 | @@ -17,11 +17,92 @@ |
267 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
268 | Place, Suite 330, Boston, MA 02111-1307 USA |
269 | """ |
270 | +import logging |
271 | import os |
272 | -from time import sleep |
273 | + |
274 | from PyQt4 import QtCore, QtGui |
275 | +from PyQt4.QtCore import * |
276 | +from PyQt4.QtGui import * |
277 | + |
278 | +class SlideData(QAbstractListModel): |
279 | + """ |
280 | + Tree of items for an order of Theme. |
281 | + Includes methods for reading and writing the contents to an OOS file |
282 | + Root contains a list of ThemeItems |
283 | + """ |
284 | + global log |
285 | + log=logging.getLogger(u'SlideData') |
286 | + |
287 | + def __init__(self): |
288 | + QAbstractListModel.__init__(self) |
289 | + self.items=[] |
290 | + self.rowheight=50 |
291 | + self.maximagewidth=self.rowheight*16/9.0; |
292 | + log.info(u'Starting') |
293 | + |
294 | + def clearItems(self): |
295 | + self.items=[] |
296 | + |
297 | + def columnCount(self, parent): |
298 | + return 1 |
299 | + |
300 | + def rowCount(self, parent): |
301 | + return len(self.items) |
302 | + |
303 | + def insertRow(self, row, frame): |
304 | + self.beginInsertRows(QModelIndex(),row,row) |
305 | + log.info(u'insert row %d' % row) |
306 | + # create a preview image |
307 | + frame1 = frame.scaled(QtCore.QSize(350,260)) |
308 | + self.items.insert(row,(frame1)) |
309 | + log.info(u'Items: %s' % self.items) |
310 | + self.endInsertRows() |
311 | + |
312 | + def removeRow(self, row): |
313 | + self.beginRemoveRows(QModelIndex(), row,row) |
314 | + self.items.pop(row) |
315 | + self.endRemoveRows() |
316 | + |
317 | + def addRow(self, frame): |
318 | + self.insertRow(len(self.items), frame) |
319 | + |
320 | + def data(self, index, role): |
321 | + row=index.row() |
322 | + if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row! |
323 | + return QVariant() |
324 | +# if role==Qt.DisplayRole: |
325 | +# retval= self.items[row][1] |
326 | + if role == Qt.DecorationRole: |
327 | + retval= self.items[row]#[0] |
328 | + else: |
329 | + retval= QVariant() |
330 | +# log.info("Returning"+ str(retval)) |
331 | + if type(retval) is not type(QVariant): |
332 | + return QVariant(retval) |
333 | + else: |
334 | + return retval |
335 | + |
336 | + def __iter__(self): |
337 | + for i in self.items: |
338 | + yield i |
339 | + |
340 | + def getValue(self, index): |
341 | + row = index.row() |
342 | + return self.items[row] |
343 | + |
344 | + def getItem(self, row): |
345 | + log.info(u'Get Item:%d -> %s' %(row, str(self.items))) |
346 | + return self.items[row] |
347 | + |
348 | + def getList(self): |
349 | + filelist = [item[3] for item in self.items]; |
350 | + return filelist |
351 | + |
352 | |
353 | class SlideController(QtGui.QWidget): |
354 | + global log |
355 | + log=logging.getLogger(u'SlideController') |
356 | + |
357 | def __init__(self, control_splitter): |
358 | QtGui.QWidget.__init__(self) |
359 | self.Pane = QtGui.QWidget(control_splitter) |
360 | @@ -33,18 +114,16 @@ |
361 | self.PaneLayout.setSpacing(50) |
362 | self.PaneLayout.setMargin(0) |
363 | |
364 | - #self.VerseListView = QtGui.QListWidget(customEditDialog) |
365 | - #self.VerseListView.setObjectName("VerseListView") |
366 | - #self.horizontalLayout_4.addWidget(self.VerseListView) |
367 | - |
368 | self.Controller = QtGui.QScrollArea(self.Splitter) |
369 | self.Controller.setWidgetResizable(True) |
370 | |
371 | - self.ControllerContents = QtGui.QWidget(self.Controller) |
372 | - self.ControllerContents.setGeometry(QtCore.QRect(0, 0, 228, 536)) |
373 | + self.PreviewListView = QtGui.QListView(self.Splitter) |
374 | + self.PreviewListView.setAlternatingRowColors(True) |
375 | + self.PreviewListData = SlideData() |
376 | + self.PreviewListView.setModel(self.PreviewListData) |
377 | self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536)) |
378 | |
379 | - self.Controller.setWidget(self.ControllerContents) |
380 | + self.Controller.setWidget(self.PreviewListView) |
381 | |
382 | self.SlidePreview = QtGui.QLabel(self.Splitter) |
383 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) |
384 | @@ -59,9 +138,25 @@ |
385 | self.SlidePreview.setScaledContents(True) |
386 | self.SlidePreview.setObjectName("SlidePreview") |
387 | |
388 | + QtCore.QObject.connect(self.PreviewListView, |
389 | + QtCore.SIGNAL("clicked(QModelIndex)"), self.onSlideSelected) |
390 | + |
391 | + |
392 | + def onSlideSelected(self, index): |
393 | + frame = self.PreviewListData.getValue(index) |
394 | + self.previewFrame(frame) |
395 | + |
396 | def previewFrame(self, frame): |
397 | self.SlidePreview.setPixmap(frame) |
398 | - |
399 | - imageLabel = QtGui.QLabel() |
400 | - imageLabel.setPixmap(frame) |
401 | - self.Controller.setWidget(imageLabel) |
402 | + if self.isLive: |
403 | + self.mainDisplay.frameView(frame) |
404 | + |
405 | + def addServiceItem(self, serviceitem): |
406 | + self.serviceitem = serviceitem |
407 | + self.serviceitem.render() |
408 | + self.PreviewListData.clearItems() |
409 | + for frame in self.serviceitem.frames: |
410 | + self.PreviewListData.addRow(frame) |
411 | + |
412 | + def render(self): |
413 | + pass |
414 | |
415 | === modified file 'openlp/core/ui/thememanager.py' |
416 | --- openlp/core/ui/thememanager.py 2009-05-01 22:26:43 +0000 |
417 | +++ openlp/core/ui/thememanager.py 2009-05-02 18:56:27 +0000 |
418 | @@ -230,7 +230,17 @@ |
419 | def getThemeData(self, themename): |
420 | log.debug(u'getthemedata for theme %s', themename) |
421 | xml_file = os.path.join(self.path, str(themename), str(themename) + u'.xml') |
422 | - xml = fileToXML(xml_file) |
423 | + try: |
424 | + xml = fileToXML(xml_file) |
425 | + except: |
426 | + newtheme = ThemeXML() |
427 | + newtheme.new_document(u'New Theme') |
428 | + newtheme.add_background_solid(str(u'#000000')) |
429 | + newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(30), u'False') |
430 | + newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(12), u'False', u'footer') |
431 | + newtheme.add_display(u'False', str(u'#FFFFFF'), u'False', str(u'#FFFFFF'), |
432 | + str(0), str(0), str(0)) |
433 | + xml = newtheme.extract_xml() |
434 | theme = ThemeXML() |
435 | theme.parse(xml) |
436 | return theme |
437 | |
438 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' |
439 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-04-29 19:07:13 +0000 |
440 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-05-02 18:56:27 +0000 |
441 | @@ -23,7 +23,7 @@ |
442 | |
443 | from openlp.core import translate |
444 | from openlp.core.lib import MediaManagerItem, Receiver |
445 | -from openlp.core.resources import * |
446 | +from openlp.core.lib import ServiceItem |
447 | |
448 | from openlp.plugins.bibles.forms import BibleImportForm |
449 | from openlp.plugins.bibles.lib import TextListData |
450 | @@ -270,12 +270,6 @@ |
451 | self.bibleimportform.exec_() |
452 | pass |
453 | |
454 | - def onBibleLiveClick(self): |
455 | - pass |
456 | - |
457 | - def onBibleAddClick(self): |
458 | - pass |
459 | - |
460 | def onAdvancedFromVerse(self): |
461 | frm = self.AdvancedFromVerse.currentText() |
462 | self.adjustComboBox(frm, self.verses, self.AdvancedToVerse) |
463 | @@ -325,12 +319,33 @@ |
464 | if not self.search_results == None: |
465 | self.displayResults(bible) |
466 | |
467 | + def onBibleLiveClick(self): |
468 | + service_item = ServiceItem(self.parent) |
469 | + service_item.addIcon( ":/media/media_verse.png") |
470 | + service_item.render_manager = self.parent.render_manager |
471 | + self.generateSlideData(service_item) |
472 | + self.parent.live_controller.addServiceItem(service_item) |
473 | + |
474 | + def onBibleAddClick(self): |
475 | + service_item = ServiceItem(self.parent) |
476 | + service_item.addIcon( ":/media/media_verse.png") |
477 | + service_item.render_manager = self.parent.render_manager |
478 | + self.generateSlideData(service_item) |
479 | + self.parent.service_manager.addServiceItem(service_item) |
480 | + |
481 | def onBiblePreviewClick(self): |
482 | + service_item = ServiceItem(self.parent) |
483 | + service_item.addIcon( ":/media/media_verse.png") |
484 | + service_item.render_manager = self.parent.render_manager |
485 | + self.generateSlideData(service_item) |
486 | + self.parent.preview_controller.addServiceItem(service_item) |
487 | + |
488 | + def generateSlideData(self, service_item): |
489 | log.debug(u'Bible Preview Button pressed') |
490 | items = self.BibleListView.selectedIndexes() |
491 | old_chapter = '' |
492 | - main_lines=[] |
493 | - footer_lines = [] |
494 | + raw_slides=[] |
495 | + raw_footer = [] |
496 | for item in items: |
497 | text = self.BibleListData.getValue(item) |
498 | verse = text[:text.find("(")] |
499 | @@ -351,13 +366,15 @@ |
500 | else: |
501 | loc = self.formatVerse(old_chapter, chapter, verse, u'', u'') |
502 | old_chapter = chapter |
503 | - main_lines.append(loc + u' '+text) |
504 | - if len(footer_lines) <= 1: |
505 | - footer_lines.append(book) |
506 | - |
507 | - self.parent.render_manager.set_override_theme(None) |
508 | - frame=self.parent.render_manager.generate_slide(main_lines, footer_lines) |
509 | - self.parent.preview_controller.previewFrame(frame) |
510 | + raw_slides.append(loc + u' '+text) |
511 | + service_item.title = book + u' ' + loc |
512 | + if len(raw_footer) <= 1: |
513 | + raw_footer.append(book) |
514 | + |
515 | + service_item.theme = None |
516 | + |
517 | + service_item.raw_slides = raw_slides |
518 | + service_item.raw_footer = raw_footer |
519 | |
520 | def formatVerse(self, old_chapter, chapter, verse, opening, closing): |
521 | loc = opening |
522 | |
523 | === modified file 'openlp/plugins/custom/lib/mediaitem.py' |
524 | --- openlp/plugins/custom/lib/mediaitem.py 2009-04-30 21:02:28 +0000 |
525 | +++ openlp/plugins/custom/lib/mediaitem.py 2009-05-02 18:56:27 +0000 |
526 | @@ -24,6 +24,7 @@ |
527 | from openlp.core import translate |
528 | from openlp.core.lib import MediaManagerItem |
529 | from openlp.core.lib import SongXMLParser |
530 | +from openlp.core.lib import ServiceItem |
531 | |
532 | from openlp.plugins.custom.lib import TextListData |
533 | |
534 | @@ -37,6 +38,7 @@ |
535 | |
536 | def __init__(self, parent, icon, title): |
537 | MediaManagerItem.__init__(self, parent, icon, title) |
538 | + self.parent = parent |
539 | |
540 | def setupUi(self): |
541 | # Add a toolbar |
542 | @@ -134,7 +136,7 @@ |
543 | translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) |
544 | self.CustomListView.addAction(self.contextMenuAction( |
545 | self.CustomListView, ':/system/system_add.png', |
546 | - translate('CustomMediaItem',u'&Add to Service'), self.onCustomEditClick)) |
547 | + translate('CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) |
548 | |
549 | # def retranslateUi(self): |
550 | # self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear')) |
551 | @@ -185,9 +187,30 @@ |
552 | self.CustomListData.deleteRow(index) |
553 | |
554 | def onCustomPreviewClick(self): |
555 | + service_item = ServiceItem(self.parent) |
556 | + service_item.addIcon( ":/media/media_song.png") |
557 | + service_item.render_manager = self.parent.render_manager |
558 | + self.generateSlideData(service_item) |
559 | + self.parent.preview_controller.addServiceItem(service_item) |
560 | + |
561 | + def onCustomLiveClick(self): |
562 | + service_item = ServiceItem(self.parent) |
563 | + service_item.addIcon( ":/media/media_song.png") |
564 | + service_item.render_manager = self.parent.render_manager |
565 | + self.generateSlideData(service_item) |
566 | + self.parent.live_controller.addServiceItem(service_item) |
567 | + |
568 | + def onCustomAddClick(self): |
569 | + service_item = ServiceItem(self.parent) |
570 | + service_item.addIcon( ":/media/media_song.png") |
571 | + service_item.render_manager = self.parent.render_manager |
572 | + self.generateSlideData(service_item) |
573 | + self.parent.service_manager.addServiceItem(service_item) |
574 | + |
575 | + def generateSlideData(self, service_item): |
576 | indexes = self.CustomListView.selectedIndexes() |
577 | - main_lines=[] |
578 | - footer_lines = [] |
579 | + raw_slides =[] |
580 | + raw_footer = [] |
581 | slide = None |
582 | theme = None |
583 | for index in indexes: |
584 | @@ -196,25 +219,13 @@ |
585 | title = customSlide.title |
586 | credit = customSlide.credits |
587 | theme = customSlide.theme_name |
588 | - if len(theme) == 0 or theme == None: |
589 | - self.parent.render_manager.set_override_theme(None) |
590 | - else: |
591 | - self.parent.render_manager.set_override_theme(theme) |
592 | - |
593 | + if len(theme) is not 0 : |
594 | + service_item.theme = theme |
595 | songXML=SongXMLParser(customSlide.text) |
596 | verseList = songXML.get_verses() |
597 | for verse in verseList: |
598 | - slide = self.parent.render_manager.format_slide(verse[1], False) |
599 | - print verse |
600 | - print slide |
601 | - |
602 | - footer_lines.append(title + u' '+ credit) |
603 | - if slide is not None: |
604 | - frame=self.parent.render_manager.generate_slide(slide, footer_lines, False) |
605 | - self.parent.preview_controller.previewFrame(frame) |
606 | - |
607 | - def onCustomLiveClick(self): |
608 | - pass |
609 | - |
610 | - def onCustomAddClick(self): |
611 | - pass |
612 | + raw_slides.append(verse[1]) |
613 | + raw_footer.append(title + u' '+ credit) |
614 | + service_item.title = title |
615 | + service_item.raw_slides = raw_slides |
616 | + service_item.raw_footer = raw_footer |
Add ServicingItem and Preview/Live Code
Start to add Items to ServiceManager (unstable)
Add selection for preview and live (if Live)