controls/CustomTree.py
changeset 1730 64d8f52bc8c8
parent 1571 486f94a8032c
child 1736 7e61baa047f0
equal deleted inserted replaced
1726:d51af006fa6b 1730:64d8f52bc8c8
    42         return self._ExtraImage
    42         return self._ExtraImage
    43     return _DefaultGetCurrentCheckedImage(self)
    43     return _DefaultGetCurrentCheckedImage(self)
    44 CT.GenericTreeItem.GetCurrentCheckedImage = GetCurrentCheckedImage
    44 CT.GenericTreeItem.GetCurrentCheckedImage = GetCurrentCheckedImage
    45 
    45 
    46 class CustomTree(CT.CustomTreeCtrl):
    46 class CustomTree(CT.CustomTreeCtrl):
    47     
    47 
    48     def __init__(self, *args, **kwargs):
    48     def __init__(self, *args, **kwargs):
    49         CT.CustomTreeCtrl.__init__(self, *args, **kwargs)
    49         CT.CustomTreeCtrl.__init__(self, *args, **kwargs)
    50         
    50 
    51         self.BackgroundBitmap = None
    51         self.BackgroundBitmap = None
    52         self.BackgroundAlign = wx.ALIGN_LEFT|wx.ALIGN_TOP
    52         self.BackgroundAlign = wx.ALIGN_LEFT|wx.ALIGN_TOP
    53         
    53 
    54         self.AddMenu = None
    54         self.AddMenu = None
    55         self.Enabled = False
    55         self.Enabled = False
    56         
    56 
    57         self.Bind(wx.EVT_SCROLLWIN, self.OnScroll)
    57         self.Bind(wx.EVT_SCROLLWIN, self.OnScroll)
    58         self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
    58         self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
    59     
    59 
    60     def SetBackgroundBitmap(self, bitmap, align):
    60     def SetBackgroundBitmap(self, bitmap, align):
    61         self.BackgroundBitmap = bitmap
    61         self.BackgroundBitmap = bitmap
    62         self.BackgroundAlign = align
    62         self.BackgroundAlign = align
    63     
    63 
    64     def SetImageListCheck(self, sizex, sizey, imglist=None):
    64     def SetImageListCheck(self, sizex, sizey, imglist=None):
    65         CT.CustomTreeCtrl.SetImageListCheck(self, sizex, sizey, imglist=None)
    65         CT.CustomTreeCtrl.SetImageListCheck(self, sizex, sizey, imglist=None)
    66         
    66 
    67         self.ExtraImages = {}
    67         self.ExtraImages = {}
    68         for image in ["function", "functionBlock", "program"]:
    68         for image in ["function", "functionBlock", "program"]:
    69             self.ExtraImages[image] = self._imageListCheck.Add(GetBitmap(image.upper()))
    69             self.ExtraImages[image] = self._imageListCheck.Add(GetBitmap(image.upper()))
    70     
    70 
    71     def SetItemExtraImage(self, item, bitmap):
    71     def SetItemExtraImage(self, item, bitmap):
    72         dc = wx.ClientDC(self)
    72         dc = wx.ClientDC(self)
    73         image = self.ExtraImages.get(bitmap)
    73         image = self.ExtraImages.get(bitmap)
    74         if image is not None:
    74         if image is not None:
    75             item.SetExtraImage(image)
    75             item.SetExtraImage(image)
    76         else:
    76         else:
    77             item.SetExtraImage(None)
    77             item.SetExtraImage(None)
    78         self.CalculateSize(item, dc)
    78         self.CalculateSize(item, dc)
    79         self.RefreshLine(item)   
    79         self.RefreshLine(item)
    80         
    80 
    81     def SetAddMenu(self, add_menu):
    81     def SetAddMenu(self, add_menu):
    82         self.AddMenu = add_menu
    82         self.AddMenu = add_menu
    83     
    83 
    84     def Enable(self, enabled):
    84     def Enable(self, enabled):
    85         self.Enabled = enabled
    85         self.Enabled = enabled
    86     
    86 
    87     def GetBitmapRect(self):
    87     def GetBitmapRect(self):
    88         client_size = self.GetClientSize()
    88         client_size = self.GetClientSize()
    89         bitmap_size = self.BackgroundBitmap.GetSize()
    89         bitmap_size = self.BackgroundBitmap.GetSize()
    90         
    90 
    91         if self.BackgroundAlign & wx.ALIGN_RIGHT:
    91         if self.BackgroundAlign & wx.ALIGN_RIGHT:
    92             x = client_size[0] - bitmap_size[0]
    92             x = client_size[0] - bitmap_size[0]
    93         elif self.BackgroundAlign & wx.ALIGN_CENTER_HORIZONTAL:
    93         elif self.BackgroundAlign & wx.ALIGN_CENTER_HORIZONTAL:
    94             x = (client_size[0] - bitmap_size[0]) / 2
    94             x = (client_size[0] - bitmap_size[0]) / 2
    95         else:
    95         else:
    96             x = 0
    96             x = 0
    97         
    97 
    98         if self.BackgroundAlign & wx.ALIGN_BOTTOM:
    98         if self.BackgroundAlign & wx.ALIGN_BOTTOM:
    99             y = client_size[1] - bitmap_size[1]
    99             y = client_size[1] - bitmap_size[1]
   100         elif self.BackgroundAlign & wx.ALIGN_CENTER_VERTICAL:
   100         elif self.BackgroundAlign & wx.ALIGN_CENTER_VERTICAL:
   101             y = (client_size[1] - bitmap_size[1]) / 2
   101             y = (client_size[1] - bitmap_size[1]) / 2
   102         else:
   102         else:
   103             y = 0
   103             y = 0
   104         
   104 
   105         return wx.Rect(x, y, bitmap_size[0], bitmap_size[1])
   105         return wx.Rect(x, y, bitmap_size[0], bitmap_size[1])
   106     
   106 
   107     def OnLeftUp(self, event):
   107     def OnLeftUp(self, event):
   108         if self.Enabled:
   108         if self.Enabled:
   109             pos = event.GetPosition()
   109             pos = event.GetPosition()
   110             item, flags = self.HitTest(pos)
   110             item, flags = self.HitTest(pos)
   111             
   111 
   112             bitmap_rect = self.GetBitmapRect()
   112             bitmap_rect = self.GetBitmapRect()
   113             if (bitmap_rect.InsideXY(pos.x, pos.y) or 
   113             if (bitmap_rect.InsideXY(pos.x, pos.y) or
   114                 flags & wx.TREE_HITTEST_NOWHERE) and self.AddMenu is not None:
   114                 flags & wx.TREE_HITTEST_NOWHERE) and self.AddMenu is not None:
   115                 wx.CallAfter(self.PopupMenuXY, self.AddMenu, pos.x, pos.y)
   115                 wx.CallAfter(self.PopupMenuXY, self.AddMenu, pos.x, pos.y)
   116         event.Skip()
   116         event.Skip()
   117     
   117 
   118     def OnEraseBackground(self, event):
   118     def OnEraseBackground(self, event):
   119         dc = event.GetDC()
   119         dc = event.GetDC()
   120 
   120 
   121         if not dc:
   121         if not dc:
   122             dc = wx.ClientDC(self)
   122             dc = wx.ClientDC(self)
   123             rect = self.GetUpdateRegion().GetBox()
   123             rect = self.GetUpdateRegion().GetBox()
   124             dc.SetClippingRect(rect)
   124             dc.SetClippingRect(rect)
   125         
   125 
   126         dc.Clear()
   126         dc.Clear()
   127         
   127 
   128         bitmap_rect = self.GetBitmapRect()
   128         bitmap_rect = self.GetBitmapRect()
   129         dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y)
   129         dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y)
   130     
   130 
   131     def OnScroll(self, event):
   131     def OnScroll(self, event):
   132         wx.CallAfter(self.Refresh)
   132         wx.CallAfter(self.Refresh)
   133         event.Skip()
   133         event.Skip()
   134 
   134 
   135     def OnSize(self, event):
   135     def OnSize(self, event):