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

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

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.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Looks good.

review: Approve
Revision history for this message
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))