diff --git a/openlp/core/lib/event.py b/openlp/core/lib/event.py index 6950a3b8e..0472edfba 100644 --- a/openlp/core/lib/event.py +++ b/openlp/core/lib/event.py @@ -54,6 +54,3 @@ class Event(object): def __init__(self, event_type=EventType.Default, payload=None): self.event_type = event_type self.payload = payload - - def get_type(self): - return self.event_type diff --git a/openlp/core/lib/eventmanager.py b/openlp/core/lib/eventmanager.py index cfa810f68..07a6f7024 100644 --- a/openlp/core/lib/eventmanager.py +++ b/openlp/core/lib/eventmanager.py @@ -40,7 +40,7 @@ class EventManager(object): self.endpoints.append(plugin) def post_event(self, event): - log.debug(u'post event called for event %s', event.get_type) + log.debug(u'post event called for event %s', event.event_type) for point in self.endpoints: point.handle_event(event) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index a509e0d4d..0490ed3ee 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -41,143 +41,160 @@ class Renderer: tell it to render a particular screenfull with render_screen(n) """ - def __init__(self, path=None): - self._rect=None - self._debug=0 - self.words=None + def __init__(self): + self._rect = None + self._debug = 0 + self.words = None self._right_margin = 64 # the amount of right indent - self._shadow_offset=5 - self._outline_offset=2 - self._theme=None - self._bg_image_filename=None - self._paint=None - self._path = path - self.img = None + self._shadow_offset = 5 + self._outline_offset = 2 + self.theme_name = None + self._theme = None + self._bg_image_filename = None + self._frame = None + self._bg_frame = None + self.bg_image = None def set_debug(self, debug): self._debug=debug def set_theme(self, theme): - self._theme=theme + """ + External API to pass in the theme to be used + """ + log.debug(u'set theme') + self._theme = theme + self._bg_frame = None + self.theme_name = theme.theme_name if theme.background_type == u'image': - if self._path is not None: + if theme.background_filename is not None: self.set_bg_image(theme.background_filename) def set_bg_image(self, filename): log.debug(u'set bg image %s', filename) - - self._bg_image_filename=os.path.join(self._path, self._theme.theme_name, filename) - print self._bg_image_filename - if self._paint is not None: + self._bg_image_filename = str(filename) + if self._frame is not None: self.scale_bg_image() def scale_bg_image(self): - assert self._paint - i=QtGui.QImage(self._bg_image_filename) + assert self._frame + image = QtGui.QImage(self._bg_image_filename) # rescale and offset - imw=i.width() - imh=i.height() - print imw, imh - dcw=self._paint.width()+1 - dch=self._paint.height() - imratio=imw/float(imh) - dcratio=dcw/float(dch) + imw = image.width() + imh = image.height() + dcw = self._frame.width()+1 + dch = self._frame.height() + imratio = imw/float(imh) + dcratio = dcw/float(dch) log.debug(u'Image scaling params %s %s %s %s %s %s', imw, imh, imratio, dcw, dch, dcratio) if imratio > dcratio: - scale=dcw/float(imw) + scale = dcw/float(imw) elif imratio < dcratio: - scale=dch/float(imh) + scale = dch/float(imh) else: - scale=dcw/float(imw) # either will do - neww=int(round(imw*scale)) - newh=int(round(imh*scale)) + scale = dcw/float(imw) # either will do + neww = int(round(imw*scale)) + newh = int(round(imh*scale)) self.background_offsetx=(dcw-neww)/2 self.background_offsety=(dch-newh)/2 - self.img=QtGui.QPixmap.fromImage(i.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio)) + self.bg_image=QtGui.QPixmap.fromImage(image.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio)) - def set_paint_dest(self, p): - log.debug(u'set paint dest (frame) w %d h %d',p.width(), p.height()) - self._paint=p + def set_frame_dest(self, frame_width, frame_height, preview=False): + """ + External API to pass the frame size to be painted + """ + if preview == True: + self._bg_frame = None + log.debug(u'set frame dest (frame) w %d h %d',frame_width, frame_height) + self._frame = QtGui.QPixmap(frame_width, frame_height) if self._bg_image_filename is not None: self.scale_bg_image() + if self._bg_frame is None: + self._render_background() def format_slide(self, words, footer): + """ + External API to sort out the text to pe placed on the frame + """ log.debug(u'format_slide %s', words) - verses=[] - verses_text = words.splitlines() - for v in verses_text: - lines=v.split(u'\n') + verses = [] + verses_text = words.split(u'\n\n') + for verse in verses_text: + lines = verse.split(u'\n') verses.append(self.split_set_of_lines(lines, footer)[0]) self.words = verses - verses_text=[] + verses_text = [] for v in verses: verses_text.append(u'\n'.join(v).lstrip()) # remove first \n return verses_text def render_screen(self, screennum): log.debug(u'render screen\n %s %s ', screennum, self.words[screennum]) - t=0.0 - words=self.words[screennum] - retval=self._render_lines(words) + t = 0.0 + words = self.words[screennum] + retval = self._render_lines(words) return retval def set_text_rectangle(self, rect_main, rect_footer): """ Sets the rectangle within which text should be rendered""" - self._rect=rect_main - self._rect_footer=rect_footer + self._rect = rect_main + self._rect_footer = rect_footer def _render_background(self): + """ + Generate a background frame to the same size as the frame to be used + Results cached for performance reasons. + """ assert(self._theme) - assert(self._paint) + self._bg_frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) log.debug(u'render background %s ', self._theme.background_type) bef = datetime.now() - p=QtGui.QPainter() - p.begin(self._paint) + painter = QtGui.QPainter() + painter.begin(self._bg_frame) if self._theme.background_type == u'solid': - p.fillRect(self._paint.rect(), QtGui.QColor(self._theme.background_color)) + painter.fillRect(self._frame.rect(), QtGui.QColor(self._theme.background_color)) elif self._theme.background_type == u'gradient' : # gradient gradient = None if self._theme.background_direction == u'horizontal': - w = int(self._paint.width())/2 - gradient = QtGui.QLinearGradient(w, 0, w, self._paint.height()) # vertical + w = int(self._frame.width())/2 + gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height()) # vertical elif self._theme.background_direction == u'vertical': - h = int(self._paint.height())/2 - gradient = QtGui.QLinearGradient(0, h, self._paint.width(), h) # Horizontal + h = int(self._frame.height())/2 + gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h) # Horizontal else: - w = int(self._paint.width())/2 - h = int(self._paint.height())/2 + w = int(self._frame.width())/2 + h = int(self._frame.height())/2 gradient = QtGui.QRadialGradient(w, h, w) # Circular gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor)) gradient.setColorAt(1, QtGui.QColor(self._theme.background_endColor)) - p.setBrush(QtGui.QBrush(gradient)) + painter.setBrush(QtGui.QBrush(gradient)) rectPath = QtGui.QPainterPath() - max_x = self._paint.width() - max_y = self._paint.height() + max_x = self._frame.width() + max_y = self._frame.height() rectPath.moveTo(0, 0) rectPath.lineTo(0, max_y) rectPath.lineTo(max_x, max_y) rectPath.lineTo(max_x, 0) rectPath.closeSubpath() - p.drawPath(rectPath) + painter.drawPath(rectPath) elif self._theme.background_type== u'image': # image - r=self._paint.rect() + r = self._frame.rect() log.debug(u'Image size details %d %d %d %d ', r.x(), r.y(), r.width(),r.height()) #log.debug(u' Background Parameter %d ', self._theme.background_color1) #if self._theme.background_color1 is not None: - # p.fillRect(self._paint.rect(), self._theme.background_borderColor) - if self.img is not None: - p.drawPixmap(self.background_offsetx,self.background_offsety, self.img) + # p.fillRect(self._frame.rect(), self._theme.background_borderColor) + if self.bg_image is not None: + painter.drawPixmap(self.background_offsetx,self.background_offsety, self.bg_image) else: - p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000')) - p.end() + painter.fillRect(self._frame.rect(), QtGui.QColor(u'#000000')) + painter.end() aft = datetime.now() print "background time", bef, aft, aft-bef - log.debug(u'render background finish') def split_set_of_lines(self, lines, footer): @@ -186,71 +203,68 @@ class Renderer: - this is done by splitting at 1/2, 1/3 or 1/4 of the set If it doesn't fit, even at this size, just split at each opportunity - We'll do this by getting the bounding box of each lline, and then summing them appropriately - + We'll do this by getting the bounding box of each line, and then summing them appropriately Returns a list of [lists of lines], one set for each screenful """ log.debug(u'Split set of lines') - # Probably ought to save the rendering results to a pseudoDC for redrawing efficiency. But let's not optimse prematurely! - bboxes = [] for line in lines: bboxes.append(self._render_single_line(line, footer)) - numlines=len(lines) - bottom=self._rect.bottom() + + numlines = len(lines) + bottom = self._rect.bottom() for ratio in (numlines, numlines/2, numlines/3, numlines/4): - good=1 - startline=0 - endline=startline+ratio - while (endline<=numlines): - by=0 + good = 1 + startline = 0 + endline = startline + ratio + while (endline <= numlines): + by = 0 for (x, y) in bboxes[startline:endline]: - by+=y + by += y if by > bottom: good=0 break - startline+=ratio - endline=startline+ratio - if good==1: + startline += ratio + endline = startline+ratio + if good == 1: break - retval=[] - numlines_per_page=ratio + retval = [] + numlines_per_page = ratio if good: - c=0 - thislines=[] + c = 0 + thislines = [] while c < numlines: thislines.append(lines[c]) - c+=1 + c += 1 if len(thislines) == numlines_per_page: retval.append(thislines) - thislines=[] + thislines = [] else: # log.debug(u" "Just split where you can" - retval=[] - startline=0 - endline=startline+1 - while (endline<=numlines): - by=0 + retval = [] + startline = 0 + endline = startline+1 + while (endline <= numlines): + by = 0 for (x, y) in bboxes[startline:endline]: - by+=y + by += y if by > bottom: retval.append(lines[startline:endline-1]) - startline=endline-1 - endline=startline # gets incremented below - by=0 - endline+=1 - + startline = endline-1 + endline = startline # gets incremented below + by = 0 + endline += 1 return retval def _correctAlignment(self, rect, bbox): - x=rect.left() + x = rect.left() if int(self._theme.display_verticalAlign) == 0: # top align y = rect.top() elif int(self._theme.display_verticalAlign) == 2: # bottom align - y=rect.bottom()-bbox.height() + y = rect.bottom()-bbox.height() elif int(self._theme.display_verticalAlign) == 1: # centre align - y=rect.top()+(rect.height()-bbox.height())/2 + y = rect.top()+(rect.height()-bbox.height())/2 else: assert(0, u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign) return x, y @@ -259,51 +273,53 @@ class Renderer: """render a set of lines according to the theme, return bounding box""" log.debug(u'render_lines - Start') - bbox=self._render_lines_unaligned(lines, False) # Main font + bbox = self._render_lines_unaligned(lines, False) # Main font if footer_lines is not None: - bbox1=self._render_lines_unaligned(footer_lines, True) # Footer Font + bbox1 = self._render_lines_unaligned(footer_lines, True) # Footer Font + + self._frame = QtGui.QPixmap(self._bg_frame) - # put stuff on background so need to reset before doing the job properly. - self._render_background() x, y = self._correctAlignment(self._rect, bbox) - bbox=self._render_lines_unaligned(lines, False, (x, y)) + bbox = self._render_lines_unaligned(lines, False, (x, y)) if footer_lines is not None: - bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) ) + bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) ) log.debug(u'render_lines- Finish') - return bbox + + return self._frame def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)): - - """Given a list of lines to render, render each one in turn + """ + Given a list of lines to render, render each one in turn (using the _render_single_line fn - which may result in going off the bottom) They are expected to be pre-arranged to less than a screenful (eg. by using split_set_of_lines) - Returns the bounding box of the text as QRect""" + Returns the bounding box of the text as QRect + """ log.debug(u'render lines unaligned Start') - x, y=tlcorner - brx=x - bry=y + x, y = tlcorner + brx = x + bry = y for line in lines: # render after current bottom, but at original left edge # keep track of right edge to see which is biggest - (thisx, bry) = self._render_single_line(line, footer, (x,bry)) + (thisx, bry) = self._render_single_line(line, footer, (x , bry)) if (thisx > brx): - brx=thisx - retval=QtCore.QRect(x, y,brx-x, bry-y) + brx = thisx + retval = QtCore.QRect(x, y,brx-x, bry-y) if self._debug: - p=QtGui.QPainter() - p.begin(self._paint) - p.setPen(QtGui.QPen(QtGui.QColor(0,0,255))) - p.drawRect(retval) - p.end() + painter = QtGui.QPainter() + painter.begin(self._frame) + painter.setPen(QtGui.QPen(QtGui.QColor(0,0,255))) + painter.drawRect(retval) + painter.end() log.debug(u'render lines unaligned Finish') return retval def _render_single_line(self, line, footer, tlcorner=(0,0)): - - """render a single line of words onto the DC, top left corner + """ + Render a single line of words onto the DC, top left corner specified. If the line is too wide for the context, it wraps, but @@ -312,139 +328,147 @@ class Renderer: Returns the bottom-right corner (of what was rendered) as a tuple(x, y). """ log.debug(u'Render single line %s @ %s '%( line, tlcorner)) - x, y=tlcorner + x, y = tlcorner # We draw the text to see how big it is and then iterate to make it fit # when we line wrap we do in in the "lyrics" style, so the second line is # right aligned with a "hanging indent" - - # get the words -# log.debug(u" "Getting the words split right" - words=line.split(u' ') - thisline=u' '.join(words) - lastword=len(words) - lines=[] - maxx=self._rect.width(); maxy=self._rect.height(); + words = line.split(u' ') + thisline = u' '.join(words) + lastword = len(words) + lines = [] + maxx = self._rect.width(); + maxy = self._rect.height(); while (len(words)>0): - w,h=self._get_extent_and_render(thisline, footer) - rhs=w+x + w , h = self._get_extent_and_render(thisline, footer) + rhs = w + x if rhs < maxx-self._right_margin: lines.append(thisline) - words=words[lastword:] - thisline=' '.join(words) - lastword=len(words) + words = words[lastword:] + thisline = ' '.join(words) + lastword = len(words) else: - lastword-=1 - thisline=' '.join(words[:lastword]) - startx=x - starty=y - rightextent=None - t=self._theme + lastword -= 1 + thisline = ' '.join(words[:lastword]) + startx = x + starty = y + rightextent = None if footer: # dont allow alignment messing with footers align = 0 else: - align=t.display_horizontalAlign - - wrapstyle=t.display_wrapStyle + align = int(self._theme .display_horizontalAlign) for linenum in range(len(lines)): - line=lines[linenum] + line = lines[linenum] #find out how wide line is - w,h=self._get_extent_and_render(line, footer, tlcorner=(x, y), draw=False) - - if t.display_shadow: - w+=self._shadow_offset - h+=self._shadow_offset - if t.display_outline: - w+=2*self._outline_offset # pixels either side - h+=2*self._outline_offset # pixels top/bottom - if align==0: # left align - rightextent=x+w - if wrapstyle==1 and linenum != 0: # shift right from last line's rh edge - rightextent=self._first_line_right_extent + self._right_margin + w , h = self._get_extent_and_render(line, footer, tlcorner=(x, y), draw=False) + if self._theme.display_shadow: + w += self._shadow_offset + h += self._shadow_offset + if self._theme.display_outline: + w += 2*self._outline_offset # pixels either side + h += 2*self._outline_offset # pixels top/bottom + if align == 0: # left align + rightextent = x + w + if self._theme.display_wrapStyle == 1 and linenum != 0: # shift right from last line's rh edge + rightextent = self._first_line_right_extent + self._right_margin if rightextent > maxx: rightextent = maxx - x = rightextent-w - - elif align==1: # right align - rightextent=maxx - x=maxx-w - elif align==2: # centre - x=(maxx-w)/2; - rightextent=x+w + x = rightextent - w + elif align == 1: # right align + rightextent = maxx + x = maxx-w + elif align == 2: # centre + x = (maxx-w) / 2; + rightextent = x+w # now draw the text, and any outlines/shadows - if t.display_shadow: + if self._theme.display_shadow: self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset), - draw=True, color = t.display_shadow_color) - if t.display_outline: - self._get_extent_and_render(line, footer,(x+self._outline_offset,y), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x, y+self._outline_offset), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x, y-self._outline_offset), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x-self._outline_offset,y), draw=True, color = t.display_outline_color) + draw=True, color = self._theme.display_shadow_color) + if self._theme.display_outline: + self._get_extent_and_render(line, footer,(x+self._outline_offset,y), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x, y+self._outline_offset), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x, y-self._outline_offset), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x-self._outline_offset,y), draw=True, + color = self._theme.display_outline_color) if self._outline_offset > 1: - self._get_extent_and_render(line, footer,(x+self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x-self._outline_offset,y+self._outline_offset), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x+self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color) - self._get_extent_and_render(line, footer,(x-self._outline_offset,y-self._outline_offset), draw=True, color = t.display_outline_color) + self._get_extent_and_render(line, footer,(x+self._outline_offset,y+self._outline_offset), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x-self._outline_offset,y+self._outline_offset), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x+self._outline_offset,y-self._outline_offset), draw=True, + color = self._theme.display_outline_color) + self._get_extent_and_render(line, footer,(x-self._outline_offset,y-self._outline_offset), draw=True, + color = self._theme.display_outline_color) self._get_extent_and_render(line, footer,tlcorner=(x, y), draw=True) -# log.debug(u'Line %2d: Render '%s' at (%d, %d) wh=(%d,%d)' % ( linenum, line, x, y,w,h) y += h if linenum == 0: - self._first_line_right_extent=rightextent + self._first_line_right_extent = rightextent # draw a box around the text - debug only if self._debug: - p=QtGui.QPainter() - p.begin(self._paint) - p.setPen(QtGui.QPen(QtGui.QColor(0,255,0))) - p.drawRect(startx,starty,rightextent-startx, y-starty) - p.end() + painter = QtGui.QPainter() + painter.begin(self._frame) + painter.setPen(QtGui.QPen(QtGui.QColor(0,255,0))) + painter.drawRect(startx , starty , rightextent-startx , y-starty) + painter.end() - brcorner=(rightextent,y) + brcorner = (rightextent , y) log.debug(u'Render single line Finish') return brcorner # xxx this is what to override for an SDL version def _get_extent_and_render(self, line, footer, tlcorner=(0,0), draw=False, color=None): - """Find bounding box of text - as render_single_line. + """ + Find bounding box of text - as render_single_line. If draw is set, actually draw the text to the current DC as well - return width and height of text as a tuple (w,h)""" + return width and height of text as a tuple (w,h) + """ # setup defaults #log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw) - p=QtGui.QPainter() - p.begin(self._paint) + painter = QtGui.QPainter() + painter.begin(self._frame) # 'twould be more efficient to set this once when theme changes # or p changes if footer : - font=QtGui.QFont(self._theme.font_footer_name, + font = QtGui.QFont(self._theme.font_footer_name, int(self._theme.font_footer_proportion), # size QtGui.QFont.Normal, # weight 0)# italic + font.setPixelSize(int(self._theme.font_footer_proportion)) else: - font=QtGui.QFont(self._theme.font_main_name, + font = QtGui.QFont(self._theme.font_main_name, int(self._theme.font_main_proportion), # size QtGui.QFont.Normal, # weight 0)# italic - # to make the unit tests monitor independent, we have to be able to - # specify whether a font proportion is in pixels or points - if footer: - font.setPixelSize(int(self._theme.font_footer_proportion)) - else: font.setPixelSize(int(self._theme.font_main_proportion)) #log.debug(u'Font details %s %s %s %d', self._theme.font_main_name, self._theme.font_main_proportion, font.family(), font.pointSize()) - p.setFont(font) + painter.setFont(font) if color == None: if footer: - p.setPen(QtGui.QColor(self._theme.font_footer_color)) + painter.setPen(QtGui.QColor(self._theme.font_footer_color)) else: - p.setPen(QtGui.QColor(self._theme.font_main_color)) + painter.setPen(QtGui.QColor(self._theme.font_main_color)) else: - p.setPen(QtGui.QColor(color)) - x, y=tlcorner + painter.setPen(QtGui.QColor(color)) + x, y = tlcorner metrics=QtGui.QFontMetrics(font) # xxx some fudges to make it exactly like wx! Take 'em out later - w=metrics.width(line) - h=metrics.height()-2 + w = metrics.width(line) + h = metrics.height()-2 if draw: - p.drawText(x, y+metrics.height()-metrics.descent()-1, line) - p.end() + painter.drawText(x, y+metrics.height()-metrics.descent()-1, line) + painter.end() return (w, h) + + def snoop_Image(self, image, image2=None): + """ + Debugging method to allow images to be viewed + """ + im = image.toImage() + im.save("renderer.png", "png") + if image2 is not None: + im = image2.toImage() + im.save("renderer2.png", "png") diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index b62b22297..49b1f515d 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -29,6 +29,9 @@ import sys import linecache def traceit(frame, event, arg): + """ + Code to allow calls to be traced by python runtime + """ if event == "line": lineno = frame.f_lineno filename = frame.f_globals["__file__"] @@ -59,7 +62,7 @@ class RenderManager: self.theme_manager = theme_manager self.displays = len(screen_list) self.current_display = 0 - self.renderer = Renderer(None) + self.renderer = Renderer() self.calculate_default(self.screen_list[self.current_display]['size']) def set_override_theme(self, theme): @@ -68,11 +71,12 @@ class RenderManager: self.theme = theme else: self.theme = self.default_theme - log.debug(u'theme is now %s', self.theme) - self.themedata = self.theme_manager.getThemeData(self.theme) - self.calculate_default(self.screen_list[self.current_display]['size']) - self.renderer.set_theme(self.themedata) - self.build_text_rectangle(self.themedata) + if self.theme != self.renderer.theme_name: + log.debug(u'theme is now %s', self.theme) + self.themedata = self.theme_manager.getThemeData(self.theme) + self.calculate_default(self.screen_list[self.current_display]['size']) + self.renderer.set_theme(self.themedata) + self.build_text_rectangle(self.themedata) def build_text_rectangle(self, theme): log.debug(u'build_text_rectangle ') @@ -95,50 +99,52 @@ class RenderManager: def generate_preview(self, themedata): log.debug(u'generate preview') - self.calculate_default(QtCore.QSize(800,600)) + self.calculate_default(QtCore.QSize(800, 600)) self.renderer.set_theme(themedata) self.build_text_rectangle(themedata) - frame = QtGui.QPixmap(self.width, self.height) - self.renderer.set_paint_dest(frame) + self.renderer.set_frame_dest(self.width, self.height, True) - lines=[] + lines = [] lines.append(u'Amazing Grace!') lines.append(u'How sweet the sound') lines.append(u'To save a wretch like me;') lines.append(u'I once was lost but now am found,') lines.append(u'Was blind, but now I see.') - lines1=[] + lines1 = [] lines1.append(u'Amazing Grace (John Newton)' ) - lines1.append(u'CCLI xxx (c)Openlp.org') - answer=self.renderer.render_lines(lines, lines1) - return frame + lines1.append(u'Public Domain') + lines1.append(u'CCLI xxx') + return self.renderer.render_lines(lines, lines1) + def format_slide(self, words, footer): log.debug(u'format slide') self.calculate_default(self.screen_list[self.current_display]['size']) - self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height)) - return self.renderer.format_slide(words, footer) + self.build_text_rectangle(self.themedata) + self.renderer.set_frame_dest(self.width, self.height) + return self.renderer.format_slide(words, False) def generate_slide(self,main_text, footer_text): log.debug(u'generate slide') - #sys.settrace(traceit) - self.calculate_default(self.screen_list[self.current_display]['size']) - - bef = datetime.now() - frame = QtGui.QPixmap(self.width, self.height) - aft = datetime.now() - print "framebuild time", bef, aft, aft-bef - - self.renderer.set_paint_dest(frame) - answer=self.renderer.render_lines(main_text, footer_text) - #sys.settrace() - return frame + self.build_text_rectangle(self.themedata) + self.renderer.set_frame_dest(self.width, self.height) + return self.renderer.render_lines(main_text, footer_text) def calculate_default(self, screen): log.debug(u'calculate default %s' , screen) self.width = screen.width() self.height = screen.height() log.debug(u'calculate default %d,%d' , self.width, self.height) - self.footer_start = int(self.height*0.95) # 95% is start of footer + self.footer_start = int(self.height*0.90) # 90% is start of footer + + def snoop_Image(self, image, image2=None): + """ + Debugging method to allow images to be viewed + """ + im = image.toImage() + im.save("renderer.png", "png") + if image2 is not None: + im = image2.toImage() + im.save("renderer2.png", "png") diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index d0b30016c..eb8ce751c 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -47,7 +47,7 @@ class ServiceItem(): self.frames = [] self.raw_footer = None self.theme = None - log.debug(u'Service item created for %s', self.shortname) + log.debug(u'Service item created for %s ', self.shortname) def addIcon(self, icon): self.iconic_representation = buildIcon(icon) diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index adcfd7871..31063b28f 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -21,7 +21,7 @@ from xml.etree.ElementTree import ElementTree, XML, dump For XML Schema see wiki.openlp.org """ - +import os, os.path from openlp import convertStringToBoolean from xml.dom.minidom import Document from xml.etree.ElementTree import ElementTree, XML, dump @@ -40,7 +40,7 @@ blankthemexml=\ vertical - fred.bmp + Arial @@ -69,6 +69,10 @@ class ThemeXML(): # Create the minidom document self.theme_xml = Document() + def extend_filename(self, path): + if self.background_filename is not None: + self.background_filename = os.path.join(path, self.theme_name, self.background_filename) + def new_document(self, name): # Create the base element self.theme = self.theme_xml.createElement(u'theme') diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 34eac3587..733e4281a 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -22,10 +22,8 @@ import os, os.path from PyQt4 import QtCore, QtGui from PyQt4.QtGui import QColor, QFont -from openlp.core.lib import ThemeXML -from openlp.core.lib import Renderer -from openlp.core import fileToXML -from openlp.core import translate +from openlp.core.lib import ThemeXML, Renderer +from openlp.core import fileToXML, translate from amendthemedialog import Ui_AmendThemeDialog @@ -53,6 +51,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): QtCore.SIGNAL("pressed()"), self.onOutlineColorPushButtonClicked) QtCore.QObject.connect(self.ShadowColorPushButton, QtCore.SIGNAL("pressed()"), self.onShadowColorPushButtonClicked) + QtCore.QObject.connect(self.ImageToolButton, + QtCore.SIGNAL("pressed()"), self.onImageToolButtonClicked) #Combo boxes QtCore.QObject.connect(self.BackgroundComboBox, @@ -99,17 +99,22 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): QtCore.QObject.connect(self.ShadowCheckBox, QtCore.SIGNAL("stateChanged(int)"), self.onShadowCheckBoxChanged) - def accept(self): new_theme = ThemeXML() theme_name = str(self.ThemeNameEdit.displayText()) new_theme.new_document(theme_name) + save_from = None + save_to = None if self.theme.background_type == u'solid': new_theme.add_background_solid(str(self.theme.background_color)) elif self.theme.background_type == u'gradient': - new_theme.add_background_gradient(str(self.theme.background_startColor), str(self.theme.background_endColor), self.theme.background_direction) - #else: - #newtheme.add_background_image(str(self.theme.)) + new_theme.add_background_gradient(str(self.theme.background_startColor), + str(self.theme.background_endColor), self.theme.background_direction) + else: + (path, filename) =os.path.split(str(self.theme.background_filename)) + new_theme.add_background_image(filename) + save_to= os.path.join(self.path, theme_name,filename ) + save_from = self.theme.background_filename new_theme.add_font(str(self.theme.font_main_name), str(self.theme.font_main_color), str(self.theme.font_main_proportion), str(self.theme.font_main_override),u'main', @@ -126,7 +131,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): theme = new_theme.extract_xml() - self.thememanager.saveTheme(theme_name, theme) + self.thememanager.saveTheme(theme_name, theme, save_from, save_to) return QtGui.QDialog.accept(self) def themePath(self, path): @@ -140,9 +145,17 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): xml_file = os.path.join(self.path, theme, theme+u'.xml') xml = fileToXML(xml_file) self.theme.parse(xml) + self.allowPreview = False self.paintUi(self.theme) + self.allowPreview = True self.previewTheme(self.theme) + def onImageToolButtonClicked(self): + filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file') + if filename != "": + self.ImageLineEdit.setText(filename) + self.theme.background_filename = filename + self.previewTheme(self.theme) # #Main Font Tab # @@ -196,8 +209,6 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): def onFontMainHeightSpinBoxChanged(self, value): self.theme.font_main_height = value self.previewTheme(self.theme) - - # #Footer Font Tab # @@ -217,7 +228,6 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.theme.font_footer_proportion = value self.previewTheme(self.theme) - def onFontFooterDefaultCheckBoxChanged(self, value): if value == 2: # checked self.theme.font_footer_override = False @@ -516,5 +526,6 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): def previewTheme(self, theme): - frame = self.thememanager.generateImage(theme) - self.ThemePreview.setPixmap(frame) + if self.allowPreview: + frame = self.thememanager.generateImage(theme) + self.ThemePreview.setPixmap(frame) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index a5eb85076..f33508e85 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -60,9 +60,9 @@ class MainDisplay(QtGui.QWidget): painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000')) def frameView(self, frame): + self.frame = frame if self.displayBlank == False: self.display.setPixmap(frame) - self.frame = frame def blankDisplay(self): if self.displayBlank == False: @@ -71,7 +71,3 @@ class MainDisplay(QtGui.QWidget): else: self.displayBlank = False self.frameView(self.frame) - - - def kill(self): - pass diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 2e0326cfe..2a87ec623 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -37,6 +37,7 @@ class MainWindow(object): def __init__(self, screens): self.main_window = QtGui.QMainWindow() + self.main_window.__class__.closeEvent = self.onCloseEvent self.main_display = MainDisplay(None, screens) self.screen_list = screens self.EventManager = EventManager() @@ -89,23 +90,32 @@ class MainWindow(object): # Once all components are initialised load the Themes log.info(u'Load Themes and Managers') - self.PreviewController.eventManager = self.EventManager - self.PreviewController.serviceManager = self.ServiceManagerContents - self.LiveController.eventManager = self.EventManager - self.LiveController.serviceManager = self.ServiceManagerContents - self.ThemeManagerContents.eventManager = self.EventManager - self.ThemeManagerContents.renderManager = self.RenderManager - self.ServiceManagerContents.renderManager = self.RenderManager - self.ServiceManagerContents.eventManager = self.EventManager - self.ServiceManagerContents.liveController = self.LiveController - self.ServiceManagerContents.previewController = self.PreviewController - self.ThemeManagerContents.serviceManager = self.ServiceManagerContents + self.PreviewController.ServiceManager = self.ServiceManagerContents + self.LiveController.ServiceManager = self.ServiceManagerContents + + self.ThemeManagerContents.EventManager = self.EventManager + self.ThemeManagerContents.RenderManager = self.RenderManager + self.ThemeManagerContents.ServiceManager = self.ServiceManagerContents + #self.ThemeManagerContents.ThemesTab = self.ServiceManagerContents.ThemesTab + + self.ServiceManagerContents.RenderManager = self.RenderManager + self.ServiceManagerContents.EventManager = self.EventManager + self.ServiceManagerContents.LiveController = self.LiveController + self.ServiceManagerContents.PreviewController = self.PreviewController + self.ThemeManagerContents.loadThemes() # Initialise SlideControllers log.info(u'Set Up SlideControllers') self.LiveController.mainDisplay = self.main_display + def onCloseEvent(self, event): + """ + Hook to close the main window and display windows on exit + """ + self.main_display.close() + event.accept() + def setupUi(self): self.main_window.setObjectName(u'main_window') self.main_window.resize(1087, 847) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ba6f6361f..e0795a8ea 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -136,13 +136,13 @@ class ServiceManager(QtGui.QWidget): pass def onSaveService(self): - Pass + pass def onLoadService(self): - Pass + pass def onThemeComboBoxSelected(self, currentIndex): - self.renderManager.default_theme = self.ThemeComboBox.currentText() + self.RenderManager.default_theme = self.ThemeComboBox.currentText() def addServiceItem(self, item): self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1}) @@ -162,11 +162,11 @@ class ServiceManager(QtGui.QWidget): def makePreview(self): item, count = self.findServiceItem() - self.previewController.addServiceManagerItem(self.serviceItems[item][u'data'], count) + self.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count) def makeLive(self): item, count = self.findServiceItem() - self.liveController.addServiceManagerItem(self.serviceItems[item][u'data'], count) + self.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count) def findServiceItem(self): items = self.ServiceManagerList.selectedItems() @@ -197,7 +197,7 @@ class ServiceManager(QtGui.QWidget): link=event.mimeData() if link.hasText(): plugin = event.mimeData().text() - self.eventManager.post_event(Event(EventType.LoadServiceItem, plugin)) + self.EventManager.post_event(Event(EventType.LoadServiceItem, plugin)) def oos_as_text(self): text=[] @@ -226,5 +226,5 @@ class ServiceManager(QtGui.QWidget): self.ThemeComboBox.clear() for theme in theme_list: self.ThemeComboBox.addItem(theme) - self.renderManager.default_theme = self.ThemeComboBox.currentText() + self.RenderManager.default_theme = self.ThemeComboBox.currentText() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 97c17b33c..92431e97b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -24,7 +24,6 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import OpenLPToolbar from openlp.core import translate -from openlp.core.lib import Event, EventType, EventManager class SlideData(QtCore.QAbstractListModel): """ @@ -37,17 +36,13 @@ class SlideData(QtCore.QAbstractListModel): def __init__(self): QtCore.QAbstractListModel.__init__(self) - self.items=[] - self.rowheight=50 - self.maximagewidth=self.rowheight*16/9.0; + self.items = [] + self.rowheight = 50 + self.maximagewidth = self.rowheight * 16/9.0; log.info(u'Starting') - def eventFilter(self, obj, event): - print obj, event - return false - def clear(self): - self.items=[] + self.items = [] def columnCount(self, parent): return 1 diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index a919825a8..a695c8d92 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -222,8 +222,10 @@ class ThemeManager(QWidget): for name in files: if name.endswith(u'.png'): self.themeData.addRow(os.path.join(self.path, name)) - self.eventManager.post_event(Event(EventType.ThemeListChanged)) - self.serviceManager.updateThemeList(self.getThemes()) + self.EventManager.post_event(Event(EventType.ThemeListChanged)) + self.ServiceManager.updateThemeList(self.getThemes()) + self.parent.settings_form.ThemesTab.updateThemeList(self.getThemes()) + def getThemes(self): return self.themeData.getList() @@ -244,6 +246,7 @@ class ThemeManager(QWidget): xml = newtheme.extract_xml() theme = ThemeXML() theme.parse(xml) + theme.extend_filename(self.path) return theme def checkThemesExists(self, dir): @@ -331,9 +334,8 @@ class ThemeManager(QWidget): str(theme.WrapStyle)) return newtheme.extract_xml() - def saveTheme(self, name, theme_xml) : + def saveTheme(self, name, theme_xml, image_from, image_to) : log.debug(u'saveTheme %s %s', name, theme_xml) - self.generateAndSaveImage(self.path, name, theme_xml) theme_dir = os.path.join(self.path, name) if os.path.exists(theme_dir) == False: os.mkdir(os.path.join(self.path, name)) @@ -341,6 +343,9 @@ class ThemeManager(QWidget): outfile = open(theme_file, u'w') outfile.write(theme_xml) outfile.close() + if image_from is not None: + shutil.copyfile(image_from, image_to) + self.generateAndSaveImage(self.path, name, theme_xml) self.themeData.clearItems() self.loadThemes() @@ -348,6 +353,7 @@ class ThemeManager(QWidget): log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml) theme = ThemeXML() theme.parse(theme_xml) + theme.extend_filename(dir) frame = self.generateImage(theme) im = frame.toImage() samplepathname = os.path.join(self.path, name + u'.png') @@ -358,6 +364,6 @@ class ThemeManager(QWidget): def generateImage(self, themedata): log.debug(u'generateImage %s ', themedata) - frame = self.renderManager.generate_preview(themedata) + frame = self.RenderManager.generate_preview(themedata) return frame diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 98b3f0e73..b779c35c1 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -105,3 +105,11 @@ class ThemesTab(SettingsTab): self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service , overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.')) self.GlobalLevelRadioButton.setText(translate(u'ThemesTab', u'Global level')) self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated wither either the service or the songs.')) + + def updateThemeList(self, theme_list): + """ + Called from ThemeManager when the Themes have changed + """ + self.DefaultComboBox.clear() + for theme in theme_list: + self.DefaultComboBox.addItem(theme) diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 7b4410d02..d279c6aab 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -85,13 +85,13 @@ class BiblePlugin(Plugin): log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload)) if event.event_type == EventType.ThemeListChanged: log.debug(u'New Theme request received') - #self.edit_custom_form.loadThemes(self.theme_manager.getThemes()) + self.bibles_tab.updateThemeList(self.theme_manager.getThemes()) if event.event_type == EventType.LoadServiceItem and event.payload == 'Bibles': log.debug(u'Load Service Item received') self.media_item.onBibleAddClick() if event.event_type == EventType.PreviewShow and event.payload == 'Bibles': - log.debug(u'Load Service Item received') + log.debug(u'Load Preview Item received') self.media_item.onBiblePreviewClick() if event.event_type == EventType.LiveShow and event.payload == 'Bibles': - log.debug(u'Load Service Item received') + log.debug(u'Load Live Show Item received') self.media_item.onBibleLiveClick() diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index dc0918d92..ccb37cb4c 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -198,6 +198,7 @@ class BiblesTab(SettingsTab): self.BibleThemeComboBox.setCurrentIndex(self.bible_theme) else: pass # TODO need to code + self.bible_theme = None def save(self): self.config.set_config("paragraph style", str(self.paragraph_style)) @@ -205,3 +206,11 @@ class BiblesTab(SettingsTab): self.config.set_config("display brackets", str(self.display_style)) self.config.set_config("search as type", str(self.bible_search)) self.config.set_config("bible theme", str(self.bible_theme)) + + def updateThemeList(self, theme_list): + """ + Called from ThemeManager when the Themes have changed + """ + self.BibleThemeComboBox.clear() + for theme in theme_list: + self.BibleThemeComboBox.addItem(theme) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index d179d1654..5fedf9883 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -369,13 +369,14 @@ class BibleMediaItem(MediaManagerItem): def generateSlideData(self, service_item): log.debug(u'Bible Preview Button pressed') items = self.BibleListView.selectedIndexes() - old_chapter = '' + old_chapter = u'' raw_slides=[] raw_footer = [] + bible_text = u'' for item in items: text = self.BibleListData.getValue(item) - verse = text[:text.find("(")] - bible = text[text.find("(") + 1:text.find(")")] + verse = text[:text.find(u'(')] + bible = text[text.find(u'(') + 1:text.find(u')')] self.searchByReference(bible, verse) book = self.search_results[0][0] chapter = str(self.search_results[0][1]) @@ -392,15 +393,15 @@ class BibleMediaItem(MediaManagerItem): else: loc = self.formatVerse(old_chapter, chapter, verse, u'', u'') old_chapter = chapter - raw_slides.append(loc + u' '+text) + bible_text = bible_text + u' '+ loc + u' '+ text service_item.title = book + u' ' + loc if len(raw_footer) <= 1: raw_footer.append(book) - if len(raw_slides) > 0: - service_item.theme = None - service_item.raw_slides = raw_slides - service_item.raw_footer = raw_footer + service_item.theme = self.parent.bibles_tab.bible_theme + raw_slides.append(bible_text) + service_item.raw_slides = raw_slides + service_item.raw_footer = raw_footer def formatVerse(self, old_chapter, chapter, verse, opening, closing): loc = opening diff --git a/openlp/plugins/bibles/lib/textlistdata.py b/openlp/plugins/bibles/lib/textlistdata.py index 6119a1325..16ef37db5 100644 --- a/openlp/plugins/bibles/lib/textlistdata.py +++ b/openlp/plugins/bibles/lib/textlistdata.py @@ -1,3 +1,22 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +""" import logging from PyQt4.QtCore import * @@ -6,7 +25,7 @@ from PyQt4.QtGui import * class TextListData(QAbstractListModel): """ - An abstract list of strings + An abstract list of strings """ global log log=logging.getLogger(u'TextListData') @@ -14,18 +33,18 @@ class TextListData(QAbstractListModel): def __init__(self): QAbstractListModel.__init__(self) - self.items=[] # will be a list of (database id , title) tuples + self.items = [] # will be a list of (database id , title) tuples def resetStore(self): #reset list so can be reloaded - self.items=[] - + self.items = [] + def rowCount(self, parent): return len(self.items) def insertRow(self, row, id, title): self.beginInsertRows(QModelIndex(),row,row) - log.debug("insert row %d:%s for id %d"%(row,title, id)) + log.debug(u'insert row %d:%s for id %d'%(row,title, id)) self.items.insert(row, (id, title)) self.endInsertRows() @@ -36,18 +55,15 @@ class TextListData(QAbstractListModel): def addRow(self, id, title): self.insertRow(len(self.items), id, title) - + def data(self, index, role): row=index.row() if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row! return QVariant() - if role==Qt.DisplayRole: - retval= self.items[row][1] -# elif role == Qt.ToolTipRole: #not sure if need as it shows the database row number -# retval= self.items[row][0] + if role == Qt.DisplayRole: + retval = self.items[row][1] else: - retval= QVariant() -# log.info("Returning"+ str(retval)) + retval = QVariant() if type(retval) is not type(QVariant): return QVariant(retval) else: @@ -60,10 +76,7 @@ class TextListData(QAbstractListModel): def getValue(self, index): row = index.row() return self.items[row][1] - + def deleteRow(self, index): row = index.row() self.removeRow(row) - -if __name__=="__main__": - sxml=TextListData() diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index a0c2b5800..afa7ec87d 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -64,8 +64,8 @@ class CustomPlugin(Plugin): log.debug(u'Load Service Item received') self.media_item.onCustomAddClick() if event.event_type == EventType.PreviewShow and event.payload == 'Custom': - log.debug(u'Load Service Item received ') + log.debug(u'Load Preview Item received ') self.media_item.onCustomPreviewClick() if event.event_type == EventType.LiveShow and event.payload == 'Custom': - log.debug(u'Load Service Item received') + log.debug(u'Load Live Show Item received') self.media_item.onCustomLiveClick() diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index fac8f2f85..4c9e9a058 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -60,10 +60,10 @@ class ImagePlugin(Plugin): log.debug(u'Load Service Item received') self.media_item.onImageAddClick() if event.event_type == EventType.PreviewShow and event.payload == 'Image': - log.debug(u'Load Service Item received') + log.debug(u'Load Preview Item received') self.media_item.onImagePreviewClick() if event.event_type == EventType.LiveShow and event.payload == 'Image': - log.debug(u'Load Service Item received') + log.debug(u'Load Live Show Item received') self.media_item.onImageLiveClick() diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 5188bf53a..823cabd0d 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -175,7 +175,7 @@ class ImageMediaItem(MediaManagerItem): self.parent.live_controller.addServiceItem(service_item) def onImageAddClick(self): - log.debug(u'Image Live Requested') + log.debug(u'Image Add Requested') service_item = ServiceItem(self.parent) service_item.addIcon( ":/media/media_image.png") service_item.render_manager = self.parent.render_manager diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index ae9f7696c..71916e370 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -30,7 +30,7 @@ from openlp.plugins.media.lib import FileListData class MediaMediaItem(MediaManagerItem): """ - This is the custom media manager item for Custom Slides. + This is the custom media manager item for Media Slides. """ global log log=logging.getLogger(u'MediaMediaItem') @@ -93,13 +93,14 @@ class MediaMediaItem(MediaManagerItem): translate('MediaMediaItem',u'&Add to Service'), self.onMediaAddClick)) def initialise(self): - list = self.parent.config.load_list(u'Medias') + list = self.parent.config.load_list(u'Media') self.loadMediaList(list) def onMediaNewClick(self): files = QtGui.QFileDialog.getOpenFileNames(None, translate('MediaMediaItem', u'Select Media(s) items'), - self.parent.config.get_last_dir(), u'Images (*.avi *.mpeg)') + self.parent.config.get_last_dir(), + u'Images (*.avi *.mpeg);;Audio (*.mp3 *.ogg *.wma);;All files (*)') if len(files) > 0: self.loadMediaList(files) dir, filename = os.path.split(str(files[0])) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 508b6480e..1022b4e2f 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -105,10 +105,6 @@ class SongsPlugin(Plugin): QtCore.QObject.connect(self.ExportOpenlp1Item, QtCore.SIGNAL("triggered()"), self.onExportOpenlp1ItemClicked) QtCore.QObject.connect(self.ExportOpenSongItem, QtCore.SIGNAL("triggered()"), self.onExportOpenSongItemClicked) - def get_settings_tab(self): - self.SongsTab = SongsTab() - return self.SongsTab - def initialise(self): pass