controls/PouInstanceVariablesPanel.py
changeset 687 629680fb0582
parent 686 3216bf5f711d
child 692 e00ce7077bfc
--- 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()