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

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

File and Function cleanups
Improvements from last merge
OOS saving required now.

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

Looks fine.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cnvdb.py'
--- cnvdb.py 2009-07-02 19:10:14 +0000
+++ cnvdb.py 2009-07-06 16:34:13 +0000
@@ -31,7 +31,7 @@
31 writefile = codecs.open(outname, 'w', encoding='utf-8')31 writefile = codecs.open(outname, 'w', encoding='utf-8')
32 for line in infile:32 for line in infile:
33 #replace the quotes with quotes33 #replace the quotes with quotes
34 line, replace("''", "'")34 line = line.replace(u'\'\'', u'\'')
35 writefile.write(line)35 writefile.write(line)
36 infile.close()36 infile.close()
37 writefile.close()37 writefile.close()
3838
=== modified file 'openlp/core/lib/plugin.py'
--- openlp/core/lib/plugin.py 2009-06-28 06:54:12 +0000
+++ openlp/core/lib/plugin.py 2009-07-06 16:34:13 +0000
@@ -102,7 +102,6 @@
102 self.render_manager = plugin_helpers[u'render']102 self.render_manager = plugin_helpers[u'render']
103 self.service_manager = plugin_helpers[u'service']103 self.service_manager = plugin_helpers[u'service']
104 self.settings = plugin_helpers[u'settings']104 self.settings = plugin_helpers[u'settings']
105 self.slideManager = plugin_helpers[u'slideManager']
106 self.dnd_id=None105 self.dnd_id=None
107106
108 def check_pre_conditions(self):107 def check_pre_conditions(self):
109108
=== modified file 'openlp/core/ui/__init__.py'
--- openlp/core/ui/__init__.py 2009-07-03 19:08:21 +0000
+++ openlp/core/ui/__init__.py 2009-07-06 16:34:13 +0000
@@ -18,7 +18,6 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20from slidecontroller import MasterToolbar20from slidecontroller import MasterToolbar
21from slidecontrollermanager import SlideControllerManager
22from maindisplay import MainDisplay21from maindisplay import MainDisplay
23from amendthemeform import AmendThemeForm22from amendthemeform import AmendThemeForm
24from slidecontroller import SlideController23from slidecontroller import SlideController
2524
=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py 2009-06-16 18:21:24 +0000
+++ openlp/core/ui/amendthemeform.py 2009-07-06 16:34:13 +0000
@@ -128,9 +128,7 @@
128 unicode(self.theme.display_outline), unicode(self.theme.display_outline_color),128 unicode(self.theme.display_outline), unicode(self.theme.display_outline_color),
129 unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign),129 unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign),
130 unicode(self.theme.display_wrapStyle))130 unicode(self.theme.display_wrapStyle))
131
132 theme = new_theme.extract_xml()131 theme = new_theme.extract_xml()
133
134 self.thememanager.saveTheme(theme_name, theme, save_from, save_to)132 self.thememanager.saveTheme(theme_name, theme, save_from, save_to)
135 return QtGui.QDialog.accept(self)133 return QtGui.QDialog.accept(self)
136134
@@ -526,4 +524,4 @@
526 def previewTheme(self, theme):524 def previewTheme(self, theme):
527 if self.allowPreview:525 if self.allowPreview:
528 frame = self.thememanager.generateImage(theme)526 frame = self.thememanager.generateImage(theme)
529 self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
530\ No newline at end of file527\ No newline at end of file
528 self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
531529
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-07-03 19:08:21 +0000
+++ openlp/core/ui/mainwindow.py 2009-07-07 16:35:01 +0000
@@ -23,7 +23,7 @@
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
2424
25from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \25from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \
26 ThemeManager, MainDisplay, SlideController, SlideControllerManager26 ThemeManager, MainDisplay, SlideController
27from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \27from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \
28 EventManager, RenderManager, PluginConfig28 EventManager, RenderManager, PluginConfig
29from openlp.core import PluginManager29from openlp.core import PluginManager
@@ -41,6 +41,7 @@
41 This constructor sets up the interface, the various managers, and the41 This constructor sets up the interface, the various managers, and the
42 plugins.42 plugins.
43 """43 """
44 self.oosNotSaved = False
44 self.mainWindow = QtGui.QMainWindow()45 self.mainWindow = QtGui.QMainWindow()
45 self.mainWindow.__class__.closeEvent = self.onCloseEvent46 self.mainWindow.__class__.closeEvent = self.onCloseEvent
46 self.mainDisplay = MainDisplay(None, screens)47 self.mainDisplay = MainDisplay(None, screens)
@@ -50,7 +51,6 @@
50 self.alertForm = AlertForm(self)51 self.alertForm = AlertForm(self)
51 self.aboutForm = AboutForm()52 self.aboutForm = AboutForm()
52 self.settingsForm = SettingsForm(self.screenList, self)53 self.settingsForm = SettingsForm(self.screenList, self)
53 self.slideControllerManager = SlideControllerManager(self)
54 # Set up the path with plugins54 # Set up the path with plugins
55 pluginpath = os.path.split(os.path.abspath(__file__))[0]55 pluginpath = os.path.split(os.path.abspath(__file__))[0]
56 pluginpath = os.path.abspath(56 pluginpath = os.path.abspath(
@@ -73,7 +73,6 @@
73 self.plugin_helpers[u'render'] = self.RenderManager73 self.plugin_helpers[u'render'] = self.RenderManager
74 self.plugin_helpers[u'service'] = self.ServiceManagerContents74 self.plugin_helpers[u'service'] = self.ServiceManagerContents
75 self.plugin_helpers[u'settings'] = self.settingsForm75 self.plugin_helpers[u'settings'] = self.settingsForm
76 self.plugin_helpers[u'slideManager'] = self.slideControllerManager
77 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,76 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
78 self.EventManager)77 self.EventManager)
79 # hook methods have to happen after find_plugins. Find plugins needs the78 # hook methods have to happen after find_plugins. Find plugins needs the
@@ -129,8 +128,46 @@
129 """128 """
130 Hook to close the main window and display windows on exit129 Hook to close the main window and display windows on exit
131 """130 """
132 self.mainDisplay.close()131 if self.oosNotSaved == True:
133 event.accept()132 box = QtGui.QMessageBox()
133 box.setWindowTitle(translate(u'mainWindow', u'Question?'))
134 box.setText(translate(u'mainWindow', u'Save changes to Order of Service?'))
135 box.setIcon(QtGui.QMessageBox.Question)
136 box.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel);
137 box.setDefaultButton(QtGui.QMessageBox.Save);
138 ret = box.exec_()
139 if ret == QtGui.QMessageBox.Save:
140 self.ServiceManagerContents.onSaveService()
141 self.mainDisplay.close()
142 event.accept()
143 elif ret == QtGui.QMessageBox.Discard:
144 self.mainDisplay.close()
145 event.accept()
146 else:
147 event.ignore()
148 else:
149 self.mainDisplay.close()
150 event.accept()
151
152 def OosChanged(self, reset = False, oosName = None):
153 """
154 Hook to change the title if the OOS has been changed
155 reset - tells if the OOS has been cleared or saved
156 oosName - is the name of the OOS (if it has one)
157 """
158 if reset == True:
159 self.oosNotSaved = False
160 if oosName is None:
161 title = self.mainTitle
162 else:
163 title = self.mainTitle + u' - (' + oosName + u')'
164 else:
165 self.oosNotSaved = True
166 if oosName is None:
167 title = self.mainTitle + u' - *'
168 else:
169 title = self.mainTitle + u' - *(' + oosName + u')'
170 self.mainWindow.setWindowTitle(title)
134171
135 def setupUi(self):172 def setupUi(self):
136 """173 """
@@ -411,7 +448,8 @@
411 """448 """
412 Set up the translation system449 Set up the translation system
413 """450 """
414 self.mainWindow.setWindowTitle(translate(u'mainWindow', u'OpenLP 2.0'))451 self.mainTitle = translate(u'mainWindow', u'OpenLP 2.0')
452 self.mainWindow.setWindowTitle(self.mainTitle)
415 self.FileMenu.setTitle(translate(u'mainWindow', u'&File'))453 self.FileMenu.setTitle(translate(u'mainWindow', u'&File'))
416 self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import'))454 self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import'))
417 self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export'))455 self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export'))
418456
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-06-29 17:37:46 +0000
+++ openlp/core/ui/servicemanager.py 2009-07-07 16:35:01 +0000
@@ -63,6 +63,7 @@
63 QtGui.QWidget.__init__(self)63 QtGui.QWidget.__init__(self)
64 self.parent = parent64 self.parent = parent
65 self.serviceItems = []65 self.serviceItems = []
66 self.serviceName = u''
66 self.Layout = QtGui.QVBoxLayout(self)67 self.Layout = QtGui.QVBoxLayout(self)
67 self.Layout.setSpacing(0)68 self.Layout.setSpacing(0)
68 self.Layout.setMargin(0)69 self.Layout.setMargin(0)
@@ -151,6 +152,7 @@
151 self.serviceItems.remove(self.serviceItems[item])152 self.serviceItems.remove(self.serviceItems[item])
152 self.serviceItems.insert(0, temp)153 self.serviceItems.insert(0, temp)
153 self.repaintServiceList()154 self.repaintServiceList()
155 self.parent.OosChanged(False, self.serviceName)
154156
155 def onServiceUp(self):157 def onServiceUp(self):
156 """158 """
@@ -163,6 +165,7 @@
163 self.serviceItems.remove(self.serviceItems[item])165 self.serviceItems.remove(self.serviceItems[item])
164 self.serviceItems.insert(item - 1, temp)166 self.serviceItems.insert(item - 1, temp)
165 self.repaintServiceList()167 self.repaintServiceList()
168 self.parent.OosChanged(False, self.serviceName)
166169
167 def onServiceDown(self):170 def onServiceDown(self):
168 """171 """
@@ -175,6 +178,7 @@
175 self.serviceItems.remove(self.serviceItems[item])178 self.serviceItems.remove(self.serviceItems[item])
176 self.serviceItems.insert(item + 1, temp)179 self.serviceItems.insert(item + 1, temp)
177 self.repaintServiceList()180 self.repaintServiceList()
181 self.parent.OosChanged(False, self.serviceName)
178182
179 def onServiceEnd(self):183 def onServiceEnd(self):
180 """184 """
@@ -186,6 +190,7 @@
186 self.serviceItems.remove(self.serviceItems[item])190 self.serviceItems.remove(self.serviceItems[item])
187 self.serviceItems.insert(len(self.serviceItems), temp)191 self.serviceItems.insert(len(self.serviceItems), temp)
188 self.repaintServiceList()192 self.repaintServiceList()
193 self.parent.OosChanged(False, self.serviceName)
189194
190 def onNewService(self):195 def onNewService(self):
191 """196 """
@@ -193,6 +198,8 @@
193 """198 """
194 self.ServiceManagerList.clear()199 self.ServiceManagerList.clear()
195 self.serviceItems = []200 self.serviceItems = []
201 self.serviceName = u''
202 self.parent.OosChanged(True, self.serviceName)
196203
197 def onDeleteFromService(self):204 def onDeleteFromService(self):
198 """205 """
@@ -202,6 +209,7 @@
202 if item is not -1:209 if item is not -1:
203 self.serviceItems.remove(self.serviceItems[item])210 self.serviceItems.remove(self.serviceItems[item])
204 self.repaintServiceList()211 self.repaintServiceList()
212 self.parent.OosChanged(False, self.serviceName)
205213
206 def repaintServiceList(self):214 def repaintServiceList(self):
207 #Correct order of idems in array215 #Correct order of idems in array
@@ -252,6 +260,7 @@
252 os.remove(servicefile)260 os.remove(servicefile)
253 except:261 except:
254 pass #if not present do not worry262 pass #if not present do not worry
263 self.parent.OosChanged(True, self.serviceName)
255264
256 def onLoadService(self):265 def onLoadService(self):
257 """266 """
@@ -260,6 +269,7 @@
260 filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(),269 filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Order of Service',self.config.get_last_dir(),
261 u'Services (*.oos)')270 u'Services (*.oos)')
262 filename = unicode(filename)271 filename = unicode(filename)
272 name = filename.split(os.path.sep)
263 if filename != u'':273 if filename != u'':
264 self.config.set_last_dir(filename)274 self.config.set_last_dir(filename)
265 zip = zipfile.ZipFile(unicode(filename))275 zip = zipfile.ZipFile(unicode(filename))
@@ -279,7 +289,6 @@
279 f.close()289 f.close()
280 self.onNewService()290 self.onNewService()
281 for item in items:291 for item in items:
282 #print item
283 serviceitem = ServiceItem()292 serviceitem = ServiceItem()
284 serviceitem.RenderManager = self.parent.RenderManager293 serviceitem.RenderManager = self.parent.RenderManager
285 serviceitem.set_from_oos(item, self.servicePath )294 serviceitem.set_from_oos(item, self.servicePath )
@@ -287,7 +296,10 @@
287 try:296 try:
288 os.remove(p_file)297 os.remove(p_file)
289 except:298 except:
290 pass #if not present do not worry299 #if not present do not worry
300 pass
301 self.serviceName = name[len(name) - 1]
302 self.parent.OosChanged(True, self.serviceName)
291303
292 def onThemeComboBoxSelected(self, currentIndex):304 def onThemeComboBoxSelected(self, currentIndex):
293 """305 """
@@ -323,6 +335,7 @@
323 treewidgetitem1.setText(0,text[:40])335 treewidgetitem1.setText(0,text[:40])
324 treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))336 treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
325 count = count + 1337 count = count + 1
338 self.parent.OosChanged(False, self.serviceName)
326339
327 def makePreview(self):340 def makePreview(self):
328 """341 """
329342
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-07-03 20:32:33 +0000
+++ openlp/core/ui/slidecontroller.py 2009-07-06 16:34:13 +0000
@@ -183,7 +183,7 @@
183183
184class MasterToolbar(QtCore.QObject):184class MasterToolbar(QtCore.QObject):
185 """185 """
186 Class from which all tollbars should extend186 Class from which all toolbars should extend
187 """187 """
188 def __init__(self, isLive):188 def __init__(self, isLive):
189 self.Toolbar = None189 self.Toolbar = None
@@ -232,6 +232,13 @@
232 translate(u'SlideController', u'Close Screen'),232 translate(u'SlideController', u'Close Screen'),
233 self.onBlankScreen)233 self.onBlankScreen)
234234
235 def serviceLoaded(self):
236 """
237 method to allow toolbars to know when the service item
238 is fully in place
239 """
240 pass
241
235 def onSlideSelectedFirst(self):242 def onSlideSelectedFirst(self):
236 """243 """
237 Go to the first slide.244 Go to the first slide.
@@ -325,3 +332,4 @@
325 else:332 else:
326 self.PreviewListWidget.selectRow(slideno)333 self.PreviewListWidget.selectRow(slideno)
327 self.onSlideSelected()334 self.onSlideSelected()
335 self.serviceLoaded()
328336
=== removed file 'openlp/core/ui/slidecontrollermanager.py'
--- openlp/core/ui/slidecontrollermanager.py 2009-06-28 06:54:12 +0000
+++ openlp/core/ui/slidecontrollermanager.py 1970-01-01 00:00:00 +0000
@@ -1,52 +0,0 @@
1# -*- coding: utf-8 -*-
2# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
3"""
4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 Raoul Snyman
6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
7
8This program is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free Software
10Foundation; version 2 of the License.
11
12This program is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA
19"""
20import logging
21import os
22
23class SlideControllerManager():
24 """
25 This class controls which SlideController is availabe to the
26 main window
27 """
28 global log
29 log = logging.getLogger(u'SlideControllerManager')
30
31 def __init__(self, parent):
32 """
33 Set up the Slide Controller. Manager
34 """
35 self.parent = parent
36 self.live = {}
37 self.preview = {}
38
39 def add_controllers(self, handle, preview, live):
40 self.live[handle] = live
41 self.preview[handle] = preview
42 print self.live
43
44 def getPreviewController(self, handle):
45 return self.preview[handle]
46
47 def getLiveController(self, handle):
48 print "---"
49 print self.live
50 print handle
51 print self.live[handle]
52 return self.live[handle]
530
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-07-02 19:04:50 +0000
+++ openlp/core/ui/thememanager.py 2009-07-06 16:34:13 +0000
@@ -21,109 +21,16 @@
21import sys21import sys
22import zipfile22import zipfile
23import shutil23import shutil
24import logging
2425
25from time import sleep
26from xml.etree.ElementTree import ElementTree, XML26from xml.etree.ElementTree import ElementTree, XML
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
2828
29from openlp.core.ui import AmendThemeForm, ServiceManager29from openlp.core.ui import AmendThemeForm, ServiceManager
30from openlp.core.theme import Theme30from openlp.core.theme import Theme
31from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml31from openlp.core.lib import Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml, buildIcon
32from openlp.core.utils import ConfigHelper32from openlp.core.utils import ConfigHelper
3333
34import logging
35
36class ThemeData(QtCore.QAbstractListModel):
37 """
38 Tree of items for an order of Theme.
39 Includes methods for reading and writing the contents to an OOS file
40 Root contains a list of ThemeItems
41 """
42 global log
43 log = logging.getLogger(u'ThemeData')
44
45 def __init__(self):
46 QtCore.QAbstractListModel.__init__(self)
47 self.items = []
48 self.rowheight = 50
49 self.maximagewidth = self.rowheight * 16 / 9.0;
50 log.info(u'Starting')
51
52 def clearItems(self):
53 self.items = []
54
55 def rowCount(self, parent):
56 return len(self.items)
57
58 def insertRow(self, row, filename):
59 self.beginInsertRows(QtCore.QModelIndex(), row, row)
60 log.debug(u'insert row %d:%s' % (row, filename))
61 (prefix, shortfilename) = os.path.split(unicode(filename))
62 log.debug(u'shortfilename = %s' % shortfilename)
63 theme = shortfilename.split(u'.')
64 # create a preview image
65 if os.path.exists(filename):
66 preview = QtGui.QImage(unicode(filename))
67 width = self.maximagewidth
68 height = self.rowheight
69 preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
70 realwidth = preview.width()
71 realheight = preview.height()
72 # and move it to the centre of the preview space
73 pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
74 pixmap.fill(QtCore.Qt.black)
75 painter = QtGui.QPainter(pixmap)
76 painter.drawImage((width - realwidth) / 2, (height - realheight) / 2, preview)
77 else:
78 width = self.maximagewidth
79 height = self.rowheight
80 pixmap = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
81 pixmap.fill(QtCore.Qt.black)
82 # finally create the row
83 self.items.insert(row, (filename, pixmap, shortfilename, theme[0]))
84 log.debug(u'Items: %s' % self.items)
85 self.endInsertRows()
86
87 def removeRow(self, row):
88 self.beginRemoveRows(QtCore.QModelIndex(), row, row)
89 self.items.pop(row)
90 self.endRemoveRows()
91
92 def addRow(self, item):
93 self.insertRow(len(self.items), item)
94
95 def data(self, index, role):
96 row = index.row()
97 if row > len(self.items):
98 # if the last row is selected and deleted, we then get called with an empty row!
99 return QtCore.QVariant()
100 if role == QtCore.Qt.DisplayRole:
101 retval = self.items[row][3]
102 elif role == QtCore.Qt.DecorationRole:
103 retval = self.items[row][1]
104 else:
105 retval = QtCore.QVariant()
106 if type(retval) is not type(QtCore.QVariant):
107 return QtCore.QVariant(retval)
108 else:
109 return retval
110
111 def __iter__(self):
112 for item in self.items:
113 yield item
114
115 def getValue(self, index):
116 row = index.row()
117 return self.items[row]
118
119 def getItem(self, row):
120 log.info(u'Get Item:%d -> %s' % (row, unicode(self.items)))
121 return self.items[row]
122
123 def getList(self):
124 filelist = [item[3] for item in self.items]
125 return filelist
126
127class ThemeManager(QtGui.QWidget):34class ThemeManager(QtGui.QWidget):
128 """35 """
129 Manages the orders of Theme.36 Manages the orders of Theme.
@@ -157,13 +64,10 @@
157 translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)64 translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
158 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)65 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
159 self.Layout.addWidget(self.Toolbar)66 self.Layout.addWidget(self.Toolbar)
16067 self.ThemeListWidget = QtGui.QListWidget(self)
161 self.ThemeListView = QtGui.QListView(self)68 self.ThemeListWidget.setAlternatingRowColors(True)
162 self.themeData = ThemeData()69 self.ThemeListWidget.setIconSize(QtCore.QSize(88,50))
163 self.ThemeListView.setModel(self.themeData)70 self.Layout.addWidget(self.ThemeListWidget)
164 self.ThemeListView.setAlternatingRowColors(True)
165 self.Layout.addWidget(self.ThemeListView)
166
167 self.themelist = []71 self.themelist = []
168 self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')72 self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
169 self.checkThemesExists(self.path)73 self.checkThemesExists(self.path)
@@ -174,21 +78,18 @@
174 self.amendThemeForm.exec_()78 self.amendThemeForm.exec_()
17579
176 def onEditTheme(self):80 def onEditTheme(self):
177 items = self.ThemeListView.selectedIndexes()81 item = self.ThemeListWidget.currentItem()
178 if len(items) > 0:82 if item is not None:
179 for item in items:83 self.amendThemeForm.loadTheme(unicode(item.text()))
180 data = self.themeData.getValue(item)
181 self.amendThemeForm.loadTheme(data[3])
182 self.amendThemeForm.exec_()84 self.amendThemeForm.exec_()
18385
184 def onDeleteTheme(self):86 def onDeleteTheme(self):
185 items = self.ThemeListView.selectedIndexes()87 item = self.ThemeListWidget.currentItem()
186 if len(items) > 0:88 if item is not None:
187 theme = u''89 theme = unicode(item.text())
188 for item in items:
189 data = self.themeData.getValue(item)
190 theme = data[3]
191 th = theme + u'.png'90 th = theme + u'.png'
91 row = self.ThemeListWidget.row(item)
92 self.ThemeListWidget.takeItem(row)
192 try:93 try:
193 os.remove(os.path.join(self.path, th))94 os.remove(os.path.join(self.path, th))
194 except:95 except:
@@ -199,8 +100,6 @@
199 except:100 except:
200 #if not present do not worry101 #if not present do not worry
201 pass102 pass
202 self.themeData.clearItems()
203 self.loadThemes()
204103
205 def onExportTheme(self):104 def onExportTheme(self):
206 pass105 pass
@@ -213,24 +112,37 @@
213 if len(files) > 0:112 if len(files) > 0:
214 for file in files:113 for file in files:
215 self.unzipTheme(file, self.path)114 self.unzipTheme(file, self.path)
216 self.themeData.clearItems()
217 self.loadThemes()115 self.loadThemes()
218116
219 def loadThemes(self):117 def loadThemes(self):
118 """
119 Loads the theme lists and triggers updates accross
120 the whole system using direct calls or core functions
121 and events for the plugins.
122 The plugins will call back in to get the real list if they want it.
123 """
220 log.debug(u'Load themes from dir')124 log.debug(u'Load themes from dir')
125 self.themelist = []
126 self.ThemeListWidget.clear()
221 for root, dirs, files in os.walk(self.path):127 for root, dirs, files in os.walk(self.path):
222 for name in files:128 for name in files:
223 if name.endswith(u'.png'):129 if name.endswith(u'.png'):
224 #check to see file is in route directory130 #check to see file is in theme root directory
225 theme = os.path.join(self.path, name)131 theme = os.path.join(self.path, name)
226 if os.path.exists(theme):132 if os.path.exists(theme):
227 self.themeData.addRow(theme)133 (path, filename) = os.path.split(unicode(file))
134 textName = os.path.splitext(name)[0]
135 item_name = QtGui.QListWidgetItem(textName)
136 item_name.setIcon(buildIcon(theme))
137 item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(textName))
138 self.ThemeListWidget.addItem(item_name)
139 self.themelist.append(textName)
228 self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))140 self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
229 self.parent.ServiceManagerContents.updateThemeList(self.getThemes())141 self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
230 self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())142 self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
231143
232 def getThemes(self):144 def getThemes(self):
233 return self.themeData.getList()145 return self.themelist
234146
235 def getThemeData(self, themename):147 def getThemeData(self, themename):
236 log.debug(u'getthemedata for theme %s', themename)148 log.debug(u'getthemedata for theme %s', themename)
@@ -337,6 +249,10 @@
337 return newtheme.extract_xml()249 return newtheme.extract_xml()
338250
339 def saveTheme(self, name, theme_xml, image_from, image_to) :251 def saveTheme(self, name, theme_xml, image_from, image_to) :
252 """
253 Called by thememaintenance Dialog to save the theme
254 and to trigger the reload of the theme list
255 """
340 log.debug(u'saveTheme %s %s', name, theme_xml)256 log.debug(u'saveTheme %s %s', name, theme_xml)
341 theme_dir = os.path.join(self.path, name)257 theme_dir = os.path.join(self.path, name)
342 if os.path.exists(theme_dir) == False:258 if os.path.exists(theme_dir) == False:
@@ -348,7 +264,6 @@
348 if image_from is not None and image_from != image_to:264 if image_from is not None and image_from != image_to:
349 shutil.copyfile(image_from, image_to)265 shutil.copyfile(image_from, image_to)
350 self.generateAndSaveImage(self.path, name, theme_xml)266 self.generateAndSaveImage(self.path, name, theme_xml)
351 self.themeData.clearItems()
352 self.loadThemes()267 self.loadThemes()
353268
354 def generateAndSaveImage(self, dir, name, theme_xml):269 def generateAndSaveImage(self, dir, name, theme_xml):
@@ -357,7 +272,6 @@
357 theme.parse(theme_xml)272 theme.parse(theme_xml)
358 theme.extend_image_filename(dir)273 theme.extend_image_filename(dir)
359 frame = self.generateImage(theme)274 frame = self.generateImage(theme)
360 #im = frame.toImage()
361 samplepathname = os.path.join(self.path, name + u'.png')275 samplepathname = os.path.join(self.path, name + u'.png')
362 if os.path.exists(samplepathname):276 if os.path.exists(samplepathname):
363 os.unlink(samplepathname)277 os.unlink(samplepathname)
@@ -365,6 +279,9 @@
365 log.debug(u'Theme image written to %s', samplepathname)279 log.debug(u'Theme image written to %s', samplepathname)
366280
367 def generateImage(self, themedata):281 def generateImage(self, themedata):
282 """
283 Call the RenderManager to build a Sample Image
284 """
368 log.debug(u'generateImage %s ', themedata)285 log.debug(u'generateImage %s ', themedata)
369 frame = self.parent.RenderManager.generate_preview(themedata)286 frame = self.parent.RenderManager.generate_preview(themedata)
370 return frame287 return frame
371288
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-07-04 05:52:30 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-07-07 16:35:01 +0000
@@ -494,7 +494,7 @@
494 if end_verse == '':494 if end_verse == '':
495 end_verse = 99495 end_verse = 99
496 if start_chapter == '':496 if start_chapter == '':
497 message = u'No chapter found for search'497 message = u'No chapter found for search criteria'
498 #print 'message = ' + unicode(message)498 #print 'message = ' + unicode(message)
499 #print 'search = ' + unicode(original)499 #print 'search = ' + unicode(original)
500 #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)500 #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
501501
=== modified file 'openlp/plugins/images/lib/imageslidecontroller.py'
--- openlp/plugins/images/lib/imageslidecontroller.py 2009-07-03 20:32:33 +0000
+++ openlp/plugins/images/lib/imageslidecontroller.py 2009-07-06 16:34:13 +0000
@@ -74,14 +74,26 @@
74 u':/media/media_stop.png',74 u':/media/media_stop.png',
75 translate(u'SlideController', u'Stop continuous loop'),75 translate(u'SlideController', u'Stop continuous loop'),
76 self.onStopLoop)76 self.onStopLoop)
77 self.Toolbar.addSeparator()
78 self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar)
79 self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
80 self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
81 self.Toolbar.addAction(self.SpinWidget)
82 #self.Layout.addWidget(self.Toolbar)
77 self.Toolbar.setSizePolicy(sizeToolbarPolicy)83 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
84 self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
85
86 def serviceLoaded(self):
87 self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
88 if self.PreviewListWidget.rowCount() == 1:
89 self.DelaySpinBox.setEnabled(False)
7890
79 def onStartLoop(self):91 def onStartLoop(self):
80 """92 """
81 Go to the last slide.93 Go to the last slide.
82 """94 """
83 delay = self.parent.parent.ImageTab.loop_delay95 if self.PreviewListWidget.rowCount() > 1:
84 self.timer_id = self.startTimer(delay * 1000)96 self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
8597
86 def onStopLoop(self):98 def onStopLoop(self):
87 """99 """
@@ -92,4 +104,3 @@
92 def timerEvent(self, event):104 def timerEvent(self, event):
93 if event.timerId() == self.timer_id:105 if event.timerId() == self.timer_id:
94 self.onSlideSelectedNext()106 self.onSlideSelectedNext()
95
96107
=== modified file 'openlp/plugins/images/lib/imagetab.py'
--- openlp/plugins/images/lib/imagetab.py 2009-07-03 20:33:41 +0000
+++ openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000
@@ -49,7 +49,6 @@
49 self.TimeoutSpacer = QtGui.QSpacerItem(147, 20,49 self.TimeoutSpacer = QtGui.QSpacerItem(147, 20,
50 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)50 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
51 self.TimeoutLayout.addItem(self.TimeoutSpacer)51 self.TimeoutLayout.addItem(self.TimeoutSpacer)
52
53 self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox)52 self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox)
54 # Signals and slots53 # Signals and slots
55 QtCore.QObject.connect(self.TimeoutSpinBox,54 QtCore.QObject.connect(self.TimeoutSpinBox,
@@ -57,6 +56,7 @@
5756
58 def retranslateUi(self):57 def retranslateUi(self):
59 self.TimeoutLabel.setText(translate(u'ImageTab', u'Slide Loop Delay:'))58 self.TimeoutLabel.setText(translate(u'ImageTab', u'Slide Loop Delay:'))
59 self.TimeoutSpinBox.setSuffix(translate(u'ImageTab', u's'))
6060
61 def onTimeoutSpinBoxChanged(self):61 def onTimeoutSpinBoxChanged(self):
62 self.loop_delay = self.TimeoutSpinBox.value()62 self.loop_delay = self.TimeoutSpinBox.value()