Fix bug when trying to drag'n drop variable from slave variables grid
authorlaurent
Wed, 29 Feb 2012 12:00:20 +0100
changeset 2037 d54036f70390
parent 2036 7c31fab22c74
child 2038 6f78c4ac22f9
Fix bug when trying to drag'n drop variable from slave variables grid
etherlab/ConfigEditor.py
etherlab/etherlab.py
--- a/etherlab/ConfigEditor.py	Thu Feb 23 23:34:40 2012 +0100
+++ b/etherlab/ConfigEditor.py	Wed Feb 29 12:00:20 2012 +0100
@@ -129,11 +129,11 @@
         """
         for row in range(self.GetNumberRows()):
             row_highlights = self.Highlights.get(row, {})
-            access = self.GetValueByName(row, "Access")
+            pdo_mapping = self.GetValueByName(row, "PDOMapping")
             for col in range(self.GetNumberCols()):
                 colname = self.GetColLabelValue(col, False)
                 
-                if colname in ["PDO index", "PDO name", "PDO type"] and access == "":
+                if colname in ["PDO index", "PDO name", "PDO type"] and pdo_mapping == "":
                     highlight_colours = (wx.LIGHT_GREY, wx.WHITE)
                 else:
                     highlight_colours = row_highlights.get(colname.lower(), [(wx.WHITE, wx.BLACK)])[-1]
@@ -262,6 +262,8 @@
         self._init_ctrls(parent)
         
         self.Controler = controler
+        self.Slave = None
+        self.Type = None
         
         self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames())
         self.SyncManagersGrid.SetTable(self.SyncManagersTable)
@@ -290,8 +292,10 @@
             self.VariablesGrid.SetColMinimalWidth(col, self.VariablesGridColSizes[col])
             self.VariablesGrid.AutoSizeColumn(col, False)
     
-    def SetSlaveInfos(self, slave_infos):
+    def SetSlaveInfos(self, slave_pos, slave_infos):
+        self.Slave = slave_pos
         if slave_infos is not None:
+            self.Type = slave_infos["device_type"]
             self.Vendor.SetValue(slave_infos["vendor"])
             self.ProductCode.SetValue(slave_infos["product_code"])
             self.RevisionNumber.SetValue(slave_infos["revision_number"])
@@ -301,6 +305,7 @@
             self.VariablesTable.SetData(slave_infos["entries"])
             self.VariablesTable.ResetView(self.VariablesGrid)
         else:
+            self.Type = None
             self.Vendor.SetValue("")
             self.ProductCode.SetValue("")
             self.RevisionNumber.SetValue("")
@@ -314,14 +319,14 @@
         row = event.GetRow()
         
         data_type = self.VariablesTable.GetValueByName(row, "Type")
-        access = self.VariablesTable.GetValueByName(row, "Access")
-        if (event.GetCol() == 0 and access != "" and
+        pdo_mapping = self.VariablesTable.GetValueByName(row, "PDOMapping")
+        if (event.GetCol() == 0 and pdo_mapping != "" and
             self.Controler.GetSizeOfType(data_type) is not None):
             
             entry_index = self.Controler.ExtractHexDecValue(self.VariablesTable.GetValueByName(row, "Index"))
             entry_subindex = self.Controler.ExtractHexDecValue(self.VariablesTable.GetValueByName(row, "SubIndex"))
-            var_name = "%s_%4.4x_%2.2x" % (self.Type.GetValue(), entry_index, entry_subindex)
-            if access in ["ro"]:
+            var_name = "%s_%4.4x_%2.2x" % (self.Type, entry_index, entry_subindex)
+            if pdo_mapping in ["R"]:
                 dir = "%I"
             else:
                 dir = "%Q"
@@ -468,7 +473,7 @@
         else:
             type_infos = self.Controler.GetSlaveType(self.Slave)
             self.Type.SetValue(type_infos["device_type"])
-        self.SlaveInfosPanel.SetSlaveInfos(slave_infos)
+        self.SlaveInfosPanel.SetSlaveInfos(self.Slave, slave_infos)
         
     def OnAliasChanged(self, event):
         alias = self.Alias.GetValue()
@@ -656,5 +661,5 @@
         return False, False
         
     def RefreshView(self):
-        self.Editor.SetSlaveInfos(self.Controler.GetSlaveInfos())
+        self.Editor.SetSlaveInfos(self.Controler.GetSlavePos(), self.Controler.GetSlaveInfos())
         
\ No newline at end of file
--- a/etherlab/etherlab.py	Thu Feb 23 23:34:40 2012 +0100
+++ b/etherlab/etherlab.py	Wed Feb 29 12:00:20 2012 +0100
@@ -64,7 +64,10 @@
         """
         @return:  Tupple containing plugin IEC location of current plugin : %I0.0.4.5 => (0,0,4,5)
         """
-        return self.PlugParent.GetCurrentLocation() + (self.BaseParams.getIEC_Channel(), 0)
+        return self.PlugParent.GetCurrentLocation() + self.GetSlavePos()
+
+    def GetSlavePos(self):
+        return self.BaseParams.getIEC_Channel(), 0
 
     def GetSlaveTypeInfos(self):
         slave_type = self.EtherlabDS402Slave.getNode_Type()
@@ -312,7 +315,7 @@
     def AddSlave(self):
         slaves = self.GetSlaves()
         for PlugInstance in self.IterChilds():
-            slaves.append((PlugInstance.BaseParams.getIEC_Channel(), 0))
+            slaves.append(PlugInstance.GetSlavePos())
         slaves.sort()
         if len(slaves) > 0:
             new_pos = (slaves[-1][0] + 1, 0)
@@ -422,7 +425,7 @@
                                      "type": var_class,
                                      "size": var_size,
                                      "IEC_type": entry["Type"],
-                                     "var_name": "%s_%4.4x_%2.2x" % (type_infos["device_type"], index, subindex),
+                                     "var_name": "%s_%4.4x_%2.2x" % ("_".join(type_infos["device_type"].split()), index, subindex),
                                      "location": "%s%s%s"%(var_dir, var_size, ".".join(map(str, current_location + 
                                                                                                 (index, subindex)))),
                                      "description": "",