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): |