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

ServiceManager now works with drag and drop from Custom, Bible and Images
ServiceManager now posts serviceitems to Live and Preview Controllers selecting start point.
Custom, Bible and Images plugins are now Drag aware
Some refactoring to confuse people.

Revision history for this message
Martin Thompson (mjthompson) wrote :

I'm not sure it's too pythonic to have code in __init__.py, but I don;t think it's a hard and fast rule...

Other than that, I don't know enough about Qt events to do more than nit-pick thus:

        def onImageAddClick(self):
818 - """Add this item to the OOS"""
819 - pass
820 + log.debug(u'Image Live Requested')

Should be "Image Add Requested"?

Also, in handle_event() in imageplugin, customplugin, bibleplugin - there's some log calls which don;t match the event (they all say "LoadServiceItem")

I guess at some point, we should make the size of the previews configurable (or otherwise intelligent based on screen size?) Or mousewheel zoomable?

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

Mostly looks fine to me.

review: Approve
Revision history for this message
Tim Bentley (trb143) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/__init__.py'
2--- openlp/__init__.py 2009-04-28 19:20:03 +0000
3+++ openlp/__init__.py 2009-05-13 19:47:25 +0000
4@@ -15,7 +15,24 @@
5 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
6 Place, Suite 330, Boston, MA 02111-1307 USA
7 """
8-__all__ = ['convertStringToBoolean']
9+import types
10+from PyQt4 import QtCore, QtGui
11+
12+__all__ = ['convertStringToBoolean','buildIcon',]
13
14 def convertStringToBoolean(stringvalue):
15 return stringvalue.strip().lower() in (u'true', u'yes', u'y')
16+
17+def buildIcon(icon):
18+ ButtonIcon = None
19+ if type(icon) is QtGui.QIcon:
20+ ButtonIcon = icon
21+ elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
22+ ButtonIcon = QtGui.QIcon()
23+ if icon.startswith(u':/'):
24+ ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
25+ QtGui.QIcon.Off)
26+ else:
27+ ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)),
28+ QtGui.QIcon.Normal, QtGui.QIcon.Off)
29+ return ButtonIcon
30
31=== modified file 'openlp/core/lib/event.py'
32--- openlp/core/lib/event.py 2009-05-09 07:01:33 +0000
33+++ openlp/core/lib/event.py 2009-05-12 21:06:35 +0000
34@@ -37,10 +37,12 @@
35 AfterSaveService = 4
36 LoadServiceItem = 5
37 # Preview events
38- PreviewBeforeLoad = 11
39- PreviewAfterLoad = 12
40- PreviewBeforeShow = 13
41- PreviewAfterShow = 14
42+ PreviewShow = 10
43+ LiveShow = 11
44+ #PreviewBeforeLoad = 11
45+ #PreviewAfterLoad = 12
46+ #PreviewBeforeShow = 13
47+ #PreviewAfterShow = 14
48
49 ThemeListChanged = 15
50
51
52=== modified file 'openlp/core/lib/mediamanageritem.py'
53--- openlp/core/lib/mediamanageritem.py 2009-03-02 22:12:14 +0000
54+++ openlp/core/lib/mediamanageritem.py 2009-05-13 19:47:25 +0000
55@@ -20,7 +20,6 @@
56 import types
57
58 from PyQt4 import QtCore, QtGui
59-from openlp.core.resources import *
60 from openlp.core.lib.toolbar import *
61
62 class MediaManagerItem(QtGui.QWidget):
63
64=== modified file 'openlp/core/lib/serviceitem.py'
65--- openlp/core/lib/serviceitem.py 2009-05-11 05:09:43 +0000
66+++ openlp/core/lib/serviceitem.py 2009-05-13 19:47:25 +0000
67@@ -18,12 +18,12 @@
68 Place, Suite 330, Boston, MA 02111-1307 USA
69 """
70 import logging
71-import types
72 import time
73-
74+from openlp import buildIcon
75 from PyQt4.QtCore import *
76 from PyQt4.QtGui import *
77
78+
79 class ServiceItem():
80 """
81 The service item is a base class for the plugins to use to interact with
82@@ -50,18 +50,7 @@
83 log.debug(u'Service item created for %s', self.shortname)
84
85 def addIcon(self, icon):
86- ButtonIcon = None
87- if type(icon) is QIcon:
88- ButtonIcon = icon
89- elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
90- ButtonIcon = QIcon()
91- if icon.startswith(u':/'):
92- ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
93- QIcon.Off)
94- else:
95- ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
96- QIcon.Normal, QIcon.Off)
97- self.iconic_representation = ButtonIcon
98+ self.iconic_representation = buildIcon(icon)
99
100 def render(self):
101 """
102
103=== modified file 'openlp/core/ui/mainwindow.py'
104--- openlp/core/ui/mainwindow.py 2009-05-09 07:01:33 +0000
105+++ openlp/core/ui/mainwindow.py 2009-05-14 18:00:36 +0000
106@@ -88,11 +88,17 @@
107 self.plugin_manager.initialise_plugins()
108
109 # Once all components are initialised load the Themes
110- log.info(u'Load Themes')
111+ log.info(u'Load Themes and Managers')
112+ self.PreviewController.eventManager = self.EventManager
113+ self.PreviewController.serviceManager = self.ServiceManagerContents
114+ self.LiveController.eventManager = self.EventManager
115+ self.LiveController.serviceManager = self.ServiceManagerContents
116 self.ThemeManagerContents.eventManager = self.EventManager
117 self.ThemeManagerContents.renderManager = self.RenderManager
118 self.ServiceManagerContents.renderManager = self.RenderManager
119 self.ServiceManagerContents.eventManager = self.EventManager
120+ self.ServiceManagerContents.liveController = self.LiveController
121+ self.ServiceManagerContents.previewController = self.PreviewController
122 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
123 self.ThemeManagerContents.loadThemes()
124
125
126=== modified file 'openlp/core/ui/servicemanager.py'
127--- openlp/core/ui/servicemanager.py 2009-05-11 05:09:43 +0000
128+++ openlp/core/ui/servicemanager.py 2009-05-14 18:00:36 +0000
129@@ -20,94 +20,15 @@
130 import os
131 import logging
132
133-from time import sleep
134-from copy import deepcopy
135-
136 from PyQt4 import QtCore, QtGui
137
138 from openlp.core.lib import OpenLPToolbar
139 from openlp.core.lib import ServiceItem
140 from openlp.core.lib import RenderManager
141 from openlp.core import translate
142+from openlp import buildIcon
143 from openlp.core.lib import Event, EventType, EventManager
144
145-#class ServiceData(QtCore.QAbstractItemModel):
146-# """
147-# Tree of items for an order of service.
148-# Includes methods for reading and writing the contents to an OOS file
149-# Root contains a list of ServiceItems
150-# """
151-# global log
152-# log=logging.getLogger(u'ServiceData')
153-# def __init__(self):
154-# QtCore.QAbstractItemModel.__init__(self)
155-# self.items=[]
156-# log.info("Starting")
157-#
158-# def clearItems(self):
159-# self.items = []
160-#
161-# def columnCount(self, parent=None):
162-# return 1; # always only a single column (for now)
163-#
164-# def rowCount(self, parent=None):
165-# return len(self.items)
166-#
167-# def insertRow(self, row, service_item):
168-# self.beginInsertRows(QtCore.QModelIndex(),row,row)
169-# log.info("insert row %s:%s" % (row,service_item))
170-# self.items.insert(row, service_item)
171-# log.info("Items: %s" % self.items)
172-# self.endInsertRows()
173-#
174-# def removeRow(self, row):
175-# self.beginRemoveRows(QtCore.QModelIndex(), row,row)
176-# self.items.pop(row)
177-# self.endRemoveRows()
178-#
179-# def addRow(self, service_item):
180-# self.insertRow(len(self.items), service_item)
181-#
182-# def index(self, row, col, parent = QtCore.QModelIndex()):
183-# return self.createIndex(row,col)
184-#
185-# def parent(self, index=QtCore.QModelIndex()):
186-# return QtCore.QModelIndex() # no children as yet
187-#
188-# def data(self, index, role):
189-# """
190-# Called by the service manager to draw us in the service window
191-# """
192-# log.debug(u'data %s %d', index, role)
193-# row = index.row()
194-# if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
195-# return QtCore.QVariant()
196-# item = self.items[row]
197-# if role == QtCore.Qt.DisplayRole:
198-# retval= item.title + u':' + item.shortname
199-# elif role == QtCore.Qt.DecorationRole:
200-# retval = item.iconic_representation
201-# elif role == QtCore.Qt.ToolTipRole:
202-# retval = None
203-# else:
204-# retval = None
205-# if retval == None:
206-# retval = QtCore.QVariant()
207-## log.info("Returning"+ str(retval))
208-# if type(retval) is not type(QtCore.QVariant):
209-# return QtCore.QVariant(retval)
210-# else:
211-# return retval
212-#
213-# def __iter__(self):
214-# for i in self.items:
215-# yield i
216-#
217-# def item(self, row):
218-# log.info("Get Item:%d -> %s" %(row, str(self.items)))
219-# return self.items[row]
220-
221-
222 class ServiceManager(QtGui.QWidget):
223
224 """Manages the orders of service. Currently this involves taking
225@@ -122,6 +43,7 @@
226 def __init__(self, parent):
227 QtGui.QWidget.__init__(self)
228 self.parent=parent
229+ self.serviceItems=[]
230 self.Layout = QtGui.QVBoxLayout(self)
231 self.Layout.setSpacing(0)
232 self.Layout.setMargin(0)
233@@ -153,20 +75,48 @@
234 self.Toolbar.addAction(self.ThemeWidget)
235 self.Layout.addWidget(self.Toolbar)
236
237- self.serviceManagerList = QtGui.QTreeWidget(self)
238- self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
239- self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
240- self.serviceManagerList.setAlternatingRowColors(True)
241- self.serviceManagerList.setObjectName("serviceManagerList")
242- self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
243- self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
244- self.serviceManagerList .__class__.dropEvent =self.dropEvent
245-
246- self.Layout.addWidget(self.serviceManagerList)
247+ self.ServiceManagerList = QtGui.QTreeWidget(self)
248+ self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
249+ self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
250+ self.ServiceManagerList.setAlternatingRowColors(True)
251+ self.ServiceManagerList.setObjectName("ServiceManagerList")
252+ #endable drop
253+ self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
254+ self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
255+ self.ServiceManagerList .__class__.dropEvent =self.dropEvent
256+
257+ self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
258+
259+ self.ServiceManagerList.addAction(self.contextMenuAction(
260+ self.ServiceManagerList, ':/system/system_preview.png',
261+ translate(u'ServiceManager',u'&Preview Verse'), self.makePreview))
262+ self.ServiceManagerList.addAction(self.contextMenuAction(
263+ self.ServiceManagerList, ':/system/system_live.png',
264+ translate(u'ServiceManager',u'&Show Live'), self.makeLive))
265+ self.ServiceManagerList.addAction(self.contextMenuSeparator(self.ServiceManagerList))
266+ self.ServiceManagerList.addAction(self.contextMenuAction(
267+ self.ServiceManagerList, ':/services/service_delete',
268+ translate(u'ServiceManager',u'&Remove from Service'), self.onDeleteFromService))
269+
270+ self.Layout.addWidget(self.ServiceManagerList)
271
272 QtCore.QObject.connect(self.ThemeComboBox,
273 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
274
275+ def contextMenuAction(self, base, icon, text, slot):
276+ """
277+ Utility method to help build context menus for plugins
278+ """
279+ action = QtGui.QAction(text, base)
280+ action .setIcon(buildIcon(icon))
281+ QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
282+ return action
283+
284+ def contextMenuSeparator(self, base):
285+ action = QtGui.QAction("", base)
286+ action.setSeparator(True)
287+ return action
288+
289 def onServiceTop(self):
290 pass
291
292@@ -195,16 +145,43 @@
293 self.renderManager.default_theme = self.ThemeComboBox.currentText()
294
295 def addServiceItem(self, item):
296- treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
297+ self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})
298+ treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
299 treewidgetitem.setText(0,item.title + u':' + item.shortname)
300 treewidgetitem.setIcon(0,item.iconic_representation)
301+ treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
302 treewidgetitem.setExpanded(True)
303 item.render()
304+ count = 0
305 for frame in item.frames:
306 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
307 text = frame[u'formatted'][0]
308- treewidgetitem1.setText(0,text[:10])
309- #treewidgetitem1.setIcon(0,frame[u'image'])
310+ treewidgetitem1.setText(0,text[:30])
311+ treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
312+ count = count + 1
313+
314+ def makePreview(self):
315+ item, count = self.findServiceItem()
316+ self.previewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
317+
318+ def makeLive(self):
319+ item, count = self.findServiceItem()
320+ self.liveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
321+
322+ def findServiceItem(self):
323+ items = self.ServiceManagerList.selectedItems()
324+ pos = 0
325+ count = 0
326+ for item in items:
327+ childCount = item.childCount()
328+ if childCount >= 1: # is the parent
329+ pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
330+ else:
331+ parentitem = item.parent()
332+ pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
333+ count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
334+ pos = pos - 1 #adjust for zeor indexing
335+ return pos, count
336
337 def dragEnterEvent(self, event):
338 """
339
340=== modified file 'openlp/core/ui/slidecontroller.py'
341--- openlp/core/ui/slidecontroller.py 2009-05-11 05:09:43 +0000
342+++ openlp/core/ui/slidecontroller.py 2009-05-14 18:00:36 +0000
343@@ -24,6 +24,7 @@
344
345 from openlp.core.lib import OpenLPToolbar
346 from openlp.core import translate
347+from openlp.core.lib import Event, EventType, EventManager
348
349 class SlideData(QtCore.QAbstractListModel):
350 """
351@@ -41,6 +42,10 @@
352 self.maximagewidth=self.rowheight*16/9.0;
353 log.info(u'Starting')
354
355+ def eventFilter(self, obj, event):
356+ print obj, event
357+ return false
358+
359 def clear(self):
360 self.items=[]
361
362@@ -54,7 +59,7 @@
363 self.beginInsertRows(QtCore.QModelIndex(),row,row)
364 log.info(u'insert row %d' % row)
365 # create a preview image
366- frame1 = frame.scaled(QtCore.QSize(350,260), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
367+ frame1 = frame.scaled(QtCore.QSize(300,225), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
368 self.items.insert(row,(frame1, framenumber))
369 log.info(u'Items: %s' % self.items)
370 self.endInsertRows()
371@@ -71,13 +76,10 @@
372 row=index.row()
373 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
374 return QtCore.QVariant()
375-# if role==Qt.DisplayRole:
376-# retval= self.items[row][1]
377 if role == QtCore.Qt.DecorationRole:
378 retval= self.items[row][0]
379 else:
380 retval= QtCore.QVariant()
381-# log.info("Returning"+ str(retval))
382 if type(retval) is not type(QtCore.QVariant):
383 return QtCore.QVariant(retval)
384 else:
385@@ -117,17 +119,26 @@
386 self.PanelLayout.setMargin(0)
387
388 self.Controller = QtGui.QScrollArea(self.Splitter)
389+ self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
390 self.Controller.setWidgetResizable(True)
391-
392- self.PreviewListView = QtGui.QListView(self.Splitter)
393- self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
394- self.PreviewListView.setAlternatingRowColors(True)
395+ self.Controller.setObjectName("scrollArea")
396+
397+ self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
398+ self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
399+ self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
400+ self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
401+ self.gridLayout.setObjectName("gridLayout")
402+
403+ self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
404 self.PreviewListData = SlideData()
405+ self.PreviewListView.isLive = self.isLive
406 self.PreviewListView.setModel(self.PreviewListData)
407 self.PreviewListView.setSelectionRectVisible(True)
408+ self.PreviewListView.setSpacing(5)
409+ self.PreviewListView.setObjectName("PreviewListView")
410
411- self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
412- self.Controller.setWidget(self.PreviewListView)
413+ self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
414+ self.Controller.setWidget(self.scrollAreaWidgetContents)
415
416 self.Toolbar = OpenLPToolbar(self.Splitter)
417 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
418@@ -151,7 +162,17 @@
419
420 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
421
422- self.SlidePreview = QtGui.QLabel(self.Splitter)
423+ self.PreviewFrame = QtGui.QFrame(self.Splitter)
424+ self.PreviewFrame.setGeometry(QtCore.QRect(50, 270, 250, 190))
425+ self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
426+ self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
427+ self.PreviewFrame.setObjectName(u'PreviewFrame')
428+
429+ self.grid = QtGui.QGridLayout(self.PreviewFrame)
430+ self.grid.setMargin(10)
431+ self.grid.setObjectName(u'grid')
432+
433+ self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
434 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
435 sizePolicy.setHorizontalStretch(0)
436 sizePolicy.setVerticalStretch(0)
437@@ -163,16 +184,12 @@
438 self.SlidePreview.setLineWidth(1)
439 self.SlidePreview.setScaledContents(True)
440 self.SlidePreview.setObjectName(u'SlidePreview')
441+ self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
442
443 QtCore.QObject.connect(self.PreviewListView,
444 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
445 QtCore.QObject.connect(self.PreviewListView,
446- QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)
447-
448-
449-
450- def onCurrentItemChanged(self, current, previous):
451- print u'Method slideControllerList currentItemChanged called', current, previous
452+ QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
453
454 def onSlideSelectedFirst(self):
455 row = self.PreviewListData.createIndex(0, 0)
456@@ -241,5 +258,9 @@
457 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
458 self.onSlideSelected(row)
459
460- def render(self):
461- pass
462+ def addServiceManagerItem(self, serviceitem, slideno):
463+ self.addServiceItem(serviceitem)
464+ row = self.PreviewListData.createIndex(slideno, 0)
465+ if row.isValid():
466+ self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
467+ self.onSlideSelected(row)
468
469=== modified file 'openlp/plugins/bibles/bibleplugin.py'
470--- openlp/plugins/bibles/bibleplugin.py 2009-04-10 06:06:41 +0000
471+++ openlp/plugins/bibles/bibleplugin.py 2009-05-12 21:06:35 +0000
472@@ -23,7 +23,6 @@
473 from PyQt4.QtCore import *
474 from PyQt4.QtGui import *
475
476-from openlp.core.resources import *
477 from openlp.core.lib import Plugin, Event
478 from openlp.core.lib import EventType
479
480@@ -83,7 +82,16 @@
481 """
482 Handle the event contained in the event object.
483 """
484- log.debug(u'Handle event called with event %s'%event.event_type)
485+ log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
486 if event.event_type == EventType.ThemeListChanged:
487 log.debug(u'New Theme request received')
488 #self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
489+ if event.event_type == EventType.LoadServiceItem and event.payload == 'Bibles':
490+ log.debug(u'Load Service Item received')
491+ self.media_item.onBibleAddClick()
492+ if event.event_type == EventType.PreviewShow and event.payload == 'Bibles':
493+ log.debug(u'Load Service Item received')
494+ self.media_item.onBiblePreviewClick()
495+ if event.event_type == EventType.LiveShow and event.payload == 'Bibles':
496+ log.debug(u'Load Service Item received')
497+ self.media_item.onBibleLiveClick()
498
499=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
500--- openlp/plugins/bibles/lib/mediaitem.py 2009-05-04 08:15:48 +0000
501+++ openlp/plugins/bibles/lib/mediaitem.py 2009-05-13 19:47:25 +0000
502@@ -28,6 +28,30 @@
503 from openlp.plugins.bibles.forms import BibleImportForm
504 from openlp.plugins.bibles.lib import TextListData
505
506+class BibleList(QtGui.QListView):
507+
508+ def __init__(self,parent=None,name=None):
509+ QtGui.QListView.__init__(self,parent)
510+
511+ def mouseMoveEvent(self, event):
512+ """
513+ Drag and drop event does not care what data is selected
514+ as the recepient will use events to request the data move
515+ just tell it what plugin to call
516+ """
517+ if event.buttons() != QtCore.Qt.LeftButton:
518+ return
519+ drag = QtGui.QDrag(self)
520+ mimeData = QtCore.QMimeData()
521+ drag.setMimeData(mimeData)
522+ mimeData.setText(u'Bibles')
523+
524+ dropAction = drag.start(QtCore.Qt.CopyAction)
525+
526+ if dropAction == QtCore.Qt.CopyAction:
527+ self.close()
528+
529+
530 class BibleMediaItem(MediaManagerItem):
531 """
532 This is the custom media manager item for Bibles.
533@@ -179,11 +203,12 @@
534 # Add the search tab widget to the page layout
535 self.PageLayout.addWidget(self.SearchTabWidget)
536
537- self.BibleListView = QtGui.QListView()
538+ self.BibleListView = BibleList()
539 self.BibleListView.setAlternatingRowColors(True)
540 self.BibleListData = TextListData()
541 self.BibleListView.setModel(self.BibleListData)
542- self.BibleListView.setSelectionMode(2)
543+ self.BibleListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
544+ self.BibleListView.setDragEnabled(True)
545
546 self.PageLayout.addWidget(self.BibleListView)
547
548@@ -205,6 +230,7 @@
549 QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
550 # Context Menus
551 self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
552+
553 self.BibleListView.addAction(self.contextMenuAction(
554 self.BibleListView, ':/system/system_preview.png',
555 translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick))
556
557=== modified file 'openlp/plugins/custom/customplugin.py'
558--- openlp/plugins/custom/customplugin.py 2009-05-09 07:01:33 +0000
559+++ openlp/plugins/custom/customplugin.py 2009-05-12 21:06:35 +0000
560@@ -56,10 +56,16 @@
561 """
562 Handle the event contained in the event object.
563 """
564- log.debug(u'Handle event called with event %s'%event.event_type)
565+ log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
566 if event.event_type == EventType.ThemeListChanged:
567 log.debug(u'New Theme request received')
568 self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
569 if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
570 log.debug(u'Load Service Item received')
571 self.media_item.onCustomAddClick()
572+ if event.event_type == EventType.PreviewShow and event.payload == 'Custom':
573+ log.debug(u'Load Service Item received ')
574+ self.media_item.onCustomPreviewClick()
575+ if event.event_type == EventType.LiveShow and event.payload == 'Custom':
576+ log.debug(u'Load Service Item received')
577+ self.media_item.onCustomLiveClick()
578
579=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
580--- openlp/plugins/custom/lib/mediaitem.py 2009-05-09 07:01:33 +0000
581+++ openlp/plugins/custom/lib/mediaitem.py 2009-05-12 21:06:35 +0000
582@@ -28,6 +28,29 @@
583
584 from openlp.plugins.custom.lib import TextListData
585
586+class CustomList(QtGui.QListView):
587+
588+ def __init__(self,parent=None,name=None):
589+ QtGui.QListView.__init__(self,parent)
590+
591+ def mouseMoveEvent(self, event):
592+ """
593+ Drag and drop event does not care what data is selected
594+ as the recepient will use events to request the data move
595+ just tell it what plugin to call
596+ """
597+ if event.buttons() != QtCore.Qt.LeftButton:
598+ return
599+ drag = QtGui.QDrag(self)
600+ mimeData = QtCore.QMimeData()
601+ drag.setMimeData(mimeData)
602+ mimeData.setText(u'Custom')
603+
604+ dropAction = drag.start(QtCore.Qt.CopyAction)
605+
606+ if dropAction == QtCore.Qt.CopyAction:
607+ self.close()
608+
609 class CustomMediaItem(MediaManagerItem):
610 """
611 This is the custom media manager item for Custom Slides.
612@@ -105,12 +128,11 @@
613 # Add the Custom widget to the page layout
614 self.PageLayout.addWidget(self.CustomWidget)
615
616- self.CustomListView = QtGui.QListView()
617+ self.CustomListView = CustomList()
618 self.CustomListView.setAlternatingRowColors(True)
619 self.CustomListData = TextListData()
620 self.CustomListView.setModel(self.CustomListData)
621 self.CustomListView.setDragEnabled(True)
622- self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
623
624 self.PageLayout.addWidget(self.CustomListView)
625
626@@ -235,27 +257,3 @@
627 service_item.title = title
628 service_item.raw_slides = raw_slides
629 service_item.raw_footer = raw_footer
630-
631- def onMouseMoveEvent(self, event):
632- """
633- Drag and drop eventDo not care what data is selected
634- as the recepient will use events to request the data move
635- just tell it what plugin to call
636- """
637- if event.buttons() != QtCore.Qt.LeftButton:
638- return
639-
640- items = self.CustomListView.selectedIndexes()
641- if items == []:
642- return
643-
644- drag = QtGui.QDrag(self)
645- mimeData = QtCore.QMimeData()
646- drag.setMimeData(mimeData)
647- for item in items:
648- mimeData.setText(u'Custom')
649-
650- dropAction = drag.start(QtCore.Qt.CopyAction)
651-
652- if dropAction == QtCore.Qt.CopyAction:
653- self.close()
654
655=== modified file 'openlp/plugins/images/imageplugin.py'
656--- openlp/plugins/images/imageplugin.py 2009-03-22 07:13:34 +0000
657+++ openlp/plugins/images/imageplugin.py 2009-05-12 21:06:35 +0000
658@@ -21,8 +21,8 @@
659
660 from PyQt4 import QtCore, QtGui
661
662-from openlp.core.lib import Plugin
663-from openlp.core.resources import *
664+from openlp.core.lib import Plugin, Event
665+from openlp.core.lib import EventType
666
667 from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem
668
669@@ -37,7 +37,7 @@
670 self.weight = -7
671 # Create the plugin icon
672 self.icon = QtGui.QIcon()
673- self.icon.addPixmap(QtGui.QPixmap(':/media/media_image.png'),
674+ self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),
675 QtGui.QIcon.Normal, QtGui.QIcon.Off)
676
677 self.preview_service_item = ImageServiceItem(self.preview_controller)
678@@ -45,11 +45,25 @@
679
680 def get_media_manager_item(self):
681 # Create the MediaManagerItem object
682- self.MediaManagerItem = ImageMediaItem(self, self.icon, u'Images')
683- return self.MediaManagerItem
684+ self.media_item = ImageMediaItem(self, self.icon, u'Images')
685+ return self.media_item
686
687 def initialise(self):
688 log.info(u'Plugin Initialising')
689- log.info(u'Done')
690+
691+ def handle_event(self, event):
692+ """
693+ Handle the event contained in the event object.
694+ """
695+ log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
696+ if event.event_type == EventType.LoadServiceItem and event.payload == 'Image':
697+ log.debug(u'Load Service Item received')
698+ self.media_item.onImageAddClick()
699+ if event.event_type == EventType.PreviewShow and event.payload == 'Image':
700+ log.debug(u'Load Service Item received')
701+ self.media_item.onImagePreviewClick()
702+ if event.event_type == EventType.LiveShow and event.payload == 'Image':
703+ log.debug(u'Load Service Item received')
704+ self.media_item.onImageLiveClick()
705
706
707
708=== modified file 'openlp/plugins/images/lib/mediaitem.py'
709--- openlp/plugins/images/lib/mediaitem.py 2009-03-17 05:05:04 +0000
710+++ openlp/plugins/images/lib/mediaitem.py 2009-05-13 19:47:25 +0000
711@@ -24,10 +24,33 @@
712
713 from openlp.core import translate
714 from openlp.core.lib import MediaManagerItem
715-from openlp.core.resources import *
716+from openlp.core.lib import ServiceItem
717
718 from openlp.plugins.images.lib import ListWithPreviews
719
720+class ImageList(QtGui.QListView):
721+
722+ def __init__(self,parent=None,name=None):
723+ QtGui.QListView.__init__(self,parent)
724+
725+ def mouseMoveEvent(self, event):
726+ """
727+ Drag and drop event does not care what data is selected
728+ as the recepient will use events to request the data move
729+ just tell it what plugin to call
730+ """
731+ if event.buttons() != QtCore.Qt.LeftButton:
732+ return
733+ drag = QtGui.QDrag(self)
734+ mimeData = QtCore.QMimeData()
735+ drag.setMimeData(mimeData)
736+ mimeData.setText(u'Image')
737+
738+ dropAction = drag.start(QtCore.Qt.CopyAction)
739+
740+ if dropAction == QtCore.Qt.CopyAction:
741+ self.close()
742+
743 class ImageMediaItem(MediaManagerItem):
744 """
745 This is the custom media manager item for images.
746@@ -70,14 +93,19 @@
747 translate('ImageMediaItem', u'Add Image To Service'),
748 translate('ImageMediaItem', u'Add the selected image(s) to the service'),
749 ':/system/system_add.png', self.onImageAddClick, 'ImageAddItem')
750- ## Add the songlist widget ##
751- self.ImageListView = QtGui.QListView()
752+
753+ #Add the Image List widget
754+ self.ImageListView = ImageList()
755 self.ImageListView.uniformItemSizes = True
756 self.ImageListData = ListWithPreviews()
757 self.ImageListView.setModel(self.ImageListData)
758-
759 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
760+ self.ImageListView.setSpacing(1)
761+ self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
762+ self.ImageListView.setAlternatingRowColors(True)
763+ self.ImageListView.setDragEnabled(True)
764 self.ImageListView.setObjectName('ImageListView')
765+
766 self.PageLayout.addWidget(self.ImageListView)
767
768 #define and add the context menu
769@@ -96,11 +124,6 @@
770 translate('ImageMediaItem', u'&Add to Service'),
771 self.onImageAddClick))
772
773- self.ImageListPreview = QtGui.QWidget()
774- self.PageLayout.addWidget(self.ImageListPreview)
775- self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
776- self.ImageListView.setSpacing(1)
777- self.ImageListView.setAlternatingRowColors(True)
778
779 def initialise(self):
780 self.loadImageList(self.parent.config.load_list(u'images'))
781@@ -126,22 +149,35 @@
782 for index in indexes:
783 current_row = int(index.row())
784 self.ImageListData.removeRow(current_row)
785- self.parent.config.set_list(u'images', self.ImageListData.getFileList())
786+ self.parent.config.set_list(u'images', self.ImageListData.getFileList())
787
788- def onImageClick(self, where):
789+ def generateSlideData(self, service_item):
790 indexes = self.ImageListView.selectedIndexes()
791 for index in indexes:
792 filename = self.ImageListData.getFilename(index)
793- log.info(u"Click %s:%s"%(str(where), filename))
794- where.add(filename)
795- where.render()
796+ frame = QtGui.QPixmap(str(filename))
797+ service_item.frames.append({u'formatted': u'Image', u'image': frame})
798
799 def onImagePreviewClick(self):
800- self.onImageClick(self.parent.preview_service_item)
801+ log.debug(u'Image Preview Requested')
802+ service_item = ServiceItem(self.parent)
803+ service_item.addIcon( ":/media/media_image.png")
804+ service_item.render_manager = self.parent.render_manager
805+ self.generateSlideData(service_item)
806+ self.parent.preview_controller.addServiceItem(service_item)
807
808 def onImageLiveClick(self):
809- self.onImageClick(self.parent.live_service_item)
810+ log.debug(u'Image Live Requested')
811+ service_item = ServiceItem(self.parent)
812+ service_item.addIcon( ":/media/media_image.png")
813+ service_item.render_manager = self.parent.render_manager
814+ self.generateSlideData(service_item)
815+ self.parent.live_controller.addServiceItem(service_item)
816
817 def onImageAddClick(self):
818- """Add this item to the OOS"""
819- pass
820+ log.debug(u'Image Live Requested')
821+ service_item = ServiceItem(self.parent)
822+ service_item.addIcon( ":/media/media_image.png")
823+ service_item.render_manager = self.parent.render_manager
824+ self.generateSlideData(service_item)
825+ self.parent.service_manager.addServiceItem(service_item)