Theme preview updates

This commit is contained in:
Tim Bentley 2010-08-07 09:50:58 +01:00
parent efd5c60dfd
commit 45b12cf462
2 changed files with 18 additions and 15 deletions

View File

@ -112,7 +112,7 @@ class RenderManager(object):
"""
self.service_theme = service_theme
def set_override_theme(self, theme):
def set_override_theme(self, theme, overrideLevels=False):
"""
Set the appropriate theme depending on the theme level.
Called by the service item when building a display frame
@ -122,9 +122,12 @@ class RenderManager(object):
item wants to use the given value.
"""
log.debug(u'set override theme to %s', theme)
if self.theme_level == ThemeLevel.Global:
theme_level = self.theme_level
if overrideLevels:
theme_level = ThemeLevel.Song
if theme_level == ThemeLevel.Global:
self.theme = self.global_theme
elif self.theme_level == ThemeLevel.Service:
elif theme_level == ThemeLevel.Service:
if self.service_theme == u'':
self.theme = self.global_theme
else:
@ -132,15 +135,16 @@ class RenderManager(object):
else:
if theme:
self.theme = theme
elif self.theme_level == ThemeLevel.Song or \
self.theme_level == ThemeLevel.Service:
elif theme_level == ThemeLevel.Song or \
theme_level == ThemeLevel.Service:
if self.service_theme == u'':
self.theme = self.global_theme
else:
self.theme = self.service_theme
else:
self.theme = self.global_theme
if self.theme != self.renderer.theme_name or self.themedata is None:
if self.theme != self.renderer.theme_name or self.themedata is None \
or overrideLevels:
log.debug(u'theme is now %s', self.theme)
self.themedata = self.theme_manager.getThemeData(self.theme)
self.calculate_default(self.screens.current[u'size'])
@ -185,11 +189,6 @@ class RenderManager(object):
log.debug(u'generate preview')
# set the default image size for previews
self.calculate_default(self.screens.preview[u'size'])
self.renderer.set_theme(themedata)
self.build_text_rectangle(themedata)
self.renderer.set_frame_dest(self.width, self.height, True)
# Reset the real screen size for subsequent render requests
self.calculate_default(self.screens.current[u'size'])
verse = u'Amazing Grace!\n'\
'How sweet the sound\n'\
'To save a wretch like me;\n'\
@ -201,13 +200,17 @@ class RenderManager(object):
footer.append(u'CCLI 123456')
# build a service item to generate preview
serviceItem = ServiceItem()
serviceItem.theme = themedata
serviceItem.add_from_text(u'', verse, footer)
serviceItem.render_manager = self
serviceItem.render()
serviceItem.render(True)
serviceItem.raw_footer = footer
self.display.buildHtml(serviceItem)
frame, raw_html = serviceItem.get_rendered_frame(0)
return self.display.text(raw_html)
preview = self.display.text(raw_html)
# Reset the real screen size for subsequent render requests
self.calculate_default(self.screens.current[u'size'])
return preview
def format_slide(self, words, line_break):
"""

View File

@ -131,7 +131,7 @@ class ServiceItem(object):
self.icon = icon
self.iconic_representation = build_icon(icon)
def render(self):
def render(self, useOverride=False):
"""
The render method is what generates the frames for the screen and
obtains the display information from the renderemanager.
@ -150,7 +150,7 @@ class ServiceItem(object):
if not self.theme:
theme = self.theme
self.main, self.footer = \
self.render_manager.set_override_theme(theme)
self.render_manager.set_override_theme(theme, useOverride)
self.bg_frame = self.render_manager.renderer.bg_frame
self.themedata = self.render_manager.renderer._theme
for slide in self._raw_frames: