Merge lp:~trb143/openlp/servicing2 into lp:openlp
- servicing2
- Merge into trunk
Proposed by
Tim Bentley
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~trb143/openlp/servicing2 |
Merge into: | lp:openlp |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~trb143/openlp/servicing2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Martin Thompson (community) | Approve | ||
Review via email: mp+8325@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) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'cnvdb.py' |
2 | --- cnvdb.py 2009-07-02 19:10:14 +0000 |
3 | +++ cnvdb.py 2009-07-06 16:34:13 +0000 |
4 | @@ -31,7 +31,7 @@ |
5 | writefile = codecs.open(outname, 'w', encoding='utf-8') |
6 | for line in infile: |
7 | #replace the quotes with quotes |
8 | - line, replace("''", "'") |
9 | + line = line.replace(u'\'\'', u'\'') |
10 | writefile.write(line) |
11 | infile.close() |
12 | writefile.close() |
13 | |
14 | === modified file 'openlp/core/lib/plugin.py' |
15 | --- openlp/core/lib/plugin.py 2009-06-28 06:54:12 +0000 |
16 | +++ openlp/core/lib/plugin.py 2009-07-06 16:34:13 +0000 |
17 | @@ -102,7 +102,6 @@ |
18 | self.render_manager = plugin_helpers[u'render'] |
19 | self.service_manager = plugin_helpers[u'service'] |
20 | self.settings = plugin_helpers[u'settings'] |
21 | - self.slideManager = plugin_helpers[u'slideManager'] |
22 | self.dnd_id=None |
23 | |
24 | def check_pre_conditions(self): |
25 | |
26 | === modified file 'openlp/core/ui/__init__.py' |
27 | --- openlp/core/ui/__init__.py 2009-07-03 19:08:21 +0000 |
28 | +++ openlp/core/ui/__init__.py 2009-07-06 16:34:13 +0000 |
29 | @@ -18,7 +18,6 @@ |
30 | Place, Suite 330, Boston, MA 02111-1307 USA |
31 | """ |
32 | from slidecontroller import MasterToolbar |
33 | -from slidecontrollermanager import SlideControllerManager |
34 | from maindisplay import MainDisplay |
35 | from amendthemeform import AmendThemeForm |
36 | from slidecontroller import SlideController |
37 | |
38 | === modified file 'openlp/core/ui/amendthemeform.py' |
39 | --- openlp/core/ui/amendthemeform.py 2009-06-16 18:21:24 +0000 |
40 | +++ openlp/core/ui/amendthemeform.py 2009-07-06 16:34:13 +0000 |
41 | @@ -128,9 +128,7 @@ |
42 | unicode(self.theme.display_outline), unicode(self.theme.display_outline_color), |
43 | unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign), |
44 | unicode(self.theme.display_wrapStyle)) |
45 | - |
46 | theme = new_theme.extract_xml() |
47 | - |
48 | self.thememanager.saveTheme(theme_name, theme, save_from, save_to) |
49 | return QtGui.QDialog.accept(self) |
50 | |
51 | @@ -526,4 +524,4 @@ |
52 | def previewTheme(self, theme): |
53 | if self.allowPreview: |
54 | frame = self.thememanager.generateImage(theme) |
55 | - self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) |
56 | \ No newline at end of file |
57 | + self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) |
58 | |
59 | === modified file 'openlp/core/ui/mainwindow.py' |
60 | --- openlp/core/ui/mainwindow.py 2009-07-03 19:08:21 +0000 |
61 | +++ openlp/core/ui/mainwindow.py 2009-07-07 16:35:01 +0000 |
62 | @@ -23,7 +23,7 @@ |
63 | from PyQt4 import QtCore, QtGui |
64 | |
65 | from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \ |
66 | - ThemeManager, MainDisplay, SlideController, SlideControllerManager |
67 | + ThemeManager, MainDisplay, SlideController |
68 | from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \ |
69 | EventManager, RenderManager, PluginConfig |
70 | from openlp.core import PluginManager |
71 | @@ -41,6 +41,7 @@ |
72 | This constructor sets up the interface, the various managers, and the |
73 | plugins. |
74 | """ |
75 | + self.oosNotSaved = False |
76 | self.mainWindow = QtGui.QMainWindow() |
77 | self.mainWindow.__class__.closeEvent = self.onCloseEvent |
78 | self.mainDisplay = MainDisplay(None, screens) |
79 | @@ -50,7 +51,6 @@ |
80 | self.alertForm = AlertForm(self) |
81 | self.aboutForm = AboutForm() |
82 | self.settingsForm = SettingsForm(self.screenList, self) |
83 | - self.slideControllerManager = SlideControllerManager(self) |
84 | # Set up the path with plugins |
85 | pluginpath = os.path.split(os.path.abspath(__file__))[0] |
86 | pluginpath = os.path.abspath( |
87 | @@ -73,7 +73,6 @@ |
88 | self.plugin_helpers[u'render'] = self.RenderManager |
89 | self.plugin_helpers[u'service'] = self.ServiceManagerContents |
90 | self.plugin_helpers[u'settings'] = self.settingsForm |
91 | - self.plugin_helpers[u'slideManager'] = self.slideControllerManager |
92 | self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, |
93 | self.EventManager) |
94 | # hook methods have to happen after find_plugins. Find plugins needs the |
95 | @@ -129,8 +128,46 @@ |
96 | """ |
97 | Hook to close the main window and display windows on exit |
98 | """ |
99 | - self.mainDisplay.close() |
100 | - event.accept() |
101 | + if self.oosNotSaved == True: |
102 | + box = QtGui.QMessageBox() |
103 | + box.setWindowTitle(translate(u'mainWindow', u'Question?')) |
104 | + box.setText(translate(u'mainWindow', u'Save changes to Order of Service?')) |
105 | + box.setIcon(QtGui.QMessageBox.Question) |
106 | + box.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel); |
107 | + box.setDefaultButton(QtGui.QMessageBox.Save); |
108 | + ret = box.exec_() |
109 | + if ret == QtGui.QMessageBox.Save: |
110 | + self.ServiceManagerContents.onSaveService() |
111 | + self.mainDisplay.close() |
112 | + event.accept() |
113 | + elif ret == QtGui.QMessageBox.Discard: |
114 | + self.mainDisplay.close() |
115 | + event.accept() |
116 | + else: |
117 | + event.ignore() |
118 | + else: |
119 | + self.mainDisplay.close() |
120 | + event.accept() |
121 | + |
122 | + def OosChanged(self, reset = False, oosName = None): |
123 | + """ |
124 | + Hook to change the title if the OOS has been changed |
125 | + reset - tells if the OOS has been cleared or saved |
126 | + oosName - is the name of the OOS (if it has one) |
127 | + """ |
128 | + if reset == True: |
129 | + self.oosNotSaved = False |
130 | + if oosName is None: |
131 | + title = self.mainTitle |
132 | + else: |
133 | + title = self.mainTitle + u' - (' + oosName + u')' |
134 | + else: |
135 | + self.oosNotSaved = True |
136 | + if oosName is None: |
137 | + title = self.mainTitle + u' - *' |
138 | + else: |
139 | + title = self.mainTitle + u' - *(' + oosName + u')' |
140 | + self.mainWindow.setWindowTitle(title) |
141 | |
142 | def setupUi(self): |
143 | """ |
144 | @@ -411,7 +448,8 @@ |
145 | """ |
146 | Set up the translation system |
147 | """ |
148 | - self.mainWindow.setWindowTitle(translate(u'mainWindow', u'OpenLP 2.0')) |
149 | + self.mainTitle = translate(u'mainWindow', u'OpenLP 2.0') |
150 | + self.mainWindow.setWindowTitle(self.mainTitle) |
151 | self.FileMenu.setTitle(translate(u'mainWindow', u'&File')) |
152 | self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import')) |
153 | self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export')) |
154 | |
155 | === modified file 'openlp/core/ui/servicemanager.py' |
156 | --- openlp/core/ui/servicemanager.py 2009-06-29 17:37:46 +0000 |
157 | +++ openlp/core/ui/servicemanager.py 2009-07-07 16:35:01 +0000 |
158 | @@ -63,6 +63,7 @@ |
159 | QtGui.QWidget.__init__(self) |
160 | self.parent = parent |
161 | self.serviceItems = [] |
162 | + self.serviceName = u'' |
163 | self.Layout = QtGui.QVBoxLayout(self) |
164 | self.Layout.setSpacing(0) |
165 | self.Layout.setMargin(0) |
166 | @@ -151,6 +152,7 @@ |
167 | self.serviceItems.remove(self.serviceItems[item]) |
168 | self.serviceItems.insert(0, temp) |
169 | self.repaintServiceList() |
170 | + self.parent.OosChanged(False, self.serviceName) |
171 | |
172 | def onServiceUp(self): |
173 | """ |
174 | @@ -163,6 +165,7 @@ |
175 | self.serviceItems.remove(self.serviceItems[item]) |
176 | self.serviceItems.insert(item - 1, temp) |
177 | self.repaintServiceList() |
178 | + self.parent.OosChanged(False, self.serviceName) |
179 | |
180 | def onServiceDown(self): |
181 | """ |
182 | @@ -175,6 +178,7 @@ |
183 | self.serviceItems.remove(self.serviceItems[item]) |
184 | self.serviceItems.insert(item + 1, temp) |
185 | self.repaintServiceList() |
186 | + self.parent.OosChanged(False, self.serviceName) |
187 | |
188 | def onServiceEnd(self): |
189 | """ |
190 | @@ -186,6 +190,7 @@ |
191 | self.serviceItems.remove(self.serviceItems[item]) |
192 | self.serviceItems.insert(len(self.serviceItems), temp) |
193 | self.repaintServiceList() |
194 | + self.parent.OosChanged(False, self.serviceName) |
195 | |
196 | def onNewService(self): |
197 | """ |
198 | @@ -193,6 +198,8 @@ |
199 | """ |
200 | self.ServiceManagerList.clear() |
201 | self.serviceItems = [] |
202 | + self.serviceName = u'' |
203 | + self.parent.OosChanged(True, self.serviceName) |
204 | |
205 | def onDeleteFromService(self): |
206 | """ |
207 | @@ -202,6 +209,7 @@ |
208 | if item is not -1: |
209 | self.serviceItems.remove(self.serviceItems[item]) |
210 | self.repaintServiceList() |
211 | + self.parent.OosChanged(False, self.serviceName) |
212 | |
213 | def repaintServiceList(self): |
214 | #Correct order of idems in array |
215 | @@ -252,6 +260,7 @@ |
216 | os.remove(servicefile) |
217 | except: |
218 | pass #if not present do not worry |
219 | + self.parent.OosChanged(True, self.serviceName) |
220 | |
221 | def onLoadService(self): |
222 | """ |
223 | @@ -260,6 +269,7 @@ |
224 | filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(), |
225 | u'Services (*.oos)') |
226 | filename = unicode(filename) |
227 | + name = filename.split(os.path.sep) |
228 | if filename != u'': |
229 | self.config.set_last_dir(filename) |
230 | zip = zipfile.ZipFile(unicode(filename)) |
231 | @@ -279,7 +289,6 @@ |
232 | f.close() |
233 | self.onNewService() |
234 | for item in items: |
235 | - #print item |
236 | serviceitem = ServiceItem() |
237 | serviceitem.RenderManager = self.parent.RenderManager |
238 | serviceitem.set_from_oos(item, self.servicePath ) |
239 | @@ -287,7 +296,10 @@ |
240 | try: |
241 | os.remove(p_file) |
242 | except: |
243 | - pass #if not present do not worry |
244 | + #if not present do not worry |
245 | + pass |
246 | + self.serviceName = name[len(name) - 1] |
247 | + self.parent.OosChanged(True, self.serviceName) |
248 | |
249 | def onThemeComboBoxSelected(self, currentIndex): |
250 | """ |
251 | @@ -323,6 +335,7 @@ |
252 | treewidgetitem1.setText(0,text[:40]) |
253 | treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count)) |
254 | count = count + 1 |
255 | + self.parent.OosChanged(False, self.serviceName) |
256 | |
257 | def makePreview(self): |
258 | """ |
259 | |
260 | === modified file 'openlp/core/ui/slidecontroller.py' |
261 | --- openlp/core/ui/slidecontroller.py 2009-07-03 20:32:33 +0000 |
262 | +++ openlp/core/ui/slidecontroller.py 2009-07-06 16:34:13 +0000 |
263 | @@ -183,7 +183,7 @@ |
264 | |
265 | class MasterToolbar(QtCore.QObject): |
266 | """ |
267 | - Class from which all tollbars should extend |
268 | + Class from which all toolbars should extend |
269 | """ |
270 | def __init__(self, isLive): |
271 | self.Toolbar = None |
272 | @@ -232,6 +232,13 @@ |
273 | translate(u'SlideController', u'Close Screen'), |
274 | self.onBlankScreen) |
275 | |
276 | + def serviceLoaded(self): |
277 | + """ |
278 | + method to allow toolbars to know when the service item |
279 | + is fully in place |
280 | + """ |
281 | + pass |
282 | + |
283 | def onSlideSelectedFirst(self): |
284 | """ |
285 | Go to the first slide. |
286 | @@ -325,3 +332,4 @@ |
287 | else: |
288 | self.PreviewListWidget.selectRow(slideno) |
289 | self.onSlideSelected() |
290 | + self.serviceLoaded() |
291 | |
292 | === removed file 'openlp/core/ui/slidecontrollermanager.py' |
293 | --- openlp/core/ui/slidecontrollermanager.py 2009-06-28 06:54:12 +0000 |
294 | +++ openlp/core/ui/slidecontrollermanager.py 1970-01-01 00:00:00 +0000 |
295 | @@ -1,52 +0,0 @@ |
296 | -# -*- coding: utf-8 -*- |
297 | -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 |
298 | -""" |
299 | -OpenLP - Open Source Lyrics Projection |
300 | -Copyright (c) 2008 Raoul Snyman |
301 | -Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, |
302 | - |
303 | -This program is free software; you can redistribute it and/or modify it under |
304 | -the terms of the GNU General Public License as published by the Free Software |
305 | -Foundation; version 2 of the License. |
306 | - |
307 | -This program is distributed in the hope that it will be useful, but WITHOUT ANY |
308 | -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A |
309 | -PARTICULAR PURPOSE. See the GNU General Public License for more details. |
310 | - |
311 | -You should have received a copy of the GNU General Public License along with |
312 | -this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
313 | -Place, Suite 330, Boston, MA 02111-1307 USA |
314 | -""" |
315 | -import logging |
316 | -import os |
317 | - |
318 | -class SlideControllerManager(): |
319 | - """ |
320 | - This class controls which SlideController is availabe to the |
321 | - main window |
322 | - """ |
323 | - global log |
324 | - log = logging.getLogger(u'SlideControllerManager') |
325 | - |
326 | - def __init__(self, parent): |
327 | - """ |
328 | - Set up the Slide Controller. Manager |
329 | - """ |
330 | - self.parent = parent |
331 | - self.live = {} |
332 | - self.preview = {} |
333 | - |
334 | - def add_controllers(self, handle, preview, live): |
335 | - self.live[handle] = live |
336 | - self.preview[handle] = preview |
337 | - print self.live |
338 | - |
339 | - def getPreviewController(self, handle): |
340 | - return self.preview[handle] |
341 | - |
342 | - def getLiveController(self, handle): |
343 | - print "---" |
344 | - print self.live |
345 | - print handle |
346 | - print self.live[handle] |
347 | - return self.live[handle] |
348 | |
349 | === modified file 'openlp/core/ui/thememanager.py' |
350 | --- openlp/core/ui/thememanager.py 2009-07-02 19:04:50 +0000 |
351 | +++ openlp/core/ui/thememanager.py 2009-07-06 16:34:13 +0000 |
352 | @@ -21,109 +21,16 @@ |
353 | import sys |
354 | import zipfile |
355 | import shutil |
356 | +import logging |
357 | |
358 | -from time import sleep |
359 | from xml.etree.ElementTree import ElementTree, XML |
360 | from PyQt4 import QtCore, QtGui |
361 | |
362 | from openlp.core.ui import AmendThemeForm, ServiceManager |
363 | from openlp.core.theme import Theme |
364 | -from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml |
365 | +from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml, buildIcon |
366 | from openlp.core.utils import ConfigHelper |
367 | |
368 | -import logging |
369 | - |
370 | -class ThemeData(QtCore.QAbstractListModel): |
371 | - """ |
372 | - Tree of items for an order of Theme. |
373 | - Includes methods for reading and writing the contents to an OOS file |
374 | - Root contains a list of ThemeItems |
375 | - """ |
376 | - global log |
377 | - log = logging.getLogger(u'ThemeData') |
378 | - |
379 | - def __init__(self): |
380 | - QtCore.QAbstractListModel.__init__(self) |
381 | - self.items = [] |
382 | - self.rowheight = 50 |
383 | - self.maximagewidth = self.rowheight * 16 / 9.0; |
384 | - log.info(u'Starting') |
385 | - |
386 | - def clearItems(self): |
387 | - self.items = [] |
388 | - |
389 | - def rowCount(self, parent): |
390 | - return len(self.items) |
391 | - |
392 | - def insertRow(self, row, filename): |
393 | - self.beginInsertRows(QtCore.QModelIndex(), row, row) |
394 | - log.debug(u'insert row %d:%s' % (row, filename)) |
395 | - (prefix, shortfilename) = os.path.split(unicode(filename)) |
396 | - log.debug(u'shortfilename = %s' % shortfilename) |
397 | - theme = shortfilename.split(u'.') |
398 | - # create a preview image |
399 | - if os.path.exists(filename): |
400 | - preview = QtGui.QImage(unicode(filename)) |
401 | - width = self.maximagewidth |
402 | - height = self.rowheight |
403 | - preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) |
404 | - realwidth = preview.width() |
405 | - realheight = preview.height() |
406 | - # and move it to the centre of the preview space |
407 | - pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied) |
408 | - pixmap.fill(QtCore.Qt.black) |
409 | - painter = QtGui.QPainter(pixmap) |
410 | - painter.drawImage((width - realwidth) / 2, (height - realheight) / 2, preview) |
411 | - else: |
412 | - width = self.maximagewidth |
413 | - height = self.rowheight |
414 | - pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied) |
415 | - pixmap.fill(QtCore.Qt.black) |
416 | - # finally create the row |
417 | - self.items.insert(row, (filename, pixmap, shortfilename, theme[0])) |
418 | - log.debug(u'Items: %s' % self.items) |
419 | - self.endInsertRows() |
420 | - |
421 | - def removeRow(self, row): |
422 | - self.beginRemoveRows(QtCore.QModelIndex(), row, row) |
423 | - self.items.pop(row) |
424 | - self.endRemoveRows() |
425 | - |
426 | - def addRow(self, item): |
427 | - self.insertRow(len(self.items), item) |
428 | - |
429 | - def data(self, index, role): |
430 | - row = index.row() |
431 | - if row > len(self.items): |
432 | - # if the last row is selected and deleted, we then get called with an empty row! |
433 | - return QtCore.QVariant() |
434 | - if role == QtCore.Qt.DisplayRole: |
435 | - retval = self.items[row][3] |
436 | - elif role == QtCore.Qt.DecorationRole: |
437 | - retval = self.items[row][1] |
438 | - else: |
439 | - retval = QtCore.QVariant() |
440 | - if type(retval) is not type(QtCore.QVariant): |
441 | - return QtCore.QVariant(retval) |
442 | - else: |
443 | - return retval |
444 | - |
445 | - def __iter__(self): |
446 | - for item in self.items: |
447 | - yield item |
448 | - |
449 | - def getValue(self, index): |
450 | - row = index.row() |
451 | - return self.items[row] |
452 | - |
453 | - def getItem(self, row): |
454 | - log.info(u'Get Item:%d -> %s' % (row, unicode(self.items))) |
455 | - return self.items[row] |
456 | - |
457 | - def getList(self): |
458 | - filelist = [item[3] for item in self.items] |
459 | - return filelist |
460 | - |
461 | class ThemeManager(QtGui.QWidget): |
462 | """ |
463 | Manages the orders of Theme. |
464 | @@ -157,13 +64,10 @@ |
465 | translate(u'ThemeManager', u'Export a theme'), self.onExportTheme) |
466 | self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar) |
467 | self.Layout.addWidget(self.Toolbar) |
468 | - |
469 | - self.ThemeListView = QtGui.QListView(self) |
470 | - self.themeData = ThemeData() |
471 | - self.ThemeListView.setModel(self.themeData) |
472 | - self.ThemeListView.setAlternatingRowColors(True) |
473 | - self.Layout.addWidget(self.ThemeListView) |
474 | - |
475 | + self.ThemeListWidget = QtGui.QListWidget(self) |
476 | + self.ThemeListWidget.setAlternatingRowColors(True) |
477 | + self.ThemeListWidget.setIconSize(QtCore.QSize(88,50)) |
478 | + self.Layout.addWidget(self.ThemeListWidget) |
479 | self.themelist = [] |
480 | self.path = os.path.join(ConfigHelper.get_data_path(), u'themes') |
481 | self.checkThemesExists(self.path) |
482 | @@ -174,21 +78,18 @@ |
483 | self.amendThemeForm.exec_() |
484 | |
485 | def onEditTheme(self): |
486 | - items = self.ThemeListView.selectedIndexes() |
487 | - if len(items) > 0: |
488 | - for item in items: |
489 | - data = self.themeData.getValue(item) |
490 | - self.amendThemeForm.loadTheme(data[3]) |
491 | + item = self.ThemeListWidget.currentItem() |
492 | + if item is not None: |
493 | + self.amendThemeForm.loadTheme(unicode(item.text())) |
494 | self.amendThemeForm.exec_() |
495 | |
496 | def onDeleteTheme(self): |
497 | - items = self.ThemeListView.selectedIndexes() |
498 | - if len(items) > 0: |
499 | - theme = u'' |
500 | - for item in items: |
501 | - data = self.themeData.getValue(item) |
502 | - theme = data[3] |
503 | + item = self.ThemeListWidget.currentItem() |
504 | + if item is not None: |
505 | + theme = unicode(item.text()) |
506 | th = theme + u'.png' |
507 | + row = self.ThemeListWidget.row(item) |
508 | + self.ThemeListWidget.takeItem(row) |
509 | try: |
510 | os.remove(os.path.join(self.path, th)) |
511 | except: |
512 | @@ -199,8 +100,6 @@ |
513 | except: |
514 | #if not present do not worry |
515 | pass |
516 | - self.themeData.clearItems() |
517 | - self.loadThemes() |
518 | |
519 | def onExportTheme(self): |
520 | pass |
521 | @@ -213,24 +112,37 @@ |
522 | if len(files) > 0: |
523 | for file in files: |
524 | self.unzipTheme(file, self.path) |
525 | - self.themeData.clearItems() |
526 | self.loadThemes() |
527 | |
528 | def loadThemes(self): |
529 | + """ |
530 | + Loads the theme lists and triggers updates accross |
531 | + the whole system using direct calls or core functions |
532 | + and events for the plugins. |
533 | + The plugins will call back in to get the real list if they want it. |
534 | + """ |
535 | log.debug(u'Load themes from dir') |
536 | + self.themelist = [] |
537 | + self.ThemeListWidget.clear() |
538 | for root, dirs, files in os.walk(self.path): |
539 | for name in files: |
540 | if name.endswith(u'.png'): |
541 | - #check to see file is in route directory |
542 | + #check to see file is in theme root directory |
543 | theme = os.path.join(self.path, name) |
544 | if os.path.exists(theme): |
545 | - self.themeData.addRow(theme) |
546 | + (path, filename) = os.path.split(unicode(file)) |
547 | + textName = os.path.splitext(name)[0] |
548 | + item_name = QtGui.QListWidgetItem(textName) |
549 | + item_name.setIcon(buildIcon(theme)) |
550 | + item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(textName)) |
551 | + self.ThemeListWidget.addItem(item_name) |
552 | + self.themelist.append(textName) |
553 | self.parent.EventManager.post_event(Event(EventType.ThemeListChanged)) |
554 | self.parent.ServiceManagerContents.updateThemeList(self.getThemes()) |
555 | self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes()) |
556 | |
557 | def getThemes(self): |
558 | - return self.themeData.getList() |
559 | + return self.themelist |
560 | |
561 | def getThemeData(self, themename): |
562 | log.debug(u'getthemedata for theme %s', themename) |
563 | @@ -337,6 +249,10 @@ |
564 | return newtheme.extract_xml() |
565 | |
566 | def saveTheme(self, name, theme_xml, image_from, image_to) : |
567 | + """ |
568 | + Called by thememaintenance Dialog to save the theme |
569 | + and to trigger the reload of the theme list |
570 | + """ |
571 | log.debug(u'saveTheme %s %s', name, theme_xml) |
572 | theme_dir = os.path.join(self.path, name) |
573 | if os.path.exists(theme_dir) == False: |
574 | @@ -348,7 +264,6 @@ |
575 | if image_from is not None and image_from != image_to: |
576 | shutil.copyfile(image_from, image_to) |
577 | self.generateAndSaveImage(self.path, name, theme_xml) |
578 | - self.themeData.clearItems() |
579 | self.loadThemes() |
580 | |
581 | def generateAndSaveImage(self, dir, name, theme_xml): |
582 | @@ -357,7 +272,6 @@ |
583 | theme.parse(theme_xml) |
584 | theme.extend_image_filename(dir) |
585 | frame = self.generateImage(theme) |
586 | - #im = frame.toImage() |
587 | samplepathname = os.path.join(self.path, name + u'.png') |
588 | if os.path.exists(samplepathname): |
589 | os.unlink(samplepathname) |
590 | @@ -365,6 +279,9 @@ |
591 | log.debug(u'Theme image written to %s', samplepathname) |
592 | |
593 | def generateImage(self, themedata): |
594 | + """ |
595 | + Call the RenderManager to build a Sample Image |
596 | + """ |
597 | log.debug(u'generateImage %s ', themedata) |
598 | frame = self.parent.RenderManager.generate_preview(themedata) |
599 | return frame |
600 | |
601 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' |
602 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-07-04 05:52:30 +0000 |
603 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-07-07 16:35:01 +0000 |
604 | @@ -494,7 +494,7 @@ |
605 | if end_verse == '': |
606 | end_verse = 99 |
607 | if start_chapter == '': |
608 | - message = u'No chapter found for search' |
609 | + message = u'No chapter found for search criteria' |
610 | #print 'message = ' + unicode(message) |
611 | #print 'search = ' + unicode(original) |
612 | #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) |
613 | |
614 | === modified file 'openlp/plugins/images/lib/imageslidecontroller.py' |
615 | --- openlp/plugins/images/lib/imageslidecontroller.py 2009-07-03 20:32:33 +0000 |
616 | +++ openlp/plugins/images/lib/imageslidecontroller.py 2009-07-06 16:34:13 +0000 |
617 | @@ -74,14 +74,26 @@ |
618 | u':/media/media_stop.png', |
619 | translate(u'SlideController', u'Stop continuous loop'), |
620 | self.onStopLoop) |
621 | + self.Toolbar.addSeparator() |
622 | + self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar) |
623 | + self.SpinWidget = QtGui.QWidgetAction(self.Toolbar) |
624 | + self.SpinWidget.setDefaultWidget(self.DelaySpinBox) |
625 | + self.Toolbar.addAction(self.SpinWidget) |
626 | + #self.Layout.addWidget(self.Toolbar) |
627 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
628 | + self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's')) |
629 | + |
630 | + def serviceLoaded(self): |
631 | + self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay) |
632 | + if self.PreviewListWidget.rowCount() == 1: |
633 | + self.DelaySpinBox.setEnabled(False) |
634 | |
635 | def onStartLoop(self): |
636 | """ |
637 | Go to the last slide. |
638 | """ |
639 | - delay = self.parent.parent.ImageTab.loop_delay |
640 | - self.timer_id = self.startTimer(delay * 1000) |
641 | + if self.PreviewListWidget.rowCount() > 1: |
642 | + self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000) |
643 | |
644 | def onStopLoop(self): |
645 | """ |
646 | @@ -92,4 +104,3 @@ |
647 | def timerEvent(self, event): |
648 | if event.timerId() == self.timer_id: |
649 | self.onSlideSelectedNext() |
650 | - |
651 | |
652 | === modified file 'openlp/plugins/images/lib/imagetab.py' |
653 | --- openlp/plugins/images/lib/imagetab.py 2009-07-03 20:33:41 +0000 |
654 | +++ openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000 |
655 | @@ -49,7 +49,6 @@ |
656 | self.TimeoutSpacer = QtGui.QSpacerItem(147, 20, |
657 | QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) |
658 | self.TimeoutLayout.addItem(self.TimeoutSpacer) |
659 | - |
660 | self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox) |
661 | # Signals and slots |
662 | QtCore.QObject.connect(self.TimeoutSpinBox, |
663 | @@ -57,6 +56,7 @@ |
664 | |
665 | def retranslateUi(self): |
666 | self.TimeoutLabel.setText(translate(u'ImageTab', u'Slide Loop Delay:')) |
667 | + self.TimeoutSpinBox.setSuffix(translate(u'ImageTab', u's')) |
668 | |
669 | def onTimeoutSpinBoxChanged(self): |
670 | self.loop_delay = self.TimeoutSpinBox.value() |
File and Function cleanups
Improvements from last merge
OOS saving required now.