+#----------------------------------------------------------------------------
+# Name: wx.lib.mixins.imagelist
+# Purpose: Helpful mix-in classes for using a wxImageList
+#
+# Author: Robin Dunn
+#
+# Created: 15-May-2001
+# RCS-ID: $Id$
+# Copyright: (c) 2001 by Total Control Software
+# Licence: wxWindows license
+#----------------------------------------------------------------------------
+# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o 2.5 compatability update.
+# o Untested.
+#
+
+import wx
+
+#----------------------------------------------------------------------------
+
+class MagicImageList:
+ '''
+ Mix-in to provide "magic" growing image lists
+ By Mike Fletcher
+ '''
+
+ ### LAZYTREE and LISTCONTROL Methods
+ DEFAULTICONSIZE = 16
+
+ def SetupIcons(self, images=(), size=None):
+ self.__size = size or self.DEFAULTICONSIZE
+ self.__magicImageList = wx.ImageList (self.__size,self.__size)
+ self.__magicImageListMapping = {}
+ self.SetImageList (
+ self.__magicImageList, {
+ 16:wx.IMAGE_LIST_SMALL,
+ 32:wx.IMAGE_LIST_NORMAL,
+ }[self.__size]
+ )
+ for image in images:
+ self.AddIcon (image)
+
+ def GetIcons (self, node):
+ '''Get icon indexes for a given node, or None if no associated icon'''
+ icon = self.GetIcon( node )
+ if icon:
+ index = self.AddIcon (icon)
+ return index, index
+ return None
+
+
+ ### Local methods...
+ def AddIcon(self, icon, mask = wx.NullBitmap):
+ '''Add an icon to the image list, or get the index if already there'''
+ index = self.__magicImageListMapping.get (id (icon))
+ if index is None:
+ if isinstance( icon, wxIconPtr ):
+ index = self.__magicImageList.AddIcon( icon )
+ elif isinstance( icon, wx.BitmapPtr ):
+ if isinstance( mask, wx.Colour ):
+ index = self.__magicImageList.AddWithColourMask( icon, mask )
+ else:
+ index = self.__magicImageList.Add( icon, mask )
+ else:
+ raise ValueError("Unexpected icon object %s, "
+ "expected wx.Icon or wx.Bitmap" % (icon))
+ self.__magicImageListMapping [id (icon)] = index
+ return index
+
+ ### Customisation point...
+ def GetIcon( self, node ):
+ '''Get the actual icon object for a node'''
+ if hasattr (node,"DIAGRAMICON"):
+ return node.DIAGRAMICON
+