controls/CustomTree.py
changeset 1164 8fd44bc05aae
parent 814 5743cbdff669
child 1165 99972084890d
equal deleted inserted replaced
1163:32599dcf311f 1164:8fd44bc05aae
    14 #You should have received a copy of the GNU General Public
    14 #You should have received a copy of the GNU General Public
    15 #License along with this library; if not, write to the Free Software
    15 #License along with this library; if not, write to the Free Software
    16 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    16 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    17 
    17 
    18 import wx
    18 import wx
       
    19 import wx.lib.agw.customtreectrl as CT
    19 
    20 
    20 class CustomTree(wx.TreeCtrl):
    21 from util.BitmapLibrary import GetBitmap
       
    22 
       
    23 # Customize CustomTreeItem for adding icon on item left
       
    24 CT.GenericTreeItem._ExtraImage = None
       
    25 
       
    26 def SetExtraImage(self, image):
       
    27     self._type = 1
       
    28     self._ExtraImage = image
       
    29 CT.GenericTreeItem.SetExtraImage = SetExtraImage
       
    30 
       
    31 _DefaultGetCurrentCheckedImage = CT.GenericTreeItem.GetCurrentCheckedImage
       
    32 def GetCurrentCheckedImage(self):
       
    33     if self._ExtraImage is not None:
       
    34         return self._ExtraImage
       
    35     return _DefaultGetCurrentCheckedImage(self)
       
    36 CT.GenericTreeItem.GetCurrentCheckedImage = GetCurrentCheckedImage
       
    37 
       
    38 class CustomTree(CT.CustomTreeCtrl):
    21     
    39     
    22     def __init__(self, *args, **kwargs):
    40     def __init__(self, *args, **kwargs):
    23         wx.TreeCtrl.__init__(self, *args, **kwargs)
    41         CT.CustomTreeCtrl.__init__(self, *args, **kwargs)
    24         self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
    42         self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
    25         
    43         
    26         self.BackgroundBitmap = None
    44         self.BackgroundBitmap = None
    27         self.BackgroundAlign = wx.ALIGN_LEFT|wx.ALIGN_TOP
    45         self.BackgroundAlign = wx.ALIGN_LEFT|wx.ALIGN_TOP
    28         
    46         
    29         self.AddMenu = None
    47         self.AddMenu = None
    30         self.Enabled = False
    48         self.Enabled = False
    31         
    49         
    32         if wx.Platform == '__WXMSW__':
    50         self.Bind(wx.EVT_SCROLLWIN, self.OnScroll)
    33             self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
       
    34         else:
       
    35             self.Bind(wx.EVT_PAINT, self.OnPaint)
       
    36             self.Bind(wx.EVT_SIZE, self.OnResize)
       
    37             self.Bind(wx.EVT_SCROLL, self.OnScroll)
       
    38         self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
    51         self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
    39     
    52     
    40     def SetBackgroundBitmap(self, bitmap, align):
    53     def SetBackgroundBitmap(self, bitmap, align):
    41         self.BackgroundBitmap = bitmap
    54         self.BackgroundBitmap = bitmap
    42         self.BackgroundAlign = align
    55         self.BackgroundAlign = align
       
    56     
       
    57     def SetImageListCheck(self, sizex, sizey, imglist=None):
       
    58         CT.CustomTreeCtrl.SetImageListCheck(self, sizex, sizey, imglist=None)
       
    59         
       
    60         self.ExtraImages = {}
       
    61         for image in ["function", "functionBlock", "program"]:
       
    62             self.ExtraImages[image] = self._imageListCheck.Add(GetBitmap(image.upper()))
       
    63     
       
    64     def SetItemExtraImage(self, item, bitmap):
       
    65         image = self.ExtraImages.get(bitmap)
       
    66         if image is not None:
       
    67             dc = wx.ClientDC(self)
       
    68             item.SetExtraImage(image)
       
    69             self.CalculateSize(item, dc)
       
    70             self.RefreshLine(item)
    43     
    71     
    44     def SetAddMenu(self, add_menu):
    72     def SetAddMenu(self, add_menu):
    45         self.AddMenu = add_menu
    73         self.AddMenu = add_menu
    46     
    74     
    47     def Enable(self, enabled):
    75     def Enable(self, enabled):
    65         else:
    93         else:
    66             y = 0
    94             y = 0
    67         
    95         
    68         return wx.Rect(x, y, bitmap_size[0], bitmap_size[1])
    96         return wx.Rect(x, y, bitmap_size[0], bitmap_size[1])
    69     
    97     
    70     def RefreshBackground(self, refresh_base=False):
       
    71         dc = wx.ClientDC(self)
       
    72         dc.Clear()
       
    73         
       
    74         bitmap_rect = self.GetBitmapRect()
       
    75         dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y)
       
    76         
       
    77         if refresh_base:
       
    78             self.Refresh(False)
       
    79     
       
    80     def OnEraseBackground(self, event):
       
    81         self.RefreshBackground(True)
       
    82     
       
    83     def OnLeftUp(self, event):
    98     def OnLeftUp(self, event):
    84         if self.Enabled:
    99         if self.Enabled:
    85             pos = event.GetPosition()
   100             pos = event.GetPosition()
    86             item, flags = self.HitTest(pos)
   101             item, flags = self.HitTest(pos)
    87             
   102             
    90                 flags & wx.TREE_HITTEST_NOWHERE) and self.AddMenu is not None:
   105                 flags & wx.TREE_HITTEST_NOWHERE) and self.AddMenu is not None:
    91                 self.PopupMenuXY(self.AddMenu, pos.x, pos.y)
   106                 self.PopupMenuXY(self.AddMenu, pos.x, pos.y)
    92         event.Skip()
   107         event.Skip()
    93 
   108 
    94     def OnScroll(self, event):
   109     def OnScroll(self, event):
    95         self.RefreshBackground(True)
   110         wx.CallAfter(self.Refresh)
    96         event.Skip()
   111         event.Skip()
    97 
   112 
    98     def OnResize(self, event):
   113     def OnSize(self, event):
    99         self.RefreshBackground(True)
   114         CT.CustomTreeCtrl.OnSize(self, event)
   100         event.Skip()
   115         self.Refresh()
   101     
   116     
   102     def OnPaint(self, event):
   117     def OnPaint(self, event):
   103         self.RefreshBackground()
   118         dc = wx.ClientDC(self)
   104         event.Skip()
   119         dc.Clear()
       
   120         
       
   121         bitmap_rect = self.GetBitmapRect()
       
   122         dc.DrawBitmap(self.BackgroundBitmap, bitmap_rect.x, bitmap_rect.y)
       
   123         
       
   124         CT.CustomTreeCtrl.OnPaint(self, event)