|
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) |