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