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

Proposed by Tim Bentley
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
Reviewer Review Type Date Requested Status
Michael Gorven (community) Approve
Raoul Snyman Approve
Review via email: mp+6134@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Add ServicingItem and Preview/Live Code
Start to add Items to ServiceManager (unstable)
Add selection for preview and live (if Live)

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Just a note about making some things a little more Pythonic:

  28 frame = QtGui.QPixmap(self.width, self.height)
  29 self.renderer.set_paint_dest(frame)

  Could be written so:

  28 self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))

The usual style police ;-)

  39 answer=self.renderer.render_lines(main_text, footer_text)

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 *

review: Approve
lp:~trb143/openlp/servicing updated
439. By Raoul Snyman

Added images

440. By Raoul Snyman

Merged Jonathan Corwin's changes to the database migration script.

Revision history for this message
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

review: Approve
lp:~trb143/openlp/servicing updated
441. By Tim Bentley

Start adding serviceitem code and SlideController code.
Fix some Theme bugs as well

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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