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
=== modified file 'openlp/__init__.py'
--- openlp/__init__.py 2009-04-28 19:20:03 +0000
+++ openlp/__init__.py 2009-05-13 19:47:25 +0000
@@ -15,7 +15,24 @@
15this program; if not, write to the Free Software Foundation, Inc., 59 Temple15this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16Place, Suite 330, Boston, MA 02111-1307 USA16Place, Suite 330, Boston, MA 02111-1307 USA
17"""17"""
18__all__ = ['convertStringToBoolean']18import types
19from PyQt4 import QtCore, QtGui
20
21__all__ = ['convertStringToBoolean','buildIcon',]
1922
20def convertStringToBoolean(stringvalue):23def convertStringToBoolean(stringvalue):
21 return stringvalue.strip().lower() in (u'true', u'yes', u'y')24 return stringvalue.strip().lower() in (u'true', u'yes', u'y')
25
26def buildIcon(icon):
27 ButtonIcon = None
28 if type(icon) is QtGui.QIcon:
29 ButtonIcon = icon
30 elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
31 ButtonIcon = QtGui.QIcon()
32 if icon.startswith(u':/'):
33 ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
34 QtGui.QIcon.Off)
35 else:
36 ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)),
37 QtGui.QIcon.Normal, QtGui.QIcon.Off)
38 return ButtonIcon
2239
=== modified file 'openlp/core/lib/event.py'
--- openlp/core/lib/event.py 2009-05-09 07:01:33 +0000
+++ openlp/core/lib/event.py 2009-05-12 21:06:35 +0000
@@ -37,10 +37,12 @@
37 AfterSaveService = 437 AfterSaveService = 4
38 LoadServiceItem = 538 LoadServiceItem = 5
39 # Preview events39 # Preview events
40 PreviewBeforeLoad = 1140 PreviewShow = 10
41 PreviewAfterLoad = 1241 LiveShow = 11
42 PreviewBeforeShow = 1342 #PreviewBeforeLoad = 11
43 PreviewAfterShow = 1443 #PreviewAfterLoad = 12
44 #PreviewBeforeShow = 13
45 #PreviewAfterShow = 14
4446
45 ThemeListChanged = 1547 ThemeListChanged = 15
4648
4749
=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py 2009-03-02 22:12:14 +0000
+++ openlp/core/lib/mediamanageritem.py 2009-05-13 19:47:25 +0000
@@ -20,7 +20,6 @@
20import types20import types
2121
22from PyQt4 import QtCore, QtGui22from PyQt4 import QtCore, QtGui
23from openlp.core.resources import *
24from openlp.core.lib.toolbar import *23from openlp.core.lib.toolbar import *
2524
26class MediaManagerItem(QtGui.QWidget):25class MediaManagerItem(QtGui.QWidget):
2726
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-05-11 05:09:43 +0000
+++ openlp/core/lib/serviceitem.py 2009-05-13 19:47:25 +0000
@@ -18,12 +18,12 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging20import logging
21import types
22import time21import time
2322from openlp import buildIcon
24from PyQt4.QtCore import *23from PyQt4.QtCore import *
25from PyQt4.QtGui import *24from PyQt4.QtGui import *
2625
26
27class ServiceItem():27class ServiceItem():
28 """28 """
29 The service item is a base class for the plugins to use to interact with29 The service item is a base class for the plugins to use to interact with
@@ -50,18 +50,7 @@
50 log.debug(u'Service item created for %s', self.shortname)50 log.debug(u'Service item created for %s', self.shortname)
5151
52 def addIcon(self, icon):52 def addIcon(self, icon):
53 ButtonIcon = None53 self.iconic_representation = buildIcon(icon)
54 if type(icon) is QIcon:
55 ButtonIcon = icon
56 elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
57 ButtonIcon = QIcon()
58 if icon.startswith(u':/'):
59 ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
60 QIcon.Off)
61 else:
62 ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
63 QIcon.Normal, QIcon.Off)
64 self.iconic_representation = ButtonIcon
6554
66 def render(self):55 def render(self):
67 """56 """
6857
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-05-09 07:01:33 +0000
+++ openlp/core/ui/mainwindow.py 2009-05-14 18:00:36 +0000
@@ -88,11 +88,17 @@
88 self.plugin_manager.initialise_plugins()88 self.plugin_manager.initialise_plugins()
8989
90 # Once all components are initialised load the Themes90 # Once all components are initialised load the Themes
91 log.info(u'Load Themes')91 log.info(u'Load Themes and Managers')
92 self.PreviewController.eventManager = self.EventManager
93 self.PreviewController.serviceManager = self.ServiceManagerContents
94 self.LiveController.eventManager = self.EventManager
95 self.LiveController.serviceManager = self.ServiceManagerContents
92 self.ThemeManagerContents.eventManager = self.EventManager96 self.ThemeManagerContents.eventManager = self.EventManager
93 self.ThemeManagerContents.renderManager = self.RenderManager97 self.ThemeManagerContents.renderManager = self.RenderManager
94 self.ServiceManagerContents.renderManager = self.RenderManager98 self.ServiceManagerContents.renderManager = self.RenderManager
95 self.ServiceManagerContents.eventManager = self.EventManager99 self.ServiceManagerContents.eventManager = self.EventManager
100 self.ServiceManagerContents.liveController = self.LiveController
101 self.ServiceManagerContents.previewController = self.PreviewController
96 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents102 self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
97 self.ThemeManagerContents.loadThemes()103 self.ThemeManagerContents.loadThemes()
98104
99105
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-05-11 05:09:43 +0000
+++ openlp/core/ui/servicemanager.py 2009-05-14 18:00:36 +0000
@@ -20,94 +20,15 @@
20import os20import os
21import logging21import logging
2222
23from time import sleep
24from copy import deepcopy
25
26from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
2724
28from openlp.core.lib import OpenLPToolbar25from openlp.core.lib import OpenLPToolbar
29from openlp.core.lib import ServiceItem26from openlp.core.lib import ServiceItem
30from openlp.core.lib import RenderManager27from openlp.core.lib import RenderManager
31from openlp.core import translate28from openlp.core import translate
29from openlp import buildIcon
32from openlp.core.lib import Event, EventType, EventManager30from openlp.core.lib import Event, EventType, EventManager
3331
34#class ServiceData(QtCore.QAbstractItemModel):
35# """
36# Tree of items for an order of service.
37# Includes methods for reading and writing the contents to an OOS file
38# Root contains a list of ServiceItems
39# """
40# global log
41# log=logging.getLogger(u'ServiceData')
42# def __init__(self):
43# QtCore.QAbstractItemModel.__init__(self)
44# self.items=[]
45# log.info("Starting")
46#
47# def clearItems(self):
48# self.items = []
49#
50# def columnCount(self, parent=None):
51# return 1; # always only a single column (for now)
52#
53# def rowCount(self, parent=None):
54# return len(self.items)
55#
56# def insertRow(self, row, service_item):
57# self.beginInsertRows(QtCore.QModelIndex(),row,row)
58# log.info("insert row %s:%s" % (row,service_item))
59# self.items.insert(row, service_item)
60# log.info("Items: %s" % self.items)
61# self.endInsertRows()
62#
63# def removeRow(self, row):
64# self.beginRemoveRows(QtCore.QModelIndex(), row,row)
65# self.items.pop(row)
66# self.endRemoveRows()
67#
68# def addRow(self, service_item):
69# self.insertRow(len(self.items), service_item)
70#
71# def index(self, row, col, parent = QtCore.QModelIndex()):
72# return self.createIndex(row,col)
73#
74# def parent(self, index=QtCore.QModelIndex()):
75# return QtCore.QModelIndex() # no children as yet
76#
77# def data(self, index, role):
78# """
79# Called by the service manager to draw us in the service window
80# """
81# log.debug(u'data %s %d', index, role)
82# row = index.row()
83# if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
84# return QtCore.QVariant()
85# item = self.items[row]
86# if role == QtCore.Qt.DisplayRole:
87# retval= item.title + u':' + item.shortname
88# elif role == QtCore.Qt.DecorationRole:
89# retval = item.iconic_representation
90# elif role == QtCore.Qt.ToolTipRole:
91# retval = None
92# else:
93# retval = None
94# if retval == None:
95# retval = QtCore.QVariant()
96## log.info("Returning"+ str(retval))
97# if type(retval) is not type(QtCore.QVariant):
98# return QtCore.QVariant(retval)
99# else:
100# return retval
101#
102# def __iter__(self):
103# for i in self.items:
104# yield i
105#
106# def item(self, row):
107# log.info("Get Item:%d -> %s" %(row, str(self.items)))
108# return self.items[row]
109
110
111class ServiceManager(QtGui.QWidget):32class ServiceManager(QtGui.QWidget):
11233
113 """Manages the orders of service. Currently this involves taking34 """Manages the orders of service. Currently this involves taking
@@ -122,6 +43,7 @@
122 def __init__(self, parent):43 def __init__(self, parent):
123 QtGui.QWidget.__init__(self)44 QtGui.QWidget.__init__(self)
124 self.parent=parent45 self.parent=parent
46 self.serviceItems=[]
125 self.Layout = QtGui.QVBoxLayout(self)47 self.Layout = QtGui.QVBoxLayout(self)
126 self.Layout.setSpacing(0)48 self.Layout.setSpacing(0)
127 self.Layout.setMargin(0)49 self.Layout.setMargin(0)
@@ -153,20 +75,48 @@
153 self.Toolbar.addAction(self.ThemeWidget)75 self.Toolbar.addAction(self.ThemeWidget)
154 self.Layout.addWidget(self.Toolbar)76 self.Layout.addWidget(self.Toolbar)
15577
156 self.serviceManagerList = QtGui.QTreeWidget(self)78 self.ServiceManagerList = QtGui.QTreeWidget(self)
157 self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)79 self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
158 self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)80 self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
159 self.serviceManagerList.setAlternatingRowColors(True)81 self.ServiceManagerList.setAlternatingRowColors(True)
160 self.serviceManagerList.setObjectName("serviceManagerList")82 self.ServiceManagerList.setObjectName("ServiceManagerList")
161 self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent83 #endable drop
162 self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent84 self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
163 self.serviceManagerList .__class__.dropEvent =self.dropEvent85 self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
16486 self.ServiceManagerList .__class__.dropEvent =self.dropEvent
165 self.Layout.addWidget(self.serviceManagerList)87
88 self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
89
90 self.ServiceManagerList.addAction(self.contextMenuAction(
91 self.ServiceManagerList, ':/system/system_preview.png',
92 translate(u'ServiceManager',u'&Preview Verse'), self.makePreview))
93 self.ServiceManagerList.addAction(self.contextMenuAction(
94 self.ServiceManagerList, ':/system/system_live.png',
95 translate(u'ServiceManager',u'&Show Live'), self.makeLive))
96 self.ServiceManagerList.addAction(self.contextMenuSeparator(self.ServiceManagerList))
97 self.ServiceManagerList.addAction(self.contextMenuAction(
98 self.ServiceManagerList, ':/services/service_delete',
99 translate(u'ServiceManager',u'&Remove from Service'), self.onDeleteFromService))
100
101 self.Layout.addWidget(self.ServiceManagerList)
166102
167 QtCore.QObject.connect(self.ThemeComboBox,103 QtCore.QObject.connect(self.ThemeComboBox,
168 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)104 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
169105
106 def contextMenuAction(self, base, icon, text, slot):
107 """
108 Utility method to help build context menus for plugins
109 """
110 action = QtGui.QAction(text, base)
111 action .setIcon(buildIcon(icon))
112 QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
113 return action
114
115 def contextMenuSeparator(self, base):
116 action = QtGui.QAction("", base)
117 action.setSeparator(True)
118 return action
119
170 def onServiceTop(self):120 def onServiceTop(self):
171 pass121 pass
172122
@@ -195,16 +145,43 @@
195 self.renderManager.default_theme = self.ThemeComboBox.currentText()145 self.renderManager.default_theme = self.ThemeComboBox.currentText()
196146
197 def addServiceItem(self, item):147 def addServiceItem(self, item):
198 treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)148 self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})
149 treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
199 treewidgetitem.setText(0,item.title + u':' + item.shortname)150 treewidgetitem.setText(0,item.title + u':' + item.shortname)
200 treewidgetitem.setIcon(0,item.iconic_representation)151 treewidgetitem.setIcon(0,item.iconic_representation)
152 treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
201 treewidgetitem.setExpanded(True)153 treewidgetitem.setExpanded(True)
202 item.render()154 item.render()
155 count = 0
203 for frame in item.frames:156 for frame in item.frames:
204 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)157 treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
205 text = frame[u'formatted'][0]158 text = frame[u'formatted'][0]
206 treewidgetitem1.setText(0,text[:10])159 treewidgetitem1.setText(0,text[:30])
207 #treewidgetitem1.setIcon(0,frame[u'image'])160 treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
161 count = count + 1
162
163 def makePreview(self):
164 item, count = self.findServiceItem()
165 self.previewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
166
167 def makeLive(self):
168 item, count = self.findServiceItem()
169 self.liveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
170
171 def findServiceItem(self):
172 items = self.ServiceManagerList.selectedItems()
173 pos = 0
174 count = 0
175 for item in items:
176 childCount = item.childCount()
177 if childCount >= 1: # is the parent
178 pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
179 else:
180 parentitem = item.parent()
181 pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
182 count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
183 pos = pos - 1 #adjust for zeor indexing
184 return pos, count
208185
209 def dragEnterEvent(self, event):186 def dragEnterEvent(self, event):
210 """187 """
211188
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-05-11 05:09:43 +0000
+++ openlp/core/ui/slidecontroller.py 2009-05-14 18:00:36 +0000
@@ -24,6 +24,7 @@
2424
25from openlp.core.lib import OpenLPToolbar25from openlp.core.lib import OpenLPToolbar
26from openlp.core import translate26from openlp.core import translate
27from openlp.core.lib import Event, EventType, EventManager
2728
28class SlideData(QtCore.QAbstractListModel):29class SlideData(QtCore.QAbstractListModel):
29 """30 """
@@ -41,6 +42,10 @@
41 self.maximagewidth=self.rowheight*16/9.0;42 self.maximagewidth=self.rowheight*16/9.0;
42 log.info(u'Starting')43 log.info(u'Starting')
4344
45 def eventFilter(self, obj, event):
46 print obj, event
47 return false
48
44 def clear(self):49 def clear(self):
45 self.items=[]50 self.items=[]
4651
@@ -54,7 +59,7 @@
54 self.beginInsertRows(QtCore.QModelIndex(),row,row)59 self.beginInsertRows(QtCore.QModelIndex(),row,row)
55 log.info(u'insert row %d' % row)60 log.info(u'insert row %d' % row)
56 # create a preview image61 # create a preview image
57 frame1 = frame.scaled(QtCore.QSize(350,260), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)62 frame1 = frame.scaled(QtCore.QSize(300,225), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
58 self.items.insert(row,(frame1, framenumber))63 self.items.insert(row,(frame1, framenumber))
59 log.info(u'Items: %s' % self.items)64 log.info(u'Items: %s' % self.items)
60 self.endInsertRows()65 self.endInsertRows()
@@ -71,13 +76,10 @@
71 row=index.row()76 row=index.row()
72 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!77 if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
73 return QtCore.QVariant()78 return QtCore.QVariant()
74# if role==Qt.DisplayRole:
75# retval= self.items[row][1]
76 if role == QtCore.Qt.DecorationRole:79 if role == QtCore.Qt.DecorationRole:
77 retval= self.items[row][0]80 retval= self.items[row][0]
78 else:81 else:
79 retval= QtCore.QVariant()82 retval= QtCore.QVariant()
80# log.info("Returning"+ str(retval))
81 if type(retval) is not type(QtCore.QVariant):83 if type(retval) is not type(QtCore.QVariant):
82 return QtCore.QVariant(retval)84 return QtCore.QVariant(retval)
83 else:85 else:
@@ -117,17 +119,26 @@
117 self.PanelLayout.setMargin(0)119 self.PanelLayout.setMargin(0)
118120
119 self.Controller = QtGui.QScrollArea(self.Splitter)121 self.Controller = QtGui.QScrollArea(self.Splitter)
122 self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
120 self.Controller.setWidgetResizable(True)123 self.Controller.setWidgetResizable(True)
121124 self.Controller.setObjectName("scrollArea")
122 self.PreviewListView = QtGui.QListView(self.Splitter)125
123 self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)126 self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
124 self.PreviewListView.setAlternatingRowColors(True)127 self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
128 self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
129 self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
130 self.gridLayout.setObjectName("gridLayout")
131
132 self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
125 self.PreviewListData = SlideData()133 self.PreviewListData = SlideData()
134 self.PreviewListView.isLive = self.isLive
126 self.PreviewListView.setModel(self.PreviewListData)135 self.PreviewListView.setModel(self.PreviewListData)
127 self.PreviewListView.setSelectionRectVisible(True)136 self.PreviewListView.setSelectionRectVisible(True)
137 self.PreviewListView.setSpacing(5)
138 self.PreviewListView.setObjectName("PreviewListView")
128139
129 self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))140 self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
130 self.Controller.setWidget(self.PreviewListView)141 self.Controller.setWidget(self.scrollAreaWidgetContents)
131142
132 self.Toolbar = OpenLPToolbar(self.Splitter)143 self.Toolbar = OpenLPToolbar(self.Splitter)
133 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)144 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
@@ -151,7 +162,17 @@
151162
152 self.Toolbar.setSizePolicy(sizeToolbarPolicy)163 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
153164
154 self.SlidePreview = QtGui.QLabel(self.Splitter)165 self.PreviewFrame = QtGui.QFrame(self.Splitter)
166 self.PreviewFrame.setGeometry(QtCore.QRect(50, 270, 250, 190))
167 self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
168 self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
169 self.PreviewFrame.setObjectName(u'PreviewFrame')
170
171 self.grid = QtGui.QGridLayout(self.PreviewFrame)
172 self.grid.setMargin(10)
173 self.grid.setObjectName(u'grid')
174
175 self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
155 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)176 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
156 sizePolicy.setHorizontalStretch(0)177 sizePolicy.setHorizontalStretch(0)
157 sizePolicy.setVerticalStretch(0)178 sizePolicy.setVerticalStretch(0)
@@ -163,16 +184,12 @@
163 self.SlidePreview.setLineWidth(1)184 self.SlidePreview.setLineWidth(1)
164 self.SlidePreview.setScaledContents(True)185 self.SlidePreview.setScaledContents(True)
165 self.SlidePreview.setObjectName(u'SlidePreview')186 self.SlidePreview.setObjectName(u'SlidePreview')
187 self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
166188
167 QtCore.QObject.connect(self.PreviewListView,189 QtCore.QObject.connect(self.PreviewListView,
168 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)190 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
169 QtCore.QObject.connect(self.PreviewListView,191 QtCore.QObject.connect(self.PreviewListView,
170 QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)192 QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
171
172
173
174 def onCurrentItemChanged(self, current, previous):
175 print u'Method slideControllerList currentItemChanged called', current, previous
176193
177 def onSlideSelectedFirst(self):194 def onSlideSelectedFirst(self):
178 row = self.PreviewListData.createIndex(0, 0)195 row = self.PreviewListData.createIndex(0, 0)
@@ -241,5 +258,9 @@
241 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)258 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
242 self.onSlideSelected(row)259 self.onSlideSelected(row)
243260
244 def render(self):261 def addServiceManagerItem(self, serviceitem, slideno):
245 pass262 self.addServiceItem(serviceitem)
263 row = self.PreviewListData.createIndex(slideno, 0)
264 if row.isValid():
265 self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
266 self.onSlideSelected(row)
246267
=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py 2009-04-10 06:06:41 +0000
+++ openlp/plugins/bibles/bibleplugin.py 2009-05-12 21:06:35 +0000
@@ -23,7 +23,6 @@
23from PyQt4.QtCore import *23from PyQt4.QtCore import *
24from PyQt4.QtGui import *24from PyQt4.QtGui import *
2525
26from openlp.core.resources import *
27from openlp.core.lib import Plugin, Event26from openlp.core.lib import Plugin, Event
28from openlp.core.lib import EventType27from openlp.core.lib import EventType
2928
@@ -83,7 +82,16 @@
83 """82 """
84 Handle the event contained in the event object.83 Handle the event contained in the event object.
85 """84 """
86 log.debug(u'Handle event called with event %s'%event.event_type)85 log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
87 if event.event_type == EventType.ThemeListChanged:86 if event.event_type == EventType.ThemeListChanged:
88 log.debug(u'New Theme request received')87 log.debug(u'New Theme request received')
89 #self.edit_custom_form.loadThemes(self.theme_manager.getThemes())88 #self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
89 if event.event_type == EventType.LoadServiceItem and event.payload == 'Bibles':
90 log.debug(u'Load Service Item received')
91 self.media_item.onBibleAddClick()
92 if event.event_type == EventType.PreviewShow and event.payload == 'Bibles':
93 log.debug(u'Load Service Item received')
94 self.media_item.onBiblePreviewClick()
95 if event.event_type == EventType.LiveShow and event.payload == 'Bibles':
96 log.debug(u'Load Service Item received')
97 self.media_item.onBibleLiveClick()
9098
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-05-04 08:15:48 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-05-13 19:47:25 +0000
@@ -28,6 +28,30 @@
28from openlp.plugins.bibles.forms import BibleImportForm28from openlp.plugins.bibles.forms import BibleImportForm
29from openlp.plugins.bibles.lib import TextListData29from openlp.plugins.bibles.lib import TextListData
3030
31class BibleList(QtGui.QListView):
32
33 def __init__(self,parent=None,name=None):
34 QtGui.QListView.__init__(self,parent)
35
36 def mouseMoveEvent(self, event):
37 """
38 Drag and drop event does not care what data is selected
39 as the recepient will use events to request the data move
40 just tell it what plugin to call
41 """
42 if event.buttons() != QtCore.Qt.LeftButton:
43 return
44 drag = QtGui.QDrag(self)
45 mimeData = QtCore.QMimeData()
46 drag.setMimeData(mimeData)
47 mimeData.setText(u'Bibles')
48
49 dropAction = drag.start(QtCore.Qt.CopyAction)
50
51 if dropAction == QtCore.Qt.CopyAction:
52 self.close()
53
54
31class BibleMediaItem(MediaManagerItem):55class BibleMediaItem(MediaManagerItem):
32 """56 """
33 This is the custom media manager item for Bibles.57 This is the custom media manager item for Bibles.
@@ -179,11 +203,12 @@
179 # Add the search tab widget to the page layout203 # Add the search tab widget to the page layout
180 self.PageLayout.addWidget(self.SearchTabWidget)204 self.PageLayout.addWidget(self.SearchTabWidget)
181205
182 self.BibleListView = QtGui.QListView()206 self.BibleListView = BibleList()
183 self.BibleListView.setAlternatingRowColors(True)207 self.BibleListView.setAlternatingRowColors(True)
184 self.BibleListData = TextListData()208 self.BibleListData = TextListData()
185 self.BibleListView.setModel(self.BibleListData)209 self.BibleListView.setModel(self.BibleListData)
186 self.BibleListView.setSelectionMode(2)210 self.BibleListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
211 self.BibleListView.setDragEnabled(True)
187212
188 self.PageLayout.addWidget(self.BibleListView)213 self.PageLayout.addWidget(self.BibleListView)
189214
@@ -205,6 +230,7 @@
205 QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)230 QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
206 # Context Menus231 # Context Menus
207 self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)232 self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
233
208 self.BibleListView.addAction(self.contextMenuAction(234 self.BibleListView.addAction(self.contextMenuAction(
209 self.BibleListView, ':/system/system_preview.png',235 self.BibleListView, ':/system/system_preview.png',
210 translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick))236 translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick))
211237
=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py 2009-05-09 07:01:33 +0000
+++ openlp/plugins/custom/customplugin.py 2009-05-12 21:06:35 +0000
@@ -56,10 +56,16 @@
56 """56 """
57 Handle the event contained in the event object.57 Handle the event contained in the event object.
58 """58 """
59 log.debug(u'Handle event called with event %s'%event.event_type)59 log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
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':63 if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
64 log.debug(u'Load Service Item received')64 log.debug(u'Load Service Item received')
65 self.media_item.onCustomAddClick()65 self.media_item.onCustomAddClick()
66 if event.event_type == EventType.PreviewShow and event.payload == 'Custom':
67 log.debug(u'Load Service Item received ')
68 self.media_item.onCustomPreviewClick()
69 if event.event_type == EventType.LiveShow and event.payload == 'Custom':
70 log.debug(u'Load Service Item received')
71 self.media_item.onCustomLiveClick()
6672
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-05-09 07:01:33 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-05-12 21:06:35 +0000
@@ -28,6 +28,29 @@
2828
29from openlp.plugins.custom.lib import TextListData29from openlp.plugins.custom.lib import TextListData
3030
31class CustomList(QtGui.QListView):
32
33 def __init__(self,parent=None,name=None):
34 QtGui.QListView.__init__(self,parent)
35
36 def mouseMoveEvent(self, event):
37 """
38 Drag and drop event does not care what data is selected
39 as the recepient will use events to request the data move
40 just tell it what plugin to call
41 """
42 if event.buttons() != QtCore.Qt.LeftButton:
43 return
44 drag = QtGui.QDrag(self)
45 mimeData = QtCore.QMimeData()
46 drag.setMimeData(mimeData)
47 mimeData.setText(u'Custom')
48
49 dropAction = drag.start(QtCore.Qt.CopyAction)
50
51 if dropAction == QtCore.Qt.CopyAction:
52 self.close()
53
31class CustomMediaItem(MediaManagerItem):54class CustomMediaItem(MediaManagerItem):
32 """55 """
33 This is the custom media manager item for Custom Slides.56 This is the custom media manager item for Custom Slides.
@@ -105,12 +128,11 @@
105 # Add the Custom widget to the page layout128 # Add the Custom widget to the page layout
106 self.PageLayout.addWidget(self.CustomWidget)129 self.PageLayout.addWidget(self.CustomWidget)
107130
108 self.CustomListView = QtGui.QListView()131 self.CustomListView = CustomList()
109 self.CustomListView.setAlternatingRowColors(True)132 self.CustomListView.setAlternatingRowColors(True)
110 self.CustomListData = TextListData()133 self.CustomListData = TextListData()
111 self.CustomListView.setModel(self.CustomListData)134 self.CustomListView.setModel(self.CustomListData)
112 self.CustomListView.setDragEnabled(True)135 self.CustomListView.setDragEnabled(True)
113 self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
114136
115 self.PageLayout.addWidget(self.CustomListView)137 self.PageLayout.addWidget(self.CustomListView)
116138
@@ -235,27 +257,3 @@
235 service_item.title = title257 service_item.title = title
236 service_item.raw_slides = raw_slides258 service_item.raw_slides = raw_slides
237 service_item.raw_footer = raw_footer259 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()
262260
=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py 2009-03-22 07:13:34 +0000
+++ openlp/plugins/images/imageplugin.py 2009-05-12 21:06:35 +0000
@@ -21,8 +21,8 @@
2121
22from PyQt4 import QtCore, QtGui22from PyQt4 import QtCore, QtGui
2323
24from openlp.core.lib import Plugin24from openlp.core.lib import Plugin, Event
25from openlp.core.resources import *25from openlp.core.lib import EventType
2626
27from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem27from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem
2828
@@ -37,7 +37,7 @@
37 self.weight = -737 self.weight = -7
38 # Create the plugin icon38 # Create the plugin icon
39 self.icon = QtGui.QIcon()39 self.icon = QtGui.QIcon()
40 self.icon.addPixmap(QtGui.QPixmap(':/media/media_image.png'),40 self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),
41 QtGui.QIcon.Normal, QtGui.QIcon.Off)41 QtGui.QIcon.Normal, QtGui.QIcon.Off)
4242
43 self.preview_service_item = ImageServiceItem(self.preview_controller)43 self.preview_service_item = ImageServiceItem(self.preview_controller)
@@ -45,11 +45,25 @@
4545
46 def get_media_manager_item(self):46 def get_media_manager_item(self):
47 # Create the MediaManagerItem object47 # Create the MediaManagerItem object
48 self.MediaManagerItem = ImageMediaItem(self, self.icon, u'Images')48 self.media_item = ImageMediaItem(self, self.icon, u'Images')
49 return self.MediaManagerItem49 return self.media_item
5050
51 def initialise(self):51 def initialise(self):
52 log.info(u'Plugin Initialising')52 log.info(u'Plugin Initialising')
53 log.info(u'Done')53
54 def handle_event(self, event):
55 """
56 Handle the event contained in the event object.
57 """
58 log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
59 if event.event_type == EventType.LoadServiceItem and event.payload == 'Image':
60 log.debug(u'Load Service Item received')
61 self.media_item.onImageAddClick()
62 if event.event_type == EventType.PreviewShow and event.payload == 'Image':
63 log.debug(u'Load Service Item received')
64 self.media_item.onImagePreviewClick()
65 if event.event_type == EventType.LiveShow and event.payload == 'Image':
66 log.debug(u'Load Service Item received')
67 self.media_item.onImageLiveClick()
5468
5569
5670
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-03-17 05:05:04 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-05-13 19:47:25 +0000
@@ -24,10 +24,33 @@
2424
25from openlp.core import translate25from openlp.core import translate
26from openlp.core.lib import MediaManagerItem26from openlp.core.lib import MediaManagerItem
27from openlp.core.resources import *27from openlp.core.lib import ServiceItem
2828
29from openlp.plugins.images.lib import ListWithPreviews29from openlp.plugins.images.lib import ListWithPreviews
3030
31class ImageList(QtGui.QListView):
32
33 def __init__(self,parent=None,name=None):
34 QtGui.QListView.__init__(self,parent)
35
36 def mouseMoveEvent(self, event):
37 """
38 Drag and drop event does not care what data is selected
39 as the recepient will use events to request the data move
40 just tell it what plugin to call
41 """
42 if event.buttons() != QtCore.Qt.LeftButton:
43 return
44 drag = QtGui.QDrag(self)
45 mimeData = QtCore.QMimeData()
46 drag.setMimeData(mimeData)
47 mimeData.setText(u'Image')
48
49 dropAction = drag.start(QtCore.Qt.CopyAction)
50
51 if dropAction == QtCore.Qt.CopyAction:
52 self.close()
53
31class ImageMediaItem(MediaManagerItem):54class ImageMediaItem(MediaManagerItem):
32 """55 """
33 This is the custom media manager item for images.56 This is the custom media manager item for images.
@@ -70,14 +93,19 @@
70 translate('ImageMediaItem', u'Add Image To Service'),93 translate('ImageMediaItem', u'Add Image To Service'),
71 translate('ImageMediaItem', u'Add the selected image(s) to the service'),94 translate('ImageMediaItem', u'Add the selected image(s) to the service'),
72 ':/system/system_add.png', self.onImageAddClick, 'ImageAddItem')95 ':/system/system_add.png', self.onImageAddClick, 'ImageAddItem')
73 ## Add the songlist widget ##96
74 self.ImageListView = QtGui.QListView()97 #Add the Image List widget
98 self.ImageListView = ImageList()
75 self.ImageListView.uniformItemSizes = True99 self.ImageListView.uniformItemSizes = True
76 self.ImageListData = ListWithPreviews()100 self.ImageListData = ListWithPreviews()
77 self.ImageListView.setModel(self.ImageListData)101 self.ImageListView.setModel(self.ImageListData)
78
79 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))102 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
103 self.ImageListView.setSpacing(1)
104 self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
105 self.ImageListView.setAlternatingRowColors(True)
106 self.ImageListView.setDragEnabled(True)
80 self.ImageListView.setObjectName('ImageListView')107 self.ImageListView.setObjectName('ImageListView')
108
81 self.PageLayout.addWidget(self.ImageListView)109 self.PageLayout.addWidget(self.ImageListView)
82110
83 #define and add the context menu111 #define and add the context menu
@@ -96,11 +124,6 @@
96 translate('ImageMediaItem', u'&Add to Service'),124 translate('ImageMediaItem', u'&Add to Service'),
97 self.onImageAddClick))125 self.onImageAddClick))
98126
99 self.ImageListPreview = QtGui.QWidget()
100 self.PageLayout.addWidget(self.ImageListPreview)
101 self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
102 self.ImageListView.setSpacing(1)
103 self.ImageListView.setAlternatingRowColors(True)
104127
105 def initialise(self):128 def initialise(self):
106 self.loadImageList(self.parent.config.load_list(u'images'))129 self.loadImageList(self.parent.config.load_list(u'images'))
@@ -126,22 +149,35 @@
126 for index in indexes:149 for index in indexes:
127 current_row = int(index.row())150 current_row = int(index.row())
128 self.ImageListData.removeRow(current_row)151 self.ImageListData.removeRow(current_row)
129 self.parent.config.set_list(u'images', self.ImageListData.getFileList()) 152 self.parent.config.set_list(u'images', self.ImageListData.getFileList())
130153
131 def onImageClick(self, where):154 def generateSlideData(self, service_item):
132 indexes = self.ImageListView.selectedIndexes()155 indexes = self.ImageListView.selectedIndexes()
133 for index in indexes:156 for index in indexes:
134 filename = self.ImageListData.getFilename(index)157 filename = self.ImageListData.getFilename(index)
135 log.info(u"Click %s:%s"%(str(where), filename))158 frame = QtGui.QPixmap(str(filename))
136 where.add(filename)159 service_item.frames.append({u'formatted': u'Image', u'image': frame})
137 where.render()
138160
139 def onImagePreviewClick(self):161 def onImagePreviewClick(self):
140 self.onImageClick(self.parent.preview_service_item)162 log.debug(u'Image Preview Requested')
163 service_item = ServiceItem(self.parent)
164 service_item.addIcon( ":/media/media_image.png")
165 service_item.render_manager = self.parent.render_manager
166 self.generateSlideData(service_item)
167 self.parent.preview_controller.addServiceItem(service_item)
141168
142 def onImageLiveClick(self):169 def onImageLiveClick(self):
143 self.onImageClick(self.parent.live_service_item)170 log.debug(u'Image Live Requested')
171 service_item = ServiceItem(self.parent)
172 service_item.addIcon( ":/media/media_image.png")
173 service_item.render_manager = self.parent.render_manager
174 self.generateSlideData(service_item)
175 self.parent.live_controller.addServiceItem(service_item)
144176
145 def onImageAddClick(self):177 def onImageAddClick(self):
146 """Add this item to the OOS"""178 log.debug(u'Image Live Requested')
147 pass179 service_item = ServiceItem(self.parent)
180 service_item.addIcon( ":/media/media_image.png")
181 service_item.render_manager = self.parent.render_manager
182 self.generateSlideData(service_item)
183 self.parent.service_manager.addServiceItem(service_item)