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

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

Add Drag and drop from Custom plugin to ServiceManager
Improve rendering of images for all code sections so they look nice.

Note
Prints in Renderer/RenderManager are to review performance of the Renderer.

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

  992 # for f in self.imgs:
  993 # fl , nm = os.path.split(str(f))
  994 # c = self.slide_controller.rowCount()
  995 # self.slide_controller.setRowCount(c+1)
  996 # twi = QtGui.QTableWidgetItem(str(f))

I know this is commented out, but looking at those variables, I can't see at a glance what they are supposed to be. Please can you make decently named variables.

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-05-04 13:48:12 +0000
+++ openlp.pyw 2009-05-11 05:09:43 +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 %(name)-12s %(levelname)-8s %(message)s',29 format=u'%(asctime)s %(msecs)d %(name)-12s %(levelname)-8s %(message)s',
30 datefmt=u'%m-%d %H:%M:%S',30 datefmt=u'%m-%d %H:%M:%S',
31 filename=u'openlp.log',31 filename=u'openlp.log',
32 filemode=u'w')32 filemode=u'w')
3333
=== modified file 'openlp/core/lib/event.py'
--- openlp/core/lib/event.py 2009-04-06 18:45:45 +0000
+++ openlp/core/lib/event.py 2009-05-09 07:01:33 +0000
@@ -35,6 +35,7 @@
35 AfterLoadService = 235 AfterLoadService = 2
36 BeforeSaveService = 336 BeforeSaveService = 3
37 AfterSaveService = 437 AfterSaveService = 4
38 LoadServiceItem = 5
38 # Preview events39 # Preview events
39 PreviewBeforeLoad = 1140 PreviewBeforeLoad = 11
40 PreviewAfterLoad = 1241 PreviewAfterLoad = 12
4142
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-05-04 13:48:12 +0000
+++ openlp/core/lib/renderer.py 2009-05-11 05:09:43 +0000
@@ -19,8 +19,9 @@
19"""19"""
20import logging20import logging
21import os, os.path21import os, os.path
22
23import sys22import sys
23
24from datetime import *
24from PyQt4 import QtGui, QtCore, Qt25from PyQt4 import QtGui, QtCore, Qt
2526
26from copy import copy27from copy import copy
@@ -95,6 +96,7 @@
95 self.img=QtGui.QPixmap.fromImage(i.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio))96 self.img=QtGui.QPixmap.fromImage(i.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio))
9697
97 def set_paint_dest(self, p):98 def set_paint_dest(self, p):
99 log.debug(u'set paint dest (frame) w %d h %d',p.width(), p.height())
98 self._paint=p100 self._paint=p
99 if self._bg_image_filename is not None:101 if self._bg_image_filename is not None:
100 self.scale_bg_image()102 self.scale_bg_image()
@@ -128,6 +130,7 @@
128 assert(self._theme)130 assert(self._theme)
129 assert(self._paint)131 assert(self._paint)
130 log.debug(u'render background %s ', self._theme.background_type)132 log.debug(u'render background %s ', self._theme.background_type)
133 bef = datetime.now()
131 p=QtGui.QPainter()134 p=QtGui.QPainter()
132 p.begin(self._paint)135 p.begin(self._paint)
133 if self._theme.background_type == u'solid':136 if self._theme.background_type == u'solid':
@@ -172,6 +175,10 @@
172 else:175 else:
173 p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))176 p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
174 p.end()177 p.end()
178 aft = datetime.now()
179 print "background time", bef, aft, aft-bef
180
181 log.debug(u'render background finish')
175182
176 def split_set_of_lines(self, lines, footer):183 def split_set_of_lines(self, lines, footer):
177184
@@ -250,7 +257,7 @@
250257
251 def render_lines(self, lines, footer_lines=None):258 def render_lines(self, lines, footer_lines=None):
252 """render a set of lines according to the theme, return bounding box"""259 """render a set of lines according to the theme, return bounding box"""
253 log.debug(u'_render_lines %s', lines)260 log.debug(u'render_lines - Start')
254261
255 bbox=self._render_lines_unaligned(lines, False) # Main font262 bbox=self._render_lines_unaligned(lines, False) # Main font
256 if footer_lines is not None:263 if footer_lines is not None:
@@ -263,7 +270,7 @@
263270
264 if footer_lines is not None:271 if footer_lines is not None:
265 bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )272 bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
266273 log.debug(u'render_lines- Finish')
267 return bbox274 return bbox
268275
269 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):276 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
@@ -274,13 +281,11 @@
274 than a screenful (eg. by using split_set_of_lines)281 than a screenful (eg. by using split_set_of_lines)
275282
276 Returns the bounding box of the text as QRect"""283 Returns the bounding box of the text as QRect"""
277 log.debug(u'render lines unaligned %s', lines)284 log.debug(u'render lines unaligned Start')
278 x, y=tlcorner285 x, y=tlcorner
279 brx=x286 brx=x
280 bry=y287 bry=y
281 for line in lines:288 for line in lines:
282 #if (line == ''):
283 # continue
284 # render after current bottom, but at original left edge289 # render after current bottom, but at original left edge
285 # keep track of right edge to see which is biggest290 # keep track of right edge to see which is biggest
286 (thisx, bry) = self._render_single_line(line, footer, (x,bry))291 (thisx, bry) = self._render_single_line(line, footer, (x,bry))
@@ -293,8 +298,7 @@
293 p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))298 p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
294 p.drawRect(retval)299 p.drawRect(retval)
295 p.end()300 p.end()
296301 log.debug(u'render lines unaligned Finish')
297
298 return retval302 return retval
299303
300 def _render_single_line(self, line, footer, tlcorner=(0,0)):304 def _render_single_line(self, line, footer, tlcorner=(0,0)):
@@ -396,16 +400,16 @@
396 p.end()400 p.end()
397401
398 brcorner=(rightextent,y)402 brcorner=(rightextent,y)
403 log.debug(u'Render single line Finish')
399 return brcorner404 return brcorner
400405
401 # xxx this is what to override for an SDL version406 # xxx this is what to override for an SDL version
402 def _get_extent_and_render(self, line, footer, tlcorner=(0,0), draw=False, color=None):407 def _get_extent_and_render(self, line, footer, tlcorner=(0,0), draw=False, color=None):
403 """Find bounding box of text - as render_single_line.408 """Find bounding box of text - as render_single_line.
404 If draw is set, actually draw the text to the current DC as well409 If draw is set, actually draw the text to the current DC as well
405
406 return width and height of text as a tuple (w,h)"""410 return width and height of text as a tuple (w,h)"""
407 # setup defaults411 # setup defaults
408 log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)412 #log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
409 p=QtGui.QPainter()413 p=QtGui.QPainter()
410 p.begin(self._paint)414 p.begin(self._paint)
411 # 'twould be more efficient to set this once when theme changes415 # 'twould be more efficient to set this once when theme changes
412416
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-05-04 13:48:12 +0000
+++ openlp/core/lib/rendermanager.py 2009-05-11 05:09:43 +0000
@@ -18,12 +18,31 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging20import logging
21import time
22import os, os.path21import os, os.path
23import sys22import sys
23
24from datetime import *
24from PyQt4 import QtGui, QtCore, Qt25from PyQt4 import QtGui, QtCore, Qt
25from renderer import Renderer26from renderer import Renderer
2627
28import sys
29import linecache
30
31def traceit(frame, event, arg):
32 if event == "line":
33 lineno = frame.f_lineno
34 filename = frame.f_globals["__file__"]
35 if (filename.endswith(".pyc") or
36 filename.endswith(".pyo")):
37 filename = filename[:-1]
38 name = frame.f_globals["__name__"]
39 line = linecache.getline(filename, lineno)
40 if name.startswith("openlp"):
41 print "%s:%s: %s" % (name, lineno, line.rstrip())
42 return traceit
43
44
45
27class RenderManager:46class RenderManager:
28 """47 """
29 Class to pull all Renderer interactions into one place.48 Class to pull all Renderer interactions into one place.
@@ -51,6 +70,7 @@
51 self.theme = self.default_theme70 self.theme = self.default_theme
52 log.debug(u'theme is now %s', self.theme)71 log.debug(u'theme is now %s', self.theme)
53 self.themedata = self.theme_manager.getThemeData(self.theme)72 self.themedata = self.theme_manager.getThemeData(self.theme)
73 self.calculate_default(self.screen_list[self.current_display]['size'])
54 self.renderer.set_theme(self.themedata)74 self.renderer.set_theme(self.themedata)
55 self.build_text_rectangle(self.themedata)75 self.build_text_rectangle(self.themedata)
5676
@@ -74,7 +94,7 @@
74 self.renderer.set_text_rectangle(main_rect,footer_rect)94 self.renderer.set_text_rectangle(main_rect,footer_rect)
7595
76 def generate_preview(self, themedata):96 def generate_preview(self, themedata):
77 log.debug(u'generate preview ')97 log.debug(u'generate preview')
78 self.calculate_default(QtCore.QSize(800,600))98 self.calculate_default(QtCore.QSize(800,600))
79 self.renderer.set_theme(themedata)99 self.renderer.set_theme(themedata)
80 self.build_text_rectangle(themedata)100 self.build_text_rectangle(themedata)
@@ -102,11 +122,18 @@
102122
103 def generate_slide(self,main_text, footer_text):123 def generate_slide(self,main_text, footer_text):
104 log.debug(u'generate slide')124 log.debug(u'generate slide')
125 #sys.settrace(traceit)
126
105 self.calculate_default(self.screen_list[self.current_display]['size'])127 self.calculate_default(self.screen_list[self.current_display]['size'])
106128
129 bef = datetime.now()
107 frame = QtGui.QPixmap(self.width, self.height)130 frame = QtGui.QPixmap(self.width, self.height)
131 aft = datetime.now()
132 print "framebuild time", bef, aft, aft-bef
133
108 self.renderer.set_paint_dest(frame)134 self.renderer.set_paint_dest(frame)
109 answer=self.renderer.render_lines(main_text, footer_text)135 answer=self.renderer.render_lines(main_text, footer_text)
136 #sys.settrace()
110 return frame137 return frame
111138
112 def calculate_default(self, screen):139 def calculate_default(self, screen):
113140
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-05-04 13:48:12 +0000
+++ openlp/core/lib/serviceitem.py 2009-05-11 05:09:43 +0000
@@ -44,7 +44,6 @@
44 self.items = []44 self.items = []
45 self.iconic_representation = None45 self.iconic_representation = None
46 self.raw_slides = None46 self.raw_slides = None
47 self.format_slides = []
48 self.frames = []47 self.frames = []
49 self.raw_footer = None48 self.raw_footer = None
50 self.theme = None49 self.theme = None
@@ -74,11 +73,11 @@
74 else:73 else:
75 self.render_manager.set_override_theme(self.theme)74 self.render_manager.set_override_theme(self.theme)
76 log.debug(u'Formatting slides')75 log.debug(u'Formatting slides')
77 for slide in self.raw_slides:76 if len(self.frames) == 0 :
78 self.format_slides.append(self.render_manager.format_slide(slide, False))77 for slide in self.raw_slides:
79 log.debug(u'Rendering slides')78 formated = self.render_manager.format_slide(slide, False)
80 for slide in self.format_slides:79 frame = self.render_manager.generate_slide(formated, self.raw_footer)
81 self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))80 self.frames.append({u'formatted': formated, u'image': frame})
8281
8382
84 def get_parent_node(self):83 def get_parent_node(self):
8584
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-05-04 08:15:48 +0000
+++ openlp/core/ui/mainwindow.py 2009-05-09 07:01:33 +0000
@@ -92,6 +92,7 @@
92 self.ThemeManagerContents.eventManager = self.EventManager92 self.ThemeManagerContents.eventManager = self.EventManager
93 self.ThemeManagerContents.renderManager = self.RenderManager93 self.ThemeManagerContents.renderManager = self.RenderManager
94 self.ServiceManagerContents.renderManager = self.RenderManager94 self.ServiceManagerContents.renderManager = self.RenderManager
95 self.ServiceManagerContents.eventManager = self.EventManager
95 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents96 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
96 self.ThemeManagerContents.loadThemes()97 self.ThemeManagerContents.loadThemes()
9798
9899
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-05-04 08:15:48 +0000
+++ openlp/core/ui/servicemanager.py 2009-05-11 05:09:43 +0000
@@ -18,101 +18,97 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import os20import os
21import logging
2122
22from time import sleep23from time import sleep
23from copy import deepcopy24from copy import deepcopy
2425
25from PyQt4.QtCore import *26from PyQt4 import QtCore, QtGui
26from PyQt4.QtGui import *
2727
28# from openlp.core.resources import *
29# from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController
30from openlp.core.lib import OpenLPToolbar28from openlp.core.lib import OpenLPToolbar
31from openlp.core.lib import ServiceItem29from openlp.core.lib import ServiceItem
32from openlp.core.lib import RenderManager30from openlp.core.lib import RenderManager
33from openlp.core import translate31from openlp.core import translate
3432from openlp.core.lib import Event, EventType, EventManager
35# from openlp.core import PluginManager33
36import logging34#class ServiceData(QtCore.QAbstractItemModel):
3735# """
38class ServiceData(QAbstractItemModel):36# Tree of items for an order of service.
39 """37# Includes methods for reading and writing the contents to an OOS file
40 Tree of items for an order of service.38# Root contains a list of ServiceItems
41 Includes methods for reading and writing the contents to an OOS file39# """
42 Root contains a list of ServiceItems40# global log
43 """41# log=logging.getLogger(u'ServiceData')
44 global log42# def __init__(self):
45 log=logging.getLogger(u'ServiceData')43# QtCore.QAbstractItemModel.__init__(self)
46 def __init__(self):44# self.items=[]
47 QAbstractItemModel.__init__(self)45# log.info("Starting")
48 self.items=[]46#
49 log.info("Starting")47# def clearItems(self):
5048# self.items = []
51 def clearItems(self):49#
52 self.items = []50# def columnCount(self, parent=None):
5351# return 1; # always only a single column (for now)
54 def columnCount(self, parent):52#
55 return 1; # always only a single column (for now)53# def rowCount(self, parent=None):
5654# return len(self.items)
57 def rowCount(self, parent):55#
58 return len(self.items)56# def insertRow(self, row, service_item):
5957# self.beginInsertRows(QtCore.QModelIndex(),row,row)
60 def insertRow(self, row, service_item):58# log.info("insert row %s:%s" % (row,service_item))
61 self.beginInsertRows(QModelIndex(),row,row)59# self.items.insert(row, service_item)
62 log.info("insert row %s:%s" % (row,service_item))60# log.info("Items: %s" % self.items)
63 self.items.insert(row, service_item)61# self.endInsertRows()
64 log.info("Items: %s" % self.items)62#
65 self.endInsertRows()63# def removeRow(self, row):
6664# self.beginRemoveRows(QtCore.QModelIndex(), row,row)
67 def removeRow(self, row):65# self.items.pop(row)
68 self.beginRemoveRows(QModelIndex(), row,row)66# self.endRemoveRows()
69 self.items.pop(row)67#
70 self.endRemoveRows()68# def addRow(self, service_item):
7169# self.insertRow(len(self.items), service_item)
72 def addRow(self, item):70#
73 self.insertRow(len(self.items), item)71# def index(self, row, col, parent = QtCore.QModelIndex()):
7472# return self.createIndex(row,col)
75 def index(self, row, col, parent = QModelIndex()):73#
76 return self.createIndex(row,col)74# def parent(self, index=QtCore.QModelIndex()):
7775# return QtCore.QModelIndex() # no children as yet
78 def parent(self, index=QModelIndex()):76#
79 return QModelIndex() # no children as yet77# def data(self, index, role):
8078# """
81 def data(self, index, role):79# Called by the service manager to draw us in the service window
82 """80# """
83 Called by the service manager to draw us in the service window81# log.debug(u'data %s %d', index, role)
84 """82# row = index.row()
85 log.debug(u'data %s %d', index, role)83# if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
86 row=index.row()84# return QtCore.QVariant()
87 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!85# item = self.items[row]
88 return QVariant()86# if role == QtCore.Qt.DisplayRole:
89 item=self.items[row]87# retval= item.title + u':' + item.shortname
90 if role==Qt.DisplayRole:88# elif role == QtCore.Qt.DecorationRole:
91 retval= item.title + u':' + item.shortname89# retval = item.iconic_representation
92 elif role == Qt.DecorationRole:90# elif role == QtCore.Qt.ToolTipRole:
93 retval = item.iconic_representation91# retval = None
94 elif role == Qt.ToolTipRole:92# else:
95 retval= None93# retval = None
96 else:94# if retval == None:
97 retval= None95# retval = QtCore.QVariant()
98 if retval == None:96## log.info("Returning"+ str(retval))
99 retval=QVariant()97# if type(retval) is not type(QtCore.QVariant):
100# log.info("Returning"+ str(retval))98# return QtCore.QVariant(retval)
101 if type(retval) is not type(QVariant):99# else:
102 return QVariant(retval)100# return retval
103 else:101#
104 return retval102# def __iter__(self):
105103# for i in self.items:
106 def __iter__(self):104# yield i
107 for i in self.items:105#
108 yield i106# def item(self, row):
109107# log.info("Get Item:%d -> %s" %(row, str(self.items)))
110 def item(self, row):108# return self.items[row]
111 log.info("Get Item:%d -> %s" %(row, str(self.items)))109
112 return self.items[row]110
113111class ServiceManager(QtGui.QWidget):
114
115class ServiceManager(QWidget):
116112
117 """Manages the orders of service. Currently this involves taking113 """Manages the orders of service. Currently this involves taking
118 text strings from plugins and adding them to an OOS file. In114 text strings from plugins and adding them to an OOS file. In
@@ -124,48 +120,52 @@
124 log=logging.getLogger(u'ServiceManager')120 log=logging.getLogger(u'ServiceManager')
125121
126 def __init__(self, parent):122 def __init__(self, parent):
127 QWidget.__init__(self)123 QtGui.QWidget.__init__(self)
128 self.parent=parent124 self.parent=parent
129 self.Layout = QVBoxLayout(self)125 self.Layout = QtGui.QVBoxLayout(self)
130 self.Layout.setSpacing(0)126 self.Layout.setSpacing(0)
131 self.Layout.setMargin(0)127 self.Layout.setMargin(0)
132 self.Toolbar = OpenLPToolbar(self)128 self.Toolbar = OpenLPToolbar(self)
133 self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png",129 self.Toolbar.addToolbarButton(u'Move to top', u':/services/service_top.png',
134 translate(u'ServiceManager', u'Move to start'), self.onServiceTop)130 translate(u'ServiceManager', u'Move to top'), self.onServiceTop)
135 self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png",131 self.Toolbar.addToolbarButton(u'Move up', u':/services/service_up.png',
136 translate(u'ServiceManager', u'Move up order'), self.onServiceUp)132 translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
137 self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png",133 self.Toolbar.addToolbarButton(u'Move down', u':/services/service_down.png',
138 translate(u'ServiceManager', u'Move down order'), self.onServiceDown)134 translate(u'ServiceManager', u'Move down order'), self.onServiceDown)
139 self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png",135 self.Toolbar.addToolbarButton(u'Move to bottom', u':/services/service_bottom.png',
140 translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)136 translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)
141 self.Toolbar.addSeparator()137 self.Toolbar.addSeparator()
142 self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png",138 self.Toolbar.addToolbarButton(u'New Service', u':/services/service_new.png',
143 translate(u'ServiceManager', u'Create a new Service'), self.onNewService)139 translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
144 self.Toolbar.addToolbarButton("Delete From Service", ":/services/service_delete.png",140 self.Toolbar.addToolbarButton(u'Delete From Service', u':/services/service_delete.png',
145 translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)141 translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)
146 self.Toolbar.addSeparator()142 self.Toolbar.addSeparator()
147 self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png",143 self.Toolbar.addToolbarButton(u'Save Service', u':/services/service_save.png',
148 translate(u'ServiceManager', u'Save Service'), self.onSaveService)144 translate(u'ServiceManager', u'Save Service'), self.onSaveService)
149 self.Toolbar.addToolbarButton("Load Service", ":/services/service_open.png",145 self.Toolbar.addToolbarButton(u'Load Service', u':/services/service_open.png',
150 translate(u'ServiceManager', u'Load Existing'), self.onLoadService)146 translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
151147
152 self.Toolbar.addSeparator()148 self.Toolbar.addSeparator()
153 self.ThemeComboBox = QComboBox(self.Toolbar)149 self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)
154 self.ThemeComboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents)150 self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
155 self.ThemeWidget = QWidgetAction(self.Toolbar)151 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
156 self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)152 self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)
157 self.Toolbar.addAction(self.ThemeWidget)153 self.Toolbar.addAction(self.ThemeWidget)
158
159 self.Layout.addWidget(self.Toolbar)154 self.Layout.addWidget(self.Toolbar)
160155
161 self.TreeView = QTreeView(self)156 self.serviceManagerList = QtGui.QTreeWidget(self)
162 self.service_data=ServiceData()157 self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
163 self.TreeView.setModel(self.service_data)158 self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
164 self.TreeView.setAlternatingRowColors(True)159 self.serviceManagerList.setAlternatingRowColors(True)
165 self.Layout.addWidget(self.TreeView)160 self.serviceManagerList.setObjectName("serviceManagerList")
166161 self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
167 QObject.connect(self.ThemeComboBox,162 self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
168 SIGNAL("activated(int)"), self.onThemeComboBoxSelected)163 self.serviceManagerList .__class__.dropEvent =self.dropEvent
164
165 self.Layout.addWidget(self.serviceManagerList)
166
167 QtCore.QObject.connect(self.ThemeComboBox,
168 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
169169
170 def onServiceTop(self):170 def onServiceTop(self):
171 pass171 pass
@@ -191,40 +191,36 @@
191 def onLoadService(self):191 def onLoadService(self):
192 Pass192 Pass
193193
194
195
196
197 def onThemeComboBoxSelected(self, currentIndex):194 def onThemeComboBoxSelected(self, currentIndex):
198 self.renderManager.default_theme = self.ThemeComboBox.currentText()195 self.renderManager.default_theme = self.ThemeComboBox.currentText()
199196
200 def addServiceItem(self, item):197 def addServiceItem(self, item):
201 """Adds service item"""198 treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
202 log.info("addServiceItem")199 treewidgetitem.setText(0,item.title + u':' + item.shortname)
203 indexes=self.TreeView.selectedIndexes()200 treewidgetitem.setIcon(0,item.iconic_representation)
204 assert len(indexes) <= 1 # can only have one selected index in this view201 treewidgetitem.setExpanded(True)
205 if indexes == []:202 item.render()
206 log.info("No row")203 for frame in item.frames:
207 row = None204 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
208 selected_item = None205 text = frame[u'formatted'][0]
209 else:206 treewidgetitem1.setText(0,text[:10])
210 row=indexes[0].row()207 #treewidgetitem1.setIcon(0,frame[u'image'])
211 # if currently selected is of correct type, add it to it208
212 log.info("row:%d"%row)209 def dragEnterEvent(self, event):
213 selected_item=self.service_data.item(row)210 """
214211 Accept Drag events
215 if type(selected_item) == type(item):212 """
216 log.info("Add to existing item")213 event.accept()
217 selected_item.add(item)214
218 else:215 def dropEvent(self, event):
219 log.info("Create new item")216 """
220 if row is None:217 Handle the release of the event and trigger the plugin
221 self.service_data.addRow(item)218 to add the data
222 else:219 """
223 self.service_data.insertRow(row+1, item)220 link=event.mimeData()
224221 if link.hasText():
225 def removeServiceItem(self):222 plugin = event.mimeData().text()
226 """Remove currently selected item"""223 self.eventManager.post_event(Event(EventType.LoadServiceItem, plugin))
227 pass
228224
229 def oos_as_text(self):225 def oos_as_text(self):
230 text=[]226 text=[]
@@ -247,6 +243,9 @@
247 oosfile.close()243 oosfile.close()
248244
249 def updateThemeList(self, theme_list):245 def updateThemeList(self, theme_list):
246 """
247 Called from ThemeManager when the Themes have changed
248 """
250 self.ThemeComboBox.clear()249 self.ThemeComboBox.clear()
251 for theme in theme_list:250 for theme in theme_list:
252 self.ThemeComboBox.addItem(theme)251 self.ThemeComboBox.addItem(theme)
253252
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-05-04 13:48:12 +0000
+++ openlp/core/ui/slidecontroller.py 2009-05-11 05:09:43 +0000
@@ -20,13 +20,12 @@
20import logging20import logging
21import os21import os
2222
23from PyQt4.QtCore import *23from PyQt4 import QtCore, QtGui
24from PyQt4.QtGui import *
2524
26from openlp.core.lib import OpenLPToolbar25from openlp.core.lib import OpenLPToolbar
27from openlp.core import translate26from openlp.core import translate
2827
29class SlideData(QAbstractListModel):28class SlideData(QtCore.QAbstractListModel):
30 """29 """
31 Tree of items for an order of Theme.30 Tree of items for an order of Theme.
32 Includes methods for reading and writing the contents to an OOS file31 Includes methods for reading and writing the contents to an OOS file
@@ -36,13 +35,13 @@
36 log=logging.getLogger(u'SlideData')35 log=logging.getLogger(u'SlideData')
3736
38 def __init__(self):37 def __init__(self):
39 QAbstractListModel.__init__(self)38 QtCore.QAbstractListModel.__init__(self)
40 self.items=[]39 self.items=[]
41 self.rowheight=5040 self.rowheight=50
42 self.maximagewidth=self.rowheight*16/9.0;41 self.maximagewidth=self.rowheight*16/9.0;
43 log.info(u'Starting')42 log.info(u'Starting')
4443
45 def clearItems(self):44 def clear(self):
46 self.items=[]45 self.items=[]
4746
48 def columnCount(self, parent):47 def columnCount(self, parent):
@@ -51,36 +50,36 @@
51 def rowCount(self, parent=None):50 def rowCount(self, parent=None):
52 return len(self.items)51 return len(self.items)
5352
54 def insertRow(self, row, frame):53 def insertRow(self, row, frame, framenumber):
55 self.beginInsertRows(QModelIndex(),row,row)54 self.beginInsertRows(QtCore.QModelIndex(),row,row)
56 log.info(u'insert row %d' % row)55 log.info(u'insert row %d' % row)
57 # create a preview image56 # create a preview image
58 frame1 = frame.scaled(QSize(350,260))57 frame1 = frame.scaled(QtCore.QSize(350,260), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
59 self.items.insert(row,(frame1))58 self.items.insert(row,(frame1, framenumber))
60 log.info(u'Items: %s' % self.items)59 log.info(u'Items: %s' % self.items)
61 self.endInsertRows()60 self.endInsertRows()
6261
63 def removeRow(self, row):62 def removeRow(self, row):
64 self.beginRemoveRows(QModelIndex(), row,row)63 self.beginRemoveRows(QtCore.QModelIndex(), row,row)
65 self.items.pop(row)64 self.items.pop(row)
66 self.endRemoveRows()65 self.endRemoveRows()
6766
68 def addRow(self, frame):67 def addRow(self, frame, framenumber):
69 self.insertRow(len(self.items), frame)68 self.insertRow(len(self.items), frame, framenumber)
7069
71 def data(self, index, role):70 def data(self, index, role):
72 row=index.row()71 row=index.row()
73 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!72 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
74 return QVariant()73 return QtCore.QVariant()
75# if role==Qt.DisplayRole:74# if role==Qt.DisplayRole:
76# retval= self.items[row][1]75# retval= self.items[row][1]
77 if role == Qt.DecorationRole:76 if role == QtCore.Qt.DecorationRole:
78 retval= self.items[row]#[0]77 retval= self.items[row][0]
79 else:78 else:
80 retval= QVariant()79 retval= QtCore.QVariant()
81# log.info("Returning"+ str(retval))80# log.info("Returning"+ str(retval))
82 if type(retval) is not type(QVariant):81 if type(retval) is not type(QtCore.QVariant):
83 return QVariant(retval)82 return QtCore.QVariant(retval)
84 else:83 else:
85 return retval84 return retval
8685
@@ -101,75 +100,84 @@
101 return filelist100 return filelist
102101
103102
104class SlideController(QWidget):103class SlideController(QtGui.QWidget):
105 global log104 global log
106 log=logging.getLogger(u'SlideController')105 log=logging.getLogger(u'SlideController')
107106
108 def __init__(self, control_splitter, isLive):107 def __init__(self, control_splitter, isLive):
109 QWidget.__init__(self)108 QtGui.QWidget.__init__(self)
110 self.isLive = isLive109 self.isLive = isLive
111 self.Panel = QWidget(control_splitter)110 self.Panel = QtGui.QWidget(control_splitter)
112 self.Splitter = QSplitter(self.Panel)111 self.Splitter = QtGui.QSplitter(self.Panel)
113 self.Splitter.setOrientation(Qt.Vertical)112 self.Splitter.setOrientation(QtCore.Qt.Vertical)
114113
115 self.PanelLayout = QVBoxLayout(self.Panel)114 self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
116 self.PanelLayout.addWidget(self.Splitter)115 self.PanelLayout.addWidget(self.Splitter)
117 self.PanelLayout.setSpacing(50)116 self.PanelLayout.setSpacing(50)
118 self.PanelLayout.setMargin(0)117 self.PanelLayout.setMargin(0)
119118
120 self.Controller = QScrollArea(self.Splitter)119 self.Controller = QtGui.QScrollArea(self.Splitter)
121 self.Controller.setWidgetResizable(True)120 self.Controller.setWidgetResizable(True)
122121
123 self.PreviewListView = QListView(self.Splitter)122 self.PreviewListView = QtGui.QListView(self.Splitter)
123 self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
124 self.PreviewListView.setAlternatingRowColors(True)124 self.PreviewListView.setAlternatingRowColors(True)
125 self.PreviewListData = SlideData()125 self.PreviewListData = SlideData()
126 self.PreviewListView.setModel(self.PreviewListData)126 self.PreviewListView.setModel(self.PreviewListData)
127 self.PreviewListView.setSelectionRectVisible(True)
127128
128 self.Controller.setGeometry(QRect(0, 0, 828, 536))129 self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
129 self.Controller.setWidget(self.PreviewListView)130 self.Controller.setWidget(self.PreviewListView)
130131
131 self.Toolbar = OpenLPToolbar(self.Splitter)132 self.Toolbar = OpenLPToolbar(self.Splitter)
132 sizeToolbarPolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)133 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
133 sizeToolbarPolicy.setHorizontalStretch(0)134 sizeToolbarPolicy.setHorizontalStretch(0)
134 sizeToolbarPolicy.setVerticalStretch(0)135 sizeToolbarPolicy.setVerticalStretch(0)
135 sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())136 sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
136137
137 if self.isLive:138 if self.isLive:
138 self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_first.png",139 self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_first.png',
139 translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)140 translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
140 self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_previous.png",141 self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_previous.png',
141 translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)142 translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
142 self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_next.png",143 self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_next.png',
143 translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)144 translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
144 if self.isLive:145 if self.isLive:
145 self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_last.png",146 self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_last.png',
146 translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)147 translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
147 self.Toolbar.addSeparator()148 self.Toolbar.addSeparator()
148 self.Toolbar.addToolbarButton("Close Sscreen", ":/slides/slide_close.png",149 self.Toolbar.addToolbarButton(u'Close Screen', u':/slides/slide_close.png',
149 translate(u'SlideController', u'Close Screen'), self.onBlankScreen)150 translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
150151
151 self.Toolbar.setSizePolicy(sizeToolbarPolicy)152 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
152153
153 self.SlidePreview = QLabel(self.Splitter)154 self.SlidePreview = QtGui.QLabel(self.Splitter)
154 sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)155 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
155 sizePolicy.setHorizontalStretch(0)156 sizePolicy.setHorizontalStretch(0)
156 sizePolicy.setVerticalStretch(0)157 sizePolicy.setVerticalStretch(0)
157 sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())158 sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
158 self.SlidePreview.setSizePolicy(sizePolicy)159 self.SlidePreview.setSizePolicy(sizePolicy)
159 self.SlidePreview.setMinimumSize(QSize(250, 190))160 self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
160 self.SlidePreview.setFrameShape(QFrame.WinPanel)161 self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)
161 self.SlidePreview.setFrameShadow(QFrame.Sunken)162 self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)
162 self.SlidePreview.setLineWidth(1)163 self.SlidePreview.setLineWidth(1)
163 self.SlidePreview.setScaledContents(True)164 self.SlidePreview.setScaledContents(True)
164 self.SlidePreview.setObjectName("SlidePreview")165 self.SlidePreview.setObjectName(u'SlidePreview')
165166
166 QObject.connect(self.PreviewListView,167 QtCore.QObject.connect(self.PreviewListView,
167 SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)168 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
169 QtCore.QObject.connect(self.PreviewListView,
170 QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)
171
172
173
174 def onCurrentItemChanged(self, current, previous):
175 print u'Method slideControllerList currentItemChanged called', current, previous
168176
169 def onSlideSelectedFirst(self):177 def onSlideSelectedFirst(self):
170 row = self.PreviewListData.createIndex(0, 0)178 row = self.PreviewListData.createIndex(0, 0)
171 if row.isValid():179 if row.isValid():
172 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)180 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
173 self.onSlideSelected(row)181 self.onSlideSelected(row)
174182
175 def onSlideSelectedNext(self):183 def onSlideSelectedNext(self):
@@ -182,10 +190,9 @@
182 rowNumber = index.row() + 1190 rowNumber = index.row() + 1
183 row = self.PreviewListData.createIndex(rowNumber , 0)191 row = self.PreviewListData.createIndex(rowNumber , 0)
184 if row.isValid():192 if row.isValid():
185 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)193 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
186 self.onSlideSelected(row)194 self.onSlideSelected(row)
187195
188
189 def onSlideSelectedPrevious(self):196 def onSlideSelectedPrevious(self):
190 indexes = self.PreviewListView.selectedIndexes()197 indexes = self.PreviewListView.selectedIndexes()
191 rowNumber = 0198 rowNumber = 0
@@ -196,13 +203,13 @@
196 rowNumber = index.row() - 1203 rowNumber = index.row() - 1
197 row = self.PreviewListData.createIndex(rowNumber , 0)204 row = self.PreviewListData.createIndex(rowNumber , 0)
198 if row.isValid():205 if row.isValid():
199 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)206 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
200 self.onSlideSelected(row)207 self.onSlideSelected(row)
201208
202 def onSlideSelectedLast(self):209 def onSlideSelectedLast(self):
203 row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)210 row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
204 if row.isValid():211 if row.isValid():
205 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)212 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
206 self.onSlideSelected(row)213 self.onSlideSelected(row)
207214
208 def onBlankScreen(self):215 def onBlankScreen(self):
@@ -213,21 +220,25 @@
213 self.previewFrame(frame)220 self.previewFrame(frame)
214221
215 def previewFrame(self, frame):222 def previewFrame(self, frame):
216 self.SlidePreview.setPixmap(frame)223 self.SlidePreview.setPixmap(frame[0])
217 if self.isLive:224 if self.isLive:
218 self.mainDisplay.frameView(frame)225 no = frame[1]
226 LiveFrame = self.serviceitem.frames[no][u'image']
227 self.mainDisplay.frameView(LiveFrame)
219228
220 def addServiceItem(self, serviceitem):229 def addServiceItem(self, serviceitem):
221 log.debug(u'addServiceItem')230 log.debug(u'addServiceItem')
222 self.serviceitem = serviceitem231 self.serviceitem = serviceitem
223 self.serviceitem.render()232 self.serviceitem.render()
224 self.PreviewListData.clearItems()233 self.PreviewListData.clear()
234 framenumber = 0
225 for frame in self.serviceitem.frames:235 for frame in self.serviceitem.frames:
226 self.PreviewListData.addRow(frame)236 self.PreviewListData.addRow(frame[u'image'], framenumber)
237 framenumber += 1
227238
228 row = self.PreviewListData.createIndex(0, 0)239 row = self.PreviewListData.createIndex(0, 0)
229 if row.isValid():240 if row.isValid():
230 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)241 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
231 self.onSlideSelected(row)242 self.onSlideSelected(row)
232243
233 def render(self):244 def render(self):
234245
=== modified file 'openlp/core/ui/test/test_service_manager.py'
--- openlp/core/ui/test/test_service_manager.py 2009-03-04 21:57:18 +0000
+++ openlp/core/ui/test/test_service_manager.py 2009-05-09 07:01:33 +0000
@@ -25,7 +25,7 @@
25mypath=os.path.split(os.path.abspath(__file__))[0]25mypath=os.path.split(os.path.abspath(__file__))[0]
26sys.path.insert(0,(os.path.join(mypath, '..','..', '..','..')))26sys.path.insert(0,(os.path.join(mypath, '..','..', '..','..')))
27from openlp.core.ui import ServiceManager27from openlp.core.ui import ServiceManager
28from openlp.plugins.images import ImageServiceItem28from openlp.plugins.images.lib import ImageServiceItem
2929
30import logging30import logging
31logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w")31logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w")
@@ -47,7 +47,7 @@
47 app = QtGui.QApplication([])47 app = QtGui.QApplication([])
48 except UnboundLocalError:48 except UnboundLocalError:
49 app = QtGui.QApplication([])49 app = QtGui.QApplication([])
50 50
5151
52 def teardown_class(self):52 def teardown_class(self):
53 pass53 pass
@@ -84,7 +84,7 @@
84 assert lines[0].startswith("# <openlp.plugins.images.imageserviceitem.ImageServiceItem object")84 assert lines[0].startswith("# <openlp.plugins.images.imageserviceitem.ImageServiceItem object")
85 assert lines[1] == "test.gif"85 assert lines[1] == "test.gif"
86 log.info("done")86 log.info("done")
87 87
88 def test_2items_as_separate_items(self):88 def test_2items_as_separate_items(self):
89 # If nothing is selected when item is added, a new base service item is added89 # If nothing is selected when item is added, a new base service item is added
90 log.info("test_2items_as_separate_items")90 log.info("test_2items_as_separate_items")
@@ -105,7 +105,7 @@
105 assert lines[3] == "test2.gif"105 assert lines[3] == "test2.gif"
106 assert lines[4] == "test3.gif"106 assert lines[4] == "test3.gif"
107 log.info("done")107 log.info("done")
108 108
109 def test_2items_merged(self):109 def test_2items_merged(self):
110 # If the first object is selected when item is added it should be extended110 # If the first object is selected when item is added it should be extended
111 log.info("test_2items_merged")111 log.info("test_2items_merged")
@@ -134,7 +134,7 @@
134 # move to top, bottom134 # move to top, bottom
135 # new and save as135 # new and save as
136 # deleting items136 # deleting items
137 137
138if __name__=="__main__":138if __name__=="__main__":
139139
140 t=TestServiceManager_base()140 t=TestServiceManager_base()
141141
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-05-04 08:15:48 +0000
+++ openlp/core/ui/thememanager.py 2009-05-11 05:09:43 +0000
@@ -72,7 +72,7 @@
72 preview = QPixmap(str(filename))72 preview = QPixmap(str(filename))
73 width = self.maximagewidth73 width = self.maximagewidth
74 height = self.rowheight74 height = self.rowheight
75 preview = preview.scaled(width, height, Qt.KeepAspectRatio)75 preview = preview.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation)
76 realwidth = preview.width()76 realwidth = preview.width()
77 realheight = preview.height()77 realheight = preview.height()
78 # and move it to the centre of the preview space78 # and move it to the centre of the preview space
7979
=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py 2009-04-10 06:06:41 +0000
+++ openlp/plugins/custom/customplugin.py 2009-05-09 07:01:33 +0000
@@ -60,3 +60,6 @@
60 if event.event_type == EventType.ThemeListChanged:60 if event.event_type == EventType.ThemeListChanged:
61 log.debug(u'New Theme request received')61 log.debug(u'New Theme request received')
62 self.edit_custom_form.loadThemes(self.theme_manager.getThemes())62 self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
63 if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
64 log.debug(u'Load Service Item received')
65 self.media_item.onCustomAddClick()
6366
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-05-04 13:48:12 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-05-09 07:01:33 +0000
@@ -109,6 +109,8 @@
109 self.CustomListView.setAlternatingRowColors(True)109 self.CustomListView.setAlternatingRowColors(True)
110 self.CustomListData = TextListData()110 self.CustomListData = TextListData()
111 self.CustomListView.setModel(self.CustomListData)111 self.CustomListView.setModel(self.CustomListData)
112 self.CustomListView.setDragEnabled(True)
113 self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
112114
113 self.PageLayout.addWidget(self.CustomListView)115 self.PageLayout.addWidget(self.CustomListView)
114116
@@ -233,3 +235,27 @@
233 service_item.title = title235 service_item.title = title
234 service_item.raw_slides = raw_slides236 service_item.raw_slides = raw_slides
235 service_item.raw_footer = raw_footer237 service_item.raw_footer = raw_footer
238
239 def onMouseMoveEvent(self, event):
240 """
241 Drag and drop eventDo not care what data is selected
242 as the recepient will use events to request the data move
243 just tell it what plugin to call
244 """
245 if event.buttons() != QtCore.Qt.LeftButton:
246 return
247
248 items = self.CustomListView.selectedIndexes()
249 if items == []:
250 return
251
252 drag = QtGui.QDrag(self)
253 mimeData = QtCore.QMimeData()
254 drag.setMimeData(mimeData)
255 for item in items:
256 mimeData.setText(u'Custom')
257
258 dropAction = drag.start(QtCore.Qt.CopyAction)
259
260 if dropAction == QtCore.Qt.CopyAction:
261 self.close()
236262
=== modified file 'openlp/plugins/images/__init__.py'
--- openlp/plugins/images/__init__.py 2009-03-07 09:21:27 +0000
+++ openlp/plugins/images/__init__.py 2009-05-11 05:09:43 +0000
@@ -18,6 +18,6 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
2020
21from imageplugin import ImagePlugin21#from imageplugin import ImagePlugin
22from imageserviceitem import ImageServiceItem22#from imageserviceitem import ImageServiceItem
2323
2424
=== modified file 'openlp/plugins/images/lib/imageserviceitem.py'
--- openlp/plugins/images/lib/imageserviceitem.py 2009-03-17 05:05:04 +0000
+++ openlp/plugins/images/lib/imageserviceitem.py 2009-05-09 07:01:33 +0000
@@ -39,7 +39,7 @@
39 it simply tells the slide controller to use it???39 it simply tells the slide controller to use it???
4040
41 It contains 1 or more images41 It contains 1 or more images
42 42
43 """43 """
44 global log44 global log
45 log=logging.getLogger("ImageServiceItem")45 log=logging.getLogger("ImageServiceItem")
@@ -56,7 +56,7 @@
56# c.uniformItemSizes=True56# c.uniformItemSizes=True
57# c.setModel(self.imgs)57# c.setModel(self.imgs)
58# c.setGeometry(0,0,200,200)58# c.setGeometry(0,0,200,200)
59 59
60 def render(self):60 def render(self):
61 """61 """
62 The render method is what the plugin uses to render its meda to the62 The render method is what the plugin uses to render its meda to the
@@ -64,7 +64,7 @@
64 """64 """
65 # render the "image chooser first"65 # render the "image chooser first"
66# for f in self.imgs:66# for f in self.imgs:
67# fl , nm = os.path.split(str(f)) 67# fl , nm = os.path.split(str(f))
68# c = self.slide_controller.rowCount()68# c = self.slide_controller.rowCount()
69# self.slide_controller.setRowCount(c+1)69# self.slide_controller.setRowCount(c+1)
70# twi = QtGui.QTableWidgetItem(str(f))70# twi = QtGui.QTableWidgetItem(str(f))
@@ -72,7 +72,7 @@
72# twi = QtGui.QTableWidgetItem(str(nm))72# twi = QtGui.QTableWidgetItem(str(nm))
73# self.slide_controller.setItem(c , 1, twi)73# self.slide_controller.setItem(c , 1, twi)
74# self.slide_controller.setRowHeight(c, 80)74# self.slide_controller.setRowHeight(c, 80)
75 75
76 # render the preview screen here76 # render the preview screen here
7777
78 def get_parent_node(self):78 def get_parent_node(self):
@@ -92,7 +92,7 @@
92 log.info("add Item..."+str(data))92 log.info("add Item..."+str(data))
93 for filename in data.get_file_list():93 for filename in data.get_file_list():
94 self.add(filename)94 self.add(filename)
95 95
9696
97 def get_oos_text(self):97 def get_oos_text(self):
98 """98 """
@@ -100,7 +100,7 @@
100 """100 """
101 log.info("Get oos text")101 log.info("Get oos text")
102 log.info(str(self.imgs))102 log.info(str(self.imgs))
103 log.info(str(self.imgs.get_file_list()))103# log.info(str(self.imgs.get_file_list()))
104 return '\n'.join(self.imgs.get_file_list())104 return '\n'.join(self.imgs.get_file_list())
105105
106 def set_from_oos(self, text):106 def set_from_oos(self, text):
@@ -111,4 +111,4 @@
111 files=text.split('\n')111 files=text.split('\n')
112 for f in files:112 for f in files:
113 self.imgs.addRow(f)113 self.imgs.addRow(f)
114 114
115115
=== modified file 'openlp/plugins/images/lib/listwithpreviews.py'
--- openlp/plugins/images/lib/listwithpreviews.py 2009-03-08 12:41:07 +0000
+++ openlp/plugins/images/lib/listwithpreviews.py 2009-05-11 05:09:43 +0000
@@ -29,7 +29,7 @@
29 if os.path.exists(filename):29 if os.path.exists(filename):
30 preview = QPixmap(str(filename))30 preview = QPixmap(str(filename))
31 w=self.maximagewidth;h=self.rowheight31 w=self.maximagewidth;h=self.rowheight
32 preview = preview.scaled(w,h, Qt.KeepAspectRatio)32 preview = preview.scaled(w,h, Qt.KeepAspectRatio, Qt.SmoothTransformation)
33 realw=preview.width(); realh=preview.height()33 realw=preview.width(); realh=preview.height()
34 # and move it to the centre of the preview space34 # and move it to the centre of the preview space
35 p=QPixmap(w,h)35 p=QPixmap(w,h)
3636
=== removed file 'resources/.openlp/data/bible/afr1953.sqlite'
37Binary files resources/.openlp/data/bible/afr1953.sqlite 2009-05-01 16:29:36 +0000 and resources/.openlp/data/bible/afr1953.sqlite 1970-01-01 00:00:00 +0000 differ37Binary files resources/.openlp/data/bible/afr1953.sqlite 2009-05-01 16:29:36 +0000 and resources/.openlp/data/bible/afr1953.sqlite 1970-01-01 00:00:00 +0000 differ