objdictgen/networkedit.py
changeset 778 9edaa9d21cf9
parent 748 18ed0f3b030a
equal deleted inserted replaced
776:30ced15f996f 778:9edaa9d21cf9
    20 #You should have received a copy of the GNU Lesser General Public
    20 #You should have received a copy of the GNU Lesser General Public
    21 #License along with this library; if not, write to the Free Software
    21 #License along with this library; if not, write to the Free Software
    22 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    22 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 
    23 
    24 import wx
    24 import wx
    25 import wx.grid
       
    26 
    25 
    27 from types import *
    26 from types import *
    28 import os, re, platform, sys, time, traceback, getopt
    27 import os, re, platform, sys, time, traceback, getopt
    29 
    28 
    30 __version__ = "$Revision: 1.27 $"
    29 __version__ = "$Revision: 1.27 $"
    82 if __name__ == '__main__':
    81 if __name__ == '__main__':
    83     __builtin__.__dict__['_'] = wx.GetTranslation
    82     __builtin__.__dict__['_'] = wx.GetTranslation
    84 
    83 
    85 from nodelist import *
    84 from nodelist import *
    86 from nodemanager import *
    85 from nodemanager import *
    87 from nodeeditor import NodeEditorTemplate
    86 from networkeditortemplate import NetworkEditorTemplate
    88 from subindextable import *
       
    89 from commondialogs import *
       
    90 from doc_index.DS301_index import *
    87 from doc_index.DS301_index import *
    91 
    88 
    92 try:
    89 try:
    93     import wx.html
    90     import wx.html
    94 
    91 
   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