changeset 249 | d8425712acef |
parent 245 | fdd05081c966 |
child 253 | d9391572655f |
248:f7df265edd54 | 249:d8425712acef |
---|---|
213 kind=wx.ITEM_NORMAL, text=u'Close Tab\tCTRL+W') |
213 kind=wx.ITEM_NORMAL, text=u'Close Tab\tCTRL+W') |
214 if self.ModeSolo: |
214 if self.ModeSolo: |
215 AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL, |
215 AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL, |
216 kind=wx.ITEM_NORMAL, text=u'Close Project') |
216 kind=wx.ITEM_NORMAL, text=u'Close Project') |
217 parent.AppendSeparator() |
217 parent.AppendSeparator() |
218 AppendMenu(parent, help='', id=wx.ID_SAVE, |
218 if not self.Debug: |
219 kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S') |
219 AppendMenu(parent, help='', id=wx.ID_SAVE, |
220 kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S') |
|
220 if self.ModeSolo: |
221 if self.ModeSolo: |
221 AppendMenu(parent, help='', id=wx.ID_SAVEAS, |
222 AppendMenu(parent, help='', id=wx.ID_SAVEAS, |
222 kind=wx.ITEM_NORMAL, text=u'Save As...\tCTRL+SHIFT+S') |
223 kind=wx.ITEM_NORMAL, text=u'Save As...\tCTRL+SHIFT+S') |
223 AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATE, |
224 AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATE, |
224 kind=wx.ITEM_NORMAL, text=u'Generate Program\tCTRL+G') |
225 kind=wx.ITEM_NORMAL, text=u'Generate Program\tCTRL+G') |
227 kind=wx.ITEM_NORMAL, text=u'Page Setup') |
228 kind=wx.ITEM_NORMAL, text=u'Page Setup') |
228 AppendMenu(parent, help='', id=wx.ID_PREVIEW, |
229 AppendMenu(parent, help='', id=wx.ID_PREVIEW, |
229 kind=wx.ITEM_NORMAL, text=u'Preview') |
230 kind=wx.ITEM_NORMAL, text=u'Preview') |
230 AppendMenu(parent, help='', id=wx.ID_PRINT, |
231 AppendMenu(parent, help='', id=wx.ID_PRINT, |
231 kind=wx.ITEM_NORMAL, text=u'Print') |
232 kind=wx.ITEM_NORMAL, text=u'Print') |
232 parent.AppendSeparator() |
233 if not self.Debug: |
233 AppendMenu(parent, help='', id=wx.ID_PROPERTIES, |
234 parent.AppendSeparator() |
234 kind=wx.ITEM_NORMAL, text=u'Properties') |
235 AppendMenu(parent, help='', id=wx.ID_PROPERTIES, |
236 kind=wx.ITEM_NORMAL, text=u'Properties') |
|
235 parent.AppendSeparator() |
237 parent.AppendSeparator() |
236 if self.ModeSolo: |
238 if self.ModeSolo: |
237 AppendMenu(parent, help='', id=wx.ID_EXIT, |
239 AppendMenu(parent, help='', id=wx.ID_EXIT, |
238 kind=wx.ITEM_NORMAL, text=u'Quit\tCTRL+Q') |
240 kind=wx.ITEM_NORMAL, text=u'Quit\tCTRL+Q') |
239 else: |
241 else: |
244 self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW) |
246 self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW) |
245 self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN) |
247 self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN) |
246 self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE) |
248 self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE) |
247 if self.ModeSolo: |
249 if self.ModeSolo: |
248 self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE_ALL) |
250 self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE_ALL) |
249 self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE) |
251 if not self.Debug: |
252 self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE) |
|
250 if self.ModeSolo: |
253 if self.ModeSolo: |
251 self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS) |
254 self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS) |
252 self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu, |
255 self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu, |
253 id=ID_PLCOPENEDITORFILEMENUGENERATE) |
256 id=ID_PLCOPENEDITORFILEMENUGENERATE) |
254 self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP) |
257 self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP) |
255 self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW) |
258 self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW) |
256 self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) |
259 self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) |
257 self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES) |
260 if not self.Debug: |
261 self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES) |
|
258 if self.ModeSolo: |
262 if self.ModeSolo: |
259 self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) |
263 self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) |
260 else: |
264 else: |
261 self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_CLOSE_ALL) |
265 self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_CLOSE_ALL) |
262 |
266 |
263 def _init_coll_EditMenu_Items(self, parent): |
267 def _init_coll_EditMenu_Items(self, parent): |
264 AppendMenu(parent, help='', id=wx.ID_REFRESH, |
268 AppendMenu(parent, help='', id=wx.ID_REFRESH, |
265 kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R') |
269 kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R') |
266 if not self.ModeSolo: |
270 if not self.Debug: |
267 AppendMenu(parent, help='', id=wx.ID_CLEAR, |
271 if not self.ModeSolo: |
268 kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K') |
272 AppendMenu(parent, help='', id=wx.ID_CLEAR, |
269 AppendMenu(parent, help='', id=wx.ID_UNDO, |
273 kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K') |
270 kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') |
274 AppendMenu(parent, help='', id=wx.ID_UNDO, |
271 AppendMenu(parent, help='', id=wx.ID_REDO, |
275 kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') |
272 kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') |
276 AppendMenu(parent, help='', id=wx.ID_REDO, |
273 parent.AppendSeparator() |
277 kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') |
274 AppendMenu(parent, help='', id=wx.ID_CUT, |
278 parent.AppendSeparator() |
275 kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X') |
279 AppendMenu(parent, help='', id=wx.ID_CUT, |
276 AppendMenu(parent, help='', id=wx.ID_COPY, |
280 kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X') |
277 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
281 AppendMenu(parent, help='', id=wx.ID_COPY, |
278 AppendMenu(parent, help='', id=wx.ID_PASTE, |
282 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
279 kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V') |
283 AppendMenu(parent, help='', id=wx.ID_PASTE, |
280 parent.AppendSeparator() |
284 kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V') |
281 addmenu = wx.Menu(title='') |
285 parent.AppendSeparator() |
282 parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu) |
286 addmenu = wx.Menu(title='') |
283 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
287 parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu) |
284 kind=wx.ITEM_NORMAL, text=u'Data Type') |
288 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
285 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
289 kind=wx.ITEM_NORMAL, text=u'Data Type') |
286 kind=wx.ITEM_NORMAL, text=u'Function') |
290 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
287 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
291 kind=wx.ITEM_NORMAL, text=u'Function') |
288 kind=wx.ITEM_NORMAL, text=u'Function Block') |
292 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
289 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM, |
293 kind=wx.ITEM_NORMAL, text=u'Function Block') |
290 kind=wx.ITEM_NORMAL, text=u'Program') |
294 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM, |
291 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
295 kind=wx.ITEM_NORMAL, text=u'Program') |
292 kind=wx.ITEM_NORMAL, text=u'Configuration') |
296 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
293 AppendMenu(parent, help='', id=wx.ID_DELETE, |
297 kind=wx.ITEM_NORMAL, text=u'Configuration') |
294 kind=wx.ITEM_NORMAL, text=u'Delete') |
298 AppendMenu(parent, help='', id=wx.ID_DELETE, |
299 kind=wx.ITEM_NORMAL, text=u'Delete') |
|
295 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) |
300 self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH) |
296 if not self.ModeSolo: |
301 if not self.Debug: |
297 self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR) |
302 if not self.ModeSolo: |
298 self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) |
303 self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR) |
299 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
304 self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) |
300 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
305 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
301 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
306 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
302 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
307 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
303 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
308 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
304 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
309 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
305 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
310 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
306 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
311 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
307 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
312 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
308 id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK) |
313 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
309 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"), |
314 id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK) |
310 id=ID_PLCOPENEDITOREDITMENUADDPROGRAM) |
315 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"), |
311 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
316 id=ID_PLCOPENEDITOREDITMENUADDPROGRAM) |
312 id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION) |
317 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, |
313 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) |
318 id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION) |
319 self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE) |
|
314 |
320 |
315 def _init_coll_HelpMenu_Items(self, parent): |
321 def _init_coll_HelpMenu_Items(self, parent): |
316 AppendMenu(parent, help='', id=wx.ID_HELP, |
322 AppendMenu(parent, help='', id=wx.ID_HELP, |
317 kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1') |
323 kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1') |
318 #AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS, |
324 #AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS, |
380 0), size=wx.Size(0, 0), style=0) |
386 0), size=wx.Size(0, 0), style=0) |
381 else: |
387 else: |
382 self.TreeNoteBook = wx.aui.AuiNotebook(self) |
388 self.TreeNoteBook = wx.aui.AuiNotebook(self) |
383 self.AUIManager.AddPane(self.TreeNoteBook, wx.aui.AuiPaneInfo().Caption("Project").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) |
389 self.AUIManager.AddPane(self.TreeNoteBook, wx.aui.AuiPaneInfo().Caption("Project").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) |
384 |
390 |
391 typestreestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER |
|
392 if not self.Debug: |
|
393 typestreestyle |= wx.TR_HIDE_ROOT |
|
385 self.TypesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORTYPESTREE, |
394 self.TypesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORTYPESTREE, |
386 name='TypesTree', parent=self.TreeNoteBook, |
395 name='TypesTree', parent=self.TreeNoteBook, |
387 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
396 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
388 style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
397 style=typestreestyle) |
389 self.TreeNoteBook.AddPage(self.TypesTree, "Types") |
398 self.TreeNoteBook.AddPage(self.TypesTree, "Types") |
390 |
399 |
391 if wx.Platform == '__WXMSW__': |
400 if not self.Debug: |
392 self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnTypesTreeRightUp, |
401 if wx.Platform == '__WXMSW__': |
402 self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnTypesTreeRightUp, |
|
403 id=ID_PLCOPENEDITORTYPESTREE) |
|
404 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTypesTreeItemSelected, |
|
405 id=ID_PLCOPENEDITORTYPESTREE) |
|
406 else: |
|
407 if wx.VERSION >= (2, 6, 0): |
|
408 self.TypesTree.Bind(wx.EVT_RIGHT_UP, self.OnTypesTreeRightUp) |
|
409 self.TypesTree.Bind(wx.EVT_LEFT_UP, self.OnTypesTreeLeftUp) |
|
410 else: |
|
411 wx.EVT_RIGHT_UP(self.TypesTree, self.OnTypesTreeRightUp) |
|
412 wx.EVT_LEFT_UP(self.TypesTree, self.OnTypesTreeLeftUp) |
|
413 self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnTypesTreeItemChanging, |
|
414 id=ID_PLCOPENEDITORTYPESTREE) |
|
415 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTypesTreeBeginDrag, |
|
393 id=ID_PLCOPENEDITORTYPESTREE) |
416 id=ID_PLCOPENEDITORTYPESTREE) |
394 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTypesTreeItemSelected, |
417 self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTypesTreeItemBeginEdit, |
395 id=ID_PLCOPENEDITORTYPESTREE) |
418 id=ID_PLCOPENEDITORTYPESTREE) |
396 else: |
419 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTypesTreeItemEndEdit, |
397 if wx.VERSION >= (2, 6, 0): |
|
398 self.TypesTree.Bind(wx.EVT_RIGHT_UP, self.OnTypesTreeRightUp) |
|
399 self.TypesTree.Bind(wx.EVT_LEFT_UP, self.OnTypesTreeLeftUp) |
|
400 else: |
|
401 wx.EVT_RIGHT_UP(self.TypesTree, self.OnTypesTreeRightUp) |
|
402 wx.EVT_LEFT_UP(self.TypesTree, self.OnTypesTreeLeftUp) |
|
403 self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnTypesTreeItemChanging, |
|
404 id=ID_PLCOPENEDITORTYPESTREE) |
420 id=ID_PLCOPENEDITORTYPESTREE) |
405 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTypesTreeBeginDrag, |
421 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTypesTreeItemActivated, |
406 id=ID_PLCOPENEDITORTYPESTREE) |
422 id=ID_PLCOPENEDITORTYPESTREE) |
407 self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTypesTreeItemBeginEdit, |
|
408 id=ID_PLCOPENEDITORTYPESTREE) |
|
409 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTypesTreeItemEndEdit, |
|
410 id=ID_PLCOPENEDITORTYPESTREE) |
|
411 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTypesTreeItemActivated, |
|
412 id=ID_PLCOPENEDITORTYPESTREE) |
|
413 |
423 |
414 self.InstancesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORINSTANCESTREE, |
424 self.InstancesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORINSTANCESTREE, |
415 name='InstancesTree', parent=self.TreeNoteBook, |
425 name='InstancesTree', parent=self.TreeNoteBook, |
416 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
426 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
417 style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
427 style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
418 self.TreeNoteBook.AddPage(self.InstancesTree, "Instances") |
428 self.TreeNoteBook.AddPage(self.InstancesTree, "Instances") |
419 |
429 |
420 if wx.VERSION < (2, 8, 0): |
430 if self.Debug: |
421 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
431 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnInstancesTreeBeginDrag, |
422 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
432 id=ID_PLCOPENEDITORINSTANCESTREE) |
423 self.ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
433 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnInstancesTreeItemActivated, |
424 self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
434 id=ID_PLCOPENEDITORINSTANCESTREE) |
425 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
|
426 self.ToolBar.Realize() |
|
427 else: |
|
428 ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
|
429 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
|
430 ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
|
431 ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
|
432 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
|
433 ToolBar.Realize() |
|
434 self.Panes["ToolBar"] = ToolBar |
|
435 self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo(). |
|
436 Name("ToolBar").Caption("Toolbar"). |
|
437 ToolbarPane().Top(). |
|
438 LeftDockable(False).RightDockable(False)) |
|
439 |
|
440 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
|
441 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
|
442 |
435 |
443 if wx.VERSION < (2, 8, 0): |
436 if wx.VERSION < (2, 8, 0): |
444 self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER, |
437 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
445 name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0), |
438 name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0, |
446 size=wx.Size(0, 0), style=wx.SP_3D) |
439 0), size=wx.Size(0, 0), style=0) |
447 self.SecondSplitter.SetMinimumPaneSize(1) |
440 if wx.VERSION >= (2, 6, 0): |
441 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
|
442 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
|
443 else: |
|
444 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED, |
|
445 self.OnPouSelectedChanged) |
|
448 |
446 |
449 self.MainSplitter.SplitVertically(self.TreeNoteBook, self.SecondSplitter, 200) |
447 self.MainSplitter.SplitVertically(self.TreeNoteBook, self.TabsOpened, 200) |
448 else: |
|
449 self.TabsOpened = wx.aui.AuiNotebook(self) |
|
450 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
|
451 self.OnPouSelectedChanged) |
|
452 self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane()) |
|
453 else: |
|
454 if wx.VERSION < (2, 8, 0): |
|
455 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
|
456 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
|
457 self.ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
|
458 self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
|
459 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
|
460 self.ToolBar.Realize() |
|
461 else: |
|
462 ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize, |
|
463 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER) |
|
464 ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
|
465 ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
|
466 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
|
467 ToolBar.Realize() |
|
468 self.Panes["ToolBar"] = ToolBar |
|
469 self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo(). |
|
470 Name("ToolBar").Caption("Toolbar"). |
|
471 ToolbarPane().Top(). |
|
472 LeftDockable(False).RightDockable(False)) |
|
450 |
473 |
451 self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self, self.Controler) |
474 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
452 |
475 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
453 self.ThirdSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORTHIRDSPLITTER, |
|
454 name='ThirdSplitter', parent=self.SecondSplitter, point=wx.Point(0, 0), |
|
455 size=wx.Size(0, 0), style=wx.SP_3D) |
|
456 self.ThirdSplitter.SetMinimumPaneSize(1) |
|
457 |
476 |
458 self.SecondSplitter.SplitHorizontally(self.ThirdSplitter, self.VariablePanelIndexer, -200) |
477 if wx.VERSION < (2, 8, 0): |
478 self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER, |
|
479 name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0), |
|
480 size=wx.Size(0, 0), style=wx.SP_3D) |
|
481 self.SecondSplitter.SetMinimumPaneSize(1) |
|
482 |
|
483 self.MainSplitter.SplitVertically(self.TreeNoteBook, self.SecondSplitter, 200) |
|
484 |
|
485 self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self, self.Controler) |
|
459 |
486 |
460 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
487 self.ThirdSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORTHIRDSPLITTER, |
461 name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0, |
488 name='ThirdSplitter', parent=self.SecondSplitter, point=wx.Point(0, 0), |
462 0), size=wx.Size(0, 0), style=0) |
489 size=wx.Size(0, 0), style=wx.SP_3D) |
463 if wx.VERSION >= (2, 6, 0): |
490 self.ThirdSplitter.SetMinimumPaneSize(1) |
464 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
491 |
465 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
492 self.SecondSplitter.SplitHorizontally(self.ThirdSplitter, self.VariablePanelIndexer, -200) |
493 |
|
494 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
|
495 name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0, |
|
496 0), size=wx.Size(0, 0), style=0) |
|
497 if wx.VERSION >= (2, 6, 0): |
|
498 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
|
499 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
|
500 else: |
|
501 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED, |
|
502 self.OnPouSelectedChanged) |
|
503 |
|
504 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
|
505 name='LibraryPanel', parent=self.ThirdSplitter, pos=wx.Point(0, |
|
506 0), size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
|
507 |
|
508 self.ThirdSplitter.SplitVertically(self.TabsOpened, self.LibraryPanel, -250) |
|
466 else: |
509 else: |
467 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED, |
510 self.VariablePanelIndexer = VariablePanelIndexer(self, self, self.Controler) |
468 self.OnPouSelectedChanged) |
511 self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variables").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False)) |
469 |
|
470 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
|
471 name='LibraryPanel', parent=self.ThirdSplitter, pos=wx.Point(0, |
|
472 0), size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
|
473 |
512 |
474 self.ThirdSplitter.SplitVertically(self.TabsOpened, self.LibraryPanel, -250) |
513 self.TabsOpened = wx.aui.AuiNotebook(self) |
475 else: |
514 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
476 self.VariablePanelIndexer = VariablePanelIndexer(self, self, self.Controler) |
515 self.OnPouSelectedChanged) |
477 self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variables").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False)) |
516 self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane()) |
478 |
517 |
479 self.TabsOpened = wx.aui.AuiNotebook(self) |
518 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
480 self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, |
519 name='LibraryPanel', parent=self, pos=wx.Point(0, |
481 self.OnPouSelectedChanged) |
520 0), size=wx.Size(0, 0), style=0) |
482 self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane()) |
521 self.AUIManager.AddPane(self.LibraryPanel, wx.aui.AuiPaneInfo().Caption("Library").Right().Layer(0).BestSize(wx.Size(250, 400)).CloseButton(False)) |
483 |
522 |
484 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
523 if wx.Platform == '__WXMSW__': |
485 name='LibraryPanel', parent=self, pos=wx.Point(0, |
524 librarytreestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER |
486 0), size=wx.Size(0, 0), style=0) |
525 else: |
487 self.AUIManager.AddPane(self.LibraryPanel, wx.aui.AuiPaneInfo().Caption("Library").Right().Layer(0).BestSize(wx.Size(250, 400)).CloseButton(False)) |
526 librarytreestyle = wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_SINGLE|wx.SUNKEN_BORDER |
488 |
527 self.LibraryTree = wx.TreeCtrl(id=ID_PLCOPENEDITORLIBRARYTREE, |
489 if wx.Platform == '__WXMSW__': |
528 name='LibraryTree', parent=self.LibraryPanel, |
490 treestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER |
529 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
491 else: |
530 style=librarytreestyle) |
492 treestyle = wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_SINGLE|wx.SUNKEN_BORDER |
531 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnLibraryTreeItemSelected, |
493 self.LibraryTree = wx.TreeCtrl(id=ID_PLCOPENEDITORLIBRARYTREE, |
532 id=ID_PLCOPENEDITORLIBRARYTREE) |
494 name='LibraryTree', parent=self.LibraryPanel, |
533 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag, |
495 pos=wx.Point(0, 0), size=wx.Size(0, 0), |
534 id=ID_PLCOPENEDITORLIBRARYTREE) |
496 style=treestyle) |
535 |
497 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnLibraryTreeItemSelected, |
536 self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT, |
498 id=ID_PLCOPENEDITORLIBRARYTREE) |
537 name='LibraryComment', parent=self.LibraryPanel, |
499 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag, |
538 pos=wx.Point(0, 0), size=wx.Size(0, 60), |
500 id=ID_PLCOPENEDITORLIBRARYTREE) |
539 style=wx.TE_READONLY|wx.TE_MULTILINE) |
501 |
540 |
502 self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT, |
541 self._init_sizers() |
503 name='LibraryComment', parent=self.LibraryPanel, |
|
504 pos=wx.Point(0, 0), size=wx.Size(0, 60), |
|
505 style=wx.TE_READONLY|wx.TE_MULTILINE) |
|
506 |
|
507 self._init_sizers() |
|
508 |
542 |
509 if wx.VERSION >= (2, 8, 0): |
543 if wx.VERSION >= (2, 8, 0): |
510 self.AUIManager.Update() |
544 self.AUIManager.Update() |
511 |
545 |
512 def __init__(self, parent, controler = None, fileOpen = None): |
546 def __init__(self, parent, controler = None, fileOpen = None, debug = False): |
513 self.ModeSolo = controler == None |
547 self.ModeSolo = controler == None |
548 self.Debug = debug |
|
514 if self.ModeSolo: |
549 if self.ModeSolo: |
515 self.Controler = PLCControler() |
550 self.Controler = PLCControler() |
516 if fileOpen is not None: |
551 if fileOpen is not None: |
517 self.Controler.OpenXMLFile(fileOpen) |
552 self.Controler.OpenXMLFile(fileOpen) |
518 else: |
553 else: |
620 self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename()) |
655 self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename()) |
621 else: |
656 else: |
622 self.SetTitle("PLCOpenEditor") |
657 self.SetTitle("PLCOpenEditor") |
623 |
658 |
624 def ShowProperties(self): |
659 def ShowProperties(self): |
625 old_values = self.Controler.GetProjectProperties() |
660 old_values = self.Controler.GetProjectProperties(self.Debug) |
626 dialog = ProjectDialog(self) |
661 dialog = ProjectDialog(self) |
627 dialog.SetValues(old_values) |
662 dialog.SetValues(old_values) |
628 if dialog.ShowModal() == wx.ID_OK: |
663 if dialog.ShowModal() == wx.ID_OK: |
629 new_values = dialog.GetValues() |
664 new_values = dialog.GetValues() |
630 new_values["creationDateTime"] = old_values["creationDateTime"] |
665 new_values["creationDateTime"] = old_values["creationDateTime"] |
633 self.RefreshTitle() |
668 self.RefreshTitle() |
634 self.RefreshFileMenu() |
669 self.RefreshFileMenu() |
635 self.RefreshEditMenu() |
670 self.RefreshEditMenu() |
636 self.RefreshTypesTree() |
671 self.RefreshTypesTree() |
637 for i in xrange(self.TabsOpened.GetPageCount()): |
672 for i in xrange(self.TabsOpened.GetPageCount()): |
638 editor = self.GetPage(i) |
673 editor = self.TabsOpened.GetPage(i) |
639 editor.RefreshScaling() |
674 editor.RefreshScaling() |
640 dialog.Destroy() |
675 dialog.Destroy() |
641 |
676 |
642 def OnCloseFrame(self, event): |
677 def OnCloseFrame(self, event): |
643 if not self.ModeSolo and getattr(self, "_onclose", None) is not None: |
678 if not self.ModeSolo and getattr(self, "_onclose", None) is not None: |
765 event.Skip() |
800 event.Skip() |
766 |
801 |
767 def OnCloseTabMenu(self, event): |
802 def OnCloseTabMenu(self, event): |
768 selected = self.TabsOpened.GetSelection() |
803 selected = self.TabsOpened.GetSelection() |
769 if selected >= 0: |
804 if selected >= 0: |
770 tagname = self.TabsOpened.GetPage(selected).GetTagName() |
|
771 self.TabsOpened.DeletePage(selected) |
805 self.TabsOpened.DeletePage(selected) |
772 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
806 if not self.Debug: |
807 tagname = self.TabsOpened.GetPage(selected).GetTagName() |
|
808 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
773 if self.TabsOpened.GetPageCount() > 0: |
809 if self.TabsOpened.GetPageCount() > 0: |
774 new_index = min(selected, self.TabsOpened.GetPageCount() - 1) |
810 new_index = min(selected, self.TabsOpened.GetPageCount() - 1) |
775 tagname = self.TabsOpened.GetPage(new_index).GetTagName() |
|
776 self.TabsOpened.SetSelection(new_index) |
811 self.TabsOpened.SetSelection(new_index) |
777 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
812 if not self.Debug: |
778 self.RefreshTitle() |
813 tagname = self.TabsOpened.GetPage(new_index).GetTagName() |
814 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
|
779 self.RefreshFileMenu() |
815 self.RefreshFileMenu() |
780 self.RefreshEditMenu() |
816 self.RefreshEditMenu() |
781 self.RefreshToolBar() |
817 self.RefreshToolBar() |
782 event.Skip() |
818 event.Skip() |
783 |
819 |
843 def SaveProjectAs(self): |
879 def SaveProjectAs(self): |
844 filepath = self.Controler.GetFilePath() |
880 filepath = self.Controler.GetFilePath() |
845 if filepath != "": |
881 if filepath != "": |
846 directory, filename = os.path.split(filepath) |
882 directory, filename = os.path.split(filepath) |
847 else: |
883 else: |
848 directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties() |
884 directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties(self.Debug) |
849 dialog = wx.FileDialog(self, "Choose a file", directory, filename, "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT) |
885 dialog = wx.FileDialog(self, "Choose a file", directory, filename, "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT) |
850 if dialog.ShowModal() == wx.ID_OK: |
886 if dialog.ShowModal() == wx.ID_OK: |
851 filepath = dialog.GetPath() |
887 filepath = dialog.GetPath() |
852 if os.path.isdir(os.path.dirname(filepath)): |
888 if os.path.isdir(os.path.dirname(filepath)): |
853 result = self.Controler.SaveXMLFile(filepath) |
889 result = self.Controler.SaveXMLFile(filepath) |
872 |
908 |
873 def OnPreviewMenu(self, event): |
909 def OnPreviewMenu(self, event): |
874 selected = self.TabsOpened.GetSelection() |
910 selected = self.TabsOpened.GetSelection() |
875 if selected != -1: |
911 if selected != -1: |
876 data = wx.PrintDialogData(self.PrintData) |
912 data = wx.PrintDialogData(self.PrintData) |
877 properties = self.Controler.GetProjectProperties() |
913 properties = self.Controler.GetProjectProperties(self.Debug) |
878 page_size = map(int, properties["pageSize"]) |
914 page_size = map(int, properties["pageSize"]) |
879 margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) |
915 margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) |
880 printout = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins, True) |
916 printout = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins, True) |
881 printout2 = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins, True) |
917 printout2 = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins, True) |
882 preview = wx.PrintPreview(printout, printout2, data) |
918 preview = wx.PrintPreview(printout, printout2, data) |
892 def OnPrintMenu(self, event): |
928 def OnPrintMenu(self, event): |
893 selected = self.TabsOpened.GetSelection() |
929 selected = self.TabsOpened.GetSelection() |
894 if selected != -1: |
930 if selected != -1: |
895 dialog_data = wx.PrintDialogData(self.PrintData) |
931 dialog_data = wx.PrintDialogData(self.PrintData) |
896 dialog_data.SetToPage(1) |
932 dialog_data.SetToPage(1) |
897 properties = self.Controler.GetProjectProperties() |
933 properties = self.Controler.GetProjectProperties(self.Debug) |
898 page_size = map(int, properties["pageSize"]) |
934 page_size = map(int, properties["pageSize"]) |
899 margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) |
935 margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight()) |
900 printer = wx.Printer(dialog_data) |
936 printer = wx.Printer(dialog_data) |
901 printout = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins) |
937 printout = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins) |
902 |
938 |
947 def OnRefreshMenu(self, event): |
983 def OnRefreshMenu(self, event): |
948 selected = self.TabsOpened.GetSelection() |
984 selected = self.TabsOpened.GetSelection() |
949 if selected != -1: |
985 if selected != -1: |
950 window = self.TabsOpened.GetPage(selected) |
986 window = self.TabsOpened.GetPage(selected) |
951 window.RefreshView() |
987 window.RefreshView() |
952 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
988 if not self.Debug: |
989 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
|
953 event.Skip() |
990 event.Skip() |
954 |
991 |
955 def OnClearErrorsMenu(self, event): |
992 def OnClearErrorsMenu(self, event): |
956 self.ClearErrors() |
993 self.ClearErrors() |
957 event.Skip() |
994 event.Skip() |
960 self.Controler.LoadPrevious() |
997 self.Controler.LoadPrevious() |
961 idxs = range(self.TabsOpened.GetPageCount()) |
998 idxs = range(self.TabsOpened.GetPageCount()) |
962 idxs.reverse() |
999 idxs.reverse() |
963 for idx in idxs: |
1000 for idx in idxs: |
964 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
1001 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
965 if self.Controler.GetEditedElement(tagname) is None: |
1002 if self.Controler.GetEditedElement(tagname, self.Debug) is None: |
966 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
1003 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
967 self.TabsOpened.DeletePage(idx) |
1004 self.TabsOpened.DeletePage(idx) |
968 selected = self.TabsOpened.GetSelection() |
1005 selected = self.TabsOpened.GetSelection() |
969 if selected != -1: |
1006 if selected != -1: |
970 window = self.TabsOpened.GetPage(selected) |
1007 window = self.TabsOpened.GetPage(selected) |
981 self.Controler.LoadNext() |
1018 self.Controler.LoadNext() |
982 idxs = range(self.TabsOpened.GetPageCount()) |
1019 idxs = range(self.TabsOpened.GetPageCount()) |
983 idxs.reverse() |
1020 idxs.reverse() |
984 for idx in idxs: |
1021 for idx in idxs: |
985 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
1022 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
986 if self.Controler.GetEditedElement(tagname) is None: |
1023 if self.Controler.GetEditedElement(tagname, self.Debug) is None: |
987 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
1024 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
988 self.TabsOpened.DeletePage(idx) |
1025 self.TabsOpened.DeletePage(idx) |
989 selected = self.TabsOpened.GetSelection() |
1026 selected = self.TabsOpened.GetSelection() |
990 if selected != -1: |
1027 if selected != -1: |
991 window = self.TabsOpened.GetPage(selected) |
1028 window = self.TabsOpened.GetPage(selected) |
1029 if selected.IsOk(): |
1066 if selected.IsOk(): |
1030 type = self.TypesTree.GetPyData(selected) |
1067 type = self.TypesTree.GetPyData(selected) |
1031 tagname = "" |
1068 tagname = "" |
1032 if type == ITEM_DATATYPE: |
1069 if type == ITEM_DATATYPE: |
1033 name = self.TypesTree.GetItemText(selected) |
1070 name = self.TypesTree.GetItemText(selected) |
1034 if not self.Controler.DataTypeIsUsed(name): |
1071 if not self.Controler.DataTypeIsUsed(name, self.Debug): |
1035 self.Controler.ProjectRemoveDataType(name) |
1072 self.Controler.ProjectRemoveDataType(name) |
1036 tagname = self.Controler.ComputeDataTypeName(name) |
1073 tagname = self.Controler.ComputeDataTypeName(name) |
1037 else: |
1074 else: |
1038 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1075 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1039 message.ShowModal() |
1076 message.ShowModal() |
1040 message.Destroy() |
1077 message.Destroy() |
1041 elif type == ITEM_POU: |
1078 elif type == ITEM_POU: |
1042 name = self.TypesTree.GetItemText(selected) |
1079 name = self.TypesTree.GetItemText(selected) |
1043 if not self.Controler.DataTypeIsUsed(name): |
1080 if not self.Controler.PouIsUsed(name, self.Debug): |
1044 self.Controler.ProjectRemoveDataType(name) |
1081 self.Controler.ProjectRemovePou(name) |
1045 tagname = self.Controler.ComputeDataTypeName(name) |
1082 tagname = self.Controler.ComputePouName(name) |
1046 else: |
1083 else: |
1047 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1084 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1048 message.ShowModal() |
1085 message.ShowModal() |
1049 message.Destroy() |
1086 message.Destroy() |
1050 elif type in [ITEM_TRANSITION, ITEM_ACTION]: |
1087 elif type in [ITEM_TRANSITION, ITEM_ACTION]: |
1098 #------------------------------------------------------------------------------- |
1135 #------------------------------------------------------------------------------- |
1099 |
1136 |
1100 def OnPouSelectedChanged(self, event): |
1137 def OnPouSelectedChanged(self, event): |
1101 old_selected = self.TabsOpened.GetSelection() |
1138 old_selected = self.TabsOpened.GetSelection() |
1102 if old_selected >= 0: |
1139 if old_selected >= 0: |
1103 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1140 if self.Debug: |
1141 pass |
|
1142 else: |
|
1143 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
1104 selected = event.GetSelection() |
1144 selected = event.GetSelection() |
1105 if selected >= 0: |
1145 if selected >= 0: |
1106 window = self.TabsOpened.GetPage(selected) |
1146 window = self.TabsOpened.GetPage(selected) |
1107 self.SelectTypesTreeItem(window.GetTagName()) |
1147 if self.Debug: |
1148 self.SelectTypesTreeItem(window.GetTagName()) |
|
1149 else: |
|
1150 self.SelectInstancesTreeItem(self.InstancesTree.GetRootItem(), window.GetInstancePath()) |
|
1108 window.RefreshView() |
1151 window.RefreshView() |
1109 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
1152 if not self.Debug: |
1153 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
|
1110 self.RefreshFileMenu() |
1154 self.RefreshFileMenu() |
1111 self.RefreshEditMenu() |
1155 self.RefreshEditMenu() |
1112 self.RefreshToolBar() |
1156 self.RefreshToolBar() |
1113 event.Skip() |
1157 event.Skip() |
1114 |
1158 |
1139 def RefreshPageTitles(self): |
1183 def RefreshPageTitles(self): |
1140 for idx in xrange(self.TabsOpened.GetPageCount()): |
1184 for idx in xrange(self.TabsOpened.GetPageCount()): |
1141 window = self.TabsOpened.GetPage(idx) |
1185 window = self.TabsOpened.GetPage(idx) |
1142 words = window.GetTagName().split("::") |
1186 words = window.GetTagName().split("::") |
1143 if words[0] == "P": |
1187 if words[0] == "P": |
1144 pou_type = self.Controler.GetEditedElementType(window.GetTagName())[1].upper() |
1188 pou_type = self.Controler.GetEditedElementType(window.GetTagName(), self.Debug)[1].upper() |
1145 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName()) |
1189 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug) |
1146 self.SetPageBitmap(idx, GenerateBitmap(pou_type, pou_body_type)) |
1190 self.SetPageBitmap(idx, GenerateBitmap(pou_type, pou_body_type)) |
1147 elif words[0] == "T": |
1191 elif words[0] == "T": |
1148 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName()) |
1192 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug) |
1149 self.SetPageBitmap(idx, GenerateBitmap("TRANSITION", pou_body_type)) |
1193 self.SetPageBitmap(idx, GenerateBitmap("TRANSITION", pou_body_type)) |
1150 elif words[0] == "A": |
1194 elif words[0] == "A": |
1151 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName()) |
1195 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug) |
1152 self.SetPageBitmap(idx, GenerateBitmap("ACTION", pou_body_type)) |
1196 self.SetPageBitmap(idx, GenerateBitmap("ACTION", pou_body_type)) |
1153 elif words[0] == "C": |
1197 elif words[0] == "C": |
1154 self.SetPageBitmap(idx, GenerateBitmap("CONFIGURATION")) |
1198 self.SetPageBitmap(idx, GenerateBitmap("CONFIGURATION")) |
1155 elif words[0] == "R": |
1199 elif words[0] == "R": |
1156 self.SetPageBitmap(idx, GenerateBitmap("RESOURCE")) |
1200 self.SetPageBitmap(idx, GenerateBitmap("RESOURCE")) |
1157 elif words[0] == "D": |
1201 elif words[0] == "D": |
1158 self.SetPageBitmap(idx, GenerateBitmap("DATATYPE")) |
1202 self.SetPageBitmap(idx, GenerateBitmap("DATATYPE")) |
1159 self.TabsOpened.SetPageText(idx, "-".join(words[1:])) |
1203 if self.Debug: |
1204 self.TabsOpened.SetPageText(idx, window.GetInstancePath()) |
|
1205 else: |
|
1206 self.TabsOpened.SetPageText(idx, "-".join(words[1:])) |
|
1160 |
1207 |
1161 |
1208 |
1162 #------------------------------------------------------------------------------- |
1209 #------------------------------------------------------------------------------- |
1163 # Types Tree Management Functions |
1210 # Types Tree Management Functions |
1164 #------------------------------------------------------------------------------- |
1211 #------------------------------------------------------------------------------- |
1165 |
1212 |
1166 def RefreshTypesTree(self): |
1213 def RefreshTypesTree(self): |
1167 infos = self.Controler.GetProjectInfos() |
1214 infos = self.Controler.GetProjectInfos(self.Debug) |
1168 root = self.TypesTree.GetRootItem() |
1215 root = self.TypesTree.GetRootItem() |
1169 if not root.IsOk(): |
1216 if not root.IsOk(): |
1170 root = self.TypesTree.AddRoot(infos["name"]) |
1217 root = self.TypesTree.AddRoot(infos["name"]) |
1171 self.GenerateTypesTreeBranch(root, infos) |
1218 self.GenerateTypesTreeBranch(root, infos) |
1172 self.TypesTree.Expand(root) |
1219 self.TypesTree.Expand(root) |
1180 self.TypesTree.SetItemTextColour(root, wx.RED) |
1227 self.TypesTree.SetItemTextColour(root, wx.RED) |
1181 else: |
1228 else: |
1182 self.TypesTree.SetItemBackgroundColour(root, wx.WHITE) |
1229 self.TypesTree.SetItemBackgroundColour(root, wx.WHITE) |
1183 self.TypesTree.SetItemTextColour(root, wx.BLACK) |
1230 self.TypesTree.SetItemTextColour(root, wx.BLACK) |
1184 if infos["type"] == ITEM_POU: |
1231 if infos["type"] == ITEM_POU: |
1185 self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1232 self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[self.Controler.GetPouBodyType(infos["name"], self.Debug)]) |
1186 else: |
1233 else: |
1187 self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[infos["type"]]) |
1234 self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[infos["type"]]) |
1188 |
1235 |
1189 if wx.VERSION >= (2, 6, 0): |
1236 if wx.VERSION >= (2, 6, 0): |
1190 item, root_cookie = self.TypesTree.GetFirstChild(root) |
1237 item, root_cookie = self.TypesTree.GetFirstChild(root) |
1202 item, root_cookie = self.TypesTree.GetNextChild(root, root_cookie) |
1249 item, root_cookie = self.TypesTree.GetNextChild(root, root_cookie) |
1203 for item in to_delete: |
1250 for item in to_delete: |
1204 self.TypesTree.Delete(item) |
1251 self.TypesTree.Delete(item) |
1205 |
1252 |
1206 def SelectTypesTreeItem(self, tagname): |
1253 def SelectTypesTreeItem(self, tagname): |
1207 if self.TypesTree: |
1254 if self.TypesTree is not None: |
1208 root = self.TypesTree.GetRootItem() |
1255 root = self.TypesTree.GetRootItem() |
1209 words = tagname.split("::") |
1256 words = tagname.split("::") |
1210 if words[0] == "D": |
1257 if words[0] == "D": |
1211 return self.RecursiveTypesTreeItemSelection(root, [(words[1], ITEM_DATATYPE)]) |
1258 return self.RecursiveTypesTreeItemSelection(root, [(words[1], ITEM_DATATYPE)]) |
1212 elif words[0] == "P": |
1259 elif words[0] == "P": |
1221 return self.RecursiveTypesTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)]) |
1268 return self.RecursiveTypesTreeItemSelection(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)]) |
1222 return False |
1269 return False |
1223 |
1270 |
1224 def RecursiveTypesTreeItemSelection(self, root, items): |
1271 def RecursiveTypesTreeItemSelection(self, root, items): |
1225 found = False |
1272 found = False |
1226 if self.TypesTree: |
1273 if self.TypesTree is not None: |
1227 if wx.VERSION >= (2, 6, 0): |
1274 if wx.VERSION >= (2, 6, 0): |
1228 item, root_cookie = self.TypesTree.GetFirstChild(root) |
1275 item, root_cookie = self.TypesTree.GetFirstChild(root) |
1229 else: |
1276 else: |
1230 item, root_cookie = self.TypesTree.GetFirstChild(root, 0) |
1277 item, root_cookie = self.TypesTree.GetFirstChild(root, 0) |
1231 while item.IsOk() and not found: |
1278 while item.IsOk() and not found: |
1245 def OnTypesTreeBeginDrag(self, event): |
1292 def OnTypesTreeBeginDrag(self, event): |
1246 if wx.Platform == '__WXMSW__': |
1293 if wx.Platform == '__WXMSW__': |
1247 self.SelectedItem = event.GetItem() |
1294 self.SelectedItem = event.GetItem() |
1248 if self.SelectedItem is not None and self.TypesTree.GetPyData(self.SelectedItem) == ITEM_POU: |
1295 if self.SelectedItem is not None and self.TypesTree.GetPyData(self.SelectedItem) == ITEM_POU: |
1249 block_name = self.TypesTree.GetItemText(self.SelectedItem) |
1296 block_name = self.TypesTree.GetItemText(self.SelectedItem) |
1250 block_type = self.Controler.GetPouType(block_name) |
1297 block_type = self.Controler.GetPouType(block_name, self.Debug) |
1251 if block_type != "program": |
1298 if block_type != "program": |
1252 data = wx.TextDataObject(str((block_name, block_type, ""))) |
1299 data = wx.TextDataObject(str((block_name, block_type, ""))) |
1253 dragSource = wx.DropSource(self.TypesTree) |
1300 dragSource = wx.DropSource(self.TypesTree) |
1254 dragSource.SetData(data) |
1301 dragSource.SetData(data) |
1255 dragSource.DoDragDrop() |
1302 dragSource.DoDragDrop() |
1276 old_name = self.TypesTree.GetItemText(item) |
1323 old_name = self.TypesTree.GetItemText(item) |
1277 itemtype = self.TypesTree.GetPyData(item) |
1324 itemtype = self.TypesTree.GetPyData(item) |
1278 if itemtype == ITEM_PROJECT: |
1325 if itemtype == ITEM_PROJECT: |
1279 self.Controler.SetProjectProperties(name = new_name) |
1326 self.Controler.SetProjectProperties(name = new_name) |
1280 elif itemtype == ITEM_DATATYPE: |
1327 elif itemtype == ITEM_DATATYPE: |
1281 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]: |
1328 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames(self.Debug) if name != old_name]: |
1282 message = "\"%s\" data type already exists!"%new_name |
1329 message = "\"%s\" data type already exists!"%new_name |
1283 abort = True |
1330 abort = True |
1284 if not abort: |
1331 if not abort: |
1285 self.Controler.ChangeDataTypeName(old_name, new_name) |
1332 self.Controler.ChangeDataTypeName(old_name, new_name) |
1286 self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), |
1333 self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), |
1287 self.Controler.ComputeDataTypeName(new_name)) |
1334 self.Controler.ComputeDataTypeName(new_name)) |
1288 self.RefreshPageTitles() |
1335 self.RefreshPageTitles() |
1289 elif itemtype == ITEM_POU: |
1336 elif itemtype == ITEM_POU: |
1290 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]: |
1337 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug) if name != old_name]: |
1291 message = "\"%s\" pou already exists!"%new_name |
1338 message = "\"%s\" pou already exists!"%new_name |
1292 abort = True |
1339 abort = True |
1293 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]: |
1340 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]: |
1294 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1341 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1295 if messageDialog.ShowModal() == wx.ID_NO: |
1342 if messageDialog.ShowModal() == wx.ID_NO: |
1296 abort = True |
1343 abort = True |
1297 messageDialog.Destroy() |
1344 messageDialog.Destroy() |
1298 if not abort: |
1345 if not abort: |
1305 parent_type = self.TypesTree.GetPyData(parent) |
1352 parent_type = self.TypesTree.GetPyData(parent) |
1306 while parent_type != ITEM_POU: |
1353 while parent_type != ITEM_POU: |
1307 parent = self.TypesTree.GetItemParent(parent) |
1354 parent = self.TypesTree.GetItemParent(parent) |
1308 parent_type = self.TypesTree.GetPyData(parent) |
1355 parent_type = self.TypesTree.GetPyData(parent) |
1309 pou_name = self.TypesTree.GetItemText(parent) |
1356 pou_name = self.TypesTree.GetItemText(parent) |
1310 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1357 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: |
1311 message = "A pou with \"%s\" as name exists!"%new_name |
1358 message = "A pou with \"%s\" as name exists!"%new_name |
1312 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1359 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name, self.Debug) if name != old_name]: |
1313 message = "A variable with \"%s\" as name already exists in this pou!"%new_name |
1360 message = "A variable with \"%s\" as name already exists in this pou!"%new_name |
1314 else: |
1361 else: |
1315 self.Controler.ChangePouTransitionName(pou_name, old_name, new_name) |
1362 self.Controler.ChangePouTransitionName(pou_name, old_name, new_name) |
1316 self.RefreshEditorNames(self.Controler.ComputePouTransitionName(pou_name, old_name), |
1363 self.RefreshEditorNames(self.Controler.ComputePouTransitionName(pou_name, old_name), |
1317 self.Controler.ComputePouTransitionName(pou_name, new_name)) |
1364 self.Controler.ComputePouTransitionName(pou_name, new_name)) |
1321 parent_type = self.TypesTree.GetPyData(parent) |
1368 parent_type = self.TypesTree.GetPyData(parent) |
1322 while parent_type != ITEM_POU: |
1369 while parent_type != ITEM_POU: |
1323 parent = self.TypesTree.GetItemParent(parent) |
1370 parent = self.TypesTree.GetItemParent(parent) |
1324 parent_type = self.TypesTree.GetPyData(parent) |
1371 parent_type = self.TypesTree.GetPyData(parent) |
1325 pou_name = self.TypesTree.GetItemText(parent) |
1372 pou_name = self.TypesTree.GetItemText(parent) |
1326 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1373 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: |
1327 message = "A pou with \"%s\" as name exists!"%new_name |
1374 message = "A pou with \"%s\" as name exists!"%new_name |
1328 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]: |
1375 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name, self.Debug) if name != old_name]: |
1329 message = "A variable with \"%s\" as name already exists in this pou!"%new_name |
1376 message = "A variable with \"%s\" as name already exists in this pou!"%new_name |
1330 else: |
1377 else: |
1331 self.Controler.ChangePouActionName(pou_name, old_name, new_name) |
1378 self.Controler.ChangePouActionName(pou_name, old_name, new_name) |
1332 self.RefreshEditorNames(self.Controler.ComputePouActionName(pou_name, old_name), |
1379 self.RefreshEditorNames(self.Controler.ComputePouActionName(pou_name, old_name), |
1333 self.Controler.ComputePouActionName(pou_name, new_name)) |
1380 self.Controler.ComputePouActionName(pou_name, new_name)) |
1334 self.RefreshPageTitles() |
1381 self.RefreshPageTitles() |
1335 elif itemtype == ITEM_CONFIGURATION: |
1382 elif itemtype == ITEM_CONFIGURATION: |
1336 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]: |
1383 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames(self.Debug) if name != old_name]: |
1337 message = "\"%s\" config already exists!"%new_name |
1384 message = "\"%s\" config already exists!"%new_name |
1338 abort = True |
1385 abort = True |
1339 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1386 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: |
1340 messageDialog = wx.MessageDialog(self, "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1387 messageDialog = wx.MessageDialog(self, "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1341 if messageDialog.ShowModal() == wx.ID_NO: |
1388 if messageDialog.ShowModal() == wx.ID_NO: |
1342 abort = True |
1389 abort = True |
1343 messageDialog.Destroy() |
1390 messageDialog.Destroy() |
1344 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]: |
1391 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]: |
1345 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1392 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1346 if messageDialog.ShowModal() == wx.ID_NO: |
1393 if messageDialog.ShowModal() == wx.ID_NO: |
1347 abort = True |
1394 abort = True |
1348 messageDialog.Destroy() |
1395 messageDialog.Destroy() |
1349 if not abort: |
1396 if not abort: |
1356 parent_type = self.TypesTree.GetPyData(parent) |
1403 parent_type = self.TypesTree.GetPyData(parent) |
1357 while parent_type != ITEM_CONFIGURATION: |
1404 while parent_type != ITEM_CONFIGURATION: |
1358 parent = self.TypesTree.GetItemParent(parent) |
1405 parent = self.TypesTree.GetItemParent(parent) |
1359 parent_type = self.TypesTree.GetPyData(parent) |
1406 parent_type = self.TypesTree.GetPyData(parent) |
1360 config_name = self.TypesTree.GetItemText(parent) |
1407 config_name = self.TypesTree.GetItemText(parent) |
1361 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]: |
1408 if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames(self.Debug)]: |
1362 message = "\"%s\" config already exists!"%new_name |
1409 message = "\"%s\" config already exists!"%new_name |
1363 abort = True |
1410 abort = True |
1364 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]: |
1411 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: |
1365 messageDialog = wx.MessageDialog(self, "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1412 messageDialog = wx.MessageDialog(self, "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1366 if messageDialog.ShowModal() == wx.ID_NO: |
1413 if messageDialog.ShowModal() == wx.ID_NO: |
1367 abort = True |
1414 abort = True |
1368 messageDialog.Destroy() |
1415 messageDialog.Destroy() |
1369 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]: |
1416 elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]: |
1370 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1417 messageDialog = wx.MessageDialog(self, "A variable is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"%new_name, "Error", wx.YES_NO|wx.ICON_QUESTION) |
1371 if messageDialog.ShowModal() == wx.ID_NO: |
1418 if messageDialog.ShowModal() == wx.ID_NO: |
1372 abort = True |
1419 abort = True |
1373 messageDialog.Destroy() |
1420 messageDialog.Destroy() |
1374 if not abort: |
1421 if not abort: |
1499 elif elementtype == ITEM_RESOURCE: |
1546 elif elementtype == ITEM_RESOURCE: |
1500 new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) |
1547 new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) |
1501 self.TabsOpened.AddPage(new_window, "") |
1548 self.TabsOpened.AddPage(new_window, "") |
1502 self.VariablePanelIndexer.AddVariablePanel(tagname, "resource") |
1549 self.VariablePanelIndexer.AddVariablePanel(tagname, "resource") |
1503 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
1550 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
1504 bodytype = self.Controler.GetEditedElementBodyType(tagname) |
1551 bodytype = self.Controler.GetEditedElementBodyType(tagname, self.Debug) |
1505 if bodytype == "FBD": |
1552 if bodytype == "FBD": |
1506 new_window = Viewer(self.TabsOpened, tagname, self, self.Controler) |
1553 new_window = Viewer(self.TabsOpened, tagname, self, self.Controler) |
1507 new_window.RefreshScaling(False) |
1554 new_window.RefreshScaling(False) |
1508 elif bodytype == "LD": |
1555 elif bodytype == "LD": |
1509 new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler) |
1556 new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler) |
1511 elif bodytype == "SFC": |
1558 elif bodytype == "SFC": |
1512 new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler) |
1559 new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler) |
1513 new_window.RefreshScaling(False) |
1560 new_window.RefreshScaling(False) |
1514 else: |
1561 else: |
1515 new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler) |
1562 new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler) |
1516 new_window.SetTextSyntax(elementtype) |
1563 new_window.SetTextSyntax(bodytype) |
1517 if bodytype == "IL": |
1564 if bodytype == "IL": |
1518 new_window.SetKeywords(IL_KEYWORDS) |
1565 new_window.SetKeywords(IL_KEYWORDS) |
1519 else: |
1566 else: |
1520 new_window.SetKeywords(ST_KEYWORDS) |
1567 new_window.SetKeywords(ST_KEYWORDS) |
1521 self.TabsOpened.AddPage(new_window, "") |
1568 self.TabsOpened.AddPage(new_window, "") |
1522 words = tagname.split("::") |
1569 words = tagname.split("::") |
1523 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1])) |
1570 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1], self.Debug)) |
1524 elif elementtype == ITEM_DATATYPE: |
1571 elif elementtype == ITEM_DATATYPE: |
1525 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler) |
1572 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler) |
1526 self.TabsOpened.AddPage(new_window, "") |
1573 self.TabsOpened.AddPage(new_window, "") |
1527 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
1574 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
1528 openedidx = self.IsOpened(tagname) |
1575 openedidx = self.IsOpened(tagname) |
1548 item = self.TypesTree.GetSelection() |
1595 item = self.TypesTree.GetSelection() |
1549 name = self.TypesTree.GetItemText(item) |
1596 name = self.TypesTree.GetItemText(item) |
1550 type = self.TypesTree.GetPyData(item) |
1597 type = self.TypesTree.GetPyData(item) |
1551 if type == ITEM_POU: |
1598 if type == ITEM_POU: |
1552 menu = wx.Menu(title='') |
1599 menu = wx.Menu(title='') |
1553 if self.Controler.GetPouBodyType(name) == "SFC": |
1600 if self.Controler.GetPouBodyType(name, self.Debug) == "SFC": |
1554 new_id = wx.NewId() |
1601 new_id = wx.NewId() |
1555 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition") |
1602 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition") |
1556 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id) |
1603 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id) |
1557 new_id = wx.NewId() |
1604 new_id = wx.NewId() |
1558 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action") |
1605 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action") |
1642 #------------------------------------------------------------------------------- |
1689 #------------------------------------------------------------------------------- |
1643 # Instances Tree Management Functions |
1690 # Instances Tree Management Functions |
1644 #------------------------------------------------------------------------------- |
1691 #------------------------------------------------------------------------------- |
1645 |
1692 |
1646 def RefreshInstancesTree(self): |
1693 def RefreshInstancesTree(self): |
1647 infos = self.Controler.GetProjectTopology() |
1694 infos = self.Controler.GetProjectTopology(self.Debug) |
1648 root = self.InstancesTree.GetRootItem() |
1695 root = self.InstancesTree.GetRootItem() |
1649 if not root.IsOk(): |
1696 if not root.IsOk(): |
1650 root = self.InstancesTree.AddRoot(infos["name"]) |
1697 root = self.InstancesTree.AddRoot(infos["name"]) |
1651 self.GenerateInstancesTreeBranch(root, infos) |
1698 self.GenerateInstancesTreeBranch(root, infos) |
1652 self.InstancesTree.Expand(root) |
1699 self.InstancesTree.Expand(root) |
1653 |
1700 |
1654 def GenerateInstancesTreeBranch(self, root, infos): |
1701 def GenerateInstancesTreeBranch(self, root, infos): |
1655 to_delete = [] |
1702 to_delete = [] |
1656 if infos.get("elmt_type", None) is not None: |
1703 if infos.get("elmt_type", None) is not None: |
1657 self.InstancesTree.SetItemText(root, "%s(%s)"%(infos["name"], infos["elmt_type"])) |
1704 self.InstancesTree.SetItemText(root, "%s (%s)"%(infos["name"], infos["elmt_type"])) |
1658 else: |
1705 else: |
1659 self.InstancesTree.SetItemText(root, infos["name"]) |
1706 self.InstancesTree.SetItemText(root, infos["name"]) |
1660 self.InstancesTree.SetPyData(root, infos["type"]) |
1707 self.InstancesTree.SetPyData(root, (infos["type"], infos.get("tagname", None))) |
1661 self.InstancesTree.SetItemImage(root, self.InstancesTreeImageDict[infos["type"]]) |
1708 self.InstancesTree.SetItemImage(root, self.InstancesTreeImageDict[infos["type"]]) |
1662 |
1709 |
1663 if wx.VERSION >= (2, 6, 0): |
1710 if wx.VERSION >= (2, 6, 0): |
1664 item, root_cookie = self.InstancesTree.GetFirstChild(root) |
1711 item, root_cookie = self.InstancesTree.GetFirstChild(root) |
1665 else: |
1712 else: |
1675 to_delete.append(item) |
1722 to_delete.append(item) |
1676 item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie) |
1723 item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie) |
1677 for item in to_delete: |
1724 for item in to_delete: |
1678 self.InstancesTree.Delete(item) |
1725 self.InstancesTree.Delete(item) |
1679 |
1726 |
1727 def OnInstancesTreeBeginDrag(self, event): |
|
1728 selected_item = event.GetItem() |
|
1729 selected_infos = self.InstancesTree.GetPyData(selected_item) |
|
1730 if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: |
|
1731 var_path = self.InstancesTree.GetItemText(selected_item).split(" (")[0] |
|
1732 parent_item = self.InstancesTree.GetItemParent(selected_item) |
|
1733 while self.InstancesTree.GetPyData(parent_item)[0] != ITEM_PROJECT: |
|
1734 parent_name = self.InstancesTree.GetItemText(parent_item).split(" (")[0] |
|
1735 var_path = "%s.%s"%(parent_name, var_path) |
|
1736 parent_item = self.InstancesTree.GetItemParent(parent_item) |
|
1737 data = wx.TextDataObject(str((var_path, "debug"))) |
|
1738 dragSource = wx.DropSource(self.InstancesTree) |
|
1739 dragSource.SetData(data) |
|
1740 dragSource.DoDragDrop() |
|
1741 event.Skip() |
|
1742 |
|
1743 def OnInstancesTreeItemActivated(self, event): |
|
1744 selected_item = event.GetItem() |
|
1745 selected_infos = self.InstancesTree.GetPyData(selected_item) |
|
1746 if selected_item is not None and selected_infos[0] in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM, ITEM_TRANSITION, ITEM_ACTION]: |
|
1747 instance_path = self.InstancesTree.GetItemText(selected_item).split(" (")[0] |
|
1748 parent_item = self.InstancesTree.GetItemParent(selected_item) |
|
1749 while self.InstancesTree.GetPyData(parent_item)[0] != ITEM_PROJECT: |
|
1750 parent_name = self.InstancesTree.GetItemText(parent_item).split(" (")[0] |
|
1751 instance_path = "%s.%s"%(parent_name, instance_path) |
|
1752 parent_item = self.InstancesTree.GetItemParent(parent_item) |
|
1753 openedidx = self.IsOpened(instance_path) |
|
1754 if openedidx is not None: |
|
1755 old_selected = self.TabsOpened.GetSelection() |
|
1756 if old_selected != openedidx: |
|
1757 if old_selected >= 0: |
|
1758 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
1759 self.TabsOpened.SetSelection(openedidx) |
|
1760 self.TabsOpened.GetPage(openedidx).RefreshView() |
|
1761 elif selected_infos[1] is not None: |
|
1762 bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug) |
|
1763 if bodytype == "FBD": |
|
1764 new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
|
1765 new_window.RefreshScaling(False) |
|
1766 elif bodytype == "LD": |
|
1767 new_window = LD_Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
|
1768 new_window.RefreshScaling(False) |
|
1769 elif bodytype == "SFC": |
|
1770 new_window = SFC_Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
|
1771 new_window.RefreshScaling(False) |
|
1772 else: |
|
1773 new_window = TextViewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
|
1774 new_window.SetTextSyntax(bodytype) |
|
1775 if bodytype == "IL": |
|
1776 new_window.SetKeywords(IL_KEYWORDS) |
|
1777 else: |
|
1778 new_window.SetKeywords(ST_KEYWORDS) |
|
1779 self.TabsOpened.AddPage(new_window, "") |
|
1780 new_window.RefreshView() |
|
1781 new_window.SetFocus() |
|
1782 self.RefreshPageTitles() |
|
1783 event.Skip() |
|
1784 |
|
1785 def SelectInstancesTreeItem(self, root, instancepath): |
|
1786 found = False |
|
1787 if self.InstancesTree is not None: |
|
1788 paths = instancepath.split(".") |
|
1789 if wx.VERSION >= (2, 6, 0): |
|
1790 item, root_cookie = self.InstancesTree.GetFirstChild(root) |
|
1791 else: |
|
1792 item, root_cookie = self.InstancesTree.GetFirstChild(root, 0) |
|
1793 while item.IsOk() and not found: |
|
1794 if self.InstancesTree.GetItemText(item) == paths[0]: |
|
1795 if len(paths) == 1: |
|
1796 self.InstancesTree.SelectItem(item) |
|
1797 return True |
|
1798 else: |
|
1799 found = self.SelectInstancesTreeItem(item, paths[1:]) |
|
1800 else: |
|
1801 item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie) |
|
1802 return found |
|
1803 |
|
1680 #------------------------------------------------------------------------------- |
1804 #------------------------------------------------------------------------------- |
1681 # Library Tree Management Functions |
1805 # Library Tree Management Functions |
1682 #------------------------------------------------------------------------------- |
1806 #------------------------------------------------------------------------------- |
1683 |
1807 |
1684 def RefreshLibraryTree(self): |
1808 def RefreshLibraryTree(self): |
1685 to_delete = [] |
1809 if not self.Debug: |
1686 blocktypes = self.Controler.GetBlockTypes() |
1810 to_delete = [] |
1687 root = self.LibraryTree.GetRootItem() |
1811 blocktypes = self.Controler.GetBlockTypes(debug = self.Debug) |
1688 if not root.IsOk(): |
1812 root = self.LibraryTree.GetRootItem() |
1689 if wx.Platform == '__WXMSW__': |
1813 if not root.IsOk(): |
1690 root = self.LibraryTree.AddRoot("Block Types") |
1814 if wx.Platform == '__WXMSW__': |
1691 self.LibraryTree.SetPyData(root, {"type" : CATEGORY}) |
1815 root = self.LibraryTree.AddRoot("Block Types") |
1816 self.LibraryTree.SetPyData(root, {"type" : CATEGORY}) |
|
1817 else: |
|
1818 root = self.LibraryTree.AddRoot("") |
|
1819 if wx.VERSION >= (2, 6, 0): |
|
1820 category_item, root_cookie = self.LibraryTree.GetFirstChild(root) |
|
1692 else: |
1821 else: |
1693 root = self.LibraryTree.AddRoot("") |
1822 category_item, root_cookie = self.LibraryTree.GetFirstChild(root, 0) |
1694 if wx.VERSION >= (2, 6, 0): |
1823 for category in blocktypes: |
1695 category_item, root_cookie = self.LibraryTree.GetFirstChild(root) |
1824 if not category_item.IsOk(): |
1696 else: |
1825 category_item = self.LibraryTree.AppendItem(root, category["name"]) |
1697 category_item, root_cookie = self.LibraryTree.GetFirstChild(root, 0) |
|
1698 for category in blocktypes: |
|
1699 if not category_item.IsOk(): |
|
1700 category_item = self.LibraryTree.AppendItem(root, category["name"]) |
|
1701 if wx.Platform != '__WXMSW__': |
|
1702 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
|
1703 else: |
|
1704 self.LibraryTree.SetItemText(category_item, category["name"]) |
|
1705 self.LibraryTree.SetPyData(category_item, {"type" : CATEGORY}) |
|
1706 if wx.VERSION >= (2, 6, 0): |
|
1707 blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item) |
|
1708 else: |
|
1709 blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item, 0) |
|
1710 for blocktype in category["list"]: |
|
1711 if not blocktype_item.IsOk(): |
|
1712 blocktype_item = self.LibraryTree.AppendItem(category_item, blocktype["name"]) |
|
1713 if wx.Platform != '__WXMSW__': |
1826 if wx.Platform != '__WXMSW__': |
1714 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
1827 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
1715 else: |
1828 else: |
1716 self.LibraryTree.SetItemText(blocktype_item, blocktype["name"]) |
1829 self.LibraryTree.SetItemText(category_item, category["name"]) |
1717 self.LibraryTree.SetPyData(blocktype_item, {"type" : BLOCK, "block_type" : blocktype["type"], "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])}) |
1830 self.LibraryTree.SetPyData(category_item, {"type" : CATEGORY}) |
1718 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
1831 if wx.VERSION >= (2, 6, 0): |
1719 while blocktype_item.IsOk(): |
1832 blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item) |
1720 to_delete.append(blocktype_item) |
1833 else: |
1721 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
1834 blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item, 0) |
1722 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
1835 for blocktype in category["list"]: |
1723 while category_item.IsOk(): |
1836 if not blocktype_item.IsOk(): |
1724 to_delete.append(category_item) |
1837 blocktype_item = self.LibraryTree.AppendItem(category_item, blocktype["name"]) |
1725 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
1838 if wx.Platform != '__WXMSW__': |
1726 for item in to_delete: |
1839 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
1727 self.LibraryTree.Delete(item) |
1840 else: |
1728 if wx.Platform == '__WXMSW__': |
1841 self.LibraryTree.SetItemText(blocktype_item, blocktype["name"]) |
1729 self.LibraryTree.Expand(root) |
1842 self.LibraryTree.SetPyData(blocktype_item, {"type" : BLOCK, "block_type" : blocktype["type"], "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])}) |
1843 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
|
1844 while blocktype_item.IsOk(): |
|
1845 to_delete.append(blocktype_item) |
|
1846 blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie) |
|
1847 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
|
1848 while category_item.IsOk(): |
|
1849 to_delete.append(category_item) |
|
1850 category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie) |
|
1851 for item in to_delete: |
|
1852 self.LibraryTree.Delete(item) |
|
1853 if wx.Platform == '__WXMSW__': |
|
1854 self.LibraryTree.Expand(root) |
|
1730 |
1855 |
1731 def OnLibraryTreeItemSelected(self, event): |
1856 def OnLibraryTreeItemSelected(self, event): |
1732 selected = event.GetItem() |
1857 selected = event.GetItem() |
1733 pydata = self.LibraryTree.GetPyData(selected) |
1858 pydata = self.LibraryTree.GetPyData(selected) |
1734 if pydata["type"] != CATEGORY: |
1859 if pydata["type"] != CATEGORY: |
1735 blocktype = self.Controler.GetBlockType(self.LibraryTree.GetItemText(selected), pydata["inputs"]) |
1860 blocktype = self.Controler.GetBlockType(self.LibraryTree.GetItemText(selected), pydata["inputs"], debug = self.Debug) |
1736 if blocktype: |
1861 if blocktype: |
1737 self.LibraryComment.SetValue(blocktype["comment"]) |
1862 self.LibraryComment.SetValue(blocktype["comment"]) |
1738 else: |
1863 else: |
1739 self.LibraryComment.SetValue("") |
1864 self.LibraryComment.SetValue("") |
1740 else: |
1865 else: |
1754 #------------------------------------------------------------------------------- |
1879 #------------------------------------------------------------------------------- |
1755 # ToolBar Management Functions |
1880 # ToolBar Management Functions |
1756 #------------------------------------------------------------------------------- |
1881 #------------------------------------------------------------------------------- |
1757 |
1882 |
1758 def ResetToolBar(self): |
1883 def ResetToolBar(self): |
1759 for item in self.CurrentToolBar: |
1884 if not self.Debug: |
1760 if wx.VERSION >= (2, 6, 0): |
1885 for item in self.CurrentToolBar: |
1761 self.Unbind(wx.EVT_MENU, id=item) |
1886 if wx.VERSION >= (2, 6, 0): |
1887 self.Unbind(wx.EVT_MENU, id=item) |
|
1888 else: |
|
1889 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) |
|
1890 |
|
1891 if wx.VERSION < (2, 8, 0): |
|
1892 ToolBar = self.ToolBar |
|
1893 else: |
|
1894 ToolBar = self.Panes["ToolBar"] |
|
1895 if ToolBar: |
|
1896 ToolBar.DeleteTool(item) |
|
1897 ToolBar.Realize() |
|
1898 if wx.VERSION >= (2, 8, 0): |
|
1899 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
|
1900 self.AUIManager.Update() |
|
1901 |
|
1902 def RefreshToolBar(self): |
|
1903 if not self.Debug: |
|
1904 selected = self.TabsOpened.GetSelection() |
|
1905 if selected != -1: |
|
1906 language = self.Controler.GetEditedElementBodyType(self.TabsOpened.GetPage(selected).GetTagName(), self.Debug) |
|
1762 else: |
1907 else: |
1763 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) |
1908 language = None |
1764 |
1909 if language is not None and language != self.CurrentLanguage: |
1765 if wx.VERSION < (2, 8, 0): |
1910 self.ResetToolBar() |
1766 ToolBar = self.ToolBar |
1911 self.CurrentLanguage = language |
1767 else: |
1912 self.CurrentToolBar = [] |
1768 ToolBar = self.Panes["ToolBar"] |
1913 if wx.VERSION < (2, 8, 0): |
1769 if ToolBar: |
1914 ToolBar = self.ToolBar |
1770 ToolBar.DeleteTool(item) |
1915 else: |
1771 ToolBar.Realize() |
1916 ToolBar = self.Panes["ToolBar"] |
1772 if wx.VERSION >= (2, 8, 0): |
1917 if ToolBar: |
1773 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
1918 for radio, modes, id, method, picture, help in ToolBarItems[language]: |
1774 self.AUIManager.Update() |
1919 if modes & self.DrawingMode: |
1775 |
1920 if radio or self.DrawingMode == FREEDRAWING_MODE: |
1776 def RefreshToolBar(self): |
1921 ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help) |
1777 selected = self.TabsOpened.GetSelection() |
1922 else: |
1778 if selected != -1: |
1923 ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help) |
1779 language = self.Controler.GetEditedElementBodyType(self.TabsOpened.GetPage(selected).GetTagName()) |
1924 self.Bind(wx.EVT_TOOL, getattr(self, method), id=id) |
1780 else: |
1925 self.CurrentToolBar.append(id) |
1781 language = None |
1926 ToolBar.Realize() |
1782 if language is not None and language != self.CurrentLanguage: |
1927 if wx.VERSION >= (2, 8, 0): |
1783 self.ResetToolBar() |
1928 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
1784 self.CurrentLanguage = language |
1929 self.AUIManager.Update() |
1785 self.CurrentToolBar = [] |
1930 elif not language: |
1786 if wx.VERSION < (2, 8, 0): |
1931 self.ResetToolBar() |
1787 ToolBar = self.ToolBar |
1932 self.CurrentLanguage = language |
1788 else: |
1933 self.ResetCurrentMode() |
1789 ToolBar = self.Panes["ToolBar"] |
|
1790 if ToolBar: |
|
1791 for radio, modes, id, method, picture, help in ToolBarItems[language]: |
|
1792 if modes & self.DrawingMode: |
|
1793 if radio or self.DrawingMode == FREEDRAWING_MODE: |
|
1794 ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help) |
|
1795 else: |
|
1796 ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help) |
|
1797 self.Bind(wx.EVT_TOOL, getattr(self, method), id=id) |
|
1798 self.CurrentToolBar.append(id) |
|
1799 ToolBar.Realize() |
|
1800 if wx.VERSION >= (2, 8, 0): |
|
1801 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize()) |
|
1802 self.AUIManager.Update() |
|
1803 elif not language: |
|
1804 self.ResetToolBar() |
|
1805 self.CurrentLanguage = language |
|
1806 self.ResetCurrentMode() |
|
1807 |
1934 |
1808 |
1935 |
1809 #------------------------------------------------------------------------------- |
1936 #------------------------------------------------------------------------------- |
1810 # ToolBar Items Functions |
1937 # ToolBar Items Functions |
1811 #------------------------------------------------------------------------------- |
1938 #------------------------------------------------------------------------------- |
1963 # Add Project Elements Functions |
2090 # Add Project Elements Functions |
1964 #------------------------------------------------------------------------------- |
2091 #------------------------------------------------------------------------------- |
1965 |
2092 |
1966 def OnAddDataTypeMenu(self, event): |
2093 def OnAddDataTypeMenu(self, event): |
1967 dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL) |
2094 dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL) |
1968 dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames()) |
2095 dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames(self.Debug)) |
1969 if dialog.ShowModal() == wx.ID_OK: |
2096 if dialog.ShowModal() == wx.ID_OK: |
1970 self.Controler.ProjectAddDataType(dialog.GetValue()) |
2097 self.Controler.ProjectAddDataType(dialog.GetValue()) |
1971 self.RefreshTitle() |
2098 self.RefreshTitle() |
1972 self.RefreshEditMenu() |
2099 self.RefreshEditMenu() |
1973 self.RefreshTypesTree() |
2100 self.RefreshTypesTree() |
1975 event.Skip() |
2102 event.Skip() |
1976 |
2103 |
1977 def GenerateAddPouFunction(self, pou_type): |
2104 def GenerateAddPouFunction(self, pou_type): |
1978 def OnAddPouMenu(event): |
2105 def OnAddPouMenu(event): |
1979 dialog = PouDialog(self, pou_type) |
2106 dialog = PouDialog(self, pou_type) |
1980 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2107 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
1981 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
2108 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug)) |
1982 if dialog.ShowModal() == wx.ID_OK: |
2109 if dialog.ShowModal() == wx.ID_OK: |
1983 values = dialog.GetValues() |
2110 values = dialog.GetValues() |
1984 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
2111 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
1985 self.RefreshTitle() |
2112 self.RefreshTitle() |
1986 self.RefreshEditMenu() |
2113 self.RefreshEditMenu() |
1991 return OnAddPouMenu |
2118 return OnAddPouMenu |
1992 |
2119 |
1993 def GenerateAddTransitionFunction(self, pou_name): |
2120 def GenerateAddTransitionFunction(self, pou_name): |
1994 def OnAddTransitionMenu(event): |
2121 def OnAddTransitionMenu(event): |
1995 dialog = PouTransitionDialog(self) |
2122 dialog = PouTransitionDialog(self) |
1996 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2123 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
1997 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name)) |
2124 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name, self.Debug)) |
1998 if dialog.ShowModal() == wx.ID_OK: |
2125 if dialog.ShowModal() == wx.ID_OK: |
1999 values = dialog.GetValues() |
2126 values = dialog.GetValues() |
2000 self.Controler.ProjectAddPouTransition(pou_name, values["transitionName"], values["language"]) |
2127 self.Controler.ProjectAddPouTransition(pou_name, values["transitionName"], values["language"]) |
2001 self.RefreshTitle() |
2128 self.RefreshTitle() |
2002 self.RefreshEditMenu() |
2129 self.RefreshEditMenu() |
2006 return OnAddTransitionMenu |
2133 return OnAddTransitionMenu |
2007 |
2134 |
2008 def GenerateAddActionFunction(self, pou_name): |
2135 def GenerateAddActionFunction(self, pou_name): |
2009 def OnAddActionMenu(event): |
2136 def OnAddActionMenu(event): |
2010 dialog = PouActionDialog(self) |
2137 dialog = PouActionDialog(self) |
2011 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2138 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2012 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name)) |
2139 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name, self.Debug)) |
2013 if dialog.ShowModal() == wx.ID_OK: |
2140 if dialog.ShowModal() == wx.ID_OK: |
2014 values = dialog.GetValues() |
2141 values = dialog.GetValues() |
2015 self.Controler.ProjectAddPouAction(pou_name, values["actionName"], values["language"]) |
2142 self.Controler.ProjectAddPouAction(pou_name, values["actionName"], values["language"]) |
2016 self.RefreshTitle() |
2143 self.RefreshTitle() |
2017 self.RefreshEditMenu() |
2144 self.RefreshEditMenu() |
2020 event.Skip() |
2147 event.Skip() |
2021 return OnAddActionMenu |
2148 return OnAddActionMenu |
2022 |
2149 |
2023 def OnAddConfigurationMenu(self, event): |
2150 def OnAddConfigurationMenu(self, event): |
2024 dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration") |
2151 dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration") |
2025 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2152 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2026 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
2153 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug)) |
2027 if dialog.ShowModal() == wx.ID_OK: |
2154 if dialog.ShowModal() == wx.ID_OK: |
2028 value = dialog.GetValue() |
2155 value = dialog.GetValue() |
2029 self.Controler.ProjectAddConfiguration(value) |
2156 self.Controler.ProjectAddConfiguration(value) |
2030 self.RefreshTitle() |
2157 self.RefreshTitle() |
2031 self.RefreshEditMenu() |
2158 self.RefreshEditMenu() |
2035 event.Skip() |
2162 event.Skip() |
2036 |
2163 |
2037 def GenerateAddResourceFunction(self, config_name): |
2164 def GenerateAddResourceFunction(self, config_name): |
2038 def OnAddResourceMenu(event): |
2165 def OnAddResourceMenu(event): |
2039 dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource") |
2166 dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource") |
2040 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
2167 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2041 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
2168 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug)) |
2042 if dialog.ShowModal() == wx.ID_OK: |
2169 if dialog.ShowModal() == wx.ID_OK: |
2043 value = dialog.GetValue() |
2170 value = dialog.GetValue() |
2044 self.Controler.ProjectAddConfigurationResource(config_name, value) |
2171 self.Controler.ProjectAddConfigurationResource(config_name, value) |
2045 self.RefreshTitle() |
2172 self.RefreshTitle() |
2046 self.RefreshEditMenu() |
2173 self.RefreshEditMenu() |
2057 |
2184 |
2058 def OnRemoveDataTypeMenu(self, event): |
2185 def OnRemoveDataTypeMenu(self, event): |
2059 selected = self.TypesTree.GetSelection() |
2186 selected = self.TypesTree.GetSelection() |
2060 if self.TypesTree.GetPyData(selected) == ITEM_DATATYPE: |
2187 if self.TypesTree.GetPyData(selected) == ITEM_DATATYPE: |
2061 name = self.TypesTree.GetItemText(selected) |
2188 name = self.TypesTree.GetItemText(selected) |
2062 if not self.Controler.DataTypeIsUsed(name): |
2189 if not self.Controler.DataTypeIsUsed(name, self.Debug): |
2063 self.Controler.ProjectRemoveDataType(name) |
2190 self.Controler.ProjectRemoveDataType(name) |
2064 tagname = self.Controler.ComputeDataTypeName(name) |
2191 tagname = self.Controler.ComputeDataTypeName(name) |
2065 idx = self.IsOpened(tagname) |
2192 idx = self.IsOpened(tagname) |
2066 if idx is not None: |
2193 if idx is not None: |
2067 self.TabsOpened.DeletePage(idx) |
2194 self.TabsOpened.DeletePage(idx) |
2077 |
2204 |
2078 def OnRemovePouMenu(self, event): |
2205 def OnRemovePouMenu(self, event): |
2079 selected = self.TypesTree.GetSelection() |
2206 selected = self.TypesTree.GetSelection() |
2080 if self.TypesTree.GetPyData(selected) == ITEM_POU: |
2207 if self.TypesTree.GetPyData(selected) == ITEM_POU: |
2081 name = self.TypesTree.GetItemText(selected) |
2208 name = self.TypesTree.GetItemText(selected) |
2082 if not self.Controler.PouIsUsed(name): |
2209 if not self.Controler.PouIsUsed(name, self.Debug): |
2083 self.Controler.ProjectRemovePou(name) |
2210 self.Controler.ProjectRemovePou(name) |
2084 tagname = self.Controler.ComputePouName(name) |
2211 tagname = self.Controler.ComputePouName(name) |
2085 idx = self.IsOpened(tagname) |
2212 idx = self.IsOpened(tagname) |
2086 if idx is not None: |
2213 if idx is not None: |
2087 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
2214 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
3596 message = "Invalid value \"%s\" for location"%data |
3723 message = "Invalid value \"%s\" for location"%data |
3597 values = None |
3724 values = None |
3598 if values is not None and values[1] == "location": |
3725 if values is not None and values[1] == "location": |
3599 location = values[0] |
3726 location = values[0] |
3600 variable_type = self.ParentWindow.Table.GetValueByName(row, "Type") |
3727 variable_type = self.ParentWindow.Table.GetValueByName(row, "Type") |
3601 base_type = self.ParentWindow.Controler.GetBaseType(variable_type) |
3728 base_type = self.ParentWindow.Controler.GetBaseType(variable_type, self.Debug) |
3602 message = None |
3729 message = None |
3603 if location.startswith("%"): |
3730 if location.startswith("%"): |
3604 if base_type != values[2]: |
3731 if base_type != values[2]: |
3605 message = "Incompatible data types between \"%s\" and \"%s\""%(values[2], variable_type) |
3732 message = "Incompatible data types between \"%s\" and \"%s\""%(values[2], variable_type) |
3606 else: |
3733 else: |
3626 location = "%M" + location |
3753 location = "%M" + location |
3627 self.ParentWindow.Table.SetValue(row, col, location) |
3754 self.ParentWindow.Table.SetValue(row, col, location) |
3628 self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid) |
3755 self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid) |
3629 self.ParentWindow.SaveValues() |
3756 self.ParentWindow.SaveValues() |
3630 dialog.Destroy() |
3757 dialog.Destroy() |
3758 if message is not None: |
|
3631 wx.CallAfter(self.ShowMessage, message) |
3759 wx.CallAfter(self.ShowMessage, message) |
3632 |
3760 |
3633 def ShowMessage(self, message): |
3761 def ShowMessage(self, message): |
3634 if message is not None: |
3762 message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) |
3635 message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR) |
3763 message.ShowModal() |
3636 message.ShowModal() |
3764 message.Destroy() |
3637 message.Destroy() |
|
3638 |
3765 |
3639 [ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID, |
3766 [ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID, |
3640 ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELCLASSFILTER, |
3767 ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELCLASSFILTER, |
3641 ID_VARIABLEEDITORPANELADDBUTTON, ID_VARIABLEEDITORPANELDELETEBUTTON, |
3768 ID_VARIABLEEDITORPANELADDBUTTON, ID_VARIABLEEDITORPANELDELETEBUTTON, |
3642 ID_VARIABLEEDITORPANELUPBUTTON, ID_VARIABLEEDITORPANELDOWNBUTTON, |
3769 ID_VARIABLEEDITORPANELUPBUTTON, ID_VARIABLEEDITORPANELDOWNBUTTON, |
3832 |
3959 |
3833 def SetTagName(self, tagname): |
3960 def SetTagName(self, tagname): |
3834 self.TagName = tagname |
3961 self.TagName = tagname |
3835 |
3962 |
3836 def RefreshView(self): |
3963 def RefreshView(self): |
3837 self.PouNames = self.Controler.GetProjectPouNames() |
3964 self.PouNames = self.Controler.GetProjectPouNames(self.ParentWindow.Debug) |
3838 |
3965 |
3839 words = self.TagName.split("::") |
3966 words = self.TagName.split("::") |
3840 if self.ElementType == "config": |
3967 if self.ElementType == "config": |
3841 self.PouIsUsed = False |
3968 self.PouIsUsed = False |
3842 returnType = None |
3969 returnType = None |
3843 self.Values = self.Controler.GetConfigurationGlobalVars(words[1]) |
3970 self.Values = self.Controler.GetConfigurationGlobalVars(words[1], self.ParentWindow.Debug) |
3844 elif self.ElementType == "resource": |
3971 elif self.ElementType == "resource": |
3845 self.PouIsUsed = False |
3972 self.PouIsUsed = False |
3846 returnType = None |
3973 returnType = None |
3847 self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2]) |
3974 self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2], self.ParentWindow.Debug) |
3848 else: |
3975 else: |
3849 self.PouIsUsed = self.Controler.PouIsUsed(words[1]) |
3976 self.PouIsUsed = self.Controler.PouIsUsed(words[1], self.ParentWindow.Debug) |
3850 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) |
3977 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.ParentWindow.Debug) |
3851 self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName) |
3978 self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.ParentWindow.Debug) |
3852 |
3979 |
3853 if returnType and self.ReturnType.IsEnabled(): |
3980 if returnType and self.ReturnType.IsEnabled(): |
3854 self.ReturnType.SetStringSelection(returnType) |
3981 self.ReturnType.SetStringSelection(returnType) |
3855 |
3982 |
3856 self.RefreshValues() |
3983 self.RefreshValues() |
3979 new_id = wx.NewId() |
4106 new_id = wx.NewId() |
3980 AppendMenu(base_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type) |
4107 AppendMenu(base_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type) |
3981 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(base_type), id=new_id) |
4108 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(base_type), id=new_id) |
3982 type_menu.AppendMenu(wx.NewId(), "Base Types", base_menu) |
4109 type_menu.AppendMenu(wx.NewId(), "Base Types", base_menu) |
3983 datatype_menu = wx.Menu(title='') |
4110 datatype_menu = wx.Menu(title='') |
3984 for datatype in self.Controler.GetDataTypes(basetypes = False): |
4111 for datatype in self.Controler.GetDataTypes(basetypes = False, debug = self.Debug): |
3985 new_id = wx.NewId() |
4112 new_id = wx.NewId() |
3986 AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype) |
4113 AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype) |
3987 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id) |
4114 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id) |
3988 type_menu.AppendMenu(wx.NewId(), "User Data Types", datatype_menu) |
4115 type_menu.AppendMenu(wx.NewId(), "User Data Types", datatype_menu) |
3989 functionblock_menu = wx.Menu(title='') |
4116 functionblock_menu = wx.Menu(title='') |
3990 for functionblock_type in self.Controler.GetFunctionBlockTypes(): |
4117 for functionblock_type in self.Controler.GetFunctionBlockTypes(debug = self.Debug): |
3991 new_id = wx.NewId() |
4118 new_id = wx.NewId() |
3992 AppendMenu(functionblock_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type) |
4119 AppendMenu(functionblock_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type) |
3993 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id) |
4120 self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id) |
3994 type_menu.AppendMenu(wx.NewId(), "Function Block Types", functionblock_menu) |
4121 type_menu.AppendMenu(wx.NewId(), "Function Block Types", functionblock_menu) |
3995 rect = self.VariablesGrid.BlockToDeviceRect((row, col), (row, col)) |
4122 rect = self.VariablesGrid.BlockToDeviceRect((row, col), (row, col)) |