All pastes #386886 Raw Edit

Stuff

public text v1 · immutable
·published 2007-03-08 23:16 UTC
rendered paste body
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.