172 self.EditImage: _ButtonCallbacks( |
172 self.EditImage: _ButtonCallbacks( |
173 self.EditButtonCallback, None), |
173 self.EditButtonCallback, None), |
174 self.DebugInstanceImage: _ButtonCallbacks( |
174 self.DebugInstanceImage: _ButtonCallbacks( |
175 self.DebugButtonCallback, self.DebugButtonDClickCallback)} |
175 self.DebugButtonCallback, self.DebugButtonDClickCallback)} |
176 |
176 |
|
177 self.FilterCtrl = wx.SearchCtrl(self) |
|
178 self.FilterCtrl.ShowCancelButton(True) |
|
179 self.FilterCtrl.Bind(wx.EVT_TEXT, self.OnFilterUpdate) |
|
180 self.FilterCtrl.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, self.OnFilterCancel) |
|
181 |
|
182 searchMenu = wx.Menu() |
|
183 item = searchMenu.AppendCheckItem(-1, _("Match Case")) |
|
184 self.Bind(wx.EVT_MENU, self.OnSearchMenu, item) |
|
185 item = searchMenu.AppendCheckItem(-1, _("Whole Words")) |
|
186 self.Bind(wx.EVT_MENU, self.OnSearchMenu, item) |
|
187 self.FilterCtrl.SetMenu(searchMenu) |
|
188 |
|
189 |
177 buttons_sizer = wx.FlexGridSizer(cols=3, hgap=0, rows=1, vgap=0) |
190 buttons_sizer = wx.FlexGridSizer(cols=3, hgap=0, rows=1, vgap=0) |
178 buttons_sizer.Add(self.ParentButton) |
191 buttons_sizer.Add(self.ParentButton) |
179 buttons_sizer.Add(self.InstanceChoice, flag=wx.GROW) |
192 buttons_sizer.Add(self.InstanceChoice, flag=wx.GROW) |
180 buttons_sizer.Add(self.DebugButton) |
193 buttons_sizer.Add(self.DebugButton) |
181 buttons_sizer.AddGrowableCol(1) |
194 buttons_sizer.AddGrowableCol(1) |
182 buttons_sizer.AddGrowableRow(0) |
195 buttons_sizer.AddGrowableRow(0) |
183 |
196 |
184 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
197 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0) |
185 main_sizer.Add(buttons_sizer, flag=wx.GROW) |
198 main_sizer.Add(buttons_sizer, flag=wx.GROW) |
186 main_sizer.Add(self.VariablesList, flag=wx.GROW) |
199 main_sizer.Add(self.VariablesList, flag=wx.GROW) |
|
200 main_sizer.Add(self.FilterCtrl, flag=wx.GROW) |
187 main_sizer.AddGrowableCol(0) |
201 main_sizer.AddGrowableCol(0) |
188 main_sizer.AddGrowableRow(1) |
202 main_sizer.AddGrowableRow(1) |
189 |
203 |
190 self.SetSizer(main_sizer) |
204 self.SetSizer(main_sizer) |
191 |
205 |
196 self.DebugButton.Hide() |
210 self.DebugButton.Hide() |
197 |
211 |
198 self.PouTagName = None |
212 self.PouTagName = None |
199 self.PouInfos = None |
213 self.PouInfos = None |
200 self.PouInstance = None |
214 self.PouInstance = None |
|
215 |
|
216 self.Filter = None |
|
217 self.FilterCaseSensitive = False |
|
218 self.FilterWholeWord = False |
|
219 |
201 |
220 |
202 def __del__(self): |
221 def __del__(self): |
203 self.Controller = None |
222 self.Controller = None |
204 |
223 |
205 def SetTreeImageList(self, tree_image_list): |
224 def SetTreeImageList(self, tree_image_list): |
233 self.PouTagName = None |
252 self.PouTagName = None |
234 self.PouInfos = None |
253 self.PouInfos = None |
235 self.PouInstance = None |
254 self.PouInstance = None |
236 |
255 |
237 self.RefreshView() |
256 self.RefreshView() |
|
257 |
|
258 def OnSearchMenu(self, event): |
|
259 searchMenu = self.FilterCtrl.GetMenu().GetMenuItems() |
|
260 self.FilterCaseSensitive = searchMenu[0].IsChecked() |
|
261 self.FilterWholeWord = searchMenu[1].IsChecked() |
|
262 self.RefreshView() |
|
263 |
|
264 def OnFilterUpdate(self, event): |
|
265 self.Filter = self.FilterCtrl.GetValue() |
|
266 self.RefreshView() |
|
267 event.Skip() |
|
268 |
|
269 def OnFilterCancel(self, event): |
|
270 self.FilterCtrl.SetValue('') |
|
271 event.Skip() |
238 |
272 |
239 def RefreshView(self): |
273 def RefreshView(self): |
240 self.Freeze() |
274 self.Freeze() |
241 self.VariablesList.DeleteAllItems() |
275 self.VariablesList.DeleteAllItems() |
242 |
276 |
250 else: |
284 else: |
251 self.PouInfos = None |
285 self.PouInfos = None |
252 if self.PouInfos is not None: |
286 if self.PouInfos is not None: |
253 root = self.VariablesList.AddRoot("", data=self.PouInfos) |
287 root = self.VariablesList.AddRoot("", data=self.PouInfos) |
254 for var_infos in self.PouInfos.variables: |
288 for var_infos in self.PouInfos.variables: |
|
289 if self.Filter: |
|
290 pattern = self.Filter |
|
291 varname = var_infos.name |
|
292 if not self.FilterCaseSensitive: |
|
293 pattern = pattern.upper() |
|
294 varname = varname.upper() |
|
295 if ((pattern != varname) if self.FilterWholeWord else |
|
296 (pattern not in varname)): |
|
297 continue |
255 if var_infos.type is not None: |
298 if var_infos.type is not None: |
256 text = "%s (%s)" % (var_infos.name, var_infos.type) |
299 text = "%s (%s)" % (var_infos.name, var_infos.type) |
257 else: |
300 else: |
258 text = var_infos.name |
301 text = var_infos.name |
259 |
302 |