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