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