Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~trb143/openlp/servicing |
Merge into: | lp:openlp |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~trb143/openlp/servicing |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Tim Bentley | Approve | ||
Raoul Snyman | Approve | ||
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)
Tim Bentley (trb143) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'openlp/core/lib/renderer.py' |
2 | --- openlp/core/lib/renderer.py 2009-05-30 18:44:16 +0000 |
3 | +++ openlp/core/lib/renderer.py 2009-06-02 16:25:36 +0000 |
4 | @@ -29,7 +29,7 @@ |
5 | class Renderer: |
6 | |
7 | global log |
8 | - log=logging.getLogger(u'Renderer') |
9 | + log = logging.getLogger(u'Renderer') |
10 | log.info(u'Renderer Loaded') |
11 | """All the functions for rendering a set of words onto a Device Context |
12 | |
13 | @@ -44,7 +44,7 @@ |
14 | def __init__(self): |
15 | self._rect = None |
16 | self._debug = 0 |
17 | - self.words = None |
18 | + #self.words = None |
19 | self._right_margin = 64 # the amount of right indent |
20 | self._shadow_offset = 5 |
21 | self._outline_offset = 2 |
22 | @@ -103,38 +103,68 @@ |
23 | if self._bg_image_filename is not None: |
24 | self.scale_bg_image() |
25 | if self._bg_frame is None: |
26 | - self._render_background() |
27 | + self._generate_background_frame() |
28 | |
29 | def format_slide(self, words, footer): |
30 | """ |
31 | External API to sort out the text to pe placed on the frame |
32 | """ |
33 | + #print "########## Format Slide ##################" |
34 | log.debug(u'format_slide %s', words) |
35 | verses = [] |
36 | - words=words.replace("\r\n", "\n") |
37 | + words = words.replace("\r\n", "\n") |
38 | verses_text = words.split(u'\n\n') |
39 | + text = [] |
40 | for verse in verses_text: |
41 | lines = verse.split(u'\n') |
42 | - verses.append(self.split_set_of_lines(lines, footer)[0]) |
43 | - self.words = verses |
44 | - verses_text = [] |
45 | - for v in verses: |
46 | - verses_text.append(u'\n'.join(v).lstrip()) # remove first \n |
47 | - return verses_text |
48 | - |
49 | - def render_screen(self, screennum): |
50 | - log.debug(u'render screen\n %s %s ', screennum, self.words[screennum]) |
51 | - t = 0.0 |
52 | - words = self.words[screennum] |
53 | - retval = self._render_lines(words) |
54 | - return retval |
55 | + for line in lines: |
56 | + text.append(line) |
57 | + |
58 | + split_text = self._split_set_of_lines(text, False) |
59 | + #print "split text ", split_text |
60 | + #print "text ", text |
61 | + return split_text |
62 | + |
63 | +# def render_screen(self, screennum): |
64 | +# log.debug(u'render screen\n %s %s ', screennum, self.words[screennum]) |
65 | +# t = 0.0 |
66 | +# words = self.words[screennum] |
67 | +# retval = self._render_lines(words) |
68 | +# return retval |
69 | |
70 | def set_text_rectangle(self, rect_main, rect_footer): |
71 | - """ Sets the rectangle within which text should be rendered""" |
72 | + """ |
73 | + Sets the rectangle within which text should be rendered |
74 | + """ |
75 | self._rect = rect_main |
76 | self._rect_footer = rect_footer |
77 | |
78 | - def _render_background(self): |
79 | + def generate_frame_from_lines(self, lines, footer_lines=None): |
80 | + """ |
81 | + Render a set of lines according to the theme, return bounding box |
82 | + """ |
83 | + #print "########## Generate frame from lines ##################" |
84 | + log.debug(u'generate_frame_from_lines - Start') |
85 | + |
86 | + #print "Render Lines ", lines |
87 | + |
88 | + bbox = self._render_lines_unaligned(lines, False) |
89 | + if footer_lines is not None: |
90 | + bbox1 = self._render_lines_unaligned(footer_lines, True) |
91 | + |
92 | + # reset the frame. first time do not worrk about what you paint on. |
93 | + self._frame = QtGui.QPixmap(self._bg_frame) |
94 | + |
95 | + x, y = self._correctAlignment(self._rect, bbox) |
96 | + bbox = self._render_lines_unaligned(lines, False, (x, y)) |
97 | + |
98 | + if footer_lines is not None: |
99 | + bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) ) |
100 | + log.debug(u'generate_frame_from_lines - Finish') |
101 | + |
102 | + return self._frame |
103 | + |
104 | + def _generate_background_frame(self): |
105 | """ |
106 | Generate a background frame to the same size as the frame to be used |
107 | Results cached for performance reasons. |
108 | @@ -150,14 +180,14 @@ |
109 | elif self._theme.background_type == u'gradient' : # gradient |
110 | gradient = None |
111 | if self._theme.background_direction == u'horizontal': |
112 | - w = int(self._frame.width())/2 |
113 | + w = int(self._frame.width()) / 2 |
114 | gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height()) # vertical |
115 | elif self._theme.background_direction == u'vertical': |
116 | - h = int(self._frame.height())/2 |
117 | + h = int(self._frame.height()) / 2 |
118 | gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h) # Horizontal |
119 | else: |
120 | - w = int(self._frame.width())/2 |
121 | - h = int(self._frame.height())/2 |
122 | + w = int(self._frame.width()) / 2 |
123 | + h = int(self._frame.height()) / 2 |
124 | gradient = QtGui.QRadialGradient(w, h, w) # Circular |
125 | |
126 | gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor)) |
127 | @@ -177,10 +207,7 @@ |
128 | painter.drawPath(rectPath) |
129 | |
130 | elif self._theme.background_type== u'image': # image |
131 | - #r = self._frame.rect() |
132 | - #log.debug(u'Image size details %d %d %d %d ', r.x(), r.y(), r.width(),r.height()) |
133 | if self.bg_image is not None: |
134 | - #painter.drawPixmap(self.background_offsetx,self.background_offsety, self.bg_image) |
135 | painter.drawPixmap(0 ,0 , self.bg_image) |
136 | else: |
137 | painter.fillRect(self._frame.rect(), QtGui.QColor(u'#000000')) |
138 | @@ -189,69 +216,82 @@ |
139 | print "background time", bef, aft, aft-bef |
140 | log.debug(u'render background finish') |
141 | |
142 | - def split_set_of_lines(self, lines, footer): |
143 | - |
144 | - """Given a list of lines, decide how to split them best if they don't all fit on the screen |
145 | + def _split_set_of_lines(self, lines, footer): |
146 | + """ |
147 | + Given a list of lines, decide how to split them best if they don't all fit on the screen |
148 | - this is done by splitting at 1/2, 1/3 or 1/4 of the set |
149 | If it doesn't fit, even at this size, just split at each opportunity |
150 | |
151 | We'll do this by getting the bounding box of each line, and then summing them appropriately |
152 | Returns a list of [lists of lines], one set for each screenful |
153 | """ |
154 | - log.debug(u'Split set of lines') |
155 | bboxes = [] |
156 | + #print "lines ", lines |
157 | + |
158 | for line in lines: |
159 | - bboxes.append(self._render_single_line(line, footer)) |
160 | - #print line, bboxes |
161 | + bboxes.append(self._render_and_wrap_single_line(line, footer)) |
162 | + #print "bboxes ", bboxes |
163 | |
164 | numlines = len(lines) |
165 | bottom = self._rect.bottom() |
166 | - #for ratio in (numlines): #, numlines/2, numlines/3, numlines/4): |
167 | - ratio = numlines |
168 | - good = 1 |
169 | - startline = 0 |
170 | - endline = startline + ratio |
171 | - while (endline <= numlines): |
172 | - by = 0 |
173 | - for (x, y) in bboxes[startline:endline]: |
174 | - by += y |
175 | - #print by |
176 | - #print by , bottom |
177 | - if by > bottom: |
178 | - good=0 |
179 | + |
180 | + count = 0 |
181 | + |
182 | + for ratio in (numlines, numlines/2, numlines/3, numlines/4): |
183 | + good = 1 |
184 | + startline = 0 |
185 | + endline = startline + ratio |
186 | + while (endline <= numlines and endline != 0): |
187 | + count += 1 |
188 | + if count > 100: |
189 | + #print "busted" |
190 | + break |
191 | + by = 0 |
192 | + for (x,y) in bboxes[startline:endline]: |
193 | + #print by, startline, endline, x, y, bottom |
194 | + by += y |
195 | + #print "by ", by , bottom, startline, endline, numlines, ratio |
196 | + if by > bottom: |
197 | + good = 0 |
198 | + break |
199 | + startline += ratio |
200 | + endline = startline + ratio |
201 | + if good == 1: |
202 | break |
203 | - startline += ratio |
204 | - endline = startline+ratio |
205 | -# if good == 1: |
206 | -# break |
207 | - #print "---------" |
208 | |
209 | retval = [] |
210 | numlines_per_page = ratio |
211 | + #print "good ", good, ratio |
212 | if good: |
213 | c = 0 |
214 | thislines = [] |
215 | while c < numlines: |
216 | thislines.append(lines[c]) |
217 | c += 1 |
218 | + #print "c ", c, len(thislines), numlines_per_page, thislines |
219 | if len(thislines) == numlines_per_page: |
220 | retval.append(thislines) |
221 | thislines = [] |
222 | + if len(thislines) > 0: |
223 | + retval.append(thislines) |
224 | + #print "extra ", thislines |
225 | else: |
226 | -# log.debug(u" "Just split where you can" |
227 | +# print "Just split where you can" |
228 | retval = [] |
229 | startline = 0 |
230 | - endline = startline+1 |
231 | + endline = startline + 1 |
232 | while (endline <= numlines): |
233 | by = 0 |
234 | - for (x, y) in bboxes[startline:endline]: |
235 | + for (x,y) in bboxes[startline:endline]: |
236 | by += y |
237 | if by > bottom: |
238 | retval.append(lines[startline:endline-1]) |
239 | startline = endline-1 |
240 | - endline = startline # gets incremented below |
241 | + # gets incremented below |
242 | + endline = startline |
243 | by = 0 |
244 | endline += 1 |
245 | + #print "retval ", retval |
246 | return retval |
247 | |
248 | def _correctAlignment(self, rect, bbox): |
249 | @@ -259,32 +299,13 @@ |
250 | if int(self._theme.display_verticalAlign) == 0: # top align |
251 | y = rect.top() |
252 | elif int(self._theme.display_verticalAlign) == 2: # bottom align |
253 | - y = rect.bottom()-bbox.height() |
254 | + y = rect.bottom() - bbox.height() |
255 | elif int(self._theme.display_verticalAlign) == 1: # centre align |
256 | - y = rect.top()+(rect.height()-bbox.height())/2 |
257 | + y = rect.top() + (rect.height() - bbox.height()) / 2 |
258 | else: |
259 | - assert(0, u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign) |
260 | + assert(0 , u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign) |
261 | return x, y |
262 | |
263 | - def render_lines(self, lines, footer_lines=None): |
264 | - """render a set of lines according to the theme, return bounding box""" |
265 | - log.debug(u'render_lines - Start') |
266 | - |
267 | - bbox = self._render_lines_unaligned(lines, False) # Main font |
268 | - if footer_lines is not None: |
269 | - bbox1 = self._render_lines_unaligned(footer_lines, True) # Footer Font |
270 | - |
271 | - self._frame = QtGui.QPixmap(self._bg_frame) |
272 | - |
273 | - x, y = self._correctAlignment(self._rect, bbox) |
274 | - bbox = self._render_lines_unaligned(lines, False, (x, y)) |
275 | - |
276 | - if footer_lines is not None: |
277 | - bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) ) |
278 | - log.debug(u'render_lines- Finish') |
279 | - |
280 | - return self._frame |
281 | - |
282 | def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)): |
283 | """ |
284 | Given a list of lines to render, render each one in turn |
285 | @@ -301,7 +322,7 @@ |
286 | for line in lines: |
287 | # render after current bottom, but at original left edge |
288 | # keep track of right edge to see which is biggest |
289 | - (thisx, bry) = self._render_single_line(line, footer, (x , bry)) |
290 | + (thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry)) |
291 | if (thisx > brx): |
292 | brx = thisx |
293 | retval = QtCore.QRect(x, y,brx-x, bry-y) |
294 | @@ -314,7 +335,7 @@ |
295 | log.debug(u'render lines unaligned Finish') |
296 | return retval |
297 | |
298 | - def _render_single_line(self, line, footer, tlcorner=(0,0)): |
299 | + def _render_and_wrap_single_line(self, line, footer, tlcorner=(0,0)): |
300 | """ |
301 | Render a single line of words onto the DC, top left corner |
302 | specified. |
303 | @@ -335,10 +356,10 @@ |
304 | lines = [] |
305 | maxx = self._rect.width(); |
306 | maxy = self._rect.height(); |
307 | - while (len(words)>0): |
308 | + while (len(words) > 0): |
309 | w , h = self._get_extent_and_render(thisline, footer) |
310 | rhs = w + x |
311 | - if rhs < maxx-self._right_margin: |
312 | + if rhs < maxx - self._right_margin: |
313 | lines.append(thisline) |
314 | words = words[lastword:] |
315 | thisline = ' '.join(words) |
316 | @@ -373,10 +394,10 @@ |
317 | x = rightextent - w |
318 | elif align == 1: # right align |
319 | rightextent = maxx |
320 | - x = maxx-w |
321 | + x = maxx - w |
322 | elif align == 2: # centre |
323 | - x = (maxx-w) / 2; |
324 | - rightextent = x+w |
325 | + x = (maxx - w) / 2; |
326 | + rightextent = x + w |
327 | # now draw the text, and any outlines/shadows |
328 | if self._theme.display_shadow: |
329 | self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset), |
330 | @@ -441,7 +462,6 @@ |
331 | QtGui.QFont.Normal, # weight |
332 | 0)# italic |
333 | font.setPixelSize(int(self._theme.font_main_proportion)) |
334 | - #log.debug(u'Font details %s %s %s %d', self._theme.font_main_name, self._theme.font_main_proportion, font.family(), font.pointSize()) |
335 | painter.setFont(font) |
336 | if color == None: |
337 | if footer: |
338 | @@ -454,9 +474,9 @@ |
339 | metrics=QtGui.QFontMetrics(font) |
340 | # xxx some fudges to make it exactly like wx! Take 'em out later |
341 | w = metrics.width(line) |
342 | - h = metrics.height()-2 |
343 | + h = metrics.height() - 2 |
344 | if draw: |
345 | - painter.drawText(x, y+metrics.height()-metrics.descent()-1, line) |
346 | + painter.drawText(x, y + metrics.ascent() , line) |
347 | painter.end() |
348 | return (w, h) |
349 | |
350 | |
351 | === modified file 'openlp/core/lib/rendermanager.py' |
352 | --- openlp/core/lib/rendermanager.py 2009-05-22 18:30:25 +0000 |
353 | +++ openlp/core/lib/rendermanager.py 2009-06-01 17:50:37 +0000 |
354 | @@ -136,10 +136,9 @@ |
355 | lines1.append(u'Amazing Grace (John Newton)' ) |
356 | lines1.append(u'Public Domain') |
357 | lines1.append(u'CCLI xxx') |
358 | - return self.renderer.render_lines(lines, lines1) |
359 | - |
360 | - |
361 | - def format_slide(self, words, footer): |
362 | + return self.renderer.generate_frame_from_lines(lines, lines1) |
363 | + |
364 | + def format_slide(self, words): |
365 | log.debug(u'format slide') |
366 | self.calculate_default(self.screen_list[self.current_display]['size']) |
367 | self.build_text_rectangle(self.themedata) |
368 | @@ -151,7 +150,7 @@ |
369 | self.calculate_default(self.screen_list[self.current_display]['size']) |
370 | self.build_text_rectangle(self.themedata) |
371 | self.renderer.set_frame_dest(self.width, self.height) |
372 | - return self.renderer.render_lines(main_text, footer_text) |
373 | + return self.renderer.generate_frame_from_lines(main_text, footer_text) |
374 | |
375 | def calculate_default(self, screen): |
376 | log.debug(u'calculate default %s' , screen) |
377 | |
378 | === modified file 'openlp/core/lib/serviceitem.py' |
379 | --- openlp/core/lib/serviceitem.py 2009-05-22 18:30:25 +0000 |
380 | +++ openlp/core/lib/serviceitem.py 2009-06-02 16:25:36 +0000 |
381 | @@ -58,15 +58,17 @@ |
382 | """ |
383 | log.debug(u'Render called') |
384 | if self.theme == None: |
385 | - self.render_manager.set_override_theme(None) |
386 | + self.plugin.render_manager.set_override_theme(None) |
387 | else: |
388 | - self.render_manager.set_override_theme(self.theme) |
389 | + self.plugin.render_manager.set_override_theme(self.theme) |
390 | log.debug(u'Formatting slides') |
391 | if len(self.frames) == 0 and len(self.raw_slides) > 0 : |
392 | for slide in self.raw_slides: |
393 | - formated = self.render_manager.format_slide(slide, False) |
394 | - frame = self.render_manager.generate_slide(formated, self.raw_footer) |
395 | - self.frames.append({u'title': formated, u'image': frame}) |
396 | + formated = self.plugin.render_manager.format_slide(slide) |
397 | + #print formated |
398 | + for format in formated: |
399 | + frame = self.plugin.render_manager.generate_slide(format, self.raw_footer) |
400 | + self.frames.append({u'title': format, u'image': frame}) |
401 | else: |
402 | if len(self.command_files) > 0: |
403 | pass |
404 | |
405 | === modified file 'openlp/core/ui/alertform.py' |
406 | --- openlp/core/ui/alertform.py 2009-05-20 20:17:20 +0000 |
407 | +++ openlp/core/ui/alertform.py 2009-06-01 17:50:37 +0000 |
408 | @@ -18,17 +18,19 @@ |
409 | Place, Suite 330, Boston, MA 02111-1307 USA |
410 | """ |
411 | import logging |
412 | + |
413 | from PyQt4 import QtCore, QtGui |
414 | from openlp.core.lib import translate |
415 | |
416 | class AlertForm(QtGui.QDialog): |
417 | global log |
418 | - log=logging.getLogger(u'AlertForm') |
419 | + log = logging.getLogger(u'AlertForm') |
420 | |
421 | def __init__(self, parent=None): |
422 | - QtGui.QDialog.__init__(self, parent) |
423 | + QtGui.QDialog.__init__(self, None) |
424 | + self.parent = parent |
425 | self.setupUi(self) |
426 | - log.info(u'Defined') |
427 | + log.debug(u'Defined') |
428 | |
429 | def setupUi(self, AlertForm): |
430 | AlertForm.setObjectName("AlertForm") |
431 | @@ -92,7 +94,6 @@ |
432 | self.DisplayButton.setText(translate("AlertForm", u'Display')) |
433 | self.CancelButton.setText(translate("AlertForm", u'Cancel')) |
434 | |
435 | - |
436 | def load_settings(self): |
437 | pass |
438 | |
439 | @@ -100,4 +101,4 @@ |
440 | pass |
441 | |
442 | def onDisplayClicked(self): |
443 | - pass |
444 | + self.parent.mainDisplay.alert(self.parent.settingsForm.AlertsTab, self.AlertEntryEditItem.text()) |
445 | |
446 | === modified file 'openlp/core/ui/generaltab.py' |
447 | --- openlp/core/ui/generaltab.py 2009-05-20 20:17:20 +0000 |
448 | +++ openlp/core/ui/generaltab.py 2009-06-01 17:50:37 +0000 |
449 | @@ -20,7 +20,7 @@ |
450 | |
451 | from PyQt4 import QtCore, QtGui |
452 | |
453 | -from openlp.core.lib import SettingsTab, translate |
454 | +from openlp.core.lib import SettingsTab, translate, str_to_bool |
455 | |
456 | class GeneralTab(SettingsTab): |
457 | """ |
458 | @@ -113,6 +113,19 @@ |
459 | QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) |
460 | self.GeneralRightLayout.addItem(self.GeneralRightSpacer) |
461 | self.GeneralLayout.addWidget(self.GeneralRightWidget) |
462 | + QtCore.QObject.connect(self.MonitorComboBox, |
463 | + QtCore.SIGNAL("activated(int)"), self.onMonitorComboBoxChanged) |
464 | + QtCore.QObject.connect(self.WarningCheckBox, |
465 | + QtCore.SIGNAL("stateChanged(int)"), self.onWarningCheckBoxChanged) |
466 | + QtCore.QObject.connect(self.AutoOpenCheckBox, |
467 | + QtCore.SIGNAL("stateChanged(int)"), self.onAutoOpenCheckBoxChanged) |
468 | + QtCore.QObject.connect(self.NumberEdit, |
469 | + QtCore.SIGNAL("lostFocus()"), self.onNumberEditLostFocus) |
470 | + QtCore.QObject.connect(self.UsernameEdit, |
471 | + QtCore.SIGNAL("lostFocus()"), self.onUsernameEditLostFocus) |
472 | + QtCore.QObject.connect(self.PasswordEdit, |
473 | + QtCore.SIGNAL("lostFocus()"), self.onPasswordEditLostFocus) |
474 | + |
475 | |
476 | def retranslateUi(self): |
477 | self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors')) |
478 | @@ -126,7 +139,29 @@ |
479 | self.UsernameLabel.setText(translate(u'GeneralTab', u'SongSelect Username:')) |
480 | self.PasswordLabel.setText(translate(u'GeneralTab', u'SongSelect Password:')) |
481 | |
482 | - def initialise(self): |
483 | + def onMonitorComboBoxChanged(self): |
484 | + self.MonitorNumber = self.MonitorComboBox.currentIndex() |
485 | + |
486 | + def onAutoOpenCheckBoxChanged(self, value): |
487 | + self.AutoOpen = False |
488 | + if value == 2: # we have a set value convert to True/False |
489 | + self.AutoOpen = True |
490 | + |
491 | + def onWarningCheckBoxChanged(self, value): |
492 | + self.Warning = False |
493 | + if value == 2: # we have a set value convert to True/False |
494 | + self.Warning = True |
495 | + |
496 | + def onNumberEditLostFocus(self): |
497 | + self.CCLNumber = self.NumberEdit.displayText() |
498 | + |
499 | + def onUsernameEditLostFocus(self): |
500 | + self.Username = self.UsernameEdit.displayText() |
501 | + |
502 | + def onPasswordEditLostFocus(self): |
503 | + self.Password = self.PasswordEdit.displayText() |
504 | + |
505 | + def load(self): |
506 | for screen in self.screen_list: |
507 | screen_name = translate(u'GeneralTab', u'Screen') + u' ' + \ |
508 | str(screen['number'] + 1) |
509 | @@ -134,3 +169,25 @@ |
510 | screen_name = screen_name + u' (' + \ |
511 | translate(u'GeneralTab', u'primary') + u')' |
512 | self.MonitorComboBox.addItem(screen_name) |
513 | + |
514 | + self.MonitorNumber = int(self.config.get_config(u'Monitor', u'0')) |
515 | + self.Warning = str_to_bool(self.config.get_config(u'Warning', u"False")) |
516 | + self.AutoOpen = str_to_bool(self.config.get_config(u'Auto Open', u"False")) |
517 | + self.CCLNumber = str(self.config.get_config('CCL Number', u'XXX')) |
518 | + self.Username = str(self.config.get_config('User Name', u'')) |
519 | + self.Password = str(self.config.get_config('Password', u'')) |
520 | + |
521 | + self.MonitorComboBox.setCurrentIndex(self.MonitorNumber) |
522 | + self.WarningCheckBox.setChecked(self.Warning) |
523 | + self.AutoOpenCheckBox.setChecked(self.AutoOpen) |
524 | + self.NumberEdit.setText(self.CCLNumber) |
525 | + self.UsernameEdit.setText(self.Username) |
526 | + self.PasswordEdit.setText(self.Password) |
527 | + |
528 | + def save(self): |
529 | + self.config.set_config(u'Monitor',str(self.MonitorNumber)) |
530 | + self.config.set_config(u'Warning', str(self.Warning)) |
531 | + self.config.set_config(u'Auto Open', str(self.AutoOpen)) |
532 | + self.config.set_config('CCL Number', str(self.CCLNumber)) |
533 | + self.config.set_config('User Name',str(self.Username)) |
534 | + self.config.set_config('Password', str(self.Password )) |
535 | |
536 | === modified file 'openlp/core/ui/maindisplay.py' |
537 | --- openlp/core/ui/maindisplay.py 2009-05-20 20:17:20 +0000 |
538 | +++ openlp/core/ui/maindisplay.py 2009-06-01 17:50:37 +0000 |
539 | @@ -18,8 +18,9 @@ |
540 | Place, Suite 330, Boston, MA 02111-1307 USA |
541 | """ |
542 | |
543 | -from PyQt4 import QtCore, QtGui |
544 | +from PyQt4 import QtCore, QtGui, QtTest |
545 | |
546 | +from time import sleep |
547 | from openlp.core.lib import translate |
548 | |
549 | class MainDisplay(QtGui.QWidget): |
550 | @@ -32,6 +33,9 @@ |
551 | self.display.setScaledContents(True) |
552 | self.displayBlank = False |
553 | self.blankFrame= None |
554 | + self.alertactive = False |
555 | + self.alerttext = u'' |
556 | + self.alertTab = None |
557 | |
558 | def setup(self, screenNumber): |
559 | """ |
560 | @@ -55,19 +59,55 @@ |
561 | self.showMinimized() |
562 | |
563 | painter=QtGui.QPainter() |
564 | - self.blankFrame = QtGui.QPixmap(800, 600) |
565 | + self.blankFrame = QtGui.QPixmap(screen['size'].width(), screen['size'].height()) |
566 | painter.begin(self.blankFrame) |
567 | painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000')) |
568 | + self.frameView(self.blankFrame) |
569 | |
570 | def frameView(self, frame): |
571 | self.frame = frame |
572 | - if self.displayBlank == False: |
573 | + if not self.displayBlank: |
574 | self.display.setPixmap(frame) |
575 | + elif self.alertactive: |
576 | + self.displayAlert() |
577 | |
578 | def blankDisplay(self): |
579 | - if self.displayBlank == False: |
580 | + if not self.displayBlank: |
581 | self.displayBlank = True |
582 | self.display.setPixmap(self.blankFrame) |
583 | else: |
584 | self.displayBlank = False |
585 | self.frameView(self.frame) |
586 | + |
587 | + def alert(self, alertTab, text): |
588 | + """ |
589 | + Called from the Alert Tab |
590 | + alertTab = details from AlertTab |
591 | + text = display text |
592 | + screen = screen number to be displayed on. |
593 | + """ |
594 | + self.alerttext = text |
595 | + self.alertTab = alertTab |
596 | + if len(text) > 0: |
597 | + self.alertactive = True |
598 | + self.displayAlert() |
599 | + self.alertactive = False |
600 | + |
601 | + def displayAlert(self): |
602 | + alertframe = QtGui.QPixmap(self.frame) |
603 | + painter = QtGui.QPainter(alertframe) |
604 | + top = alertframe.rect().height() * 0.9 |
605 | + painter.fillRect(QtCore.QRect(0, top , alertframe.rect().width(), alertframe.rect().height() - top), QtGui.QColor(self.alertTab.bg_color)) |
606 | + font = QtGui.QFont() |
607 | + font.setFamily(self.alertTab.font_face) |
608 | + font.setBold(True) |
609 | + font.setPointSize(40) |
610 | + painter.setFont(font) |
611 | + painter.setPen(QtGui.QColor(self.alertTab.font_color)) |
612 | + x, y = (0, top) |
613 | + metrics=QtGui.QFontMetrics(font) |
614 | + painter.drawText(x, y+metrics.height()-metrics.descent()-1, self.alerttext) |
615 | + painter.end() |
616 | + self.display.setPixmap(alertframe) |
617 | + QtTest.QTest.qWait(self.alertTab.timeout*1000) |
618 | + self.display.setPixmap(self.frame) |
619 | |
620 | === modified file 'openlp/core/ui/mainwindow.py' |
621 | --- openlp/core/ui/mainwindow.py 2009-06-01 19:47:05 +0000 |
622 | +++ openlp/core/ui/mainwindow.py 2009-06-02 16:25:36 +0000 |
623 | @@ -40,7 +40,7 @@ |
624 | self.mainDisplay = MainDisplay(None, screens) |
625 | self.screenList = screens |
626 | self.EventManager = EventManager() |
627 | - self.alertForm = AlertForm() |
628 | + self.alertForm = AlertForm(self) |
629 | self.aboutForm = AboutForm() |
630 | self.settingsForm = SettingsForm(self.screenList, self) |
631 | |
632 | @@ -88,26 +88,9 @@ |
633 | self.plugin_manager.initialise_plugins() |
634 | |
635 | # Once all components are initialised load the Themes |
636 | - log.info(u'Load Themes and Managers') |
637 | - self.PreviewController.ServiceManager = self.ServiceManagerContents |
638 | - self.LiveController.ServiceManager = self.ServiceManagerContents |
639 | - |
640 | - self.ThemeManagerContents.EventManager = self.EventManager |
641 | - self.ThemeManagerContents.RenderManager = self.RenderManager |
642 | - self.ThemeManagerContents.ServiceManager = self.ServiceManagerContents |
643 | - #self.ThemeManagerContents.ThemesTab = self.ServiceManagerContents.ThemesTab |
644 | - |
645 | - self.ServiceManagerContents.RenderManager = self.RenderManager |
646 | - self.ServiceManagerContents.EventManager = self.EventManager |
647 | - self.ServiceManagerContents.LiveController = self.LiveController |
648 | - self.ServiceManagerContents.PreviewController = self.PreviewController |
649 | - |
650 | + log.info(u'Load Themes') |
651 | self.ThemeManagerContents.loadThemes() |
652 | |
653 | - # Initialise SlideControllers |
654 | - log.info(u'Set Up SlideControllers') |
655 | - self.LiveController.mainDisplay = self.mainDisplay |
656 | - |
657 | def onCloseEvent(self, event): |
658 | """ |
659 | Hook to close the main window and display windows on exit |
660 | @@ -128,6 +111,7 @@ |
661 | main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'), |
662 | QtGui.QIcon.Normal, QtGui.QIcon.Off) |
663 | self.mainWindow.setWindowIcon(main_icon) |
664 | + |
665 | self.MainContent = QtGui.QWidget(self.mainWindow) |
666 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) |
667 | sizePolicy.setHorizontalStretch(0) |
668 | @@ -144,8 +128,10 @@ |
669 | self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal) |
670 | self.ControlSplitter.setObjectName(u'ControlSplitter') |
671 | self.MainContentLayout.addWidget(self.ControlSplitter) |
672 | - self.PreviewController = SlideController(self.mainWindow, self.ControlSplitter, False) |
673 | - self.LiveController = SlideController(self.mainWindow, self.ControlSplitter, True) |
674 | + |
675 | + self.PreviewController = SlideController( self.ControlSplitter, self, False) |
676 | + self.LiveController = SlideController(self.ControlSplitter, self, True) |
677 | + |
678 | self.MenuBar = QtGui.QMenuBar(self.mainWindow) |
679 | self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) |
680 | self.MenuBar.setObjectName(u'MenuBar') |
681 | @@ -172,12 +158,13 @@ |
682 | self.StatusBar = QtGui.QStatusBar(self.mainWindow) |
683 | self.StatusBar.setObjectName(u'StatusBar') |
684 | self.mainWindow.setStatusBar(self.StatusBar) |
685 | + |
686 | self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow) |
687 | - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) |
688 | - sizePolicy.setHorizontalStretch(0) |
689 | - sizePolicy.setVerticalStretch(0) |
690 | - sizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth()) |
691 | - self.MediaManagerDock.setSizePolicy(sizePolicy) |
692 | + #MmSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) |
693 | + #MmSizePolicy.setHorizontalStretch(0) |
694 | + #MmSizePolicy.setVerticalStretch(0) |
695 | + #MmSizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth()) |
696 | + #self.MediaManagerDock.setSizePolicy(MmSizePolicy) |
697 | icon = QtGui.QIcon() |
698 | icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'), |
699 | QtGui.QIcon.Normal, QtGui.QIcon.Off) |
700 | @@ -187,11 +174,11 @@ |
701 | self.MediaManagerDock.setObjectName(u'MediaManagerDock') |
702 | self.MediaManagerDock.setMinimumWidth(250) |
703 | self.MediaManagerContents = QtGui.QWidget() |
704 | - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) |
705 | - sizePolicy.setHorizontalStretch(0) |
706 | - sizePolicy.setVerticalStretch(0) |
707 | - sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth()) |
708 | - self.MediaManagerContents.setSizePolicy(sizePolicy) |
709 | + #sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) |
710 | + #sizePolicy.setHorizontalStretch(0) |
711 | + #sizePolicy.setVerticalStretch(0) |
712 | + #sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth()) |
713 | + #self.MediaManagerContents.setSizePolicy(sizePolicy) |
714 | self.MediaManagerContents.setObjectName(u'MediaManagerContents') |
715 | self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) |
716 | self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0) |
717 | @@ -202,6 +189,7 @@ |
718 | self.MediaManagerLayout.addWidget(self.MediaToolBox) |
719 | self.MediaManagerDock.setWidget(self.MediaManagerContents) |
720 | self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) |
721 | + |
722 | #Sevice Manager Defined |
723 | self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow) |
724 | ServiceManagerIcon = QtGui.QIcon() |
725 | @@ -213,6 +201,7 @@ |
726 | self.ServiceManagerContents = ServiceManager(self) |
727 | self.ServiceManagerDock.setWidget(self.ServiceManagerContents) |
728 | self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock) |
729 | + |
730 | #Theme Manager Defined |
731 | self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow) |
732 | ThemeManagerIcon = QtGui.QIcon() |
733 | @@ -227,6 +216,7 @@ |
734 | self.ThemeManagerDock.setWidget(self.ThemeManagerContents) |
735 | self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock) |
736 | |
737 | + #Menu Items define |
738 | self.FileNewItem = QtGui.QAction(self.mainWindow) |
739 | self.FileNewItem.setIcon( |
740 | self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service')) |
741 | @@ -397,22 +387,7 @@ |
742 | self.HelpMenu.setTitle(translate(u'mainWindow', u'&Help')) |
743 | self.MediaManagerDock.setWindowTitle(translate(u'mainWindow', u'Media Manager')) |
744 | self.ServiceManagerDock.setWindowTitle(translate(u'mainWindow', u'Service Manager')) |
745 | -# self.ServiceManagerContents.MoveTopButton.setText(translate(u'mainWindow', u'Move To Top')) |
746 | -# self.ServiceManagerContents.MoveUpButton.setText(translate(u'mainWindow', u'Move Up')) |
747 | -# self.ServiceManagerContents.MoveDownButton.setText(translate(u'mainWindow', u'Move Down')) |
748 | -# self.ServiceManagerContents.MoveBottomButton.setText(translate(u'mainWindow', u'Move To Bottom')) |
749 | -# self.ServiceManagerContents.NewItem.setText(translate(u'mainWindow', u'New Service')) |
750 | -# self.ServiceManagerContents.OpenItem.setText(translate(u'mainWindow', u'Open Service')) |
751 | -# self.ServiceManagerContents.SaveItem.setText(translate(u'mainWindow', u'Save Service')) |
752 | -# self.ServiceManagerContents.ThemeComboBox.setItemText(0, translate(u'mainWindow', u'African Sunset')) |
753 | -# self.ServiceManagerContents.ThemeComboBox.setItemText(1, translate(u'mainWindow', u'Snowy Mountains')) |
754 | -# self.ServiceManagerContents.ThemeComboBox.setItemText(2, translate(u'mainWindow', u'Wilderness')) |
755 | self.ThemeManagerDock.setWindowTitle(translate(u'mainWindow', u'Theme Manager')) |
756 | -# self.ThemeNewItem.setText(translate(u'mainWindow', u'New Theme')) |
757 | -# self.ThemeEditItem.setText(translate(u'mainWindow', u'Edit Theme')) |
758 | -# self.ThemeDeleteButton.setText(translate(u'mainWindow', u'Delete Theme')) |
759 | -# self.ThemeImportButton.setText(translate(u'mainWindow', u'Import Theme')) |
760 | -# self.ThemeExportButton.setText(translate(u'mainWindow', u'Export Theme')) |
761 | self.FileNewItem.setText(translate(u'mainWindow', u'&New')) |
762 | self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service')) |
763 | self.FileNewItem.setStatusTip(translate(u'mainWindow', u'Create a new Service')) |
764 | @@ -470,7 +445,7 @@ |
765 | |
766 | def show(self): |
767 | self.mainWindow.showMaximized() |
768 | - self.mainDisplay.setup(0) |
769 | + self.mainDisplay.setup(self.settingsForm.GeneralTab.MonitorNumber) |
770 | self.mainDisplay.show() |
771 | |
772 | def onHelpAboutItemClicked(self): |
773 | |
774 | === modified file 'openlp/core/ui/servicemanager.py' |
775 | --- openlp/core/ui/servicemanager.py 2009-05-22 18:30:25 +0000 |
776 | +++ openlp/core/ui/servicemanager.py 2009-06-01 17:50:37 +0000 |
777 | @@ -126,7 +126,7 @@ |
778 | |
779 | def onThemeComboBoxSelected(self, currentIndex): |
780 | self.service_theme = self.ThemeComboBox.currentText() |
781 | - self.RenderManager.set_service_theme(self.service_theme) |
782 | + self.parent.RenderManager.set_service_theme(self.service_theme) |
783 | self.config.set_config(u'theme service theme', self.service_theme) |
784 | |
785 | def addServiceItem(self, item): |
786 | @@ -147,11 +147,11 @@ |
787 | |
788 | def makePreview(self): |
789 | item, count = self.findServiceItem() |
790 | - self.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count) |
791 | + self.parent.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count) |
792 | |
793 | def makeLive(self): |
794 | item, count = self.findServiceItem() |
795 | - self.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count) |
796 | + self.parent.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count) |
797 | |
798 | def findServiceItem(self): |
799 | items = self.ServiceManagerList.selectedItems() |
800 | @@ -182,7 +182,7 @@ |
801 | link = event.mimeData() |
802 | if link.hasText(): |
803 | plugin = event.mimeData().text() |
804 | - self.EventManager.post_event(Event(EventType.LoadServiceItem, plugin)) |
805 | + self.parent.EventManager.post_event(Event(EventType.LoadServiceItem, plugin)) |
806 | |
807 | def oos_as_text(self): |
808 | text=[] |
809 | @@ -218,4 +218,4 @@ |
810 | id = 0 |
811 | self.service_theme = u'' |
812 | self.ThemeComboBox.setCurrentIndex(id) |
813 | - self.RenderManager.set_service_theme(self.service_theme) |
814 | + self.parent.RenderManager.set_service_theme(self.service_theme) |
815 | |
816 | === modified file 'openlp/core/ui/slidecontroller.py' |
817 | --- openlp/core/ui/slidecontroller.py 2009-06-01 19:47:05 +0000 |
818 | +++ openlp/core/ui/slidecontroller.py 2009-06-02 16:25:36 +0000 |
819 | @@ -98,11 +98,12 @@ |
820 | |
821 | class SlideController(QtGui.QWidget): |
822 | global log |
823 | - log=logging.getLogger(u'SlideController') |
824 | + log = logging.getLogger(u'SlideController') |
825 | |
826 | - def __init__(self, parent, control_splitter, isLive): |
827 | - QtGui.QWidget.__init__(self, parent) |
828 | + def __init__(self, control_splitter, parent, isLive): |
829 | + QtGui.QWidget.__init__(self, parent.mainWindow) |
830 | self.isLive = isLive |
831 | + self.parent = parent |
832 | self.Panel = QtGui.QWidget(control_splitter) |
833 | self.Splitter = QtGui.QSplitter(self.Panel) |
834 | self.Splitter.setOrientation(QtCore.Qt.Vertical) |
835 | @@ -127,6 +128,7 @@ |
836 | self.PreviewListView.setWrapping(False) |
837 | self.PreviewListView.setModel(self.PreviewListData) |
838 | #self.PreviewListView.setSelectionRectVisible(True) |
839 | + |
840 | self.PreviewListView.setSpacing(0) |
841 | self.PreviewListView.setObjectName("PreviewListView") |
842 | self.ControllerLayout.addWidget(self.PreviewListView) |
843 | @@ -236,7 +238,7 @@ |
844 | if self.isLive: |
845 | no = frame[1] |
846 | LiveFrame = self.serviceitem.frames[no][u'image'] |
847 | - self.mainDisplay.frameView(LiveFrame) |
848 | + self.parent.mainDisplay.frameView(LiveFrame) |
849 | |
850 | def addServiceItem(self, serviceitem): |
851 | log.debug(u'addServiceItem') |
852 | |
853 | === modified file 'openlp/core/ui/thememanager.py' |
854 | --- openlp/core/ui/thememanager.py 2009-05-22 05:14:55 +0000 |
855 | +++ openlp/core/ui/thememanager.py 2009-06-01 17:50:37 +0000 |
856 | @@ -215,8 +215,8 @@ |
857 | for name in files: |
858 | if name.endswith(u'.png'): |
859 | self.themeData.addRow(os.path.join(self.path, name)) |
860 | - self.EventManager.post_event(Event(EventType.ThemeListChanged)) |
861 | - self.ServiceManager.updateThemeList(self.getThemes()) |
862 | + self.parent.EventManager.post_event(Event(EventType.ThemeListChanged)) |
863 | + self.parent.ServiceManagerContents.updateThemeList(self.getThemes()) |
864 | self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes()) |
865 | |
866 | def getThemes(self): |
867 | @@ -335,7 +335,7 @@ |
868 | outfile = open(theme_file, u'w') |
869 | outfile.write(theme_xml) |
870 | outfile.close() |
871 | - if image_from is not None: |
872 | + if image_from is not None and image_from != image_to: |
873 | shutil.copyfile(image_from, image_to) |
874 | self.generateAndSaveImage(self.path, name, theme_xml) |
875 | self.themeData.clearItems() |
876 | @@ -356,7 +356,7 @@ |
877 | |
878 | def generateImage(self, themedata): |
879 | log.debug(u'generateImage %s ', themedata) |
880 | - frame = self.RenderManager.generate_preview(themedata) |
881 | + frame = self.parent.RenderManager.generate_preview(themedata) |
882 | return frame |
883 | |
884 | def getPreviewImage(self, theme): |
885 | |
886 | === modified file 'openlp/plugins/bibles/forms/bibleimportdialog.py' |
887 | --- openlp/plugins/bibles/forms/bibleimportdialog.py 2009-05-01 22:26:43 +0000 |
888 | +++ openlp/plugins/bibles/forms/bibleimportdialog.py 2009-06-01 17:50:37 +0000 |
889 | @@ -128,6 +128,7 @@ |
890 | self.PasswordLabel.setObjectName("PasswordLabel") |
891 | self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel) |
892 | self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox) |
893 | + self.PasswordEdit.setEchoMode(QtGui.QLineEdit.Password) |
894 | self.PasswordEdit.setObjectName("PasswordEdit") |
895 | self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit) |
896 | self.WebBibleLayout.addWidget(self.ProxyGroupBox) |
897 | |
898 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' |
899 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-05-22 19:36:16 +0000 |
900 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-06-01 17:50:37 +0000 |
901 | @@ -345,21 +345,18 @@ |
902 | def onBibleLiveClick(self): |
903 | service_item = ServiceItem(self.parent) |
904 | service_item.addIcon( ":/media/media_verse.png") |
905 | - service_item.render_manager = self.parent.render_manager |
906 | self.generateSlideData(service_item) |
907 | self.parent.live_controller.addServiceItem(service_item) |
908 | |
909 | def onBibleAddClick(self): |
910 | service_item = ServiceItem(self.parent) |
911 | service_item.addIcon( ":/media/media_verse.png") |
912 | - service_item.render_manager = self.parent.render_manager |
913 | self.generateSlideData(service_item) |
914 | self.parent.service_manager.addServiceItem(service_item) |
915 | |
916 | def onBiblePreviewClick(self): |
917 | service_item = ServiceItem(self.parent) |
918 | service_item.addIcon( ":/media/media_verse.png") |
919 | - service_item.render_manager = self.parent.render_manager |
920 | self.generateSlideData(service_item) |
921 | self.parent.preview_controller.addServiceItem(service_item) |
922 | |
923 | |
924 | === modified file 'openlp/plugins/custom/lib/mediaitem.py' |
925 | --- openlp/plugins/custom/lib/mediaitem.py 2009-05-21 16:07:01 +0000 |
926 | +++ openlp/plugins/custom/lib/mediaitem.py 2009-06-01 17:50:37 +0000 |
927 | @@ -210,7 +210,6 @@ |
928 | log.debug(u'Custom Preview Requested') |
929 | service_item = ServiceItem(self.parent) |
930 | service_item.addIcon( ":/media/media_song.png") |
931 | - service_item.render_manager = self.parent.render_manager |
932 | self.generateSlideData(service_item) |
933 | self.parent.preview_controller.addServiceItem(service_item) |
934 | |
935 | @@ -218,7 +217,6 @@ |
936 | log.debug(u'Custom Live Requested') |
937 | service_item = ServiceItem(self.parent) |
938 | service_item.addIcon( ":/media/media_song.png") |
939 | - service_item.render_manager = self.parent.render_manager |
940 | self.generateSlideData(service_item) |
941 | self.parent.live_controller.addServiceItem(service_item) |
942 | |
943 | @@ -226,7 +224,6 @@ |
944 | log.debug(u'Custom Add Requested') |
945 | service_item = ServiceItem(self.parent) |
946 | service_item.addIcon( ":/media/media_song.png") |
947 | - service_item.render_manager = self.parent.render_manager |
948 | self.generateSlideData(service_item) |
949 | self.parent.service_manager.addServiceItem(service_item) |
950 | |
951 | |
952 | === modified file 'openlp/plugins/images/lib/mediaitem.py' |
953 | --- openlp/plugins/images/lib/mediaitem.py 2009-05-22 18:30:25 +0000 |
954 | +++ openlp/plugins/images/lib/mediaitem.py 2009-06-01 17:50:37 +0000 |
955 | @@ -159,7 +159,6 @@ |
956 | log.debug(u'Image Preview Requested') |
957 | service_item = ServiceItem(self.parent) |
958 | service_item.addIcon( ":/media/media_image.png") |
959 | - service_item.render_manager = self.parent.render_manager |
960 | self.generateSlideData(service_item) |
961 | self.parent.preview_controller.addServiceItem(service_item) |
962 | |
963 | @@ -167,7 +166,6 @@ |
964 | log.debug(u'Image Live Requested') |
965 | service_item = ServiceItem(self.parent) |
966 | service_item.addIcon( ":/media/media_image.png") |
967 | - service_item.render_manager = self.parent.render_manager |
968 | self.generateSlideData(service_item) |
969 | self.parent.live_controller.addServiceItem(service_item) |
970 | |
971 | @@ -175,6 +173,5 @@ |
972 | log.debug(u'Image Add Requested') |
973 | service_item = ServiceItem(self.parent) |
974 | service_item.addIcon( ":/media/media_image.png") |
975 | - service_item.render_manager = self.parent.render_manager |
976 | self.generateSlideData(service_item) |
977 | self.parent.service_manager.addServiceItem(service_item) |
978 | |
979 | === added file 'openlp/plugins/presentations/lib/presentationtab.py' |
980 | --- openlp/plugins/presentations/lib/presentationtab.py 1970-01-01 00:00:00 +0000 |
981 | +++ openlp/plugins/presentations/lib/presentationtab.py 2009-06-01 18:37:06 +0000 |
982 | @@ -0,0 +1,135 @@ |
983 | +# -*- coding: utf-8 -*- |
984 | +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 |
985 | +""" |
986 | +OpenLP - Open Source Lyrics Projection |
987 | +Copyright (c) 2008 Raoul Snyman |
988 | +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, |
989 | + |
990 | +This program is free software; you can redistribute it and/or modify it under |
991 | +the terms of the GNU General Public License as published by the Free Software |
992 | +Foundation; version 2 of the License. |
993 | + |
994 | +This program is distributed in the hope that it will be useful, but WITHOUT ANY |
995 | +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A |
996 | +PARTICULAR PURPOSE. See the GNU General Public License for more details. |
997 | + |
998 | +You should have received a copy of the GNU General Public License along with |
999 | +this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
1000 | +Place, Suite 330, Boston, MA 02111-1307 USA |
1001 | +""" |
1002 | + |
1003 | +from PyQt4 import Qt, QtCore, QtGui |
1004 | + |
1005 | +from openlp.core.lib import SettingsTab, translate |
1006 | + |
1007 | +class PresentationTab(SettingsTab): |
1008 | + """ |
1009 | + BiblesTab is the Bibles settings tab in the settings dialog. |
1010 | + """ |
1011 | + def __init__(self): |
1012 | + SettingsTab.__init__(self, u'Presentation') |
1013 | + |
1014 | + def setupUi(self): |
1015 | + self.setObjectName(u'BiblesTab') |
1016 | + self.BibleLayout = QtGui.QHBoxLayout(self) |
1017 | + self.BibleLayout.setSpacing(8) |
1018 | + self.BibleLayout.setMargin(8) |
1019 | + self.BibleLayout.setObjectName(u'BibleLayout') |
1020 | + self.BibleLeftWidget = QtGui.QWidget(self) |
1021 | + self.BibleLeftWidget.setObjectName(u'BibleLeftWidget') |
1022 | + self.BibleLeftLayout = QtGui.QVBoxLayout(self.BibleLeftWidget) |
1023 | + self.BibleLeftLayout.setObjectName(u'BibleLeftLayout') |
1024 | + self.BibleLeftLayout.setSpacing(8) |
1025 | + self.BibleLeftLayout.setMargin(0) |
1026 | + |
1027 | + self.VerseDisplayGroupBox = QtGui.QGroupBox(self) |
1028 | + self.VerseDisplayGroupBox.setObjectName(u'VerseDisplayGroupBox') |
1029 | + self.VerseDisplayLayout = QtGui.QGridLayout(self.VerseDisplayGroupBox) |
1030 | + self.VerseDisplayLayout.setMargin(8) |
1031 | + self.VerseDisplayLayout.setObjectName(u'VerseDisplayLayout') |
1032 | + self.VerseTypeWidget = QtGui.QWidget(self.VerseDisplayGroupBox) |
1033 | + self.VerseTypeWidget.setObjectName(u'VerseTypeWidget') |
1034 | + self.VerseTypeLayout = QtGui.QHBoxLayout(self.VerseTypeWidget) |
1035 | + self.VerseTypeLayout.setSpacing(8) |
1036 | + self.VerseTypeLayout.setMargin(0) |
1037 | + self.VerseTypeLayout.setObjectName(u'VerseTypeLayout') |
1038 | + |
1039 | + self.PowerpointCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) |
1040 | + self.PowerpointCheckBox.setObjectName("PowerpointCheckBox") |
1041 | + self.VerseDisplayLayout.addWidget(self.PowerpointCheckBox, 0, 0, 1, 1) |
1042 | + |
1043 | + self.PowerpointPath = QtGui.QLineEdit(self.VerseDisplayGroupBox) |
1044 | + self.PowerpointPath.setObjectName("PowerpointPath") |
1045 | + self.VerseDisplayLayout.addWidget(self.PowerpointPath, 1, 0, 1, 1) |
1046 | + |
1047 | + self.ImpressCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) |
1048 | + self.ImpressCheckBox.setObjectName("ImpressCheckBox") |
1049 | + self.VerseDisplayLayout.addWidget(self.ImpressCheckBox, 2, 0, 1, 1) |
1050 | + |
1051 | + self.ImpressPath = QtGui.QLineEdit(self.VerseDisplayGroupBox) |
1052 | + self.ImpressPath.setObjectName("ImpressPath") |
1053 | + self.VerseDisplayLayout.addWidget(self.ImpressPath, 3, 0, 1, 1) |
1054 | + |
1055 | + self.BibleThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox) |
1056 | + self.BibleThemeWidget.setObjectName(u'BibleThemeWidget') |
1057 | + self.BibleThemeLayout = QtGui.QHBoxLayout(self.BibleThemeWidget) |
1058 | + self.BibleThemeLayout.setSpacing(8) |
1059 | + self.BibleThemeLayout.setMargin(0) |
1060 | + self.BibleThemeLayout.setObjectName(u'BibleThemeLayout') |
1061 | + |
1062 | + self.BibleLeftLayout.addWidget(self.VerseDisplayGroupBox) |
1063 | + self.BibleLeftSpacer = QtGui.QSpacerItem(40, 20, |
1064 | + QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) |
1065 | + self.BibleLeftLayout.addItem(self.BibleLeftSpacer) |
1066 | + self.BibleLayout.addWidget(self.BibleLeftWidget) |
1067 | + |
1068 | + self.BibleRightWidget = QtGui.QWidget(self) |
1069 | + self.BibleRightWidget.setObjectName(u'BibleRightWidget') |
1070 | + self.BibleRightLayout = QtGui.QVBoxLayout(self.BibleRightWidget) |
1071 | + self.BibleRightLayout.setObjectName(u'BibleRightLayout') |
1072 | + self.BibleRightLayout.setSpacing(8) |
1073 | + self.BibleRightLayout.setMargin(0) |
1074 | + self.BibleRightSpacer = QtGui.QSpacerItem(50, 20, |
1075 | + QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) |
1076 | + self.BibleRightLayout.addItem(self.BibleRightSpacer) |
1077 | + self.BibleLayout.addWidget(self.BibleRightWidget) |
1078 | + |
1079 | + # Signals and slots |
1080 | + #QtCore.QObject.connect(self.NewChaptersCheckBox, |
1081 | + # QtCore.SIGNAL("stateChanged(int)"), self.onNewChaptersCheckBoxChanged) |
1082 | + |
1083 | + def retranslateUi(self): |
1084 | + self.PowerpointCheckBox.setText(translate('PresentationTab', 'Powerpoint available:')) |
1085 | + self.ImpressCheckBox.setText(translate('PresentationTab', 'Impress available:')) |
1086 | + self.PowerpointPath.setText(u'powerpoint.exe ') |
1087 | + self.ImpressPath.setText(u'openoffice.org -nologo -show ') |
1088 | + |
1089 | + def onNewChaptersCheckBoxChanged(self): |
1090 | + check_state = self.NewChaptersCheckBox.checkState() |
1091 | + self.show_new_chapters = False |
1092 | + if check_state == 2: # we have a set value convert to True/False |
1093 | + self.show_new_chapters = True |
1094 | + |
1095 | + |
1096 | + def load(self): |
1097 | + pass |
1098 | +# self.paragraph_style = (self.config.get_config(u'paragraph style', u'True')) |
1099 | +# self.show_new_chapters = (self.config.get_config(u'display new chapter', u"False")) |
1100 | +# self.display_style = int(self.config.get_config(u'display brackets', u'0')) |
1101 | +# self.bible_theme = int(self.config.get_config(u'bible theme', u'0')) |
1102 | +# self.bible_search = (self.config.get_config(u'search as type', u'True')) |
1103 | +# if self.paragraph_style: |
1104 | +# self.ParagraphRadioButton.setChecked(True) |
1105 | +# else: |
1106 | +# self.VerseRadioButton.setChecked(True) |
1107 | +# self.NewChaptersCheckBox.setChecked(self.show_new_chapters) |
1108 | +# self.DisplayStyleComboBox.setCurrentIndex(self.display_style) |
1109 | +# self.BibleSearchCheckBox.setChecked(self.bible_search) |
1110 | + |
1111 | + def save(self): |
1112 | + pass |
1113 | +# self.config.set_config(u'paragraph style', str(self.paragraph_style)) |
1114 | +# self.config.set_config(u'display new chapter', str(self.show_new_chapters)) |
1115 | +# self.config.set_config(u'display brackets', str(self.display_style)) |
1116 | +# self.config.set_config(u'search as type', str(self.bible_search)) |
1117 | +# self.config.set_config(u'bible theme', str(self.bible_theme)) |
Fixes and New features
Renderer Page splits and ServiceItem is happy with that
fix PresentationTab (missing)
Add Alerts
Add GeneralTab saving of settings.
Add GeneralTab to Screen Selection code.