390 |
390 |
391 self._init_sizers() |
391 self._init_sizers() |
392 |
392 |
393 def __init__(self, parent, manager, editable = True): |
393 def __init__(self, parent, manager, editable = True): |
394 self._init_ctrls(parent.GetNoteBook()) |
394 self._init_ctrls(parent.GetNoteBook()) |
395 self.Parent = parent |
395 self.ParentWindow = parent |
396 self.Manager = manager |
396 self.Manager = manager |
397 self.ListIndex = [] |
397 self.ListIndex = [] |
398 self.ChoiceIndex = [] |
398 self.ChoiceIndex = [] |
399 self.FirstCall = False |
399 self.FirstCall = False |
400 self.Editable = editable |
400 self.Editable = editable |
437 if self.Editable: |
437 if self.Editable: |
438 self.SubindexGrid.SetGridCursor(0, 0) |
438 self.SubindexGrid.SetGridCursor(0, 0) |
439 selected = self.IndexChoice.GetStringSelection() |
439 selected = self.IndexChoice.GetStringSelection() |
440 if selected != "": |
440 if selected != "": |
441 if selected == "User Type": |
441 if selected == "User Type": |
442 self.Parent.AddUserType() |
442 self.ParentWindow.AddUserType() |
443 elif selected == "SDO Server": |
443 elif selected == "SDO Server": |
444 self.Manager.AddSDOServerToCurrent() |
444 self.Manager.AddSDOServerToCurrent() |
445 elif selected == "SDO Client": |
445 elif selected == "SDO Client": |
446 self.Manager.AddSDOClientToCurrent() |
446 self.Manager.AddSDOClientToCurrent() |
447 elif selected == "PDO Receive": |
447 elif selected == "PDO Receive": |
448 self.Manager.AddPDOReceiveToCurrent() |
448 self.Manager.AddPDOReceiveToCurrent() |
449 elif selected == "PDO Transmit": |
449 elif selected == "PDO Transmit": |
450 self.Manager.AddPDOTransmitToCurrent() |
450 self.Manager.AddPDOTransmitToCurrent() |
451 elif selected == "Map Variable": |
451 elif selected == "Map Variable": |
452 self.Parent.AddMapVariable() |
452 self.ParentWindow.AddMapVariable() |
453 elif selected in [menu for menu, indexes in self.Manager.GetCurrentSpecificMenu()]: |
453 elif selected in [menu for menu, indexes in self.Manager.GetCurrentSpecificMenu()]: |
454 self.Manager.AddSpecificEntryToCurrent(selected) |
454 self.Manager.AddSpecificEntryToCurrent(selected) |
455 else: |
455 else: |
456 index = self.ChoiceIndex[self.IndexChoice.GetSelection()] |
456 index = self.ChoiceIndex[self.IndexChoice.GetSelection()] |
457 self.Manager.ManageEntriesOfCurrent([index], []) |
457 self.Manager.ManageEntriesOfCurrent([index], []) |
458 self.Parent.RefreshBufferState() |
458 self.ParentWindow.RefreshBufferState() |
459 self.RefreshIndexList() |
459 self.RefreshIndexList() |
460 event.Skip() |
460 event.Skip() |
461 |
461 |
462 def OnPartListBoxClick(self, event): |
462 def OnPartListBoxClick(self, event): |
463 self.SubindexGrid.SetGridCursor(0, 0) |
463 self.SubindexGrid.SetGridCursor(0, 0) |
469 self.RefreshTable() |
469 self.RefreshTable() |
470 event.Skip() |
470 event.Skip() |
471 |
471 |
472 def OnSubindexGridSelectCell(self, event): |
472 def OnSubindexGridSelectCell(self, event): |
473 wx.CallAfter(self.BeginDrag) |
473 wx.CallAfter(self.BeginDrag) |
474 wx.CallAfter(self.Parent.RefreshStatusBar) |
474 wx.CallAfter(self.ParentWindow.RefreshStatusBar) |
475 event.Skip() |
475 event.Skip() |
476 |
476 |
477 def BeginDrag(self): |
477 def BeginDrag(self): |
478 if not self.Parent.ModeSolo: |
478 if not self.ParentWindow.ModeSolo: |
479 row = self.SubindexGrid.GetGridCursorRow() |
479 row = self.SubindexGrid.GetGridCursorRow() |
480 col = self.SubindexGrid.GetGridCursorCol() |
480 col = self.SubindexGrid.GetGridCursorCol() |
481 if not self.Editable and col == 0: |
481 if not self.Editable and col == 0: |
482 selected = self.IndexList.GetSelection() |
482 selected = self.IndexList.GetSelection() |
483 if selected != wx.NOT_FOUND: |
483 if selected != wx.NOT_FOUND: |
549 if selected == wx.NOT_FOUND or selected >= len(self.ListIndex) or selectedindex != self.ListIndex[selected]: |
549 if selected == wx.NOT_FOUND or selected >= len(self.ListIndex) or selectedindex != self.ListIndex[selected]: |
550 self.Table.Empty() |
550 self.Table.Empty() |
551 self.CallbackCheck.SetValue(False) |
551 self.CallbackCheck.SetValue(False) |
552 self.CallbackCheck.Disable() |
552 self.CallbackCheck.Disable() |
553 self.Table.ResetView(self.SubindexGrid) |
553 self.Table.ResetView(self.SubindexGrid) |
554 self.Parent.RefreshStatusBar() |
554 self.ParentWindow.RefreshStatusBar() |
555 else: |
555 else: |
556 self.IndexList.SetSelection(selected) |
556 self.IndexList.SetSelection(selected) |
557 self.RefreshTable() |
557 self.RefreshTable() |
558 |
558 |
559 def RefreshTable(self): |
559 def RefreshTable(self): |
568 self.Table.SetCurrentIndex(index) |
568 self.Table.SetCurrentIndex(index) |
569 data, editors = result |
569 data, editors = result |
570 self.Table.SetData(data) |
570 self.Table.SetData(data) |
571 self.Table.SetEditors(editors) |
571 self.Table.SetEditors(editors) |
572 self.Table.ResetView(self.SubindexGrid) |
572 self.Table.ResetView(self.SubindexGrid) |
573 self.Parent.RefreshStatusBar() |
573 self.ParentWindow.RefreshStatusBar() |
574 |
574 |
575 #------------------------------------------------------------------------------- |
575 #------------------------------------------------------------------------------- |
576 # Editing Table value function |
576 # Editing Table value function |
577 #------------------------------------------------------------------------------- |
577 #------------------------------------------------------------------------------- |
578 |
578 |
583 col = event.GetCol() |
583 col = event.GetCol() |
584 name = self.Table.GetColLabelValue(col) |
584 name = self.Table.GetColLabelValue(col) |
585 value = self.Table.GetValue(subIndex, col) |
585 value = self.Table.GetValue(subIndex, col) |
586 editor = self.Table.GetEditor(subIndex, col) |
586 editor = self.Table.GetEditor(subIndex, col) |
587 self.Manager.SetCurrentEntry(index, subIndex, value, name, editor) |
587 self.Manager.SetCurrentEntry(index, subIndex, value, name, editor) |
588 self.Parent.RefreshBufferState() |
588 self.ParentWindow.RefreshBufferState() |
589 wx.CallAfter(self.RefreshTable) |
589 wx.CallAfter(self.RefreshTable) |
590 event.Skip() |
590 event.Skip() |
591 |
591 |
592 def OnCallbackCheck(self, event): |
592 def OnCallbackCheck(self, event): |
593 if self.Editable: |
593 if self.Editable: |
594 index = self.Table.GetCurrentIndex() |
594 index = self.Table.GetCurrentIndex() |
595 self.Manager.SetCurrentEntryCallbacks(index, self.CallbackCheck.GetValue()) |
595 self.Manager.SetCurrentEntryCallbacks(index, self.CallbackCheck.GetValue()) |
596 self.Parent.RefreshBufferState() |
596 self.ParentWindow.RefreshBufferState() |
597 wx.CallAfter(self.RefreshTable) |
597 wx.CallAfter(self.RefreshTable) |
598 event.Skip() |
598 event.Skip() |
599 |
599 |
600 #------------------------------------------------------------------------------- |
600 #------------------------------------------------------------------------------- |
601 # Contextual Menu functions |
601 # Contextual Menu functions |
648 infos = self.Manager.GetEntryInfos(index) |
648 infos = self.Manager.GetEntryInfos(index) |
649 dialog = wx.TextEntryDialog(self, "Give a new name for index 0x%04X"%index, |
649 dialog = wx.TextEntryDialog(self, "Give a new name for index 0x%04X"%index, |
650 "Rename an index", infos["name"], wx.OK|wx.CANCEL) |
650 "Rename an index", infos["name"], wx.OK|wx.CANCEL) |
651 if dialog.ShowModal() == wx.ID_OK: |
651 if dialog.ShowModal() == wx.ID_OK: |
652 self.Manager.SetCurrentEntryName(index, dialog.GetValue()) |
652 self.Manager.SetCurrentEntryName(index, dialog.GetValue()) |
653 self.Parent.RefreshBufferState() |
653 self.ParentWindow.RefreshBufferState() |
654 self.RefreshIndexList() |
654 self.RefreshIndexList() |
655 dialog.Destroy() |
655 dialog.Destroy() |
656 event.Skip() |
656 event.Skip() |
657 |
657 |
658 def OnModifyIndexMenu(self, event): |
658 def OnModifyIndexMenu(self, event): |
669 elif valuetype == 1: |
669 elif valuetype == 1: |
670 dialog.SetValues(length = values[2]) |
670 dialog.SetValues(length = values[2]) |
671 if dialog.ShowModal() == wx.ID_OK: |
671 if dialog.ShowModal() == wx.ID_OK: |
672 type, min, max, length = dialog.GetValues() |
672 type, min, max, length = dialog.GetValues() |
673 self.Manager.SetCurrentUserType(index, type, min, max, length) |
673 self.Manager.SetCurrentUserType(index, type, min, max, length) |
674 self.Parent.RefreshBufferState() |
674 self.ParentWindow.RefreshBufferState() |
675 self.RefreshIndexList() |
675 self.RefreshIndexList() |
676 event.Skip() |
676 event.Skip() |
677 |
677 |
678 def OnDeleteIndexMenu(self, event): |
678 def OnDeleteIndexMenu(self, event): |
679 if self.Editable: |
679 if self.Editable: |
680 selected = self.IndexList.GetSelection() |
680 selected = self.IndexList.GetSelection() |
681 if selected != wx.NOT_FOUND: |
681 if selected != wx.NOT_FOUND: |
682 index = self.ListIndex[selected] |
682 index = self.ListIndex[selected] |
683 if self.Manager.IsCurrentEntry(index): |
683 if self.Manager.IsCurrentEntry(index): |
684 self.Manager.ManageEntriesOfCurrent([],[index]) |
684 self.Manager.ManageEntriesOfCurrent([],[index]) |
685 self.Parent.RefreshBufferState() |
685 self.ParentWindow.RefreshBufferState() |
686 self.RefreshIndexList() |
686 self.RefreshIndexList() |
687 event.Skip() |
687 event.Skip() |
688 |
688 |
689 def OnAddSubindexMenu(self, event): |
689 def OnAddSubindexMenu(self, event): |
690 if self.Editable: |
690 if self.Editable: |
696 "Add subindexes", "1", wx.OK|wx.CANCEL) |
696 "Add subindexes", "1", wx.OK|wx.CANCEL) |
697 if dialog.ShowModal() == wx.ID_OK: |
697 if dialog.ShowModal() == wx.ID_OK: |
698 try: |
698 try: |
699 number = int(dialog.GetValue()) |
699 number = int(dialog.GetValue()) |
700 self.Manager.AddSubentriesToCurrent(index, number) |
700 self.Manager.AddSubentriesToCurrent(index, number) |
701 self.Parent.RefreshBufferState() |
701 self.ParentWindow.RefreshBufferState() |
702 self.RefreshIndexList() |
702 self.RefreshIndexList() |
703 except: |
703 except: |
704 message = wx.MessageDialog(self, "An integer is required!", "ERROR", wx.OK|wx.ICON_ERROR) |
704 message = wx.MessageDialog(self, "An integer is required!", "ERROR", wx.OK|wx.ICON_ERROR) |
705 message.ShowModal() |
705 message.ShowModal() |
706 message.Destroy() |
706 message.Destroy() |
717 "Delete subindexes", "1", wx.OK|wx.CANCEL) |
717 "Delete subindexes", "1", wx.OK|wx.CANCEL) |
718 if dialog.ShowModal() == wx.ID_OK: |
718 if dialog.ShowModal() == wx.ID_OK: |
719 try: |
719 try: |
720 number = int(dialog.GetValue()) |
720 number = int(dialog.GetValue()) |
721 self.Manager.RemoveSubentriesFromCurrent(index, number) |
721 self.Manager.RemoveSubentriesFromCurrent(index, number) |
722 self.Parent.RefreshBufferState() |
722 self.ParentWindow.RefreshBufferState() |
723 self.RefreshIndexList() |
723 self.RefreshIndexList() |
724 except: |
724 except: |
725 message = wx.MessageDialog(self, "An integer is required!", "ERROR", wx.OK|wx.ICON_ERROR) |
725 message = wx.MessageDialog(self, "An integer is required!", "ERROR", wx.OK|wx.ICON_ERROR) |
726 message.ShowModal() |
726 message.ShowModal() |
727 message.Destroy() |
727 message.Destroy() |