Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | not available | ||||||||
Proposed branch: | lp:~trb143/openlp/bugfixes | ||||||||
Merge into: | lp:openlp | ||||||||
Diff against target: | None lines | ||||||||
To merge this branch: | bzr merge lp:~trb143/openlp/bugfixes | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Tim Bentley (trb143) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Raoul Snyman (raoul-snyman) : | # |
review:
Approve
lp:~trb143/openlp/bugfixes
updated
- 516. By Tim Bentley
-
Various changes see loog for details
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'openlp.pyw' |
2 | --- openlp.pyw 2009-08-24 04:30:04 +0000 |
3 | +++ openlp.pyw 2009-09-01 05:17:32 +0000 |
4 | @@ -20,7 +20,8 @@ |
5 | """ |
6 | |
7 | import sys |
8 | -import logging |
9 | +import logging, logging.handlers |
10 | +from optparse import OptionParser |
11 | |
12 | from PyQt4 import QtCore, QtGui |
13 | |
14 | @@ -28,9 +29,15 @@ |
15 | from openlp.core.resources import * |
16 | from openlp.core.ui import MainWindow, SplashScreen |
17 | |
18 | -logging.basicConfig(level=logging.DEBUG, |
19 | - format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s', |
20 | - datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w') |
21 | +filename=u'openlp.log' |
22 | +log = logging.getLogger() |
23 | +log.setLevel(logging.INFO) |
24 | + |
25 | +logfile = logging.handlers.RotatingFileHandler(filename ,maxBytes=200000, backupCount=5) |
26 | +logfile.setLevel(logging.DEBUG) |
27 | +logfile.setFormatter(logging.Formatter(u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s')) |
28 | + |
29 | +log.addHandler(logfile) |
30 | |
31 | class OpenLP(QtGui.QApplication): |
32 | """ |
33 | @@ -38,8 +45,7 @@ |
34 | class in order to provide the core of the application. |
35 | """ |
36 | global log |
37 | - log = logging.getLogger(u'OpenLP Application') |
38 | - log.info(u'Application Loaded') |
39 | + log.info(u'OpenLP Application Loaded') |
40 | |
41 | def run(self): |
42 | """ |
43 | @@ -74,10 +80,19 @@ |
44 | self.splash.finish(self.mainWindow) |
45 | sys.exit(app.exec_()) |
46 | |
47 | +def main(): |
48 | + usage = "usage: %prog [options] arg1 arg2" |
49 | + parser = OptionParser(usage=usage) |
50 | + parser.add_option("-d", "--debug",dest="debug",action="store_true", |
51 | + help="Switch on Debugging ") |
52 | + (options, args) = parser.parse_args() |
53 | + if options.debug is not None: |
54 | + log.setLevel(logging.DEBUG) |
55 | if __name__ == u'__main__': |
56 | """ |
57 | Instantiate and run the application. |
58 | """ |
59 | + main() |
60 | app = OpenLP(sys.argv) |
61 | #import cProfile |
62 | #cProfile.run("app.run()", "profile.out") |
63 | |
64 | === modified file 'openlp/core/lib/__init__.py' |
65 | --- openlp/core/lib/__init__.py 2009-08-26 05:00:19 +0000 |
66 | +++ openlp/core/lib/__init__.py 2009-08-27 05:17:20 +0000 |
67 | @@ -66,6 +66,7 @@ |
68 | from xmlrootclass import XmlRootClass |
69 | from serviceitem import ServiceItem |
70 | from eventreceiver import Receiver |
71 | +from serviceitem import ServiceType |
72 | from serviceitem import ServiceItem |
73 | from toolbar import OpenLPToolbar |
74 | from songxmlhandler import SongXMLBuilder |
75 | |
76 | === modified file 'openlp/core/lib/eventreceiver.py' |
77 | --- openlp/core/lib/eventreceiver.py 2009-08-26 05:00:19 +0000 |
78 | +++ openlp/core/lib/eventreceiver.py 2009-08-29 07:17:56 +0000 |
79 | @@ -29,27 +29,31 @@ |
80 | |
81 | ``stop_import`` |
82 | Stops the Bible Import |
83 | + |
84 | ``pre_load_bibles`` |
85 | Triggers the plugin to relaod the bible lists |
86 | + |
87 | ``process_events`` |
88 | Requests the Application to flush the events queue |
89 | - ``{preview|live}_slide_first`` |
90 | - display the first slide on the list |
91 | - ``{preview|live}_slide_previous`` |
92 | - display the previous slide on the list |
93 | - ``{preview|live}_slide_next`` |
94 | - display the next slide on the list |
95 | - ``{preview|live}_slide_last`` |
96 | - display the last slide on the list |
97 | + |
98 | ``{plugin}_add_service_item `` |
99 | ask the plugin to push the selected items to the service item |
100 | + |
101 | ``update_themes `` |
102 | send out message with new themes |
103 | + |
104 | ``update_global_theme `` |
105 | Tell the components we have a new global theme |
106 | + |
107 | ``load_song_list`` |
108 | Tells the the song plugin to reload the song list |
109 | |
110 | + ``update_spin_delay`` |
111 | + Pushes out the Image loop delay |
112 | + |
113 | + ``request_spin_delay`` |
114 | + Requests a spin delay |
115 | + |
116 | """ |
117 | global log |
118 | log = logging.getLogger(u'EventReceiver') |
119 | |
120 | === modified file 'openlp/core/lib/mediamanageritem.py' |
121 | --- openlp/core/lib/mediamanageritem.py 2009-07-08 16:40:42 +0000 |
122 | +++ openlp/core/lib/mediamanageritem.py 2009-08-31 21:53:35 +0000 |
123 | @@ -234,17 +234,20 @@ |
124 | def onPreviewClick(self): |
125 | log.debug(self.PluginTextShort+u' Preview Requested') |
126 | service_item = self.buildServiceItem() |
127 | - self.parent.preview_controller.addServiceItem(service_item) |
128 | + if service_item is not None: |
129 | + self.parent.preview_controller.addServiceItem(service_item) |
130 | |
131 | def onLiveClick(self): |
132 | log.debug(self.PluginTextShort + u' Live Requested') |
133 | service_item = self.buildServiceItem() |
134 | - self.parent.live_controller.addServiceItem(service_item) |
135 | + if service_item is not None: |
136 | + self.parent.live_controller.addServiceItem(service_item) |
137 | |
138 | def onAddClick(self): |
139 | log.debug(self.PluginTextShort+u' Add Requested') |
140 | service_item = self.buildServiceItem() |
141 | - self.parent.service_manager.addServiceItem(service_item) |
142 | + if service_item is not None: |
143 | + self.parent.service_manager.addServiceItem(service_item) |
144 | |
145 | def buildServiceItem(self): |
146 | """ |
147 | @@ -252,6 +255,8 @@ |
148 | """ |
149 | service_item = ServiceItem(self.parent) |
150 | service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') |
151 | - self.generateSlideData(service_item) |
152 | - self.ListView.clearSelection() |
153 | - return service_item |
154 | + if self.generateSlideData(service_item): |
155 | + self.ListView.clearSelection() |
156 | + return service_item |
157 | + else: |
158 | + return None |
159 | |
160 | === modified file 'openlp/core/lib/renderer.py' |
161 | --- openlp/core/lib/renderer.py 2009-08-09 18:38:44 +0000 |
162 | +++ openlp/core/lib/renderer.py 2009-08-31 06:53:55 +0000 |
163 | @@ -147,7 +147,8 @@ |
164 | # print words |
165 | verses = [] |
166 | words = words.replace(u'\r\n', u'\n') |
167 | - verses_text = words.split(u'\n\n') |
168 | + verses_text = words.split(u'\n') |
169 | + #print verses_text |
170 | text = [] |
171 | for verse in verses_text: |
172 | lines = verse.split(u'\n') |
173 | @@ -173,7 +174,10 @@ |
174 | split_lines = [] |
175 | count = 0 |
176 | for line in text: |
177 | -# print "C", line , len(line) |
178 | + #print "C", line , len(line) |
179 | + #Must be a blank line so keep it. |
180 | + if len(line) == 0: |
181 | + line = u' ' |
182 | while len(line) > 0: |
183 | # print "C1", line , len(line) |
184 | if len(line) > ave_line_width: |
185 | @@ -391,29 +395,8 @@ |
186 | Defaults to *False*. Whether or not this is a live screen. |
187 | """ |
188 | x, y = tlcorner |
189 | - # We draw the text to see how big it is and then iterate to make it fit |
190 | - # when we line wrap we do in in the "lyrics" style, so the second line is |
191 | - # right aligned with a "hanging indent" |
192 | - #print "----------------------------" |
193 | - #print line |
194 | -# words = line.split(u' ') |
195 | -# thisline = u' '.join(words) |
196 | -# lastword = len(words) |
197 | -# lines = [] |
198 | maxx = self._rect.width(); |
199 | maxy = self._rect.height(); |
200 | -# while (len(words) > 0): |
201 | -# w , h = self._get_extent_and_render(thisline, footer) |
202 | -# print "m", w, h, x, maxx |
203 | -# rhs = w + x |
204 | -# if rhs < maxx - self._right_margin: |
205 | -# lines.append(thisline) |
206 | -# words = words[lastword:] |
207 | -# thisline = ' '.join(words) |
208 | -# lastword = len(words) |
209 | -# else: |
210 | -# lastword -= 1 |
211 | -# thisline = ' '.join(words[:lastword]) |
212 | lines = [] |
213 | lines.append(line) |
214 | startx = x |
215 | |
216 | === modified file 'openlp/core/lib/rendermanager.py' |
217 | --- openlp/core/lib/rendermanager.py 2009-07-23 20:20:49 +0000 |
218 | +++ openlp/core/lib/rendermanager.py 2009-08-31 06:53:55 +0000 |
219 | @@ -58,7 +58,7 @@ |
220 | else: |
221 | self.current_display = screen_number |
222 | self.renderer = Renderer() |
223 | - self.calculate_default(self.screen_list[self.current_display][u'size']) |
224 | + #self.calculate_default(self.screen_list[self.current_display][u'size']) |
225 | self.theme = u'' |
226 | self.service_theme = u'' |
227 | self.global_style = u'' |
228 | @@ -133,6 +133,7 @@ |
229 | def build_text_rectangle(self, theme): |
230 | """ |
231 | Builds a text block using the settings in ``theme``. |
232 | + One is needed per slide |
233 | |
234 | ``theme`` |
235 | The theme to build a text block for. |
236 | @@ -149,8 +150,8 @@ |
237 | footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start) |
238 | else: |
239 | footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y), |
240 | - int(theme.font_footer_width)-1, int(theme.font_footer_height)-1) |
241 | - self.renderer.set_text_rectangle(main_rect,footer_rect) |
242 | + int(theme.font_footer_width)-1, int(theme.font_footer_height) - 1) |
243 | + self.renderer.set_text_rectangle(main_rect, footer_rect) |
244 | |
245 | def generate_preview(self, themedata): |
246 | """ |
247 | @@ -178,15 +179,15 @@ |
248 | |
249 | def format_slide(self, words): |
250 | """ |
251 | - Calculate how much text can fid on a slide. |
252 | + Calculate how much text can fit on a slide. |
253 | |
254 | ``words`` |
255 | The words to go on the slides. |
256 | """ |
257 | log.debug(u'format slide') |
258 | - self.calculate_default(self.screen_list[self.current_display][u'size']) |
259 | + #self.calculate_default(self.screen_list[self.current_display][u'size']) |
260 | self.build_text_rectangle(self.themedata) |
261 | - self.renderer.set_frame_dest(self.width, self.height) |
262 | + #self.renderer.set_frame_dest(self.width, self.height) |
263 | return self.renderer.format_slide(words, False) |
264 | |
265 | def generate_slide(self, main_text, footer_text): |
266 | @@ -200,7 +201,6 @@ |
267 | The text for the slide footer. |
268 | """ |
269 | log.debug(u'generate slide') |
270 | - self.calculate_default(self.screen_list[self.current_display][u'size']) |
271 | self.build_text_rectangle(self.themedata) |
272 | self.renderer.set_frame_dest(self.width, self.height) |
273 | return self.renderer.generate_frame_from_lines(main_text, footer_text) |
274 | @@ -233,6 +233,7 @@ |
275 | The QWidget instance of the screen. |
276 | """ |
277 | log.debug(u'calculate default %s', screen) |
278 | + #size fixed so reflects the preview size. |
279 | if self.current_display == 0: |
280 | self.width = 1024 |
281 | self.height = 768 |
282 | |
283 | === modified file 'openlp/core/lib/serviceitem.py' |
284 | --- openlp/core/lib/serviceitem.py 2009-07-10 13:16:15 +0000 |
285 | +++ openlp/core/lib/serviceitem.py 2009-08-31 18:27:36 +0000 |
286 | @@ -25,6 +25,11 @@ |
287 | |
288 | from openlp.core.lib import buildIcon |
289 | |
290 | +class ServiceType(object): |
291 | + Text = 1 |
292 | + Image = 2 |
293 | + Command = 3 |
294 | + |
295 | class ServiceItem(object): |
296 | """ |
297 | The service item is a base class for the plugins to use to interact with |
298 | @@ -83,22 +88,18 @@ |
299 | self.RenderManager.set_override_theme(self.theme) |
300 | log.debug(u'Formatting slides') |
301 | self.frames = [] |
302 | - if self.service_item_type == u'text': |
303 | + if self.service_item_type == ServiceType.Text: |
304 | for slide in self.service_frames: |
305 | formated = self.RenderManager.format_slide(slide[u'raw_slide']) |
306 | for format in formated: |
307 | frame = self.RenderManager.generate_slide(format, self.raw_footer) |
308 | self.frames.append({u'title': slide[u'title'], u'image': frame}) |
309 | - elif self.service_item_type == u'command': |
310 | + elif self.service_item_type == ServiceType.Command: |
311 | self.frames = self.service_frames |
312 | - self.service_frames = [] |
313 | - elif self.service_item_type == u'image': |
314 | - #print "image" |
315 | - #print self.service_frames |
316 | + elif self.service_item_type == ServiceType.Image: |
317 | for slide in self.service_frames: |
318 | slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) |
319 | self.frames = self.service_frames |
320 | - #self.service_frames = [] |
321 | else: |
322 | log.error(u'Invalid value renderer :%s' % self.service_item_type) |
323 | |
324 | @@ -115,7 +116,7 @@ |
325 | ``image`` |
326 | The actual image file name. |
327 | """ |
328 | - self.service_item_type = u'image' |
329 | + self.service_item_type = ServiceType.Image |
330 | self.service_item_path = path |
331 | self.service_frames.append({u'title': frame_title, u'image': image}) |
332 | |
333 | @@ -129,11 +130,11 @@ |
334 | ``raw_slide`` |
335 | The raw text of the slide. |
336 | """ |
337 | - self.service_item_type = u'text' |
338 | + self.service_item_type = ServiceType.Text |
339 | frame_title = frame_title.split(u'\n')[0] |
340 | self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) |
341 | |
342 | - def add_from_command(self, frame_title, command): |
343 | + def add_from_command(self, path , frame_title): |
344 | """ |
345 | Add a slide from a command. |
346 | |
347 | @@ -143,8 +144,9 @@ |
348 | ``command`` |
349 | The command of/for the slide. |
350 | """ |
351 | - self.service_item_type = u'command' |
352 | - self.service_frames.append({u'title': frame_title, u'command': command}) |
353 | + self.service_item_type = ServiceType.Command |
354 | + self.service_item_path = path |
355 | + self.service_frames.append({u'title': frame_title, u'command': None}) |
356 | |
357 | def get_oos_repr(self): |
358 | """ |
359 | @@ -160,15 +162,15 @@ |
360 | u'type':self.service_item_type |
361 | } |
362 | oos_data = [] |
363 | - if self.service_item_type == u'text': |
364 | + if self.service_item_type == ServiceType.Text: |
365 | for slide in self.service_frames: |
366 | oos_data.append(slide) |
367 | - elif self.service_item_type == u'image': |
368 | - #print "sf", self.service_frames |
369 | - for slide in self.service_frames: |
370 | - #print "s", slide |
371 | - oos_data.append(slide[u'title']) |
372 | - #print "od", oos_data |
373 | + elif self.service_item_type == ServiceType.Image: |
374 | + for slide in self.service_frames: |
375 | + oos_data.append(slide[u'title']) |
376 | + elif self.service_item_type == ServiceType.Command: |
377 | + for slide in self.service_frames: |
378 | + oos_data.append(slide[u'title']) |
379 | return {u'header': oos_header, u'data': oos_data} |
380 | |
381 | def set_from_oos(self, serviceitem, path=None): |
382 | @@ -182,7 +184,6 @@ |
383 | ``path`` |
384 | Defaults to *None*. Any path data, usually for images. |
385 | """ |
386 | - #print "sfs", serviceitem |
387 | header = serviceitem[u'serviceitem'][u'header'] |
388 | self.title = header[u'title'] |
389 | self.service_item_type = header[u'type'] |
390 | @@ -190,12 +191,15 @@ |
391 | self.theme = header[u'theme'] |
392 | self.addIcon(header[u'icon']) |
393 | self.raw_footer = header[u'footer'] |
394 | - if self.service_item_type == u'text': |
395 | + if self.service_item_type == ServiceType.Text: |
396 | for slide in serviceitem[u'serviceitem'][u'data']: |
397 | self.service_frames.append(slide) |
398 | - elif self.service_item_type == u'image': |
399 | + elif self.service_item_type == ServiceType.Image: |
400 | for text_image in serviceitem[u'serviceitem'][u'data']: |
401 | filename = os.path.join(path, text_image) |
402 | - #print "fn", filename |
403 | real_image = QtGui.QImage(unicode(filename)) |
404 | self.add_from_image(path, text_image, real_image) |
405 | + elif self.service_item_type == ServiceType.Command: |
406 | + for text_image in serviceitem[u'serviceitem'][u'data']: |
407 | + filename = os.path.join(path, text_image) |
408 | + self.add_from_command(path, text_image) |
409 | |
410 | === modified file 'openlp/core/lib/settingstab.py' |
411 | --- openlp/core/lib/settingstab.py 2009-07-10 13:16:15 +0000 |
412 | +++ openlp/core/lib/settingstab.py 2009-08-29 07:17:56 +0000 |
413 | @@ -93,3 +93,9 @@ |
414 | Save settings to disk. |
415 | """ |
416 | pass |
417 | + |
418 | + def postSetUp(self): |
419 | + """ |
420 | + Changes which need to be made after setup of application |
421 | + """ |
422 | + pass |
423 | |
424 | === modified file 'openlp/core/lib/toolbar.py' |
425 | --- openlp/core/lib/toolbar.py 2009-07-08 06:55:08 +0000 |
426 | +++ openlp/core/lib/toolbar.py 2009-08-28 17:40:07 +0000 |
427 | @@ -34,8 +34,9 @@ |
428 | QtGui.QToolBar.__init__(self, None) |
429 | # useful to be able to reuse button icons... |
430 | self.icons = {} |
431 | + self.actions = {} |
432 | self.log = logging.getLogger(u'OpenLPToolbar') |
433 | - self.log.info(u'Init done') |
434 | + self.log.debug(u'Init done') |
435 | |
436 | def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None): |
437 | """ |
438 | @@ -70,12 +71,28 @@ |
439 | ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), |
440 | QtGui.QIcon.Normal, QtGui.QIcon.Off) |
441 | if ButtonIcon is not None: |
442 | - ToolbarButton = self.addAction(ButtonIcon, title) |
443 | + if slot is not None: |
444 | + ToolbarButton = self.addAction(ButtonIcon, title, slot) |
445 | + else: |
446 | + ToolbarButton = self.addAction(ButtonIcon, title) |
447 | if tooltip is not None: |
448 | ToolbarButton.setToolTip(tooltip) |
449 | - if slot is not None: |
450 | - QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL(u'triggered()'), slot) |
451 | self.icons[title] = ButtonIcon |
452 | + self.actions[title] = ToolbarButton |
453 | + |
454 | + def addToolbarSeparator(self, handle): |
455 | + """ |
456 | + Add a Separator bar to the toolbar and store it's Handle |
457 | + """ |
458 | + action = self.addSeparator() |
459 | + self.actions[handle] = action |
460 | + |
461 | + def addToolbarWidget(self, handle, widget): |
462 | + """ |
463 | + Add a Widget to the toolbar and store it's Handle |
464 | + """ |
465 | + action = self.addWidget(widget) |
466 | + self.actions[handle] = action |
467 | |
468 | def getIconFromTitle(self, title): |
469 | """ |
470 | @@ -90,3 +107,11 @@ |
471 | else: |
472 | self.log.error(u'getIconFromTitle - no icon for %s' % title) |
473 | return QtGui.QIcon() |
474 | + |
475 | + def makeWidgetsInvisible(self, widgets): |
476 | + for widget in widgets: |
477 | + self.actions[widget].setVisible(False) |
478 | + |
479 | + def makeWidgetsVisible(self, widgets): |
480 | + for widget in widgets: |
481 | + self.actions[widget].setVisible(True) |
482 | |
483 | === modified file 'openlp/core/ui/__init__.py' |
484 | --- openlp/core/ui/__init__.py 2009-08-13 20:02:38 +0000 |
485 | +++ openlp/core/ui/__init__.py 2009-08-27 05:17:20 +0000 |
486 | @@ -17,7 +17,7 @@ |
487 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
488 | Place, Suite 330, Boston, MA 02111-1307 USA |
489 | """ |
490 | -from slidecontroller import MasterToolbar |
491 | +#from slidecontroller import MasterToolbar |
492 | from maindisplay import MainDisplay |
493 | from amendthemeform import AmendThemeForm |
494 | from slidecontroller import SlideController |
495 | |
496 | === modified file 'openlp/core/ui/amendthemeform.py' |
497 | --- openlp/core/ui/amendthemeform.py 2009-08-26 05:00:19 +0000 |
498 | +++ openlp/core/ui/amendthemeform.py 2009-08-31 07:05:59 +0000 |
499 | @@ -135,8 +135,8 @@ |
500 | unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign), |
501 | unicode(self.theme.display_wrapStyle)) |
502 | theme = new_theme.extract_xml() |
503 | - self.thememanager.saveTheme(theme_name, theme, save_from, save_to) |
504 | - return QtGui.QDialog.accept(self) |
505 | + if self.thememanager.saveTheme(theme_name, theme, save_from, save_to) is not False: |
506 | + return QtGui.QDialog.accept(self) |
507 | |
508 | def loadTheme(self, theme): |
509 | log.debug(u'LoadTheme %s', theme) |
510 | @@ -510,45 +510,60 @@ |
511 | self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign)) |
512 | |
513 | def stateChanging(self, theme): |
514 | - if theme.background_type == u'solid': |
515 | - self.Color1PushButton.setStyleSheet( |
516 | - u'background-color: %s' % unicode(theme.background_color)) |
517 | - self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) |
518 | - self.Color1Label.setVisible(True) |
519 | - self.Color1PushButton.setVisible(True) |
520 | - self.Color2Label.setVisible(False) |
521 | - self.Color2PushButton.setVisible(False) |
522 | - self.ImageLabel.setVisible(False) |
523 | - self.ImageLineEdit.setVisible(False) |
524 | - self.ImageFilenameWidget.setVisible(False) |
525 | - self.GradientLabel.setVisible(False) |
526 | - self.GradientComboBox.setVisible(False) |
527 | - elif theme.background_type == u'gradient': |
528 | - self.Color1PushButton.setStyleSheet( |
529 | - u'background-color: %s' % unicode(theme.background_startColor)) |
530 | - self.Color2PushButton.setStyleSheet( |
531 | - u'background-color: %s' % unicode(theme.background_endColor)) |
532 | - self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) |
533 | - self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) |
534 | - self.Color1Label.setVisible(True) |
535 | - self.Color1PushButton.setVisible(True) |
536 | - self.Color2Label.setVisible(True) |
537 | - self.Color2PushButton.setVisible(True) |
538 | - self.ImageLabel.setVisible(False) |
539 | - self.ImageLineEdit.setVisible(False) |
540 | - self.ImageFilenameWidget.setVisible(False) |
541 | - self.GradientLabel.setVisible(True) |
542 | - self.GradientComboBox.setVisible(True) |
543 | - else: # must be image |
544 | - self.Color1Label.setVisible(False) |
545 | - self.Color1PushButton.setVisible(False) |
546 | - self.Color2Label.setVisible(False) |
547 | - self.Color2PushButton.setVisible(False) |
548 | - self.ImageLabel.setVisible(True) |
549 | - self.ImageLineEdit.setVisible(True) |
550 | - self.ImageFilenameWidget.setVisible(True) |
551 | - self.GradientLabel.setVisible(False) |
552 | - self.GradientComboBox.setVisible(False) |
553 | + if theme.background_mode == u'transparent': |
554 | + self.Color1Label.setVisible(False) |
555 | + self.Color1PushButton.setVisible(False) |
556 | + self.Color2Label.setVisible(False) |
557 | + self.Color2PushButton.setVisible(False) |
558 | + self.ImageLabel.setVisible(False) |
559 | + self.ImageLineEdit.setVisible(False) |
560 | + self.ImageFilenameWidget.setVisible(False) |
561 | + self.GradientLabel.setVisible(False) |
562 | + self.GradientComboBox.setVisible(False) |
563 | + self.BackgroundTypeComboBox.setVisible(False) |
564 | + self.BackgroundTypeLabel.setVisible(False) |
565 | + else: |
566 | + self.BackgroundTypeComboBox.setVisible(True) |
567 | + self.BackgroundTypeLabel.setVisible(True) |
568 | + if theme.background_type == u'solid': |
569 | + self.Color1PushButton.setStyleSheet( |
570 | + u'background-color: %s' % unicode(theme.background_color)) |
571 | + self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) |
572 | + self.Color1Label.setVisible(True) |
573 | + self.Color1PushButton.setVisible(True) |
574 | + self.Color2Label.setVisible(False) |
575 | + self.Color2PushButton.setVisible(False) |
576 | + self.ImageLabel.setVisible(False) |
577 | + self.ImageLineEdit.setVisible(False) |
578 | + self.ImageFilenameWidget.setVisible(False) |
579 | + self.GradientLabel.setVisible(False) |
580 | + self.GradientComboBox.setVisible(False) |
581 | + elif theme.background_type == u'gradient': |
582 | + self.Color1PushButton.setStyleSheet( |
583 | + u'background-color: %s' % unicode(theme.background_startColor)) |
584 | + self.Color2PushButton.setStyleSheet( |
585 | + u'background-color: %s' % unicode(theme.background_endColor)) |
586 | + self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) |
587 | + self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) |
588 | + self.Color1Label.setVisible(True) |
589 | + self.Color1PushButton.setVisible(True) |
590 | + self.Color2Label.setVisible(True) |
591 | + self.Color2PushButton.setVisible(True) |
592 | + self.ImageLabel.setVisible(False) |
593 | + self.ImageLineEdit.setVisible(False) |
594 | + self.ImageFilenameWidget.setVisible(False) |
595 | + self.GradientLabel.setVisible(True) |
596 | + self.GradientComboBox.setVisible(True) |
597 | + else: # must be image |
598 | + self.Color1Label.setVisible(False) |
599 | + self.Color1PushButton.setVisible(False) |
600 | + self.Color2Label.setVisible(False) |
601 | + self.Color2PushButton.setVisible(False) |
602 | + self.ImageLabel.setVisible(True) |
603 | + self.ImageLineEdit.setVisible(True) |
604 | + self.ImageFilenameWidget.setVisible(True) |
605 | + self.GradientLabel.setVisible(False) |
606 | + self.GradientComboBox.setVisible(False) |
607 | |
608 | if theme.font_main_override == False: |
609 | self.FontMainXSpinBox.setEnabled(False) |
610 | |
611 | === modified file 'openlp/core/ui/mainwindow.py' |
612 | --- openlp/core/ui/mainwindow.py 2009-08-26 05:00:19 +0000 |
613 | +++ openlp/core/ui/mainwindow.py 2009-08-29 07:17:56 +0000 |
614 | @@ -313,8 +313,6 @@ |
615 | translate(u'mainWindow', u'Service Manager')) |
616 | self.ThemeManagerDock.setWindowTitle( |
617 | translate(u'mainWindow', u'Theme Manager')) |
618 | - self.DefaultThemeLabel.setText(MainWindow.defaultThemeText + \ |
619 | - self.ThemeManagerContents.getDefault()) |
620 | self.FileNewItem.setText(translate(u'mainWindow', u'&New')) |
621 | self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service')) |
622 | self.FileNewItem.setStatusTip( |
623 | @@ -492,6 +490,8 @@ |
624 | # Once all components are initialised load the Themes |
625 | log.info(u'Load Themes') |
626 | self.ThemeManagerContents.loadThemes() |
627 | + log.info(u'Load data from Settings') |
628 | + self.settingsForm.postSetUp() |
629 | |
630 | def getMonitorNumber(self): |
631 | """ |
632 | |
633 | === modified file 'openlp/core/ui/servicemanager.py' |
634 | --- openlp/core/ui/servicemanager.py 2009-08-25 05:18:09 +0000 |
635 | +++ openlp/core/ui/servicemanager.py 2009-08-31 18:27:36 +0000 |
636 | @@ -25,7 +25,7 @@ |
637 | |
638 | from PyQt4 import QtCore, QtGui |
639 | from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ |
640 | - RenderManager, translate, buildIcon, \ |
641 | + RenderManager, translate, buildIcon, ServiceType, \ |
642 | contextMenuAction, contextMenuSeparator, Receiver |
643 | from openlp.core.utils import ConfigHelper |
644 | |
645 | @@ -341,7 +341,8 @@ |
646 | zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w') |
647 | for item in self.serviceItems: |
648 | service.append({u'serviceitem':item[u'data'].get_oos_repr()}) |
649 | - if item[u'data'].service_item_type == u'image': |
650 | + if item[u'data'].service_item_type == ServiceType.Image or \ |
651 | + item[u'data'].service_item_type == ServiceType.Command: |
652 | for frame in item[u'data'].frames: |
653 | path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title']) |
654 | zip.write(path_from) |
655 | @@ -354,7 +355,7 @@ |
656 | os.remove(servicefile) |
657 | except: |
658 | pass #if not present do not worry |
659 | - self.parent.OosChanged(True, self.serviceName) |
660 | + self.parent.OosChanged(True, filename + u'.oos') |
661 | |
662 | def onLoadService(self): |
663 | """ |
664 | @@ -368,31 +369,34 @@ |
665 | name = filename.split(os.path.sep) |
666 | if filename != u'': |
667 | self.config.set_last_dir(filename) |
668 | - zip = zipfile.ZipFile(unicode(filename)) |
669 | - filexml = None |
670 | - themename = None |
671 | - for file in zip.namelist(): |
672 | - names = file.split(os.path.sep) |
673 | - file_to = os.path.join(self.servicePath, names[len(names) - 1]) |
674 | - file_data = zip.read(file) |
675 | - f = open(file_to, u'w') |
676 | - f.write(file_data) |
677 | + try: |
678 | + zip = zipfile.ZipFile(unicode(filename)) |
679 | + filexml = None |
680 | + themename = None |
681 | + for file in zip.namelist(): |
682 | + names = file.split(os.path.sep) |
683 | + file_to = os.path.join(self.servicePath, names[len(names) - 1]) |
684 | + file_data = zip.read(file) |
685 | + f = open(file_to, u'w') |
686 | + f.write(file_data) |
687 | + f.close() |
688 | + if file_to.endswith(u'ood'): |
689 | + p_file = file_to |
690 | + f = open(p_file, u'r') |
691 | + items = cPickle.load(f) |
692 | f.close() |
693 | - if file_to.endswith(u'ood'): |
694 | - p_file = file_to |
695 | - f = open(p_file, u'r') |
696 | - items = cPickle.load(f) |
697 | - f.close() |
698 | - self.onNewService() |
699 | - for item in items: |
700 | - serviceitem = ServiceItem() |
701 | - serviceitem.RenderManager = self.parent.RenderManager |
702 | - serviceitem.set_from_oos(item, self.servicePath ) |
703 | - self.addServiceItem(serviceitem) |
704 | - try: |
705 | - os.remove(p_file) |
706 | + self.onNewService() |
707 | + for item in items: |
708 | + serviceitem = ServiceItem() |
709 | + serviceitem.RenderManager = self.parent.RenderManager |
710 | + serviceitem.set_from_oos(item, self.servicePath ) |
711 | + self.addServiceItem(serviceitem) |
712 | + try: |
713 | + os.remove(p_file) |
714 | + except: |
715 | + #if not present do not worry |
716 | + pass |
717 | except: |
718 | - #if not present do not worry |
719 | pass |
720 | self.serviceName = name[len(name) - 1] |
721 | self.parent.OosChanged(True, self.serviceName) |
722 | |
723 | === modified file 'openlp/core/ui/settingsform.py' |
724 | --- openlp/core/ui/settingsform.py 2009-08-06 13:17:36 +0000 |
725 | +++ openlp/core/ui/settingsform.py 2009-08-29 07:17:56 +0000 |
726 | @@ -51,3 +51,7 @@ |
727 | for tab_index in range(0, self.SettingsTabWidget.count()): |
728 | self.SettingsTabWidget.widget(tab_index).save() |
729 | return QtGui.QDialog.accept(self) |
730 | + |
731 | + def postSetUp(self): |
732 | + for tab_index in range(0, self.SettingsTabWidget.count()): |
733 | + self.SettingsTabWidget.widget(tab_index).postSetUp() |
734 | |
735 | === modified file 'openlp/core/ui/slidecontroller.py' |
736 | --- openlp/core/ui/slidecontroller.py 2009-08-24 05:10:04 +0000 |
737 | +++ openlp/core/ui/slidecontroller.py 2009-08-31 14:04:00 +0000 |
738 | @@ -21,7 +21,7 @@ |
739 | import os |
740 | |
741 | from PyQt4 import QtCore, QtGui |
742 | -from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver |
743 | +from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver, ServiceType |
744 | |
745 | class SlideList(QtGui.QTableWidget): |
746 | """ |
747 | @@ -36,16 +36,16 @@ |
748 | if type(event) == QtGui.QKeyEvent: |
749 | #here accept the event and do something |
750 | if event.key() == QtCore.Qt.Key_Up: |
751 | - self.parent.BaseToolbar.onSlideSelectedPrevious() |
752 | + self.parent.onSlideSelectedPrevious() |
753 | event.accept() |
754 | elif event.key() == QtCore.Qt.Key_Down: |
755 | - self.parent.BaseToolbar.onSlideSelectedNext() |
756 | + self.parent.onSlideSelectedNext() |
757 | event.accept() |
758 | elif event.key() == QtCore.Qt.Key_PageUp: |
759 | - self.parent.BaseToolbar.onSlideSelectedFirst() |
760 | + self.parent.onSlideSelectedFirst() |
761 | event.accept() |
762 | elif event.key() == QtCore.Qt.Key_PageDown: |
763 | - self.parent.BaseToolbar.onSlideSelectedLast() |
764 | + self.parent.onSlideSelectedLast() |
765 | event.accept() |
766 | event.ignore() |
767 | else: |
768 | @@ -63,13 +63,11 @@ |
769 | """ |
770 | Set up the Slide Controller. |
771 | """ |
772 | - self.toolbarList = {} |
773 | QtGui.QWidget.__init__(self, parent) |
774 | self.isLive = isLive |
775 | - self.prefix = u'preview_' |
776 | - if isLive: |
777 | - self.prefix = u'live_' |
778 | self.parent = parent |
779 | + self.image_list = [u'Start Loop', u'Stop Loop', u'Loop Spearator', u'Image SpinBox'] |
780 | + self.timer_id = 0 |
781 | self.Panel = QtGui.QWidget(parent.ControlSplitter) |
782 | self.Splitter = QtGui.QSplitter(self.Panel) |
783 | self.Splitter.setOrientation(QtCore.Qt.Vertical) |
784 | @@ -96,10 +94,53 @@ |
785 | self.PreviewListWidget.isLive = self.isLive |
786 | self.PreviewListWidget.setObjectName(u'PreviewListWidget') |
787 | self.ControllerLayout.addWidget(self.PreviewListWidget) |
788 | - # Plugin the Base Toolbar class |
789 | - self.BaseToolbar = MasterToolbar(self.isLive) |
790 | - self.registerToolbar(u'master', self.BaseToolbar) |
791 | - self.Toolbar = self.BaseToolbar.getToolbar() |
792 | + # Build the full toolbar |
793 | + self.Toolbar = OpenLPToolbar(self) |
794 | + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
795 | + QtGui.QSizePolicy.Fixed) |
796 | + sizeToolbarPolicy.setHorizontalStretch(0) |
797 | + sizeToolbarPolicy.setVerticalStretch(0) |
798 | + sizeToolbarPolicy.setHeightForWidth( |
799 | + self.Toolbar.sizePolicy().hasHeightForWidth()) |
800 | + self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
801 | + if self.isLive: |
802 | + self.Toolbar.addToolbarButton(u'First Slide', |
803 | + u':/slides/slide_first.png', |
804 | + translate(u'SlideController', u'Move to first'), |
805 | + self.onSlideSelectedFirst) |
806 | + self.Toolbar.addToolbarButton(u'Previous Slide', |
807 | + u':/slides/slide_previous.png', |
808 | + translate(u'SlideController', u'Move to previous'), |
809 | + self.onSlideSelectedPrevious) |
810 | + self.Toolbar.addToolbarButton(u'Next Slide', |
811 | + u':/slides/slide_next.png', |
812 | + translate(u'SlideController', u'Move to next'), |
813 | + self.onSlideSelectedNext) |
814 | + if self.isLive: |
815 | + self.Toolbar.addToolbarButton(u'Last Slide', |
816 | + u':/slides/slide_last.png', |
817 | + translate(u'SlideController', u'Move to last'), |
818 | + self.onSlideSelectedLast) |
819 | + if self.isLive: |
820 | + self.Toolbar.addToolbarSeparator(u'Close Separator') |
821 | + self.Toolbar.addToolbarButton(u'Close Screen', |
822 | + u':/slides/slide_close.png', |
823 | + translate(u'SlideController', u'Close Screen'), |
824 | + self.onBlankScreen) |
825 | + if isLive: |
826 | + self.Toolbar.addToolbarSeparator(u'Loop Spearator') |
827 | + self.Toolbar.addToolbarButton(u'Start Loop', |
828 | + u':/media/media_time.png', |
829 | + translate(u'SlideController', u'Start continuous loop'), |
830 | + self.onStartLoop) |
831 | + self.Toolbar.addToolbarButton(u'Stop Loop', |
832 | + u':/media/media_stop.png', |
833 | + translate(u'SlideController', u'Stop continuous loop'), |
834 | + self.onStopLoop) |
835 | + self.DelaySpinBox = QtGui.QSpinBox() |
836 | + self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox) |
837 | + self.DelaySpinBox.setSuffix(translate(u'SlideController', u's')) |
838 | + |
839 | self.ControllerLayout.addWidget(self.Toolbar) |
840 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
841 | QtGui.QSizePolicy.Fixed) |
842 | @@ -110,7 +151,7 @@ |
843 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
844 | # Screen preview area |
845 | self.PreviewFrame = QtGui.QFrame(self.Splitter) |
846 | - self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 280, 190)) |
847 | + self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225)) |
848 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( |
849 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) |
850 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) |
851 | @@ -128,7 +169,7 @@ |
852 | sizePolicy.setHeightForWidth( |
853 | self.SlidePreview.sizePolicy().hasHeightForWidth()) |
854 | self.SlidePreview.setSizePolicy(sizePolicy) |
855 | - self.SlidePreview.setFixedSize(QtCore.QSize(250, 210)) |
856 | + self.SlidePreview.setFixedSize(QtCore.QSize(300, 225)) |
857 | self.SlidePreview.setFrameShape(QtGui.QFrame.Box) |
858 | self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) |
859 | self.SlidePreview.setLineWidth(1) |
860 | @@ -140,45 +181,46 @@ |
861 | QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) |
862 | QtCore.QObject.connect(self.PreviewListWidget, |
863 | QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) |
864 | - # Window Event Handlers |
865 | - QtCore.QObject.connect(Receiver.get_receiver(), |
866 | - QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst) |
867 | - QtCore.QObject.connect(Receiver.get_receiver(), |
868 | - QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious) |
869 | - QtCore.QObject.connect(Receiver.get_receiver(), |
870 | - QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext) |
871 | - QtCore.QObject.connect(Receiver.get_receiver(), |
872 | - QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast) |
873 | - QtCore.QObject.connect(Receiver.get_receiver(), |
874 | - QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop) |
875 | - QtCore.QObject.connect(Receiver.get_receiver(), |
876 | - QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop) |
877 | - |
878 | - |
879 | - def registerToolbar(self, handle,controller): |
880 | - """ |
881 | - Register a new toolbar with the controller |
882 | - ``handle`` |
883 | - Identifier for the toolbar being stored this should equal the |
884 | - plugins name. |
885 | - ``controller`` |
886 | - The toolbar class which should extend MasterToolbar |
887 | - """ |
888 | - #store the handle name in lower case so no probems later |
889 | - self.toolbarList[handle.lower()] = controller |
890 | - |
891 | - def retrieveToolbar(self, handle): |
892 | - """ |
893 | - Find the toolbar and return master if none present |
894 | - Add extra information back into toolbar class |
895 | - ``handle`` |
896 | - Identifier for the toolbar being requested |
897 | - """ |
898 | - try: |
899 | - toolbar = self.toolbarList[handle.lower()] |
900 | - except: |
901 | - toolbar = self.toolbarList[u'master'] |
902 | - return toolbar |
903 | + if isLive: |
904 | + QtCore.QObject.connect(Receiver.get_receiver(), |
905 | + QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay) |
906 | + Receiver().send_message(u'request_spin_delay') |
907 | + if isLive: |
908 | + self.Toolbar.makeWidgetsInvisible(self.image_list) |
909 | + else: |
910 | + pass |
911 | + |
912 | + def receiveSpinDelay(self, value): |
913 | + self.DelaySpinBox.setValue(int(value)) |
914 | + |
915 | + def enableToolBar(self, item): |
916 | + """ |
917 | + Allows the toolbars to be reconfigured based on Controller Type |
918 | + and ServiceItem Type |
919 | + """ |
920 | + if self.isLive: |
921 | + self.enableLiveToolBar(item) |
922 | + else: |
923 | + self.enablePreviewToolBar(item) |
924 | + |
925 | + def enableLiveToolBar(self, item): |
926 | + """ |
927 | + Allows the live toolbar to be customised |
928 | + """ |
929 | + if item.service_item_type == ServiceType.Text: |
930 | + self.Toolbar.makeWidgetsInvisible(self.image_list) |
931 | + elif item.service_item_type == ServiceType.Image: |
932 | + #Not sensible to allow loops with 1 frame |
933 | + if len(item.frames) > 1: |
934 | + self.Toolbar.makeWidgetsVisible(self.image_list) |
935 | + else: |
936 | + self.Toolbar.makeWidgetsInvisible(self.image_list) |
937 | + |
938 | + def enablePreviewToolBar(self, item): |
939 | + """ |
940 | + Allows the Preview toolbar to be customised |
941 | + """ |
942 | + pass |
943 | |
944 | def addServiceItem(self, item): |
945 | """ |
946 | @@ -186,13 +228,9 @@ |
947 | request the correct the toolbar of the plugin |
948 | Called by plugins |
949 | """ |
950 | - self.BaseToolbar = self.retrieveToolbar(item.shortname) |
951 | - self.ControllerLayout.removeWidget(self.Toolbar) |
952 | - #remove the old toolbar |
953 | - self.Toolbar.clear() |
954 | - self.Toolbar = self.BaseToolbar.getToolbar() |
955 | - self.ControllerLayout.addWidget(self.Toolbar) |
956 | + log.debug(u'addServiceItem') |
957 | item.render() |
958 | + self.enableToolBar(item) |
959 | self.displayServiceManagerItems(item, 0) |
960 | |
961 | def addServiceManagerItem(self, item, slideno): |
962 | @@ -201,12 +239,8 @@ |
963 | request the correct the toolbar of the plugin |
964 | Called by ServiceManager |
965 | """ |
966 | - self.BaseToolbar = self.retrieveToolbar(item.shortname) |
967 | - self.ControllerLayout.removeWidget(self.Toolbar) |
968 | - #remove the old toolbar |
969 | - self.Toolbar.clear() |
970 | - self.Toolbar = self.BaseToolbar.getToolbar() |
971 | - self.ControllerLayout.addWidget(self.Toolbar) |
972 | + log.debug(u'addServiceItem') |
973 | + self.enableToolBar(item) |
974 | self.displayServiceManagerItems(item, slideno) |
975 | |
976 | def displayServiceManagerItems(self, serviceitem, slideno): |
977 | @@ -214,7 +248,7 @@ |
978 | Loads a ServiceItem into the system from ServiceManager |
979 | Display the slide number passed |
980 | """ |
981 | - log.debug(u'add Service Manager Item') |
982 | + log.debug(u'displayServiceManagerItems Start') |
983 | self.serviceitem = serviceitem |
984 | slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image']) |
985 | slide_width = 300 |
986 | @@ -241,27 +275,13 @@ |
987 | self.PreviewListWidget.selectRow(slideno) |
988 | self.onSlideSelected() |
989 | self.PreviewListWidget.setFocus() |
990 | + log.debug(u'displayServiceManagerItems End') |
991 | |
992 | #Screen event methods |
993 | - def onSlideSelected(self): |
994 | - """ |
995 | - Generate the preview when you click on a slide. |
996 | - if this is the Live Controller also display on the screen |
997 | - """ |
998 | - row = self.PreviewListWidget.currentRow() |
999 | - if row > -1 and row < self.PreviewListWidget.rowCount(): |
1000 | - label = self.PreviewListWidget.cellWidget(row, 0) |
1001 | - smallframe = label.pixmap() |
1002 | - frame = self.serviceitem.frames[row][u'image'] |
1003 | - self.SlidePreview.setPixmap(smallframe) |
1004 | - if self.isLive: |
1005 | - self.parent.mainDisplay.frameView(frame) |
1006 | - |
1007 | def onSlideSelectedFirst(self): |
1008 | """ |
1009 | Go to the first slide. |
1010 | """ |
1011 | - print "oSSF" |
1012 | self.PreviewListWidget.selectRow(0) |
1013 | self.onSlideSelected() |
1014 | |
1015 | @@ -312,12 +332,12 @@ |
1016 | self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) |
1017 | self.onSlideSelected() |
1018 | |
1019 | - def onStartLoop(self, value): |
1020 | + def onStartLoop(self): |
1021 | """ |
1022 | Go to the last slide. |
1023 | """ |
1024 | if self.PreviewListWidget.rowCount() > 1: |
1025 | - self.timer_id = self.startTimer(int(value) * 1000) |
1026 | + self.timer_id = self.startTimer(int(self.DelaySpinBox.value()) * 1000) |
1027 | |
1028 | def onStopLoop(self): |
1029 | """ |
1030 | @@ -329,88 +349,5 @@ |
1031 | if event.timerId() == self.timer_id: |
1032 | self.onSlideSelectedNext() |
1033 | |
1034 | -class MasterToolbar(QtCore.QObject): |
1035 | - """ |
1036 | - Class from which all toolbars should extend |
1037 | - """ |
1038 | - def __init__(self, isLive): |
1039 | - self.Toolbar = None |
1040 | - QtCore.QObject.__init__(self) |
1041 | - self.PreviewListWidget = QtGui.QListWidget() |
1042 | - self.isLive = isLive |
1043 | - self.prefix = u'preview_' |
1044 | - if isLive: |
1045 | - self.prefix = u'live_' |
1046 | - |
1047 | - def getToolbar(self): |
1048 | - #define toolbar here as it needs to be redefined each time |
1049 | - #as the clear destroys it. |
1050 | - self.defineToolbar() |
1051 | - self.defineZone1() |
1052 | - self.defineZone2() |
1053 | - self.defineZone3() |
1054 | - self.defineZone4() |
1055 | - self.defineZone5() |
1056 | - return self.Toolbar |
1057 | - |
1058 | - def defineToolbar(self): |
1059 | - # Controller toolbar |
1060 | - self.Toolbar = OpenLPToolbar(self) |
1061 | - sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
1062 | - QtGui.QSizePolicy.Fixed) |
1063 | - sizeToolbarPolicy.setHorizontalStretch(0) |
1064 | - sizeToolbarPolicy.setVerticalStretch(0) |
1065 | - sizeToolbarPolicy.setHeightForWidth( |
1066 | - self.Toolbar.sizePolicy().hasHeightForWidth()) |
1067 | - self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
1068 | - |
1069 | - def defineZone1(self): |
1070 | - #Dummy Zone |
1071 | - pass |
1072 | - |
1073 | - def defineZone2(self): |
1074 | - if self.isLive: |
1075 | - self.Toolbar.addToolbarButton(u'First Slide', |
1076 | - u':/slides/slide_first.png', |
1077 | - translate(u'SlideController', u'Move to first'), |
1078 | - self.onSlideFirst) |
1079 | - self.Toolbar.addToolbarButton(u'Previous Slide', |
1080 | - u':/slides/slide_previous.png', |
1081 | - translate(u'SlideController', u'Move to previous'), |
1082 | - self.onSlidePrevious) |
1083 | - self.Toolbar.addToolbarButton(u'Next Slide', |
1084 | - u':/slides/slide_next.png', |
1085 | - translate(u'SlideController', u'Move to next'), |
1086 | - self.onSlideNext) |
1087 | - if self.isLive: |
1088 | - self.Toolbar.addToolbarButton(u'Last Slide', |
1089 | - u':/slides/slide_last.png', |
1090 | - translate(u'SlideController', u'Move to last'), |
1091 | - self.onSlideLast) |
1092 | - |
1093 | - def defineZone3(self): |
1094 | - #Dummy Zone |
1095 | - pass |
1096 | - |
1097 | - def defineZone4(self): |
1098 | - if self.isLive: |
1099 | - self.Toolbar.addSeparator() |
1100 | - self.Toolbar.addToolbarButton(u'Close Screen', |
1101 | - u':/slides/slide_close.png', |
1102 | - translate(u'SlideController', u'Close Screen'), |
1103 | - self.onSlideBlank) |
1104 | - |
1105 | - def defineZone5(self): |
1106 | - #Dummy Zone |
1107 | - pass |
1108 | - |
1109 | - def onSlideFirst(self): |
1110 | - Receiver().send_message(u'%sslide_first'% self.prefix) |
1111 | - def onSlidePrevious(self): |
1112 | - Receiver().send_message(u'%sslide_previous'% self.prefix) |
1113 | - def onSlideNext(self): |
1114 | - Receiver().send_message(u'%sslide_next'% self.prefix) |
1115 | - def onSlideLast(self): |
1116 | - Receiver().send_message(u'%sslide_last' % self.prefix) |
1117 | - def onSlideBlank(self): |
1118 | - Receiver().send_message(u'%sslide_blank' % self.prefix) |
1119 | + |
1120 | + |
1121 | |
1122 | === modified file 'openlp/core/ui/thememanager.py' |
1123 | --- openlp/core/ui/thememanager.py 2009-08-26 05:00:19 +0000 |
1124 | +++ openlp/core/ui/thememanager.py 2009-08-29 10:43:44 +0000 |
1125 | @@ -85,9 +85,6 @@ |
1126 | self.servicePath = self.config.get_data_path() |
1127 | self.global_theme = unicode(self.config.get_config(u'theme global theme', u'')) |
1128 | |
1129 | - def getDefault(self): |
1130 | - return self.global_theme |
1131 | - |
1132 | def changeGlobalFromTab(self, themeName): |
1133 | log.debug(u'changeGlobalFromTab %s', themeName) |
1134 | for count in range (0, self.ThemeListWidget.count()): |
1135 | @@ -329,13 +326,29 @@ |
1136 | if os.path.exists(theme_dir) == False: |
1137 | os.mkdir(os.path.join(self.path, name)) |
1138 | theme_file = os.path.join(theme_dir, name + u'.xml') |
1139 | - outfile = open(theme_file, u'w') |
1140 | - outfile.write(theme_xml) |
1141 | - outfile.close() |
1142 | - if image_from is not None and image_from != image_to: |
1143 | - shutil.copyfile(image_from, image_to) |
1144 | - self.generateAndSaveImage(self.path, name, theme_xml) |
1145 | - self.loadThemes() |
1146 | + log.debug(theme_file) |
1147 | + |
1148 | + result = QtGui.QMessageBox.Yes |
1149 | + if os.path.exists(theme_file): |
1150 | + result = QtGui.QMessageBox.question( |
1151 | + self, |
1152 | + translate(u'ThemeManager',u'Theme Exists'), |
1153 | + translate(u'ThemeManager',u'A theme with this name already exists, would you like to overwrite it?'), |
1154 | + (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), |
1155 | + QtGui.QMessageBox.No) |
1156 | + if result == QtGui.QMessageBox.Yes: |
1157 | + # Save the theme, overwriting the existing theme if necessary. |
1158 | + outfile = open(theme_file, u'w') |
1159 | + outfile.write(theme_xml) |
1160 | + outfile.close() |
1161 | + if image_from is not None and image_from != image_to: |
1162 | + shutil.copyfile(image_from, image_to) |
1163 | + |
1164 | + self.generateAndSaveImage(self.path, name, theme_xml) |
1165 | + self.loadThemes() |
1166 | + else: |
1167 | + # Don't close the dialog - allow the user to change the name of the theme or to cancel the theme dialog completely. |
1168 | + return False |
1169 | |
1170 | def generateAndSaveImage(self, dir, name, theme_xml): |
1171 | log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml) |
1172 | |
1173 | === modified file 'openlp/core/ui/themestab.py' |
1174 | --- openlp/core/ui/themestab.py 2009-08-25 20:04:58 +0000 |
1175 | +++ openlp/core/ui/themestab.py 2009-08-29 07:17:56 +0000 |
1176 | @@ -124,6 +124,9 @@ |
1177 | self.config.set_config(u'theme global theme',self.global_theme) |
1178 | Receiver().send_message(u'update_global_theme', self.global_theme ) |
1179 | |
1180 | + def postSetUp(self): |
1181 | + Receiver().send_message(u'update_global_theme', self.global_theme ) |
1182 | + |
1183 | def onSongLevelButtonPressed(self): |
1184 | self.global_style= u'Song' |
1185 | self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style) |
1186 | |
1187 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' |
1188 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-08-24 04:30:04 +0000 |
1189 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-09-01 05:17:32 +0000 |
1190 | @@ -341,8 +341,10 @@ |
1191 | def generateSlideData(self, service_item): |
1192 | log.debug(u'generating slide data') |
1193 | items = self.ListView.selectedIndexes() |
1194 | + if len(items) ==0: |
1195 | + return False |
1196 | old_chapter = u'' |
1197 | - raw_slides=[] |
1198 | + raw_slides = [] |
1199 | raw_footer = [] |
1200 | bible_text = u'' |
1201 | for item in items: |
1202 | @@ -389,6 +391,7 @@ |
1203 | for slide in raw_slides: |
1204 | service_item.add_from_text(slide[:30], slide) |
1205 | service_item.raw_footer = raw_footer |
1206 | + return True |
1207 | |
1208 | def formatVerse(self, old_chapter, chapter, verse, opening, closing): |
1209 | loc = opening |
1210 | @@ -432,27 +435,30 @@ |
1211 | combo.addItem(unicode(i)) |
1212 | |
1213 | def displayResults(self, bible): |
1214 | - for verse in self.search_results: |
1215 | + for count, verse in enumerate(self.search_results): |
1216 | bible_text = u' %s %d:%d (%s)' % (verse.book.name, |
1217 | verse.chapter, verse.verse, bible) |
1218 | bible_verse = QtGui.QListWidgetItem(bible_text) |
1219 | bible_verse.setData(QtCore.Qt.UserRole, |
1220 | QtCore.QVariant(bible_text)) |
1221 | self.ListView.addItem(bible_verse) |
1222 | + cr = self.ListView.setCurrentRow(count) |
1223 | + if cr is not None: |
1224 | + cr.setSelected(True) |
1225 | |
1226 | def searchByReference(self, bible, search): |
1227 | log.debug(u'searchByReference %s ,%s', bible, search) |
1228 | - book = '' |
1229 | - start_chapter = '' |
1230 | - end_chapter = '' |
1231 | - start_verse = '' |
1232 | - end_verse = '' |
1233 | + book = u'' |
1234 | + start_chapter = u'' |
1235 | + end_chapter = u'' |
1236 | + start_verse = u'' |
1237 | + end_verse = u'' |
1238 | search = search.replace(u' ', u' ').strip() |
1239 | original = search |
1240 | message = None |
1241 | # Remove book beware 0 index arrays |
1242 | for i in range (len(search)-1, 0, - 1): |
1243 | - if search[i] == ' ': |
1244 | + if search[i] == u' ': |
1245 | book = search[:i] |
1246 | # remove book from string |
1247 | search = search[i:] |
1248 | @@ -466,7 +472,7 @@ |
1249 | # number : found |
1250 | i = search.rfind(u' ') |
1251 | if i == -1: |
1252 | - chapter = '' |
1253 | + chapter = u'' |
1254 | else: |
1255 | chapter = search[i:len(search)] |
1256 | hyphen = chapter.find(u'-') |
1257 | @@ -493,29 +499,25 @@ |
1258 | end_verse = start_verse |
1259 | else: |
1260 | sp1 = sp[1].split(u':') |
1261 | - #print "2nd details", sp1, len(sp1) |
1262 | if len(sp1) == 1: |
1263 | end_chapter = start_chapter |
1264 | end_verse = sp1[0] |
1265 | else: |
1266 | end_chapter = sp1[0] |
1267 | end_verse = sp1[1] |
1268 | - #print 'search = ' + unicode(original) |
1269 | - #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) |
1270 | - if end_chapter == '': |
1271 | + if end_chapter == u'': |
1272 | end_chapter = start_chapter.rstrip() |
1273 | - if start_verse == '': |
1274 | - if end_verse == '': |
1275 | + if start_verse == u'': |
1276 | + if end_verse == u'': |
1277 | start_verse = 1 |
1278 | else: |
1279 | start_verse = end_verse |
1280 | - if end_verse == '': |
1281 | + if end_verse == u'': |
1282 | end_verse = 99 |
1283 | - if start_chapter == '': |
1284 | + if start_chapter == u'': |
1285 | message = u'No chapter found for search criteria' |
1286 | - #print 'message = ' + unicode(message) |
1287 | - #print 'search = ' + unicode(original) |
1288 | - #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) |
1289 | + log.debug(u'results = %s @ %s : %s @ %s : %s'% \ |
1290 | + (unicode(book), unicode(start_chapter), unicode(end_chapter), unicode(start_verse), unicode(end_verse))) |
1291 | if message == None: |
1292 | self.search_results = None |
1293 | self.search_results = self.parent.biblemanager.get_verse_text(bible, book, |
1294 | |
1295 | === modified file 'openlp/plugins/custom/lib/mediaitem.py' |
1296 | --- openlp/plugins/custom/lib/mediaitem.py 2009-08-15 11:02:24 +0000 |
1297 | +++ openlp/plugins/custom/lib/mediaitem.py 2009-09-01 05:17:32 +0000 |
1298 | @@ -68,17 +68,17 @@ |
1299 | self.addToolbarButton( |
1300 | translate(u'CustomMediaItem',u'Preview Custom Item'), |
1301 | translate(u'CustomMediaItem',u'Preview the selected Custom Item'), |
1302 | - u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem') |
1303 | + u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem') |
1304 | ## Live Custom Button ## |
1305 | self.addToolbarButton( |
1306 | translate(u'CustomMediaItem',u'Go Live'), |
1307 | translate(u'CustomMediaItem', u'Send the selected Custom live'), |
1308 | - u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem') |
1309 | + u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem') |
1310 | ## Add Custom Button ## |
1311 | self.addToolbarButton( |
1312 | translate(u'CustomMediaItem',u'Add Custom To Service'), |
1313 | translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), |
1314 | - u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem') |
1315 | + u':/system/system_add.png', self.onAddClick, u'CustomAddItem') |
1316 | # Add the CustomListView widget |
1317 | self.CustomWidget = QtGui.QWidget(self) |
1318 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) |
1319 | @@ -95,7 +95,7 @@ |
1320 | self.PageLayout.addWidget(self.ListView) |
1321 | # Signals |
1322 | QtCore.QObject.connect(self.ListView, |
1323 | - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) |
1324 | + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
1325 | #define and add the context menu |
1326 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
1327 | self.ListView.addAction(contextMenuAction(self.ListView, |
1328 | @@ -104,13 +104,13 @@ |
1329 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1330 | self.ListView.addAction(contextMenuAction( |
1331 | self.ListView, ':/system/system_preview.png', |
1332 | - translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) |
1333 | + translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick)) |
1334 | self.ListView.addAction(contextMenuAction( |
1335 | self.ListView, ':/system/system_live.png', |
1336 | - translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) |
1337 | + translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick)) |
1338 | self.ListView.addAction(contextMenuAction( |
1339 | self.ListView, ':/system/system_add.png', |
1340 | - translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) |
1341 | + translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick)) |
1342 | |
1343 | def initialise(self): |
1344 | self.loadCustomListView(self.parent.custommanager.get_all_slides()) |
1345 | @@ -143,33 +143,14 @@ |
1346 | row = self.ListView.row(item) |
1347 | self.ListView.takeItem(row) |
1348 | |
1349 | - def onCustomPreviewClick(self): |
1350 | - log.debug(u'Custom Preview Requested') |
1351 | - service_item = ServiceItem(self.parent) |
1352 | - service_item.addIcon(u':/media/media_song.png') |
1353 | - self.generateSlideData(service_item) |
1354 | - self.parent.preview_controller.addServiceItem(service_item) |
1355 | - |
1356 | - def onCustomLiveClick(self): |
1357 | - log.debug(u'Custom Live Requested') |
1358 | - service_item = ServiceItem(self.parent) |
1359 | - service_item.addIcon(u':/media/media_song.png') |
1360 | - self.generateSlideData(service_item) |
1361 | - self.parent.live_controller.addServiceItem(service_item) |
1362 | - |
1363 | - def onCustomAddClick(self): |
1364 | - log.debug(u'Custom Add Requested') |
1365 | - service_item = ServiceItem(self.parent) |
1366 | - service_item.addIcon(u':/media/media_song.png') |
1367 | - self.generateSlideData(service_item) |
1368 | - self.parent.service_manager.addServiceItem(service_item) |
1369 | - |
1370 | def generateSlideData(self, service_item): |
1371 | raw_slides =[] |
1372 | raw_footer = [] |
1373 | slide = None |
1374 | theme = None |
1375 | item = self.ListView.currentItem() |
1376 | + if item is None: |
1377 | + return False |
1378 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] |
1379 | customSlide = self.parent.custommanager.get_custom(item_id) |
1380 | title = customSlide.title |
1381 | @@ -187,3 +168,4 @@ |
1382 | for slide in raw_slides: |
1383 | service_item.add_from_text(slide[:30], slide) |
1384 | service_item.raw_footer = raw_footer |
1385 | + return True |
1386 | |
1387 | === modified file 'openlp/plugins/images/lib/__init__.py' |
1388 | --- openlp/plugins/images/lib/__init__.py 2009-08-24 05:13:27 +0000 |
1389 | +++ openlp/plugins/images/lib/__init__.py 2009-08-27 05:17:20 +0000 |
1390 | @@ -18,5 +18,4 @@ |
1391 | Place, Suite 330, Boston, MA 02111-1307 USA |
1392 | """ |
1393 | from mediaitem import ImageMediaItem |
1394 | -from imagetoolbar import ImageToolbar |
1395 | from imagetab import ImageTab |
1396 | |
1397 | === modified file 'openlp/plugins/images/lib/imagetab.py' |
1398 | --- openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000 |
1399 | +++ openlp/plugins/images/lib/imagetab.py 2009-08-29 07:17:56 +0000 |
1400 | @@ -20,7 +20,7 @@ |
1401 | |
1402 | from PyQt4 import QtCore, QtGui |
1403 | |
1404 | -from openlp.core.lib import SettingsTab, str_to_bool, translate |
1405 | +from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver |
1406 | |
1407 | class ImageTab(SettingsTab): |
1408 | """ |
1409 | @@ -67,3 +67,7 @@ |
1410 | |
1411 | def save(self): |
1412 | self.config.set_config(u'loop delay', self.loop_delay) |
1413 | + Receiver().send_message(u'update_spin_delay', self.loop_delay ) |
1414 | + |
1415 | + def postSetUp(self): |
1416 | + Receiver().send_message(u'update_spin_delay', self.loop_delay ) |
1417 | |
1418 | === removed file 'openlp/plugins/images/lib/imagetoolbar.py' |
1419 | --- openlp/plugins/images/lib/imagetoolbar.py 2009-08-24 05:13:27 +0000 |
1420 | +++ openlp/plugins/images/lib/imagetoolbar.py 1970-01-01 00:00:00 +0000 |
1421 | @@ -1,63 +0,0 @@ |
1422 | -# -*- coding: utf-8 -*- |
1423 | -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 |
1424 | -""" |
1425 | -OpenLP - Open Source Lyrics Projection |
1426 | -Copyright (c) 2008 Raoul Snyman |
1427 | -Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, |
1428 | - |
1429 | -This program is free software; you can redistribute it and/or modify it under |
1430 | -the terms of the GNU General Public License as published by the Free Software |
1431 | -Foundation; version 2 of the License. |
1432 | - |
1433 | -This program is distributed in the hope that it will be useful, but WITHOUT ANY |
1434 | -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A |
1435 | -PARTICULAR PURPOSE. See the GNU General Public License for more details. |
1436 | - |
1437 | -You should have received a copy of the GNU General Public License along with |
1438 | -this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
1439 | -Place, Suite 330, Boston, MA 02111-1307 USA |
1440 | -""" |
1441 | -import logging |
1442 | -import os |
1443 | - |
1444 | -from PyQt4 import QtCore, QtGui |
1445 | -from openlp.core.lib import OpenLPToolbar, translate, Receiver |
1446 | -from openlp.core.ui.slidecontroller import MasterToolbar |
1447 | - |
1448 | -class ImageToolbar(MasterToolbar): |
1449 | - |
1450 | - def __init__(self, parent, isLive): |
1451 | - MasterToolbar.__init__(self, isLive) |
1452 | - self.parent = parent |
1453 | - self.Toolbar = None |
1454 | - self.isLive = isLive |
1455 | - |
1456 | - def defineZone5(self): |
1457 | - self.Toolbar.addSeparator() |
1458 | - self.Toolbar.addToolbarButton(u'Start Loop', |
1459 | - u':/media/media_time.png', |
1460 | - translate(u'SlideController', u'Start continuous loop'), |
1461 | - self.onStartLoop) |
1462 | - self.Toolbar.addToolbarButton(u'Stop Loop', |
1463 | - u':/media/media_stop.png', |
1464 | - translate(u'SlideController', u'Stop continuous loop'), |
1465 | - self.onStopLoop) |
1466 | - self.Toolbar.addSeparator() |
1467 | - self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar) |
1468 | - self.SpinWidget = QtGui.QWidgetAction(self.Toolbar) |
1469 | - self.SpinWidget.setDefaultWidget(self.DelaySpinBox) |
1470 | - self.Toolbar.addAction(self.SpinWidget) |
1471 | - self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay) |
1472 | - self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's')) |
1473 | - |
1474 | - def onStartLoop(self): |
1475 | - """ |
1476 | - Trigger the slide controller to start to loop passing the delay |
1477 | - """ |
1478 | - Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value()) |
1479 | - |
1480 | - def onStopLoop(self): |
1481 | - """ |
1482 | - Trigger the slide controller to stop the loop |
1483 | - """ |
1484 | - Receiver().send_message(u'%sslide_stop_loop' % self.prefix) |
1485 | |
1486 | === modified file 'openlp/plugins/images/lib/mediaitem.py' |
1487 | --- openlp/plugins/images/lib/mediaitem.py 2009-08-25 05:18:09 +0000 |
1488 | +++ openlp/plugins/images/lib/mediaitem.py 2009-09-01 05:17:32 +0000 |
1489 | @@ -22,7 +22,6 @@ |
1490 | |
1491 | from PyQt4 import QtCore, QtGui |
1492 | from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon |
1493 | -from openlp.plugins.images.lib.imagetoolbar import ImageToolbar |
1494 | |
1495 | # We have to explicitly create separate classes for each plugin |
1496 | # in order for DnD to the Service manager to work correctly. |
1497 | @@ -56,9 +55,6 @@ |
1498 | self.ServiceItemIconName = u':/media/media_image.png' |
1499 | self.servicePath = None |
1500 | MediaManagerItem.__init__(self, parent, icon, title) |
1501 | - #create and install our own slide controller toolbar |
1502 | - imageToolbar = ImageToolbar(self, True) |
1503 | - parent.live_controller.registerToolbar(self.ConfigSection, imageToolbar) |
1504 | |
1505 | def initialise(self): |
1506 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) |
1507 | @@ -99,6 +95,8 @@ |
1508 | |
1509 | def generateSlideData(self, service_item): |
1510 | items = self.ListView.selectedIndexes() |
1511 | + if len(items) == 0: |
1512 | + return False |
1513 | service_item.title = u'Image(s)' |
1514 | for item in items: |
1515 | bitem = self.ListView.item(item.row()) |
1516 | @@ -106,3 +104,4 @@ |
1517 | frame = QtGui.QImage(unicode(filename)) |
1518 | (path, name) = os.path.split(filename) |
1519 | service_item.add_from_image(path, name, frame) |
1520 | + return True |
1521 | |
1522 | === modified file 'openlp/plugins/media/lib/mediaitem.py' |
1523 | --- openlp/plugins/media/lib/mediaitem.py 2009-08-15 11:02:24 +0000 |
1524 | +++ openlp/plugins/media/lib/mediaitem.py 2009-08-31 21:53:35 +0000 |
1525 | @@ -100,12 +100,15 @@ |
1526 | |
1527 | def generateSlideData(self, service_item): |
1528 | indexes = self.ListView.selectedIndexes() |
1529 | + if len(items) > 1: |
1530 | + return False |
1531 | service_item.title = u'Media' |
1532 | for index in indexes: |
1533 | filename = self.ListData.getFilename(index) |
1534 | frame = QtGui.QImage(unicode(filename)) |
1535 | (path, name) = os.path.split(filename) |
1536 | service_item.add_from_image(path, name, frame) |
1537 | + return True |
1538 | |
1539 | def onPreviewClick(self): |
1540 | log.debug(u'Media Preview Button pressed') |
1541 | |
1542 | === modified file 'openlp/plugins/presentations/lib/mediaitem.py' |
1543 | --- openlp/plugins/presentations/lib/mediaitem.py 2009-08-11 19:21:52 +0000 |
1544 | +++ openlp/plugins/presentations/lib/mediaitem.py 2009-08-31 21:53:35 +0000 |
1545 | @@ -43,7 +43,7 @@ |
1546 | self.controllers = controllers |
1547 | self.TranslationContext = u'PresentationPlugin' |
1548 | self.PluginTextShort = u'Presentation' |
1549 | - self.ConfigSection = u'presentation' |
1550 | + self.ConfigSection = u'presentations' |
1551 | self.hasFileIcon = True |
1552 | self.hasNewIcon = False |
1553 | self.hasEditIcon = False |
1554 | @@ -81,9 +81,6 @@ |
1555 | for item in self.controllers: |
1556 | #load the drop down selection |
1557 | self.DisplayTypeComboBox.addItem(item) |
1558 | - #load the preview toolbars |
1559 | - #self.parent.preview_controller.registerToolbar(item, self.controllers[item]) |
1560 | - #self.parent.live_controller.registerToolbar(item, self.controllers[item]) |
1561 | |
1562 | def loadList(self, list): |
1563 | for file in list: |
1564 | @@ -102,11 +99,13 @@ |
1565 | |
1566 | def generateSlideData(self, service_item): |
1567 | items = self.ListView.selectedIndexes() |
1568 | - service_item.title = self.DisplayTypeComboBox.currentText() |
1569 | + if len(items) > 1: |
1570 | + return False |
1571 | + service_item.title = unicode(self.DisplayTypeComboBox.currentText()) |
1572 | service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) |
1573 | for item in items: |
1574 | bitem = self.ListView.item(item.row()) |
1575 | filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) |
1576 | - frame = QtGui.QImage(unicode(filename)) |
1577 | (path, name) = os.path.split(filename) |
1578 | - service_item.add_using_toolbar(path, name) |
1579 | + service_item.add_from_command(path, name) |
1580 | + return True |
1581 | |
1582 | === modified file 'openlp/plugins/songs/lib/mediaitem.py' |
1583 | --- openlp/plugins/songs/lib/mediaitem.py 2009-08-26 05:00:19 +0000 |
1584 | +++ openlp/plugins/songs/lib/mediaitem.py 2009-08-31 21:53:35 +0000 |
1585 | @@ -68,15 +68,15 @@ |
1586 | ## Preview Song Button ## |
1587 | self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'), |
1588 | translate(u'SongMediaItem', u'Preview the selected song'), |
1589 | - ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') |
1590 | + ':/system/system_preview.png', self.onPreviewClick, 'SongPreviewItem') |
1591 | ## Live Song Button ## |
1592 | self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'), |
1593 | translate(u'SongMediaItem', u'Send the selected song live'), |
1594 | - ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') |
1595 | + ':/system/system_live.png', self.onLiveClick, 'SongLiveItem') |
1596 | ## Add Song Button ## |
1597 | self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'), |
1598 | translate(u'SongMediaItem', u'Add the selected song(s) to the service'), |
1599 | - ':/system/system_add.png', self.onSongAddClick, 'SongAddItem') |
1600 | + ':/system/system_add.png', self.onAddClick, 'SongAddItem') |
1601 | self.addToolbarSeparator() |
1602 | ## Song Maintenance Button ## |
1603 | self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'), |
1604 | @@ -127,7 +127,7 @@ |
1605 | QtCore.QObject.connect(self.SearchTextEdit, |
1606 | QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) |
1607 | QtCore.QObject.connect(self.ListView, |
1608 | - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) |
1609 | + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
1610 | QtCore.QObject.connect(Receiver.get_receiver(), |
1611 | QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) |
1612 | |
1613 | @@ -139,13 +139,13 @@ |
1614 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1615 | self.ListView.addAction(contextMenuAction(self.ListView, |
1616 | ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), |
1617 | - self.onSongPreviewClick)) |
1618 | + self.onPreviewClick)) |
1619 | self.ListView.addAction(contextMenuAction(self.ListView, |
1620 | ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), |
1621 | - self.onSongLiveClick)) |
1622 | + self.onLiveClick)) |
1623 | self.ListView.addAction(contextMenuAction(self.ListView, |
1624 | ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), |
1625 | - self.onSongAddClick)) |
1626 | + self.onAddClick)) |
1627 | |
1628 | def retranslateUi(self): |
1629 | self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:')) |
1630 | @@ -246,12 +246,12 @@ |
1631 | self.parent.songmanager.delete_song(item_id) |
1632 | row = self.ListView.row(item) |
1633 | self.ListView.takeItem(row) |
1634 | - |
1635 | - def onSongPreviewClick(self): |
1636 | - service_item = ServiceItem(self.parent) |
1637 | - service_item.addIcon(u':/media/media_song.png') |
1638 | - self.generateSlideData(service_item) |
1639 | - self.parent.preview_controller.addServiceItem(service_item) |
1640 | +# |
1641 | +# def onSongPreviewClick(self): |
1642 | +# service_item = ServiceItem(self.parent) |
1643 | +# service_item.addIcon(u':/media/media_song.png') |
1644 | +# self.generateSlideData(service_item) |
1645 | +# self.parent.preview_controller.addServiceItem(service_item) |
1646 | |
1647 | def generateSlideData(self, service_item): |
1648 | raw_slides =[] |
1649 | @@ -259,6 +259,8 @@ |
1650 | author_list = u'' |
1651 | ccl = u'' |
1652 | item = self.ListView.currentItem() |
1653 | + if item is None: |
1654 | + return False |
1655 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] |
1656 | song = self.parent.songmanager.get_song(item_id) |
1657 | service_item.theme = song.theme_name |
1658 | @@ -286,15 +288,16 @@ |
1659 | raw_footer.append(song.copyright ) |
1660 | raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl )) |
1661 | service_item.raw_footer = raw_footer |
1662 | - |
1663 | - def onSongLiveClick(self): |
1664 | - service_item = ServiceItem(self.parent) |
1665 | - service_item.addIcon(u':/media/media_song.png') |
1666 | - self.generateSlideData(service_item) |
1667 | - self.parent.live_controller.addServiceItem(service_item) |
1668 | - |
1669 | - def onSongAddClick(self): |
1670 | - service_item = ServiceItem(self.parent) |
1671 | - service_item.addIcon( u':/media/media_song.png') |
1672 | - self.generateSlideData(service_item) |
1673 | - self.parent.service_manager.addServiceItem(service_item) |
1674 | + return True |
1675 | + |
1676 | +# def onSongLiveClick(self): |
1677 | +# service_item = ServiceItem(self.parent) |
1678 | +# service_item.addIcon(u':/media/media_song.png') |
1679 | +# self.generateSlideData(service_item) |
1680 | +# self.parent.live_controller.addServiceItem(service_item) |
1681 | +# |
1682 | +# def onSongAddClick(self): |
1683 | +# service_item = ServiceItem(self.parent) |
1684 | +# service_item.addIcon( u':/media/media_song.png') |
1685 | +# self.generateSlideData(service_item) |
1686 | +# self.parent.service_manager.addServiceItem(service_item) |
Various fixes all over the shop.
Plugins now work with nothing selected
ServiceManager saves and Loads presentations
Blank lines work in songs.
Logging is more configurable