objdictgen/networkeditortemplate.py
author Edouard Tisserant
Fri, 23 Mar 2018 15:15:18 +0100
changeset 802 82e8646d08f5
parent 780 884a60cbb83e
permissions -rw-r--r--
Quick fix for new RTDM interface in Xemomai 3, now posix
778
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     1
import wx
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     2
780
884a60cbb83e Fixed bug when importing NodeEditorTemplate
Laurent Bessard
parents: 778
diff changeset
     3
from nodeeditortemplate import NodeEditorTemplate
778
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     4
from subindextable import *
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     5
from commondialogs import *
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     6
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     7
[ID_NETWORKEDITNETWORKNODES,
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     8
] = [wx.NewId() for _init_ctrls in range(1)]
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
     9
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    10
class NetworkEditorTemplate(NodeEditorTemplate):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    11
    
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    12
    def _init_ctrls(self, prnt):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    13
        self.NetworkNodes = wx.Notebook(id=ID_NETWORKEDITNETWORKNODES,
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    14
              name='NetworkNodes', parent=prnt, pos=wx.Point(0, 0),
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    15
              size=wx.Size(0, 0), style=wx.NB_LEFT)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    16
        self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    17
              self.OnNodeSelectedChanged, id=ID_NETWORKEDITNETWORKNODES)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    18
    
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    19
    def __init__(self, manager, frame, mode_solo):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    20
        self.NodeList = manager
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    21
        NodeEditorTemplate.__init__(self, self.NodeList.GetManager(), frame, mode_solo)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    22
    
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    23
    def GetCurrentNodeId(self):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    24
        selected = self.NetworkNodes.GetSelection()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    25
        # At init selected = -1
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    26
        if selected > 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    27
            window = self.NetworkNodes.GetPage(selected)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    28
            return window.GetIndex()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    29
        else:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    30
            return 0
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    31
    
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    32
    def RefreshCurrentIndexList(self):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    33
        selected = self.NetworkNodes.GetSelection()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    34
        if selected == 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    35
            window = self.NetworkNodes.GetPage(selected)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    36
            window.RefreshIndexList()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    37
        else:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    38
            pass
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    39
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    40
    def RefreshNetworkNodes(self):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    41
        if self.NetworkNodes.GetPageCount() > 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    42
            self.NetworkNodes.DeleteAllPages()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    43
        if self.NodeList:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    44
            new_editingpanel = EditingPanel(self.NetworkNodes, self, self.Manager)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    45
            new_editingpanel.SetIndex(self.Manager.GetCurrentNodeID())
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    46
            self.NetworkNodes.AddPage(new_editingpanel, "")
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    47
            for idx in self.NodeList.GetSlaveIDs():
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    48
                new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    49
                new_editingpanel.SetIndex(idx)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    50
                self.NetworkNodes.AddPage(new_editingpanel, "")
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    51
    
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    52
    def OnNodeSelectedChanged(self, event):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    53
        if not self.Closing:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    54
            selected = event.GetSelection()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    55
            # At init selected = -1
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    56
            if selected >= 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    57
                window = self.NetworkNodes.GetPage(selected)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    58
                self.NodeList.SetCurrentSelected(window.GetIndex())
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    59
            wx.CallAfter(self.RefreshMainMenu)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    60
            wx.CallAfter(self.RefreshStatusBar)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    61
        event.Skip()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    62
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    63
#-------------------------------------------------------------------------------
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    64
#                              Buffer Functions
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    65
#-------------------------------------------------------------------------------
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    66
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    67
    def RefreshBufferState(self):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    68
        if self.NodeList is not None:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    69
            nodeID = self.Manager.GetCurrentNodeID()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    70
            if nodeID != None:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    71
                nodename = "0x%2.2X %s"%(nodeID, self.Manager.GetCurrentNodeName())
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    72
            else:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    73
                nodename = self.Manager.GetCurrentNodeName()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    74
            self.NetworkNodes.SetPageText(0, nodename)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    75
            for idx, name in enumerate(self.NodeList.GetSlaveNames()):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    76
                self.NetworkNodes.SetPageText(idx + 1, name)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    77
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    78
#-------------------------------------------------------------------------------
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    79
#                             Slave Nodes Management
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    80
#-------------------------------------------------------------------------------
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    81
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    82
    def OnAddSlaveMenu(self, event):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    83
        dialog = AddSlaveDialog(self.Frame)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    84
        dialog.SetNodeList(self.NodeList)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    85
        if dialog.ShowModal() == wx.ID_OK:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    86
            values = dialog.GetValues()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    87
            result = self.NodeList.AddSlaveNode(values["slaveName"], values["slaveNodeID"], values["edsFile"])
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    88
            if not result:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    89
                new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    90
                new_editingpanel.SetIndex(values["slaveNodeID"])
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    91
                idx = self.NodeList.GetOrderNumber(values["slaveNodeID"])
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    92
                self.NetworkNodes.InsertPage(idx, new_editingpanel, "")
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    93
                self.NodeList.SetCurrentSelected(idx)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    94
                self.NetworkNodes.SetSelection(idx)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    95
                self.RefreshBufferState()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    96
            else:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    97
                self.ShowErrorMessage(result)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    98
        dialog.Destroy()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
    99
        
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   100
    def OnRemoveSlaveMenu(self, event):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   101
        slavenames = self.NodeList.GetSlaveNames()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   102
        slaveids = self.NodeList.GetSlaveIDs()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   103
        dialog = wx.SingleChoiceDialog(self.Frame, _("Choose a slave to remove"), _("Remove slave"), slavenames)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   104
        if dialog.ShowModal() == wx.ID_OK:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   105
            choice = dialog.GetSelection()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   106
            result = self.NodeList.RemoveSlaveNode(slaveids[choice])
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   107
            if not result:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   108
                slaveids.pop(choice)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   109
                current = self.NetworkNodes.GetSelection()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   110
                self.NetworkNodes.DeletePage(choice + 1)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   111
                if self.NetworkNodes.GetPageCount() > 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   112
                    new_selection = min(current, self.NetworkNodes.GetPageCount() - 1)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   113
                    self.NetworkNodes.SetSelection(new_selection)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   114
                    if new_selection > 0:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   115
                        self.NodeList.SetCurrentSelected(slaveids[new_selection - 1])
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   116
                self.RefreshBufferState()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   117
            else:
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   118
                self.ShowErrorMessage(result)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   119
        dialog.Destroy()
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   120
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   121
    def OpenMasterDCFDialog(self, node_id):
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   122
        self.NetworkNodes.SetSelection(0)
9edaa9d21cf9 Fixed conflict in internationalization with Beremiz CanFestival extension
Laurent Bessard
parents:
diff changeset
   123
        self.NetworkNodes.GetPage(0).OpenDCFDialog(node_id)