Index: parcels/osaf/framework/attributeEditors/AttributeEditors.py =================================================================== --- parcels/osaf/framework/attributeEditors/AttributeEditors.py (revision 13431) +++ parcels/osaf/framework/attributeEditors/AttributeEditors.py (working copy) @@ -18,9 +18,9 @@ """ __parcel__ = "osaf.framework.attributeEditors" -import os -import cStringIO -import wx +import os, wx, logging +from cStringIO import StringIO + import osaf.pim as pim import osaf.pim.calendar.Calendar as Calendar import osaf.pim.mail as Mail @@ -28,7 +28,6 @@ #from repository.util.Lob import Lob from chandlerdb.util.c import Nil from osaf.framework.blocks import DrawingUtilities, Styles -import logging #from operator import itemgetter from datetime import datetime, timedelta from PyICU import ICUError, ICUtzinfo, UnicodeString @@ -317,27 +316,39 @@ def CreateControl(self, forEditing, readOnly, parentWidget, id, parentBlock, font): - return wx.StaticBitmap(parentWidget, id, wx.NullBitmap, (0, 0)) + return wx.PyControl(parentWidget, id, (0, 0)) - def __getBitmapFromLob(self, attributeValue): - input = attributeValue.getInputStream() - data = input.read() - input.close() - stream = cStringIO.StringIO(data) - image = wx.ImageFromStream(stream) - # image = image.Scale(width, height) - return wx.BitmapFromImage(image) - def BeginControlEdit(self, item, attributeName, control): try: - bmp = self.__getBitmapFromLob(getattr(item, attributeName)) - except Exception, e: - logger.debug("Couldn't render image (%s)" % str(e)) - bmp = wx.NullBitmap + lob = getattr(item, attributeName) + input = lob.getInputStream() + stream = StringIO(input.read()) + input.close() + image = wx.ImageFromStream(stream) + bitmap = wx.BitmapFromImage(image) + except: + logger.exception("Couldn't load image") + bitmap = wx.NullBitmap + + def paint(event): + control = event.GetEventObject() + size = control.GetClientSize() + bitmapSize = bitmap.GetSize() + if bitmapSize.x and bitmapSize.y: + hScale = float(size.x) / float(bitmapSize.x) + vScale = float(size.y) / float(bitmapSize.y) + scale = min(hScale, vScale) + else: + scale = 1.0 + dc = wx.PaintDC(control) + gc = wx.GraphicsContext.Create(dc) + gc.Scale(scale, scale) + gc.DrawBitmap(bitmap, 0, 0, bitmapSize.x, bitmapSize.y) - control.SetBitmap(bmp) + control.Bind(wx.EVT_PAINT, paint) + class DateTimeAttributeEditor(StringAttributeEditor): def GetAttributeValue(self, item, attributeName): # Never used anymore, since we're drawing ourselves below and we're read-only.