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