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
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-05-30 18:44:16 +0000
+++ openlp/core/lib/renderer.py 2009-06-02 16:25:36 +0000
@@ -29,7 +29,7 @@
29class Renderer:29class Renderer:
3030
31 global log31 global log
32 log=logging.getLogger(u'Renderer')32 log = logging.getLogger(u'Renderer')
33 log.info(u'Renderer Loaded')33 log.info(u'Renderer Loaded')
34 """All the functions for rendering a set of words onto a Device Context34 """All the functions for rendering a set of words onto a Device Context
3535
@@ -44,7 +44,7 @@
44 def __init__(self):44 def __init__(self):
45 self._rect = None45 self._rect = None
46 self._debug = 046 self._debug = 0
47 self.words = None47 #self.words = None
48 self._right_margin = 64 # the amount of right indent48 self._right_margin = 64 # the amount of right indent
49 self._shadow_offset = 549 self._shadow_offset = 5
50 self._outline_offset = 250 self._outline_offset = 2
@@ -103,38 +103,68 @@
103 if self._bg_image_filename is not None:103 if self._bg_image_filename is not None:
104 self.scale_bg_image()104 self.scale_bg_image()
105 if self._bg_frame is None:105 if self._bg_frame is None:
106 self._render_background()106 self._generate_background_frame()
107107
108 def format_slide(self, words, footer):108 def format_slide(self, words, footer):
109 """109 """
110 External API to sort out the text to pe placed on the frame110 External API to sort out the text to pe placed on the frame
111 """111 """
112 #print "########## Format Slide ##################"
112 log.debug(u'format_slide %s', words)113 log.debug(u'format_slide %s', words)
113 verses = []114 verses = []
114 words=words.replace("\r\n", "\n")115 words = words.replace("\r\n", "\n")
115 verses_text = words.split(u'\n\n')116 verses_text = words.split(u'\n\n')
117 text = []
116 for verse in verses_text:118 for verse in verses_text:
117 lines = verse.split(u'\n')119 lines = verse.split(u'\n')
118 verses.append(self.split_set_of_lines(lines, footer)[0])120 for line in lines:
119 self.words = verses121 text.append(line)
120 verses_text = []122
121 for v in verses:123 split_text = self._split_set_of_lines(text, False)
122 verses_text.append(u'\n'.join(v).lstrip()) # remove first \n124 #print "split text ", split_text
123 return verses_text125 #print "text ", text
124126 return split_text
125 def render_screen(self, screennum):127
126 log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])128# def render_screen(self, screennum):
127 t = 0.0129# log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
128 words = self.words[screennum]130# t = 0.0
129 retval = self._render_lines(words)131# words = self.words[screennum]
130 return retval132# retval = self._render_lines(words)
133# return retval
131134
132 def set_text_rectangle(self, rect_main, rect_footer):135 def set_text_rectangle(self, rect_main, rect_footer):
133 """ Sets the rectangle within which text should be rendered"""136 """
137 Sets the rectangle within which text should be rendered
138 """
134 self._rect = rect_main139 self._rect = rect_main
135 self._rect_footer = rect_footer140 self._rect_footer = rect_footer
136141
137 def _render_background(self):142 def generate_frame_from_lines(self, lines, footer_lines=None):
143 """
144 Render a set of lines according to the theme, return bounding box
145 """
146 #print "########## Generate frame from lines ##################"
147 log.debug(u'generate_frame_from_lines - Start')
148
149 #print "Render Lines ", lines
150
151 bbox = self._render_lines_unaligned(lines, False)
152 if footer_lines is not None:
153 bbox1 = self._render_lines_unaligned(footer_lines, True)
154
155 # reset the frame. first time do not worrk about what you paint on.
156 self._frame = QtGui.QPixmap(self._bg_frame)
157
158 x, y = self._correctAlignment(self._rect, bbox)
159 bbox = self._render_lines_unaligned(lines, False, (x, y))
160
161 if footer_lines is not None:
162 bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
163 log.debug(u'generate_frame_from_lines - Finish')
164
165 return self._frame
166
167 def _generate_background_frame(self):
138 """168 """
139 Generate a background frame to the same size as the frame to be used169 Generate a background frame to the same size as the frame to be used
140 Results cached for performance reasons.170 Results cached for performance reasons.
@@ -150,14 +180,14 @@
150 elif self._theme.background_type == u'gradient' : # gradient180 elif self._theme.background_type == u'gradient' : # gradient
151 gradient = None181 gradient = None
152 if self._theme.background_direction == u'horizontal':182 if self._theme.background_direction == u'horizontal':
153 w = int(self._frame.width())/2183 w = int(self._frame.width()) / 2
154 gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height()) # vertical184 gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height()) # vertical
155 elif self._theme.background_direction == u'vertical':185 elif self._theme.background_direction == u'vertical':
156 h = int(self._frame.height())/2186 h = int(self._frame.height()) / 2
157 gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h) # Horizontal187 gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h) # Horizontal
158 else:188 else:
159 w = int(self._frame.width())/2189 w = int(self._frame.width()) / 2
160 h = int(self._frame.height())/2190 h = int(self._frame.height()) / 2
161 gradient = QtGui.QRadialGradient(w, h, w) # Circular191 gradient = QtGui.QRadialGradient(w, h, w) # Circular
162192
163 gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))193 gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
@@ -177,10 +207,7 @@
177 painter.drawPath(rectPath)207 painter.drawPath(rectPath)
178208
179 elif self._theme.background_type== u'image': # image209 elif self._theme.background_type== u'image': # image
180 #r = self._frame.rect()
181 #log.debug(u'Image size details %d %d %d %d ', r.x(), r.y(), r.width(),r.height())
182 if self.bg_image is not None:210 if self.bg_image is not None:
183 #painter.drawPixmap(self.background_offsetx,self.background_offsety, self.bg_image)
184 painter.drawPixmap(0 ,0 , self.bg_image)211 painter.drawPixmap(0 ,0 , self.bg_image)
185 else:212 else:
186 painter.fillRect(self._frame.rect(), QtGui.QColor(u'#000000'))213 painter.fillRect(self._frame.rect(), QtGui.QColor(u'#000000'))
@@ -189,69 +216,82 @@
189 print "background time", bef, aft, aft-bef216 print "background time", bef, aft, aft-bef
190 log.debug(u'render background finish')217 log.debug(u'render background finish')
191218
192 def split_set_of_lines(self, lines, footer):219 def _split_set_of_lines(self, lines, footer):
193220 """
194 """Given a list of lines, decide how to split them best if they don't all fit on the screen221 Given a list of lines, decide how to split them best if they don't all fit on the screen
195 - this is done by splitting at 1/2, 1/3 or 1/4 of the set222 - this is done by splitting at 1/2, 1/3 or 1/4 of the set
196 If it doesn't fit, even at this size, just split at each opportunity223 If it doesn't fit, even at this size, just split at each opportunity
197224
198 We'll do this by getting the bounding box of each line, and then summing them appropriately225 We'll do this by getting the bounding box of each line, and then summing them appropriately
199 Returns a list of [lists of lines], one set for each screenful226 Returns a list of [lists of lines], one set for each screenful
200 """227 """
201 log.debug(u'Split set of lines')
202 bboxes = []228 bboxes = []
229 #print "lines ", lines
230
203 for line in lines:231 for line in lines:
204 bboxes.append(self._render_single_line(line, footer))232 bboxes.append(self._render_and_wrap_single_line(line, footer))
205 #print line, bboxes233 #print "bboxes ", bboxes
206234
207 numlines = len(lines)235 numlines = len(lines)
208 bottom = self._rect.bottom()236 bottom = self._rect.bottom()
209 #for ratio in (numlines): #, numlines/2, numlines/3, numlines/4):237
210 ratio = numlines238 count = 0
211 good = 1239
212 startline = 0240 for ratio in (numlines, numlines/2, numlines/3, numlines/4):
213 endline = startline + ratio241 good = 1
214 while (endline <= numlines):242 startline = 0
215 by = 0243 endline = startline + ratio
216 for (x, y) in bboxes[startline:endline]:244 while (endline <= numlines and endline != 0):
217 by += y245 count += 1
218 #print by246 if count > 100:
219 #print by , bottom247 #print "busted"
220 if by > bottom:248 break
221 good=0249 by = 0
250 for (x,y) in bboxes[startline:endline]:
251 #print by, startline, endline, x, y, bottom
252 by += y
253 #print "by ", by , bottom, startline, endline, numlines, ratio
254 if by > bottom:
255 good = 0
256 break
257 startline += ratio
258 endline = startline + ratio
259 if good == 1:
222 break260 break
223 startline += ratio
224 endline = startline+ratio
225# if good == 1:
226# break
227 #print "---------"
228261
229 retval = []262 retval = []
230 numlines_per_page = ratio263 numlines_per_page = ratio
264 #print "good ", good, ratio
231 if good:265 if good:
232 c = 0266 c = 0
233 thislines = []267 thislines = []
234 while c < numlines:268 while c < numlines:
235 thislines.append(lines[c])269 thislines.append(lines[c])
236 c += 1270 c += 1
271 #print "c ", c, len(thislines), numlines_per_page, thislines
237 if len(thislines) == numlines_per_page:272 if len(thislines) == numlines_per_page:
238 retval.append(thislines)273 retval.append(thislines)
239 thislines = []274 thislines = []
275 if len(thislines) > 0:
276 retval.append(thislines)
277 #print "extra ", thislines
240 else:278 else:
241# log.debug(u" "Just split where you can"279# print "Just split where you can"
242 retval = []280 retval = []
243 startline = 0281 startline = 0
244 endline = startline+1282 endline = startline + 1
245 while (endline <= numlines):283 while (endline <= numlines):
246 by = 0284 by = 0
247 for (x, y) in bboxes[startline:endline]:285 for (x,y) in bboxes[startline:endline]:
248 by += y286 by += y
249 if by > bottom:287 if by > bottom:
250 retval.append(lines[startline:endline-1])288 retval.append(lines[startline:endline-1])
251 startline = endline-1289 startline = endline-1
252 endline = startline # gets incremented below290 # gets incremented below
291 endline = startline
253 by = 0292 by = 0
254 endline += 1293 endline += 1
294 #print "retval ", retval
255 return retval295 return retval
256296
257 def _correctAlignment(self, rect, bbox):297 def _correctAlignment(self, rect, bbox):
@@ -259,32 +299,13 @@
259 if int(self._theme.display_verticalAlign) == 0: # top align299 if int(self._theme.display_verticalAlign) == 0: # top align
260 y = rect.top()300 y = rect.top()
261 elif int(self._theme.display_verticalAlign) == 2: # bottom align301 elif int(self._theme.display_verticalAlign) == 2: # bottom align
262 y = rect.bottom()-bbox.height()302 y = rect.bottom() - bbox.height()
263 elif int(self._theme.display_verticalAlign) == 1: # centre align303 elif int(self._theme.display_verticalAlign) == 1: # centre align
264 y = rect.top()+(rect.height()-bbox.height())/2304 y = rect.top() + (rect.height() - bbox.height()) / 2
265 else:305 else:
266 assert(0, u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)306 assert(0 , u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)
267 return x, y307 return x, y
268308
269 def render_lines(self, lines, footer_lines=None):
270 """render a set of lines according to the theme, return bounding box"""
271 log.debug(u'render_lines - Start')
272
273 bbox = self._render_lines_unaligned(lines, False) # Main font
274 if footer_lines is not None:
275 bbox1 = self._render_lines_unaligned(footer_lines, True) # Footer Font
276
277 self._frame = QtGui.QPixmap(self._bg_frame)
278
279 x, y = self._correctAlignment(self._rect, bbox)
280 bbox = self._render_lines_unaligned(lines, False, (x, y))
281
282 if footer_lines is not None:
283 bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
284 log.debug(u'render_lines- Finish')
285
286 return self._frame
287
288 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):309 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
289 """310 """
290 Given a list of lines to render, render each one in turn311 Given a list of lines to render, render each one in turn
@@ -301,7 +322,7 @@
301 for line in lines:322 for line in lines:
302 # render after current bottom, but at original left edge323 # render after current bottom, but at original left edge
303 # keep track of right edge to see which is biggest324 # keep track of right edge to see which is biggest
304 (thisx, bry) = self._render_single_line(line, footer, (x , bry))325 (thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry))
305 if (thisx > brx):326 if (thisx > brx):
306 brx = thisx327 brx = thisx
307 retval = QtCore.QRect(x, y,brx-x, bry-y)328 retval = QtCore.QRect(x, y,brx-x, bry-y)
@@ -314,7 +335,7 @@
314 log.debug(u'render lines unaligned Finish')335 log.debug(u'render lines unaligned Finish')
315 return retval336 return retval
316337
317 def _render_single_line(self, line, footer, tlcorner=(0,0)):338 def _render_and_wrap_single_line(self, line, footer, tlcorner=(0,0)):
318 """339 """
319 Render a single line of words onto the DC, top left corner340 Render a single line of words onto the DC, top left corner
320 specified.341 specified.
@@ -335,10 +356,10 @@
335 lines = []356 lines = []
336 maxx = self._rect.width();357 maxx = self._rect.width();
337 maxy = self._rect.height();358 maxy = self._rect.height();
338 while (len(words)>0):359 while (len(words) > 0):
339 w , h = self._get_extent_and_render(thisline, footer)360 w , h = self._get_extent_and_render(thisline, footer)
340 rhs = w + x361 rhs = w + x
341 if rhs < maxx-self._right_margin:362 if rhs < maxx - self._right_margin:
342 lines.append(thisline)363 lines.append(thisline)
343 words = words[lastword:]364 words = words[lastword:]
344 thisline = ' '.join(words)365 thisline = ' '.join(words)
@@ -373,10 +394,10 @@
373 x = rightextent - w394 x = rightextent - w
374 elif align == 1: # right align395 elif align == 1: # right align
375 rightextent = maxx396 rightextent = maxx
376 x = maxx-w397 x = maxx - w
377 elif align == 2: # centre398 elif align == 2: # centre
378 x = (maxx-w) / 2;399 x = (maxx - w) / 2;
379 rightextent = x+w400 rightextent = x + w
380 # now draw the text, and any outlines/shadows401 # now draw the text, and any outlines/shadows
381 if self._theme.display_shadow:402 if self._theme.display_shadow:
382 self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset),403 self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset),
@@ -441,7 +462,6 @@
441 QtGui.QFont.Normal, # weight462 QtGui.QFont.Normal, # weight
442 0)# italic463 0)# italic
443 font.setPixelSize(int(self._theme.font_main_proportion))464 font.setPixelSize(int(self._theme.font_main_proportion))
444 #log.debug(u'Font details %s %s %s %d', self._theme.font_main_name, self._theme.font_main_proportion, font.family(), font.pointSize())
445 painter.setFont(font)465 painter.setFont(font)
446 if color == None:466 if color == None:
447 if footer:467 if footer:
@@ -454,9 +474,9 @@
454 metrics=QtGui.QFontMetrics(font)474 metrics=QtGui.QFontMetrics(font)
455 # xxx some fudges to make it exactly like wx! Take 'em out later475 # xxx some fudges to make it exactly like wx! Take 'em out later
456 w = metrics.width(line)476 w = metrics.width(line)
457 h = metrics.height()-2477 h = metrics.height() - 2
458 if draw:478 if draw:
459 painter.drawText(x, y+metrics.height()-metrics.descent()-1, line)479 painter.drawText(x, y + metrics.ascent() , line)
460 painter.end()480 painter.end()
461 return (w, h)481 return (w, h)
462482
463483
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-05-22 18:30:25 +0000
+++ openlp/core/lib/rendermanager.py 2009-06-01 17:50:37 +0000
@@ -136,10 +136,9 @@
136 lines1.append(u'Amazing Grace (John Newton)' )136 lines1.append(u'Amazing Grace (John Newton)' )
137 lines1.append(u'Public Domain')137 lines1.append(u'Public Domain')
138 lines1.append(u'CCLI xxx')138 lines1.append(u'CCLI xxx')
139 return self.renderer.render_lines(lines, lines1)139 return self.renderer.generate_frame_from_lines(lines, lines1)
140140
141141 def format_slide(self, words):
142 def format_slide(self, words, footer):
143 log.debug(u'format slide')142 log.debug(u'format slide')
144 self.calculate_default(self.screen_list[self.current_display]['size'])143 self.calculate_default(self.screen_list[self.current_display]['size'])
145 self.build_text_rectangle(self.themedata)144 self.build_text_rectangle(self.themedata)
@@ -151,7 +150,7 @@
151 self.calculate_default(self.screen_list[self.current_display]['size'])150 self.calculate_default(self.screen_list[self.current_display]['size'])
152 self.build_text_rectangle(self.themedata)151 self.build_text_rectangle(self.themedata)
153 self.renderer.set_frame_dest(self.width, self.height)152 self.renderer.set_frame_dest(self.width, self.height)
154 return self.renderer.render_lines(main_text, footer_text)153 return self.renderer.generate_frame_from_lines(main_text, footer_text)
155154
156 def calculate_default(self, screen):155 def calculate_default(self, screen):
157 log.debug(u'calculate default %s' , screen)156 log.debug(u'calculate default %s' , screen)
158157
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-05-22 18:30:25 +0000
+++ openlp/core/lib/serviceitem.py 2009-06-02 16:25:36 +0000
@@ -58,15 +58,17 @@
58 """58 """
59 log.debug(u'Render called')59 log.debug(u'Render called')
60 if self.theme == None:60 if self.theme == None:
61 self.render_manager.set_override_theme(None)61 self.plugin.render_manager.set_override_theme(None)
62 else:62 else:
63 self.render_manager.set_override_theme(self.theme)63 self.plugin.render_manager.set_override_theme(self.theme)
64 log.debug(u'Formatting slides')64 log.debug(u'Formatting slides')
65 if len(self.frames) == 0 and len(self.raw_slides) > 0 :65 if len(self.frames) == 0 and len(self.raw_slides) > 0 :
66 for slide in self.raw_slides:66 for slide in self.raw_slides:
67 formated = self.render_manager.format_slide(slide, False)67 formated = self.plugin.render_manager.format_slide(slide)
68 frame = self.render_manager.generate_slide(formated, self.raw_footer)68 #print formated
69 self.frames.append({u'title': formated, u'image': frame})69 for format in formated:
70 frame = self.plugin.render_manager.generate_slide(format, self.raw_footer)
71 self.frames.append({u'title': format, u'image': frame})
70 else:72 else:
71 if len(self.command_files) > 0:73 if len(self.command_files) > 0:
72 pass74 pass
7375
=== modified file 'openlp/core/ui/alertform.py'
--- openlp/core/ui/alertform.py 2009-05-20 20:17:20 +0000
+++ openlp/core/ui/alertform.py 2009-06-01 17:50:37 +0000
@@ -18,17 +18,19 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging20import logging
21
21from PyQt4 import QtCore, QtGui22from PyQt4 import QtCore, QtGui
22from openlp.core.lib import translate23from openlp.core.lib import translate
2324
24class AlertForm(QtGui.QDialog):25class AlertForm(QtGui.QDialog):
25 global log26 global log
26 log=logging.getLogger(u'AlertForm')27 log = logging.getLogger(u'AlertForm')
2728
28 def __init__(self, parent=None):29 def __init__(self, parent=None):
29 QtGui.QDialog.__init__(self, parent)30 QtGui.QDialog.__init__(self, None)
31 self.parent = parent
30 self.setupUi(self)32 self.setupUi(self)
31 log.info(u'Defined')33 log.debug(u'Defined')
3234
33 def setupUi(self, AlertForm):35 def setupUi(self, AlertForm):
34 AlertForm.setObjectName("AlertForm")36 AlertForm.setObjectName("AlertForm")
@@ -92,7 +94,6 @@
92 self.DisplayButton.setText(translate("AlertForm", u'Display'))94 self.DisplayButton.setText(translate("AlertForm", u'Display'))
93 self.CancelButton.setText(translate("AlertForm", u'Cancel'))95 self.CancelButton.setText(translate("AlertForm", u'Cancel'))
9496
95
96 def load_settings(self):97 def load_settings(self):
97 pass98 pass
9899
@@ -100,4 +101,4 @@
100 pass101 pass
101102
102 def onDisplayClicked(self):103 def onDisplayClicked(self):
103 pass104 self.parent.mainDisplay.alert(self.parent.settingsForm.AlertsTab, self.AlertEntryEditItem.text())
104105
=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py 2009-05-20 20:17:20 +0000
+++ openlp/core/ui/generaltab.py 2009-06-01 17:50:37 +0000
@@ -20,7 +20,7 @@
2020
21from PyQt4 import QtCore, QtGui21from PyQt4 import QtCore, QtGui
2222
23from openlp.core.lib import SettingsTab, translate23from openlp.core.lib import SettingsTab, translate, str_to_bool
2424
25class GeneralTab(SettingsTab):25class GeneralTab(SettingsTab):
26 """26 """
@@ -113,6 +113,19 @@
113 QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)113 QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
114 self.GeneralRightLayout.addItem(self.GeneralRightSpacer)114 self.GeneralRightLayout.addItem(self.GeneralRightSpacer)
115 self.GeneralLayout.addWidget(self.GeneralRightWidget)115 self.GeneralLayout.addWidget(self.GeneralRightWidget)
116 QtCore.QObject.connect(self.MonitorComboBox,
117 QtCore.SIGNAL("activated(int)"), self.onMonitorComboBoxChanged)
118 QtCore.QObject.connect(self.WarningCheckBox,
119 QtCore.SIGNAL("stateChanged(int)"), self.onWarningCheckBoxChanged)
120 QtCore.QObject.connect(self.AutoOpenCheckBox,
121 QtCore.SIGNAL("stateChanged(int)"), self.onAutoOpenCheckBoxChanged)
122 QtCore.QObject.connect(self.NumberEdit,
123 QtCore.SIGNAL("lostFocus()"), self.onNumberEditLostFocus)
124 QtCore.QObject.connect(self.UsernameEdit,
125 QtCore.SIGNAL("lostFocus()"), self.onUsernameEditLostFocus)
126 QtCore.QObject.connect(self.PasswordEdit,
127 QtCore.SIGNAL("lostFocus()"), self.onPasswordEditLostFocus)
128
116129
117 def retranslateUi(self):130 def retranslateUi(self):
118 self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))131 self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))
@@ -126,7 +139,29 @@
126 self.UsernameLabel.setText(translate(u'GeneralTab', u'SongSelect Username:'))139 self.UsernameLabel.setText(translate(u'GeneralTab', u'SongSelect Username:'))
127 self.PasswordLabel.setText(translate(u'GeneralTab', u'SongSelect Password:'))140 self.PasswordLabel.setText(translate(u'GeneralTab', u'SongSelect Password:'))
128141
129 def initialise(self):142 def onMonitorComboBoxChanged(self):
143 self.MonitorNumber = self.MonitorComboBox.currentIndex()
144
145 def onAutoOpenCheckBoxChanged(self, value):
146 self.AutoOpen = False
147 if value == 2: # we have a set value convert to True/False
148 self.AutoOpen = True
149
150 def onWarningCheckBoxChanged(self, value):
151 self.Warning = False
152 if value == 2: # we have a set value convert to True/False
153 self.Warning = True
154
155 def onNumberEditLostFocus(self):
156 self.CCLNumber = self.NumberEdit.displayText()
157
158 def onUsernameEditLostFocus(self):
159 self.Username = self.UsernameEdit.displayText()
160
161 def onPasswordEditLostFocus(self):
162 self.Password = self.PasswordEdit.displayText()
163
164 def load(self):
130 for screen in self.screen_list:165 for screen in self.screen_list:
131 screen_name = translate(u'GeneralTab', u'Screen') + u' ' + \166 screen_name = translate(u'GeneralTab', u'Screen') + u' ' + \
132 str(screen['number'] + 1)167 str(screen['number'] + 1)
@@ -134,3 +169,25 @@
134 screen_name = screen_name + u' (' + \169 screen_name = screen_name + u' (' + \
135 translate(u'GeneralTab', u'primary') + u')'170 translate(u'GeneralTab', u'primary') + u')'
136 self.MonitorComboBox.addItem(screen_name)171 self.MonitorComboBox.addItem(screen_name)
172
173 self.MonitorNumber = int(self.config.get_config(u'Monitor', u'0'))
174 self.Warning = str_to_bool(self.config.get_config(u'Warning', u"False"))
175 self.AutoOpen = str_to_bool(self.config.get_config(u'Auto Open', u"False"))
176 self.CCLNumber = str(self.config.get_config('CCL Number', u'XXX'))
177 self.Username = str(self.config.get_config('User Name', u''))
178 self.Password = str(self.config.get_config('Password', u''))
179
180 self.MonitorComboBox.setCurrentIndex(self.MonitorNumber)
181 self.WarningCheckBox.setChecked(self.Warning)
182 self.AutoOpenCheckBox.setChecked(self.AutoOpen)
183 self.NumberEdit.setText(self.CCLNumber)
184 self.UsernameEdit.setText(self.Username)
185 self.PasswordEdit.setText(self.Password)
186
187 def save(self):
188 self.config.set_config(u'Monitor',str(self.MonitorNumber))
189 self.config.set_config(u'Warning', str(self.Warning))
190 self.config.set_config(u'Auto Open', str(self.AutoOpen))
191 self.config.set_config('CCL Number', str(self.CCLNumber))
192 self.config.set_config('User Name',str(self.Username))
193 self.config.set_config('Password', str(self.Password ))
137194
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py 2009-05-20 20:17:20 +0000
+++ openlp/core/ui/maindisplay.py 2009-06-01 17:50:37 +0000
@@ -18,8 +18,9 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
2020
21from PyQt4 import QtCore, QtGui21from PyQt4 import QtCore, QtGui, QtTest
2222
23from time import sleep
23from openlp.core.lib import translate24from openlp.core.lib import translate
2425
25class MainDisplay(QtGui.QWidget):26class MainDisplay(QtGui.QWidget):
@@ -32,6 +33,9 @@
32 self.display.setScaledContents(True)33 self.display.setScaledContents(True)
33 self.displayBlank = False34 self.displayBlank = False
34 self.blankFrame= None35 self.blankFrame= None
36 self.alertactive = False
37 self.alerttext = u''
38 self.alertTab = None
3539
36 def setup(self, screenNumber):40 def setup(self, screenNumber):
37 """41 """
@@ -55,19 +59,55 @@
55 self.showMinimized()59 self.showMinimized()
5660
57 painter=QtGui.QPainter()61 painter=QtGui.QPainter()
58 self.blankFrame = QtGui.QPixmap(800, 600)62 self.blankFrame = QtGui.QPixmap(screen['size'].width(), screen['size'].height())
59 painter.begin(self.blankFrame)63 painter.begin(self.blankFrame)
60 painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))64 painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
65 self.frameView(self.blankFrame)
6166
62 def frameView(self, frame):67 def frameView(self, frame):
63 self.frame = frame68 self.frame = frame
64 if self.displayBlank == False:69 if not self.displayBlank:
65 self.display.setPixmap(frame)70 self.display.setPixmap(frame)
71 elif self.alertactive:
72 self.displayAlert()
6673
67 def blankDisplay(self):74 def blankDisplay(self):
68 if self.displayBlank == False:75 if not self.displayBlank:
69 self.displayBlank = True76 self.displayBlank = True
70 self.display.setPixmap(self.blankFrame)77 self.display.setPixmap(self.blankFrame)
71 else:78 else:
72 self.displayBlank = False79 self.displayBlank = False
73 self.frameView(self.frame)80 self.frameView(self.frame)
81
82 def alert(self, alertTab, text):
83 """
84 Called from the Alert Tab
85 alertTab = details from AlertTab
86 text = display text
87 screen = screen number to be displayed on.
88 """
89 self.alerttext = text
90 self.alertTab = alertTab
91 if len(text) > 0:
92 self.alertactive = True
93 self.displayAlert()
94 self.alertactive = False
95
96 def displayAlert(self):
97 alertframe = QtGui.QPixmap(self.frame)
98 painter = QtGui.QPainter(alertframe)
99 top = alertframe.rect().height() * 0.9
100 painter.fillRect(QtCore.QRect(0, top , alertframe.rect().width(), alertframe.rect().height() - top), QtGui.QColor(self.alertTab.bg_color))
101 font = QtGui.QFont()
102 font.setFamily(self.alertTab.font_face)
103 font.setBold(True)
104 font.setPointSize(40)
105 painter.setFont(font)
106 painter.setPen(QtGui.QColor(self.alertTab.font_color))
107 x, y = (0, top)
108 metrics=QtGui.QFontMetrics(font)
109 painter.drawText(x, y+metrics.height()-metrics.descent()-1, self.alerttext)
110 painter.end()
111 self.display.setPixmap(alertframe)
112 QtTest.QTest.qWait(self.alertTab.timeout*1000)
113 self.display.setPixmap(self.frame)
74114
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-06-01 19:47:05 +0000
+++ openlp/core/ui/mainwindow.py 2009-06-02 16:25:36 +0000
@@ -40,7 +40,7 @@
40 self.mainDisplay = MainDisplay(None, screens)40 self.mainDisplay = MainDisplay(None, screens)
41 self.screenList = screens41 self.screenList = screens
42 self.EventManager = EventManager()42 self.EventManager = EventManager()
43 self.alertForm = AlertForm()43 self.alertForm = AlertForm(self)
44 self.aboutForm = AboutForm()44 self.aboutForm = AboutForm()
45 self.settingsForm = SettingsForm(self.screenList, self)45 self.settingsForm = SettingsForm(self.screenList, self)
4646
@@ -88,26 +88,9 @@
88 self.plugin_manager.initialise_plugins()88 self.plugin_manager.initialise_plugins()
8989
90 # Once all components are initialised load the Themes90 # Once all components are initialised load the Themes
91 log.info(u'Load Themes and Managers')91 log.info(u'Load Themes')
92 self.PreviewController.ServiceManager = self.ServiceManagerContents
93 self.LiveController.ServiceManager = self.ServiceManagerContents
94
95 self.ThemeManagerContents.EventManager = self.EventManager
96 self.ThemeManagerContents.RenderManager = self.RenderManager
97 self.ThemeManagerContents.ServiceManager = self.ServiceManagerContents
98 #self.ThemeManagerContents.ThemesTab = self.ServiceManagerContents.ThemesTab
99
100 self.ServiceManagerContents.RenderManager = self.RenderManager
101 self.ServiceManagerContents.EventManager = self.EventManager
102 self.ServiceManagerContents.LiveController = self.LiveController
103 self.ServiceManagerContents.PreviewController = self.PreviewController
104
105 self.ThemeManagerContents.loadThemes()92 self.ThemeManagerContents.loadThemes()
10693
107 # Initialise SlideControllers
108 log.info(u'Set Up SlideControllers')
109 self.LiveController.mainDisplay = self.mainDisplay
110
111 def onCloseEvent(self, event):94 def onCloseEvent(self, event):
112 """95 """
113 Hook to close the main window and display windows on exit96 Hook to close the main window and display windows on exit
@@ -128,6 +111,7 @@
128 main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),111 main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),
129 QtGui.QIcon.Normal, QtGui.QIcon.Off)112 QtGui.QIcon.Normal, QtGui.QIcon.Off)
130 self.mainWindow.setWindowIcon(main_icon)113 self.mainWindow.setWindowIcon(main_icon)
114
131 self.MainContent = QtGui.QWidget(self.mainWindow)115 self.MainContent = QtGui.QWidget(self.mainWindow)
132 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)116 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
133 sizePolicy.setHorizontalStretch(0)117 sizePolicy.setHorizontalStretch(0)
@@ -144,8 +128,10 @@
144 self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)128 self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
145 self.ControlSplitter.setObjectName(u'ControlSplitter')129 self.ControlSplitter.setObjectName(u'ControlSplitter')
146 self.MainContentLayout.addWidget(self.ControlSplitter)130 self.MainContentLayout.addWidget(self.ControlSplitter)
147 self.PreviewController = SlideController(self.mainWindow, self.ControlSplitter, False)131
148 self.LiveController = SlideController(self.mainWindow, self.ControlSplitter, True)132 self.PreviewController = SlideController( self.ControlSplitter, self, False)
133 self.LiveController = SlideController(self.ControlSplitter, self, True)
134
149 self.MenuBar = QtGui.QMenuBar(self.mainWindow)135 self.MenuBar = QtGui.QMenuBar(self.mainWindow)
150 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))136 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
151 self.MenuBar.setObjectName(u'MenuBar')137 self.MenuBar.setObjectName(u'MenuBar')
@@ -172,12 +158,13 @@
172 self.StatusBar = QtGui.QStatusBar(self.mainWindow)158 self.StatusBar = QtGui.QStatusBar(self.mainWindow)
173 self.StatusBar.setObjectName(u'StatusBar')159 self.StatusBar.setObjectName(u'StatusBar')
174 self.mainWindow.setStatusBar(self.StatusBar)160 self.mainWindow.setStatusBar(self.StatusBar)
161
175 self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow)162 self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow)
176 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)163 #MmSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
177 sizePolicy.setHorizontalStretch(0)164 #MmSizePolicy.setHorizontalStretch(0)
178 sizePolicy.setVerticalStretch(0)165 #MmSizePolicy.setVerticalStretch(0)
179 sizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())166 #MmSizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())
180 self.MediaManagerDock.setSizePolicy(sizePolicy)167 #self.MediaManagerDock.setSizePolicy(MmSizePolicy)
181 icon = QtGui.QIcon()168 icon = QtGui.QIcon()
182 icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),169 icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),
183 QtGui.QIcon.Normal, QtGui.QIcon.Off)170 QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -187,11 +174,11 @@
187 self.MediaManagerDock.setObjectName(u'MediaManagerDock')174 self.MediaManagerDock.setObjectName(u'MediaManagerDock')
188 self.MediaManagerDock.setMinimumWidth(250)175 self.MediaManagerDock.setMinimumWidth(250)
189 self.MediaManagerContents = QtGui.QWidget()176 self.MediaManagerContents = QtGui.QWidget()
190 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)177 #sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
191 sizePolicy.setHorizontalStretch(0)178 #sizePolicy.setHorizontalStretch(0)
192 sizePolicy.setVerticalStretch(0)179 #sizePolicy.setVerticalStretch(0)
193 sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())180 #sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())
194 self.MediaManagerContents.setSizePolicy(sizePolicy)181 #self.MediaManagerContents.setSizePolicy(sizePolicy)
195 self.MediaManagerContents.setObjectName(u'MediaManagerContents')182 self.MediaManagerContents.setObjectName(u'MediaManagerContents')
196 self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)183 self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
197 self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0)184 self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0)
@@ -202,6 +189,7 @@
202 self.MediaManagerLayout.addWidget(self.MediaToolBox)189 self.MediaManagerLayout.addWidget(self.MediaToolBox)
203 self.MediaManagerDock.setWidget(self.MediaManagerContents)190 self.MediaManagerDock.setWidget(self.MediaManagerContents)
204 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)191 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
192
205 #Sevice Manager Defined193 #Sevice Manager Defined
206 self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow)194 self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow)
207 ServiceManagerIcon = QtGui.QIcon()195 ServiceManagerIcon = QtGui.QIcon()
@@ -213,6 +201,7 @@
213 self.ServiceManagerContents = ServiceManager(self)201 self.ServiceManagerContents = ServiceManager(self)
214 self.ServiceManagerDock.setWidget(self.ServiceManagerContents)202 self.ServiceManagerDock.setWidget(self.ServiceManagerContents)
215 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)203 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
204
216 #Theme Manager Defined205 #Theme Manager Defined
217 self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow)206 self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow)
218 ThemeManagerIcon = QtGui.QIcon()207 ThemeManagerIcon = QtGui.QIcon()
@@ -227,6 +216,7 @@
227 self.ThemeManagerDock.setWidget(self.ThemeManagerContents)216 self.ThemeManagerDock.setWidget(self.ThemeManagerContents)
228 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)217 self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)
229218
219 #Menu Items define
230 self.FileNewItem = QtGui.QAction(self.mainWindow)220 self.FileNewItem = QtGui.QAction(self.mainWindow)
231 self.FileNewItem.setIcon(221 self.FileNewItem.setIcon(
232 self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service'))222 self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service'))
@@ -397,22 +387,7 @@
397 self.HelpMenu.setTitle(translate(u'mainWindow', u'&Help'))387 self.HelpMenu.setTitle(translate(u'mainWindow', u'&Help'))
398 self.MediaManagerDock.setWindowTitle(translate(u'mainWindow', u'Media Manager'))388 self.MediaManagerDock.setWindowTitle(translate(u'mainWindow', u'Media Manager'))
399 self.ServiceManagerDock.setWindowTitle(translate(u'mainWindow', u'Service Manager'))389 self.ServiceManagerDock.setWindowTitle(translate(u'mainWindow', u'Service Manager'))
400# self.ServiceManagerContents.MoveTopButton.setText(translate(u'mainWindow', u'Move To Top'))
401# self.ServiceManagerContents.MoveUpButton.setText(translate(u'mainWindow', u'Move Up'))
402# self.ServiceManagerContents.MoveDownButton.setText(translate(u'mainWindow', u'Move Down'))
403# self.ServiceManagerContents.MoveBottomButton.setText(translate(u'mainWindow', u'Move To Bottom'))
404# self.ServiceManagerContents.NewItem.setText(translate(u'mainWindow', u'New Service'))
405# self.ServiceManagerContents.OpenItem.setText(translate(u'mainWindow', u'Open Service'))
406# self.ServiceManagerContents.SaveItem.setText(translate(u'mainWindow', u'Save Service'))
407# self.ServiceManagerContents.ThemeComboBox.setItemText(0, translate(u'mainWindow', u'African Sunset'))
408# self.ServiceManagerContents.ThemeComboBox.setItemText(1, translate(u'mainWindow', u'Snowy Mountains'))
409# self.ServiceManagerContents.ThemeComboBox.setItemText(2, translate(u'mainWindow', u'Wilderness'))
410 self.ThemeManagerDock.setWindowTitle(translate(u'mainWindow', u'Theme Manager'))390 self.ThemeManagerDock.setWindowTitle(translate(u'mainWindow', u'Theme Manager'))
411# self.ThemeNewItem.setText(translate(u'mainWindow', u'New Theme'))
412# self.ThemeEditItem.setText(translate(u'mainWindow', u'Edit Theme'))
413# self.ThemeDeleteButton.setText(translate(u'mainWindow', u'Delete Theme'))
414# self.ThemeImportButton.setText(translate(u'mainWindow', u'Import Theme'))
415# self.ThemeExportButton.setText(translate(u'mainWindow', u'Export Theme'))
416 self.FileNewItem.setText(translate(u'mainWindow', u'&New'))391 self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
417 self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))392 self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
418 self.FileNewItem.setStatusTip(translate(u'mainWindow', u'Create a new Service'))393 self.FileNewItem.setStatusTip(translate(u'mainWindow', u'Create a new Service'))
@@ -470,7 +445,7 @@
470445
471 def show(self):446 def show(self):
472 self.mainWindow.showMaximized()447 self.mainWindow.showMaximized()
473 self.mainDisplay.setup(0)448 self.mainDisplay.setup(self.settingsForm.GeneralTab.MonitorNumber)
474 self.mainDisplay.show()449 self.mainDisplay.show()
475450
476 def onHelpAboutItemClicked(self):451 def onHelpAboutItemClicked(self):
477452
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-05-22 18:30:25 +0000
+++ openlp/core/ui/servicemanager.py 2009-06-01 17:50:37 +0000
@@ -126,7 +126,7 @@
126126
127 def onThemeComboBoxSelected(self, currentIndex):127 def onThemeComboBoxSelected(self, currentIndex):
128 self.service_theme = self.ThemeComboBox.currentText()128 self.service_theme = self.ThemeComboBox.currentText()
129 self.RenderManager.set_service_theme(self.service_theme)129 self.parent.RenderManager.set_service_theme(self.service_theme)
130 self.config.set_config(u'theme service theme', self.service_theme)130 self.config.set_config(u'theme service theme', self.service_theme)
131131
132 def addServiceItem(self, item):132 def addServiceItem(self, item):
@@ -147,11 +147,11 @@
147147
148 def makePreview(self):148 def makePreview(self):
149 item, count = self.findServiceItem()149 item, count = self.findServiceItem()
150 self.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)150 self.parent.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
151151
152 def makeLive(self):152 def makeLive(self):
153 item, count = self.findServiceItem()153 item, count = self.findServiceItem()
154 self.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)154 self.parent.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
155155
156 def findServiceItem(self):156 def findServiceItem(self):
157 items = self.ServiceManagerList.selectedItems()157 items = self.ServiceManagerList.selectedItems()
@@ -182,7 +182,7 @@
182 link = event.mimeData()182 link = event.mimeData()
183 if link.hasText():183 if link.hasText():
184 plugin = event.mimeData().text()184 plugin = event.mimeData().text()
185 self.EventManager.post_event(Event(EventType.LoadServiceItem, plugin))185 self.parent.EventManager.post_event(Event(EventType.LoadServiceItem, plugin))
186186
187 def oos_as_text(self):187 def oos_as_text(self):
188 text=[]188 text=[]
@@ -218,4 +218,4 @@
218 id = 0218 id = 0
219 self.service_theme = u''219 self.service_theme = u''
220 self.ThemeComboBox.setCurrentIndex(id)220 self.ThemeComboBox.setCurrentIndex(id)
221 self.RenderManager.set_service_theme(self.service_theme)221 self.parent.RenderManager.set_service_theme(self.service_theme)
222222
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-06-01 19:47:05 +0000
+++ openlp/core/ui/slidecontroller.py 2009-06-02 16:25:36 +0000
@@ -98,11 +98,12 @@
9898
99class SlideController(QtGui.QWidget):99class SlideController(QtGui.QWidget):
100 global log100 global log
101 log=logging.getLogger(u'SlideController')101 log = logging.getLogger(u'SlideController')
102102
103 def __init__(self, parent, control_splitter, isLive):103 def __init__(self, control_splitter, parent, isLive):
104 QtGui.QWidget.__init__(self, parent)104 QtGui.QWidget.__init__(self, parent.mainWindow)
105 self.isLive = isLive105 self.isLive = isLive
106 self.parent = parent
106 self.Panel = QtGui.QWidget(control_splitter)107 self.Panel = QtGui.QWidget(control_splitter)
107 self.Splitter = QtGui.QSplitter(self.Panel)108 self.Splitter = QtGui.QSplitter(self.Panel)
108 self.Splitter.setOrientation(QtCore.Qt.Vertical)109 self.Splitter.setOrientation(QtCore.Qt.Vertical)
@@ -127,6 +128,7 @@
127 self.PreviewListView.setWrapping(False)128 self.PreviewListView.setWrapping(False)
128 self.PreviewListView.setModel(self.PreviewListData)129 self.PreviewListView.setModel(self.PreviewListData)
129 #self.PreviewListView.setSelectionRectVisible(True)130 #self.PreviewListView.setSelectionRectVisible(True)
131
130 self.PreviewListView.setSpacing(0)132 self.PreviewListView.setSpacing(0)
131 self.PreviewListView.setObjectName("PreviewListView")133 self.PreviewListView.setObjectName("PreviewListView")
132 self.ControllerLayout.addWidget(self.PreviewListView)134 self.ControllerLayout.addWidget(self.PreviewListView)
@@ -236,7 +238,7 @@
236 if self.isLive:238 if self.isLive:
237 no = frame[1]239 no = frame[1]
238 LiveFrame = self.serviceitem.frames[no][u'image']240 LiveFrame = self.serviceitem.frames[no][u'image']
239 self.mainDisplay.frameView(LiveFrame)241 self.parent.mainDisplay.frameView(LiveFrame)
240242
241 def addServiceItem(self, serviceitem):243 def addServiceItem(self, serviceitem):
242 log.debug(u'addServiceItem')244 log.debug(u'addServiceItem')
243245
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-05-22 05:14:55 +0000
+++ openlp/core/ui/thememanager.py 2009-06-01 17:50:37 +0000
@@ -215,8 +215,8 @@
215 for name in files:215 for name in files:
216 if name.endswith(u'.png'):216 if name.endswith(u'.png'):
217 self.themeData.addRow(os.path.join(self.path, name))217 self.themeData.addRow(os.path.join(self.path, name))
218 self.EventManager.post_event(Event(EventType.ThemeListChanged))218 self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
219 self.ServiceManager.updateThemeList(self.getThemes())219 self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
220 self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())220 self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
221221
222 def getThemes(self):222 def getThemes(self):
@@ -335,7 +335,7 @@
335 outfile = open(theme_file, u'w')335 outfile = open(theme_file, u'w')
336 outfile.write(theme_xml)336 outfile.write(theme_xml)
337 outfile.close()337 outfile.close()
338 if image_from is not None:338 if image_from is not None and image_from != image_to:
339 shutil.copyfile(image_from, image_to)339 shutil.copyfile(image_from, image_to)
340 self.generateAndSaveImage(self.path, name, theme_xml)340 self.generateAndSaveImage(self.path, name, theme_xml)
341 self.themeData.clearItems()341 self.themeData.clearItems()
@@ -356,7 +356,7 @@
356356
357 def generateImage(self, themedata):357 def generateImage(self, themedata):
358 log.debug(u'generateImage %s ', themedata)358 log.debug(u'generateImage %s ', themedata)
359 frame = self.RenderManager.generate_preview(themedata)359 frame = self.parent.RenderManager.generate_preview(themedata)
360 return frame360 return frame
361361
362 def getPreviewImage(self, theme):362 def getPreviewImage(self, theme):
363363
=== modified file 'openlp/plugins/bibles/forms/bibleimportdialog.py'
--- openlp/plugins/bibles/forms/bibleimportdialog.py 2009-05-01 22:26:43 +0000
+++ openlp/plugins/bibles/forms/bibleimportdialog.py 2009-06-01 17:50:37 +0000
@@ -128,6 +128,7 @@
128 self.PasswordLabel.setObjectName("PasswordLabel")128 self.PasswordLabel.setObjectName("PasswordLabel")
129 self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)129 self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)
130 self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)130 self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)
131 self.PasswordEdit.setEchoMode(QtGui.QLineEdit.Password)
131 self.PasswordEdit.setObjectName("PasswordEdit")132 self.PasswordEdit.setObjectName("PasswordEdit")
132 self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)133 self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)
133 self.WebBibleLayout.addWidget(self.ProxyGroupBox)134 self.WebBibleLayout.addWidget(self.ProxyGroupBox)
134135
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-05-22 19:36:16 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-06-01 17:50:37 +0000
@@ -345,21 +345,18 @@
345 def onBibleLiveClick(self):345 def onBibleLiveClick(self):
346 service_item = ServiceItem(self.parent)346 service_item = ServiceItem(self.parent)
347 service_item.addIcon( ":/media/media_verse.png")347 service_item.addIcon( ":/media/media_verse.png")
348 service_item.render_manager = self.parent.render_manager
349 self.generateSlideData(service_item)348 self.generateSlideData(service_item)
350 self.parent.live_controller.addServiceItem(service_item)349 self.parent.live_controller.addServiceItem(service_item)
351350
352 def onBibleAddClick(self):351 def onBibleAddClick(self):
353 service_item = ServiceItem(self.parent)352 service_item = ServiceItem(self.parent)
354 service_item.addIcon( ":/media/media_verse.png")353 service_item.addIcon( ":/media/media_verse.png")
355 service_item.render_manager = self.parent.render_manager
356 self.generateSlideData(service_item)354 self.generateSlideData(service_item)
357 self.parent.service_manager.addServiceItem(service_item)355 self.parent.service_manager.addServiceItem(service_item)
358356
359 def onBiblePreviewClick(self):357 def onBiblePreviewClick(self):
360 service_item = ServiceItem(self.parent)358 service_item = ServiceItem(self.parent)
361 service_item.addIcon( ":/media/media_verse.png")359 service_item.addIcon( ":/media/media_verse.png")
362 service_item.render_manager = self.parent.render_manager
363 self.generateSlideData(service_item)360 self.generateSlideData(service_item)
364 self.parent.preview_controller.addServiceItem(service_item)361 self.parent.preview_controller.addServiceItem(service_item)
365362
366363
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-05-21 16:07:01 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-06-01 17:50:37 +0000
@@ -210,7 +210,6 @@
210 log.debug(u'Custom Preview Requested')210 log.debug(u'Custom Preview Requested')
211 service_item = ServiceItem(self.parent)211 service_item = ServiceItem(self.parent)
212 service_item.addIcon( ":/media/media_song.png")212 service_item.addIcon( ":/media/media_song.png")
213 service_item.render_manager = self.parent.render_manager
214 self.generateSlideData(service_item)213 self.generateSlideData(service_item)
215 self.parent.preview_controller.addServiceItem(service_item)214 self.parent.preview_controller.addServiceItem(service_item)
216215
@@ -218,7 +217,6 @@
218 log.debug(u'Custom Live Requested')217 log.debug(u'Custom Live Requested')
219 service_item = ServiceItem(self.parent)218 service_item = ServiceItem(self.parent)
220 service_item.addIcon( ":/media/media_song.png")219 service_item.addIcon( ":/media/media_song.png")
221 service_item.render_manager = self.parent.render_manager
222 self.generateSlideData(service_item)220 self.generateSlideData(service_item)
223 self.parent.live_controller.addServiceItem(service_item)221 self.parent.live_controller.addServiceItem(service_item)
224222
@@ -226,7 +224,6 @@
226 log.debug(u'Custom Add Requested')224 log.debug(u'Custom Add Requested')
227 service_item = ServiceItem(self.parent)225 service_item = ServiceItem(self.parent)
228 service_item.addIcon( ":/media/media_song.png")226 service_item.addIcon( ":/media/media_song.png")
229 service_item.render_manager = self.parent.render_manager
230 self.generateSlideData(service_item)227 self.generateSlideData(service_item)
231 self.parent.service_manager.addServiceItem(service_item)228 self.parent.service_manager.addServiceItem(service_item)
232229
233230
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-05-22 18:30:25 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-06-01 17:50:37 +0000
@@ -159,7 +159,6 @@
159 log.debug(u'Image Preview Requested')159 log.debug(u'Image Preview Requested')
160 service_item = ServiceItem(self.parent)160 service_item = ServiceItem(self.parent)
161 service_item.addIcon( ":/media/media_image.png")161 service_item.addIcon( ":/media/media_image.png")
162 service_item.render_manager = self.parent.render_manager
163 self.generateSlideData(service_item)162 self.generateSlideData(service_item)
164 self.parent.preview_controller.addServiceItem(service_item)163 self.parent.preview_controller.addServiceItem(service_item)
165164
@@ -167,7 +166,6 @@
167 log.debug(u'Image Live Requested')166 log.debug(u'Image Live Requested')
168 service_item = ServiceItem(self.parent)167 service_item = ServiceItem(self.parent)
169 service_item.addIcon( ":/media/media_image.png")168 service_item.addIcon( ":/media/media_image.png")
170 service_item.render_manager = self.parent.render_manager
171 self.generateSlideData(service_item)169 self.generateSlideData(service_item)
172 self.parent.live_controller.addServiceItem(service_item)170 self.parent.live_controller.addServiceItem(service_item)
173171
@@ -175,6 +173,5 @@
175 log.debug(u'Image Add Requested')173 log.debug(u'Image Add Requested')
176 service_item = ServiceItem(self.parent)174 service_item = ServiceItem(self.parent)
177 service_item.addIcon( ":/media/media_image.png")175 service_item.addIcon( ":/media/media_image.png")
178 service_item.render_manager = self.parent.render_manager
179 self.generateSlideData(service_item)176 self.generateSlideData(service_item)
180 self.parent.service_manager.addServiceItem(service_item)177 self.parent.service_manager.addServiceItem(service_item)
181178
=== added file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py 1970-01-01 00:00:00 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py 2009-06-01 18:37:06 +0000
@@ -0,0 +1,135 @@
1# -*- coding: utf-8 -*-
2# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
3"""
4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 Raoul Snyman
6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
7
8This program is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free Software
10Foundation; version 2 of the License.
11
12This program is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA
19"""
20
21from PyQt4 import Qt, QtCore, QtGui
22
23from openlp.core.lib import SettingsTab, translate
24
25class PresentationTab(SettingsTab):
26 """
27 BiblesTab is the Bibles settings tab in the settings dialog.
28 """
29 def __init__(self):
30 SettingsTab.__init__(self, u'Presentation')
31
32 def setupUi(self):
33 self.setObjectName(u'BiblesTab')
34 self.BibleLayout = QtGui.QHBoxLayout(self)
35 self.BibleLayout.setSpacing(8)
36 self.BibleLayout.setMargin(8)
37 self.BibleLayout.setObjectName(u'BibleLayout')
38 self.BibleLeftWidget = QtGui.QWidget(self)
39 self.BibleLeftWidget.setObjectName(u'BibleLeftWidget')
40 self.BibleLeftLayout = QtGui.QVBoxLayout(self.BibleLeftWidget)
41 self.BibleLeftLayout.setObjectName(u'BibleLeftLayout')
42 self.BibleLeftLayout.setSpacing(8)
43 self.BibleLeftLayout.setMargin(0)
44
45 self.VerseDisplayGroupBox = QtGui.QGroupBox(self)
46 self.VerseDisplayGroupBox.setObjectName(u'VerseDisplayGroupBox')
47 self.VerseDisplayLayout = QtGui.QGridLayout(self.VerseDisplayGroupBox)
48 self.VerseDisplayLayout.setMargin(8)
49 self.VerseDisplayLayout.setObjectName(u'VerseDisplayLayout')
50 self.VerseTypeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)
51 self.VerseTypeWidget.setObjectName(u'VerseTypeWidget')
52 self.VerseTypeLayout = QtGui.QHBoxLayout(self.VerseTypeWidget)
53 self.VerseTypeLayout.setSpacing(8)
54 self.VerseTypeLayout.setMargin(0)
55 self.VerseTypeLayout.setObjectName(u'VerseTypeLayout')
56
57 self.PowerpointCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
58 self.PowerpointCheckBox.setObjectName("PowerpointCheckBox")
59 self.VerseDisplayLayout.addWidget(self.PowerpointCheckBox, 0, 0, 1, 1)
60
61 self.PowerpointPath = QtGui.QLineEdit(self.VerseDisplayGroupBox)
62 self.PowerpointPath.setObjectName("PowerpointPath")
63 self.VerseDisplayLayout.addWidget(self.PowerpointPath, 1, 0, 1, 1)
64
65 self.ImpressCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
66 self.ImpressCheckBox.setObjectName("ImpressCheckBox")
67 self.VerseDisplayLayout.addWidget(self.ImpressCheckBox, 2, 0, 1, 1)
68
69 self.ImpressPath = QtGui.QLineEdit(self.VerseDisplayGroupBox)
70 self.ImpressPath.setObjectName("ImpressPath")
71 self.VerseDisplayLayout.addWidget(self.ImpressPath, 3, 0, 1, 1)
72
73 self.BibleThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)
74 self.BibleThemeWidget.setObjectName(u'BibleThemeWidget')
75 self.BibleThemeLayout = QtGui.QHBoxLayout(self.BibleThemeWidget)
76 self.BibleThemeLayout.setSpacing(8)
77 self.BibleThemeLayout.setMargin(0)
78 self.BibleThemeLayout.setObjectName(u'BibleThemeLayout')
79
80 self.BibleLeftLayout.addWidget(self.VerseDisplayGroupBox)
81 self.BibleLeftSpacer = QtGui.QSpacerItem(40, 20,
82 QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
83 self.BibleLeftLayout.addItem(self.BibleLeftSpacer)
84 self.BibleLayout.addWidget(self.BibleLeftWidget)
85
86 self.BibleRightWidget = QtGui.QWidget(self)
87 self.BibleRightWidget.setObjectName(u'BibleRightWidget')
88 self.BibleRightLayout = QtGui.QVBoxLayout(self.BibleRightWidget)
89 self.BibleRightLayout.setObjectName(u'BibleRightLayout')
90 self.BibleRightLayout.setSpacing(8)
91 self.BibleRightLayout.setMargin(0)
92 self.BibleRightSpacer = QtGui.QSpacerItem(50, 20,
93 QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
94 self.BibleRightLayout.addItem(self.BibleRightSpacer)
95 self.BibleLayout.addWidget(self.BibleRightWidget)
96
97 # Signals and slots
98 #QtCore.QObject.connect(self.NewChaptersCheckBox,
99 # QtCore.SIGNAL("stateChanged(int)"), self.onNewChaptersCheckBoxChanged)
100
101 def retranslateUi(self):
102 self.PowerpointCheckBox.setText(translate('PresentationTab', 'Powerpoint available:'))
103 self.ImpressCheckBox.setText(translate('PresentationTab', 'Impress available:'))
104 self.PowerpointPath.setText(u'powerpoint.exe ')
105 self.ImpressPath.setText(u'openoffice.org -nologo -show ')
106
107 def onNewChaptersCheckBoxChanged(self):
108 check_state = self.NewChaptersCheckBox.checkState()
109 self.show_new_chapters = False
110 if check_state == 2: # we have a set value convert to True/False
111 self.show_new_chapters = True
112
113
114 def load(self):
115 pass
116# self.paragraph_style = (self.config.get_config(u'paragraph style', u'True'))
117# self.show_new_chapters = (self.config.get_config(u'display new chapter', u"False"))
118# self.display_style = int(self.config.get_config(u'display brackets', u'0'))
119# self.bible_theme = int(self.config.get_config(u'bible theme', u'0'))
120# self.bible_search = (self.config.get_config(u'search as type', u'True'))
121# if self.paragraph_style:
122# self.ParagraphRadioButton.setChecked(True)
123# else:
124# self.VerseRadioButton.setChecked(True)
125# self.NewChaptersCheckBox.setChecked(self.show_new_chapters)
126# self.DisplayStyleComboBox.setCurrentIndex(self.display_style)
127# self.BibleSearchCheckBox.setChecked(self.bible_search)
128
129 def save(self):
130 pass
131# self.config.set_config(u'paragraph style', str(self.paragraph_style))
132# self.config.set_config(u'display new chapter', str(self.show_new_chapters))
133# self.config.set_config(u'display brackets', str(self.display_style))
134# self.config.set_config(u'search as type', str(self.bible_search))
135# self.config.set_config(u'bible theme', str(self.bible_theme))