objdictgen/networkeditortemplate.py
author Edouard Tisserant
Mon, 23 Apr 2018 12:32:03 +0200
changeset 805 570e3a444023
parent 780 884a60cbb83e
permissions -rw-r--r--
Workaround Alchemy task not beeing waken up when closing file descriptor it is waiting on, sequel of Xenomai3 all posix file ops
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)