forked from openlp/openlp
continued work
This commit is contained in:
parent
060718be32
commit
a5fa986bdd
openlp/core
@ -77,8 +77,10 @@ class Renderer(object):
|
||||
self.force_page = False
|
||||
self.display = MainDisplay(None, self.imageManager, False, self)
|
||||
self.display.setup()
|
||||
self.theme_dimensions = {}
|
||||
self._theme_dimensions = {}
|
||||
self._calculate_default()
|
||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||
QtCore.SIGNAL(u'theme_update_global'), self.set_global_theme)
|
||||
|
||||
def update_display(self):
|
||||
"""
|
||||
@ -92,23 +94,29 @@ class Renderer(object):
|
||||
self.bg_frame = None
|
||||
self._calculate_default()
|
||||
|
||||
def set_theme(self, theme_name):
|
||||
def update_theme(self):
|
||||
self._theme_dimensions = {}
|
||||
|
||||
def _set_theme(self, theme_name):
|
||||
"""
|
||||
Helper method to save theme names and theme data.
|
||||
"""
|
||||
if theme_name not in self.theme_dimensions:
|
||||
if theme_name not in self._theme_dimensions:
|
||||
theme_data = self.themeManager.getThemeData(theme_name)
|
||||
main_rect = self.get_main_rectangle(theme_data)
|
||||
footer_rect = self.get_footer_rectangle(theme_data)
|
||||
self.theme_dimensions[theme_name] = [theme_data, main_rect, footer_rect]
|
||||
self._theme_dimensions[theme_name] = \
|
||||
[theme_data, main_rect, footer_rect]
|
||||
else:
|
||||
theme_data, main_rect, footer_rect = self.theme_dimensions[theme_name]
|
||||
theme_data, main_rect, footer_rect = \
|
||||
self._theme_dimensions[theme_name]
|
||||
# if No file do not update cache
|
||||
if theme_data.background_filename:
|
||||
self.imageManager.add_image(theme_data.theme_name,
|
||||
theme_data.background_filename, u'theme',
|
||||
QtGui.QColor(theme_data.background_border_color))
|
||||
|
||||
def post_render(self, override_theme_data):
|
||||
def post_render(self, override_theme_data=None):
|
||||
"""
|
||||
"""
|
||||
# Just assume we use the global theme.
|
||||
@ -120,35 +128,44 @@ class Renderer(object):
|
||||
theme_to_use = self.service_theme
|
||||
elif self.theme_level == ThemeLevel.Song and self.item_theme:
|
||||
theme_to_use = self.item_theme
|
||||
theme_data, main_rect, footer_rect = self.theme_dimensions[theme_to_use]
|
||||
if override_theme_data:
|
||||
if override_theme_data is None:
|
||||
theme_data, main_rect, footer_rect = \
|
||||
self._theme_dimensions[theme_to_use]
|
||||
else:
|
||||
# Ignore everything and use own theme data.
|
||||
theme_data = override_theme_data
|
||||
main_rect = self.get_main_rectangle(override_theme_data)
|
||||
footer_rect = self.get_footer_rectangle(override_theme_data)
|
||||
self._set_text_rectangle(theme_data, main_rect, footer_rect)
|
||||
return theme_data, self._rect, self._rect_footer
|
||||
|
||||
def set_theme_level(self, theme_level):
|
||||
"""
|
||||
Sets the theme level.
|
||||
|
||||
``theme_level``
|
||||
The theme level to be used.
|
||||
"""
|
||||
self.theme_level = theme_level
|
||||
|
||||
def set_global_theme(self, global_theme_name):
|
||||
"""
|
||||
Set the global-level theme and the theme level.
|
||||
Set the global-level theme name.
|
||||
|
||||
``global_theme``
|
||||
The global-level theme to be set.
|
||||
``global_theme_name``
|
||||
The global-level theme's name.
|
||||
"""
|
||||
self.set_theme(global_theme_name)
|
||||
self._set_theme(global_theme_name)
|
||||
self.global_theme = global_theme_name
|
||||
|
||||
def set_service_theme(self, service_theme_name):
|
||||
"""
|
||||
Set the service-level theme.
|
||||
|
||||
``service_theme``
|
||||
The service-level theme to be set.
|
||||
``service_theme_name``
|
||||
The service level theme's name.
|
||||
"""
|
||||
self.set_theme(service_theme_name)
|
||||
self._set_theme(service_theme_name)
|
||||
self.service_theme = service_theme_name
|
||||
|
||||
def set_override_theme(self, override_theme_name):
|
||||
@ -160,7 +177,7 @@ class Renderer(object):
|
||||
The name of the song-level theme. None means the service
|
||||
item wants to use the given value.
|
||||
"""
|
||||
self.set_theme(override_theme_name)
|
||||
self._set_theme(override_theme_name)
|
||||
self.item_theme = override_theme_name
|
||||
|
||||
def generate_preview(self, theme_data, force_page=False):
|
||||
@ -178,8 +195,6 @@ class Renderer(object):
|
||||
self.force_page = force_page
|
||||
# build a service item to generate preview
|
||||
serviceItem = ServiceItem()
|
||||
serviceItem.theme = theme_data.theme_name
|
||||
#self.set_override_theme(theme_data)
|
||||
if self.force_page:
|
||||
# make big page for theme edit dialog to get line count
|
||||
serviceItem.add_from_text(u'', VERSE_FOR_LINE_COUNT)
|
||||
@ -188,7 +203,16 @@ class Renderer(object):
|
||||
serviceItem.add_from_text(u'', VERSE)
|
||||
serviceItem.renderer = self
|
||||
serviceItem.raw_footer = FOOTER
|
||||
serviceItem.render(theme_data)
|
||||
# if No file do not update cache
|
||||
if theme_data.background_filename:
|
||||
self.imageManager.add_image(theme_data.theme_name,
|
||||
theme_data.background_filename, u'theme',
|
||||
QtGui.QColor(theme_data.background_border_color))
|
||||
theme_data, main, footer = self.post_render(theme_data)
|
||||
serviceItem.themedata = theme_data
|
||||
serviceItem.main = main
|
||||
serviceItem.footer = footer
|
||||
serviceItem.render(True)
|
||||
if not self.force_page:
|
||||
self.display.buildHtml(serviceItem)
|
||||
raw_html = serviceItem.get_rendered_frame(0)
|
||||
|
@ -28,7 +28,7 @@
|
||||
The :mod:`serviceitem` provides the service item functionality including the
|
||||
type and capability of an item.
|
||||
"""
|
||||
|
||||
import time
|
||||
import cgi
|
||||
import datetime
|
||||
import logging
|
||||
@ -39,6 +39,9 @@ from openlp.core.lib import build_icon, clean_tags, expand_tags, translate
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
COUNT = 0
|
||||
TIME_ = datetime.timedelta()
|
||||
|
||||
class ServiceItemType(object):
|
||||
"""
|
||||
Defines the type of service item
|
||||
@ -158,20 +161,19 @@ class ServiceItem(object):
|
||||
self.icon = icon
|
||||
self.iconic_representation = build_icon(icon)
|
||||
|
||||
def render(self, use_override=False):
|
||||
def render(self, provides_own_theme_data=False):
|
||||
"""
|
||||
The render method is what generates the frames for the screen and
|
||||
obtains the display information from the renderer. At this point all
|
||||
slides are built for the given display size.
|
||||
"""
|
||||
import time
|
||||
import datetime
|
||||
start = time.time()
|
||||
log.debug(u'Render called')
|
||||
self._display_frames = []
|
||||
self.bg_image_bytes = None
|
||||
self.renderer.set_override_theme(self.theme)
|
||||
self.themedata, self.main, self.footer = self.renderer.post_render(use_override)
|
||||
if not provides_own_theme_data:
|
||||
self.renderer.set_override_theme(self.theme)
|
||||
self.themedata, self.main, self.footer = self.renderer.post_render()
|
||||
if self.service_item_type == ServiceItemType.Text:
|
||||
log.debug(u'Formatting slides')
|
||||
for slide in self._raw_frames:
|
||||
@ -197,7 +199,13 @@ class ServiceItem(object):
|
||||
if self.raw_footer is None:
|
||||
self.raw_footer = []
|
||||
self.foot_text = u'<br>'.join(filter(None, self.raw_footer))
|
||||
print unicode(datetime.timedelta(seconds=(time.time() - start)))
|
||||
global COUNT
|
||||
COUNT += 1
|
||||
global TIME_
|
||||
TIME_ += datetime.timedelta(seconds=(time.time() - start))
|
||||
print u'%s (average %s)' % (
|
||||
unicode(datetime.timedelta(seconds=(time.time() - start))),
|
||||
unicode(TIME_ / COUNT))
|
||||
|
||||
def add_from_image(self, path, title, background=None):
|
||||
"""
|
||||
|
@ -250,7 +250,6 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
|
||||
Generate layout preview and display the form.
|
||||
"""
|
||||
self.updateTheme()
|
||||
screen_size = self.screens.current[u'size']
|
||||
width = self.thememanager.mainwindow.renderer.width
|
||||
height = self.thememanager.mainwindow.renderer.height
|
||||
pixmap = QtGui.QPixmap(width, height)
|
||||
|
@ -247,8 +247,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
QtCore.QSettings().setValue(
|
||||
self.settingsSection + u'/global theme',
|
||||
QtCore.QVariant(self.global_theme))
|
||||
Receiver.send_message(u'theme_update_global',
|
||||
self.global_theme)
|
||||
Receiver.send_message(u'theme_update_global', self.global_theme)
|
||||
self._pushThemes()
|
||||
|
||||
def onAddTheme(self):
|
||||
@ -667,6 +666,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
u'theme', QtGui.QColor(theme.background_border_color))
|
||||
self.mainwindow.imageManager.process_updates()
|
||||
self.loadThemes()
|
||||
#self.mainwindow.renderer.update_theme()
|
||||
|
||||
def _writeTheme(self, theme, image_from, image_to):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user