From ad61defdae087489603f70412df5491adc447270 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 20 Aug 2011 12:45:06 +0100 Subject: [PATCH 01/12] Add border colors and fix song usage --- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/imagemanager.py | 20 +++++++++++++++----- openlp/core/lib/renderer.py | 5 +++-- openlp/core/lib/serviceitem.py | 8 ++++++-- openlp/core/lib/theme.py | 7 +++++-- openlp/core/ui/printserviceform.py | 5 ++++- openlp/core/ui/themeform.py | 12 ++++++++++++ openlp/core/ui/themewizard.py | 12 +++++++++++- openlp/plugins/images/imageplugin.py | 5 +++-- openlp/plugins/images/lib/__init__.py | 1 + openlp/plugins/images/lib/mediaitem.py | 4 +++- openlp/plugins/songusage/songusageplugin.py | 3 +++ 12 files changed, 67 insertions(+), 17 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index f83e92de7..d9d29efab 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -137,7 +137,7 @@ def image_to_byte(image): # convert to base64 encoding so does not get missed! return byte_array.toBase64() -def resize_image(image_path, width, height, background=QtCore.Qt.black): +def resize_image(image_path, width, height, background): """ Resize an image to fit on the current screen. diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 37d1de79c..a4a60b2f4 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -36,7 +36,7 @@ import Queue from PyQt4 import QtCore -from openlp.core.lib import resize_image, image_to_byte +from openlp.core.lib import resize_image, image_to_byte, Receiver from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -100,12 +100,14 @@ class Image(object): variables ``image`` and ``image_bytes`` to ``None`` and add the image object to the queue of images to process. """ - def __init__(self, name='', path=''): + def __init__(self, name, path, source, background): self.name = name self.path = path self.image = None self.image_bytes = None self.priority = Priority.Normal + self.source = source + self.background = background class PriorityQueue(Queue.PriorityQueue): @@ -151,6 +153,8 @@ class ImageManager(QtCore.QObject): self._cache = {} self._imageThread = ImageThread(self) self._conversion_queue = PriorityQueue() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_updated'), self.config_updated) def update_display(self): """ @@ -168,6 +172,11 @@ class ImageManager(QtCore.QObject): image.image = None image.image_bytes = None self._conversion_queue.put((image.priority, image)) + + def config_updated(self): + """ + Flush the queue to updated any data to update + """ # We want only one thread. if not self._imageThread.isRunning(): self._imageThread.start() @@ -215,13 +224,13 @@ class ImageManager(QtCore.QObject): self._conversion_queue.remove(self._cache[name]) del self._cache[name] - def add_image(self, name, path): + def add_image(self, name, path, source, background): """ Add image to cache if it is not already there. """ log.debug(u'add_image %s:%s' % (name, path)) if not name in self._cache: - image = Image(name, path) + image = Image(name, path, source, background) self._cache[name] = image self._conversion_queue.put((image.priority, image)) else: @@ -247,7 +256,8 @@ class ImageManager(QtCore.QObject): image = self._conversion_queue.get()[1] # Generate the QImage for the image. if image.image is None: - image.image = resize_image(image.path, self.width, self.height) + image.image = resize_image(image.path, self.width, self.height, + image.background) # Set the priority to Lowest and stop here as we need to process # more important images first. if image.priority == Priority.Normal: diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index ac7e95c4c..9ea9c8094 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -27,7 +27,7 @@ import logging -from PyQt4 import QtCore, QtWebKit +from PyQt4 import QtGui, QtCore, QtWebKit from openlp.core.lib import ServiceItem, expand_tags, \ build_lyrics_format_css, build_lyrics_outline_css, Receiver, \ @@ -166,7 +166,8 @@ class Renderer(object): # if No file do not update cache if self.theme_data.background_filename: self.imageManager.add_image(self.theme_data.theme_name, - self.theme_data.background_filename) + self.theme_data.background_filename, u'theme', + QtGui.QColor(self.theme_data.background_border_color)) return self._rect, self._rect_footer def generate_preview(self, theme_data, force_page=False): diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 15c16c551..7be28520c 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -115,6 +115,7 @@ class ServiceItem(object): self.end_time = 0 self.media_length = 0 self.from_service = False + self.image_border = u'#000000' self._new_item() def _new_item(self): @@ -195,7 +196,7 @@ class ServiceItem(object): self.foot_text = \ u'
'.join([footer for footer in self.raw_footer if footer]) - def add_from_image(self, path, title): + def add_from_image(self, path, title, background=None): """ Add an image slide to the service item. @@ -205,9 +206,12 @@ class ServiceItem(object): ``title`` A title for the slide in the service item. """ + if background: + self.image_border = background self.service_item_type = ServiceItemType.Image self._raw_frames.append({u'title': title, u'path': path}) - self.renderer.imageManager.add_image(title, path) + self.renderer.imageManager.add_image(title, path, u'image', + self.image_border) self._new_item() def add_from_text(self, title, raw_slide, verse_tag=None): diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index c87f9aa2e..3b0a62f5b 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -44,6 +44,7 @@ BLANK_THEME_XML = \ + #000000 #000000 @@ -282,7 +283,7 @@ class ThemeXML(object): # Create direction element self.child_element(background, u'direction', unicode(direction)) - def add_background_image(self, filename): + def add_background_image(self, filename, borderColor): """ Add a image background. @@ -294,6 +295,8 @@ class ThemeXML(object): self.theme.appendChild(background) # Create Filename element self.child_element(background, u'filename', filename) + # Create endColor element + self.child_element(background, u'borderColor', unicode(borderColor)) def add_font(self, name, color, size, override, fonttype=u'main', bold=u'False', italics=u'False', line_adjustment=0, @@ -597,7 +600,7 @@ class ThemeXML(object): self.background_direction) else: filename = os.path.split(self.background_filename)[1] - self.add_background_image(filename) + self.add_background_image(filename, self.background_border_color) self.add_font(self.font_main_name, self.font_main_color, self.font_main_size, diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 55fc6eb3c..f33092061 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -31,7 +31,7 @@ import os from PyQt4 import QtCore, QtGui from lxml import html -from openlp.core.lib import translate, get_text_file_string +from openlp.core.lib import translate, get_text_file_string, Receiver from openlp.core.lib.ui import UiStrings from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize from openlp.core.utils import AppLocation @@ -188,6 +188,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): html_data.body, classId=u'serviceTitle') for index, item in enumerate(self.serviceManager.serviceItems): self._addPreviewItem(html_data.body, item[u'service_item'], index) + # Trigger Audit requests + Receiver.send_message(u'print_service_started', + [item[u'service_item']]) # Add the custom service notes: if self.footerTextEdit.toPlainText(): div = self._addElement(u'div', parent=html_data.body, diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index d5d955926..b56b68b5b 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -66,6 +66,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.onGradientComboBoxCurrentIndexChanged) QtCore.QObject.connect(self.colorButton, QtCore.SIGNAL(u'clicked()'), self.onColorButtonClicked) + QtCore.QObject.connect(self.imageColorButton, + QtCore.SIGNAL(u'clicked()'), self.onImageColorButtonClicked) QtCore.QObject.connect(self.gradientStartButton, QtCore.SIGNAL(u'clicked()'), self.onGradientStartButtonClicked) QtCore.QObject.connect(self.gradientEndButton, @@ -330,6 +332,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.background_end_color) self.setField(u'background_type', QtCore.QVariant(1)) else: + self.imageColorButton.setStyleSheet(u'background-color: %s' % + self.theme.background_border_color) self.imageFileEdit.setText(self.theme.background_filename) self.setField(u'background_type', QtCore.QVariant(2)) if self.theme.background_direction == \ @@ -464,6 +468,14 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self._colorButton(self.theme.background_color) self.setBackgroundPageValues() + def onImageColorButtonClicked(self): + """ + Background / Gradient 1 Color button pushed. + """ + self.theme.background_border_color = \ + self._colorButton(self.theme.background_border_color) + self.setBackgroundPageValues() + def onGradientStartButtonClicked(self): """ Gradient 2 Color button pushed. diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 27ac3a182..805ce876b 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -64,6 +64,7 @@ class Ui_ThemeWizard(object): self.backgroundStack.setObjectName(u'BackgroundStack') self.colorWidget = QtGui.QWidget(self.backgroundPage) self.colorWidget.setObjectName(u'ColorWidget') + self.colorLayout = QtGui.QFormLayout(self.colorWidget) self.colorLayout.setMargin(0) self.colorLayout.setObjectName(u'ColorLayout') @@ -73,6 +74,7 @@ class Ui_ThemeWizard(object): self.colorButton.setObjectName(u'ColorButton') self.colorLayout.addRow(self.colorLabel, self.colorButton) self.colorLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) + self.backgroundStack.addWidget(self.colorWidget) self.gradientWidget = QtGui.QWidget(self.backgroundPage) self.gradientWidget.setObjectName(u'GradientWidget') @@ -100,11 +102,17 @@ class Ui_ThemeWizard(object): self.gradientComboBox) self.gradientLayout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) self.backgroundStack.addWidget(self.gradientWidget) + self.imageWidget = QtGui.QWidget(self.backgroundPage) self.imageWidget.setObjectName(u'ImageWidget') self.imageLayout = QtGui.QFormLayout(self.imageWidget) self.imageLayout.setMargin(0) self.imageLayout.setObjectName(u'ImageLayout') + self.imageColorLabel = QtGui.QLabel(self.colorWidget) + self.imageColorLabel.setObjectName(u'ImageColorLabel') + self.imageColorButton = QtGui.QPushButton(self.colorWidget) + self.imageColorButton.setObjectName(u'ImageColorButton') + self.imageLayout.addRow(self.imageColorLabel, self.imageColorButton) self.imageLabel = QtGui.QLabel(self.imageWidget) self.imageLabel.setObjectName(u'ImageLabel') self.imageFileLayout = QtGui.QHBoxLayout() @@ -118,7 +126,7 @@ class Ui_ThemeWizard(object): build_icon(u':/general/general_open.png')) self.imageFileLayout.addWidget(self.imageBrowseButton) self.imageLayout.addRow(self.imageLabel, self.imageFileLayout) - self.imageLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) + self.imageLayout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer) self.backgroundStack.addWidget(self.imageWidget) self.backgroundLayout.addLayout(self.backgroundStack) themeWizard.addPage(self.backgroundPage) @@ -443,6 +451,8 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) + self.imageColorLabel.setText( + translate(u'OpenLP.ThemeWizard', 'Border color:')) self.imageLabel.setText(u'%s:' % UiStrings().Image) self.mainAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Main Area Font Details')) diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 1ddbe8357..aeeee5c5d 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -28,7 +28,7 @@ import logging from openlp.core.lib import Plugin, StringContent, build_icon, translate -from openlp.plugins.images.lib import ImageMediaItem +from openlp.plugins.images.lib import ImageMediaItem, ImageTab log = logging.getLogger(__name__) @@ -36,7 +36,8 @@ class ImagePlugin(Plugin): log.info(u'Image Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem) + Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem, + ImageTab) self.weight = -7 self.icon_path = u':/plugins/plugin_images.png' self.icon = build_icon(self.icon_path) diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index b26d00184..e216623cd 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -26,3 +26,4 @@ ############################################################################### from mediaitem import ImageMediaItem +from imagetab import ImageTab diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index acd420880..d88cf47e7 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -140,6 +140,8 @@ class ImageMediaItem(MediaManagerItem): self.plugin.formparent.finishedProgressBar() def generateSlideData(self, service_item, item=None, xmlVersion=False): + background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + + u'/background color', QtCore.QVariant(u'#000000'))) if item: items = [item] else: @@ -183,7 +185,7 @@ class ImageMediaItem(MediaManagerItem): for bitem in items: filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) (path, name) = os.path.split(filename) - service_item.add_from_image(filename, name) + service_item.add_from_image(filename, name, background) return True def onResetClick(self): diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 4ca23aeb0..55e968360 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -121,6 +121,9 @@ class SongUsagePlugin(Plugin): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_live_started'), self.onReceiveSongUsage) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'print_service_started'), + self.onReceiveSongUsage) self.songUsageActive = QtCore.QSettings().value( self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() From cc1e174d6246a56eed19944bbe0c1ede43fca4ae Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 20 Aug 2011 14:21:25 +0100 Subject: [PATCH 02/12] Updates --- openlp/core/lib/imagemanager.py | 16 ++++++++++++++++ openlp/core/ui/themewizard.py | 3 --- openlp/plugins/images/imageplugin.py | 12 +++++++++++- openlp/plugins/images/lib/mediaitem.py | 4 ++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index a4a60b2f4..3de1ff532 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -173,6 +173,22 @@ class ImageManager(QtCore.QObject): image.image_bytes = None self._conversion_queue.put((image.priority, image)) + def update_images(self, background): + """ + Screen has changed size so rebuild the cache to new size. + """ + log.debug(u'update_images') + # Mark the images as dirty for a rebuild by setting the image and byte + # stream to None. + self._conversion_queue = PriorityQueue() + for key, image in self._cache.iteritems(): + if image.source == u'images': + image.background = background + image.priority = Priority.Normal + image.image = None + image.image_bytes = None + self._conversion_queue.put((image.priority, image)) + def config_updated(self): """ Flush the queue to updated any data to update diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 805ce876b..12fc70760 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -64,7 +64,6 @@ class Ui_ThemeWizard(object): self.backgroundStack.setObjectName(u'BackgroundStack') self.colorWidget = QtGui.QWidget(self.backgroundPage) self.colorWidget.setObjectName(u'ColorWidget') - self.colorLayout = QtGui.QFormLayout(self.colorWidget) self.colorLayout.setMargin(0) self.colorLayout.setObjectName(u'ColorLayout') @@ -74,7 +73,6 @@ class Ui_ThemeWizard(object): self.colorButton.setObjectName(u'ColorButton') self.colorLayout.addRow(self.colorLabel, self.colorButton) self.colorLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) - self.backgroundStack.addWidget(self.colorWidget) self.gradientWidget = QtGui.QWidget(self.backgroundPage) self.gradientWidget.setObjectName(u'GradientWidget') @@ -102,7 +100,6 @@ class Ui_ThemeWizard(object): self.gradientComboBox) self.gradientLayout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) self.backgroundStack.addWidget(self.gradientWidget) - self.imageWidget = QtGui.QWidget(self.backgroundPage) self.imageWidget.setObjectName(u'ImageWidget') self.imageLayout = QtGui.QFormLayout(self.imageWidget) diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index aeeee5c5d..1d1ef46ee 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -25,9 +25,12 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from PyQt4 import QtCore, QtGui + import logging -from openlp.core.lib import Plugin, StringContent, build_icon, translate +from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ + Receiver from openlp.plugins.images.lib import ImageMediaItem, ImageTab log = logging.getLogger(__name__) @@ -41,6 +44,8 @@ class ImagePlugin(Plugin): self.weight = -7 self.icon_path = u':/plugins/plugin_images.png' self.icon = build_icon(self.icon_path) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'image_updated'), self.image_updated) def about(self): about_text = translate('ImagePlugin', 'Image Plugin' @@ -82,3 +87,8 @@ class ImagePlugin(Plugin): 'Add the selected image to the service.') } self.setPluginUiTextStrings(tooltips) + + def image_updated(self): + background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + + u'/background color', QtCore.QVariant(u'#000000'))) + self.liveController.imageManager.update_images(background) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index d88cf47e7..d00b8c9f0 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -140,8 +140,8 @@ class ImageMediaItem(MediaManagerItem): self.plugin.formparent.finishedProgressBar() def generateSlideData(self, service_item, item=None, xmlVersion=False): - background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + - u'/background color', QtCore.QVariant(u'#000000'))) + background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + + u'/background color', QtCore.QVariant(u'#000000'))) if item: items = [item] else: From 3c17af592dc75940b367e93d693087ef1c453a71 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 20 Aug 2011 16:02:57 +0100 Subject: [PATCH 03/12] Fix autoupdates --- openlp/core/lib/imagemanager.py | 8 ++++---- openlp/core/ui/themeform.py | 2 +- openlp/core/ui/thememanager.py | 5 +++++ openlp/plugins/images/imageplugin.py | 7 ++++++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 3de1ff532..87501602e 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -154,7 +154,7 @@ class ImageManager(QtCore.QObject): self._imageThread = ImageThread(self) self._conversion_queue = PriorityQueue() QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'config_updated'), self.config_updated) + QtCore.SIGNAL(u'config_updated'), self.process_updates) def update_display(self): """ @@ -173,7 +173,7 @@ class ImageManager(QtCore.QObject): image.image_bytes = None self._conversion_queue.put((image.priority, image)) - def update_images(self, background): + def update_images(self, image_type, background): """ Screen has changed size so rebuild the cache to new size. """ @@ -182,14 +182,14 @@ class ImageManager(QtCore.QObject): # stream to None. self._conversion_queue = PriorityQueue() for key, image in self._cache.iteritems(): - if image.source == u'images': + if image.source == image_type: image.background = background image.priority = Priority.Normal image.image = None image.image_bytes = None self._conversion_queue.put((image.priority, image)) - def config_updated(self): + def process_updates(self): """ Flush the queue to updated any data to update """ diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index b56b68b5b..dc3c23d0d 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -576,7 +576,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): def accept(self): """ - Lets save the them as Finish has been pressed + Lets save the theme as Finish has been pressed """ # Save the theme name self.theme.theme_name = unicode(self.field(u'name').toString()) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 69c229532..40b39b7fd 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -610,6 +610,11 @@ class ThemeManager(QtGui.QWidget): and to trigger the reload of the theme list """ self._writeTheme(theme, imageFrom, imageTo) + if theme.background_type == \ + BackgroundType.to_string(BackgroundType.Image): + self.mainwindow.imageManager.update_images(u'theme', + QtGui.QColor(theme.background_border_color)) + self.mainwindow.imageManager.process_updates() self.loadThemes() def _writeTheme(self, theme, imageFrom, imageTo): diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 1d1ef46ee..4b5a6f3c0 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -89,6 +89,11 @@ class ImagePlugin(Plugin): self.setPluginUiTextStrings(tooltips) def image_updated(self): + """ + Triggered by saving and changing the image border. Sets the images in + image manager to require updates. Actual update is triggered by the + last part of saving the config. + """ background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + u'/background color', QtCore.QVariant(u'#000000'))) - self.liveController.imageManager.update_images(background) + self.liveController.imageManager.update_images(u'image', background) From d660d1d5aea1036a1d638420e194aba12a63c714 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 21 Aug 2011 05:51:03 +0100 Subject: [PATCH 04/12] Add missing file --- openlp/plugins/images/lib/imagetab.py | 99 +++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 openlp/plugins/images/lib/imagetab.py diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py new file mode 100644 index 000000000..640cd4495 --- /dev/null +++ b/openlp/plugins/images/lib/imagetab.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import SettingsTab, translate, Receiver +from openlp.core.lib.ui import UiStrings, create_valign_combo + +class ImageTab(SettingsTab): + """ + ImageTab is the images settings tab in the settings dialog. + """ + def __init__(self, parent, name, visible_title, icon_path): + SettingsTab.__init__(self, parent, name, visible_title, icon_path) + + def setupUi(self): + self.setObjectName(u'ImagesTab') + SettingsTab.setupUi(self) + self.fontGroupBox = QtGui.QGroupBox(self.leftColumn) + self.fontGroupBox.setObjectName(u'FontGroupBox') + self.formLayout = QtGui.QFormLayout(self.fontGroupBox) + self.formLayout.setObjectName(u'FormLayout') + self.colorLayout = QtGui.QHBoxLayout() + self.backgroundColorLabel = QtGui.QLabel(self.fontGroupBox) + self.backgroundColorLabel.setObjectName(u'BackgroundColorLabel') + self.colorLayout.addWidget(self.backgroundColorLabel) + self.backgroundColorButton = QtGui.QPushButton(self.fontGroupBox) + self.backgroundColorButton.setObjectName(u'BackgroundColorButton') + self.colorLayout.addWidget(self.backgroundColorButton) + self.formLayout.addRow(self.colorLayout) + self.informationLabel = QtGui.QLabel(self.fontGroupBox) + self.informationLabel.setObjectName(u'InformationLabel') + self.formLayout.addRow(self.informationLabel) + self.leftLayout.addWidget(self.fontGroupBox) + self.leftLayout.addStretch() + self.rightLayout.addStretch() + # Signals and slots + QtCore.QObject.connect(self.backgroundColorButton, + QtCore.SIGNAL(u'pressed()'), self.onbackgroundColorButtonClicked) + + def retranslateUi(self): + self.fontGroupBox.setTitle( + translate('ImagesPlugin.ImageTab', 'Background Font')) + self.backgroundColorLabel.setText( + translate('ImagesPlugin.ImageTab', 'Background color:')) + self.informationLabel.setText( + translate('ImagesPlugin.ImageTab', 'Provides border where image ' + 'is not the correct dimensions for the screen when resized.')) + + def onbackgroundColorButtonClicked(self): + new_color = QtGui.QColorDialog.getColor( + QtGui.QColor(self.bg_color), self) + if new_color.isValid(): + self.bg_color = new_color.name() + self.backgroundColorButton.setStyleSheet( + u'background-color: %s' % self.bg_color) + + def load(self): + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + self.bg_color = unicode(settings.value( + u'background color', QtCore.QVariant(u'#000000')).toString()) + self.initial_color = self.bg_color + settings.endGroup() + self.backgroundColorButton.setStyleSheet( + u'background-color: %s' % self.bg_color) + + def save(self): + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + settings.setValue(u'background color', QtCore.QVariant(self.bg_color)) + settings.endGroup() + if self.initial_color != self.bg_color: + Receiver.send_message(u'image_updated') + From 21bf34c436c70389a14ad8f2bc14cf148032d557 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 21 Aug 2011 06:33:07 +0100 Subject: [PATCH 05/12] Theme fix --- openlp/core/lib/imagemanager.py | 18 +++++++++++++++++- openlp/core/ui/thememanager.py | 4 ++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 87501602e..70d4b46ec 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -175,7 +175,7 @@ class ImageManager(QtCore.QObject): def update_images(self, image_type, background): """ - Screen has changed size so rebuild the cache to new size. + Border has changed so update all the images affected. """ log.debug(u'update_images') # Mark the images as dirty for a rebuild by setting the image and byte @@ -189,6 +189,22 @@ class ImageManager(QtCore.QObject): image.image_bytes = None self._conversion_queue.put((image.priority, image)) + def update_image(self, name, image_type, background): + """ + Border has changed so update the image affected. + """ + log.debug(u'update_images') + # Mark the images as dirty for a rebuild by setting the image and byte + # stream to None. + self._conversion_queue = PriorityQueue() + for key, image in self._cache.iteritems(): + if image.source == image_type and image.name == name: + image.background = background + image.priority = Priority.Normal + image.image = None + image.image_bytes = None + self._conversion_queue.put((image.priority, image)) + def process_updates(self): """ Flush the queue to updated any data to update diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 40b39b7fd..fdd0d74f3 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -612,8 +612,8 @@ class ThemeManager(QtGui.QWidget): self._writeTheme(theme, imageFrom, imageTo) if theme.background_type == \ BackgroundType.to_string(BackgroundType.Image): - self.mainwindow.imageManager.update_images(u'theme', - QtGui.QColor(theme.background_border_color)) + self.mainwindow.imageManager.update_image(theme.theme_name, + u'theme', QtGui.QColor(theme.background_border_color)) self.mainwindow.imageManager.process_updates() self.loadThemes() From 62cffbb3b6e1bcf98cb5b4f5ac287670814f2bd5 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 21 Aug 2011 17:13:45 +0100 Subject: [PATCH 06/12] Review fixes and improvements --- openlp/core/lib/imagemanager.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 70d4b46ec..1201d9431 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -166,12 +166,8 @@ class ImageManager(QtCore.QObject): self.height = current_screen[u'size'].height() # Mark the images as dirty for a rebuild by setting the image and byte # stream to None. - self._conversion_queue = PriorityQueue() for key, image in self._cache.iteritems(): - image.priority = Priority.Normal - image.image = None - image.image_bytes = None - self._conversion_queue.put((image.priority, image)) + self.add_to_queue(image) def update_images(self, image_type, background): """ @@ -180,14 +176,10 @@ class ImageManager(QtCore.QObject): log.debug(u'update_images') # Mark the images as dirty for a rebuild by setting the image and byte # stream to None. - self._conversion_queue = PriorityQueue() for key, image in self._cache.iteritems(): if image.source == image_type: image.background = background - image.priority = Priority.Normal - image.image = None - image.image_bytes = None - self._conversion_queue.put((image.priority, image)) + self.add_to_queue(image) def update_image(self, name, image_type, background): """ @@ -196,14 +188,16 @@ class ImageManager(QtCore.QObject): log.debug(u'update_images') # Mark the images as dirty for a rebuild by setting the image and byte # stream to None. - self._conversion_queue = PriorityQueue() for key, image in self._cache.iteritems(): if image.source == image_type and image.name == name: image.background = background - image.priority = Priority.Normal - image.image = None - image.image_bytes = None - self._conversion_queue.put((image.priority, image)) + self.add_to_queue(image) + + def add_to_queue(self, image): + image.priority = Priority.Normal + image.image = None + image.image_bytes = None + self._conversion_queue.put((image.priority, image)) def process_updates(self): """ From 6c55362eee1f5d0455343c6bbb0663068c559878 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 21 Aug 2011 17:59:03 +0100 Subject: [PATCH 07/12] More fixes --- openlp/core/lib/imagemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 1201d9431..2280cc2a6 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -197,7 +197,7 @@ class ImageManager(QtCore.QObject): image.priority = Priority.Normal image.image = None image.image_bytes = None - self._conversion_queue.put((image.priority, image)) + self._conversion_queue.modify_priority(image, image.priority) def process_updates(self): """ From d1f823d86435a842d8e574cbdab7e41f69647d78 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 21 Aug 2011 19:02:58 +0100 Subject: [PATCH 08/12] More fixes 2 --- openlp/core/lib/imagemanager.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 2280cc2a6..4d6c90078 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -167,7 +167,7 @@ class ImageManager(QtCore.QObject): # Mark the images as dirty for a rebuild by setting the image and byte # stream to None. for key, image in self._cache.iteritems(): - self.add_to_queue(image) + self._reset_image(image) def update_images(self, image_type, background): """ @@ -179,7 +179,7 @@ class ImageManager(QtCore.QObject): for key, image in self._cache.iteritems(): if image.source == image_type: image.background = background - self.add_to_queue(image) + self._reset_image(image) def update_image(self, name, image_type, background): """ @@ -191,13 +191,12 @@ class ImageManager(QtCore.QObject): for key, image in self._cache.iteritems(): if image.source == image_type and image.name == name: image.background = background - self.add_to_queue(image) + self._reset_image(image) - def add_to_queue(self, image): - image.priority = Priority.Normal + def _reset_image(self, image): image.image = None image.image_bytes = None - self._conversion_queue.modify_priority(image, image.priority) + self._conversion_queue.modify_priority(image, Priority.Normal) def process_updates(self): """ From 957a86b11e76a3532921d1d288dc6e9f7dadf9b9 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 22 Aug 2011 18:32:18 +0100 Subject: [PATCH 09/12] fexes --- openlp/core/ui/maindisplay.py | 4 ++-- openlp/core/ui/printserviceform.py | 12 +++++++++--- openlp/plugins/images/lib/mediaitem.py | 5 ++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 9904868ce..77f2e2f7c 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -228,11 +228,11 @@ class MainDisplay(QtGui.QGraphicsView): shrinkItem.setVisible(False) self.setGeometry(self.screen[u'size']) - def directImage(self, name, path): + def directImage(self, name, path, background): """ API for replacement backgrounds so Images are added directly to cache """ - self.imageManager.add_image(name, path) + self.imageManager.add_image(name, path, u'image', background) if hasattr(self, u'serviceItem'): self.override[u'image'] = name self.override[u'theme'] = self.serviceItem.themedata.theme_name diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index f33092061..b9c1cc4a0 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -188,9 +188,6 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): html_data.body, classId=u'serviceTitle') for index, item in enumerate(self.serviceManager.serviceItems): self._addPreviewItem(html_data.body, item[u'service_item'], index) - # Trigger Audit requests - Receiver.send_message(u'print_service_started', - [item[u'service_item']]) # Add the custom service notes: if self.footerTextEdit.toPlainText(): div = self._addElement(u'div', parent=html_data.body, @@ -299,6 +296,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): ``printer`` A *QPrinter* object. """ + self.update_song_usage() self.document.print_(printer) def displaySizeChanged(self, display): @@ -330,12 +328,14 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Copies the display text to the clipboard as plain text """ + self.update_song_usage() self.mainWindow.clipboard.setText(self.document.toPlainText()) def copyHtmlText(self): """ Copies the display text to the clipboard as Html """ + self.update_song_usage() self.mainWindow.clipboard.setText(self.document.toHtml()) def printServiceOrder(self): @@ -400,3 +400,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.setValue(u'print notes', QtCore.QVariant(self.notesCheckBox.isChecked())) settings.endGroup() + + def update_song_usage(self): + for index, item in enumerate(self.serviceManager.serviceItems): + # Trigger Audit requests + Receiver.send_message(u'print_service_started', + [item[u'service_item']]) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index d00b8c9f0..18d5d2a1c 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -208,13 +208,16 @@ class ImageMediaItem(MediaManagerItem): if check_item_selected(self.listView, translate('ImagePlugin.MediaItem', 'You must select an image to replace the background with.')): + background = QtGui.QColor(QtCore.QSettings().value( + self.settingsSection + u'/background color', + QtCore.QVariant(u'#000000'))) item = self.listView.selectedIndexes()[0] bitem = self.listView.item(item.row()) filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) if os.path.exists(filename): (path, name) = os.path.split(filename) if self.plugin.liveController.display.directImage(name, - filename): + filename, background): self.resetAction.setVisible(True) else: critical_error_message_box(UiStrings().LiveBGError, From 803adc92c0b45d474975a73d5f3f5da26a4ee463 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 25 Aug 2011 19:33:25 +0100 Subject: [PATCH 10/12] Fixes --- openlp/core/ui/themewizard.py | 2 +- openlp/plugins/images/lib/imagetab.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 12fc70760..6001c83d6 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -449,7 +449,7 @@ class Ui_ThemeWizard(object): self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) self.imageColorLabel.setText( - translate(u'OpenLP.ThemeWizard', 'Border color:')) + translate(u'OpenLP.ThemeWizard', 'Background color:')) self.imageLabel.setText(u'%s:' % UiStrings().Image) self.mainAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Main Area Font Details')) diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py index 640cd4495..05e998d81 100644 --- a/openlp/plugins/images/lib/imagetab.py +++ b/openlp/plugins/images/lib/imagetab.py @@ -57,6 +57,8 @@ class ImageTab(SettingsTab): self.formLayout.addRow(self.informationLabel) self.leftLayout.addWidget(self.fontGroupBox) self.leftLayout.addStretch() + self.rightColumn.setSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.rightLayout.addStretch() # Signals and slots QtCore.QObject.connect(self.backgroundColorButton, @@ -64,9 +66,9 @@ class ImageTab(SettingsTab): def retranslateUi(self): self.fontGroupBox.setTitle( - translate('ImagesPlugin.ImageTab', 'Background Font')) + translate('ImagesPlugin.ImageTab', 'Background Color')) self.backgroundColorLabel.setText( - translate('ImagesPlugin.ImageTab', 'Background color:')) + translate('ImagesPlugin.ImageTab', 'Default Color:')) self.informationLabel.setText( translate('ImagesPlugin.ImageTab', 'Provides border where image ' 'is not the correct dimensions for the screen when resized.')) From 869bc9bb209190d3920e112e89e284c63a93964c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 26 Aug 2011 09:21:27 +0100 Subject: [PATCH 11/12] Fix field name --- openlp/plugins/images/lib/imagetab.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py index 05e998d81..98fbd203f 100644 --- a/openlp/plugins/images/lib/imagetab.py +++ b/openlp/plugins/images/lib/imagetab.py @@ -40,22 +40,22 @@ class ImageTab(SettingsTab): def setupUi(self): self.setObjectName(u'ImagesTab') SettingsTab.setupUi(self) - self.fontGroupBox = QtGui.QGroupBox(self.leftColumn) - self.fontGroupBox.setObjectName(u'FontGroupBox') - self.formLayout = QtGui.QFormLayout(self.fontGroupBox) + self.bgColorGroupBox = QtGui.QGroupBox(self.leftColumn) + self.bgColorGroupBox.setObjectName(u'FontGroupBox') + self.formLayout = QtGui.QFormLayout(self.bgColorGroupBox) self.formLayout.setObjectName(u'FormLayout') self.colorLayout = QtGui.QHBoxLayout() - self.backgroundColorLabel = QtGui.QLabel(self.fontGroupBox) + self.backgroundColorLabel = QtGui.QLabel(self.bgColorGroupBox) self.backgroundColorLabel.setObjectName(u'BackgroundColorLabel') self.colorLayout.addWidget(self.backgroundColorLabel) - self.backgroundColorButton = QtGui.QPushButton(self.fontGroupBox) + self.backgroundColorButton = QtGui.QPushButton(self.bgColorGroupBox) self.backgroundColorButton.setObjectName(u'BackgroundColorButton') self.colorLayout.addWidget(self.backgroundColorButton) self.formLayout.addRow(self.colorLayout) - self.informationLabel = QtGui.QLabel(self.fontGroupBox) + self.informationLabel = QtGui.QLabel(self.bgColorGroupBox) self.informationLabel.setObjectName(u'InformationLabel') self.formLayout.addRow(self.informationLabel) - self.leftLayout.addWidget(self.fontGroupBox) + self.leftLayout.addWidget(self.bgColorGroupBox) self.leftLayout.addStretch() self.rightColumn.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) @@ -65,7 +65,7 @@ class ImageTab(SettingsTab): QtCore.SIGNAL(u'pressed()'), self.onbackgroundColorButtonClicked) def retranslateUi(self): - self.fontGroupBox.setTitle( + self.bgColorGroupBox.setTitle( translate('ImagesPlugin.ImageTab', 'Background Color')) self.backgroundColorLabel.setText( translate('ImagesPlugin.ImageTab', 'Default Color:')) From 61feddd34e81947424a3576dd1cc90351bc2c5cc Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 26 Aug 2011 11:21:47 +0100 Subject: [PATCH 12/12] Fix method call --- openlp/core/ui/printserviceform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index b9c1cc4a0..c08b6293e 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -296,7 +296,6 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): ``printer`` A *QPrinter* object. """ - self.update_song_usage() self.document.print_(printer) def displaySizeChanged(self, display): @@ -344,6 +343,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ if not self.printDialog.exec_(): return + self.update_song_usage() # Print the document. self.document.print_(self.printer)