Adding support for forcing PLC variable in DebugVariablePanel
authorlaurent
Mon, 07 Dec 2009 13:38:16 +0100
changeset 472 fecd4f6c01ed
parent 471 ea90da16a5e2
child 473 9ee851841d28
Adding support for forcing PLC variable in DebugVariablePanel
PLCOpenEditor.py
--- a/PLCOpenEditor.py	Mon Dec 07 13:37:27 2009 +0100
+++ b/PLCOpenEditor.py	Mon Dec 07 13:38:16 2009 +0100
@@ -1729,6 +1729,8 @@
             item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie)
         for item in to_delete:
             self.InstancesTree.Delete(item)
+        if infos["type"] in [ITEM_CONFIGURATION, ITEM_RESOURCE]:
+            self.InstancesTree.Expand(root)
 
     def OnInstancesTreeBeginDrag(self, event):
         if self.Controler.DebugAvailable():
@@ -3919,6 +3921,11 @@
             elif colname == "Value":
                 self.data[row].SetValue(value)
     
+    def IsForced(self, row):
+        if row < self.GetNumberRows():
+            return self.data[row].IsForced()
+        return False
+    
     def ResetView(self, grid):
         """
         (wx.grid.Grid) -> Reset the grid view.   Call this to
@@ -4071,6 +4078,7 @@
         self.VariablesGrid.SetSelectionBackground(wx.WHITE)
         self.VariablesGrid.SetSelectionForeground(wx.BLACK)
         self.VariablesGrid.SetDropTarget(DebugVariableDropTarget(self))
+        self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnVariablesGridRightClick)
         
         self.UpButton = wx.Button(id=ID_DEBUGVARIABLEPANELUPBUTTON, label='^',
               name='UpButton', parent=self, pos=wx.Point(0, 0),
@@ -4124,6 +4132,39 @@
         self.Table.ResetView(self.VariablesGrid)
         self.Thaw()
     
+    def GetForceVariableMenuFunction(self, iec_path):
+        iec_type = self.GetDataType(iec_path)
+        def ForceVariableFunction(event):
+            if iec_type is not None:
+                dialog = ForceVariableDialog(self, iec_type)
+                if dialog.ShowModal() == wx.ID_OK:
+                    self.ForceDataValue(iec_path, dialog.GetValue())
+        return ForceVariableFunction
+
+    def GetReleaseVariableMenuFunction(self, iec_path):
+        def ReleaseVariableFunction(event):
+            self.ReleaseDataValue(iec_path)
+        return ReleaseVariableFunction
+    
+    def OnVariablesGridRightClick(self, event):
+        row, col = event.GetRow(), event.GetCol()
+        if self.Table.GetColLabelValue(col, False) == "Value":
+            iec_path = self.Table.GetValueByName(row, "Variable").upper()
+
+            menu = wx.Menu(title='')
+            new_id = wx.NewId()
+            AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Force value"))
+            self.Bind(wx.EVT_MENU, self.GetForceVariableMenuFunction(iec_path.upper()), id=new_id)
+            new_id = wx.NewId()
+            AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Release value"))
+            self.Bind(wx.EVT_MENU, self.GetReleaseVariableMenuFunction(iec_path.upper()), id=new_id)
+            if self.Table.IsForced(row):
+                menu.Enable(new_id, True)
+            else:
+                menu.Enable(new_id, False)
+            self.PopupMenu(menu)
+        event.Skip()
+    
     def OnDeleteButton(self, event):
         idx = self.VariablesGrid.GetGridCursorRow()
         item = self.Table.GetItem(idx)