|
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_NETWORKEDITORPLUGINMENUADDSLAVE, ID_NETWORKEDITORPLUGINMENUREMOVESLAVE, |
|
15 ID_NETWORKEDITORPLUGINMENUMASTER, |
|
16 ] = [wx.NewId() for _init_coll_PluginMenu_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 GetPluginMenuItems(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_NETWORKEDITORPLUGINMENUADDSLAVE, '', self.OnAddSlaveMenu)), |
|
93 (wx.ITEM_NORMAL, (_('Remove slave'), ID_NETWORKEDITORPLUGINMENUREMOVESLAVE, '', self.OnRemoveSlaveMenu)), |
|
94 (wx.ITEM_SEPARATOR, None), |
|
95 (master_menu, (_('Master'), ID_NETWORKEDITORPLUGINMENUMASTER))] |
|
96 |
|
97 def RefreshMainMenu(self): |
|
98 pass |
|
99 |
|
100 def RefreshPluginMenu(self, plugin_menu): |
|
101 plugin_menu.Enable(ID_NETWORKEDITORPLUGINMENUMASTER, self.NetworkNodes.GetSelection() == 0) |
|
102 |
|
103 def GetTitle(self): |
|
104 fullname = self.Controler.PlugFullName() |
|
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.RefreshPluginMenu) |
|
122 |