--- a/controls/PouInstanceVariablesPanel.py Sat May 19 12:40:53 2012 +0200
+++ b/controls/PouInstanceVariablesPanel.py Mon May 21 09:59:44 2012 +0200
@@ -48,6 +48,7 @@
size=wx.Size(0, 28), style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnInstanceChoiceChanged,
self.InstanceChoice)
+ self.InstanceChoice.Bind(wx.EVT_LEFT_DOWN, self.OnInstanceChoiceLeftDown)
self.DebugButton = wx.lib.buttons.GenBitmapButton(
name='DebugButton', parent=self,
@@ -56,7 +57,7 @@
style=wx.NO_BORDER)
self.Bind(wx.EVT_BUTTON, self.OnDebugButtonClick,
self.DebugButton)
-
+
self.VariablesList = CT.CustomTreeCtrl(
name='VariablesList', parent=self,
pos=wx.Point(0, 0), size=wx.Size(0, 0),
@@ -66,12 +67,13 @@
CT.TR_HAS_VARIABLE_ROW_HEIGHT|
CT.TR_HIDE_ROOT|
CT.TR_NO_LINES|
- CT.TR_ALIGN_WINDOWS_RIGHT)
+ getattr(CT, "TR_ALIGN_WINDOWS_RIGHT", CT.TR_ALIGN_WINDOWS))
self.VariablesList.SetIndent(0)
self.VariablesList.SetSpacing(5)
self.VariablesList.DoSelectItem = lambda *x,**y:True
self.VariablesList.Bind(CT.EVT_TREE_ITEM_ACTIVATED,
self.OnVariablesListItemActivated)
+ self.VariablesList.Bind(wx.EVT_LEFT_DOWN, self.OnVariablesListLeftDown)
buttons_sizer = wx.FlexGridSizer(cols=3, hgap=0, rows=1, vgap=0)
buttons_sizer.AddWindow(self.ParentButton, 0, border=0, flag=0)
@@ -106,7 +108,9 @@
def SetController(self, controller):
self.Controller = controller
-
+
+ self.RefreshView()
+
def SetPouType(self, tagname, pou_instance=None):
self.PouTagName = tagname
if pou_instance is not None:
@@ -115,6 +119,8 @@
self.RefreshView()
def ResetView(self):
+ self.Controller = None
+
self.PouTagName = None
self.PouInfos = None
self.PouInstance = None
@@ -124,6 +130,7 @@
def RefreshView(self):
self.VariablesList.DeleteAllItems()
self.InstanceChoice.Clear()
+ self.InstanceChoice.SetValue("")
if self.PouTagName is not None:
self.PouInfos = self.Controller.GetPouVariables(self.PouTagName, self.Debug)
@@ -183,6 +190,8 @@
instances = self.Controller.SearchPouInstances(self.PouTagName, self.Debug)
for instance in instances:
self.InstanceChoice.Append(instance)
+ if len(instances) == 1:
+ self.PouInstance = instances[0]
if self.PouInfos["class"] in [ITEM_CONFIGURATION, ITEM_RESOURCE]:
self.PouInstance = None
self.InstanceChoice.SetSelection(0)
@@ -250,10 +259,21 @@
event.Skip()
return GraphButtonCallback
+ def ShowInstanceChoicePopup(self):
+ self.InstanceChoice.SetFocusFromKbd()
+ size = self.InstanceChoice.GetSize()
+ event = wx.MouseEvent(wx.EVT_LEFT_DOWN._getEvtType())
+ event.m_x = size.width / 2
+ event.m_y = size.height / 2
+ event.SetEventObject(self.InstanceChoice)
+ #event = wx.KeyEvent(wx.EVT_KEY_DOWN._getEvtType())
+ #event.m_keyCode = wx.WXK_SPACE
+ self.InstanceChoice.GetEventHandler().ProcessEvent(event)
+
def OnParentButtonClick(self, event):
if self.InstanceChoice.GetSelection() != -1:
parent_path = self.InstanceChoice.GetStringSelection().rsplit(".", 1)[0]
- tagname = self.Controller.GetPouInstanceTagname(parent_path, self.Debug)
+ tagname = self.Controller.GetPouInstanceTagName(parent_path, self.Debug)
if tagname is not None:
wx.CallAfter(self.SetPouType, tagname, parent_path)
wx.CallAfter(self.ParentWindow.SelectProjectTreeItem, tagname)
@@ -277,7 +297,7 @@
selected_item = event.GetItem()
if selected_item is not None and selected_item.IsOk():
item_infos = self.VariablesList.GetPyData(selected_item)
- if item_infos["class"] not in ITEMS_VARIABLE:
+ if item_infos is not None and item_infos["class"] not in ITEMS_VARIABLE:
if item_infos["class"] == ITEM_RESOURCE:
tagname = self.Controller.ComputeConfigurationResourceName(
instance_path,
@@ -289,4 +309,10 @@
wx.CallAfter(self.ParentWindow.SelectProjectTreeItem, tagname)
event.Skip()
-
+ def OnVariablesListLeftDown(self, event):
+ if self.InstanceChoice.GetSelection() == -1:
+ wx.CallAfter(self.ShowInstanceChoicePopup)
+ event.Skip()
+
+ def OnInstanceChoiceLeftDown(self, event):
+ event.Skip()