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

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/servicing2
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~trb143/openlp/servicing2
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Review via email: mp+7726@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Complete OOS for Songs, Bibles, Images, Custom.
Fix unicode bugs in Bibles.
Clean Up image plugin.

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

Good work!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openlp.pyw'
--- openlp.pyw 2009-06-07 19:34:24 +0000
+++ openlp.pyw 2009-06-20 10:44:12 +0000
@@ -26,7 +26,7 @@
26from openlp.core.lib import Receiver26from openlp.core.lib import Receiver
2727
28logging.basicConfig(level=logging.DEBUG,28logging.basicConfig(level=logging.DEBUG,
29 format=u'%(asctime)s %(msecs)d %(name)-12s %(levelname)-8s %(message)s',29 format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s',
30 datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w')30 datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w')
3131
32from openlp.core.resources import *32from openlp.core.resources import *
3333
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-06-19 18:41:38 +0000
+++ openlp/core/lib/renderer.py 2009-06-20 10:44:12 +0000
@@ -136,8 +136,6 @@
136 if footer_lines is not None:136 if footer_lines is not None:
137 bbox1 = self._render_lines_unaligned(footer_lines, True)137 bbox1 = self._render_lines_unaligned(footer_lines, True)
138 # reset the frame. first time do not worry about what you paint on.138 # reset the frame. first time do not worry about what you paint on.
139 #self._frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) #(self._bg_frame)
140 #self._frame.fill(QtCore.Qt.transparent)
141 # reset the frame. first time do not worry about what you paint on.139 # reset the frame. first time do not worry about what you paint on.
142 self._frame = QtGui.QImage(self._bg_frame)140 self._frame = QtGui.QImage(self._bg_frame)
143 x, y = self._correctAlignment(self._rect, bbox)141 x, y = self._correctAlignment(self._rect, bbox)
@@ -445,4 +443,4 @@
445 im.save(u'renderer.png', u'png')443 im.save(u'renderer.png', u'png')
446 if image2 is not None:444 if image2 is not None:
447 im = image2.toImage()445 im = image2.toImage()
448 im.save(u'renderer2.png', u'png')
449\ No newline at end of file446\ No newline at end of file
447 im.save(u'renderer2.png', u'png')
450448
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-06-19 18:41:38 +0000
+++ openlp/core/lib/rendermanager.py 2009-06-20 11:23:34 +0000
@@ -139,10 +139,24 @@
139 self.renderer.set_frame_dest(self.width, self.height)139 self.renderer.set_frame_dest(self.width, self.height)
140 return self.renderer.generate_frame_from_lines(main_text, footer_text)140 return self.renderer.generate_frame_from_lines(main_text, footer_text)
141141
142 def resize_image(self, image):
143 preview = QtGui.QImage(image)
144 w = self.width
145 h = self.height
146 preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
147 realw = preview.width();
148 realh = preview.height()
149 # and move it to the centre of the preview space
150 newImage = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
151 newImage.fill(QtCore.Qt.transparent)
152 painter = QtGui.QPainter(newImage)
153 painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
154 return newImage
155
142 def calculate_default(self, screen):156 def calculate_default(self, screen):
143 log.debug(u'calculate default %s' , screen)157 log.debug(u'calculate default %s' , screen)
144 self.width = screen.width()158 self.width = screen.width()
145 self.height = screen.height()159 self.height = screen.height()
146 log.debug(u'calculate default %d,%d' , self.width, self.height)160 log.debug(u'calculate default %d,%d' , self.width, self.height)
147 # 90% is start of footer161 # 90% is start of footer
148 self.footer_start = int(self.height*0.90)162 self.footer_start = int(self.height * 0.90)
149163
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-06-10 15:54:46 +0000
+++ openlp/core/lib/serviceitem.py 2009-06-20 19:11:17 +0000
@@ -18,6 +18,7 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging20import logging
21import os
21import time22import time
22from openlp.core.lib import buildIcon23from openlp.core.lib import buildIcon
23from PyQt4 import QtCore, QtGui24from PyQt4 import QtCore, QtGui
@@ -49,6 +50,8 @@
49 self.frames = []50 self.frames = []
50 self.raw_footer = None51 self.raw_footer = None
51 self.theme = None52 self.theme = None
53 self.service_item_path = None
54 self.service_item_type = None
52 #log.debug(u'Service item created for %s ', self.shortname)55 #log.debug(u'Service item created for %s ', self.shortname)
53 self.service_frames = []56 self.service_frames = []
5457
@@ -77,13 +80,18 @@
77 self.frames = self.service_frames80 self.frames = self.service_frames
78 self.service_frames = []81 self.service_frames = []
79 elif self.service_item_type == u'image':82 elif self.service_item_type == u'image':
83 #print "image"
84 #print self.service_frames
85 for slide in self.service_frames:
86 slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
80 self.frames = self.service_frames87 self.frames = self.service_frames
81 self.service_frames = []88 #self.service_frames = []
82 else:89 else:
83 log.error(u'Invalid value renderer :%s' % self.service_item_type)90 log.error(u'Invalid value renderer :%s' % self.service_item_type)
8491
85 def add_from_image(self, frame_title, image):92 def add_from_image(self, path, frame_title, image):
86 self.service_item_type = u'image'93 self.service_item_type = u'image'
94 self.service_item_path = path
87 self.service_frames.append({u'title': frame_title, u'image': image})95 self.service_frames.append({u'title': frame_title, u'image': image})
8896
89 def add_from_text(self, frame_title, raw_slide):97 def add_from_text(self, frame_title, raw_slide):
@@ -105,14 +113,21 @@
105 oos_data = []113 oos_data = []
106 if self.service_item_type == u'text':114 if self.service_item_type == u'text':
107 for slide in self.service_frames:115 for slide in self.service_frames:
108 oos_data.append(slide[u'raw_slide'])116 oos_data.append(slide)
109 return {u'header': oos_header, u'data': self.service_frames}117 elif self.service_item_type == u'image':
118 #print "sf", self.service_frames
119 for slide in self.service_frames:
120 #print "s", slide
121 oos_data.append(slide[u'title'])
122 #print "od", oos_data
123 return {u'header': oos_header, u'data': oos_data}
110124
111 def set_from_oos(self, serviceitem):125 def set_from_oos(self, serviceitem, path=None):
112 """126 """
113 This method takes some oostext (passed from the ServiceManager)127 This method takes some oos list (passed from the ServiceManager)
114 and parses it into the data actually required128 and extracts the data actually required
115 """129 """
130 #print "sfs", serviceitem
116 header = serviceitem[u'serviceitem'][u'header']131 header = serviceitem[u'serviceitem'][u'header']
117 self.title = header[u'title']132 self.title = header[u'title']
118 self.service_item_type = header[u'type']133 self.service_item_type = header[u'type']
@@ -120,4 +135,12 @@
120 self.theme = header[u'theme']135 self.theme = header[u'theme']
121 self.addIcon(header[u'icon'])136 self.addIcon(header[u'icon'])
122 self.raw_footer = header[u'footer']137 self.raw_footer = header[u'footer']
123 self.service_frames = serviceitem[u'serviceitem'][u'data']138 if self.service_item_type == u'text':
139 for slide in serviceitem[u'serviceitem'][u'data']:
140 self.service_frames.append(slide)
141 elif self.service_item_type == u'image':
142 for text_image in serviceitem[u'serviceitem'][u'data']:
143 filename = os.path.join(path, text_image)
144 #print "fn", filename
145 real_image = QtGui.QImage(unicode(filename))
146 self.add_from_image(path, text_image, real_image)
124147
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-06-11 05:13:10 +0000
+++ openlp/core/ui/mainwindow.py 2009-06-20 07:08:17 +0000
@@ -64,6 +64,7 @@
64 self.RenderManager = RenderManager(self.ThemeManagerContents,64 self.RenderManager = RenderManager(self.ThemeManagerContents,
65 self.screenList, int(self.generalConfig.get_config(u'Monitor', 0)))65 self.screenList, int(self.generalConfig.get_config(u'Monitor', 0)))
66 log.info(u'Load Plugins')66 log.info(u'Load Plugins')
67 #make the controllers available to the plugins
67 self.plugin_helpers[u'preview'] = self.PreviewController68 self.plugin_helpers[u'preview'] = self.PreviewController
68 self.plugin_helpers[u'live'] = self.LiveController69 self.plugin_helpers[u'live'] = self.LiveController
69 self.plugin_helpers[u'event'] = self.EventManager70 self.plugin_helpers[u'event'] = self.EventManager
@@ -74,7 +75,7 @@
74 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,75 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
75 self.EventManager)76 self.EventManager)
76 # hook methods have to happen after find_plugins. Find plugins needs the77 # hook methods have to happen after find_plugins. Find plugins needs the
77 # controllershence the hooks have moved from setupUI() to here78 # controllers hence the hooks have moved from setupUI() to here
7879
79 # Find and insert settings tabs80 # Find and insert settings tabs
80 log.info(u'hook settings')81 log.info(u'hook settings')
@@ -378,6 +379,10 @@
378 # Connect up some signals and slots379 # Connect up some signals and slots
379 QtCore.QObject.connect(self.FileExitItem,380 QtCore.QObject.connect(self.FileExitItem,
380 QtCore.SIGNAL(u'triggered()'), self.mainWindow.close)381 QtCore.SIGNAL(u'triggered()'), self.mainWindow.close)
382 QtCore.QObject.connect(self.ImportThemeItem,
383 QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onImportTheme)
384 QtCore.QObject.connect(self.ExportThemeItem,
385 QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onExportTheme)
381 QtCore.QObject.connect(self.ViewMediaManagerItem,386 QtCore.QObject.connect(self.ViewMediaManagerItem,
382 QtCore.SIGNAL(u'triggered(bool)'), self.MediaManagerDock.setVisible)387 QtCore.SIGNAL(u'triggered(bool)'), self.MediaManagerDock.setVisible)
383 QtCore.QObject.connect(self.ViewServiceManagerItem,388 QtCore.QObject.connect(self.ViewServiceManagerItem,
384389
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-06-19 18:41:38 +0000
+++ openlp/core/ui/servicemanager.py 2009-06-20 19:11:17 +0000
@@ -20,11 +20,14 @@
20import os20import os
21import logging21import logging
22import cPickle22import cPickle
23import zipfile
24import shutil
2325
24from PyQt4 import QtCore, QtGui26from PyQt4 import QtCore, QtGui
25from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \27from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \
26 RenderManager, EventType, EventManager, translate, buildIcon, \28 RenderManager, EventType, EventManager, translate, buildIcon, \
27 contextMenuAction, contextMenuSeparator29 contextMenuAction, contextMenuSeparator
30from openlp.core.utils import ConfigHelper
2831
29class ServiceManager(QtGui.QWidget):32class ServiceManager(QtGui.QWidget):
30 """33 """
@@ -105,10 +108,23 @@
105 QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)108 QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
106 QtCore.QObject.connect(self.ServiceManagerList,109 QtCore.QObject.connect(self.ServiceManagerList,
107 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive)110 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive)
111 QtCore.QObject.connect(self.ServiceManagerList,
112 QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed)
113 QtCore.QObject.connect(self.ServiceManagerList,
114 QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
108 # Last little bits of setting up115 # Last little bits of setting up
109 self.config = PluginConfig(u'Main')116 self.config = PluginConfig(u'ServiceManager')
117 self.servicePath = self.config.get_data_path()
110 self.service_theme = self.config.get_config(u'theme service theme', u'')118 self.service_theme = self.config.get_config(u'theme service theme', u'')
111119
120 def collapsed(self, item):
121 pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
122 self.serviceItems[pos -1 ][u'expanded'] = False
123
124 def expanded(self, item):
125 pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
126 self.serviceItems[pos -1 ][u'expanded'] = True
127
112 def onServiceTop(self):128 def onServiceTop(self):
113 """129 """
114 Move the current ServiceItem to the top of the list130 Move the current ServiceItem to the top of the list
@@ -185,6 +201,7 @@
185 treewidgetitem.setText(0,serviceitem.title)201 treewidgetitem.setText(0,serviceitem.title)
186 treewidgetitem.setIcon(0,serviceitem.iconic_representation)202 treewidgetitem.setIcon(0,serviceitem.iconic_representation)
187 treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))203 treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))
204 treewidgetitem.setExpanded(item[u'expanded'])
188 count = 0205 count = 0
189 for frame in serviceitem.frames:206 for frame in serviceitem.frames:
190 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)207 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
@@ -198,15 +215,27 @@
198 Save the current service215 Save the current service
199 """216 """
200 filename = QtGui.QFileDialog.getSaveFileName(self, u'Save Order of Service',self.config.get_last_dir() )217 filename = QtGui.QFileDialog.getSaveFileName(self, u'Save Order of Service',self.config.get_last_dir() )
218 filename = unicode(filename)
201 if filename != u'':219 if filename != u'':
202 self.config.set_last_dir(filename)220 self.config.set_last_dir(filename)
203 print filename
204 service = []221 service = []
222 servicefile= filename + u'.ood'
223 zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')
205 for item in self.serviceItems:224 for item in self.serviceItems:
206 service.append({u'serviceitem':item[u'data'].get_oos_repr()})225 service.append({u'serviceitem':item[u'data'].get_oos_repr()})
207 file = open(filename+u'.oos', u'wb')226 if item[u'data'].service_item_type == u'image':
227 for frame in item[u'data'].frames:
228 path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title'])
229 zip.write(path_from)
230 file = open(servicefile, u'wb')
208 cPickle.dump(service, file)231 cPickle.dump(service, file)
209 file.close()232 file.close()
233 zip.write(servicefile)
234 zip.close()
235 try:
236 os.remove(servicefile)
237 except:
238 pass #if not present do not worry
210239
211 def onLoadService(self):240 def onLoadService(self):
212 """241 """
@@ -214,17 +243,35 @@
214 """243 """
215 filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(),244 filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(),
216 u'Services (*.oos)')245 u'Services (*.oos)')
246 filename = unicode(filename)
217 if filename != u'':247 if filename != u'':
218 self.config.set_last_dir(filename)248 self.config.set_last_dir(filename)
219 file = open(filename, u'r')249 zip = zipfile.ZipFile(unicode(filename))
220 items = cPickle.load(file)250 filexml = None
221 file.close()251 themename = None
252 for file in zip.namelist():
253 names = file.split(os.path.sep)
254 file_to = os.path.join(self.servicePath, names[len(names) - 1])
255 file_data = zip.read(file)
256 f = open(file_to, u'w')
257 f.write(file_data)
258 f.close()
259 if file_to.endswith(u'ood'):
260 p_file = file_to
261 f = open(p_file, u'r')
262 items = cPickle.load(f)
263 f.close()
222 self.onNewService()264 self.onNewService()
223 for item in items:265 for item in items:
266 #print item
224 serviceitem = ServiceItem()267 serviceitem = ServiceItem()
225 serviceitem.RenderManager = self.parent.RenderManager268 serviceitem.RenderManager = self.parent.RenderManager
226 serviceitem.set_from_oos(item)269 serviceitem.set_from_oos(item, self.servicePath )
227 self.addServiceItem(serviceitem)270 self.addServiceItem(serviceitem)
271 try:
272 os.remove(p_file)
273 except:
274 pass #if not present do not worry
228275
229 def onThemeComboBoxSelected(self, currentIndex):276 def onThemeComboBoxSelected(self, currentIndex):
230 """277 """
@@ -239,16 +286,16 @@
239 for item in tempServiceItems:286 for item in tempServiceItems:
240 self.addServiceItem(item[u'data'])287 self.addServiceItem(item[u'data'])
241288
242 def addServiceItem(self, item, expand=True):289 def addServiceItem(self, item):
243 """290 """
244 Add an item to the list291 Add an item to the list
245 """292 """
246 self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})293 self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1, u'expanded':True})
247 treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)294 treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
248 treewidgetitem.setText(0,item.title)295 treewidgetitem.setText(0,item.title)
249 treewidgetitem.setIcon(0,item.iconic_representation)296 treewidgetitem.setIcon(0,item.iconic_representation)
250 treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))297 treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
251 treewidgetitem.setExpanded(expand)298 treewidgetitem.setExpanded(True)
252 item.render()299 item.render()
253 count = 0300 count = 0
254 for frame in item.frames:301 for frame in item.frames:
255302
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-06-16 18:21:24 +0000
+++ openlp/core/ui/slidecontroller.py 2009-06-20 10:44:12 +0000
@@ -137,8 +137,9 @@
137 self.PreviewListView.setIconSize(QtCore.QSize(250, 190))137 self.PreviewListView.setIconSize(QtCore.QSize(250, 190))
138 self.PreviewListData = SlideData()138 self.PreviewListData = SlideData()
139 self.PreviewListView.isLive = self.isLive139 self.PreviewListView.isLive = self.isLive
140 #self.PreviewListView.setFlow(1)140 if QtCore.QT_VERSION_STR > u'4.4.0':
141 #self.PreviewListView.setViewMode(1)141 self.PreviewListView.setFlow(1)
142 self.PreviewListView.setViewMode(1)
142 self.PreviewListView.setWrapping(False)143 self.PreviewListView.setWrapping(False)
143 self.PreviewListView.setModel(self.PreviewListData)144 self.PreviewListView.setModel(self.PreviewListData)
144 self.PreviewListView.setSpacing(0)145 self.PreviewListView.setSpacing(0)
@@ -321,4 +322,4 @@
321 if row.isValid():322 if row.isValid():
322 self.PreviewListView.selectionModel().setCurrentIndex(row,323 self.PreviewListView.selectionModel().setCurrentIndex(row,
323 QtGui.QItemSelectionModel.SelectCurrent)324 QtGui.QItemSelectionModel.SelectCurrent)
324 self.onSlideSelected(row)
325\ No newline at end of file325\ No newline at end of file
326 self.onSlideSelected(row)
326327
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-06-16 18:21:24 +0000
+++ openlp/core/ui/thememanager.py 2009-06-20 19:11:17 +0000
@@ -40,7 +40,7 @@
40 Root contains a list of ThemeItems40 Root contains a list of ThemeItems
41 """41 """
42 global log42 global log
43 log=logging.getLogger(u'ThemeData')43 log = logging.getLogger(u'ThemeData')
4444
45 def __init__(self):45 def __init__(self):
46 QtCore.QAbstractListModel.__init__(self)46 QtCore.QAbstractListModel.__init__(self)
@@ -200,7 +200,7 @@
200200
201 def onImportTheme(self):201 def onImportTheme(self):
202 files = QtGui.QFileDialog.getOpenFileNames(None,202 files = QtGui.QFileDialog.getOpenFileNames(None,
203 translate(u'ThemeManager', u'Select Import File'),203 translate(u'ThemeManager', u'Select Theme Import File'),
204 self.path, u'Theme (*.theme)')204 self.path, u'Theme (*.theme)')
205 log.info(u'New Themes %s', unicode(files))205 log.info(u'New Themes %s', unicode(files))
206 if len(files) > 0:206 if len(files) > 0:
@@ -335,7 +335,7 @@
335 outfile = open(theme_file, u'w')335 outfile = open(theme_file, u'w')
336 outfile.write(theme_xml)336 outfile.write(theme_xml)
337 outfile.close()337 outfile.close()
338 if image_from is not None and image_from != image_to:338 if image_from is not None and image_from is not image_to:
339 shutil.copyfile(image_from, image_to)339 shutil.copyfile(image_from, image_to)
340 self.generateAndSaveImage(self.path, name, theme_xml)340 self.generateAndSaveImage(self.path, name, theme_xml)
341 self.themeData.clearItems()341 self.themeData.clearItems()
@@ -362,4 +362,4 @@
362 def getPreviewImage(self, theme):362 def getPreviewImage(self, theme):
363 log.debug(u'getPreviewImage %s ', theme)363 log.debug(u'getPreviewImage %s ', theme)
364 image = os.path.join(self.path, theme + u'.png')364 image = os.path.join(self.path, theme + u'.png')
365 return image
366\ No newline at end of file365\ No newline at end of file
366 return image
367367
=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py 2009-06-16 18:21:24 +0000
+++ openlp/plugins/bibles/bibleplugin.py 2009-06-19 19:49:00 +0000
@@ -25,8 +25,6 @@
25from openlp.core.lib import Plugin, Event, EventType, translate25from openlp.core.lib import Plugin, Event, EventType, translate
2626
27from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem27from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem
28from openlp.plugins.bibles.lib.tables import *
29from openlp.plugins.bibles.lib.classes import *
3028
31class BiblePlugin(Plugin):29class BiblePlugin(Plugin):
32 global log30 global log
@@ -71,9 +69,7 @@
71 pass69 pass
7270
73 def onBibleNewClick(self):71 def onBibleNewClick(self):
74 self.bibleimportform = BibleImportForm(self.config, self.biblemanager, self)72 self.media_item.onBibleNewClick()
75 self.bibleimportform.exec_()
76 pass
7773
78 def handle_event(self, event):74 def handle_event(self, event):
79 """75 """
8076
=== modified file 'openlp/plugins/bibles/forms/bibleimportdialog.py'
--- openlp/plugins/bibles/forms/bibleimportdialog.py 2009-06-16 18:21:24 +0000
+++ openlp/plugins/bibles/forms/bibleimportdialog.py 2009-06-19 19:49:00 +0000
@@ -8,6 +8,7 @@
8# WARNING! All changes made in this file will be lost!8# WARNING! All changes made in this file will be lost!
99
10from PyQt4 import QtCore, QtGui10from PyQt4 import QtCore, QtGui
11from openlp.core.lib import translate
1112
12class Ui_BibleImportDialog(object):13class Ui_BibleImportDialog(object):
13 def setupUi(self, BibleImportDialog):14 def setupUi(self, BibleImportDialog):
1415
=== modified file 'openlp/plugins/bibles/lib/bibleHTTPimpl.py'
--- openlp/plugins/bibles/lib/bibleHTTPimpl.py 2009-06-16 18:21:24 +0000
+++ openlp/plugins/bibles/lib/bibleHTTPimpl.py 2009-06-20 19:11:17 +0000
@@ -44,7 +44,7 @@
44 log.debug( u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)44 log.debug( u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)
45 urlstring = u'http://www.biblegateway.com/passage/?book_id='+unicode(bookid)+u'&chapter'+unicode(chapter)+u'&version='+unicode(version)45 urlstring = u'http://www.biblegateway.com/passage/?book_id='+unicode(bookid)+u'&chapter'+unicode(chapter)+u'&version='+unicode(version)
46 xml_string = self._get_web_text(urlstring, self.proxyurl)46 xml_string = self._get_web_text(urlstring, self.proxyurl)
47 print xml_string47 #print xml_string
48 VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>'48 VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>'
49 verse = 149 verse = 1
50 i= xml_string.find(u'result-text-style-normal')50 i= xml_string.find(u'result-text-style-normal')
@@ -97,7 +97,7 @@
97 """97 """
98 log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)98 log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)
99 bookname = bookname.replace(u' ', '')99 bookname = bookname.replace(u' ', '')
100 urlstring = "http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word="+bookname+"+"+unicode(chapter)+"&version="+version100 urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word='+bookname+u'+'+unicode(chapter)+u'&version='+version
101 xml_string = self._get_web_text(urlstring, self.proxyurl)101 xml_string = self._get_web_text(urlstring, self.proxyurl)
102 #log.debug(u'Return data %s', xml_string)102 #log.debug(u'Return data %s', xml_string)
103 ## Strip Book Title from Heading to return it to system103 ## Strip Book Title from Heading to return it to system
@@ -115,27 +115,33 @@
115115
116 ## Strip Verse Data from Page and build an array116 ## Strip Verse Data from Page and build an array
117 ##117 ##
118 #log.debug(u'bible data %s', xml_string)
118 i= xml_string.find(u'NavCurrentChapter')119 i= xml_string.find(u'NavCurrentChapter')
119 xml_string = xml_string[i:len(xml_string)]120 xml_string = xml_string[i:len(xml_string)]
120 i= xml_string.find(u'<TABLE')121 i= xml_string.find(u'<TABLE')
121 xml_string = xml_string[i:len(xml_string)]122 xml_string = xml_string[i:len(xml_string)]
122 i= xml_string.find(u'<B>')123 i= xml_string.find(u'<B>')
123 xml_string = xml_string[i + 3 :len(xml_string)] #remove the <B> at the front124 #remove the <B> at the front
124 i= xml_string.find(u'<B>') # Remove the heading for the book125 xml_string = xml_string[i + 3 :len(xml_string)]
125 xml_string = xml_string[i + 3 :len(xml_string)] #remove the <B> at the front126 # Remove the heading for the book
127 i= xml_string.find(u'<B>')
128 #remove the <B> at the front
129 xml_string = xml_string[i + 3 :len(xml_string)]
126 versePos = xml_string.find(u'<BLOCKQUOTE>')130 versePos = xml_string.find(u'<BLOCKQUOTE>')
127 #log.debug( versePos)131 #log.debug(u'verse pos %d', versePos)
128 bible = {}132 bible = {}
129 while versePos > 0:133 while versePos > 0:
130 verseText = '' # clear out string134 verseText = u''
131 versePos = xml_string.find(u'<B><I>', versePos) + 6135 versePos = xml_string.find(u'<B><I>', versePos) + 6
132 i = xml_string.find(u'</I></B>', versePos)136 i = xml_string.find(u'</I></B>', versePos)
133 #log.debug( versePos, i)137 #log.debug( versePos, i)
134 verse= xml_string[versePos:i] # Got the Chapter138 verse= xml_string[versePos:i] # Got the Chapter
135 #verse = int(temp)139 #verse = int(temp)
136 #log.debug( 'Chapter = ' + unicode(temp))140 #log.debug( 'Chapter = %s', verse)
137 versePos = i + 8 # move the starting position to negining of the text141 # move the starting position to begining of the text
138 i = xml_string.find(u'<B><I>', versePos) # fine the start of the next verse142 versePos = i + 8
143 # fined the start of the next verse
144 i = xml_string.find(u'<B><I>', versePos)
139 if i == -1:145 if i == -1:
140 i = xml_string.find(u'</BLOCKQUOTE>',versePos)146 i = xml_string.find(u'</BLOCKQUOTE>',versePos)
141 verseText = xml_string[versePos: i]147 verseText = xml_string[versePos: i]
142148
=== modified file 'openlp/plugins/bibles/lib/common.py'
--- openlp/plugins/bibles/lib/common.py 2009-06-16 18:21:24 +0000
+++ openlp/plugins/bibles/lib/common.py 2009-06-20 19:11:17 +0000
@@ -53,12 +53,12 @@
53 http_support = urllib2.HTTPHandler()53 http_support = urllib2.HTTPHandler()
54 opener= urllib2.build_opener(proxy_support, http_support)54 opener= urllib2.build_opener(proxy_support, http_support)
55 urllib2.install_opener(opener)55 urllib2.install_opener(opener)
56 xml_string = ""56 xml_string = u''
57 req = urllib2.Request(urlstring)57 req = urllib2.Request(urlstring)
58 req.add_header(u'User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')58 req.add_header(u'User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
59 try:59 try:
60 handle = urllib2.urlopen(req)60 handle = urllib2.urlopen(req)
61 xml_string = handle.read()61 xml_string = unicode(handle.read())
62 except IOError, e:62 except IOError, e:
63 if hasattr(e, u'reason'):63 if hasattr(e, u'reason'):
64 log.error(u'Reason : ')64 log.error(u'Reason : ')
@@ -97,9 +97,9 @@
97 text= text.replace(u'</P>', u'')97 text= text.replace(u'</P>', u'')
98 text= text.replace(u'<BR>', u'')98 text= text.replace(u'<BR>', u'')
99 text= text.replace(u'<BR />', u'')99 text= text.replace(u'<BR />', u'')
100 text= text.replace(chr(189), u'1/2')100 #text= text.replace(chr(189), u'1/2');print "l"
101 text= text.replace(u'&quot;", u''')101 text= text.replace(u'&quot;', "'")
102 text= text.replace(u'&apos;", u''')102 text= text.replace(u'&apos;', "'")
103103
104 i = text.find(u'<')104 i = text.find(u'<')
105 while i > -1 :105 while i > -1 :
106106
=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py 2009-06-16 18:21:24 +0000
+++ openlp/plugins/bibles/lib/manager.py 2009-06-20 19:11:17 +0000
@@ -239,17 +239,19 @@
239 text = []239 text = []
240 log.debug(u'get_verse_text %s,%s,%s,%s,%s,%s', bible, bookname, schapter, echapter, sverse, everse)240 log.debug(u'get_verse_text %s,%s,%s,%s,%s,%s', bible, bookname, schapter, echapter, sverse, everse)
241 if not self.bible_http_cache [bible] == None:241 if not self.bible_http_cache [bible] == None:
242 book= self.bible_db_cache[bible].get_bible_book(bookname) # check to see if book/chapter exists242 # check to see if book/chapter exists
243 book= self.bible_db_cache[bible].get_bible_book(bookname)
243 if book == None:244 if book == None:
244 log.debug(u'get_verse_text : new book')245 log.debug(u'get_verse_text : new book')
245 for chapter in range(schapter, echapter+1):246 for chapter in range(schapter, echapter+1):
246 search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter)247 search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter)
247 if search_results.has_verselist() :248 if search_results.has_verse_list() :
248 ## We have found a book of the bible lets check to see if it was there.249 ## We have found a book of the bible lets check to see if it was there.
249 ## By reusing the returned book name we get a correct book.250 ## By reusing the returned book name we get a correct book.
250 ## For example it is possible to request ac and get Acts back.251 ## For example it is possible to request ac and get Acts back.
251 bookname = search_results.get_book()252 bookname = search_results.get_book()
252 book= self.bible_db_cache[bible].get_bible_book(bookname) # check to see if book/chapter exists253 # check to see if book/chapter exists
254 book= self.bible_db_cache[bible].get_bible_book(bookname)
253 if book == None:255 if book == None:
254 ## Then create book, chapter and text256 ## Then create book, chapter and text
255 book = self.bible_db_cache[bible].create_book(bookname, \257 book = self.bible_db_cache[bible].create_book(bookname, \
256258
=== modified file 'openlp/plugins/images/__init__.py'
--- openlp/plugins/images/__init__.py 2009-05-11 05:09:43 +0000
+++ openlp/plugins/images/__init__.py 2009-06-20 10:44:12 +0000
@@ -3,7 +3,7 @@
3"""3"""
4OpenLP - Open Source Lyrics Projection4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 - 2009 Raoul Snyman5Copyright (c) 2008 - 2009 Raoul Snyman
6Portions copyright (c) 2008 Martin Thompson, Tim Bentley,6Portions 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,7 +17,3 @@
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"""
20
21#from imageplugin import ImagePlugin
22#from imageserviceitem import ImageServiceItem
23
2420
=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py 2009-05-21 16:07:01 +0000
+++ openlp/plugins/images/imageplugin.py 2009-06-20 10:44:12 +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 Bentley,6Portions 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
@@ -22,7 +22,7 @@
22from PyQt4 import QtCore, QtGui22from PyQt4 import QtCore, QtGui
2323
24from openlp.core.lib import Plugin, Event, EventType24from openlp.core.lib import Plugin, Event, EventType
25from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem25from openlp.plugins.images.lib import ImageMediaItem
2626
27class ImagePlugin(Plugin):27class ImagePlugin(Plugin):
28 global log28 global log
@@ -38,9 +38,6 @@
38 self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),38 self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),
39 QtGui.QIcon.Normal, QtGui.QIcon.Off)39 QtGui.QIcon.Normal, QtGui.QIcon.Off)
4040
41 self.preview_service_item = ImageServiceItem(self.preview_controller)
42 self.live_service_item = ImageServiceItem(self.live_controller)
43
44 def get_media_manager_item(self):41 def get_media_manager_item(self):
45 # Create the MediaManagerItem object42 # Create the MediaManagerItem object
46 self.media_item = ImageMediaItem(self, self.icon, u'Images')43 self.media_item = ImageMediaItem(self, self.icon, u'Images')
@@ -63,5 +60,3 @@
63 if event.event_type == EventType.LiveShow and event.payload == 'Image':60 if event.event_type == EventType.LiveShow and event.payload == 'Image':
64 log.debug(u'Load Live Show Item received')61 log.debug(u'Load Live Show Item received')
65 self.media_item.onImageLiveClick()62 self.media_item.onImageLiveClick()
66
67
6863
=== modified file 'openlp/plugins/images/lib/__init__.py'
--- openlp/plugins/images/lib/__init__.py 2009-03-24 06:07:03 +0000
+++ openlp/plugins/images/lib/__init__.py 2009-06-20 10:44:12 +0000
@@ -3,7 +3,7 @@
3"""3"""
4OpenLP - Open Source Lyrics Projection4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 - 2009 Raoul Snyman5Copyright (c) 2008 - 2009 Raoul Snyman
6Portions copyright (c) 2008 Martin Thompson, Tim Bentley,6Portions 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
@@ -18,5 +18,4 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20from listwithpreviews import ListWithPreviews20from listwithpreviews import ListWithPreviews
21from imageserviceitem import ImageServiceItem
22from mediaitem import ImageMediaItem21from mediaitem import ImageMediaItem
2322
=== modified file 'openlp/plugins/images/lib/listwithpreviews.py'
--- openlp/plugins/images/lib/listwithpreviews.py 2009-06-19 18:41:38 +0000
+++ openlp/plugins/images/lib/listwithpreviews.py 2009-06-20 10:44:12 +0000
@@ -5,7 +5,7 @@
5Copyright (c) 2008 Raoul Snyman5Copyright (c) 2008 Raoul Snyman
6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
77
8This program is free software; you can rediunicodeibute 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
10Foundation; version 2 of the License.10Foundation; version 2 of the License.
1111
@@ -34,34 +34,35 @@
34 # will be a list of (full filename, QPixmap, shortname) tuples34 # will be a list of (full filename, QPixmap, shortname) tuples
35 self.items = []35 self.items = []
36 self.rowheight = 5036 self.rowheight = 50
37 self.maximagewidth = self.rowheight*16/9.0;37 self.maximagewidth = self.rowheight * 16 / 9.0;
3838
39 def rowCount(self, parent):39 def rowCount(self, parent):
40 return len(self.items)40 return len(self.items)
4141
42 def insertRow(self, row, filename):42 def insertRow(self, row, filename):
43 self.beginInsertRows(QtCore.QModelIndex(),row,row)43 self.beginInsertRows(QtCore.QModelIndex(), row, row)
44 #log.info(u'insert row %d:%s' % (row,filename))44 #log.info(u'insert row %d:%s' % (row,filename))
45 # get short filename to display next to image45 # get short filename to display next to image
46 (prefix, shortfilename) = os.path.split(unicode(filename))46 filename = unicode(filename)
47 (prefix, shortfilename) = os.path.split(filename)
47 #log.info(u'shortfilename=%s' % (shortfilename))48 #log.info(u'shortfilename=%s' % (shortfilename))
48 # create a preview image49 # create a preview image
49 if os.path.exists(filename):50 if os.path.exists(filename):
50 preview = QtGui.QPixmap(unicode(filename))51 preview = QtGui.QImage(filename)
51 w = self.maximagewidth;52 w = self.maximagewidth;
52 h = self.rowheight53 h = self.rowheight
53 preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)54 preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
54 realw = preview.width();55 realw = preview.width();
55 realh = preview.height()56 realh = preview.height()
56 # and move it to the centre of the preview space57 # and move it to the centre of the preview space
57 p = QtGui.QPixmap(w,h)58 p = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
58 p.fill(QtCore.Qt.transparent)59 p.fill(QtCore.Qt.transparent)
59 painter = QtGui.QPainter(p)60 painter = QtGui.QPainter(p)
60 painter.drawPixmap((w-realw)/2,(h-realh)/2,preview)61 painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
61 else:62 else:
62 w = self.maximagewidth;63 w = self.maximagewidth;
63 h = self.rowheight64 h = self.rowheight
64 p = QtGui.QPixmap(w,h)65 p = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
65 p.fill(QtCore.Qt.transparent)66 p.fill(QtCore.Qt.transparent)
66 # finally create the row67 # finally create the row
67 self.items.insert(row, (filename, p, shortfilename))68 self.items.insert(row, (filename, p, shortfilename))
6869
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-06-19 18:41:38 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-06-20 10:44:12 +0000
@@ -51,7 +51,7 @@
51 This is the custom media manager item for images.51 This is the custom media manager item for images.
52 """52 """
53 global log53 global log
54 log=logging.getLogger(u'ImageMediaItem')54 log = logging.getLogger(u'ImageMediaItem')
55 log.info(u'Image Media Item loaded')55 log.info(u'Image Media Item loaded')
5656
57 def __init__(self, parent, icon, title):57 def __init__(self, parent, icon, title):
@@ -95,7 +95,7 @@
95 self.ImageListView.setModel(self.ImageListData)95 self.ImageListView.setModel(self.ImageListData)
96 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))96 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
97 self.ImageListView.setSpacing(1)97 self.ImageListView.setSpacing(1)
98 self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)98 self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
99 self.ImageListView.setAlternatingRowColors(True)99 self.ImageListView.setAlternatingRowColors(True)
100 self.ImageListView.setDragEnabled(True)100 self.ImageListView.setDragEnabled(True)
101 self.ImageListView.setObjectName(u'ImageListView')101 self.ImageListView.setObjectName(u'ImageListView')
@@ -114,6 +114,8 @@
114 self.ImageListView, ':/system/system_add.png',114 self.ImageListView, ':/system/system_add.png',
115 translate(u'ImageMediaItem', u'&Add to Service'),115 translate(u'ImageMediaItem', u'&Add to Service'),
116 self.onImageAddClick))116 self.onImageAddClick))
117 QtCore.QObject.connect(self.ImageListView,
118 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onImagePreviewClick)
117119
118 def initialise(self):120 def initialise(self):
119 self.loadImageList(self.parent.config.load_list(u'images'))121 self.loadImageList(self.parent.config.load_list(u'images'))
@@ -143,12 +145,12 @@
143145
144 def generateSlideData(self, service_item):146 def generateSlideData(self, service_item):
145 indexes = self.ImageListView.selectedIndexes()147 indexes = self.ImageListView.selectedIndexes()
146 service_item.title = u'Images'148 service_item.title = u'Image(s)'
147 for index in indexes:149 for index in indexes:
148 filename = self.ImageListData.getFilename(index)150 filename = self.ImageListData.getFilename(index)
149 frame = QtGui.QPixmap(unicode(filename))151 frame = QtGui.QImage(unicode(filename))
150 (path, name) =os.path.split(filename)152 (path, name) = os.path.split(filename)
151 service_item.add_from_image(name, frame)153 service_item.add_from_image(path, name, frame)
152154
153 def onImagePreviewClick(self):155 def onImagePreviewClick(self):
154 log.debug(u'Image Preview Requested')156 log.debug(u'Image Preview Requested')