From b9b97174e240d2fb47151cf4720e22f067c6717d Mon Sep 17 00:00:00 2001 From: Michael Gorven Date: Fri, 6 Nov 2009 11:29:38 +0200 Subject: [PATCH 01/23] Improve transaltion string regex. --- openlp-get-strings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 openlp-get-strings.py diff --git a/openlp-get-strings.py b/openlp-get-strings.py old mode 100644 new mode 100755 index e53924b02..dc101e945 --- a/openlp-get-strings.py +++ b/openlp-get-strings.py @@ -42,7 +42,7 @@ ts_message = u""" """ -find_trUtf8 = re.compile(r"trUtf8\(u'([\.:;\\&\w]+)'\)", re.UNICODE) +find_trUtf8 = re.compile(r"trUtf8\(u['\"]([^)]+)['\"]\)", re.UNICODE) strings = {} def parse_file(filename): From a9a53d9c947851e166beba80ae5613a8e3d54364 Mon Sep 17 00:00:00 2001 From: Michael Gorven Date: Fri, 6 Nov 2009 11:40:31 +0200 Subject: [PATCH 02/23] Use string quotes to detect end. --- openlp-get-strings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp-get-strings.py b/openlp-get-strings.py index dc101e945..adb2f8821 100755 --- a/openlp-get-strings.py +++ b/openlp-get-strings.py @@ -42,7 +42,7 @@ ts_message = u""" """ -find_trUtf8 = re.compile(r"trUtf8\(u['\"]([^)]+)['\"]\)", re.UNICODE) +find_trUtf8 = re.compile(r"trUtf8\(u?(['\"])([^\1]+)\1\)", re.UNICODE) strings = {} def parse_file(filename): From 4ee481ca6e43aa06ad83412a7cc3e0ab91bb8666 Mon Sep 17 00:00:00 2001 From: Michael Gorven Date: Fri, 6 Nov 2009 11:52:04 +0200 Subject: [PATCH 03/23] Change to Unicode string. --- openlp/core/ui/amendthemeform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 652b26284..b3a1d49e7 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -193,7 +193,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): def onImageToolButtonClicked(self): filename = QtGui.QFileDialog.getOpenFileName( - self, self.trUtf8('Open file')) + self, self.trUtf8(u'Open file')) if filename: self.ImageLineEdit.setText(filename) self.theme.background_filename = filename From 1c0a86b17fcc76969dd9fb8bfcc89c98af461b2a Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 23:33:59 +0000 Subject: [PATCH 04/23] Simplify OS path setting --- openlp/core/ui/servicemanager.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index bb39b573e..bbfc6d0fb 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -23,7 +23,6 @@ ############################################################################### import os -import string import logging import cPickle import zipfile @@ -460,7 +459,7 @@ class ServiceManager(QtGui.QWidget): def onQuickSaveService(self): self.onSaveService(True) - def onLoadService(self, lastService = False): + def onLoadService(self, lastService=False): """ Load an existing service from disk and rebuild the serviceitems. All files retrieved from the zip file are placed in a temporary directory @@ -481,11 +480,8 @@ class ServiceManager(QtGui.QWidget): try: zip = zipfile.ZipFile(unicode(filename)) for file in zip.namelist(): - if os.name == u'nt': - winfile = string.replace(file, '/', os.path.sep) - names = winfile.split(os.path.sep) - else: - names = file.split(os.path.sep) + osfile = unicode(QtCore.QDir.toNativeSeparators(file)) + names = osfile.split(os.path.sep) file_to = os.path.join(self.servicePath, names[len(names) - 1]) f = open(file_to, u'wb') @@ -501,7 +497,7 @@ class ServiceManager(QtGui.QWidget): for item in items: serviceitem = ServiceItem() serviceitem.RenderManager = self.parent.RenderManager - serviceitem.set_from_service(item, self.servicePath ) + serviceitem.set_from_service(item, self.servicePath) self.addServiceItem(serviceitem) try: if os.path.isfile(p_file): From 1c92f157c700900e3dbcb5340d0f2dac627dfb5b Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 23:43:47 +0000 Subject: [PATCH 05/23] Refactor file_to_xml => get_text_file_string --- openlp/core/lib/__init__.py | 33 ++++++++++++++++++--------------- openlp/core/ui/thememanager.py | 4 ++-- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index e3618c7a1..1f3fcd4b8 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -27,6 +27,7 @@ The :mod:`lib` module contains most of the components and libraries that make OpenLP work. """ import logging +import os.path import types from PyQt4 import QtCore, QtGui @@ -49,26 +50,28 @@ def translate(context, text): return QtGui.QApplication.translate( context, text, None, QtGui.QApplication.UnicodeUTF8) -def file_to_xml(xmlfile): +def get_text_file_string(text_file): """ - Open a file and return the contents of the file. + Open a file and return the contents of the file. If the supplied file name + is not a file then the function returns False. If there is an error + loading the file then the function will return None. - ``xmlfile`` + ``textfile`` The name of the file. """ - file = None - xml = None + if not os.path.isfile(text_file): + return False + file_handle = None + content_string = None try: - file = open(xmlfile, u'r') - xml = file.read() + file_handle = open(text_file, u'r') + content_string = file_handle.read() except IOError: - #This may not be an error as this is also used to check - #that a file exist - log.error(u'Failed to open XML file %s' % xmlfile) + log.error(u'Failed to open text file %s' % text_file) finally: - if file: - file.close() - return xml + if file_handle: + file_handle.close() + return content_string def str_to_bool(stringvalue): """ @@ -152,5 +155,5 @@ from rendermanager import RenderManager from mediamanageritem import MediaManagerItem from baselistwithdnd import BaseListWithDnD -__all__ = [ 'translate', 'file_to_xml', 'str_to_bool', - 'contextMenuAction', 'contextMenuSeparator','ServiceItem'] +__all__ = [ 'translate', 'get_text_file_string', 'str_to_bool', + 'contextMenuAction', 'contextMenuSeparator', 'ServiceItem'] diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 51f1f2425..77e38ad20 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -33,7 +33,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import AmendThemeForm from openlp.core.theme import Theme from openlp.core.lib import PluginConfig, OpenLPToolbar, ThemeXML, \ - str_to_bool, file_to_xml, buildIcon, Receiver, contextMenuAction, \ + str_to_bool, get_text_file_string, buildIcon, Receiver, contextMenuAction, \ contextMenuSeparator from openlp.core.utils import ConfigHelper @@ -274,7 +274,7 @@ class ThemeManager(QtGui.QWidget): log.debug(u'getthemedata for theme %s', themename) xml_file = os.path.join(self.path, unicode(themename), unicode(themename) + u'.xml') - xml = file_to_xml(xml_file) + xml = get_text_file_string(xml_file) if not xml: xml = self.baseTheme() return self.createThemeFromXml(xml, self.path) From b6eadecb4688e2dafef1be022bcc2a77211b431a Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 23:46:20 +0000 Subject: [PATCH 06/23] isfile test doesn't need try --- openlp/core/utils/registry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/utils/registry.py b/openlp/core/utils/registry.py index 8fa0bb6a8..e56d939ef 100644 --- a/openlp/core/utils/registry.py +++ b/openlp/core/utils/registry.py @@ -101,10 +101,10 @@ class Registry(object): return False def _load(self): + if not os.path.isfile(self.file_name): + return False file_handle = None try: - if not os.path.isfile(self.file_name): - return False file_handle = open(self.file_name, u'r') self.config.readfp(file_handle) return True From b79d535e04a3c6632a028213ed214b0e23c8221e Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 23:49:35 +0000 Subject: [PATCH 07/23] Fix theme loading logic and missing item from cleaning --- openlp/core/ui/amendthemeform.py | 2 +- openlp/core/ui/thememanager.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 4e5b9cd9d..652b26284 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -184,7 +184,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): def loadTheme(self, theme): log.debug(u'LoadTheme %s', theme) - self.theme = self.thememanager.getThemeData(theme) + self.theme = theme # Stop the initial screen setup generating 1 preview per field! self.allowPreview = False self.paintUi(self.theme) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 77e38ad20..0f333bf04 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -150,15 +150,17 @@ class ThemeManager(QtGui.QWidget): self.pushThemes() def onAddTheme(self): - self.amendThemeForm.loadTheme(None) + theme = self.createThemeFromXml(self.baseTheme(), self.path) + self.amendThemeForm.loadTheme(theme) self.saveThemeName = u'' self.amendThemeForm.exec_() def onEditTheme(self): item = self.ThemeListWidget.currentItem() if item: - self.amendThemeForm.loadTheme( + theme = self.getThemeData( unicode(item.data(QtCore.Qt.UserRole).toString())) + self.amendThemeForm.loadTheme(theme) self.saveThemeName = unicode( item.data(QtCore.Qt.UserRole).toString()) self.amendThemeForm.exec_() @@ -265,7 +267,7 @@ class ThemeManager(QtGui.QWidget): self.pushThemes() def pushThemes(self): - Receiver().send_message(u'update_themes', self.getThemes() ) + Receiver().send_message(u'update_themes', self.getThemes()) def getThemes(self): return self.themelist @@ -501,6 +503,8 @@ class ThemeManager(QtGui.QWidget): theme.display_wrapStyle = theme.display_wrapStyle.strip() theme.font_footer_color = theme.font_footer_color.strip() theme.font_footer_height = int(theme.font_footer_height.strip()) + theme.font_footer_indentation = \ + int(theme.font_footer_indentation.strip()) theme.font_footer_italics = str_to_bool(theme.font_footer_italics) theme.font_footer_name = theme.font_footer_name.strip() #theme.font_footer_override From f764eb7d5968ab1e06a12473823c12b6c7fa0054 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 23:58:19 +0000 Subject: [PATCH 08/23] Fix imports --- openlp/core/ui/maindisplay.py | 1 - openlp/core/ui/slidecontroller.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5fea3268e..f5e57c2c3 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -24,7 +24,6 @@ import logging import os -import time from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 88e81bfae..d359dc923 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -28,8 +28,7 @@ import os from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon -from openlp.core.lib import OpenLPToolbar, Receiver, ServiceItemType, \ - str_to_bool, PluginConfig +from openlp.core.lib import OpenLPToolbar, Receiver, str_to_bool, PluginConfig class SlideList(QtGui.QTableWidget): """ From 3defb3b4c5bbfb28086a01f0af6680d415d02869 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 13 Nov 2009 17:42:51 +0000 Subject: [PATCH 09/23] SPG --- openlp/core/ui/slidecontroller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d359dc923..e916e77be 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -423,7 +423,7 @@ class SlideController(QtGui.QWidget): def addServiceManagerItem(self, item, slideno): """ Method to install the service item into the controller and - request the correct the toolbar of the plugin + request the correct toolbar for the plugin. Called by ServiceManager """ log.debug(u'addServiceManagerItem') From f0e2fdd6f5c5d1cdf83d08426afb31c522421b9b Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 13 Nov 2009 17:43:58 +0000 Subject: [PATCH 10/23] Fix multiple video plays --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f5e57c2c3..75e993195 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -278,6 +278,7 @@ class MainDisplay(DisplayWidget): self.mediaLoaded = True self.display.hide() self.video.setFullScreen(True) + self.video.setVisible(True) self.mediaObject.play() if self.primary: self.setVisible(True) @@ -289,7 +290,6 @@ class MainDisplay(DisplayWidget): def onMediaStop(self): log.debug(u'Media stopped by user') self.mediaObject.stop() - self.display.show() def onMediaFinish(self): log.debug(u'Reached end of media playlist') From e618c3061c42585918d480dd8b1730b7ff216c5a Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 08:40:14 +0000 Subject: [PATCH 11/23] ServiceItem cleanup - rename arrays --- openlp/core/lib/serviceitem.py | 72 ++++++++++--------- openlp/core/ui/servicemanager.py | 36 +++++----- openlp/core/ui/slidecontroller.py | 6 +- openlp/plugins/presentations/lib/mediaitem.py | 12 ++-- 4 files changed, 65 insertions(+), 61 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index e9de1f832..d6b1f0abf 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -49,30 +49,28 @@ class ServiceItem(object): log = logging.getLogger(u'ServiceItem') log.info(u'Service Item created') - def __init__(self, hostplugin=None): + def __init__(self, plugin=None): """ Set up the service item. - ``hostplugin`` + ``plugin`` The plugin that this service item belongs to. """ - self.plugin = hostplugin - if hostplugin: - self.RenderManager = self.plugin.render_manager - self.shortname = hostplugin.name - self.name = self.plugin.name + if plugin: + self.RenderManager = plugin.render_manager + self.name = plugin.name self.title = u'' self.audit = u'' self.items = [] self.iconic_representation = None self.raw_slides = None - self.frames = [] + self.display_frames = [] self.raw_footer = None self.theme = None self.service_item_path = None self.service_item_type = None self.editEnabled = False - self.service_frames = [] + self.raw_frames = [] self.uuid = unicode(uuid.uuid1()) def addIcon(self, icon): @@ -92,14 +90,14 @@ class ServiceItem(object): The render method is what generates the frames for the screen. """ log.debug(u'Render called') - self.frames = [] + self.display_frames = [] if self.service_item_type == ServiceItemType.Text: log.debug(u'Formatting slides') if self.theme is None: self.RenderManager.set_override_theme(None) else: self.RenderManager.set_override_theme(self.theme) - for slide in self.service_frames: + for slide in self.raw_frames: before = time.time() formated = self.RenderManager.format_slide(slide[u'raw_slide']) for format in formated: @@ -108,16 +106,16 @@ class ServiceItem(object): for line in format: lines += line + u'\n' title = lines.split(u'\n')[0] - self.frames.append({u'title': title, u'text': lines, + self.display_frames.append({u'title': title, u'text': lines, u'image': frame}) log.info(u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Command: - self.frames = self.service_frames + self.display_frames = self.raw_frames elif self.service_item_type == ServiceItemType.Image: - for slide in self.service_frames: + for slide in self.raw_frames: slide[u'image'] = \ self.RenderManager.resize_image(slide[u'image']) - self.frames = self.service_frames + self.display_frames = self.raw_frames else: log.error(u'Invalid value renderer :%s' % self.service_item_type) @@ -132,19 +130,19 @@ class ServiceItem(object): self.RenderManager.set_override_theme(None) else: self.RenderManager.set_override_theme(self.theme) - format = self.frames[row][u'text'].split(u'\n') + format = self.display_frames[row][u'text'].split(u'\n') frame = self.RenderManager.generate_slide(format, self.raw_footer) return frame - def add_from_image(self, path, frame_title, image): + def add_from_image(self, path, title, image): """ Add an image slide to the service item. ``path`` The directory in which the image file is located. - ``frame_title`` + ``title`` A title for the slide in the service item. ``image`` @@ -152,10 +150,10 @@ class ServiceItem(object): """ self.service_item_type = ServiceItemType.Image self.service_item_path = path - self.service_frames.append( - {u'title': frame_title, u'text': None, u'image': image}) + self.raw_frames.append( + {u'title': title, u'text': None, u'image': image}) - def add_from_text(self, frame_title, raw_slide): + def add_from_text(self, title, raw_slide): """ Add a text slide to the service item. @@ -166,24 +164,27 @@ class ServiceItem(object): The raw text of the slide. """ self.service_item_type = ServiceItemType.Text - frame_title = frame_title.split(u'\n')[0] - self.service_frames.append( - {u'title': frame_title, u'raw_slide': raw_slide}) + title = title.split(u'\n')[0] + self.raw_frames.append( + {u'title': title, u'raw_slide': raw_slide}) - def add_from_command(self, path, frame_title, image): + def add_from_command(self, path, file_name, image): """ Add a slide from a command. - ``frame_title`` + ``path`` The title of the slide in the service item. - ``command`` + ``file_name`` + The title of the slide in the service item. + + ``immage`` The command of/for the slide. """ self.service_item_type = ServiceItemType.Command self.service_item_path = path - self.service_frames.append( - {u'title': frame_title, u'command': None, u'text':None, u'image': image}) + self.raw_frames.append( + {u'title': file_name, u'command': None, u'text':None, u'image': image}) def get_service_repr(self): """ @@ -192,7 +193,7 @@ class ServiceItem(object): """ service_header = { u'name': self.name.lower(), - u'plugin': self.shortname, + u'plugin': self.name, u'theme':self.theme, u'title':self.title, u'icon':self.icon, @@ -202,13 +203,13 @@ class ServiceItem(object): } service_data = [] if self.service_item_type == ServiceItemType.Text: - for slide in self.service_frames: + for slide in self.raw_frames: service_data.append(slide) elif self.service_item_type == ServiceItemType.Image: - for slide in self.service_frames: + for slide in self.raw_frames: service_data.append(slide[u'title']) elif self.service_item_type == ServiceItemType.Command: - for slide in self.service_frames: + for slide in self.raw_frames: service_data.append({u'title':slide[u'title'], u'image':slide[u'image']}) return {u'header': service_header, u'data': service_data} @@ -234,7 +235,7 @@ class ServiceItem(object): self.audit = header[u'audit'] if self.service_item_type == ServiceItemType.Text: for slide in serviceitem[u'serviceitem'][u'data']: - self.service_frames.append(slide) + self.raw_frames.append(slide) elif self.service_item_type == ServiceItemType.Image: for text_image in serviceitem[u'serviceitem'][u'data']: filename = os.path.join(path, text_image) @@ -281,3 +282,6 @@ class ServiceItem(object): def isText(self): return self.service_item_type == ServiceItemType.Text + + def getFrames(self): + return self.display_frames diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index bb39b573e..c1c260a56 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -388,14 +388,14 @@ class ServiceManager(QtGui.QWidget): #Repaint the screen self.ServiceManagerList.clear() for itemcount, item in enumerate(self.serviceItems): - serviceitem = item[u'data'] + serviceitem = item[u'service_item'] treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) treewidgetitem.setText(0,serviceitem.title) treewidgetitem.setIcon(0,serviceitem.iconic_representation) treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) treewidgetitem.setExpanded(item[u'expanded']) - for count, frame in enumerate(serviceitem.frames): + for count, frame in enumerate(serviceitem.getFrames()): treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) text = frame[u'title'] treewidgetitem1.setText(0,text[:40]) @@ -431,12 +431,12 @@ class ServiceManager(QtGui.QWidget): zip = zipfile.ZipFile(unicode(filename), 'w') for item in self.serviceItems: service.append( - {u'serviceitem':item[u'data'].get_service_repr()}) - if item[u'data'].service_item_type == ServiceItemType.Image or \ - item[u'data'].service_item_type == ServiceItemType.Command: - for frame in item[u'data'].frames: + {u'serviceitem':item[u'service_item'].get_service_repr()}) + if item[u'service_item'].service_item_type == ServiceItemType.Image or \ + item[u'service_item'].service_item_type == ServiceItemType.Command: + for frame in item[u'service_item'].frames: path_from = unicode(os.path.join( - item[u'data'].service_item_path, frame[u'title'])) + item[u'service_item'].service_item_path, frame[u'title'])) zip.write(path_from) file = open(servicefile, u'wb') cPickle.dump(service, file) @@ -545,7 +545,7 @@ class ServiceManager(QtGui.QWidget): tempServiceItems = self.serviceItems self.onNewService() for item in tempServiceItems: - self.addServiceItem(item[u'data']) + self.addServiceItem(item[u'service_item']) def addServiceItem(self, item): """ @@ -558,19 +558,19 @@ class ServiceManager(QtGui.QWidget): sitem, count = self.findServiceItem() item.render() if self.remoteEditTriggered: - item.merge(self.serviceItems[sitem][u'data']) - self.serviceItems[sitem][u'data'] = item + item.merge(self.serviceItems[sitem][u'service_item']) + self.serviceItems[sitem][u'service_item'] = item self.remoteEditTriggered = False self.repaintServiceList(sitem + 1, 0) self.parent.LiveController.replaceServiceManagerItem(item) else: if sitem == -1: - self.serviceItems.append({u'data': item, + self.serviceItems.append({u'service_item': item, u'order': len(self.serviceItems) + 1, u'expanded':True}) self.repaintServiceList(len(self.serviceItems) + 1, 0) else: - self.serviceItems.insert(sitem + 1, {u'data': item, + self.serviceItems.insert(sitem + 1, {u'service_item': item, u'order': len(self.serviceItems)+1, u'expanded':True}) self.repaintServiceList(sitem + 1, 0) @@ -582,7 +582,7 @@ class ServiceManager(QtGui.QWidget): """ item, count = self.findServiceItem() self.parent.PreviewController.addServiceManagerItem( - self.serviceItems[item][u'data'], count) + self.serviceItems[item][u'service_item'], count) def makeLive(self): """ @@ -590,17 +590,17 @@ class ServiceManager(QtGui.QWidget): """ item, count = self.findServiceItem() self.parent.LiveController.addServiceManagerItem( - self.serviceItems[item][u'data'], count) + self.serviceItems[item][u'service_item'], count) def remoteEdit(self): """ Posts a remote edit message to a plugin to allow item to be edited. """ item, count = self.findServiceItem() - if self.serviceItems[item][u'data'].editEnabled: + if self.serviceItems[item][u'service_item'].editEnabled: self.remoteEditTriggered = True - Receiver().send_message(u'%s_edit' % self.serviceItems[item][u'data'].name, u'L:%s' % - self.serviceItems[item][u'data'].editId ) + Receiver().send_message(u'%s_edit' % self.serviceItems[item][u'service_item'].name, u'L:%s' % + self.serviceItems[item][u'service_item'].editId ) def onRemoteEditClear(self): self.remoteEditTriggered = False @@ -698,5 +698,5 @@ class ServiceManager(QtGui.QWidget): def onThemeChangeAction(self): theme = unicode(self.sender().text()) item, count = self.findServiceItem() - self.serviceItems[item][u'data'].theme = theme + self.serviceItems[item][u'service_item'].theme = theme self.regenerateServiceItems() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 88e81bfae..e6ef7014b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -457,7 +457,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.clear() self.PreviewListWidget.setRowCount(0) self.PreviewListWidget.setColumnWidth(0, width) - for framenumber, frame in enumerate(self.serviceitem.frames): + for framenumber, frame in enumerate(self.serviceitem.getFrames()): self.PreviewListWidget.setRowCount( self.PreviewListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem() @@ -476,7 +476,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.setItem(framenumber, 0, item) if slide_height != 0: self.PreviewListWidget.setRowHeight(framenumber, slide_height) - if self.serviceitem.frames[0][u'text']: + if self.serviceitem.getFrames()[0][u'text']: self.PreviewListWidget.resizeRowsToContents() self.PreviewListWidget.setColumnWidth( 0, self.PreviewListWidget.viewport().size().width()) @@ -528,7 +528,7 @@ class SlideController(QtGui.QWidget): if self.isLive: self.updatePreview() else: - frame = self.serviceitem.frames[row][u'image'] + frame = self.serviceitem.getFrames()[row][u'image'] before = time.time() if frame is None: frame = self.serviceitem.render_individual(row) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index cb4bfd320..f0b4785ae 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -136,18 +136,18 @@ class PresentationMediaItem(MediaManagerItem): return False service_item.title = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) - cont = self.controllers[service_item.shortname] + controller = self.controllers[service_item.shortname] for item in items: bitem = self.ListView.item(item.row()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) (path, name) = os.path.split(filename) - cont.store_filename(filename) - if cont.get_slide_preview_file(1) is None: - cont.load_presentation(filename) + controller.store_filename(filename) + if controller.get_slide_preview_file(1) is None: + controller.load_presentation(filename) i = 1 - img = cont.get_slide_preview_file(i) + img = controller.get_slide_preview_file(i) while img: service_item.add_from_command(path, name, img) i = i + 1 - img = cont.get_slide_preview_file(i) + img = controller.get_slide_preview_file(i) return True From ad6abb1e9c6861e2cbfcbe106a4b3bbbf49740c8 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 09:02:30 +0000 Subject: [PATCH 12/23] ServiceItem cleanup - hide lists --- openlp/core/lib/serviceitem.py | 20 +++++++++++++------- openlp/core/ui/slidecontroller.py | 13 +++++++------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index d6b1f0abf..45691deb4 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -101,13 +101,11 @@ class ServiceItem(object): before = time.time() formated = self.RenderManager.format_slide(slide[u'raw_slide']) for format in formated: - frame = None lines = u'' for line in format: lines += line + u'\n' title = lines.split(u'\n')[0] - self.display_frames.append({u'title': title, u'text': lines, - u'image': frame}) + self.display_frames.append({u'title': title, u'text': lines}) log.info(u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Command: self.display_frames = self.raw_frames @@ -115,7 +113,6 @@ class ServiceItem(object): for slide in self.raw_frames: slide[u'image'] = \ self.RenderManager.resize_image(slide[u'image']) - self.display_frames = self.raw_frames else: log.error(u'Invalid value renderer :%s' % self.service_item_type) @@ -151,7 +148,7 @@ class ServiceItem(object): self.service_item_type = ServiceItemType.Image self.service_item_path = path self.raw_frames.append( - {u'title': title, u'text': None, u'image': image}) + {u'title': title, u'image': image}) def add_from_text(self, title, raw_slide): """ @@ -184,7 +181,7 @@ class ServiceItem(object): self.service_item_type = ServiceItemType.Command self.service_item_path = path self.raw_frames.append( - {u'title': file_name, u'command': None, u'text':None, u'image': image}) + {u'title': file_name, u'image': image}) def get_service_repr(self): """ @@ -284,4 +281,13 @@ class ServiceItem(object): return self.service_item_type == ServiceItemType.Text def getFrames(self): - return self.display_frames + if self.service_item_type == ServiceItemType.Text: + return self.display_frames + else: + return self.raw_frames + + def get_rendered_frame(self, row): + if self.service_item_type == ServiceItemType.Text: + return self.render_individual(row) + else: + return self.raw_frames[row][u'image'] diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e6ef7014b..8ec011800 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -364,7 +364,7 @@ class SlideController(QtGui.QWidget): self.Songbar.setVisible(True) elif item.isImage(): #Not sensible to allow loops with 1 frame - if len(item.frames) > 1: + if len(item.getFrames()) > 1: self.Toolbar.makeWidgetsVisible(self.image_list) elif item.isMedia(): self.Toolbar.setVisible(False) @@ -463,7 +463,7 @@ class SlideController(QtGui.QWidget): item = QtGui.QTableWidgetItem() slide_height = 0 #It is a Image - if frame[u'text'] is None: + if not self.serviceitem.isText(): label = QtGui.QLabel() label.setMargin(4) pixmap = self.parent.RenderManager.resize_image(frame[u'image']) @@ -476,7 +476,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.setItem(framenumber, 0, item) if slide_height != 0: self.PreviewListWidget.setRowHeight(framenumber, slide_height) - if self.serviceitem.getFrames()[0][u'text']: + if self.serviceitem.isText(): self.PreviewListWidget.resizeRowsToContents() self.PreviewListWidget.setColumnWidth( 0, self.PreviewListWidget.viewport().size().width()) @@ -528,10 +528,11 @@ class SlideController(QtGui.QWidget): if self.isLive: self.updatePreview() else: - frame = self.serviceitem.getFrames()[row][u'image'] + #frame = self.serviceitem.getFrames()[row][u'image'] before = time.time() - if frame is None: - frame = self.serviceitem.render_individual(row) + #if frame is None: + #frame = self.serviceitem.render_individual(row) + frame = self.serviceitem.get_rendered_frame(row) self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: From 02ad0595d7a53c9b36f9d2938473ba29aed43c52 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 09:06:25 +0000 Subject: [PATCH 13/23] ServiceItem cleanup - hide lists 2 --- openlp/core/lib/serviceitem.py | 53 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 45691deb4..0a00d57cb 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -63,15 +63,14 @@ class ServiceItem(object): self.audit = u'' self.items = [] self.iconic_representation = None - self.raw_slides = None - self.display_frames = [] self.raw_footer = None self.theme = None self.service_item_path = None self.service_item_type = None self.editEnabled = False - self.raw_frames = [] - self.uuid = unicode(uuid.uuid1()) + self._raw_frames = [] + self._display_frames = [] + self._uuid = unicode(uuid.uuid1()) def addIcon(self, icon): """ @@ -90,14 +89,14 @@ class ServiceItem(object): The render method is what generates the frames for the screen. """ log.debug(u'Render called') - self.display_frames = [] + self._display_frames = [] if self.service_item_type == ServiceItemType.Text: log.debug(u'Formatting slides') if self.theme is None: self.RenderManager.set_override_theme(None) else: self.RenderManager.set_override_theme(self.theme) - for slide in self.raw_frames: + for slide in self._raw_frames: before = time.time() formated = self.RenderManager.format_slide(slide[u'raw_slide']) for format in formated: @@ -105,12 +104,12 @@ class ServiceItem(object): for line in format: lines += line + u'\n' title = lines.split(u'\n')[0] - self.display_frames.append({u'title': title, u'text': lines}) + self._display_frames.append({u'title': title, u'text': lines}) log.info(u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Command: - self.display_frames = self.raw_frames + self._display_frames = self._raw_frames elif self.service_item_type == ServiceItemType.Image: - for slide in self.raw_frames: + for slide in self._raw_frames: slide[u'image'] = \ self.RenderManager.resize_image(slide[u'image']) else: @@ -127,7 +126,7 @@ class ServiceItem(object): self.RenderManager.set_override_theme(None) else: self.RenderManager.set_override_theme(self.theme) - format = self.display_frames[row][u'text'].split(u'\n') + format = self._display_frames[row][u'text'].split(u'\n') frame = self.RenderManager.generate_slide(format, self.raw_footer) return frame @@ -147,7 +146,7 @@ class ServiceItem(object): """ self.service_item_type = ServiceItemType.Image self.service_item_path = path - self.raw_frames.append( + self._raw_frames.append( {u'title': title, u'image': image}) def add_from_text(self, title, raw_slide): @@ -162,7 +161,7 @@ class ServiceItem(object): """ self.service_item_type = ServiceItemType.Text title = title.split(u'\n')[0] - self.raw_frames.append( + self._raw_frames.append( {u'title': title, u'raw_slide': raw_slide}) def add_from_command(self, path, file_name, image): @@ -180,7 +179,7 @@ class ServiceItem(object): """ self.service_item_type = ServiceItemType.Command self.service_item_path = path - self.raw_frames.append( + self._raw_frames.append( {u'title': file_name, u'image': image}) def get_service_repr(self): @@ -200,13 +199,13 @@ class ServiceItem(object): } service_data = [] if self.service_item_type == ServiceItemType.Text: - for slide in self.raw_frames: + for slide in self._raw_frames: service_data.append(slide) elif self.service_item_type == ServiceItemType.Image: - for slide in self.raw_frames: + for slide in self._raw_frames: service_data.append(slide[u'title']) elif self.service_item_type == ServiceItemType.Command: - for slide in self.raw_frames: + for slide in self._raw_frames: service_data.append({u'title':slide[u'title'], u'image':slide[u'image']}) return {u'header': service_header, u'data': service_data} @@ -232,7 +231,7 @@ class ServiceItem(object): self.audit = header[u'audit'] if self.service_item_type == ServiceItemType.Text: for slide in serviceitem[u'serviceitem'][u'data']: - self.raw_frames.append(slide) + self._raw_frames.append(slide) elif self.service_item_type == ServiceItemType.Image: for text_image in serviceitem[u'serviceitem'][u'data']: filename = os.path.join(path, text_image) @@ -245,11 +244,11 @@ class ServiceItem(object): def merge(self, other): """ - Updates the uuid with the value from the original one - The uuid is unique for a give service item but this allows one to + Updates the _uuid with the value from the original one + The _uuid is unique for a give service item but this allows one to replace an original version. """ - self.uuid = other.uuid + self._uuid = other._uuid def __eq__(self, other): """ @@ -257,13 +256,13 @@ class ServiceItem(object): """ if not other: return False - return self.uuid == other.uuid + return self._uuid == other._uuid def __ne__(self, other): """ Confirms the service items are not for the same instance """ - return self.uuid != other.uuid + return self._uuid != other._uuid def isSong(self): return self.name == u'Songs' @@ -282,12 +281,16 @@ class ServiceItem(object): def getFrames(self): if self.service_item_type == ServiceItemType.Text: - return self.display_frames + return self._display_frames else: - return self.raw_frames + return self._raw_frames def get_rendered_frame(self, row): + """ + Returns the correct frame for a given list and + renders it if required. + """ if self.service_item_type == ServiceItemType.Text: return self.render_individual(row) else: - return self.raw_frames[row][u'image'] + return self._raw_frames[row][u'image'] From 0aca1665be96c79fbbc443548cf8fbdf53294bfd Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 09:37:54 +0000 Subject: [PATCH 14/23] ServiceItem cleanup - remove CommandItem --- openlp/core/lib/serviceitem.py | 8 +++- openlp/core/ui/slidecontroller.py | 73 +++++++++++++++---------------- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 0a00d57cb..4896f365c 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -106,8 +106,6 @@ class ServiceItem(object): title = lines.split(u'\n')[0] self._display_frames.append({u'title': title, u'text': lines}) log.info(u'Formatting took %4s' % (time.time() - before)) - elif self.service_item_type == ServiceItemType.Command: - self._display_frames = self._raw_frames elif self.service_item_type == ServiceItemType.Image: for slide in self._raw_frames: slide[u'image'] = \ @@ -294,3 +292,9 @@ class ServiceItem(object): return self.render_individual(row) else: return self._raw_frames[row][u'image'] + + def get_frame_title(self, row): + """ + Returns the title of the raw frame + """ + return self._raw_frames[row][u'title'] diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8ec011800..138cdaae8 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -86,7 +86,7 @@ class SlideController(QtGui.QWidget): u'Edit Song', ] self.timer_id = 0 - self.commandItem = None + self.wasCommandItem = False self.songEdit = False self.row = 0 self.Panel = QtGui.QWidget(parent.ControlSplitter) @@ -293,7 +293,7 @@ class SlideController(QtGui.QWidget): Handle changes of width from the splitter between the live and preview controller. Event only issues when changes have finished """ - if not self.commandItem: + if self.wasCommandItem: return width = self.parent.ControlSplitter.sizes()[self.split] height = width * self.parent.RenderManager.screen_ratio @@ -393,14 +393,15 @@ class SlideController(QtGui.QWidget): """ log.debug(u'addServiceItem') #If old item was a command tell it to stop - if self.commandItem and self.commandItem.isCommand(): + if self.wasCommandItem: self.onMediaStop() - self.commandItem = item + self.wasCommandItem = False before = time.time() item.render() log.log(15, u'Rendering took %4s' % (time.time() - before)) self.enableToolBar(item) if item.isCommand(): + self.wasCommandItem = True if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, @@ -418,7 +419,7 @@ class SlideController(QtGui.QWidget): """ Replacement item following a remote edit """ - if item.__eq__(self.commandItem): + if item.__eq__(self.serviceItem): self.addServiceManagerItem(item, self.PreviewListWidget.currentRow()) def addServiceManagerItem(self, item, slideno): @@ -429,11 +430,12 @@ class SlideController(QtGui.QWidget): """ log.debug(u'addServiceManagerItem') #If old item was a command tell it to stop - if self.commandItem and self.commandItem.isCommand(): + if self.wasCommandItem: self.onMediaStop() - self.commandItem = item + self.wasCommandItem = False self.enableToolBar(item) if item.isCommand(): + self.wasCommandItem = False if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, @@ -453,17 +455,17 @@ class SlideController(QtGui.QWidget): #Set pointing cursor when we have somthing to point at self.PreviewListWidget.setCursor(QtCore.Qt.PointingHandCursor) before = time.time() - self.serviceitem = serviceitem + self.serviceItem = serviceitem self.PreviewListWidget.clear() self.PreviewListWidget.setRowCount(0) self.PreviewListWidget.setColumnWidth(0, width) - for framenumber, frame in enumerate(self.serviceitem.getFrames()): + for framenumber, frame in enumerate(self.serviceItem.getFrames()): self.PreviewListWidget.setRowCount( self.PreviewListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem() slide_height = 0 #It is a Image - if not self.serviceitem.isText(): + if not self.serviceItem.isText(): label = QtGui.QLabel() label.setMargin(4) pixmap = self.parent.RenderManager.resize_image(frame[u'image']) @@ -476,7 +478,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.setItem(framenumber, 0, item) if slide_height != 0: self.PreviewListWidget.setRowHeight(framenumber, slide_height) - if self.serviceitem.isText(): + if self.serviceItem.isText(): self.PreviewListWidget.resizeRowsToContents() self.PreviewListWidget.setColumnWidth( 0, self.PreviewListWidget.viewport().size().width()) @@ -487,8 +489,8 @@ class SlideController(QtGui.QWidget): self.onSlideSelected() self.PreviewListWidget.setFocus() log.log(15, u'Display Rendering took %4s' % (time.time() - before)) - if self.serviceitem.audit and self.isLive: - Receiver().send_message(u'songusage_live', self.serviceitem.audit) + if self.serviceItem.audit and self.isLive: + Receiver().send_message(u'songusage_live', self.serviceItem.audit) log.debug(u'displayServiceManagerItems End') #Screen event methods @@ -496,8 +498,8 @@ class SlideController(QtGui.QWidget): """ Go to the first slide. """ - if self.commandItem and self.commandItem.isCommand(): - Receiver().send_message(u'%s_first'% self.commandItem.name.lower()) + if self.serviceItem.isCommand(): + Receiver().send_message(u'%s_first'% self.serviceItem.name.lower()) self.updatePreview() else: self.PreviewListWidget.selectRow(0) @@ -507,11 +509,11 @@ class SlideController(QtGui.QWidget): """ Blank the screen. """ - if self.commandItem and self.commandItem.isCommand(): + if self.serviceItem.isCommand(): if blanked: - Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) + Receiver().send_message(u'%s_blank'% self.serviceItem.name.lower()) else: - Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower()) + Receiver().send_message(u'%s_unblank'% self.serviceItem.name.lower()) else: self.parent.mainDisplay.blankDisplay() @@ -523,16 +525,13 @@ class SlideController(QtGui.QWidget): row = self.PreviewListWidget.currentRow() self.row = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): - if self.commandItem.isCommand(): - Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row]) + if self.serviceItem.isCommand(): + Receiver().send_message(u'%s_slide'% self.serviceItem.name.lower(), [row]) if self.isLive: self.updatePreview() else: - #frame = self.serviceitem.getFrames()[row][u'image'] before = time.time() - #if frame is None: - #frame = self.serviceitem.render_individual(row) - frame = self.serviceitem.get_rendered_frame(row) + frame = self.serviceItem.get_rendered_frame(row) self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: @@ -569,8 +568,8 @@ class SlideController(QtGui.QWidget): """ Go to the next slide. """ - if self.commandItem and self.commandItem.isCommand(): - Receiver().send_message(u'%s_next'% self.commandItem.name.lower()) + if self.serviceItem.isCommand(): + Receiver().send_message(u'%s_next'% self.serviceItem.name.lower()) self.updatePreview() else: row = self.PreviewListWidget.currentRow() + 1 @@ -583,9 +582,9 @@ class SlideController(QtGui.QWidget): """ Go to the previous slide. """ - if self.commandItem and self.commandItem.isCommand(): + if self.serviceItem.isCommand(): Receiver().send_message( - u'%s_previous'% self.commandItem.name.lower()) + u'%s_previous'% self.serviceItem.name.lower()) self.updatePreview() else: row = self.PreviewListWidget.currentRow() - 1 @@ -598,8 +597,8 @@ class SlideController(QtGui.QWidget): """ Go to the last slide. """ - if self.commandItem and self.commandItem.isCommand(): - Receiver().send_message(u'%s_last'% self.commandItem.name.lower()) + if self.serviceItem.isCommand(): + Receiver().send_message(u'%s_last'% self.serviceItem.name.lower()) self.updatePreview() else: self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) @@ -628,8 +627,8 @@ class SlideController(QtGui.QWidget): def onEditSong(self): self.songEdit = True - Receiver().send_message(u'%s_edit' % self.commandItem.name, u'P:%s' % - self.commandItem.editId ) + Receiver().send_message(u'%s_edit' % self.serviceItem.name, u'P:%s' % + self.serviceItem.editId ) def onGoLive(self): """ @@ -638,24 +637,24 @@ class SlideController(QtGui.QWidget): row = self.PreviewListWidget.currentRow() if row > -1 and row < self.PreviewListWidget.rowCount(): self.parent.LiveController.addServiceManagerItem( - self.commandItem, row) + self.serviceItem, row) def onMediaStart(self, item): self.mediaObject.stop() self.mediaObject.clearQueue() - file = os.path.join(item.service_item_path, item.service_frames[0][u'title']) + file = os.path.join(item.service_item_path, item.get_frame_title(0)) self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) self.onMediaPlay() def onMediaPause(self): if self.isLive: - Receiver().send_message(u'%s_pause'% self.commandItem.name.lower()) + Receiver().send_message(u'%s_pause'% self.serviceItem.name.lower()) else: self.mediaObject.pause() def onMediaPlay(self): if self.isLive: - Receiver().send_message(u'%s_play'% self.commandItem.name.lower(), self.isLive) + Receiver().send_message(u'%s_play'% self.serviceItem.name.lower(), self.isLive) else: self.SlidePreview.hide() self.video.show() @@ -663,7 +662,7 @@ class SlideController(QtGui.QWidget): def onMediaStop(self): if self.isLive: - Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) + Receiver().send_message(u'%s_stop'% self.serviceItem.name.lower()) else: self.mediaObject.stop() self.video.hide() From b1766d7ee47b9c39fc44094e071f426a2a9ebabf Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 09:41:11 +0000 Subject: [PATCH 15/23] ServiceItem cleanup - sort out name format errors --- openlp/core/lib/serviceitem.py | 16 +++++----- openlp/core/ui/servicemanager.py | 8 ++--- openlp/core/ui/slidecontroller.py | 42 +++++++++++++------------- openlp/plugins/custom/lib/mediaitem.py | 4 +-- openlp/plugins/songs/lib/mediaitem.py | 3 +- 5 files changed, 36 insertions(+), 37 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 4896f365c..92a24d173 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -67,7 +67,7 @@ class ServiceItem(object): self.theme = None self.service_item_path = None self.service_item_type = None - self.editEnabled = False + self.edit_enabled = False self._raw_frames = [] self._display_frames = [] self._uuid = unicode(uuid.uuid1()) @@ -262,22 +262,22 @@ class ServiceItem(object): """ return self._uuid != other._uuid - def isSong(self): + def is_song(self): return self.name == u'Songs' - def isMedia(self): + def is_media(self): return self.name.lower() == u'media' - def isCommand(self): + def is_command(self): return self.service_item_type == ServiceItemType.Command - def isImage(self): + def is_image(self): return self.service_item_type == ServiceItemType.Image - def isText(self): + def is_text(self): return self.service_item_type == ServiceItemType.Text - def getFrames(self): + def get_frames(self): if self.service_item_type == ServiceItemType.Text: return self._display_frames else: @@ -297,4 +297,4 @@ class ServiceItem(object): """ Returns the title of the raw frame """ - return self._raw_frames[row][u'title'] + return self._raw_frames[row][u'title'] \ No newline at end of file diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index c1c260a56..3e438d918 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -48,7 +48,7 @@ class ServiceManagerList(QtGui.QTreeWidget): # else: # pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0] # serviceItem = self.parent.serviceItems[pos - 1] -# if serviceItem[u'data'].editEnabled: +# if serviceItem[u'data'].edit_enabled: # self.parent.editAction.setVisible(True) # else: # self.parent.editAction.setVisible(False) @@ -395,7 +395,7 @@ class ServiceManager(QtGui.QWidget): treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) treewidgetitem.setExpanded(item[u'expanded']) - for count, frame in enumerate(serviceitem.getFrames()): + for count, frame in enumerate(serviceitem.get_frames()): treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) text = frame[u'title'] treewidgetitem1.setText(0,text[:40]) @@ -597,7 +597,7 @@ class ServiceManager(QtGui.QWidget): Posts a remote edit message to a plugin to allow item to be edited. """ item, count = self.findServiceItem() - if self.serviceItems[item][u'service_item'].editEnabled: + if self.serviceItems[item][u'service_item'].edit_enabled: self.remoteEditTriggered = True Receiver().send_message(u'%s_edit' % self.serviceItems[item][u'service_item'].name, u'L:%s' % self.serviceItems[item][u'service_item'].editId ) @@ -699,4 +699,4 @@ class ServiceManager(QtGui.QWidget): theme = unicode(self.sender().text()) item, count = self.findServiceItem() self.serviceItems[item][u'service_item'].theme = theme - self.regenerateServiceItems() + self.regenerateServiceItems() \ No newline at end of file diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 138cdaae8..396f0fa7b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -345,9 +345,9 @@ class SlideController(QtGui.QWidget): self.Songbar.setVisible(False) self.Mediabar.setVisible(False) self.Toolbar.makeWidgetsInvisible(self.image_list) - if item.isText(): + if item.is_text(): self.Toolbar.makeWidgetsInvisible(self.image_list) - if item.isSong() and \ + if item.is_song() and \ str_to_bool(self.songsconfig.get_config(u'display songbar', True)): for action in self.Songbar.actions: self.Songbar.actions[action].setVisible(False) @@ -362,11 +362,11 @@ class SlideController(QtGui.QWidget): #More than 20 verses hard luck pass self.Songbar.setVisible(True) - elif item.isImage(): + elif item.is_image(): #Not sensible to allow loops with 1 frame - if len(item.getFrames()) > 1: + if len(item.get_frames()) > 1: self.Toolbar.makeWidgetsVisible(self.image_list) - elif item.isMedia(): + elif item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio) @@ -378,9 +378,9 @@ class SlideController(QtGui.QWidget): self.Toolbar.setVisible(True) self.Mediabar.setVisible(False) self.Toolbar.makeWidgetsInvisible(self.song_edit_list) - if item.editEnabled and item.fromPlugin: + if item.edit_enabled and item.fromPlugin: self.Toolbar.makeWidgetsVisible(self.song_edit_list) - elif item.isMedia(): + elif item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) self.volumeSlider.setAudioOutput(self.audio) @@ -400,14 +400,14 @@ class SlideController(QtGui.QWidget): item.render() log.log(15, u'Rendering took %4s' % (time.time() - before)) self.enableToolBar(item) - if item.isCommand(): + if item.is_command(): self.wasCommandItem = True if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, item.service_frames[0][u'title'], self.isLive]) else: - if item.isMedia(): + if item.is_media(): self.onMediaStart(item) slideno = 0 if self.songEdit: @@ -434,14 +434,14 @@ class SlideController(QtGui.QWidget): self.onMediaStop() self.wasCommandItem = False self.enableToolBar(item) - if item.isCommand(): + if item.is_command(): self.wasCommandItem = False if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, item.service_frames[0][u'title'], slideno, self.isLive]) else: - if item.isMedia(): + if item.is_media(): self.onMediaStart(item) self.displayServiceManagerItems(item, slideno) @@ -459,13 +459,13 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.clear() self.PreviewListWidget.setRowCount(0) self.PreviewListWidget.setColumnWidth(0, width) - for framenumber, frame in enumerate(self.serviceItem.getFrames()): + for framenumber, frame in enumerate(self.serviceItem.get_frames()): self.PreviewListWidget.setRowCount( self.PreviewListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem() slide_height = 0 #It is a Image - if not self.serviceItem.isText(): + if not self.serviceItem.is_text(): label = QtGui.QLabel() label.setMargin(4) pixmap = self.parent.RenderManager.resize_image(frame[u'image']) @@ -478,7 +478,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.setItem(framenumber, 0, item) if slide_height != 0: self.PreviewListWidget.setRowHeight(framenumber, slide_height) - if self.serviceItem.isText(): + if self.serviceItem.is_text(): self.PreviewListWidget.resizeRowsToContents() self.PreviewListWidget.setColumnWidth( 0, self.PreviewListWidget.viewport().size().width()) @@ -498,7 +498,7 @@ class SlideController(QtGui.QWidget): """ Go to the first slide. """ - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): Receiver().send_message(u'%s_first'% self.serviceItem.name.lower()) self.updatePreview() else: @@ -509,7 +509,7 @@ class SlideController(QtGui.QWidget): """ Blank the screen. """ - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): if blanked: Receiver().send_message(u'%s_blank'% self.serviceItem.name.lower()) else: @@ -525,7 +525,7 @@ class SlideController(QtGui.QWidget): row = self.PreviewListWidget.currentRow() self.row = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): Receiver().send_message(u'%s_slide'% self.serviceItem.name.lower(), [row]) if self.isLive: self.updatePreview() @@ -568,7 +568,7 @@ class SlideController(QtGui.QWidget): """ Go to the next slide. """ - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): Receiver().send_message(u'%s_next'% self.serviceItem.name.lower()) self.updatePreview() else: @@ -582,7 +582,7 @@ class SlideController(QtGui.QWidget): """ Go to the previous slide. """ - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): Receiver().send_message( u'%s_previous'% self.serviceItem.name.lower()) self.updatePreview() @@ -597,7 +597,7 @@ class SlideController(QtGui.QWidget): """ Go to the last slide. """ - if self.serviceItem.isCommand(): + if self.serviceItem.is_command(): Receiver().send_message(u'%s_last'% self.serviceItem.name.lower()) self.updatePreview() else: @@ -667,4 +667,4 @@ class SlideController(QtGui.QWidget): self.mediaObject.stop() self.video.hide() self.SlidePreview.clear() - self.SlidePreview.show() + self.SlidePreview.show() \ No newline at end of file diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 8b86ab290..dbd7db643 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -145,7 +145,7 @@ class CustomMediaItem(MediaManagerItem): customSlide = self.parent.custommanager.get_custom(item_id) title = customSlide.title credit = customSlide.credits - service_item.editEnabled = True + service_item.edit_enabled = True service_item.editId = item_id theme = customSlide.theme_name if len(theme) is not 0 : @@ -159,4 +159,4 @@ class CustomMediaItem(MediaManagerItem): for slide in raw_slides: service_item.add_from_text(slide[:30], slide) service_item.raw_footer = raw_footer - return True + return True \ No newline at end of file diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index f69faed8b..000f752af 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -287,7 +287,7 @@ class SongMediaItem(MediaManagerItem): item_id = self.remoteSong song = self.parent.songmanager.get_song(item_id) service_item.theme = song.theme_name - service_item.editEnabled = True + service_item.edit_enabled = True service_item.editId = item_id service_item.verse_order = song.verse_order if song.lyrics.startswith(u' Date: Sat, 14 Nov 2009 10:51:58 +0000 Subject: [PATCH 16/23] ServiceItem cleanup - fix media playing --- openlp/core/lib/serviceitem.py | 4 ++-- openlp/core/ui/slidecontroller.py | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 92a24d173..bf1944d09 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -293,8 +293,8 @@ class ServiceItem(object): else: return self._raw_frames[row][u'image'] - def get_frame_title(self, row): + def get_frame_title(self, row=0): """ Returns the title of the raw frame """ - return self._raw_frames[row][u'title'] \ No newline at end of file + return self._raw_frames[row][u'title'] diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 396f0fa7b..95ab99465 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -88,7 +88,7 @@ class SlideController(QtGui.QWidget): self.timer_id = 0 self.wasCommandItem = False self.songEdit = False - self.row = 0 + self.selectedRow = 0 self.Panel = QtGui.QWidget(parent.ControlSplitter) # Layout for holding panel self.PanelLayout = QtGui.QVBoxLayout(self.Panel) @@ -404,14 +404,14 @@ class SlideController(QtGui.QWidget): self.wasCommandItem = True if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.shortname, item.service_item_path, - item.service_frames[0][u'title'], self.isLive]) + [item.title, item.service_item_path, + item.get_frame_title(), self.isLive]) else: if item.is_media(): self.onMediaStart(item) slideno = 0 if self.songEdit: - slideno = self.row + slideno = self.selectedRow self.songEdit = False self.displayServiceManagerItems(item, slideno) @@ -438,7 +438,7 @@ class SlideController(QtGui.QWidget): self.wasCommandItem = False if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.shortname, item.service_item_path, + [item.name, item.service_item_path, item.service_frames[0][u'title'], slideno, self.isLive]) else: if item.is_media(): @@ -523,7 +523,7 @@ class SlideController(QtGui.QWidget): if this is the Live Controller also display on the screen """ row = self.PreviewListWidget.currentRow() - self.row = 0 + self.selectedRow = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): if self.serviceItem.is_command(): Receiver().send_message(u'%s_slide'% self.serviceItem.name.lower(), [row]) @@ -536,7 +536,7 @@ class SlideController(QtGui.QWidget): log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: self.parent.mainDisplay.frameView(frame) - self.row = row + self.selectedRow = row def onSlideChange(self, row): """ @@ -642,7 +642,7 @@ class SlideController(QtGui.QWidget): def onMediaStart(self, item): self.mediaObject.stop() self.mediaObject.clearQueue() - file = os.path.join(item.service_item_path, item.get_frame_title(0)) + file = os.path.join(item.service_item_path, item.get_frame_title()) self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) self.onMediaPlay() @@ -667,4 +667,4 @@ class SlideController(QtGui.QWidget): self.mediaObject.stop() self.video.hide() self.SlidePreview.clear() - self.SlidePreview.show() \ No newline at end of file + self.SlidePreview.show() From 3ecec95aca384909557d1c4163e37695b60db5ae Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 11:44:06 +0000 Subject: [PATCH 17/23] ServiceItem cleanup - remove code duplication --- openlp/core/ui/slidecontroller.py | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 95ab99465..93dc8ad60 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -387,33 +387,18 @@ class SlideController(QtGui.QWidget): def addServiceItem(self, item): """ - Method to install the service item into the controller and - request the correct the toolbar of the plugin + Method to install the service item into the controller Called by plugins """ log.debug(u'addServiceItem') - #If old item was a command tell it to stop - if self.wasCommandItem: - self.onMediaStop() - self.wasCommandItem = False before = time.time() item.render() log.log(15, u'Rendering took %4s' % (time.time() - before)) - self.enableToolBar(item) - if item.is_command(): - self.wasCommandItem = True - if self.isLive: - Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.title, item.service_item_path, - item.get_frame_title(), self.isLive]) - else: - if item.is_media(): - self.onMediaStart(item) slideno = 0 if self.songEdit: slideno = self.selectedRow self.songEdit = False - self.displayServiceManagerItems(item, slideno) + self.addServiceManagerItem(item, slideno) def replaceServiceManagerItem(self, item): """ From 26b9274604327b68857c0a786152dfc7223cd924 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 11:47:10 +0000 Subject: [PATCH 18/23] ServiceItem cleanup - fix presentation issues --- openlp/core/ui/slidecontroller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 93dc8ad60..d3bb09988 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -423,8 +423,8 @@ class SlideController(QtGui.QWidget): self.wasCommandItem = False if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.name, item.service_item_path, - item.service_frames[0][u'title'], slideno, self.isLive]) + [item.title, item.service_item_path, + item.get_frame_title(), slideno, self.isLive]) else: if item.is_media(): self.onMediaStart(item) From 78fd8efdf70713a9279bbf852e697d3b6d8235e0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 14 Nov 2009 12:24:27 +0000 Subject: [PATCH 19/23] Remove unneed varables Move code into serviceItem Fix up splitter code --- openlp/core/lib/serviceitem.py | 6 +++++- openlp/core/ui/slidecontroller.py | 19 +++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index bf1944d09..69983764d 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -29,7 +29,7 @@ import uuid from PyQt4 import QtGui -from openlp.core.lib import buildIcon +from openlp.core.lib import buildIcon, Receiver class ServiceItemType(object): """ @@ -298,3 +298,7 @@ class ServiceItem(object): Returns the title of the raw frame """ return self._raw_frames[row][u'title'] + + def request_audit(self): + if self.audit: + Receiver.send_message(u'songusage_live', self.audit) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d3bb09988..54fdf23ea 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -86,9 +86,9 @@ class SlideController(QtGui.QWidget): u'Edit Song', ] self.timer_id = 0 - self.wasCommandItem = False self.songEdit = False self.selectedRow = 0 + self.serviceItem = None self.Panel = QtGui.QWidget(parent.ControlSplitter) # Layout for holding panel self.PanelLayout = QtGui.QVBoxLayout(self.Panel) @@ -293,15 +293,12 @@ class SlideController(QtGui.QWidget): Handle changes of width from the splitter between the live and preview controller. Event only issues when changes have finished """ - if self.wasCommandItem: - return width = self.parent.ControlSplitter.sizes()[self.split] height = width * self.parent.RenderManager.screen_ratio self.PreviewListWidget.setColumnWidth(0, width) - for framenumber, frame in enumerate(self.commandItem.frames): - if frame[u'text']: - return - self.PreviewListWidget.setRowHeight(framenumber, height) + if self.serviceItem and not self.serviceItem.is_text(): + for framenumber, frame in enumerate(self.serviceItem.get_frames()): + self.PreviewListWidget.setRowHeight(framenumber, height) def trackSplitter(self, tab, pos): """ @@ -415,12 +412,10 @@ class SlideController(QtGui.QWidget): """ log.debug(u'addServiceManagerItem') #If old item was a command tell it to stop - if self.wasCommandItem: + if self.serviceItem and self.serviceItem.is_command(): self.onMediaStop() - self.wasCommandItem = False self.enableToolBar(item) if item.is_command(): - self.wasCommandItem = False if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.title, item.service_item_path, @@ -474,8 +469,8 @@ class SlideController(QtGui.QWidget): self.onSlideSelected() self.PreviewListWidget.setFocus() log.log(15, u'Display Rendering took %4s' % (time.time() - before)) - if self.serviceItem.audit and self.isLive: - Receiver().send_message(u'songusage_live', self.serviceItem.audit) + if self.isLive: + self.serviceItem.request_audit() log.debug(u'displayServiceManagerItems End') #Screen event methods From 4168b74ddf24f5711d8694078ea942230f47650c Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 15 Nov 2009 09:06:04 +0200 Subject: [PATCH 20/23] Updated version.txt bzr-revno: 672 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 5c1a24345..765bbb703 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.9.0-670 +1.9.0-672 From f9f4cc2518a0e32f5ca750676e09872da8d6a479 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 15 Nov 2009 07:07:40 +0000 Subject: [PATCH 21/23] Renderer cleanups and fixes --- openlp/core/lib/rendermanager.py | 14 +++++++------- openlp/core/lib/serviceitem.py | 2 +- openlp/core/ui/slidecontroller.py | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index d35495dbc..034abff49 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -193,17 +193,17 @@ class RenderManager(object): self.renderer.set_theme(themedata) self.build_text_rectangle(themedata) self.renderer.set_frame_dest(self.width, self.height, True) - verse = [] - verse.append(u'Amazing Grace!') - verse.append(u'How sweet the sound') - verse.append(u'To save a wretch like me;') - verse.append(u'I once was lost but now am found,') - verse.append(u'Was blind, but now I see.') + verse = u'Amazing Grace!\n'\ + 'How sweet the sound\n'\ + 'To save a wretch like me;\n'\ + 'I once was lost but now am found,\n'\ + 'Was blind, but now I see.' footer = [] footer.append(u'Amazing Grace (John Newton)' ) footer.append(u'Public Domain') footer.append(u'CCLI xxx') - return self.renderer.generate_frame_from_lines(verse, footer) + formatted = self.renderer.format_slide(verse, False) + return self.renderer.generate_frame_from_lines(formatted[0], footer) def format_slide(self, words): """ diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 69983764d..a72d242d7 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -105,7 +105,7 @@ class ServiceItem(object): lines += line + u'\n' title = lines.split(u'\n')[0] self._display_frames.append({u'title': title, u'text': lines}) - log.info(u'Formatting took %4s' % (time.time() - before)) + log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: for slide in self._raw_frames: slide[u'image'] = \ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8208056f7..b5d02a4fe 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -488,7 +488,7 @@ class SlideController(QtGui.QWidget): """ Blank the screen. """ - if self.serviceItem.is_command(): + if self.serviceItem and self.serviceItem.is_command(): if blanked: Receiver().send_message(u'%s_blank'% self.serviceItem.name.lower()) else: From cf4291b73b0d81b5a4f46d2037e1b9e2a3a7c19f Mon Sep 17 00:00:00 2001 From: Michael Gorven Date: Sat, 21 Nov 2009 14:53:36 +0200 Subject: [PATCH 22/23] Use the right match... --- openlp-get-strings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp-get-strings.py b/openlp-get-strings.py index adb2f8821..02aa16772 100755 --- a/openlp-get-strings.py +++ b/openlp-get-strings.py @@ -56,9 +56,9 @@ def parse_file(filename): class_name = line[6:line.find(u'(')] continue for match in find_trUtf8.finditer(line): - key = u'%s-%s' % (class_name, match.group(1)) + key = u'%s-%s' % (class_name, match.group(2)) if not key in strings: - strings[key] = [class_name, filename, line_number, match.group(1)] + strings[key] = [class_name, filename, line_number, match.group(2)] file.close() def write_file(filename): From 56c69bd8e80135d19390cc7e7fb5247bc105a29b Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 21 Nov 2009 14:32:19 +0000 Subject: [PATCH 23/23] Fix up renderer to protect it from Gushie --- openlp/core/lib/renderer.py | 56 +++++++++++-------- openlp/core/ui/amendthemeform.py | 95 +++++++++++++++++--------------- openlp/core/ui/mainwindow.py | 2 +- 3 files changed, 85 insertions(+), 68 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 4ca653303..b8d9b7172 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -168,35 +168,45 @@ class Renderer(object): line_width = self._rect.width() - self._right_margin #number of lines on a page - adjust for rounding up. page_length = int(self._rect.height() / metrics.height() - 2 ) - 1 + #Average number of characters in line ave_line_width = line_width / metrics.averageCharWidth() - ave_line_width = int(ave_line_width + (ave_line_width * 1)) + #Maximum size of a character + max_char_width = metrics.maxWidth() + #Min size of a character + min_char_width = metrics.width(u'i') + char_per_line = line_width / min_char_width log.debug(u'Page Length area height %s , metrics %s , lines %s' % (int(self._rect.height()), metrics.height(), page_length )) split_pages = [] page = [] split_lines = [] + count = 0 for line in text: #Must be a blank line so keep it. if len(line) == 0: line = u' ' while len(line) > 0: - if len(line) > ave_line_width: - pos = line.find(u' ', ave_line_width) - split_text = line[:pos] - else: - pos = len(line) - split_text = line - while metrics.width(split_text, -1) > line_width: - #Find the next space to the left - pos = line[:pos].rfind(u' ') - #no more spaces found - if pos == 0: - split_text = line + pos = char_per_line + split_text = line[:pos] + #line needs splitting + if metrics.width(split_text, -1) > line_width: + #We have no spaces + if split_text.find(u' ') == -1: + #Move back 1 char at a time till it fits while metrics.width(split_text, -1) > line_width: split_text = split_text[:-1] - pos = len(split_text) + pos = len(split_text) else: - split_text = line[:pos] + #We have spaces so split at previous one + while metrics.width(split_text, -1) > line_width: + pos = split_text.rfind(u' ') + #no more spaces and we are still too long + if pos == -1: + while metrics.width(split_text, -1) > line_width: + split_text = split_text[:-1] + pos = len(split_text) + else: + split_text = line[:pos] split_lines.append(split_text) line = line[pos:].lstrip() #if we have more text add up to 10 spaces on the front. @@ -450,32 +460,32 @@ class Renderer(object): 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, + (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, + (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, + (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, + (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), + (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), + (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), + (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), + (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), diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index b3a1d49e7..187d5f6e2 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -189,21 +189,21 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.allowPreview = False self.paintUi(self.theme) self.allowPreview = True - self.previewTheme(self.theme) + self.previewTheme() def onImageToolButtonClicked(self): filename = QtGui.QFileDialog.getOpenFileName( - self, self.trUtf8(u'Open file')) + self, self.trUtf8('Open file')) if filename: self.ImageLineEdit.setText(filename) self.theme.background_filename = filename - self.previewTheme(self.theme) + self.previewTheme() # #Main Font Tab # def onFontMainComboBoxSelected(self): self.theme.font_main_name = self.FontMainComboBox.currentFont().family() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainWeightComboBoxSelected(self, value): if value == 0: @@ -218,7 +218,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.font_main_weight = u'Bold' self.theme.font_main_italics = True - self.previewTheme(self.theme) + self.previewTheme() def onFontMainColorPushButtonClicked(self): self.theme.font_main_color = QtGui.QColorDialog.getColor( @@ -226,12 +226,12 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.FontMainColorPushButton.setStyleSheet( u'background-color: %s' % unicode(self.theme.font_main_color)) - self.previewTheme(self.theme) + self.previewTheme() def onFontMainSizeSpinBoxChanged(self): if self.theme.font_main_proportion != self.FontMainSizeSpinBox.value(): self.theme.font_main_proportion = self.FontMainSizeSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainDefaultCheckBoxChanged(self, value): if value == 2: # checked @@ -252,41 +252,41 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.FontMainLineSpacingSpinBox.setValue( self.theme.font_main_indentation) self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onFontMainXSpinBoxChanged(self): if self.theme.font_main_x != self.FontMainXSpinBox.value(): self.theme.font_main_x = self.FontMainXSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainYSpinBoxChanged(self): if self.theme.font_main_y != self.FontMainYSpinBox.value(): self.theme.font_main_y = self.FontMainYSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainWidthSpinBoxChanged(self): if self.theme.font_main_width != self.FontMainWidthSpinBox.value(): self.theme.font_main_width = self.FontMainWidthSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainLineSpacingSpinBoxChanged(self): if self.theme.font_main_indentation != \ self.FontMainLineSpacingSpinBox.value(): self.theme.font_main_indentation = \ self.FontMainLineSpacingSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontMainHeightSpinBoxChanged(self): if self.theme.font_main_height != self.FontMainHeightSpinBox.value(): self.theme.font_main_height = self.FontMainHeightSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() # #Footer Font Tab # def onFontFooterComboBoxSelected(self): self.theme.font_footer_name = \ self.FontFooterComboBox.currentFont().family() - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterWeightComboBoxSelected(self, value): if value == 0: @@ -301,22 +301,21 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.font_footer_weight = u'Bold' self.theme.font_footer_italics = True - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterColorPushButtonClicked(self): self.theme.font_footer_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.theme.font_footer_color), self).name() - self.FontFooterColorPushButton.setStyleSheet( 'background-color: %s' % unicode(self.theme.font_footer_color)) - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterSizeSpinBoxChanged(self): if self.theme.font_footer_proportion != \ self.FontFooterSizeSpinBox.value(): self.theme.font_footer_proportion = \ self.FontFooterSizeSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterDefaultCheckBoxChanged(self, value): if value == 2: # checked @@ -336,29 +335,29 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.FontFooterHeightSpinBox.setValue( self.theme.font_footer_height) self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterXSpinBoxChanged(self): if self.theme.font_footer_x != self.FontFooterXSpinBox.value(): self.theme.font_footer_x = self.FontFooterXSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterYSpinBoxChanged(self): if self.theme.font_footer_y != self.FontFooterYSpinBox.value(): self.theme.font_footer_y = self.FontFooterYSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterWidthSpinBoxChanged(self): if self.theme.font_footer_width != self.FontFooterWidthSpinBox.value(): self.theme.font_footer_width = self.FontFooterWidthSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() def onFontFooterHeightSpinBoxChanged(self): if self.theme.font_footer_height != \ self.FontFooterHeightSpinBox.value(): self.theme.font_footer_height = \ self.FontFooterHeightSpinBox.value() - self.previewTheme(self.theme) + self.previewTheme() # #Background Tab # @@ -372,7 +371,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.background_mode = u'transparent' self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onBackgroundTypeComboBoxSelected(self, currentIndex): self.setBackground(currentIndex, self.GradientComboBox.currentIndex()) @@ -397,7 +396,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.background_type = u'image' self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onColor1PushButtonClicked(self): if self.theme.background_type == u'solid': @@ -412,14 +411,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): u'background-color: %s' % \ unicode(self.theme.background_startColor)) - self.previewTheme(self.theme) + self.previewTheme() def onColor2PushButtonClicked(self): self.theme.background_endColor = QtGui.QColorDialog.getColor( QtGui.QColor(self.theme.background_endColor), self).name() self.Color2PushButton.setStyleSheet( u'background-color: %s' % unicode(self.theme.background_endColor)) - self.previewTheme(self.theme) + self.previewTheme() # #Other Tab # @@ -429,14 +428,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.display_outline = False self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onOutlineColorPushButtonClicked(self): self.theme.display_outline_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.theme.display_outline_color), self).name() self.OutlineColorPushButton.setStyleSheet( u'background-color: %s' % unicode(self.theme.display_outline_color)) - self.previewTheme(self.theme) + self.previewTheme() def onShadowCheckBoxChanged(self, value): if value == 2: # checked @@ -444,24 +443,24 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.theme.display_shadow = False self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onShadowColorPushButtonClicked(self): self.theme.display_shadow_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.theme.display_shadow_color), self).name() self.ShadowColorPushButton.setStyleSheet( u'background-color: %s' % unicode(self.theme.display_shadow_color)) - self.previewTheme(self.theme) + self.previewTheme() def onHorizontalComboBoxSelected(self, currentIndex): self.theme.display_horizontalAlign = currentIndex self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() def onVerticalComboBoxSelected(self, currentIndex): self.theme.display_verticalAlign = currentIndex self.stateChanging(self.theme) - self.previewTheme(self.theme) + self.previewTheme() # #Local Methods # @@ -654,18 +653,10 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): else: self.ShadowColorPushButton.setEnabled(False) - def previewTheme(self, theme): + def previewTheme(self): if self.allowPreview: #calculate main number of rows - main_weight = 50 - if self.theme.font_main_weight == u'Bold': - main_weight = 75 - mainFont = QtGui.QFont(self.theme.font_main_name, - self.theme.font_main_proportion, # size - main_weight, # weight - self.theme.font_main_italics)# italic - mainFont.setPixelSize(self.theme.font_main_proportion) - metrics = QtGui.QFontMetrics(mainFont) + metrics = self._getThemeMetrics() page_length = \ (self.FontMainHeightSpinBox.value() / metrics.height() - 2) - 1 log.debug(u'Page Length area height %s, metrics %s, lines %s' % @@ -673,6 +664,22 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): page_length)) page_length_text = unicode(self.trUtf8(u'Slide Height is %s rows')) self.FontMainLinesPageLabel.setText(page_length_text % page_length) - frame = self.thememanager.generateImage(theme) + #a=c + frame = self.thememanager.generateImage(self.theme) self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) + def _getThemeMetrics(self): + main_weight = 50 + if self.theme.font_main_weight == u'Bold': + main_weight = 75 + mainFont = QtGui.QFont(self.theme.font_main_name, + self.theme.font_main_proportion, # size + main_weight, # weight + self.theme.font_main_italics)# italic + mainFont.setPixelSize(self.theme.font_main_proportion) + metrics = QtGui.QFontMetrics(mainFont) + #Validate that the screen width is big enough to display the text + if self.theme.font_main_width < metrics.maxWidth() * 2 + 64: + self.theme.font_main_width = metrics.maxWidth() * 2 + 64 + self.FontMainWidthSpinBox.setValue(self.theme.font_main_width) + return metrics diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 347f7fbed..901bfe985 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -584,7 +584,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.trUtf8(u'The Main Display has been blanked out'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), QtGui.QMessageBox.Ok) - self.LiveController.blackPushButton.setChecked(True) + #self.LiveController.blackPushButton.setChecked(True) def onHelpAboutItemClicked(self): """