157 webbrowser.open(url) |
154 webbrowser.open(url) |
158 |
155 |
159 Html_Window = True |
156 Html_Window = True |
160 except: |
157 except: |
161 Html_Window = False |
158 Html_Window = False |
162 |
|
163 [ID_NETWORKEDITORNETWORKNODES, |
|
164 ] = [wx.NewId() for _init_ctrls in range(1)] |
|
165 |
|
166 class NetworkEditorTemplate(NodeEditorTemplate): |
|
167 |
|
168 def _init_ctrls(self, prnt): |
|
169 self.NetworkNodes = wx.Notebook(id=ID_NETWORKEDITNETWORKNODES, |
|
170 name='NetworkNodes', parent=prnt, pos=wx.Point(0, 0), |
|
171 size=wx.Size(0, 0), style=wx.NB_LEFT) |
|
172 self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
|
173 self.OnNodeSelectedChanged, id=ID_NETWORKEDITNETWORKNODES) |
|
174 |
|
175 def __init__(self, manager, frame, mode_solo): |
|
176 self.NodeList = manager |
|
177 NodeEditorTemplate.__init__(self, self.NodeList.GetManager(), frame, mode_solo) |
|
178 |
|
179 def GetCurrentNodeId(self): |
|
180 selected = self.NetworkNodes.GetSelection() |
|
181 # At init selected = -1 |
|
182 if selected > 0: |
|
183 window = self.NetworkNodes.GetPage(selected) |
|
184 return window.GetIndex() |
|
185 else: |
|
186 return 0 |
|
187 |
|
188 def RefreshCurrentIndexList(self): |
|
189 selected = self.NetworkNodes.GetSelection() |
|
190 if selected == 0: |
|
191 window = self.NetworkNodes.GetPage(selected) |
|
192 window.RefreshIndexList() |
|
193 else: |
|
194 pass |
|
195 |
|
196 def RefreshNetworkNodes(self): |
|
197 if self.NetworkNodes.GetPageCount() > 0: |
|
198 self.NetworkNodes.DeleteAllPages() |
|
199 if self.NodeList: |
|
200 new_editingpanel = EditingPanel(self.NetworkNodes, self, self.Manager) |
|
201 new_editingpanel.SetIndex(self.Manager.GetCurrentNodeID()) |
|
202 self.NetworkNodes.AddPage(new_editingpanel, "") |
|
203 for idx in self.NodeList.GetSlaveIDs(): |
|
204 new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False) |
|
205 new_editingpanel.SetIndex(idx) |
|
206 self.NetworkNodes.AddPage(new_editingpanel, "") |
|
207 |
|
208 def OnNodeSelectedChanged(self, event): |
|
209 if not self.Closing: |
|
210 selected = event.GetSelection() |
|
211 # At init selected = -1 |
|
212 if selected >= 0: |
|
213 window = self.NetworkNodes.GetPage(selected) |
|
214 self.NodeList.SetCurrentSelected(window.GetIndex()) |
|
215 wx.CallAfter(self.RefreshMainMenu) |
|
216 wx.CallAfter(self.RefreshStatusBar) |
|
217 event.Skip() |
|
218 |
|
219 #------------------------------------------------------------------------------- |
|
220 # Buffer Functions |
|
221 #------------------------------------------------------------------------------- |
|
222 |
|
223 def RefreshBufferState(self): |
|
224 if self.NodeList is not None: |
|
225 nodeID = self.Manager.GetCurrentNodeID() |
|
226 if nodeID != None: |
|
227 nodename = "0x%2.2X %s"%(nodeID, self.Manager.GetCurrentNodeName()) |
|
228 else: |
|
229 nodename = self.Manager.GetCurrentNodeName() |
|
230 self.NetworkNodes.SetPageText(0, nodename) |
|
231 for idx, name in enumerate(self.NodeList.GetSlaveNames()): |
|
232 self.NetworkNodes.SetPageText(idx + 1, name) |
|
233 |
|
234 #------------------------------------------------------------------------------- |
|
235 # Slave Nodes Management |
|
236 #------------------------------------------------------------------------------- |
|
237 |
|
238 def OnAddSlaveMenu(self, event): |
|
239 dialog = AddSlaveDialog(self.Frame) |
|
240 dialog.SetNodeList(self.NodeList) |
|
241 if dialog.ShowModal() == wx.ID_OK: |
|
242 values = dialog.GetValues() |
|
243 result = self.NodeList.AddSlaveNode(values["slaveName"], values["slaveNodeID"], values["edsFile"]) |
|
244 if not result: |
|
245 new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False) |
|
246 new_editingpanel.SetIndex(values["slaveNodeID"]) |
|
247 idx = self.NodeList.GetOrderNumber(values["slaveNodeID"]) |
|
248 self.NetworkNodes.InsertPage(idx, new_editingpanel, "") |
|
249 self.NodeList.SetCurrentSelected(idx) |
|
250 self.NetworkNodes.SetSelection(idx) |
|
251 self.RefreshBufferState() |
|
252 else: |
|
253 self.ShowErrorMessage(result) |
|
254 dialog.Destroy() |
|
255 |
|
256 def OnRemoveSlaveMenu(self, event): |
|
257 slavenames = self.NodeList.GetSlaveNames() |
|
258 slaveids = self.NodeList.GetSlaveIDs() |
|
259 dialog = wx.SingleChoiceDialog(self.Frame, _("Choose a slave to remove"), _("Remove slave"), slavenames) |
|
260 if dialog.ShowModal() == wx.ID_OK: |
|
261 choice = dialog.GetSelection() |
|
262 result = self.NodeList.RemoveSlaveNode(slaveids[choice]) |
|
263 if not result: |
|
264 slaveids.pop(choice) |
|
265 current = self.NetworkNodes.GetSelection() |
|
266 self.NetworkNodes.DeletePage(choice + 1) |
|
267 if self.NetworkNodes.GetPageCount() > 0: |
|
268 new_selection = min(current, self.NetworkNodes.GetPageCount() - 1) |
|
269 self.NetworkNodes.SetSelection(new_selection) |
|
270 if new_selection > 0: |
|
271 self.NodeList.SetCurrentSelected(slaveids[new_selection - 1]) |
|
272 self.RefreshBufferState() |
|
273 else: |
|
274 self.ShowErrorMessage(result) |
|
275 dialog.Destroy() |
|
276 |
|
277 def OpenMasterDCFDialog(self, node_id): |
|
278 self.NetworkNodes.SetSelection(0) |
|
279 self.NetworkNodes.GetPage(0).OpenDCFDialog(node_id) |
|
280 |
|
281 |
159 |
282 [ID_NETWORKEDIT, ID_NETWORKEDITNETWORKNODES, |
160 [ID_NETWORKEDIT, ID_NETWORKEDITNETWORKNODES, |
283 ID_NETWORKEDITHELPBAR, |
161 ID_NETWORKEDITHELPBAR, |
284 ] = [wx.NewId() for _init_ctrls in range(3)] |
162 ] = [wx.NewId() for _init_ctrls in range(3)] |
285 |
163 |