commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r6188 - trunk/gnue-forms/src/uidrivers/gtk2/widgets


From: johannes
Subject: r6188 - trunk/gnue-forms/src/uidrivers/gtk2/widgets
Date: Thu, 12 Aug 2004 13:50:06 -0500 (CDT)

Author: johannes
Date: 2004-08-12 13:50:04 -0500 (Thu, 12 Aug 2004)
New Revision: 6188

Modified:
   trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py
Log:
Added image widget


Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py        2004-08-12 
13:04:23 UTC (rev 6187)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py        2004-08-12 
18:50:04 UTC (rev 6188)
@@ -1,6 +1,9 @@
+# GNU Enterprise Forms - GTK UI Driver - Image widget
 #
-# This file is part of GNU Enterprise.
+# Copyright 2001-2004 Free Software Foundation
 #
+# This file is part of GNU Enterprise
+#
 # GNU Enterprise 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; either
@@ -16,61 +19,103 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place
 # - Suite 330, Boston, MA 02111-1307, USA.
 #
-# Copyright 2000-2004 Free Software Foundation
-#
-# FILE:
-# gtk2/widgets/image.py
-#
-# DESCRIPTION:
-# A part of a gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id$
+
 import gtk
+import StringIO
+import Image
 
 from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
 
-#
-# UIImage
-#
-# Widget set specific function that creates a single instance of an image
-#
+# =============================================================================
+# This class implements an image widget for GTK2 driver
+# =============================================================================
+
 class UIImage(UIHelper):
 
-  def _createWidget(self, event, spacer):
-    object = event.object
+  # ---------------------------------------------------------------------------
+  # Create the gtk-widget
+  # ---------------------------------------------------------------------------
 
-    image = gtk.Image()
-    # image.set_from_file(
+  def _createWidget (self, event, spacer):
+    image = gtk.Image ()
     
-    png=wxEmptyBitmap(1,1)
+    self.pane = gtk.ScrolledWindow ()
+    self.pane.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+    self.pane.set_shadow_type (gtk.SHADOW_NONE)
+
+    self.pane.add_with_viewport (image)
+    self.pane.set_size_request (self.itemWidth, self.itemHeight)
+
+    event.container.put (self.pane, self.itemX, self.itemY)
     
-    self.pane = gtk.ScrolledWindow()
+    return image
 
-    pane.add_with_viewport(image)
     
-    pane.set_size_request(self.itemWidth, self.itemHeight)
+  # ---------------------------------------------------------------------------
+  # Set the widget's PIL
+  # ---------------------------------------------------------------------------
 
-    event.container.put(pane, object.Char__x * event.widgetWidth,
-                        (object.Char__y + spacer) * event.widgetHeight)
+  def setValue (self, value, index = 0, enabled = True):
+    widget = self.widgets [index]
+
+    imgx, imgy = value.size
+    scrx, scry = self.pane.size_request ()
+
+    # Subtract the surrounding frame
+    scrx      -= 4
+    scry      -= 4
+
+    scalex = scaley = 1
+
+    fit = self._gfObject.fit
+
+    if fit == "auto":
+      if float (scrx) / imgx < float (scry) / imgy:
+        fit = "width"
+      else:
+        fit = "height"
+
+    if fit == "width":
+      scalex = scaley = float (scrx) / imgx
+
+    elif fit == "height":
+      scalex = scaley = float (scry) / imgy
+
+    elif fit == "both":
+      scalex = float (scrx) / imgx
+      scaley = float (scry) / imgy
+
+    if scalex != 1 or scaley != 1:
+      nWidth  = abs (int (imgx * scalex))
+      nHeight = abs (int (imgy * scaley))
+      value = value.resize ((nWidth, nHeight), Image.BICUBIC)
     
-    return self.image
+    widget.set_from_pixbuf (self.__imageToGdkPixbuf (value))
     
-  def setValue(self, value, index=0, enabled=1):
-    widget = self.widgets[index]
-    
-    # widget.SetEvtHandlerEnabled(FALSE)
 
-    # Convert the PIL Image to a wxBitmap
-    #wxImg = wxEmptyImage(value.size[0],value.size[1])
-    #wxImg.SetData(value.convert("RGB").tostring())
-    #image = wxImg.ConvertToBitmap()
-    print "Not Implemented Yet"
+  # ---------------------------------------------------------------------------
+  # Convert a PIL image into a Gdk.Pixbuf
+  # ---------------------------------------------------------------------------
 
-    # widget.SetEvtHandlerEnabled(TRUE)
+  def __imageToGdkPixbuf (self, pilImage):
+    file = StringIO.StringIO ()
+    pilImage.save (file, 'ppm')
+    contents = file.getvalue()
+    file.close ()
+    loader = gtk.gdk.PixbufLoader ('pnm')
+    loader.write (contents, len (contents))
+    pixbuf = loader.get_pixbuf ()
+    loader.close ()
+    return pixbuf
 
+
+# -----------------------------------------------------------------------------
+# Configuration data
+# -----------------------------------------------------------------------------
+
 configuration = {
-    'baseClass'  : UIImage,
-    'provides'   : 'GFImage',
-    'container'  : 0,
-    }
+  'baseClass'  : UIImage,
+  'provides'   : 'GFImage',
+  'container'  : 0,
+}


Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py
___________________________________________________________________
Name: svn:keywords
   - +Id
   + Id





reply via email to

[Prev in Thread] Current Thread [Next in Thread]