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): |