Laurent@778: import wx Laurent@778: Laurent@780: from nodeeditortemplate import NodeEditorTemplate Laurent@778: from subindextable import * Laurent@778: from commondialogs import * Laurent@778: Laurent@778: [ID_NETWORKEDITNETWORKNODES, Laurent@778: ] = [wx.NewId() for _init_ctrls in range(1)] Laurent@778: Laurent@778: class NetworkEditorTemplate(NodeEditorTemplate): Laurent@778: Laurent@778: def _init_ctrls(self, prnt): Laurent@778: self.NetworkNodes = wx.Notebook(id=ID_NETWORKEDITNETWORKNODES, Laurent@778: name='NetworkNodes', parent=prnt, pos=wx.Point(0, 0), Laurent@778: size=wx.Size(0, 0), style=wx.NB_LEFT) Laurent@778: self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, Laurent@778: self.OnNodeSelectedChanged, id=ID_NETWORKEDITNETWORKNODES) Laurent@778: Laurent@778: def __init__(self, manager, frame, mode_solo): Laurent@778: self.NodeList = manager Laurent@778: NodeEditorTemplate.__init__(self, self.NodeList.GetManager(), frame, mode_solo) Laurent@778: Laurent@778: def GetCurrentNodeId(self): Laurent@778: selected = self.NetworkNodes.GetSelection() Laurent@778: # At init selected = -1 Laurent@778: if selected > 0: Laurent@778: window = self.NetworkNodes.GetPage(selected) Laurent@778: return window.GetIndex() Laurent@778: else: Laurent@778: return 0 Laurent@778: Laurent@778: def RefreshCurrentIndexList(self): Laurent@778: selected = self.NetworkNodes.GetSelection() Laurent@778: if selected == 0: Laurent@778: window = self.NetworkNodes.GetPage(selected) Laurent@778: window.RefreshIndexList() Laurent@778: else: Laurent@778: pass Laurent@778: Laurent@778: def RefreshNetworkNodes(self): Laurent@778: if self.NetworkNodes.GetPageCount() > 0: Laurent@778: self.NetworkNodes.DeleteAllPages() Laurent@778: if self.NodeList: Laurent@778: new_editingpanel = EditingPanel(self.NetworkNodes, self, self.Manager) Laurent@778: new_editingpanel.SetIndex(self.Manager.GetCurrentNodeID()) Laurent@778: self.NetworkNodes.AddPage(new_editingpanel, "") Laurent@778: for idx in self.NodeList.GetSlaveIDs(): Laurent@778: new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False) Laurent@778: new_editingpanel.SetIndex(idx) Laurent@778: self.NetworkNodes.AddPage(new_editingpanel, "") Laurent@778: Laurent@778: def OnNodeSelectedChanged(self, event): Laurent@778: if not self.Closing: Laurent@778: selected = event.GetSelection() Laurent@778: # At init selected = -1 Laurent@778: if selected >= 0: Laurent@778: window = self.NetworkNodes.GetPage(selected) Laurent@778: self.NodeList.SetCurrentSelected(window.GetIndex()) Laurent@778: wx.CallAfter(self.RefreshMainMenu) Laurent@778: wx.CallAfter(self.RefreshStatusBar) Laurent@778: event.Skip() Laurent@778: Laurent@778: #------------------------------------------------------------------------------- Laurent@778: # Buffer Functions Laurent@778: #------------------------------------------------------------------------------- Laurent@778: Laurent@778: def RefreshBufferState(self): Laurent@778: if self.NodeList is not None: Laurent@778: nodeID = self.Manager.GetCurrentNodeID() Laurent@778: if nodeID != None: Laurent@778: nodename = "0x%2.2X %s"%(nodeID, self.Manager.GetCurrentNodeName()) Laurent@778: else: Laurent@778: nodename = self.Manager.GetCurrentNodeName() Laurent@778: self.NetworkNodes.SetPageText(0, nodename) Laurent@778: for idx, name in enumerate(self.NodeList.GetSlaveNames()): Laurent@778: self.NetworkNodes.SetPageText(idx + 1, name) Laurent@778: Laurent@778: #------------------------------------------------------------------------------- Laurent@778: # Slave Nodes Management Laurent@778: #------------------------------------------------------------------------------- Laurent@778: Laurent@778: def OnAddSlaveMenu(self, event): Laurent@778: dialog = AddSlaveDialog(self.Frame) Laurent@778: dialog.SetNodeList(self.NodeList) Laurent@778: if dialog.ShowModal() == wx.ID_OK: Laurent@778: values = dialog.GetValues() Laurent@778: result = self.NodeList.AddSlaveNode(values["slaveName"], values["slaveNodeID"], values["edsFile"]) Laurent@778: if not result: Laurent@778: new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False) Laurent@778: new_editingpanel.SetIndex(values["slaveNodeID"]) Laurent@778: idx = self.NodeList.GetOrderNumber(values["slaveNodeID"]) Laurent@778: self.NetworkNodes.InsertPage(idx, new_editingpanel, "") Laurent@778: self.NodeList.SetCurrentSelected(idx) Laurent@778: self.NetworkNodes.SetSelection(idx) Laurent@778: self.RefreshBufferState() Laurent@778: else: Laurent@778: self.ShowErrorMessage(result) Laurent@778: dialog.Destroy() Laurent@778: Laurent@778: def OnRemoveSlaveMenu(self, event): Laurent@778: slavenames = self.NodeList.GetSlaveNames() Laurent@778: slaveids = self.NodeList.GetSlaveIDs() Laurent@778: dialog = wx.SingleChoiceDialog(self.Frame, _("Choose a slave to remove"), _("Remove slave"), slavenames) Laurent@778: if dialog.ShowModal() == wx.ID_OK: Laurent@778: choice = dialog.GetSelection() Laurent@778: result = self.NodeList.RemoveSlaveNode(slaveids[choice]) Laurent@778: if not result: Laurent@778: slaveids.pop(choice) Laurent@778: current = self.NetworkNodes.GetSelection() Laurent@778: self.NetworkNodes.DeletePage(choice + 1) Laurent@778: if self.NetworkNodes.GetPageCount() > 0: Laurent@778: new_selection = min(current, self.NetworkNodes.GetPageCount() - 1) Laurent@778: self.NetworkNodes.SetSelection(new_selection) Laurent@778: if new_selection > 0: Laurent@778: self.NodeList.SetCurrentSelected(slaveids[new_selection - 1]) Laurent@778: self.RefreshBufferState() Laurent@778: else: Laurent@778: self.ShowErrorMessage(result) Laurent@778: dialog.Destroy() Laurent@778: Laurent@778: def OpenMasterDCFDialog(self, node_id): Laurent@778: self.NetworkNodes.SetSelection(0) Laurent@778: self.NetworkNodes.GetPage(0).OpenDCFDialog(node_id)