Fix up Image plugin so it now works again!

Render the images correctly to reflect the screen size
Add images to slide controller
Fix ImagePlugin selction criteria
Amend the loing format.
This commit is contained in:
Tim Bentley 2009-06-20 11:44:12 +01:00
parent 714ae4647d
commit 5303d0673b
10 changed files with 48 additions and 37 deletions

View File

@ -26,7 +26,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import Receiver
logging.basicConfig(level=logging.DEBUG,
format=u'%(asctime)s %(msecs)d %(name)-12s %(levelname)-8s %(message)s',
format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s',
datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w')
from openlp.core.resources import *

View File

@ -136,8 +136,6 @@ class Renderer:
if footer_lines is not None:
bbox1 = self._render_lines_unaligned(footer_lines, True)
# reset the frame. first time do not worry about what you paint on.
#self._frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) #(self._bg_frame)
#self._frame.fill(QtCore.Qt.transparent)
# reset the frame. first time do not worry about what you paint on.
self._frame = QtGui.QImage(self._bg_frame)
x, y = self._correctAlignment(self._rect, bbox)
@ -445,4 +443,4 @@ class Renderer:
im.save(u'renderer.png', u'png')
if image2 is not None:
im = image2.toImage()
im.save(u'renderer2.png', u'png')
im.save(u'renderer2.png', u'png')

View File

@ -139,6 +139,20 @@ class RenderManager:
self.renderer.set_frame_dest(self.width, self.height)
return self.renderer.generate_frame_from_lines(main_text, footer_text)
def resize_image(self, image):
preview = QtGui.QImage(image)
w = self.width
h = self.height
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
realw = preview.width();
realh = preview.height()
# and move it to the centre of the preview space
newImage = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
newImage.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(newImage)
painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
return newImage
def calculate_default(self, screen):
log.debug(u'calculate default %s' , screen)
self.width = screen.width()

View File

@ -49,6 +49,8 @@ class ServiceItem():
self.frames = []
self.raw_footer = None
self.theme = None
self.service_item_path = None
self.service_item_type = None
#log.debug(u'Service item created for %s ', self.shortname)
self.service_frames = []
@ -77,13 +79,16 @@ class ServiceItem():
self.frames = self.service_frames
self.service_frames = []
elif self.service_item_type == u'image':
for slide in self.service_frames:
slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
self.frames = self.service_frames
self.service_frames = []
else:
log.error(u'Invalid value renderer :%s' % self.service_item_type)
def add_from_image(self, frame_title, image):
def add_from_image(self, path, frame_title, image):
self.service_item_type = u'image'
self.service_item_path = path
self.service_frames.append({u'title': frame_title, u'image': image})
def add_from_text(self, frame_title, raw_slide):
@ -110,8 +115,8 @@ class ServiceItem():
def set_from_oos(self, serviceitem):
"""
This method takes some oostext (passed from the ServiceManager)
and parses it into the data actually required
This method takes some oos list (passed from the ServiceManager)
and extracts the data actually required
"""
header = serviceitem[u'serviceitem'][u'header']
self.title = header[u'title']

View File

@ -137,8 +137,9 @@ class SlideController(QtGui.QWidget):
self.PreviewListView.setIconSize(QtCore.QSize(250, 190))
self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
#self.PreviewListView.setFlow(1)
#self.PreviewListView.setViewMode(1)
if QtCore.QT_VERSION_STR > u'4.4.0':
self.PreviewListView.setFlow(1)
self.PreviewListView.setViewMode(1)
self.PreviewListView.setWrapping(False)
self.PreviewListView.setModel(self.PreviewListData)
self.PreviewListView.setSpacing(0)
@ -321,4 +322,4 @@ class SlideController(QtGui.QWidget):
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
self.onSlideSelected(row)

View File

@ -3,7 +3,7 @@
"""
OpenLP - Open Source Lyrics Projection
Copyright (c) 2008 - 2009 Raoul Snyman
Portions copyright (c) 2008 Martin Thompson, Tim Bentley,
Portions copyright (c) 2008 - 2009 Martin Thompson, Tim Bentley,
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -17,7 +17,3 @@ 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 imageplugin import ImagePlugin
#from imageserviceitem import ImageServiceItem

View File

@ -3,7 +3,7 @@
"""
OpenLP - Open Source Lyrics Projection
Copyright (c) 2008 Raoul Snyman
Portions copyright (c) 2008 Martin Thompson, Tim Bentley,
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -22,7 +22,7 @@ import logging
from PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin, Event, EventType
from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem
from openlp.plugins.images.lib import ImageMediaItem
class ImagePlugin(Plugin):
global log
@ -38,9 +38,6 @@ class ImagePlugin(Plugin):
self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.preview_service_item = ImageServiceItem(self.preview_controller)
self.live_service_item = ImageServiceItem(self.live_controller)
def get_media_manager_item(self):
# Create the MediaManagerItem object
self.media_item = ImageMediaItem(self, self.icon, u'Images')
@ -63,5 +60,3 @@ class ImagePlugin(Plugin):
if event.event_type == EventType.LiveShow and event.payload == 'Image':
log.debug(u'Load Live Show Item received')
self.media_item.onImageLiveClick()

View File

@ -3,7 +3,7 @@
"""
OpenLP - Open Source Lyrics Projection
Copyright (c) 2008 - 2009 Raoul Snyman
Portions copyright (c) 2008 Martin Thompson, Tim Bentley,
Portions copyright (c) 2008 - 2009 Martin Thompson, Tim Bentley,
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -18,5 +18,4 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
from listwithpreviews import ListWithPreviews
from imageserviceitem import ImageServiceItem
from mediaitem import ImageMediaItem

View File

@ -34,34 +34,35 @@ class ListWithPreviews(QtCore.QAbstractListModel):
# will be a list of (full filename, QPixmap, shortname) tuples
self.items = []
self.rowheight = 50
self.maximagewidth = self.rowheight*16/9.0;
self.maximagewidth = self.rowheight * 16 / 9.0;
def rowCount(self, parent):
return len(self.items)
def insertRow(self, row, filename):
self.beginInsertRows(QtCore.QModelIndex(),row,row)
self.beginInsertRows(QtCore.QModelIndex(), row, row)
#log.info(u'insert row %d:%s' % (row,filename))
# get short filename to display next to image
(prefix, shortfilename) = os.path.split(unicode(filename))
filename = unicode(filename)
(prefix, shortfilename) = os.path.split(filename)
#log.info(u'shortfilename=%s' % (shortfilename))
# create a preview image
if os.path.exists(filename):
preview = QtGui.QPixmap(unicode(filename))
preview = QtGui.QImage(filename)
w = self.maximagewidth;
h = self.rowheight
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
realw = preview.width();
realh = preview.height()
# and move it to the centre of the preview space
p = QtGui.QPixmap(w,h)
p = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
p.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(p)
painter.drawPixmap((w-realw)/2,(h-realh)/2,preview)
painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
else:
w = self.maximagewidth;
h = self.rowheight
p = QtGui.QPixmap(w,h)
p = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
p.fill(QtCore.Qt.transparent)
# finally create the row
self.items.insert(row, (filename, p, shortfilename))

View File

@ -51,7 +51,7 @@ class ImageMediaItem(MediaManagerItem):
This is the custom media manager item for images.
"""
global log
log=logging.getLogger(u'ImageMediaItem')
log = logging.getLogger(u'ImageMediaItem')
log.info(u'Image Media Item loaded')
def __init__(self, parent, icon, title):
@ -95,7 +95,7 @@ class ImageMediaItem(MediaManagerItem):
self.ImageListView.setModel(self.ImageListData)
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ImageListView.setSpacing(1)
self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.ImageListView.setAlternatingRowColors(True)
self.ImageListView.setDragEnabled(True)
self.ImageListView.setObjectName(u'ImageListView')
@ -114,6 +114,8 @@ class ImageMediaItem(MediaManagerItem):
self.ImageListView, ':/system/system_add.png',
translate(u'ImageMediaItem', u'&Add to Service'),
self.onImageAddClick))
QtCore.QObject.connect(self.ImageListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onImagePreviewClick)
def initialise(self):
self.loadImageList(self.parent.config.load_list(u'images'))
@ -143,12 +145,12 @@ class ImageMediaItem(MediaManagerItem):
def generateSlideData(self, service_item):
indexes = self.ImageListView.selectedIndexes()
service_item.title = u'Images'
service_item.title = u'Image(s)'
for index in indexes:
filename = self.ImageListData.getFilename(index)
frame = QtGui.QPixmap(unicode(filename))
(path, name) =os.path.split(filename)
service_item.add_from_image(name, frame)
frame = QtGui.QImage(unicode(filename))
(path, name) = os.path.split(filename)
service_item.add_from_image(path, name, frame)
def onImagePreviewClick(self):
log.debug(u'Image Preview Requested')