diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 30e176f85..306c1d5fd 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -32,8 +32,9 @@ from toolbar import OpenLPToolbar from songxmlhandler import SongXMLBuilder from songxmlhandler import SongXMLParser from themexmlhandler import ThemeXML -from openlp.core.lib.render import Renderer +from renderer import Renderer +from rendermanager import RenderManager __all__ = ['Renderer','PluginConfig', 'Plugin', 'SettingsTab', 'MediaManagerItem', 'Event', 'EventType' 'XmlRootClass', 'ServiceItem', 'Receiver', 'OpenLPToolbar', 'SongXMLBuilder', - 'SongXMLParser', 'EventManager', 'ThemeXML'] + 'SongXMLParser', 'EventManager', 'ThemeXML', 'RenderManager'] diff --git a/openlp/core/lib/render.py b/openlp/core/lib/renderer.py similarity index 99% rename from openlp/core/lib/render.py rename to openlp/core/lib/renderer.py index 8383155ad..c5528d59d 100644 --- a/openlp/core/lib/render.py +++ b/openlp/core/lib/renderer.py @@ -3,7 +3,7 @@ """ OpenLP - Open Source Lyrics Projection Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008 Martin Thompson, Tim Bentley +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 diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py new file mode 100644 index 000000000..a31afd663 --- /dev/null +++ b/openlp/core/lib/rendermanager.py @@ -0,0 +1,81 @@ +# -*- 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 - 2009Martin 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 +import os, os.path +import sys +from PyQt4 import QtGui, QtCore, Qt +from renderer import Renderer + +class RenderManager: + """ + Class to pull all Renderer interactions into one place. + The plugins will call helper methods to do the rendering but + this class will provide display defense code. + """ + global log + log=logging.getLogger(u'RenderManager') + log.info(u'RenderManager Loaded') + + def __init__(self, screen_list): + log.debug(u'Initilisation started') + self.screen_list = screen_list + self.displays = len(screen_list) + self.current_display = 1 + self.renderer = Renderer() + self.calculate_default(self.screen_list[self.current_display-1][1]) + + def set_theme(self, theme): + self.theme = theme + if theme.font_main_override == False: + pass + if theme.font_footer_override == False: + pass + + + def generate_preview(self): + self.calculate_default(QtCore.QSize(800,600)) + + frame = QtGui.QPixmap(self.width, self.height) + renderer=Renderer(None) + renderer.set_paint_dest(frame) + + renderer.set_theme(self.theme) + renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), + QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)) + + 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.append(u'Amazing Grace (John Newton)' ) + lines1.append(u'CCLI xxx (c)Openlp.org') + answer=renderer.render_lines(lines, lines1) + return frame + + def generate_bible(self): + pass + + def calculate_default(self, screen): + self.width = screen.width() + self.height = screen.height() + self.footer_start = int(self.height*0.95) # 95% is start of footer diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 641961610..b545784c9 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -123,6 +123,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.theme.font_main_name = self.FontMainComboBox.currentFont().family() self.previewTheme(self.theme) + def onFontMainColorPushButtonClicked(self): + self.theme.font_main_color = QtGui.QColorDialog.getColor( + QColor(self.theme.font_main_color), self).name() + + self.FontMainColorPushButton.setStyleSheet( + 'background-color: %s' % str(self.theme.font_main_color)) + self.previewTheme(self.theme) + def onFontMainSizeSpinBoxChanged(self, value): self.theme.font_main_proportion = value self.previewTheme(self.theme) @@ -159,6 +167,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.theme.font_footer_name = self.FontFooterComboBox.currentFont().family() self.previewTheme(self.theme) + def onFontFooterColorPushButtonClicked(self): + self.theme.font_footer_color = QtGui.QColorDialog.getColor( + QColor(self.theme.font_footer_color), self).name() + + self.FontFooterColorPushButton.setStyleSheet( + 'background-color: %s' % str(self.theme.font_footer_color)) + self.previewTheme(self.theme) + def onFontFooterSizeSpinBoxChanged(self, value): self.theme.font_footer_proportion = value self.previewTheme(self.theme) @@ -251,23 +267,6 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): 'background-color: %s' % str(self.theme.background_endColor)) self.previewTheme(self.theme) - - def onFontMainColorPushButtonClicked(self): - self.theme.font_main_color = QtGui.QColorDialog.getColor( - QColor(self.theme.font_main_color), self).name() - - self.FontMainColorPushButton.setStyleSheet( - 'background-color: %s' % str(self.theme.font_main_color)) - self.previewTheme(self.theme) - - def onFontFooterColorPushButtonClicked(self): - self.theme.font_footer_color = QtGui.QColorDialog.getColor( - QColor(self.theme.font_footer_color), self).name() - - self.FontFooterColorPushButton.setStyleSheet( - 'background-color: %s' % str(self.theme.font_footer_color)) - self.previewTheme(self.theme) - # #Other Tab # @@ -310,8 +309,6 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.theme.display_verticalAlign = currentIndex self.stateChanging(self.theme) self.previewTheme(self.theme) - - # #Local Methods # diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 40cc153a7..d070b5917 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -28,7 +28,7 @@ from openlp.core.resources import * from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \ SlideController, ServiceManager, ThemeManager -from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, EventManager +from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, EventManager, RenderManager from openlp.core import PluginManager @@ -44,6 +44,7 @@ class MainWindow(object): self.alert_form = AlertForm() self.about_form = AboutForm() self.settings_form = SettingsForm(self.screen_list) + self.RenderManager = RenderManager(self.screen_list) pluginpath = os.path.split(os.path.abspath(__file__))[0] pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins')) @@ -57,6 +58,7 @@ class MainWindow(object): self.plugin_helpers[u'live'] = self.LiveController self.plugin_helpers[u'event'] = self.EventManager self.plugin_helpers[u'theme'] = self.ThemeManagerContents # Theme manger + self.plugin_helpers[u'render'] = self.RenderManager self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager) # hook methods have to happen after find_plugins. Find plugins needs the controllers @@ -84,6 +86,7 @@ class MainWindow(object): # Once all components are initialised load the Themes log.info(u'Load Themes') self.ThemeManagerContents.setEventManager(self.EventManager) + self.ThemeManagerContents.setRenderManager(self.RenderManager) self.ThemeManagerContents.loadThemes() def setupUi(self): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 70b0bb2e5..1f04951d6 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -187,6 +187,9 @@ class ThemeManager(QWidget): def setEventManager(self, eventManager): self.eventManager = eventManager + def setRenderManager(self, renderManager): + self.renderManager = renderManager + def onAddTheme(self): self.amendThemeForm.loadTheme(None) self.amendThemeForm.exec_() @@ -335,24 +338,7 @@ class ThemeManager(QWidget): def generateImage(self, theme): log.debug(u'generateImage %s ', theme) - size=QtCore.QSize(800,600) - frame = QtGui.QPixmap(size.width(), size.height()) - renderer=Renderer(self.path) - renderer.set_paint_dest(frame) - - renderer.set_theme(theme) # set default theme - #renderer._render_background() - renderer.set_text_rectangle(QtCore.QRect(0,0, size.width()-1, size.height()-1), QtCore.QRect(10,560, size.width()-1, size.height()-1)) - - 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.append(u'Amazing Grace (John Newton)' ) - lines1.append(u'CCLI xxx (c)Openlp.org') - answer=renderer.render_lines(lines, lines1) + self.renderManager.set_theme(theme) + frame = self.renderManager.generate_preview() return frame