18 from controls.DebugVariablePanel import DebugVariablePanel |
18 from controls.DebugVariablePanel import DebugVariablePanel |
19 from dialogs import ProjectDialog, PouDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog, SearchInProjectDialog |
19 from dialogs import ProjectDialog, PouDialog, PouTransitionDialog, PouActionDialog, FindInPouDialog, SearchInProjectDialog |
20 from util.BitmapLibrary import GetBitmap |
20 from util.BitmapLibrary import GetBitmap |
21 |
21 |
22 # Define PLCOpenEditor controls id |
22 # Define PLCOpenEditor controls id |
23 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
23 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
24 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
24 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
25 ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, |
25 ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, |
26 ID_PLCOPENEDITORSECONDSPLITTER, ID_PLCOPENEDITORTHIRDSPLITTER, |
26 ID_PLCOPENEDITORSECONDSPLITTER, ID_PLCOPENEDITORTHIRDSPLITTER, |
27 ID_PLCOPENEDITORLIBRARYPANEL, ID_PLCOPENEDITORLIBRARYSEARCHCTRL, |
27 ID_PLCOPENEDITORLIBRARYPANEL, ID_PLCOPENEDITORLIBRARYSEARCHCTRL, |
28 ID_PLCOPENEDITORLIBRARYTREE, ID_PLCOPENEDITORLIBRARYCOMMENT, |
28 ID_PLCOPENEDITORLIBRARYTREE, ID_PLCOPENEDITORLIBRARYCOMMENT, |
29 ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTABSOPENED, |
29 ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTABSOPENED, |
30 ID_PLCOPENEDITOREDITORMENUTOOLBAR, ID_PLCOPENEDITOREDITORTOOLBAR, |
30 ID_PLCOPENEDITOREDITORMENUTOOLBAR, ID_PLCOPENEDITOREDITORTOOLBAR, |
31 ID_PLCOPENEDITORPROJECTPANEL, |
31 ID_PLCOPENEDITORPROJECTPANEL, |
32 ] = [wx.NewId() for _init_ctrls in range(17)] |
32 ] = [wx.NewId() for _init_ctrls in range(17)] |
33 |
33 |
34 # Define PLCOpenEditor EditMenu extra items id |
34 # Define PLCOpenEditor EditMenu extra items id |
35 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
35 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
36 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
36 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
37 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
37 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
38 ID_PLCOPENEDITOREDITMENUFINDNEXT, ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, |
38 ID_PLCOPENEDITOREDITMENUFINDNEXT, ID_PLCOPENEDITOREDITMENUFINDPREVIOUS, |
39 ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, ID_PLCOPENEDITOREDITMENUADDRESOURCE |
39 ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, ID_PLCOPENEDITOREDITMENUADDRESOURCE |
40 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(10)] |
40 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(10)] |
41 |
41 |
42 # Define PLCOpenEditor DisplayMenu extra items id |
42 # Define PLCOpenEditor DisplayMenu extra items id |
43 [ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
43 [ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
44 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(1)] |
44 ] = [wx.NewId() for _init_coll_DisplayMenu_Items in range(1)] |
45 |
45 |
46 #------------------------------------------------------------------------------- |
46 #------------------------------------------------------------------------------- |
47 # EditorToolBar definitions |
47 # EditorToolBar definitions |
48 #------------------------------------------------------------------------------- |
48 #------------------------------------------------------------------------------- |
80 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
80 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
81 "add_variable", _("Create a new variable")), |
81 "add_variable", _("Create a new variable")), |
82 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
82 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
83 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
83 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
84 "add_block", _("Create a new block")), |
84 "add_block", _("Create a new block")), |
85 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
85 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
86 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
86 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
87 "add_connection", _("Create a new connection"))], |
87 "add_connection", _("Create a new connection"))], |
88 "LD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
88 "LD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
89 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
89 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
90 "move", _("Move the view")), |
90 "move", _("Move the view")), |
91 (True, FREEDRAWING_MODE, |
91 (True, FREEDRAWING_MODE, |
92 ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", |
92 ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", |
93 "add_comment", _("Create a new comment")), |
93 "add_comment", _("Create a new comment")), |
94 (True, FREEDRAWING_MODE, |
94 (True, FREEDRAWING_MODE, |
95 ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", |
95 ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", |
96 "add_powerrail", _("Create a new power rail")), |
96 "add_powerrail", _("Create a new power rail")), |
97 (False, DRIVENDRAWING_MODE, |
97 (False, DRIVENDRAWING_MODE, |
98 ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool", |
98 ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool", |
99 "add_rung", _("Create a new rung")), |
99 "add_rung", _("Create a new rung")), |
100 (True, FREEDRAWING_MODE, |
100 (True, FREEDRAWING_MODE, |
101 ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool", |
101 ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool", |
102 "add_coil", _("Create a new coil")), |
102 "add_coil", _("Create a new coil")), |
103 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
103 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
104 ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", |
104 ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", |
105 "add_contact", _("Create a new contact")), |
105 "add_contact", _("Create a new contact")), |
106 (False, DRIVENDRAWING_MODE, |
106 (False, DRIVENDRAWING_MODE, |
107 ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool", |
107 ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool", |
108 "add_branch", _("Create a new branch")), |
108 "add_branch", _("Create a new branch")), |
109 (True, FREEDRAWING_MODE, |
109 (True, FREEDRAWING_MODE, |
110 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
110 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
111 "add_variable", _("Create a new variable")), |
111 "add_variable", _("Create a new variable")), |
112 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
112 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
113 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
113 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
114 "add_block", _("Create a new block")), |
114 "add_block", _("Create a new block")), |
115 (True, FREEDRAWING_MODE, |
115 (True, FREEDRAWING_MODE, |
116 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
116 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
117 "add_connection", _("Create a new connection"))], |
117 "add_connection", _("Create a new connection"))], |
118 "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
118 "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
119 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
119 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
120 "move", _("Move the view")), |
120 "move", _("Move the view")), |
121 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
121 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
122 ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", |
122 ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool", |
123 "add_comment", _("Create a new comment")), |
123 "add_comment", _("Create a new comment")), |
124 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
124 (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
125 ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool", |
125 ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool", |
126 "add_initial_step", _("Create a new initial step")), |
126 "add_initial_step", _("Create a new initial step")), |
127 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
127 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
128 ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool", |
128 ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool", |
129 "add_step", _("Create a new step")), |
129 "add_step", _("Create a new step")), |
130 (True, FREEDRAWING_MODE, |
130 (True, FREEDRAWING_MODE, |
131 ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool", |
131 ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool", |
132 "add_transition", _("Create a new transition")), |
132 "add_transition", _("Create a new transition")), |
133 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
133 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
134 ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", |
134 ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", |
135 "add_action", _("Create a new action block")), |
135 "add_action", _("Create a new action block")), |
136 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
136 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
137 ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool", |
137 ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool", |
138 "add_divergence", _("Create a new divergence")), |
138 "add_divergence", _("Create a new divergence")), |
139 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
139 (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
140 ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool", |
140 ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool", |
141 "add_jump", _("Create a new jump")), |
141 "add_jump", _("Create a new jump")), |
142 (True, FREEDRAWING_MODE, |
142 (True, FREEDRAWING_MODE, |
143 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
143 ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool", |
144 "add_variable", _("Create a new variable")), |
144 "add_variable", _("Create a new variable")), |
145 (True, FREEDRAWING_MODE, |
145 (True, FREEDRAWING_MODE, |
146 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
146 ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool", |
147 "add_block", _("Create a new block")), |
147 "add_block", _("Create a new block")), |
148 (True, FREEDRAWING_MODE, |
148 (True, FREEDRAWING_MODE, |
149 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
149 ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool", |
150 "add_connection", _("Create a new connection")), |
150 "add_connection", _("Create a new connection")), |
151 (True, FREEDRAWING_MODE, |
151 (True, FREEDRAWING_MODE, |
152 ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", |
152 ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool", |
153 "add_powerrail", _("Create a new power rail")), |
153 "add_powerrail", _("Create a new power rail")), |
154 (True, FREEDRAWING_MODE, |
154 (True, FREEDRAWING_MODE, |
155 ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", |
155 ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool", |
156 "add_contact", _("Create a new contact"))], |
156 "add_contact", _("Create a new contact"))], |
157 "ST" : [], |
157 "ST" : [], |
158 "IL" : [], |
158 "IL" : [], |
159 "debug": [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
159 "debug": [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, |
160 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
160 ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool", |
262 if len(tab["pages"]) == 0: |
262 if len(tab["pages"]) == 0: |
263 raise ValueError, "Not possible" |
263 raise ValueError, "Not possible" |
264 if tab["size"][0] == rect.width: |
264 if tab["size"][0] == rect.width: |
265 if tab["pos"][1] == rect.y: |
265 if tab["pos"][1] == rect.y: |
266 split = (wx.TOP, float(tab["size"][1]) / float(rect.height)) |
266 split = (wx.TOP, float(tab["size"][1]) / float(rect.height)) |
267 split_rect = wx.Rect(rect.x, rect.y + tab["size"][1] + TAB_BORDER, |
267 split_rect = wx.Rect(rect.x, rect.y + tab["size"][1] + TAB_BORDER, |
268 rect.width, rect.height - tab["size"][1] - TAB_BORDER) |
268 rect.width, rect.height - tab["size"][1] - TAB_BORDER) |
269 elif tab["pos"][1] == rect.height + 1 - tab["size"][1]: |
269 elif tab["pos"][1] == rect.height + 1 - tab["size"][1]: |
270 split = (wx.BOTTOM, 1.0 - float(tab["size"][1]) / float(rect.height)) |
270 split = (wx.BOTTOM, 1.0 - float(tab["size"][1]) / float(rect.height)) |
271 split_rect = wx.Rect(rect.x, rect.y, |
271 split_rect = wx.Rect(rect.x, rect.y, |
272 rect.width, rect.height - tab["size"][1] - TAB_BORDER) |
272 rect.width, rect.height - tab["size"][1] - TAB_BORDER) |
273 break |
273 break |
274 elif tab["size"][1] == rect.height: |
274 elif tab["size"][1] == rect.height: |
275 if tab["pos"][0] == rect.x: |
275 if tab["pos"][0] == rect.x: |
276 split = (wx.LEFT, float(tab["size"][0]) / float(rect.width)) |
276 split = (wx.LEFT, float(tab["size"][0]) / float(rect.width)) |
277 split_rect = wx.Rect(rect.x + tab["size"][0] + TAB_BORDER, rect.y, |
277 split_rect = wx.Rect(rect.x + tab["size"][0] + TAB_BORDER, rect.y, |
278 rect.width - tab["size"][0] - TAB_BORDER, rect.height) |
278 rect.width - tab["size"][0] - TAB_BORDER, rect.height) |
279 elif tab["pos"][0] == rect.width + 1 - tab["size"][0]: |
279 elif tab["pos"][0] == rect.width + 1 - tab["size"][0]: |
280 split = (wx.RIGHT, 1.0 - float(tab["size"][0]) / float(rect.width)) |
280 split = (wx.RIGHT, 1.0 - float(tab["size"][0]) / float(rect.width)) |
281 split_rect = wx.Rect(rect.x, rect.y, |
281 split_rect = wx.Rect(rect.x, rect.y, |
282 rect.width - tab["size"][0] - TAB_BORDER, rect.height) |
282 rect.width - tab["size"][0] - TAB_BORDER, rect.height) |
283 break |
283 break |
284 if split != None: |
284 if split != None: |
285 split_tab = tabs.pop(idx) |
285 split_tab = tabs.pop(idx) |
286 return {"split": split, |
286 return {"split": split, |
287 "tab": split_tab, |
287 "tab": split_tab, |
288 "others": ComputeTabsLayout(tabs, split_rect)} |
288 "others": ComputeTabsLayout(tabs, split_rect)} |
289 else: |
289 else: |
290 if SimplifyTabLayout(tabs, rect): |
290 if SimplifyTabLayout(tabs, rect): |
291 return ComputeTabsLayout(tabs, rect) |
291 return ComputeTabsLayout(tabs, rect) |
292 return tabs |
292 return tabs |
296 #------------------------------------------------------------------------------- |
296 #------------------------------------------------------------------------------- |
297 |
297 |
298 UNEDITABLE_NAMES_DICT = dict([(_(name), name) for name in UNEDITABLE_NAMES]) |
298 UNEDITABLE_NAMES_DICT = dict([(_(name), name) for name in UNEDITABLE_NAMES]) |
299 |
299 |
300 class IDEFrame(wx.Frame): |
300 class IDEFrame(wx.Frame): |
301 |
301 |
302 # Compatibility function for wx versions < 2.6 |
302 # Compatibility function for wx versions < 2.6 |
303 if wx.VERSION < (2, 6, 0): |
303 if wx.VERSION < (2, 6, 0): |
304 def Bind(self, event, function, id = None): |
304 def Bind(self, event, function, id = None): |
305 if id is not None: |
305 if id is not None: |
306 event(self, id, function) |
306 event(self, id, function) |
307 else: |
307 else: |
308 event(self, function) |
308 event(self, function) |
309 |
309 |
310 def _init_coll_MenuBar_Menus(self, parent): |
310 def _init_coll_MenuBar_Menus(self, parent): |
311 parent.Append(menu=self.FileMenu, title=_(u'&File')) |
311 parent.Append(menu=self.FileMenu, title=_(u'&File')) |
312 parent.Append(menu=self.EditMenu, title=_(u'&Edit')) |
312 parent.Append(menu=self.EditMenu, title=_(u'&Edit')) |
313 parent.Append(menu=self.DisplayMenu, title=_(u'&Display')) |
313 parent.Append(menu=self.DisplayMenu, title=_(u'&Display')) |
314 parent.Append(menu=self.HelpMenu, title=_(u'&Help')) |
314 parent.Append(menu=self.HelpMenu, title=_(u'&Help')) |
315 |
315 |
316 def _init_coll_FileMenu_Items(self, parent): |
316 def _init_coll_FileMenu_Items(self, parent): |
317 pass |
317 pass |
318 |
318 |
319 def _init_coll_AddMenu_Items(self, parent, add_config=True): |
319 def _init_coll_AddMenu_Items(self, parent, add_config=True): |
320 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
320 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
321 kind=wx.ITEM_NORMAL, text=_(u'&Data Type')) |
321 kind=wx.ITEM_NORMAL, text=_(u'&Data Type')) |
322 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
322 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
323 kind=wx.ITEM_NORMAL, text=_(u'&Function')) |
323 kind=wx.ITEM_NORMAL, text=_(u'&Function')) |
369 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
369 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
370 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
370 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
371 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
371 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
372 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
372 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
373 self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND) |
373 self.Bind(wx.EVT_MENU, self.OnFindMenu, id=wx.ID_FIND) |
374 self.Bind(wx.EVT_MENU, self.OnFindNextMenu, |
374 self.Bind(wx.EVT_MENU, self.OnFindNextMenu, |
375 id=ID_PLCOPENEDITOREDITMENUFINDNEXT) |
375 id=ID_PLCOPENEDITOREDITMENUFINDNEXT) |
376 self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu, |
376 self.Bind(wx.EVT_MENU, self.OnFindPreviousMenu, |
377 id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS) |
377 id=ID_PLCOPENEDITOREDITMENUFINDPREVIOUS) |
378 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
378 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
379 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
379 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
380 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
380 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
381 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
381 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
382 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
382 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
383 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
383 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
384 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
384 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
385 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
385 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
386 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
386 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
387 id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK) |
387 id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK) |
388 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"), |
388 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"), |
389 id=ID_PLCOPENEDITOREDITMENUADDPROGRAM) |
389 id=ID_PLCOPENEDITOREDITMENUADDPROGRAM) |
390 self.Bind(wx.EVT_MENU, self.AddResourceMenu, |
390 self.Bind(wx.EVT_MENU, self.AddResourceMenu, |
391 id=ID_PLCOPENEDITOREDITMENUADDRESOURCE) |
391 id=ID_PLCOPENEDITOREDITMENUADDRESOURCE) |
392 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
392 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
393 id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION) |
393 id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION) |
394 self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL) |
394 self.Bind(wx.EVT_MENU, self.OnSelectAllMenu, id=wx.ID_SELECTALL) |
395 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) |
395 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) |
396 |
396 |
397 self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None), |
397 self.AddToMenuToolBar([(wx.ID_UNDO, "undo", _(u'Undo'), None), |
398 (wx.ID_REDO, "redo", _(u'Redo'), None), |
398 (wx.ID_REDO, "redo", _(u'Redo'), None), |
399 None, |
399 None, |
400 (wx.ID_CUT, "cut", _(u'Cut'), None), |
400 (wx.ID_CUT, "cut", _(u'Cut'), None), |
401 (wx.ID_COPY, "copy", _(u'Copy'), None), |
401 (wx.ID_COPY, "copy", _(u'Copy'), None), |
415 for idx, value in enumerate(ZOOM_FACTORS): |
415 for idx, value in enumerate(ZOOM_FACTORS): |
416 new_id = wx.NewId() |
416 new_id = wx.NewId() |
417 AppendMenu(zoommenu, help='', id=new_id, |
417 AppendMenu(zoommenu, help='', id=new_id, |
418 kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%") |
418 kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%") |
419 self.Bind(wx.EVT_MENU, self.GenerateZoomFunction(idx), id=new_id) |
419 self.Bind(wx.EVT_MENU, self.GenerateZoomFunction(idx), id=new_id) |
420 |
420 |
421 parent.AppendSeparator() |
421 parent.AppendSeparator() |
422 AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
422 AppendMenu(parent, help='', id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE, |
423 kind=wx.ITEM_NORMAL, text=_(u'Reset Perspective')) |
423 kind=wx.ITEM_NORMAL, text=_(u'Reset Perspective')) |
424 self.Bind(wx.EVT_MENU, self.OnResetPerspective, id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE) |
424 self.Bind(wx.EVT_MENU, self.OnResetPerspective, id=ID_PLCOPENEDITORDISPLAYMENURESETPERSPECTIVE) |
425 |
425 |
426 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) |
426 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) |
427 if self.EnableDebug: |
427 if self.EnableDebug: |
428 self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR) |
428 self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR) |
429 |
429 |
430 def _init_coll_HelpMenu_Items(self, parent): |
430 def _init_coll_HelpMenu_Items(self, parent): |
431 pass |
431 pass |
432 |
432 |
433 def _init_utils(self): |
433 def _init_utils(self): |
434 self.MenuBar = wx.MenuBar() |
434 self.MenuBar = wx.MenuBar() |
435 |
435 |
436 self.FileMenu = wx.Menu(title='') |
436 self.FileMenu = wx.Menu(title='') |
437 self.EditMenu = wx.Menu(title='') |
437 self.EditMenu = wx.Menu(title='') |
438 self.DisplayMenu = wx.Menu(title='') |
438 self.DisplayMenu = wx.Menu(title='') |
439 self.HelpMenu = wx.Menu(title='') |
439 self.HelpMenu = wx.Menu(title='') |
440 |
440 |
441 self._init_coll_MenuBar_Menus(self.MenuBar) |
441 self._init_coll_MenuBar_Menus(self.MenuBar) |
442 self._init_coll_FileMenu_Items(self.FileMenu) |
442 self._init_coll_FileMenu_Items(self.FileMenu) |
443 self._init_coll_EditMenu_Items(self.EditMenu) |
443 self._init_coll_EditMenu_Items(self.EditMenu) |
444 self._init_coll_DisplayMenu_Items(self.DisplayMenu) |
444 self._init_coll_DisplayMenu_Items(self.DisplayMenu) |
445 self._init_coll_HelpMenu_Items(self.HelpMenu) |
445 self._init_coll_HelpMenu_Items(self.HelpMenu) |
448 wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame', |
448 wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame', |
449 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
449 parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600), |
450 style=wx.DEFAULT_FRAME_STYLE) |
450 style=wx.DEFAULT_FRAME_STYLE) |
451 self.SetClientSize(wx.Size(1000, 600)) |
451 self.SetClientSize(wx.Size(1000, 600)) |
452 self.Bind(wx.EVT_ACTIVATE, self.OnActivated) |
452 self.Bind(wx.EVT_ACTIVATE, self.OnActivated) |
453 |
453 |
454 self.TabsImageList = wx.ImageList(31, 16) |
454 self.TabsImageList = wx.ImageList(31, 16) |
455 self.TabsImageListIndexes = {} |
455 self.TabsImageListIndexes = {} |
456 |
456 |
457 #----------------------------------------------------------------------- |
457 #----------------------------------------------------------------------- |
458 # Creating main structure |
458 # Creating main structure |
459 #----------------------------------------------------------------------- |
459 #----------------------------------------------------------------------- |
460 |
460 |
461 self.AUIManager = wx.aui.AuiManager(self) |
461 self.AUIManager = wx.aui.AuiManager(self) |
462 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
462 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
463 self.Panes = {} |
463 self.Panes = {} |
464 |
464 |
465 self.LeftNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORLEFTNOTEBOOK, |
465 self.LeftNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORLEFTNOTEBOOK, |
466 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
466 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
467 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
467 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
468 self.LeftNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
468 self.LeftNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
469 self.OnAllowNotebookDnD) |
469 self.OnAllowNotebookDnD) |
470 self.AUIManager.AddPane(self.LeftNoteBook, |
470 self.AUIManager.AddPane(self.LeftNoteBook, |
471 wx.aui.AuiPaneInfo().Name("ProjectPane"). |
471 wx.aui.AuiPaneInfo().Name("ProjectPane"). |
472 Left().Layer(1). |
472 Left().Layer(1). |
473 BestSize(wx.Size(300, 500)).CloseButton(False)) |
473 BestSize(wx.Size(300, 500)).CloseButton(False)) |
474 |
474 |
475 self.BottomNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORBOTTOMNOTEBOOK, |
475 self.BottomNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORBOTTOMNOTEBOOK, |
476 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
476 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
477 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
477 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
478 self.BottomNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
478 self.BottomNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
479 self.OnAllowNotebookDnD) |
479 self.OnAllowNotebookDnD) |
480 self.AUIManager.AddPane(self.BottomNoteBook, |
480 self.AUIManager.AddPane(self.BottomNoteBook, |
481 wx.aui.AuiPaneInfo().Name("ResultPane"). |
481 wx.aui.AuiPaneInfo().Name("ResultPane"). |
482 Bottom().Layer(0). |
482 Bottom().Layer(0). |
483 BestSize(wx.Size(800, 300)).CloseButton(False)) |
483 BestSize(wx.Size(800, 300)).CloseButton(False)) |
484 |
484 |
485 self.RightNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
485 self.RightNoteBook = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
486 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
486 style=wx.aui.AUI_NB_TOP|wx.aui.AUI_NB_TAB_SPLIT|wx.aui.AUI_NB_TAB_MOVE| |
487 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
487 wx.aui.AUI_NB_SCROLL_BUTTONS|wx.aui.AUI_NB_TAB_EXTERNAL_MOVE) |
488 self.RightNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
488 self.RightNoteBook.Bind(wx.aui.EVT_AUINOTEBOOK_ALLOW_DND, |
489 self.OnAllowNotebookDnD) |
489 self.OnAllowNotebookDnD) |
490 self.AUIManager.AddPane(self.RightNoteBook, |
490 self.AUIManager.AddPane(self.RightNoteBook, |
491 wx.aui.AuiPaneInfo().Name("LibraryPane"). |
491 wx.aui.AuiPaneInfo().Name("LibraryPane"). |
492 Right().Layer(0). |
492 Right().Layer(0). |
493 BestSize(wx.Size(250, 400)).CloseButton(False)) |
493 BestSize(wx.Size(250, 400)).CloseButton(False)) |
494 |
494 |
495 self.TabsOpened = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORTABSOPENED, |
495 self.TabsOpened = wx.aui.AuiNotebook(self, ID_PLCOPENEDITORTABSOPENED, |
496 style=wx.aui.AUI_NB_DEFAULT_STYLE|wx.aui.AUI_NB_WINDOWLIST_BUTTON) |
496 style=wx.aui.AUI_NB_DEFAULT_STYLE|wx.aui.AUI_NB_WINDOWLIST_BUTTON) |
497 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGING, |
497 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGING, |
498 self.OnPouSelectedChanging) |
498 self.OnPouSelectedChanging) |
499 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
499 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
500 self.OnPouSelectedChanged) |
500 self.OnPouSelectedChanged) |
501 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, |
501 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, |
502 self.OnPageClose) |
502 self.OnPageClose) |
503 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG, |
503 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG, |
504 self.OnPageDragged) |
504 self.OnPageDragged) |
505 self.AUIManager.AddPane(self.TabsOpened, |
505 self.AUIManager.AddPane(self.TabsOpened, |
506 wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane")) |
506 wx.aui.AuiPaneInfo().CentrePane().Name("TabsPane")) |
507 |
507 |
508 #----------------------------------------------------------------------- |
508 #----------------------------------------------------------------------- |
509 # Creating PLCopen Project Types Tree |
509 # Creating PLCopen Project Types Tree |
510 #----------------------------------------------------------------------- |
510 #----------------------------------------------------------------------- |
511 |
511 |
512 self.MainTabs = {} |
512 self.MainTabs = {} |
513 |
513 |
514 self.ProjectPanel = wx.SplitterWindow(id=ID_PLCOPENEDITORPROJECTPANEL, |
514 self.ProjectPanel = wx.SplitterWindow(id=ID_PLCOPENEDITORPROJECTPANEL, |
515 name='ProjectPanel', parent=self.LeftNoteBook, point=wx.Point(0, 0), |
515 name='ProjectPanel', parent=self.LeftNoteBook, point=wx.Point(0, 0), |
516 size=wx.Size(0, 0), style=wx.SP_3D) |
516 size=wx.Size(0, 0), style=wx.SP_3D) |
517 |
517 |
518 self.ProjectTree = CustomTree(id=ID_PLCOPENEDITORPROJECTTREE, |
518 self.ProjectTree = CustomTree(id=ID_PLCOPENEDITORPROJECTTREE, |
519 name='ProjectTree', parent=self.ProjectPanel, |
519 name='ProjectTree', parent=self.ProjectPanel, |
520 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
520 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
521 style=wx.SUNKEN_BORDER, |
521 style=wx.SUNKEN_BORDER, |
522 agwStyle=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.TR_EDIT_LABELS) |
522 agwStyle=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.TR_EDIT_LABELS) |
523 self.ProjectTree.SetBackgroundBitmap(GetBitmap("custom_tree_background"), |
523 self.ProjectTree.SetBackgroundBitmap(GetBitmap("custom_tree_background"), |
524 wx.ALIGN_RIGHT|wx.ALIGN_BOTTOM) |
524 wx.ALIGN_RIGHT|wx.ALIGN_BOTTOM) |
537 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit, |
537 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit, |
538 id=ID_PLCOPENEDITORPROJECTTREE) |
538 id=ID_PLCOPENEDITORPROJECTTREE) |
539 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
539 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
540 id=ID_PLCOPENEDITORPROJECTTREE) |
540 id=ID_PLCOPENEDITORPROJECTTREE) |
541 self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion) |
541 self.ProjectTree.Bind(wx.EVT_MOTION, self.OnProjectTreeMotion) |
542 |
542 |
543 #----------------------------------------------------------------------- |
543 #----------------------------------------------------------------------- |
544 # Creating PLCopen Project POU Instance Variables Panel |
544 # Creating PLCopen Project POU Instance Variables Panel |
545 #----------------------------------------------------------------------- |
545 #----------------------------------------------------------------------- |
546 |
546 |
547 self.PouInstanceVariablesPanel = PouInstanceVariablesPanel(self.ProjectPanel, self, self.Controler, self.EnableDebug) |
547 self.PouInstanceVariablesPanel = PouInstanceVariablesPanel(self.ProjectPanel, self, self.Controler, self.EnableDebug) |
548 |
548 |
549 self.MainTabs["ProjectPanel"] = (self.ProjectPanel, _("Project")) |
549 self.MainTabs["ProjectPanel"] = (self.ProjectPanel, _("Project")) |
550 self.LeftNoteBook.AddPage(*self.MainTabs["ProjectPanel"]) |
550 self.LeftNoteBook.AddPage(*self.MainTabs["ProjectPanel"]) |
551 |
551 |
552 self.ProjectPanel.SplitHorizontally(self.ProjectTree, self.PouInstanceVariablesPanel, 300) |
552 self.ProjectPanel.SplitHorizontally(self.ProjectTree, self.PouInstanceVariablesPanel, 300) |
553 |
553 |
554 #----------------------------------------------------------------------- |
554 #----------------------------------------------------------------------- |
555 # Creating Tool Bar |
555 # Creating Tool Bar |
556 #----------------------------------------------------------------------- |
556 #----------------------------------------------------------------------- |
557 |
557 |
558 MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
558 MenuToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORMENUTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
559 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
559 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
560 MenuToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
560 MenuToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
561 MenuToolBar.Realize() |
561 MenuToolBar.Realize() |
562 self.Panes["MenuToolBar"] = MenuToolBar |
562 self.Panes["MenuToolBar"] = MenuToolBar |
563 self.AUIManager.AddPane(MenuToolBar, wx.aui.AuiPaneInfo(). |
563 self.AUIManager.AddPane(MenuToolBar, wx.aui.AuiPaneInfo(). |
564 Name("MenuToolBar").Caption(_("Menu ToolBar")). |
564 Name("MenuToolBar").Caption(_("Menu ToolBar")). |
565 ToolbarPane().Top(). |
565 ToolbarPane().Top(). |
566 LeftDockable(False).RightDockable(False)) |
566 LeftDockable(False).RightDockable(False)) |
567 |
567 |
568 EditorToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
568 EditorToolBar = wx.ToolBar(self, ID_PLCOPENEDITOREDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
569 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
569 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
570 EditorToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
570 EditorToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
571 EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, |
571 EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, |
572 GetBitmap("select"), wx.NullBitmap, _("Select an object")) |
572 GetBitmap("select"), wx.NullBitmap, _("Select an object")) |
573 EditorToolBar.Realize() |
573 EditorToolBar.Realize() |
574 self.Panes["EditorToolBar"] = EditorToolBar |
574 self.Panes["EditorToolBar"] = EditorToolBar |
575 self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo(). |
575 self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo(). |
576 Name("EditorToolBar").Caption(_("Editor ToolBar")). |
576 Name("EditorToolBar").Caption(_("Editor ToolBar")). |
577 ToolbarPane().Top().Position(1). |
577 ToolbarPane().Top().Position(1). |
578 LeftDockable(False).RightDockable(False)) |
578 LeftDockable(False).RightDockable(False)) |
579 |
579 |
580 self.Bind(wx.EVT_MENU, self.OnSelectionTool, |
580 self.Bind(wx.EVT_MENU, self.OnSelectionTool, |
581 id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION) |
581 id=ID_PLCOPENEDITOREDITORTOOLBARSELECTION) |
582 |
582 |
583 #----------------------------------------------------------------------- |
583 #----------------------------------------------------------------------- |
584 # Creating Search Panel |
584 # Creating Search Panel |
585 #----------------------------------------------------------------------- |
585 #----------------------------------------------------------------------- |
586 |
586 |
587 self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self) |
587 self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self) |
588 self.MainTabs["SearchResultPanel"] = (self.SearchResultPanel, _("Search")) |
588 self.MainTabs["SearchResultPanel"] = (self.SearchResultPanel, _("Search")) |
589 self.BottomNoteBook.AddPage(*self.MainTabs["SearchResultPanel"]) |
589 self.BottomNoteBook.AddPage(*self.MainTabs["SearchResultPanel"]) |
590 |
590 |
591 #----------------------------------------------------------------------- |
591 #----------------------------------------------------------------------- |
592 # Creating Library Panel |
592 # Creating Library Panel |
593 #----------------------------------------------------------------------- |
593 #----------------------------------------------------------------------- |
594 |
594 |
595 self.LibraryPanel = LibraryPanel(self, True) |
595 self.LibraryPanel = LibraryPanel(self, True) |
596 self.MainTabs["LibraryPanel"] = (self.LibraryPanel, _("Library")) |
596 self.MainTabs["LibraryPanel"] = (self.LibraryPanel, _("Library")) |
597 self.RightNoteBook.AddPage(*self.MainTabs["LibraryPanel"]) |
597 self.RightNoteBook.AddPage(*self.MainTabs["LibraryPanel"]) |
598 |
598 |
599 self._init_utils() |
599 self._init_utils() |
600 self.SetMenuBar(self.MenuBar) |
600 self.SetMenuBar(self.MenuBar) |
601 |
601 |
602 if self.EnableDebug: |
602 if self.EnableDebug: |
603 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler, self) |
603 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler, self) |
604 self.MainTabs["DebugVariablePanel"] = (self.DebugVariablePanel, _("Debugger")) |
604 self.MainTabs["DebugVariablePanel"] = (self.DebugVariablePanel, _("Debugger")) |
605 self.RightNoteBook.AddPage(*self.MainTabs["DebugVariablePanel"]) |
605 self.RightNoteBook.AddPage(*self.MainTabs["DebugVariablePanel"]) |
606 |
606 |
607 self.AUIManager.Update() |
607 self.AUIManager.Update() |
608 |
608 |
609 self.FindDialog = FindInPouDialog(self) |
609 self.FindDialog = FindInPouDialog(self) |
610 self.FindDialog.Hide() |
610 self.FindDialog.Hide() |
611 |
611 |
612 ## Constructor of the PLCOpenEditor class. |
612 ## Constructor of the PLCOpenEditor class. |
613 # @param parent The parent window. |
613 # @param parent The parent window. |
614 # @param controler The controler been used by PLCOpenEditor (default: None). |
614 # @param controler The controler been used by PLCOpenEditor (default: None). |
615 # @param fileOpen The filepath to open if no controler defined (default: None). |
615 # @param fileOpen The filepath to open if no controler defined (default: None). |
616 # @param debug The filepath to open if no controler defined (default: False). |
616 # @param debug The filepath to open if no controler defined (default: False). |
617 def __init__(self, parent, enable_debug = False): |
617 def __init__(self, parent, enable_debug = False): |
618 self.Controler = None |
618 self.Controler = None |
619 self.Config = wx.ConfigBase.Get() |
619 self.Config = wx.ConfigBase.Get() |
620 self.EnableDebug = enable_debug |
620 self.EnableDebug = enable_debug |
621 |
621 |
622 self._init_ctrls(parent) |
622 self._init_ctrls(parent) |
623 |
623 |
624 # Define Tree item icon list |
624 # Define Tree item icon list |
625 self.TreeImageList = wx.ImageList(16, 16) |
625 self.TreeImageList = wx.ImageList(16, 16) |
626 self.TreeImageDict = {} |
626 self.TreeImageDict = {} |
627 |
627 |
628 # Icons for languages |
628 # Icons for languages |
629 for language in LANGUAGES: |
629 for language in LANGUAGES: |
630 self.TreeImageDict[language] = self.TreeImageList.Add(GetBitmap(language)) |
630 self.TreeImageDict[language] = self.TreeImageList.Add(GetBitmap(language)) |
631 |
631 |
632 # Icons for other items |
632 # Icons for other items |
633 for imgname, itemtype in [ |
633 for imgname, itemtype in [ |
634 #editables |
634 #editables |
635 ("PROJECT", ITEM_PROJECT), |
635 ("PROJECT", ITEM_PROJECT), |
636 #("POU", ITEM_POU), |
636 #("POU", ITEM_POU), |
656 ("ACTIONS", ITEM_ACTIONS), |
656 ("ACTIONS", ITEM_ACTIONS), |
657 ("CONFIGURATIONS", ITEM_CONFIGURATIONS), |
657 ("CONFIGURATIONS", ITEM_CONFIGURATIONS), |
658 ("RESOURCES", ITEM_RESOURCES), |
658 ("RESOURCES", ITEM_RESOURCES), |
659 ("PROPERTIES", ITEM_PROPERTIES)]: |
659 ("PROPERTIES", ITEM_PROPERTIES)]: |
660 self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname)) |
660 self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname)) |
661 |
661 |
662 # Assign icon list to TreeCtrls |
662 # Assign icon list to TreeCtrls |
663 self.ProjectTree.SetImageList(self.TreeImageList) |
663 self.ProjectTree.SetImageList(self.TreeImageList) |
664 self.PouInstanceVariablesPanel.SetTreeImageList(self.TreeImageList) |
664 self.PouInstanceVariablesPanel.SetTreeImageList(self.TreeImageList) |
665 |
665 |
666 self.CurrentEditorToolBar = [] |
666 self.CurrentEditorToolBar = [] |
667 self.CurrentMenu = None |
667 self.CurrentMenu = None |
668 self.SelectedItem = None |
668 self.SelectedItem = None |
669 self.LastToolTipItem = None |
669 self.LastToolTipItem = None |
670 self.SearchParams = None |
670 self.SearchParams = None |
671 self.Highlights = {} |
671 self.Highlights = {} |
672 self.DrawingMode = FREEDRAWING_MODE |
672 self.DrawingMode = FREEDRAWING_MODE |
673 #self.DrawingMode = DRIVENDRAWING_MODE |
673 #self.DrawingMode = DRIVENDRAWING_MODE |
674 self.AuiTabCtrl = [] |
674 self.AuiTabCtrl = [] |
675 |
675 |
676 # Save default perspective |
676 # Save default perspective |
677 notebooks = {} |
677 notebooks = {} |
678 for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"), |
678 for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"), |
679 (self.BottomNoteBook, "bottomnotebook"), |
679 (self.BottomNoteBook, "bottomnotebook"), |
680 (self.RightNoteBook, "rightnotebook")]: |
680 (self.RightNoteBook, "rightnotebook")]: |
681 notebooks[entry_name] = self.SaveTabLayout(notebook) |
681 notebooks[entry_name] = self.SaveTabLayout(notebook) |
682 self.DefaultPerspective = { |
682 self.DefaultPerspective = { |
683 "perspective": self.AUIManager.SavePerspective(), |
683 "perspective": self.AUIManager.SavePerspective(), |
684 "notebooks": notebooks, |
684 "notebooks": notebooks, |
685 } |
685 } |
686 |
686 |
687 |
687 |
688 # Initialize Printing configuring elements |
688 # Initialize Printing configuring elements |
689 self.PrintData = wx.PrintData() |
689 self.PrintData = wx.PrintData() |
690 self.PrintData.SetPaperId(wx.PAPER_A4) |
690 self.PrintData.SetPaperId(wx.PAPER_A4) |
691 self.PrintData.SetPrintMode(wx.PRINT_MODE_PRINTER) |
691 self.PrintData.SetPrintMode(wx.PRINT_MODE_PRINTER) |
692 self.PageSetupData = wx.PageSetupDialogData(self.PrintData) |
692 self.PageSetupData = wx.PageSetupDialogData(self.PrintData) |
693 self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15)) |
693 self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15)) |
694 self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20)) |
694 self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20)) |
695 |
695 |
696 self.SetRefreshFunctions() |
696 self.SetRefreshFunctions() |
697 self.SetDeleteFunctions() |
697 self.SetDeleteFunctions() |
698 |
698 |
699 def __del__(self): |
699 def __del__(self): |
700 self.FindDialog.Destroy() |
700 self.FindDialog.Destroy() |
701 |
701 |
702 def Show(self): |
702 def Show(self): |
703 wx.Frame.Show(self) |
703 wx.Frame.Show(self) |
704 wx.CallAfter(self.RestoreLastState) |
704 wx.CallAfter(self.RestoreLastState) |
705 |
705 |
706 def OnActivated(self, event): |
706 def OnActivated(self, event): |
707 if event.GetActive(): |
707 if event.GetActive(): |
708 wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
708 wx.CallAfter(self._Refresh, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
709 event.Skip() |
709 event.Skip() |
710 |
710 |
791 page_idx = self.LoadTab(notebook, page_infos) |
791 page_idx = self.LoadTab(notebook, page_infos) |
792 if page_selected: |
792 if page_selected: |
793 selected = page_idx |
793 selected = page_idx |
794 if selected is not None: |
794 if selected is not None: |
795 wx.CallAfter(notebook.SetSelection, selected) |
795 wx.CallAfter(notebook.SetSelection, selected) |
796 |
796 |
797 def ResetPerspective(self): |
797 def ResetPerspective(self): |
798 if self.DefaultPerspective is not None: |
798 if self.DefaultPerspective is not None: |
799 self.AUIManager.LoadPerspective(self.DefaultPerspective["perspective"]) |
799 self.AUIManager.LoadPerspective(self.DefaultPerspective["perspective"]) |
800 |
800 |
801 for notebook in [self.LeftNoteBook, self.BottomNoteBook, self.RightNoteBook]: |
801 for notebook in [self.LeftNoteBook, self.BottomNoteBook, self.RightNoteBook]: |
802 for idx in xrange(notebook.GetPageCount()): |
802 for idx in xrange(notebook.GetPageCount()): |
803 notebook.RemovePage(0) |
803 notebook.RemovePage(0) |
804 |
804 |
805 notebooks = self.DefaultPerspective["notebooks"] |
805 notebooks = self.DefaultPerspective["notebooks"] |
806 for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"), |
806 for notebook, entry_name in [(self.LeftNoteBook, "leftnotebook"), |
807 (self.BottomNoteBook, "bottomnotebook"), |
807 (self.BottomNoteBook, "bottomnotebook"), |
808 (self.RightNoteBook, "rightnotebook")]: |
808 (self.RightNoteBook, "rightnotebook")]: |
809 self.LoadTabLayout(notebook, notebooks.get(entry_name)) |
809 self.LoadTabLayout(notebook, notebooks.get(entry_name)) |
810 |
810 |
811 self._Refresh(EDITORTOOLBAR) |
811 self._Refresh(EDITORTOOLBAR) |
812 |
812 |
813 def RestoreLastState(self): |
813 def RestoreLastState(self): |
814 frame_size = None |
814 frame_size = None |
815 if self.Config.HasEntry("framesize"): |
815 if self.Config.HasEntry("framesize"): |
816 frame_size = cPickle.loads(str(self.Config.Read("framesize"))) |
816 frame_size = cPickle.loads(str(self.Config.Read("framesize"))) |
817 |
817 |
818 if frame_size is None: |
818 if frame_size is None: |
819 self.Maximize() |
819 self.Maximize() |
820 else: |
820 else: |
821 self.SetClientSize(frame_size) |
821 self.SetClientSize(frame_size) |
822 |
822 |
823 def SaveLastState(self): |
823 def SaveLastState(self): |
824 if not self.IsMaximized(): |
824 if not self.IsMaximized(): |
825 self.Config.Write("framesize", cPickle.dumps(self.GetClientSize())) |
825 self.Config.Write("framesize", cPickle.dumps(self.GetClientSize())) |
826 elif self.Config.HasEntry("framesize"): |
826 elif self.Config.HasEntry("framesize"): |
827 self.Config.DeleteEntry("framesize") |
827 self.Config.DeleteEntry("framesize") |
828 |
828 |
829 self.Config.Flush() |
829 self.Config.Flush() |
830 |
830 |
831 #------------------------------------------------------------------------------- |
831 #------------------------------------------------------------------------------- |
832 # General Functions |
832 # General Functions |
833 #------------------------------------------------------------------------------- |
833 #------------------------------------------------------------------------------- |
914 if dialog.ShowModal() == wx.ID_OK: |
914 if dialog.ShowModal() == wx.ID_OK: |
915 new_values = dialog.GetValues() |
915 new_values = dialog.GetValues() |
916 new_values["creationDateTime"] = old_values["creationDateTime"] |
916 new_values["creationDateTime"] = old_values["creationDateTime"] |
917 if new_values != old_values: |
917 if new_values != old_values: |
918 self.Controler.SetProjectProperties(None, new_values) |
918 self.Controler.SetProjectProperties(None, new_values) |
919 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, |
919 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, |
920 PROJECTTREE, POUINSTANCEVARIABLESPANEL, SCALING) |
920 PROJECTTREE, POUINSTANCEVARIABLESPANEL, SCALING) |
921 dialog.Destroy() |
921 dialog.Destroy() |
922 |
922 |
923 #------------------------------------------------------------------------------- |
923 #------------------------------------------------------------------------------- |
924 # Notebook Unified Functions |
924 # Notebook Unified Functions |
925 #------------------------------------------------------------------------------- |
925 #------------------------------------------------------------------------------- |
926 |
926 |
927 ## Function that add a tab in Notebook, calling refresh for tab DClick event |
927 ## Function that add a tab in Notebook, calling refresh for tab DClick event |
928 # for wx.aui.AUINotebook. |
928 # for wx.aui.AUINotebook. |
929 # @param window Panel to display in tab. |
929 # @param window Panel to display in tab. |
930 # @param text title for the tab ctrl. |
930 # @param text title for the tab ctrl. |
931 def AddPage(self, window, text): |
931 def AddPage(self, window, text): |
932 self.TabsOpened.AddPage(window, text) |
932 self.TabsOpened.AddPage(window, text) |
933 self.RefreshTabCtrlEvent() |
933 self.RefreshTabCtrlEvent() |
934 |
934 |
935 ## Function that add a tab in Notebook, calling refresh for tab DClick event |
935 ## Function that add a tab in Notebook, calling refresh for tab DClick event |
936 # for wx.aui.AUINotebook. |
936 # for wx.aui.AUINotebook. |
937 # @param window Panel to display in tab. |
937 # @param window Panel to display in tab. |
938 # @param text title for the tab ctrl. |
938 # @param text title for the tab ctrl. |
939 def DeletePage(self, window): |
939 def DeletePage(self, window): |
940 for idx in xrange(self.TabsOpened.GetPageCount()): |
940 for idx in xrange(self.TabsOpened.GetPageCount()): |
941 if self.TabsOpened.GetPage(idx) == window: |
941 if self.TabsOpened.GetPage(idx) == window: |
942 self.TabsOpened.DeletePage(idx) |
942 self.TabsOpened.DeletePage(idx) |
943 self.RefreshTabCtrlEvent() |
943 self.RefreshTabCtrlEvent() |
944 return |
944 return |
945 |
945 |
946 ## Function that fix difference in deleting all tabs between |
946 ## Function that fix difference in deleting all tabs between |
947 # wx.Notebook and wx.aui.AUINotebook. |
947 # wx.Notebook and wx.aui.AUINotebook. |
948 def DeleteAllPages(self): |
948 def DeleteAllPages(self): |
949 for idx in xrange(self.TabsOpened.GetPageCount()): |
949 for idx in xrange(self.TabsOpened.GetPageCount()): |
950 self.TabsOpened.DeletePage(0) |
950 self.TabsOpened.DeletePage(0) |
951 self.RefreshTabCtrlEvent() |
951 self.RefreshTabCtrlEvent() |
952 |
952 |
953 ## Function that fix difference in setting picture on tab between |
953 ## Function that fix difference in setting picture on tab between |
954 # wx.Notebook and wx.aui.AUINotebook. |
954 # wx.Notebook and wx.aui.AUINotebook. |
955 # @param idx Tab index. |
955 # @param idx Tab index. |
956 # @param bitmap wx.Bitmap to define on tab. |
956 # @param bitmap wx.Bitmap to define on tab. |
957 # @return True if operation succeeded |
957 # @return True if operation succeeded |
958 def SetPageBitmap(self, idx, bitmap): |
958 def SetPageBitmap(self, idx, bitmap): |
1185 control.SelectAll() |
1185 control.SelectAll() |
1186 elif isinstance(control, wx.TextCtrl): |
1186 elif isinstance(control, wx.TextCtrl): |
1187 control.SetSelection(0, control.GetLastPosition()) |
1187 control.SetSelection(0, control.GetLastPosition()) |
1188 elif isinstance(control, wx.ComboBox): |
1188 elif isinstance(control, wx.ComboBox): |
1189 control.SetMark(0, control.GetLastPosition() + 1) |
1189 control.SetMark(0, control.GetLastPosition() + 1) |
1190 |
1190 |
1191 def SetDeleteFunctions(self): |
1191 def SetDeleteFunctions(self): |
1192 self.DeleteFunctions = { |
1192 self.DeleteFunctions = { |
1193 ITEM_DATATYPE: GetDeleteElementFunction( |
1193 ITEM_DATATYPE: GetDeleteElementFunction( |
1194 PLCControler.ProjectRemoveDataType, |
1194 PLCControler.ProjectRemoveDataType, |
1195 check_function=self.CheckDataTypeIsUsedBeforeDeletion), |
1195 check_function=self.CheckDataTypeIsUsedBeforeDeletion), |
1196 ITEM_POU: GetDeleteElementFunction( |
1196 ITEM_POU: GetDeleteElementFunction( |
1197 PLCControler.ProjectRemovePou, |
1197 PLCControler.ProjectRemovePou, |
1198 check_function=self.CheckPouIsUsedBeforeDeletion), |
1198 check_function=self.CheckPouIsUsedBeforeDeletion), |
1199 ITEM_TRANSITION: GetDeleteElementFunction( |
1199 ITEM_TRANSITION: GetDeleteElementFunction( |
1200 PLCControler.ProjectRemovePouTransition, ITEM_POU), |
1200 PLCControler.ProjectRemovePouTransition, ITEM_POU), |
1201 ITEM_ACTION: GetDeleteElementFunction( |
1201 ITEM_ACTION: GetDeleteElementFunction( |
1202 PLCControler.ProjectRemovePouAction, ITEM_POU), |
1202 PLCControler.ProjectRemovePouAction, ITEM_POU), |
1203 ITEM_CONFIGURATION: GetDeleteElementFunction( |
1203 ITEM_CONFIGURATION: GetDeleteElementFunction( |
1204 PLCControler.ProjectRemoveConfiguration), |
1204 PLCControler.ProjectRemoveConfiguration), |
1205 ITEM_RESOURCE: GetDeleteElementFunction( |
1205 ITEM_RESOURCE: GetDeleteElementFunction( |
1206 PLCControler.ProjectRemoveConfigurationResource, ITEM_CONFIGURATION) |
1206 PLCControler.ProjectRemoveConfigurationResource, ITEM_CONFIGURATION) |
1207 } |
1207 } |
1208 |
1208 |
1209 def OnDeleteMenu(self, event): |
1209 def OnDeleteMenu(self, event): |
1210 window = self.FindFocus() |
1210 window = self.FindFocus() |
1211 if window == self.ProjectTree or window is None: |
1211 if window == self.ProjectTree or window is None: |
1212 selected = self.ProjectTree.GetSelection() |
1212 selected = self.ProjectTree.GetSelection() |
1213 if selected is not None and selected.IsOk(): |
1213 if selected is not None and selected.IsOk(): |
1214 function = self.DeleteFunctions.get(self.ProjectTree.GetPyData(selected)["type"], None) |
1214 function = self.DeleteFunctions.get(self.ProjectTree.GetPyData(selected)["type"], None) |
1215 if function is not None: |
1215 if function is not None: |
1216 function(self, selected) |
1216 function(self, selected) |
1217 self.CloseTabsWithoutModel() |
1217 self.CloseTabsWithoutModel() |
1218 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, |
1218 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, |
1219 POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1219 POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1220 elif isinstance(window, (Viewer, TextViewer)): |
1220 elif isinstance(window, (Viewer, TextViewer)): |
1221 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1221 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1222 event.m_keyCode = wx.WXK_DELETE |
1222 event.m_keyCode = wx.WXK_DELETE |
1223 window.ProcessEvent(event) |
1223 window.ProcessEvent(event) |
1224 |
1224 |
1225 def OnFindMenu(self, event): |
1225 def OnFindMenu(self, event): |
1226 if not self.FindDialog.IsShown(): |
1226 if not self.FindDialog.IsShown(): |
1227 self.FindDialog.Show() |
1227 self.FindDialog.Show() |
1228 |
1228 |
1229 def CloseFindInPouDialog(self): |
1229 def CloseFindInPouDialog(self): |
1230 selected = self.TabsOpened.GetSelection() |
1230 selected = self.TabsOpened.GetSelection() |
1231 if selected == -1 and self.FindDialog.IsShown(): |
1231 if selected == -1 and self.FindDialog.IsShown(): |
1232 self.FindDialog.Hide() |
1232 self.FindDialog.Hide() |
1233 |
1233 |
1234 def OnFindNextMenu(self, event): |
1234 def OnFindNextMenu(self, event): |
1235 self.FindInPou(1) |
1235 self.FindInPou(1) |
1236 |
1236 |
1237 def OnFindPreviousMenu(self, event): |
1237 def OnFindPreviousMenu(self, event): |
1238 self.FindInPou(-1) |
1238 self.FindInPou(-1) |
1239 |
1239 |
1240 def FindInPou(self, direction, search_params=None): |
1240 def FindInPou(self, direction, search_params=None): |
1241 if search_params is not None: |
1241 if search_params is not None: |
1242 self.SearchParams = search_params |
1242 self.SearchParams = search_params |
1243 selected = self.TabsOpened.GetSelection() |
1243 selected = self.TabsOpened.GetSelection() |
1244 if selected != -1: |
1244 if selected != -1: |
1245 window = self.TabsOpened.GetPage(selected) |
1245 window = self.TabsOpened.GetPage(selected) |
1246 window.Find(direction, self.SearchParams) |
1246 window.Find(direction, self.SearchParams) |
1247 |
1247 |
1248 def OnSearchInProjectMenu(self, event): |
1248 def OnSearchInProjectMenu(self, event): |
1249 dialog = SearchInProjectDialog(self) |
1249 dialog = SearchInProjectDialog(self) |
1250 if dialog.ShowModal() == wx.ID_OK: |
1250 if dialog.ShowModal() == wx.ID_OK: |
1251 criteria = dialog.GetCriteria() |
1251 criteria = dialog.GetCriteria() |
1252 result = self.Controler.SearchInProject(criteria) |
1252 result = self.Controler.SearchInProject(criteria) |
1253 self.ClearSearchResults() |
1253 self.ClearSearchResults() |
1254 self.SearchResultPanel.SetSearchResults(criteria, result) |
1254 self.SearchResultPanel.SetSearchResults(criteria, result) |
1255 self.SelectTab(self.SearchResultPanel) |
1255 self.SelectTab(self.SearchResultPanel) |
1256 |
1256 |
1257 #------------------------------------------------------------------------------- |
1257 #------------------------------------------------------------------------------- |
1258 # Display Menu Functions |
1258 # Display Menu Functions |
1259 #------------------------------------------------------------------------------- |
1259 #------------------------------------------------------------------------------- |
1260 |
1260 |
1261 def RefreshDisplayMenu(self): |
1261 def RefreshDisplayMenu(self): |
1664 if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1664 if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1665 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1665 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1666 ITEM_TRANSITION, ITEM_ACTION]: |
1666 ITEM_TRANSITION, ITEM_ACTION]: |
1667 self.EditProjectElement(item_infos["type"], item_infos["tagname"]) |
1667 self.EditProjectElement(item_infos["type"], item_infos["tagname"]) |
1668 event.Skip() |
1668 event.Skip() |
1669 |
1669 |
1670 def ProjectTreeItemSelect(self, select_item): |
1670 def ProjectTreeItemSelect(self, select_item): |
1671 if select_item is not None and select_item.IsOk(): |
1671 if select_item is not None and select_item.IsOk(): |
1672 name = self.ProjectTree.GetItemText(select_item) |
1672 name = self.ProjectTree.GetItemText(select_item) |
1673 item_infos = self.ProjectTree.GetPyData(select_item) |
1673 item_infos = self.ProjectTree.GetPyData(select_item) |
1674 if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1674 if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU, |
1675 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1675 ITEM_CONFIGURATION, ITEM_RESOURCE, |
1676 ITEM_TRANSITION, ITEM_ACTION]: |
1676 ITEM_TRANSITION, ITEM_ACTION]: |
1677 self.EditProjectElement(item_infos["type"], item_infos["tagname"], True) |
1677 self.EditProjectElement(item_infos["type"], item_infos["tagname"], True) |
1678 self.PouInstanceVariablesPanel.SetPouType(item_infos["tagname"]) |
1678 self.PouInstanceVariablesPanel.SetPouType(item_infos["tagname"]) |
1679 |
1679 |
1680 def OnProjectTreeLeftUp(self, event): |
1680 def OnProjectTreeLeftUp(self, event): |
1681 if self.SelectedItem is not None: |
1681 if self.SelectedItem is not None: |
1682 self.ProjectTree.SelectItem(self.SelectedItem) |
1682 self.ProjectTree.SelectItem(self.SelectedItem) |
1683 self.ProjectTreeItemSelect(self.SelectedItem) |
1683 self.ProjectTreeItemSelect(self.SelectedItem) |
1684 self.ResetSelectedItem() |
1684 self.ResetSelectedItem() |
1685 event.Skip() |
1685 event.Skip() |
1686 |
1686 |
1687 def OnProjectTreeMotion(self, event): |
1687 def OnProjectTreeMotion(self, event): |
1688 if not event.Dragging(): |
1688 if not event.Dragging(): |
1689 pt = wx.Point(event.GetX(), event.GetY()) |
1689 pt = wx.Point(event.GetX(), event.GetY()) |
1690 item, flags = self.ProjectTree.HitTest(pt) |
1690 item, flags = self.ProjectTree.HitTest(pt) |
1691 if item is not None and item.IsOk() and flags & wx.TREE_HITTEST_ONITEMLABEL: |
1691 if item is not None and item.IsOk() and flags & wx.TREE_HITTEST_ONITEMLABEL: |
1692 item_infos = self.ProjectTree.GetPyData(item) |
1692 item_infos = self.ProjectTree.GetPyData(item) |
1693 if item != self.LastToolTipItem and self.LastToolTipItem is not None: |
1693 if item != self.LastToolTipItem and self.LastToolTipItem is not None: |
1694 self.ProjectTree.SetToolTip(None) |
1694 self.ProjectTree.SetToolTip(None) |
1695 self.LastToolTipItem = None |
1695 self.LastToolTipItem = None |
1696 if (self.LastToolTipItem != item and |
1696 if (self.LastToolTipItem != item and |
1697 item_infos["type"] in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]): |
1697 item_infos["type"] in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]): |
1698 bodytype = self.Controler.GetEditedElementBodyType( |
1698 bodytype = self.Controler.GetEditedElementBodyType( |
1699 item_infos["tagname"]) |
1699 item_infos["tagname"]) |
1700 if item_infos["type"] == ITEM_POU: |
1700 if item_infos["type"] == ITEM_POU: |
1701 block_type = { |
1701 block_type = { |
1828 elif name == "Configurations": |
1828 elif name == "Configurations": |
1829 menu = wx.Menu(title='') |
1829 menu = wx.Menu(title='') |
1830 new_id = wx.NewId() |
1830 new_id = wx.NewId() |
1831 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Configuration")) |
1831 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Configuration")) |
1832 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, id=new_id) |
1832 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, id=new_id) |
1833 |
1833 |
1834 elif name == "Transitions": |
1834 elif name == "Transitions": |
1835 menu = wx.Menu(title='') |
1835 menu = wx.Menu(title='') |
1836 new_id = wx.NewId() |
1836 new_id = wx.NewId() |
1837 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1837 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Transition")) |
1838 parent = self.ProjectTree.GetItemParent(item) |
1838 parent = self.ProjectTree.GetItemParent(item) |
1839 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1839 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1840 while parent_type != ITEM_POU: |
1840 while parent_type != ITEM_POU: |
1841 parent = self.ProjectTree.GetItemParent(parent) |
1841 parent = self.ProjectTree.GetItemParent(parent) |
1842 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1842 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1843 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1843 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1844 |
1844 |
1845 elif name == "Actions": |
1845 elif name == "Actions": |
1846 menu = wx.Menu(title='') |
1846 menu = wx.Menu(title='') |
1847 new_id = wx.NewId() |
1847 new_id = wx.NewId() |
1848 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Action")) |
1848 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Action")) |
1849 parent = self.ProjectTree.GetItemParent(item) |
1849 parent = self.ProjectTree.GetItemParent(item) |
1850 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1850 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1851 while parent_type != ITEM_POU: |
1851 while parent_type != ITEM_POU: |
1852 parent = self.ProjectTree.GetItemParent(parent) |
1852 parent = self.ProjectTree.GetItemParent(parent) |
1853 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1853 parent_type = self.ProjectTree.GetPyData(parent)["type"] |
1854 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1854 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id) |
1855 |
1855 |
1856 elif name == "Resources": |
1856 elif name == "Resources": |
1857 menu = wx.Menu(title='') |
1857 menu = wx.Menu(title='') |
1858 new_id = wx.NewId() |
1858 new_id = wx.NewId() |
1859 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1859 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1860 parent = self.ProjectTree.GetItemParent(item) |
1860 parent = self.ProjectTree.GetItemParent(item) |
1900 self.Bind(wx.EVT_MENU, self.GenerateChangePouTypeFunction(name, "program"), id=new_id) |
1900 self.Bind(wx.EVT_MENU, self.GenerateChangePouTypeFunction(name, "program"), id=new_id) |
1901 menu.AppendMenu(wx.NewId(), _("Change POU Type To"), change_menu) |
1901 menu.AppendMenu(wx.NewId(), _("Change POU Type To"), change_menu) |
1902 new_id = wx.NewId() |
1902 new_id = wx.NewId() |
1903 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Rename")) |
1903 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Rename")) |
1904 self.Bind(wx.EVT_MENU, self.OnRenamePouMenu, id=new_id) |
1904 self.Bind(wx.EVT_MENU, self.OnRenamePouMenu, id=new_id) |
1905 |
1905 |
1906 elif item_infos["type"] == ITEM_CONFIGURATION: |
1906 elif item_infos["type"] == ITEM_CONFIGURATION: |
1907 menu = wx.Menu(title='') |
1907 menu = wx.Menu(title='') |
1908 new_id = wx.NewId() |
1908 new_id = wx.NewId() |
1909 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1909 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add Resource")) |
1910 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id) |
1910 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id) |
1911 |
1911 |
1912 elif item_infos["type"] in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]: |
1912 elif item_infos["type"] in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]: |
1913 menu = wx.Menu(title='') |
1913 menu = wx.Menu(title='') |
1914 |
1914 |
1915 if menu is not None: |
1915 if menu is not None: |
1916 new_id = wx.NewId() |
1916 new_id = wx.NewId() |
1917 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Delete")) |
1917 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Delete")) |
1918 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=new_id) |
1918 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=new_id) |
1919 |
1919 |
1920 if menu is not None: |
1920 if menu is not None: |
1921 self.PopupMenu(menu) |
1921 self.PopupMenu(menu) |
1922 menu.Destroy() |
1922 menu.Destroy() |
1923 |
1923 |
1924 self.ResetSelectedItem() |
1924 self.ResetSelectedItem() |
1925 |
1925 |
1926 event.Skip() |
1926 event.Skip() |
1927 |
1927 |
1928 |
1928 |
1929 #------------------------------------------------------------------------------- |
1929 #------------------------------------------------------------------------------- |
1930 # Instances Tree Management Functions |
1930 # Instances Tree Management Functions |
1931 #------------------------------------------------------------------------------- |
1931 #------------------------------------------------------------------------------- |
1932 |
1932 |
1933 def GetTreeImage(self, var_class): |
1933 def GetTreeImage(self, var_class): |
1934 return self.TreeImageDict[var_class] |
1934 return self.TreeImageDict[var_class] |
1935 |
1935 |
1936 def RefreshPouInstanceVariablesPanel(self): |
1936 def RefreshPouInstanceVariablesPanel(self): |
1937 self.PouInstanceVariablesPanel.RefreshView() |
1937 self.PouInstanceVariablesPanel.RefreshView() |
1938 |
1938 |
1939 def OpenDebugViewer(self, instance_category, instance_path, instance_type): |
1939 def OpenDebugViewer(self, instance_category, instance_path, instance_type): |
1940 openedidx = self.IsOpened(instance_path) |
1940 openedidx = self.IsOpened(instance_path) |
2100 window.SetMode(MODE_SELECTION) |
2100 window.SetMode(MODE_SELECTION) |
2101 EditorToolBar = self.Panes["EditorToolBar"] |
2101 EditorToolBar = self.Panes["EditorToolBar"] |
2102 if EditorToolBar: |
2102 if EditorToolBar: |
2103 EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, False) |
2103 EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, False) |
2104 EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, True) |
2104 EditorToolBar.ToggleTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION, True) |
2105 |
2105 |
2106 def ResetToolToggle(self, id): |
2106 def ResetToolToggle(self, id): |
2107 tool = self.Panes["EditorToolBar"].FindById(id) |
2107 tool = self.Panes["EditorToolBar"].FindById(id) |
2108 tool.SetToggle(False) |
2108 tool.SetToggle(False) |
2109 |
2109 |
2110 def OnSelectionTool(self, event): |
2110 def OnSelectionTool(self, event): |
2111 selected = self.TabsOpened.GetSelection() |
2111 selected = self.TabsOpened.GetSelection() |
2112 if selected != -1: |
2112 if selected != -1: |
2113 self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION) |
2113 self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION) |
2114 |
2114 |
2115 def OnMotionTool(self, event): |
2115 def OnMotionTool(self, event): |
2116 selected = self.TabsOpened.GetSelection() |
2116 selected = self.TabsOpened.GetSelection() |
2117 if selected != -1: |
2117 if selected != -1: |
2118 self.TabsOpened.GetPage(selected).SetMode(MODE_MOTION) |
2118 self.TabsOpened.GetPage(selected).SetMode(MODE_MOTION) |
2119 |
2119 |
2120 def OnCommentTool(self, event): |
2120 def OnCommentTool(self, event): |
2121 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOMMENT) |
2121 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOMMENT) |
2122 selected = self.TabsOpened.GetSelection() |
2122 selected = self.TabsOpened.GetSelection() |
2123 if selected != -1: |
2123 if selected != -1: |
2124 self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT) |
2124 self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT) |
2125 |
2125 |
2126 def OnVariableTool(self, event): |
2126 def OnVariableTool(self, event): |
2127 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARVARIABLE) |
2127 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARVARIABLE) |
2128 selected = self.TabsOpened.GetSelection() |
2128 selected = self.TabsOpened.GetSelection() |
2129 if selected != -1: |
2129 if selected != -1: |
2130 self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE) |
2130 self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE) |
2131 |
2131 |
2132 def OnBlockTool(self, event): |
2132 def OnBlockTool(self, event): |
2133 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARBLOCK) |
2133 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARBLOCK) |
2134 selected = self.TabsOpened.GetSelection() |
2134 selected = self.TabsOpened.GetSelection() |
2135 if selected != -1: |
2135 if selected != -1: |
2136 self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK) |
2136 self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK) |
2137 |
2137 |
2138 def OnConnectionTool(self, event): |
2138 def OnConnectionTool(self, event): |
2139 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONNECTION) |
2139 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONNECTION) |
2140 selected = self.TabsOpened.GetSelection() |
2140 selected = self.TabsOpened.GetSelection() |
2141 if selected != -1: |
2141 if selected != -1: |
2142 self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION) |
2142 self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION) |
2143 |
2143 |
2144 def OnPowerRailTool(self, event): |
2144 def OnPowerRailTool(self, event): |
2145 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL) |
2145 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL) |
2146 selected = self.TabsOpened.GetSelection() |
2146 selected = self.TabsOpened.GetSelection() |
2147 if selected != -1: |
2147 if selected != -1: |
2148 self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL) |
2148 self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL) |
2149 |
2149 |
2150 def OnRungTool(self, event): |
2150 def OnRungTool(self, event): |
2151 selected = self.TabsOpened.GetSelection() |
2151 selected = self.TabsOpened.GetSelection() |
2152 if selected != -1: |
2152 if selected != -1: |
2153 self.TabsOpened.GetPage(selected).AddLadderRung() |
2153 self.TabsOpened.GetPage(selected).AddLadderRung() |
2154 event.Skip() |
2154 event.Skip() |
2155 |
2155 |
2156 def OnCoilTool(self, event): |
2156 def OnCoilTool(self, event): |
2157 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOIL) |
2157 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCOIL) |
2158 selected = self.TabsOpened.GetSelection() |
2158 selected = self.TabsOpened.GetSelection() |
2159 if selected != -1: |
2159 if selected != -1: |
2160 self.TabsOpened.GetPage(selected).SetMode(MODE_COIL) |
2160 self.TabsOpened.GetPage(selected).SetMode(MODE_COIL) |
2161 event.Skip() |
2161 event.Skip() |
2162 |
2162 |
2163 def OnContactTool(self, event): |
2163 def OnContactTool(self, event): |
2164 if self.DrawingMode == FREEDRAWING_MODE: |
2164 if self.DrawingMode == FREEDRAWING_MODE: |
2165 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONTACT) |
2165 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARCONTACT) |
2166 selected = self.TabsOpened.GetSelection() |
2166 selected = self.TabsOpened.GetSelection() |
2167 if selected != -1: |
2167 if selected != -1: |
2168 if self.DrawingMode == FREEDRAWING_MODE: |
2168 if self.DrawingMode == FREEDRAWING_MODE: |
2169 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT) |
2169 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT) |
2170 else: |
2170 else: |
2171 self.TabsOpened.GetPage(selected).AddLadderContact() |
2171 self.TabsOpened.GetPage(selected).AddLadderContact() |
2172 |
2172 |
2173 def OnBranchTool(self, event): |
2173 def OnBranchTool(self, event): |
2174 selected = self.TabsOpened.GetSelection() |
2174 selected = self.TabsOpened.GetSelection() |
2175 if selected != -1: |
2175 if selected != -1: |
2176 self.TabsOpened.GetPage(selected).AddLadderBranch() |
2176 self.TabsOpened.GetPage(selected).AddLadderBranch() |
2177 |
2177 |
2178 def OnInitialStepTool(self, event): |
2178 def OnInitialStepTool(self, event): |
2179 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP) |
2179 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP) |
2180 selected = self.TabsOpened.GetSelection() |
2180 selected = self.TabsOpened.GetSelection() |
2181 if selected != -1: |
2181 if selected != -1: |
2182 self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP) |
2182 self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP) |
2183 |
2183 |
2184 def OnStepTool(self, event): |
2184 def OnStepTool(self, event): |
2185 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2185 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2186 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARSTEP) |
2186 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARSTEP) |
2187 selected = self.TabsOpened.GetSelection() |
2187 selected = self.TabsOpened.GetSelection() |
2188 if selected != -1: |
2188 if selected != -1: |
2189 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2189 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2190 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP) |
2190 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP) |
2191 else: |
2191 else: |
2192 self.TabsOpened.GetPage(selected).AddStep() |
2192 self.TabsOpened.GetPage(selected).AddStep() |
2193 |
2193 |
2194 def OnActionBlockTool(self, event): |
2194 def OnActionBlockTool(self, event): |
2195 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2195 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2196 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK) |
2196 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK) |
2197 selected = self.TabsOpened.GetSelection() |
2197 selected = self.TabsOpened.GetSelection() |
2198 if selected != -1: |
2198 if selected != -1: |
2199 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2199 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2200 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION) |
2200 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION) |
2201 else: |
2201 else: |
2202 self.TabsOpened.GetPage(selected).AddStepAction() |
2202 self.TabsOpened.GetPage(selected).AddStepAction() |
2203 |
2203 |
2204 def OnTransitionTool(self, event): |
2204 def OnTransitionTool(self, event): |
2205 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARTRANSITION) |
2205 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARTRANSITION) |
2206 selected = self.TabsOpened.GetSelection() |
2206 selected = self.TabsOpened.GetSelection() |
2207 if selected != -1: |
2207 if selected != -1: |
2208 self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION) |
2208 self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION) |
2209 |
2209 |
2210 def OnDivergenceTool(self, event): |
2210 def OnDivergenceTool(self, event): |
2211 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2211 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2212 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE) |
2212 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE) |
2213 selected = self.TabsOpened.GetSelection() |
2213 selected = self.TabsOpened.GetSelection() |
2214 if selected != -1: |
2214 if selected != -1: |
2215 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2215 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2216 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE) |
2216 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE) |
2217 else: |
2217 else: |
2218 self.TabsOpened.GetPage(selected).AddDivergence() |
2218 self.TabsOpened.GetPage(selected).AddDivergence() |
2219 |
2219 |
2220 def OnJumpTool(self, event): |
2220 def OnJumpTool(self, event): |
2221 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2221 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2222 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARJUMP) |
2222 self.ResetToolToggle(ID_PLCOPENEDITOREDITORTOOLBARJUMP) |
2223 selected = self.TabsOpened.GetSelection() |
2223 selected = self.TabsOpened.GetSelection() |
2224 if selected != -1: |
2224 if selected != -1: |
2225 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2225 if self.GetDrawingMode() == FREEDRAWING_MODE: |
2226 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP) |
2226 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP) |
2227 else: |
2227 else: |
2228 self.TabsOpened.GetPage(selected).AddJump() |
2228 self.TabsOpened.GetPage(selected).AddJump() |
2229 |
2229 |
2230 |
2230 |
2231 #------------------------------------------------------------------------------- |
2231 #------------------------------------------------------------------------------- |
2232 # Add Project Elements Functions |
2232 # Add Project Elements Functions |
2233 #------------------------------------------------------------------------------- |
2233 #------------------------------------------------------------------------------- |
2234 |
2234 |
2235 def OnAddDataTypeMenu(self, event): |
2235 def OnAddDataTypeMenu(self, event): |
2236 tagname = self.Controler.ProjectAddDataType() |
2236 tagname = self.Controler.ProjectAddDataType() |
2237 if tagname is not None: |
2237 if tagname is not None: |
2238 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2238 self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE) |
2239 self.EditProjectElement(ITEM_DATATYPE, tagname) |
2239 self.EditProjectElement(ITEM_DATATYPE, tagname) |
2240 |
2240 |
2241 def GenerateAddPouFunction(self, pou_type): |
2241 def GenerateAddPouFunction(self, pou_type): |
2242 def OnAddPouMenu(event): |
2242 def OnAddPouMenu(event): |
2243 dialog = PouDialog(self, pou_type) |
2243 dialog = PouDialog(self, pou_type) |
2244 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2244 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2245 dialog.SetPouElementNames(self.Controler.GetProjectPouVariableNames()) |
2245 dialog.SetPouElementNames(self.Controler.GetProjectPouVariableNames()) |
2298 return OnAddResourceMenu |
2306 return OnAddResourceMenu |
2299 |
2307 |
2300 def GenerateChangePouTypeFunction(self, name, new_type): |
2308 def GenerateChangePouTypeFunction(self, name, new_type): |
2301 def OnChangePouTypeMenu(event): |
2309 def OnChangePouTypeMenu(event): |
2302 selected = self.ProjectTree.GetSelection() |
2310 selected = self.ProjectTree.GetSelection() |
2303 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2311 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2304 self.Controler.ProjectChangePouType(name, new_type) |
2312 self.Controler.ProjectChangePouType(name, new_type) |
2305 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2313 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2306 return OnChangePouTypeMenu |
2314 return OnChangePouTypeMenu |
2307 |
2315 |
2308 def OnCopyPou(self, event): |
2316 def OnCopyPou(self, event): |
2309 selected = self.ProjectTree.GetSelection() |
2317 selected = self.ProjectTree.GetSelection() |
2310 pou_name = self.ProjectTree.GetItemText(selected) |
2318 pou_name = self.ProjectTree.GetItemText(selected) |
2311 |
2319 |
2312 pou_xml = self.Controler.GetPouXml(pou_name) |
2320 pou_xml = self.Controler.GetPouXml(pou_name) |
2313 if pou_xml is not None: |
2321 if pou_xml is not None: |
2314 self.SetCopyBuffer(pou_xml) |
2322 self.SetCopyBuffer(pou_xml) |
2315 self._Refresh(EDITMENU) |
2323 self._Refresh(EDITMENU) |
2316 |
2324 |
2317 def OnPastePou(self, event): |
2325 def OnPastePou(self, event): |
2318 selected = self.ProjectTree.GetSelection() |
2326 selected = self.ProjectTree.GetSelection() |
2319 |
2327 |
2320 if self.ProjectTree.GetPyData(selected)["type"] != ITEM_PROJECT: |
2328 if self.ProjectTree.GetPyData(selected)["type"] != ITEM_PROJECT: |
2321 pou_type = self.ProjectTree.GetItemText(selected) |
2329 pou_type = self.ProjectTree.GetItemText(selected) |
2322 pou_type = UNEDITABLE_NAMES_DICT[pou_type] # one of 'Functions', 'Function Blocks' or 'Programs' |
2330 pou_type = UNEDITABLE_NAMES_DICT[pou_type] # one of 'Functions', 'Function Blocks' or 'Programs' |
2323 pou_type = {'Functions': 'function', 'Function Blocks': 'functionBlock', 'Programs': 'program'}[pou_type] |
2331 pou_type = {'Functions': 'function', 'Function Blocks': 'functionBlock', 'Programs': 'program'}[pou_type] |
2324 else: |
2332 else: |
2325 pou_type = None |
2333 pou_type = None |
2326 |
2334 |
2327 pou_xml = self.GetCopyBuffer() |
2335 pou_xml = self.GetCopyBuffer() |
2328 |
2336 |
2329 result = self.Controler.PastePou(pou_type, pou_xml) |
2337 result = self.Controler.PastePou(pou_type, pou_xml) |
2330 |
2338 |
2331 if not isinstance(result, TupleType): |
2339 if not isinstance(result, TupleType): |
2518 def OnPrintPage(self, page): |
2526 def OnPrintPage(self, page): |
2519 dc = self.GetDC() |
2527 dc = self.GetDC() |
2520 dc.SetUserScale(1.0, 1.0) |
2528 dc.SetUserScale(1.0, 1.0) |
2521 dc.SetDeviceOrigin(0, 0) |
2529 dc.SetDeviceOrigin(0, 0) |
2522 dc.printing = not self.Preview |
2530 dc.printing = not self.Preview |
2523 |
2531 |
2524 # Get the size of the DC in pixels |
2532 # Get the size of the DC in pixels |
2525 ppiPrinterX, ppiPrinterY = self.GetPPIPrinter() |
2533 ppiPrinterX, ppiPrinterY = self.GetPPIPrinter() |
2526 ppiScreenX, ppiScreenY = self.GetPPIScreen() |
2534 ppiScreenX, ppiScreenY = self.GetPPIScreen() |
2527 pw, ph = self.GetPageSizePixels() |
2535 pw, ph = self.GetPageSizePixels() |
2528 dw, dh = dc.GetSizeTuple() |
2536 dw, dh = dc.GetSizeTuple() |
2529 Xscale = (float(dw) * float(ppiPrinterX)) / (float(pw) * 25.4) |
2537 Xscale = (float(dw) * float(ppiPrinterX)) / (float(pw) * 25.4) |
2530 Yscale = (float(dh) * float(ppiPrinterY)) / (float(ph) * 25.4) |
2538 Yscale = (float(dh) * float(ppiPrinterY)) / (float(ph) * 25.4) |
2531 |
2539 |
2532 fontsize = self.FontSize * Yscale |
2540 fontsize = self.FontSize * Yscale |
2533 text_margin = self.TextMargin * Yscale |
2541 text_margin = self.TextMargin * Yscale |
2534 |
2542 |
2535 margin_left = self.Margins[0].x * Xscale |
2543 margin_left = self.Margins[0].x * Xscale |
2536 margin_top = self.Margins[0].y * Yscale |
2544 margin_top = self.Margins[0].y * Yscale |
2537 area_width = dw - self.Margins[1].x * Xscale - margin_left |
2545 area_width = dw - self.Margins[1].x * Xscale - margin_left |
2538 area_height = dh - self.Margins[1].y * Yscale - margin_top |
2546 area_height = dh - self.Margins[1].y * Yscale - margin_top |
2539 |
2547 |
2540 dc.SetPen(MiterPen(wx.BLACK)) |
2548 dc.SetPen(MiterPen(wx.BLACK)) |
2541 dc.SetBrush(wx.TRANSPARENT_BRUSH) |
2549 dc.SetBrush(wx.TRANSPARENT_BRUSH) |
2542 dc.DrawRectangle(margin_left, margin_top, area_width, area_height) |
2550 dc.DrawRectangle(margin_left, margin_top, area_width, area_height) |
2543 |
2551 |
2544 dc.SetFont(wx.Font(fontsize, wx.DEFAULT, wx.NORMAL, wx.NORMAL)) |
2552 dc.SetFont(wx.Font(fontsize, wx.DEFAULT, wx.NORMAL, wx.NORMAL)) |
2545 dc.SetTextForeground(wx.BLACK) |
2553 dc.SetTextForeground(wx.BLACK) |
2546 block_name = " - ".join(self.Viewer.GetTagName().split("::")[1:]) |
2554 block_name = " - ".join(self.Viewer.GetTagName().split("::")[1:]) |
2547 text_width, text_height = dc.GetTextExtent(block_name) |
2555 text_width, text_height = dc.GetTextExtent(block_name) |
2548 dc.DrawText(block_name, margin_left, margin_top - text_height - self.TextMargin) |
2556 dc.DrawText(block_name, margin_left, margin_top - text_height - self.TextMargin) |
2549 dc.DrawText(_("Page: %d") % page, margin_left, margin_top + area_height + self.TextMargin) |
2557 dc.DrawText(_("Page: %d") % page, margin_left, margin_top + area_height + self.TextMargin) |
2550 |
2558 |
2551 # Calculate the position on the DC for centering the graphic |
2559 # Calculate the position on the DC for centering the graphic |
2552 posX = area_width * ((page - 1) % self.PageGrid[0]) |
2560 posX = area_width * ((page - 1) % self.PageGrid[0]) |
2553 posY = area_height * ((page - 1) / self.PageGrid[0]) |
2561 posY = area_height * ((page - 1) / self.PageGrid[0]) |
2554 |
2562 |
2555 scaleX = float(area_width) / float(self.PageSize[0]) |
2563 scaleX = float(area_width) / float(self.PageSize[0]) |