diff -r 32599dcf311f -r 8fd44bc05aae controls/CustomTree.py --- a/controls/CustomTree.py Thu May 16 23:01:03 2013 +0200 +++ b/controls/CustomTree.py Fri May 17 01:06:58 2013 +0200 @@ -16,11 +16,29 @@ #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import wx +import wx.lib.agw.customtreectrl as CT -class CustomTree(wx.TreeCtrl): +from util.BitmapLibrary import GetBitmap + +# Customize CustomTreeItem for adding icon on item left +CT.GenericTreeItem._ExtraImage = None + +def SetExtraImage(self, image): + self._type = 1 + self._ExtraImage = image +CT.GenericTreeItem.SetExtraImage = SetExtraImage + +_DefaultGetCurrentCheckedImage = CT.GenericTreeItem.GetCurrentCheckedImage +def GetCurrentCheckedImage(self): + if self._ExtraImage is not None: + return self._ExtraImage + return _DefaultGetCurrentCheckedImage(self) +CT.GenericTreeItem.GetCurrentCheckedImage = GetCurrentCheckedImage + +class CustomTree(CT.CustomTreeCtrl): def __init__(self, *args, **kwargs): - wx.TreeCtrl.__init__(self, *args, **kwargs) + CT.CustomTreeCtrl.__init__(self, *args, **kwargs) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.BackgroundBitmap = None @@ -29,18 +47,28 @@ self.AddMenu = None self.Enabled = False - if wx.Platform == '__WXMSW__': - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - else: - self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_SIZE, self.OnResize) - self.Bind(wx.EVT_SCROLL, self.OnScroll) + self.Bind(wx.EVT_SCROLLWIN, self.OnScroll) self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) def SetBackgroundBitmap(self, bitmap, align): self.BackgroundBitmap = bitmap self.BackgroundAlign = align + def SetImageListCheck(self, sizex, sizey, imglist=None): + CT.CustomTreeCtrl.SetImageListCheck(self, sizex, sizey, imglist=None) + + self.ExtraImages = {} + for image in ["function", "functionBlock", "program"]: + self.ExtraImages[image] = self._imageListCheck.Add(GetBitmap(image.upper())) + + def SetItemExtraImage(self, item, bitmap): + image = self.ExtraImages.get(bitmap) + if image is not None: + dc = wx.ClientDC(self) + item.SetExtraImage(image) + self.CalculateSize(item, dc) + self.RefreshLine(item) + def SetAddMenu(self, add_menu): self.AddMenu = add_menu @@ -67,19 +95,6 @@ return wx.Rect(x, y, bitmap_size[0], bitmap_size[1]) - def RefreshBackground(self, refresh_base=False): - dc = wx.ClientDC(self) - dc.Clear() - - bitmap_rect = self.GetBitmapRect() - dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y) - - if refresh_base: - self.Refresh(False) - - def OnEraseBackground(self, event): - self.RefreshBackground(True) - def OnLeftUp(self, event): if self.Enabled: pos = event.GetPosition() @@ -92,13 +107,18 @@ event.Skip() def OnScroll(self, event): - self.RefreshBackground(True) + wx.CallAfter(self.Refresh) event.Skip() - def OnResize(self, event): - self.RefreshBackground(True) - event.Skip() + def OnSize(self, event): + CT.CustomTreeCtrl.OnSize(self, event) + self.Refresh() def OnPaint(self, event): - self.RefreshBackground() - event.Skip() \ No newline at end of file + dc = wx.ClientDC(self) + dc.Clear() + + bitmap_rect = self.GetBitmapRect() + dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y) + + CT.CustomTreeCtrl.OnPaint(self, event) \ No newline at end of file