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
=== modified file 'openlp/core/lib/plugin.py'
--- openlp/core/lib/plugin.py 2009-04-25 06:11:15 +0000
+++ openlp/core/lib/plugin.py 2009-05-02 18:56:27 +0000
@@ -93,6 +93,7 @@
93 self.theme_manager=plugin_helpers[u'theme']93 self.theme_manager=plugin_helpers[u'theme']
94 self.event_manager=plugin_helpers[u'event']94 self.event_manager=plugin_helpers[u'event']
95 self.render_manager=plugin_helpers[u'render']95 self.render_manager=plugin_helpers[u'render']
96 self.service_manager=plugin_helpers[u'service']
9697
97 def check_pre_conditions(self):98 def check_pre_conditions(self):
98 """99 """
99100
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-05-01 17:36:51 +0000
+++ openlp/core/lib/rendermanager.py 2009-05-02 11:16:08 +0000
@@ -76,7 +76,6 @@
76 def generate_preview(self, themedata):76 def generate_preview(self, themedata):
77 self.calculate_default(QtCore.QSize(800,600))77 self.calculate_default(QtCore.QSize(800,600))
78 self.renderer.set_theme(themedata)78 self.renderer.set_theme(themedata)
79
80 self.build_text_rectangle(themedata)79 self.build_text_rectangle(themedata)
8180
82 frame = QtGui.QPixmap(self.width, self.height)81 frame = QtGui.QPixmap(self.width, self.height)
@@ -96,14 +95,19 @@
9695
97 def format_slide(self, words, footer):96 def format_slide(self, words, footer):
98 self.calculate_default(QtCore.QSize(800,600))97 self.calculate_default(QtCore.QSize(800,600))
98 frame = QtGui.QPixmap(self.width, self.height)
99 self.renderer.set_paint_dest(frame)
99 return self.renderer.format_slide(words, footer)100 return self.renderer.format_slide(words, footer)
100101
101 def generate_slide(self,main_text, footer_text, preview=True):102 def generate_slide(self,main_text, footer_text, preview=True):
102 if preview == True:103 if preview == True:
103 self.calculate_default(QtCore.QSize(800,600))104 self.calculate_default(QtCore.QSize(800,600))
104105
106 frame = QtGui.QPixmap(self.width, self.height)
107 self.renderer.set_paint_dest(frame)
108
105 answer=self.renderer.render_lines(main_text, footer_text)109 answer=self.renderer.render_lines(main_text, footer_text)
106 return self.frame110 return frame
107111
108 def calculate_default(self, screen):112 def calculate_default(self, screen):
109 self.width = screen.width()113 self.width = screen.width()
110114
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-03-04 21:54:00 +0000
+++ openlp/core/lib/serviceitem.py 2009-05-02 18:56:27 +0000
@@ -3,7 +3,7 @@
3"""3"""
4OpenLP - Open Source Lyrics Projection4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 Raoul Snyman5Copyright (c) 2008 Raoul Snyman
6Portions copyright (c) 2008 Martin Thompson, Tim Bentley6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
77
8This program is free software; you can redistribute it and/or modify it under8This program is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free Software9the terms of the GNU General Public License as published by the Free Software
@@ -17,31 +17,68 @@
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging
21import types
22from PyQt4 import QtCore, QtGui
20from PyQt4.QtCore import *23from PyQt4.QtCore import *
21from PyQt4.QtGui import *24from PyQt4.QtGui import *
2225
23class ServiceItem(QAbstractItemModel):26class ServiceItem():
24 """27 """
25 The service item is a base class for the plugins to use to interact with28 The service item is a base class for the plugins to use to interact with
26 the service manager, the slide controller, and the projection screen29 the service manager, the slide controller, and the projection screen
27 compositor.30 compositor.
28 """31 """
32 global log
33 log=logging.getLogger(u'ServiceItem')
34 log.info(u'Service Item created')
2935
30 def __init__(self, hostplugin):36 def __init__(self, hostplugin):
31 """37 """
32 Init Method38 Init Method
33 """39 """
34 self.plugin=hostplugin40 self.plugin = hostplugin
35 self.shortname=hostplugin.name41 self.shortname = hostplugin.name
36 self.items=[]42 self.title = u''
37 self.iconic_representation=None43 self.items = []
38 44 self.iconic_representation = None
45 self.raw_slides = None
46 self.format_slides = []
47 self.frames = []
48 self.raw_footer = None
49 self.theme = None
50 log.debug(u'Service item created for %s', self.shortname)
51
52 def addIcon(self, icon):
53 ButtonIcon = None
54 if type(icon) is QtGui.QIcon:
55 ButtonIcon = icon
56 elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
57 ButtonIcon = QtGui.QIcon()
58 if icon.startswith(u':/'):
59 ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
60 QtGui.QIcon.Off)
61 else:
62 ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
63 QtGui.QIcon.Normal, QtGui.QIcon.Off)
64 self.iconic_representation = ButtonIcon
65
39 def render(self):66 def render(self):
40 """67 """
41 The render method is what the plugin uses to render it's meda to the68 The render method is what the plugin uses to render it's meda to the
42 screen.69 screen.
43 """70 """
44 pass71 log.debug(u'Render called')
72 if self.theme == None:
73 self.render_manager.set_override_theme(None)
74 else:
75 self.render_manager.set_override_theme(self.theme)
76
77 for slide in self.raw_slides:
78 self.format_slides.append(self.render_manager.format_slide(slide, False))
79 for slide in self.format_slides:
80
81 self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
4582
46 def get_parent_node(self):83 def get_parent_node(self):
47 """84 """
@@ -64,7 +101,7 @@
64 """101 """
65 pass102 pass
66103
67 def set_from_plugin(self, data):104 def set_from_plugin(self):
68 """105 """
69 Takes data from the plugin media chooser106 Takes data from the plugin media chooser
70 """107 """
71108
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py 2009-05-01 11:50:09 +0000
+++ openlp/core/ui/maindisplay.py 2009-05-03 07:20:15 +0000
@@ -45,14 +45,14 @@
45 screen = scrn45 screen = scrn
46 break46 break
47 self.setGeometry(screen['size'])47 self.setGeometry(screen['size'])
48 self.display.setGeometry(screen['size'])
48 if not screen['primary']:49 if not screen['primary']:
49 self.showFullScreen()50 self.showFullScreen()
50 else:51 else:
51 self.hide()52 self.showMinimized()
5253
53 def frameView(self, frame):54 def frameView(self, frame):
54 self.display.setGeometry(0, 0, imagesize.width(), imagesize.height())55 self.display.setPixmap(frame)
55 self.display.setPixmap(QtGui.QPixmap(frame))
5656
57 def kill(self):57 def kill(self):
58 pass58 pass
5959
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-05-01 22:26:43 +0000
+++ openlp/core/ui/mainwindow.py 2009-05-03 07:20:15 +0000
@@ -60,8 +60,9 @@
60 self.plugin_helpers[u'preview'] = self.PreviewController60 self.plugin_helpers[u'preview'] = self.PreviewController
61 self.plugin_helpers[u'live'] = self.LiveController61 self.plugin_helpers[u'live'] = self.LiveController
62 self.plugin_helpers[u'event'] = self.EventManager62 self.plugin_helpers[u'event'] = self.EventManager
63 self.plugin_helpers[u'theme'] = self.ThemeManagerContents # Theme manger63 self.plugin_helpers[u'theme'] = self.ThemeManagerContents
64 self.plugin_helpers[u'render'] = self.RenderManager64 self.plugin_helpers[u'render'] = self.RenderManager
65 self.plugin_helpers[u'service'] = self.ServiceManagerContents
6566
66 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)67 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)
67 # hook methods have to happen after find_plugins. Find plugins needs the controllers68 # hook methods have to happen after find_plugins. Find plugins needs the controllers
@@ -94,6 +95,12 @@
94 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents95 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
95 self.ThemeManagerContents.loadThemes()96 self.ThemeManagerContents.loadThemes()
9697
98 # Initialise SlideControllers
99 log.info(u'Set Up SlideControllers')
100 self.PreviewController.isLive = False
101 self.LiveController.isLive = True
102 self.LiveController.mainDisplay = self.main_display
103
97 def setupUi(self):104 def setupUi(self):
98 self.main_window.setObjectName(u'main_window')105 self.main_window.setObjectName(u'main_window')
99 self.main_window.resize(1087, 847)106 self.main_window.resize(1087, 847)
100107
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-04-30 21:02:28 +0000
+++ openlp/core/ui/servicemanager.py 2009-05-02 18:56:27 +0000
@@ -46,20 +46,25 @@
46 QAbstractItemModel.__init__(self)46 QAbstractItemModel.__init__(self)
47 self.items=[]47 self.items=[]
48 log.info("Starting")48 log.info("Starting")
49
49 def columnCount(self, parent):50 def columnCount(self, parent):
50 return 1; # always only a single column (for now)51 return 1; # always only a single column (for now)
52
51 def rowCount(self, parent):53 def rowCount(self, parent):
52 return len(self.items)54 return len(self.items)
55
53 def insertRow(self, row, service_item):56 def insertRow(self, row, service_item):
54# self.beginInsertRows(QModelIndex(),row,row)57 self.beginInsertRows(QModelIndex(),row,row)
55 log.info("insert row %d:%s"%(row,service_item))58 log.info("insert row %s:%s" % (row,service_item))
56 self.items.insert(row, service_item)59 self.items.insert(row, service_item)
57 log.info("Items: %s" % self.items)60 log.info("Items: %s" % self.items)
58# self.endInsertRows()61 self.endInsertRows()
62
59 def removeRow(self, row):63 def removeRow(self, row):
60 self.beginRemoveRows(QModelIndex(), row,row)64 self.beginRemoveRows(QModelIndex(), row,row)
61 self.items.pop(row)65 self.items.pop(row)
62 self.endRemoveRows()66 self.endRemoveRows()
67
63 def addRow(self, item):68 def addRow(self, item):
64 self.insertRow(len(self.items), item)69 self.insertRow(len(self.items), item)
6570
@@ -68,16 +73,18 @@
6873
69 def parent(self, index=QModelIndex()):74 def parent(self, index=QModelIndex()):
70 return QModelIndex() # no children as yet75 return QModelIndex() # no children as yet
76
71 def data(self, index, role):77 def data(self, index, role):
72 """78 """
73 Called by the service manager to draw us in the service window79 Called by the service manager to draw us in the service window
74 """80 """
81 log.debug(u'data %s %d', index, role)
75 row=index.row()82 row=index.row()
76 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!83 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
77 return QVariant()84 return QVariant()
78 item=self.items[row]85 item=self.items[row]
79 if role==Qt.DisplayRole:86 if role==Qt.DisplayRole:
80 retval= item.pluginname + ":" + item.shortname87 retval= item.title + u':' + item.shortname
81 elif role == Qt.DecorationRole:88 elif role == Qt.DecorationRole:
82 retval = item.iconic_representation89 retval = item.iconic_representation
83 elif role == Qt.ToolTipRole:90 elif role == Qt.ToolTipRole:
@@ -139,6 +146,7 @@
139 self.service_data=ServiceData()146 self.service_data=ServiceData()
140 self.TreeView.setModel(self.service_data)147 self.TreeView.setModel(self.service_data)
141 self.Layout.addWidget(self.TreeView)148 self.Layout.addWidget(self.TreeView)
149
142 QtCore.QObject.connect(self.ThemeComboBox,150 QtCore.QObject.connect(self.ThemeComboBox,
143 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)151 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
144152
@@ -159,6 +167,7 @@
159 # if currently selected is of correct type, add it to it167 # if currently selected is of correct type, add it to it
160 log.info("row:%d"%row)168 log.info("row:%d"%row)
161 selected_item=self.service_data.item(row)169 selected_item=self.service_data.item(row)
170
162 if type(selected_item) == type(item):171 if type(selected_item) == type(item):
163 log.info("Add to existing item")172 log.info("Add to existing item")
164 selected_item.add(item)173 selected_item.add(item)
165174
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-04-30 21:02:28 +0000
+++ openlp/core/ui/slidecontroller.py 2009-05-03 07:20:15 +0000
@@ -17,11 +17,92 @@
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging
20import os21import os
21from time import sleep22
22from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from PyQt4.QtCore import *
25from PyQt4.QtGui import *
26
27class SlideData(QAbstractListModel):
28 """
29 Tree of items for an order of Theme.
30 Includes methods for reading and writing the contents to an OOS file
31 Root contains a list of ThemeItems
32 """
33 global log
34 log=logging.getLogger(u'SlideData')
35
36 def __init__(self):
37 QAbstractListModel.__init__(self)
38 self.items=[]
39 self.rowheight=50
40 self.maximagewidth=self.rowheight*16/9.0;
41 log.info(u'Starting')
42
43 def clearItems(self):
44 self.items=[]
45
46 def columnCount(self, parent):
47 return 1
48
49 def rowCount(self, parent):
50 return len(self.items)
51
52 def insertRow(self, row, frame):
53 self.beginInsertRows(QModelIndex(),row,row)
54 log.info(u'insert row %d' % row)
55 # create a preview image
56 frame1 = frame.scaled(QtCore.QSize(350,260))
57 self.items.insert(row,(frame1))
58 log.info(u'Items: %s' % self.items)
59 self.endInsertRows()
60
61 def removeRow(self, row):
62 self.beginRemoveRows(QModelIndex(), row,row)
63 self.items.pop(row)
64 self.endRemoveRows()
65
66 def addRow(self, frame):
67 self.insertRow(len(self.items), frame)
68
69 def data(self, index, role):
70 row=index.row()
71 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
72 return QVariant()
73# if role==Qt.DisplayRole:
74# retval= self.items[row][1]
75 if role == Qt.DecorationRole:
76 retval= self.items[row]#[0]
77 else:
78 retval= QVariant()
79# log.info("Returning"+ str(retval))
80 if type(retval) is not type(QVariant):
81 return QVariant(retval)
82 else:
83 return retval
84
85 def __iter__(self):
86 for i in self.items:
87 yield i
88
89 def getValue(self, index):
90 row = index.row()
91 return self.items[row]
92
93 def getItem(self, row):
94 log.info(u'Get Item:%d -> %s' %(row, str(self.items)))
95 return self.items[row]
96
97 def getList(self):
98 filelist = [item[3] for item in self.items];
99 return filelist
100
23101
24class SlideController(QtGui.QWidget):102class SlideController(QtGui.QWidget):
103 global log
104 log=logging.getLogger(u'SlideController')
105
25 def __init__(self, control_splitter):106 def __init__(self, control_splitter):
26 QtGui.QWidget.__init__(self)107 QtGui.QWidget.__init__(self)
27 self.Pane = QtGui.QWidget(control_splitter)108 self.Pane = QtGui.QWidget(control_splitter)
@@ -33,18 +114,16 @@
33 self.PaneLayout.setSpacing(50)114 self.PaneLayout.setSpacing(50)
34 self.PaneLayout.setMargin(0)115 self.PaneLayout.setMargin(0)
35116
36 #self.VerseListView = QtGui.QListWidget(customEditDialog)
37 #self.VerseListView.setObjectName("VerseListView")
38 #self.horizontalLayout_4.addWidget(self.VerseListView)
39
40 self.Controller = QtGui.QScrollArea(self.Splitter)117 self.Controller = QtGui.QScrollArea(self.Splitter)
41 self.Controller.setWidgetResizable(True)118 self.Controller.setWidgetResizable(True)
42119
43 self.ControllerContents = QtGui.QWidget(self.Controller)120 self.PreviewListView = QtGui.QListView(self.Splitter)
44 self.ControllerContents.setGeometry(QtCore.QRect(0, 0, 228, 536))121 self.PreviewListView.setAlternatingRowColors(True)
122 self.PreviewListData = SlideData()
123 self.PreviewListView.setModel(self.PreviewListData)
45 self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))124 self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
46125
47 self.Controller.setWidget(self.ControllerContents)126 self.Controller.setWidget(self.PreviewListView)
48127
49 self.SlidePreview = QtGui.QLabel(self.Splitter)128 self.SlidePreview = QtGui.QLabel(self.Splitter)
50 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)129 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
@@ -59,9 +138,25 @@
59 self.SlidePreview.setScaledContents(True)138 self.SlidePreview.setScaledContents(True)
60 self.SlidePreview.setObjectName("SlidePreview")139 self.SlidePreview.setObjectName("SlidePreview")
61140
141 QtCore.QObject.connect(self.PreviewListView,
142 QtCore.SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)
143
144
145 def onSlideSelected(self, index):
146 frame = self.PreviewListData.getValue(index)
147 self.previewFrame(frame)
148
62 def previewFrame(self, frame):149 def previewFrame(self, frame):
63 self.SlidePreview.setPixmap(frame)150 self.SlidePreview.setPixmap(frame)
64151 if self.isLive:
65 imageLabel = QtGui.QLabel()152 self.mainDisplay.frameView(frame)
66 imageLabel.setPixmap(frame)153
67 self.Controller.setWidget(imageLabel)154 def addServiceItem(self, serviceitem):
155 self.serviceitem = serviceitem
156 self.serviceitem.render()
157 self.PreviewListData.clearItems()
158 for frame in self.serviceitem.frames:
159 self.PreviewListData.addRow(frame)
160
161 def render(self):
162 pass
68163
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-05-01 22:26:43 +0000
+++ openlp/core/ui/thememanager.py 2009-05-02 18:56:27 +0000
@@ -230,7 +230,17 @@
230 def getThemeData(self, themename):230 def getThemeData(self, themename):
231 log.debug(u'getthemedata for theme %s', themename)231 log.debug(u'getthemedata for theme %s', themename)
232 xml_file = os.path.join(self.path, str(themename), str(themename) + u'.xml')232 xml_file = os.path.join(self.path, str(themename), str(themename) + u'.xml')
233 xml = fileToXML(xml_file)233 try:
234 xml = fileToXML(xml_file)
235 except:
236 newtheme = ThemeXML()
237 newtheme.new_document(u'New Theme')
238 newtheme.add_background_solid(str(u'#000000'))
239 newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(30), u'False')
240 newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(12), u'False', u'footer')
241 newtheme.add_display(u'False', str(u'#FFFFFF'), u'False', str(u'#FFFFFF'),
242 str(0), str(0), str(0))
243 xml = newtheme.extract_xml()
234 theme = ThemeXML()244 theme = ThemeXML()
235 theme.parse(xml)245 theme.parse(xml)
236 return theme246 return theme
237247
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-04-29 19:07:13 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-05-02 18:56:27 +0000
@@ -23,7 +23,7 @@
2323
24from openlp.core import translate24from openlp.core import translate
25from openlp.core.lib import MediaManagerItem, Receiver25from openlp.core.lib import MediaManagerItem, Receiver
26from openlp.core.resources import *26from openlp.core.lib import ServiceItem
2727
28from openlp.plugins.bibles.forms import BibleImportForm28from openlp.plugins.bibles.forms import BibleImportForm
29from openlp.plugins.bibles.lib import TextListData29from openlp.plugins.bibles.lib import TextListData
@@ -270,12 +270,6 @@
270 self.bibleimportform.exec_()270 self.bibleimportform.exec_()
271 pass271 pass
272272
273 def onBibleLiveClick(self):
274 pass
275
276 def onBibleAddClick(self):
277 pass
278
279 def onAdvancedFromVerse(self):273 def onAdvancedFromVerse(self):
280 frm = self.AdvancedFromVerse.currentText()274 frm = self.AdvancedFromVerse.currentText()
281 self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)275 self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)
@@ -325,12 +319,33 @@
325 if not self.search_results == None:319 if not self.search_results == None:
326 self.displayResults(bible)320 self.displayResults(bible)
327321
322 def onBibleLiveClick(self):
323 service_item = ServiceItem(self.parent)
324 service_item.addIcon( ":/media/media_verse.png")
325 service_item.render_manager = self.parent.render_manager
326 self.generateSlideData(service_item)
327 self.parent.live_controller.addServiceItem(service_item)
328
329 def onBibleAddClick(self):
330 service_item = ServiceItem(self.parent)
331 service_item.addIcon( ":/media/media_verse.png")
332 service_item.render_manager = self.parent.render_manager
333 self.generateSlideData(service_item)
334 self.parent.service_manager.addServiceItem(service_item)
335
328 def onBiblePreviewClick(self):336 def onBiblePreviewClick(self):
337 service_item = ServiceItem(self.parent)
338 service_item.addIcon( ":/media/media_verse.png")
339 service_item.render_manager = self.parent.render_manager
340 self.generateSlideData(service_item)
341 self.parent.preview_controller.addServiceItem(service_item)
342
343 def generateSlideData(self, service_item):
329 log.debug(u'Bible Preview Button pressed')344 log.debug(u'Bible Preview Button pressed')
330 items = self.BibleListView.selectedIndexes()345 items = self.BibleListView.selectedIndexes()
331 old_chapter = ''346 old_chapter = ''
332 main_lines=[]347 raw_slides=[]
333 footer_lines = []348 raw_footer = []
334 for item in items:349 for item in items:
335 text = self.BibleListData.getValue(item)350 text = self.BibleListData.getValue(item)
336 verse = text[:text.find("(")]351 verse = text[:text.find("(")]
@@ -351,13 +366,15 @@
351 else:366 else:
352 loc = self.formatVerse(old_chapter, chapter, verse, u'', u'')367 loc = self.formatVerse(old_chapter, chapter, verse, u'', u'')
353 old_chapter = chapter368 old_chapter = chapter
354 main_lines.append(loc + u' '+text)369 raw_slides.append(loc + u' '+text)
355 if len(footer_lines) <= 1:370 service_item.title = book + u' ' + loc
356 footer_lines.append(book)371 if len(raw_footer) <= 1:
357372 raw_footer.append(book)
358 self.parent.render_manager.set_override_theme(None)373
359 frame=self.parent.render_manager.generate_slide(main_lines, footer_lines)374 service_item.theme = None
360 self.parent.preview_controller.previewFrame(frame)375
376 service_item.raw_slides = raw_slides
377 service_item.raw_footer = raw_footer
361378
362 def formatVerse(self, old_chapter, chapter, verse, opening, closing):379 def formatVerse(self, old_chapter, chapter, verse, opening, closing):
363 loc = opening380 loc = opening
364381
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-04-30 21:02:28 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-05-02 18:56:27 +0000
@@ -24,6 +24,7 @@
24from openlp.core import translate24from openlp.core import translate
25from openlp.core.lib import MediaManagerItem25from openlp.core.lib import MediaManagerItem
26from openlp.core.lib import SongXMLParser26from openlp.core.lib import SongXMLParser
27from openlp.core.lib import ServiceItem
2728
28from openlp.plugins.custom.lib import TextListData29from openlp.plugins.custom.lib import TextListData
2930
@@ -37,6 +38,7 @@
3738
38 def __init__(self, parent, icon, title):39 def __init__(self, parent, icon, title):
39 MediaManagerItem.__init__(self, parent, icon, title)40 MediaManagerItem.__init__(self, parent, icon, title)
41 self.parent = parent
4042
41 def setupUi(self):43 def setupUi(self):
42 # Add a toolbar44 # Add a toolbar
@@ -134,7 +136,7 @@
134 translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))136 translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
135 self.CustomListView.addAction(self.contextMenuAction(137 self.CustomListView.addAction(self.contextMenuAction(
136 self.CustomListView, ':/system/system_add.png',138 self.CustomListView, ':/system/system_add.png',
137 translate('CustomMediaItem',u'&Add to Service'), self.onCustomEditClick))139 translate('CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))
138140
139# def retranslateUi(self):141# def retranslateUi(self):
140# self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear'))142# self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear'))
@@ -185,9 +187,30 @@
185 self.CustomListData.deleteRow(index)187 self.CustomListData.deleteRow(index)
186188
187 def onCustomPreviewClick(self):189 def onCustomPreviewClick(self):
190 service_item = ServiceItem(self.parent)
191 service_item.addIcon( ":/media/media_song.png")
192 service_item.render_manager = self.parent.render_manager
193 self.generateSlideData(service_item)
194 self.parent.preview_controller.addServiceItem(service_item)
195
196 def onCustomLiveClick(self):
197 service_item = ServiceItem(self.parent)
198 service_item.addIcon( ":/media/media_song.png")
199 service_item.render_manager = self.parent.render_manager
200 self.generateSlideData(service_item)
201 self.parent.live_controller.addServiceItem(service_item)
202
203 def onCustomAddClick(self):
204 service_item = ServiceItem(self.parent)
205 service_item.addIcon( ":/media/media_song.png")
206 service_item.render_manager = self.parent.render_manager
207 self.generateSlideData(service_item)
208 self.parent.service_manager.addServiceItem(service_item)
209
210 def generateSlideData(self, service_item):
188 indexes = self.CustomListView.selectedIndexes()211 indexes = self.CustomListView.selectedIndexes()
189 main_lines=[]212 raw_slides =[]
190 footer_lines = []213 raw_footer = []
191 slide = None214 slide = None
192 theme = None215 theme = None
193 for index in indexes:216 for index in indexes:
@@ -196,25 +219,13 @@
196 title = customSlide.title219 title = customSlide.title
197 credit = customSlide.credits220 credit = customSlide.credits
198 theme = customSlide.theme_name221 theme = customSlide.theme_name
199 if len(theme) == 0 or theme == None:222 if len(theme) is not 0 :
200 self.parent.render_manager.set_override_theme(None)223 service_item.theme = theme
201 else:
202 self.parent.render_manager.set_override_theme(theme)
203
204 songXML=SongXMLParser(customSlide.text)224 songXML=SongXMLParser(customSlide.text)
205 verseList = songXML.get_verses()225 verseList = songXML.get_verses()
206 for verse in verseList:226 for verse in verseList:
207 slide = self.parent.render_manager.format_slide(verse[1], False)227 raw_slides.append(verse[1])
208 print verse228 raw_footer.append(title + u' '+ credit)
209 print slide229 service_item.title = title
210230 service_item.raw_slides = raw_slides
211 footer_lines.append(title + u' '+ credit)231 service_item.raw_footer = raw_footer
212 if slide is not None:
213 frame=self.parent.render_manager.generate_slide(slide, footer_lines, False)
214 self.parent.preview_controller.previewFrame(frame)
215
216 def onCustomLiveClick(self):
217 pass
218
219 def onCustomAddClick(self):
220 pass