confnodes/canfestival/NetworkEditor.py
changeset 721 ecf4d203c4d4
parent 720 6be032177e2a
child 722 a94f361fc42e
equal deleted inserted replaced
720:6be032177e2a 721:ecf4d203c4d4
     1 import os, sys
       
     2 base_folder = os.path.split(sys.path[0])[0]
       
     3 CanFestivalPath = os.path.join(base_folder, "CanFestival-3")
       
     4 
       
     5 import wx
       
     6 
       
     7 from subindextable import EditingPanel
       
     8 from networkedit import NetworkEditorTemplate
       
     9 from controls import EditorPanel
       
    10 
       
    11 [ID_NETWORKEDITOR, 
       
    12 ] = [wx.NewId() for _init_ctrls in range(1)]
       
    13 
       
    14 [ID_NETWORKEDITORCONFNODEMENUADDSLAVE, ID_NETWORKEDITORCONFNODEMENUREMOVESLAVE, 
       
    15  ID_NETWORKEDITORCONFNODEMENUMASTER, 
       
    16 ] = [wx.NewId() for _init_coll_ConfNodeMenu_Items in range(3)]
       
    17 
       
    18 [ID_NETWORKEDITORMASTERMENUNODEINFOS, ID_NETWORKEDITORMASTERMENUDS301PROFILE,
       
    19  ID_NETWORKEDITORMASTERMENUDS302PROFILE, ID_NETWORKEDITORMASTERMENUDSOTHERPROFILE,
       
    20  ID_NETWORKEDITORMASTERMENUADD, 
       
    21 ] = [wx.NewId() for _init_coll_MasterMenu_Items in range(5)]
       
    22 
       
    23 [ID_NETWORKEDITORADDMENUSDOSERVER, ID_NETWORKEDITORADDMENUSDOCLIENT,
       
    24  ID_NETWORKEDITORADDMENUPDOTRANSMIT, ID_NETWORKEDITORADDMENUPDORECEIVE,
       
    25  ID_NETWORKEDITORADDMENUMAPVARIABLE, ID_NETWORKEDITORADDMENUUSERTYPE,
       
    26 ] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)]
       
    27 
       
    28 class NetworkEditor(EditorPanel, NetworkEditorTemplate):
       
    29     
       
    30     ID = ID_NETWORKEDITOR
       
    31     
       
    32     def _init_coll_MainSizer_Items(self, parent):
       
    33         parent.AddWindow(self.NetworkNodes, 0, border=5, flag=wx.GROW|wx.ALL)
       
    34 
       
    35     def _init_coll_MainSizer_Growables(self, parent):
       
    36         parent.AddGrowableCol(0)
       
    37         parent.AddGrowableRow(0)
       
    38     
       
    39     def _init_sizers(self):
       
    40         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=1, vgap=0)
       
    41         
       
    42         self._init_coll_MainSizer_Items(self.MainSizer)
       
    43         self._init_coll_MainSizer_Growables(self.MainSizer)
       
    44         
       
    45         self.Editor.SetSizer(self.MainSizer)
       
    46     
       
    47     def _init_Editor(self, prnt):
       
    48         self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0), 
       
    49                 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
    50         
       
    51         NetworkEditorTemplate._init_ctrls(self, self.Editor)
       
    52         
       
    53         self._init_sizers()
       
    54         
       
    55     def __init__(self, parent, controler, window):
       
    56         EditorPanel.__init__(self, parent, "", window, controler)
       
    57         NetworkEditorTemplate.__init__(self, controler, window, False)
       
    58     
       
    59         img = wx.Bitmap(os.path.join(CanFestivalPath, "objdictgen", "networkedit.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
       
    60         self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
       
    61         
       
    62         self.RefreshNetworkNodes()
       
    63         self.RefreshBufferState()
       
    64     
       
    65     def __del__(self):
       
    66         self.Controler.OnCloseEditor(self)
       
    67     
       
    68     def GetConfNodeMenuItems(self):
       
    69         add_menu = [(wx.ITEM_NORMAL, (_('SDO Server'), ID_NETWORKEDITORADDMENUSDOSERVER, '', self.OnAddSDOServerMenu)),
       
    70                     (wx.ITEM_NORMAL, (_('SDO Client'), ID_NETWORKEDITORADDMENUSDOCLIENT, '', self.OnAddSDOClientMenu)),
       
    71                     (wx.ITEM_NORMAL, (_('PDO Transmit'), ID_NETWORKEDITORADDMENUPDOTRANSMIT, '', self.OnAddPDOTransmitMenu)),
       
    72                     (wx.ITEM_NORMAL, (_('PDO Receive'), ID_NETWORKEDITORADDMENUPDORECEIVE, '', self.OnAddPDOReceiveMenu)),
       
    73                     (wx.ITEM_NORMAL, (_('Map Variable'), ID_NETWORKEDITORADDMENUMAPVARIABLE, '', self.OnAddMapVariableMenu)),
       
    74                     (wx.ITEM_NORMAL, (_('User Type'), ID_NETWORKEDITORADDMENUUSERTYPE, '', self.OnAddUserTypeMenu))]
       
    75         
       
    76         profile = self.Manager.GetCurrentProfileName()
       
    77         if profile not in ("None", "DS-301"):
       
    78             other_profile_text = _("%s Profile") % profile
       
    79             add_menu.append((wx.ITEM_SEPARATOR, None))
       
    80             for text, indexes in self.Manager.GetCurrentSpecificMenu():
       
    81                 add_menu.append((wx.ITEM_NORMAL, (text, wx.NewId(), '', self.GetProfileCallBack(text))))
       
    82         else:
       
    83             other_profile_text = _('Other Profile')
       
    84         
       
    85         master_menu = [(wx.ITEM_NORMAL, (_('Node infos'), ID_NETWORKEDITORMASTERMENUNODEINFOS, '', self.OnNodeInfosMenu)),
       
    86                        (wx.ITEM_NORMAL, (_('DS-301 Profile'), ID_NETWORKEDITORMASTERMENUDS301PROFILE, '', self.OnCommunicationMenu)),
       
    87                        (wx.ITEM_NORMAL, (_('DS-302 Profile'), ID_NETWORKEDITORMASTERMENUDS302PROFILE, '', self.OnOtherCommunicationMenu)),
       
    88                        (wx.ITEM_NORMAL, (other_profile_text, ID_NETWORKEDITORMASTERMENUDSOTHERPROFILE, '', self.OnEditProfileMenu)),
       
    89                        (wx.ITEM_SEPARATOR, None),
       
    90                        (add_menu, (_('Add'), ID_NETWORKEDITORMASTERMENUADD))]
       
    91         
       
    92         return [(wx.ITEM_NORMAL, (_('Add slave'), ID_NETWORKEDITORCONFNODEMENUADDSLAVE, '', self.OnAddSlaveMenu)),
       
    93                 (wx.ITEM_NORMAL, (_('Remove slave'), ID_NETWORKEDITORCONFNODEMENUREMOVESLAVE, '', self.OnRemoveSlaveMenu)),
       
    94                 (wx.ITEM_SEPARATOR, None),
       
    95                 (master_menu, (_('Master'), ID_NETWORKEDITORCONFNODEMENUMASTER))]
       
    96     
       
    97     def RefreshMainMenu(self):
       
    98         pass
       
    99     
       
   100     def RefreshConfNodeMenu(self, confnode_menu):
       
   101         confnode_menu.Enable(ID_NETWORKEDITORCONFNODEMENUMASTER, self.NetworkNodes.GetSelection() == 0)
       
   102     
       
   103     def GetTitle(self):
       
   104         fullname = self.Controler.CTNFullName()
       
   105         if not self.Manager.CurrentIsSaved():
       
   106             return "~%s~" % fullname
       
   107         return fullname
       
   108 
       
   109     def RefreshView(self):
       
   110         self.RefreshCurrentIndexList()
       
   111     
       
   112     def RefreshBufferState(self):
       
   113         NetworkEditorTemplate.RefreshBufferState(self)
       
   114         self.ParentWindow.RefreshTitle()
       
   115         self.ParentWindow.RefreshFileMenu()
       
   116         self.ParentWindow.RefreshEditMenu()
       
   117         self.ParentWindow.RefreshPageTitles()
       
   118     
       
   119     def OnNodeSelectedChanged(self, event):
       
   120         NetworkEditorTemplate.OnNodeSelectedChanged(self, event)
       
   121         wx.CallAfter(self.ParentWindow.RefreshConfNodeMenu)
       
   122