etherlab/ConfigEditor.py
changeset 2023 f9f884cf3033
parent 2022 c2295d311402
child 2026 65ecbfe9a6f9
equal deleted inserted replaced
2022:c2295d311402 2023:f9f884cf3033
    94             message.Destroy()
    94             message.Destroy()
    95         else:
    95         else:
    96             self.EndModal(wx.ID_OK)
    96             self.EndModal(wx.ID_OK)
    97 
    97 
    98 
    98 
    99 def GetPDOsTableColnames():
       
   100     _ = lambda x : x
       
   101     return ["#", _("Index"), _("Name"), _("Type")]
       
   102 
       
   103 def GetVariablesTableColnames():
    99 def GetVariablesTableColnames():
   104     _ = lambda x : x
   100     _ = lambda x : x
   105     return ["#", _("Index"), _("SubIndex"), _("Name"), _("Type"), _("PDO")]
   101     return ["#", _("Index"), _("SubIndex"), _("Name"), _("Type"), _("PDO index"), _("PDO name"), _("PDO type")]
   106 
   102 
   107 class PDOsTable(CustomTable):
   103 class PDOsTable(CustomTable):
   108     
   104     
   109     def GetValue(self, row, col):
   105     def GetValue(self, row, col):
   110         if row < self.GetNumberRows():
   106         if row < self.GetNumberRows():
   175     def _init_coll_SlaveInfosBoxSizer_Items(self, parent):
   171     def _init_coll_SlaveInfosBoxSizer_Items(self, parent):
   176         parent.AddSizer(self.SlaveInfosSizer, 1, border=5, flag=wx.GROW|wx.ALL)
   172         parent.AddSizer(self.SlaveInfosSizer, 1, border=5, flag=wx.GROW|wx.ALL)
   177     
   173     
   178     def _init_coll_SlaveInfosSizer_Items(self, parent):
   174     def _init_coll_SlaveInfosSizer_Items(self, parent):
   179         parent.AddSizer(self.SlaveInfosDetailsSizer, 0, border=0, flag=wx.GROW)
   175         parent.AddSizer(self.SlaveInfosDetailsSizer, 0, border=0, flag=wx.GROW)
   180         parent.AddWindow(self.PDOsLabel, 0, border=0, flag=wx.GROW)
       
   181         parent.AddWindow(self.PDOsGrid, 0, border=0, flag=wx.GROW)
       
   182         parent.AddWindow(self.VariablesLabel, 0, border=0, flag=wx.GROW)
   176         parent.AddWindow(self.VariablesLabel, 0, border=0, flag=wx.GROW)
   183         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
   177         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
   184         
   178         
   185     def _init_coll_SlaveInfosSizer_Growables(self, parent):
   179     def _init_coll_SlaveInfosSizer_Growables(self, parent):
   186         parent.AddGrowableCol(0)
   180         parent.AddGrowableCol(0)
   187         parent.AddGrowableRow(2)
   181         parent.AddGrowableRow(2)
   188         parent.AddGrowableRow(4)
   182         
   189     
       
   190     def _init_coll_SlaveInfosDetailsSizer_Items(self, parent):
   183     def _init_coll_SlaveInfosDetailsSizer_Items(self, parent):
   191         parent.AddWindow(self.VendorLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL|wx.GROW)
   184         parent.AddWindow(self.VendorLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL|wx.GROW)
   192         parent.AddWindow(self.Vendor, 0, border=0, flag=wx.GROW)
   185         parent.AddWindow(self.Vendor, 0, border=0, flag=wx.GROW)
   193         parent.AddWindow(self.ProductCodeLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL|wx.GROW)
   186         parent.AddWindow(self.ProductCodeLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL|wx.GROW)
   194         parent.AddWindow(self.ProductCode, 0, border=0, flag=wx.GROW)
   187         parent.AddWindow(self.ProductCode, 0, border=0, flag=wx.GROW)
   204     def _init_sizers(self):
   197     def _init_sizers(self):
   205         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   198         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   206         self.PositionSizer = wx.FlexGridSizer(cols=6, hgap=5, rows=1, vgap=0)
   199         self.PositionSizer = wx.FlexGridSizer(cols=6, hgap=5, rows=1, vgap=0)
   207         self.TypeSizer = wx.BoxSizer(wx.HORIZONTAL)
   200         self.TypeSizer = wx.BoxSizer(wx.HORIZONTAL)
   208         self.SlaveInfosBoxSizer = wx.StaticBoxSizer(self.SlaveInfosStaticBox, wx.VERTICAL)
   201         self.SlaveInfosBoxSizer = wx.StaticBoxSizer(self.SlaveInfosStaticBox, wx.VERTICAL)
   209         self.SlaveInfosSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=5)
   202         self.SlaveInfosSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5)
   210         self.SlaveInfosDetailsSizer = wx.FlexGridSizer(cols=4, hgap=5, rows=2, vgap=5)
   203         self.SlaveInfosDetailsSizer = wx.FlexGridSizer(cols=4, hgap=5, rows=2, vgap=5)
   211         
   204         
   212         self._init_coll_MainSizer_Growables(self.MainSizer)
   205         self._init_coll_MainSizer_Growables(self.MainSizer)
   213         self._init_coll_MainSizer_Items(self.MainSizer)
   206         self._init_coll_MainSizer_Items(self.MainSizer)
   214         self._init_coll_PositionSizer_Growables(self.PositionSizer)
   207         self._init_coll_PositionSizer_Growables(self.PositionSizer)
   291         
   284         
   292         self.Physics = wx.TextCtrl(id=ID_SLAVEPANELPHYSICS, value='',
   285         self.Physics = wx.TextCtrl(id=ID_SLAVEPANELPHYSICS, value='',
   293               name='Physics', parent=self, pos=wx.Point(0, 0),
   286               name='Physics', parent=self, pos=wx.Point(0, 0),
   294               size=wx.Size(0, 24), style=wx.TE_READONLY)
   287               size=wx.Size(0, 24), style=wx.TE_READONLY)
   295         
   288         
   296         self.PDOsLabel =  wx.StaticText(id=ID_SLAVEPANELPDOSLABEL,
       
   297               label=_('PDO entries:'), name='PDOsLabel', parent=self,
       
   298               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
   299         
       
   300         self.PDOsGrid = CustomGrid(id=ID_SLAVEPANELPDOSGRID,
       
   301               name='PDOsGrid', parent=self, pos=wx.Point(0, 0), 
       
   302               size=wx.Size(0, 0), style=wx.VSCROLL)
       
   303         
       
   304         self.VariablesLabel =  wx.StaticText(id=ID_SLAVEPANELVARIABLESLABEL,
   289         self.VariablesLabel =  wx.StaticText(id=ID_SLAVEPANELVARIABLESLABEL,
   305               label=_('Variable entries:'), name='VariablesLabel', parent=self,
   290               label=_('Variable entries:'), name='VariablesLabel', parent=self,
   306               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   291               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   307         
   292         
   308         self.VariablesGrid = CustomGrid(id=ID_SLAVEPANELPDOSGRID,
   293         self.VariablesGrid = CustomGrid(id=ID_SLAVEPANELPDOSGRID,
   320         
   305         
   321         self.Controler = controler
   306         self.Controler = controler
   322         self.ParentWindow = window
   307         self.ParentWindow = window
   323         self.Slave = slave
   308         self.Slave = slave
   324         
   309         
   325         self.PDOsTable = PDOsTable(self, [], GetPDOsTableColnames())
       
   326         self.PDOsGrid.SetTable(self.PDOsTable)
       
   327         self.PDOsGridColAlignements = [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
       
   328         self.PDOsGridColSizes = [40, 100, 150, 150]
       
   329         self.PDOsGrid.SetRowLabelSize(0)
       
   330         for col in range(self.PDOsTable.GetNumberCols()):
       
   331             attr = wx.grid.GridCellAttr()
       
   332             attr.SetAlignment(self.PDOsGridColAlignements[col], wx.ALIGN_CENTRE)
       
   333             self.PDOsGrid.SetColAttr(col, attr)
       
   334             self.PDOsGrid.SetColMinimalWidth(col, self.PDOsGridColSizes[col])
       
   335             self.PDOsGrid.AutoSizeColumn(col, False)
       
   336         
       
   337         self.VariablesTable = VariablesTable(self, [], GetVariablesTableColnames())
   310         self.VariablesTable = VariablesTable(self, [], GetVariablesTableColnames())
   338         self.VariablesGrid.SetTable(self.VariablesTable)
   311         self.VariablesGrid.SetTable(self.VariablesTable)
   339         self.VariablesGridColAlignements = [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT]
   312         self.VariablesGridColAlignements = [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, 
   340         self.VariablesGridColSizes = [40, 100, 100, 150, 150, 100]
   313                                             wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, 
       
   314                                             wx.ALIGN_LEFT, wx.ALIGN_LEFT]
       
   315         self.VariablesGridColSizes = [40, 100, 100, 150, 150, 100, 150, 100]
   341         self.VariablesGrid.SetRowLabelSize(0)
   316         self.VariablesGrid.SetRowLabelSize(0)
   342         for col in range(self.VariablesTable.GetNumberCols()):
   317         for col in range(self.VariablesTable.GetNumberCols()):
   343             attr = wx.grid.GridCellAttr()
   318             attr = wx.grid.GridCellAttr()
   344             attr.SetAlignment(self.VariablesGridColAlignements[col], wx.ALIGN_CENTRE)
   319             attr.SetAlignment(self.VariablesGridColAlignements[col], wx.ALIGN_CENTRE)
   345             self.VariablesGrid.SetColAttr(col, attr)
   320             self.VariablesGrid.SetColAttr(col, attr)
   346             self.VariablesGrid.SetColMinimalWidth(col, self.VariablesGridColSizes[col])
   321             self.VariablesGrid.SetColMinimalWidth(col, self.VariablesGridColSizes[col])
   347             self.VariablesGrid.AutoSizeColumn(col, False)
   322             self.VariablesGrid.AutoSizeColumn(col, False)
   348         
   323         
   349         self.RefreshView()
   324         self.RefreshView()
       
   325     
       
   326     def __del__(self):
       
   327         self.Controler.OnCloseEditor()
   350     
   328     
   351     def GetSlaveTitle(self):
   329     def GetSlaveTitle(self):
   352         type_infos = self.Controler.GetSlaveType(self.Slave)
   330         type_infos = self.Controler.GetSlaveType(self.Slave)
   353         return "%s (%d:%d)" % (type_infos["device_type"], self.Slave[0], self.Slave[1])
   331         return "%s (%d:%d)" % (type_infos["device_type"], self.Slave[0], self.Slave[1])
   354     
   332     
   368             self.Type.SetValue(slave_infos["device_type"])
   346             self.Type.SetValue(slave_infos["device_type"])
   369             self.Vendor.SetValue(slave_infos["vendor"])
   347             self.Vendor.SetValue(slave_infos["vendor"])
   370             self.ProductCode.SetValue(slave_infos["product_code"])
   348             self.ProductCode.SetValue(slave_infos["product_code"])
   371             self.RevisionNumber.SetValue(slave_infos["revision_number"])
   349             self.RevisionNumber.SetValue(slave_infos["revision_number"])
   372             self.Physics.SetValue(slave_infos["physics"])
   350             self.Physics.SetValue(slave_infos["physics"])
   373             self.PDOsTable.SetData(slave_infos["pdos"])
       
   374             self.PDOsTable.ResetView(self.PDOsGrid)
       
   375             self.VariablesTable.SetData(slave_infos["variables"])
   351             self.VariablesTable.SetData(slave_infos["variables"])
   376             self.VariablesTable.ResetView(self.VariablesGrid)
   352             self.VariablesTable.ResetView(self.VariablesGrid)
   377         else:
   353         else:
   378             type_infos = self.Controler.GetSlaveType(self.Slave)
   354             type_infos = self.Controler.GetSlaveType(self.Slave)
   379             self.Type.SetValue(type_infos["device_type"])
   355             self.Type.SetValue(type_infos["device_type"])
   424             row = event.GetRow()
   400             row = event.GetRow()
   425             data_type = self.VariablesTable.GetValueByName(row, "Type")
   401             data_type = self.VariablesTable.GetValueByName(row, "Type")
   426             var_name = self.VariablesTable.GetValueByName(row, "Name")
   402             var_name = self.VariablesTable.GetValueByName(row, "Name")
   427             entry_index = self.Controler.ExtractHexDecValue(self.VariablesTable.GetValueByName(row, "Index"))
   403             entry_index = self.Controler.ExtractHexDecValue(self.VariablesTable.GetValueByName(row, "Index"))
   428             entry_subindex = self.VariablesTable.GetValueByName(row, "SubIndex")
   404             entry_subindex = self.VariablesTable.GetValueByName(row, "SubIndex")
   429             pdo_index = self.VariablesTable.GetValueByName(row, "PDO")
   405             if self.VariablesTable.GetValueByName(row, "PDO type") == "Transmit":
   430             for pdo_row in xrange(self.PDOsTable.GetNumberRows()):
   406                 dir = "%I"
   431                 if self.PDOsTable.GetValueByName(row, "Index") == pdo_index:
   407             else:
   432                     if self.PDOsTable.GetValueByName(row, "Type") == "Transmit":
   408                 dir = "%Q"
   433                         dir = "%I"
       
   434                     else:
       
   435                         dir = "%Q"
       
   436                     break
       
   437             location = "%s%s" % (dir, self.Controler.GetSizeOfType(data_type)) + \
   409             location = "%s%s" % (dir, self.Controler.GetSizeOfType(data_type)) + \
   438                        ".".join(map(lambda x:str(x), self.Controler.GetCurrentLocation() + self.Slave + (entry_index, entry_subindex)))
   410                        ".".join(map(lambda x:str(x), self.Controler.GetCurrentLocation() + self.Slave + (entry_index, entry_subindex)))
   439             data = wx.TextDataObject(str((location, "location", data_type, var_name, "")))
   411             data = wx.TextDataObject(str((location, "location", data_type, var_name, "")))
   440             dragSource = wx.DropSource(self.VariablesGrid)
   412             dragSource = wx.DropSource(self.VariablesGrid)
   441             dragSource.SetData(data)
   413             dragSource.SetData(data)
   497         
   469         
   498         img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
   470         img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
   499         self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
   471         self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
   500         
   472         
   501     def GetTitle(self):
   473     def GetTitle(self):
   502         filename = self.Controler.GetFilename()
   474         fullname = self.Controler.PlugFullName()
   503         if not self.Controler.ConfigIsSaved():
   475         if not self.Controler.ConfigIsSaved():
   504             return "~%s~" % filename
   476             return "~%s~" % fullname
   505         return filename
   477         return fullname
   506     
   478     
   507     def GetBufferState(self):
   479     def GetBufferState(self):
   508         return self.Controler.GetBufferState()
   480         return self.Controler.GetBufferState()
   509         
   481         
   510     def Undo(self):
   482     def Undo(self):