--- a/PLCOpenEditor.py Fri Sep 05 18:12:23 2008 +0200
+++ b/PLCOpenEditor.py Fri Sep 05 18:13:18 2008 +0200
@@ -215,8 +215,9 @@
AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL,
kind=wx.ITEM_NORMAL, text=u'Close Project')
parent.AppendSeparator()
- AppendMenu(parent, help='', id=wx.ID_SAVE,
- kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
+ if not self.Debug:
+ AppendMenu(parent, help='', id=wx.ID_SAVE,
+ kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
if self.ModeSolo:
AppendMenu(parent, help='', id=wx.ID_SAVEAS,
kind=wx.ITEM_NORMAL, text=u'Save As...\tCTRL+SHIFT+S')
@@ -229,9 +230,10 @@
kind=wx.ITEM_NORMAL, text=u'Preview')
AppendMenu(parent, help='', id=wx.ID_PRINT,
kind=wx.ITEM_NORMAL, text=u'Print')
- parent.AppendSeparator()
- AppendMenu(parent, help='', id=wx.ID_PROPERTIES,
- kind=wx.ITEM_NORMAL, text=u'Properties')
+ if not self.Debug:
+ parent.AppendSeparator()
+ AppendMenu(parent, help='', id=wx.ID_PROPERTIES,
+ kind=wx.ITEM_NORMAL, text=u'Properties')
parent.AppendSeparator()
if self.ModeSolo:
AppendMenu(parent, help='', id=wx.ID_EXIT,
@@ -246,7 +248,8 @@
self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE)
if self.ModeSolo:
self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE_ALL)
- self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
+ if not self.Debug:
+ self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
if self.ModeSolo:
self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS)
self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu,
@@ -254,7 +257,8 @@
self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
- self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
+ if not self.Debug:
+ self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
if self.ModeSolo:
self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
else:
@@ -263,54 +267,56 @@
def _init_coll_EditMenu_Items(self, parent):
AppendMenu(parent, help='', id=wx.ID_REFRESH,
kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R')
- if not self.ModeSolo:
- AppendMenu(parent, help='', id=wx.ID_CLEAR,
- kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K')
- AppendMenu(parent, help='', id=wx.ID_UNDO,
- kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
- AppendMenu(parent, help='', id=wx.ID_REDO,
- kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
- parent.AppendSeparator()
- AppendMenu(parent, help='', id=wx.ID_CUT,
- kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
- AppendMenu(parent, help='', id=wx.ID_COPY,
- kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
- AppendMenu(parent, help='', id=wx.ID_PASTE,
- kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
- parent.AppendSeparator()
- addmenu = wx.Menu(title='')
- parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu)
- AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
- kind=wx.ITEM_NORMAL, text=u'Data Type')
- AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
- kind=wx.ITEM_NORMAL, text=u'Function')
- AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
- kind=wx.ITEM_NORMAL, text=u'Function Block')
- AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
- kind=wx.ITEM_NORMAL, text=u'Program')
- AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
- kind=wx.ITEM_NORMAL, text=u'Configuration')
- AppendMenu(parent, help='', id=wx.ID_DELETE,
- kind=wx.ITEM_NORMAL, text=u'Delete')
+ if not self.Debug:
+ if not self.ModeSolo:
+ AppendMenu(parent, help='', id=wx.ID_CLEAR,
+ kind=wx.ITEM_NORMAL, text=u'Clear Errors\tCTRL+K')
+ AppendMenu(parent, help='', id=wx.ID_UNDO,
+ kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
+ AppendMenu(parent, help='', id=wx.ID_REDO,
+ kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
+ parent.AppendSeparator()
+ AppendMenu(parent, help='', id=wx.ID_CUT,
+ kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X')
+ AppendMenu(parent, help='', id=wx.ID_COPY,
+ kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
+ AppendMenu(parent, help='', id=wx.ID_PASTE,
+ kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
+ parent.AppendSeparator()
+ addmenu = wx.Menu(title='')
+ parent.AppendMenu(wx.ID_ADD, "Add Element", addmenu)
+ AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE,
+ kind=wx.ITEM_NORMAL, text=u'Data Type')
+ AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION,
+ kind=wx.ITEM_NORMAL, text=u'Function')
+ AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK,
+ kind=wx.ITEM_NORMAL, text=u'Function Block')
+ AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDPROGRAM,
+ kind=wx.ITEM_NORMAL, text=u'Program')
+ AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION,
+ kind=wx.ITEM_NORMAL, text=u'Configuration')
+ AppendMenu(parent, help='', id=wx.ID_DELETE,
+ kind=wx.ITEM_NORMAL, text=u'Delete')
self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
- if not self.ModeSolo:
- self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
- self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
- self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
- self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
- self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
- self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
- self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
- id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
- self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
- id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
- self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
- id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
- self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
- id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
- self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
- id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
- self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
+ if not self.Debug:
+ if not self.ModeSolo:
+ self.Bind(wx.EVT_MENU, self.OnClearErrorsMenu, id=wx.ID_CLEAR)
+ self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
+ self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
+ self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT)
+ self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY)
+ self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE)
+ self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
+ id=ID_PLCOPENEDITOREDITMENUADDDATATYPE)
+ self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
+ id=ID_PLCOPENEDITOREDITMENUADDFUNCTION)
+ self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
+ id=ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK)
+ self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
+ id=ID_PLCOPENEDITOREDITMENUADDPROGRAM)
+ self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
+ id=ID_PLCOPENEDITOREDITMENUADDCONFIGURATION)
+ self.Bind(wx.EVT_MENU, self.OnDeleteMenu, id=wx.ID_DELETE)
def _init_coll_HelpMenu_Items(self, parent):
AppendMenu(parent, help='', id=wx.ID_HELP,
@@ -382,135 +388,164 @@
self.TreeNoteBook = wx.aui.AuiNotebook(self)
self.AUIManager.AddPane(self.TreeNoteBook, wx.aui.AuiPaneInfo().Caption("Project").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False))
+ typestreestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER
+ if not self.Debug:
+ typestreestyle |= wx.TR_HIDE_ROOT
self.TypesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORTYPESTREE,
name='TypesTree', parent=self.TreeNoteBook,
pos=wx.Point(0, 0), size=wx.Size(0, 0),
- style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
+ style=typestreestyle)
self.TreeNoteBook.AddPage(self.TypesTree, "Types")
- if wx.Platform == '__WXMSW__':
- self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnTypesTreeRightUp,
+ if not self.Debug:
+ if wx.Platform == '__WXMSW__':
+ self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnTypesTreeRightUp,
+ id=ID_PLCOPENEDITORTYPESTREE)
+ self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTypesTreeItemSelected,
+ id=ID_PLCOPENEDITORTYPESTREE)
+ else:
+ if wx.VERSION >= (2, 6, 0):
+ self.TypesTree.Bind(wx.EVT_RIGHT_UP, self.OnTypesTreeRightUp)
+ self.TypesTree.Bind(wx.EVT_LEFT_UP, self.OnTypesTreeLeftUp)
+ else:
+ wx.EVT_RIGHT_UP(self.TypesTree, self.OnTypesTreeRightUp)
+ wx.EVT_LEFT_UP(self.TypesTree, self.OnTypesTreeLeftUp)
+ self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnTypesTreeItemChanging,
+ id=ID_PLCOPENEDITORTYPESTREE)
+ self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTypesTreeBeginDrag,
id=ID_PLCOPENEDITORTYPESTREE)
- self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTypesTreeItemSelected,
+ self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTypesTreeItemBeginEdit,
id=ID_PLCOPENEDITORTYPESTREE)
- else:
- if wx.VERSION >= (2, 6, 0):
- self.TypesTree.Bind(wx.EVT_RIGHT_UP, self.OnTypesTreeRightUp)
- self.TypesTree.Bind(wx.EVT_LEFT_UP, self.OnTypesTreeLeftUp)
- else:
- wx.EVT_RIGHT_UP(self.TypesTree, self.OnTypesTreeRightUp)
- wx.EVT_LEFT_UP(self.TypesTree, self.OnTypesTreeLeftUp)
- self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnTypesTreeItemChanging,
+ self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTypesTreeItemEndEdit,
id=ID_PLCOPENEDITORTYPESTREE)
- self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTypesTreeBeginDrag,
- id=ID_PLCOPENEDITORTYPESTREE)
- self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTypesTreeItemBeginEdit,
- id=ID_PLCOPENEDITORTYPESTREE)
- self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTypesTreeItemEndEdit,
- id=ID_PLCOPENEDITORTYPESTREE)
- self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTypesTreeItemActivated,
- id=ID_PLCOPENEDITORTYPESTREE)
+ self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTypesTreeItemActivated,
+ id=ID_PLCOPENEDITORTYPESTREE)
self.InstancesTree = wx.TreeCtrl(id=ID_PLCOPENEDITORINSTANCESTREE,
name='InstancesTree', parent=self.TreeNoteBook,
pos=wx.Point(0, 0), size=wx.Size(0, 0),
- style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
+ style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
self.TreeNoteBook.AddPage(self.InstancesTree, "Instances")
- if wx.VERSION < (2, 8, 0):
- self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER,
- ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
- self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
- self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION,
- wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
- self.ToolBar.Realize()
- else:
- ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
- wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
- ToolBar.SetToolBitmapSize(wx.Size(25, 25))
- ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION,
- wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
- ToolBar.Realize()
- self.Panes["ToolBar"] = ToolBar
- self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo().
- Name("ToolBar").Caption("Toolbar").
- ToolbarPane().Top().
- LeftDockable(False).RightDockable(False))
-
- self.Bind(wx.EVT_TOOL, self.OnSelectionTool,
- id=ID_PLCOPENEDITORTOOLBARSELECTION)
+ if self.Debug:
+ self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnInstancesTreeBeginDrag,
+ id=ID_PLCOPENEDITORINSTANCESTREE)
+ self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnInstancesTreeItemActivated,
+ id=ID_PLCOPENEDITORINSTANCESTREE)
- if wx.VERSION < (2, 8, 0):
- self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER,
- name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.SP_3D)
- self.SecondSplitter.SetMinimumPaneSize(1)
+ if wx.VERSION < (2, 8, 0):
+ self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
+ name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
+ 0), size=wx.Size(0, 0), style=0)
+ if wx.VERSION >= (2, 6, 0):
+ self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
+ self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
+ else:
+ wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
+ self.OnPouSelectedChanged)
- self.MainSplitter.SplitVertically(self.TreeNoteBook, self.SecondSplitter, 200)
+ self.MainSplitter.SplitVertically(self.TreeNoteBook, self.TabsOpened, 200)
+ else:
+ self.TabsOpened = wx.aui.AuiNotebook(self)
+ self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
+ self.OnPouSelectedChanged)
+ self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane())
+ else:
+ if wx.VERSION < (2, 8, 0):
+ self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER,
+ ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
+ self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
+ self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION,
+ wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
+ self.ToolBar.Realize()
+ else:
+ ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
+ wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
+ ToolBar.SetToolBitmapSize(wx.Size(25, 25))
+ ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION,
+ wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
+ ToolBar.Realize()
+ self.Panes["ToolBar"] = ToolBar
+ self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo().
+ Name("ToolBar").Caption("Toolbar").
+ ToolbarPane().Top().
+ LeftDockable(False).RightDockable(False))
- self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self, self.Controler)
-
- self.ThirdSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORTHIRDSPLITTER,
- name='ThirdSplitter', parent=self.SecondSplitter, point=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.SP_3D)
- self.ThirdSplitter.SetMinimumPaneSize(1)
+ self.Bind(wx.EVT_TOOL, self.OnSelectionTool,
+ id=ID_PLCOPENEDITORTOOLBARSELECTION)
- self.SecondSplitter.SplitHorizontally(self.ThirdSplitter, self.VariablePanelIndexer, -200)
+ if wx.VERSION < (2, 8, 0):
+ self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER,
+ name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0),
+ size=wx.Size(0, 0), style=wx.SP_3D)
+ self.SecondSplitter.SetMinimumPaneSize(1)
+
+ self.MainSplitter.SplitVertically(self.TreeNoteBook, self.SecondSplitter, 200)
+
+ self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self, self.Controler)
- self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
- name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0,
- 0), size=wx.Size(0, 0), style=0)
- if wx.VERSION >= (2, 6, 0):
- self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
- self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
+ self.ThirdSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORTHIRDSPLITTER,
+ name='ThirdSplitter', parent=self.SecondSplitter, point=wx.Point(0, 0),
+ size=wx.Size(0, 0), style=wx.SP_3D)
+ self.ThirdSplitter.SetMinimumPaneSize(1)
+
+ self.SecondSplitter.SplitHorizontally(self.ThirdSplitter, self.VariablePanelIndexer, -200)
+
+ self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
+ name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0,
+ 0), size=wx.Size(0, 0), style=0)
+ if wx.VERSION >= (2, 6, 0):
+ self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
+ self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
+ else:
+ wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
+ self.OnPouSelectedChanged)
+
+ self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
+ name='LibraryPanel', parent=self.ThirdSplitter, pos=wx.Point(0,
+ 0), size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
+
+ self.ThirdSplitter.SplitVertically(self.TabsOpened, self.LibraryPanel, -250)
else:
- wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
- self.OnPouSelectedChanged)
-
- self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
- name='LibraryPanel', parent=self.ThirdSplitter, pos=wx.Point(0,
- 0), size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
+ self.VariablePanelIndexer = VariablePanelIndexer(self, self, self.Controler)
+ self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variables").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False))
- self.ThirdSplitter.SplitVertically(self.TabsOpened, self.LibraryPanel, -250)
- else:
- self.VariablePanelIndexer = VariablePanelIndexer(self, self, self.Controler)
- self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variables").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False))
-
- self.TabsOpened = wx.aui.AuiNotebook(self)
- self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
- self.OnPouSelectedChanged)
- self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane())
-
- self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
- name='LibraryPanel', parent=self, pos=wx.Point(0,
- 0), size=wx.Size(0, 0), style=0)
- self.AUIManager.AddPane(self.LibraryPanel, wx.aui.AuiPaneInfo().Caption("Library").Right().Layer(0).BestSize(wx.Size(250, 400)).CloseButton(False))
-
- if wx.Platform == '__WXMSW__':
- treestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER
- else:
- treestyle = wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_SINGLE|wx.SUNKEN_BORDER
- self.LibraryTree = wx.TreeCtrl(id=ID_PLCOPENEDITORLIBRARYTREE,
- name='LibraryTree', parent=self.LibraryPanel,
- pos=wx.Point(0, 0), size=wx.Size(0, 0),
- style=treestyle)
- self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnLibraryTreeItemSelected,
- id=ID_PLCOPENEDITORLIBRARYTREE)
- self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag,
- id=ID_PLCOPENEDITORLIBRARYTREE)
-
- self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT,
- name='LibraryComment', parent=self.LibraryPanel,
- pos=wx.Point(0, 0), size=wx.Size(0, 60),
- style=wx.TE_READONLY|wx.TE_MULTILINE)
-
- self._init_sizers()
+ self.TabsOpened = wx.aui.AuiNotebook(self)
+ self.TabsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
+ self.OnPouSelectedChanged)
+ self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().CentrePane())
+
+ self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL,
+ name='LibraryPanel', parent=self, pos=wx.Point(0,
+ 0), size=wx.Size(0, 0), style=0)
+ self.AUIManager.AddPane(self.LibraryPanel, wx.aui.AuiPaneInfo().Caption("Library").Right().Layer(0).BestSize(wx.Size(250, 400)).CloseButton(False))
+
+ if wx.Platform == '__WXMSW__':
+ librarytreestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER
+ else:
+ librarytreestyle = wx.TR_HAS_BUTTONS|wx.TR_HIDE_ROOT|wx.TR_SINGLE|wx.SUNKEN_BORDER
+ self.LibraryTree = wx.TreeCtrl(id=ID_PLCOPENEDITORLIBRARYTREE,
+ name='LibraryTree', parent=self.LibraryPanel,
+ pos=wx.Point(0, 0), size=wx.Size(0, 0),
+ style=librarytreestyle)
+ self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnLibraryTreeItemSelected,
+ id=ID_PLCOPENEDITORLIBRARYTREE)
+ self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag,
+ id=ID_PLCOPENEDITORLIBRARYTREE)
+
+ self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT,
+ name='LibraryComment', parent=self.LibraryPanel,
+ pos=wx.Point(0, 0), size=wx.Size(0, 60),
+ style=wx.TE_READONLY|wx.TE_MULTILINE)
+
+ self._init_sizers()
if wx.VERSION >= (2, 8, 0):
self.AUIManager.Update()
- def __init__(self, parent, controler = None, fileOpen = None):
+ def __init__(self, parent, controler = None, fileOpen = None, debug = False):
self.ModeSolo = controler == None
+ self.Debug = debug
if self.ModeSolo:
self.Controler = PLCControler()
if fileOpen is not None:
@@ -622,7 +657,7 @@
self.SetTitle("PLCOpenEditor")
def ShowProperties(self):
- old_values = self.Controler.GetProjectProperties()
+ old_values = self.Controler.GetProjectProperties(self.Debug)
dialog = ProjectDialog(self)
dialog.SetValues(old_values)
if dialog.ShowModal() == wx.ID_OK:
@@ -635,7 +670,7 @@
self.RefreshEditMenu()
self.RefreshTypesTree()
for i in xrange(self.TabsOpened.GetPageCount()):
- editor = self.GetPage(i)
+ editor = self.TabsOpened.GetPage(i)
editor.RefreshScaling()
dialog.Destroy()
@@ -767,15 +802,16 @@
def OnCloseTabMenu(self, event):
selected = self.TabsOpened.GetSelection()
if selected >= 0:
- tagname = self.TabsOpened.GetPage(selected).GetTagName()
self.TabsOpened.DeletePage(selected)
- self.VariablePanelIndexer.RemoveVariablePanel(tagname)
+ if not self.Debug:
+ tagname = self.TabsOpened.GetPage(selected).GetTagName()
+ self.VariablePanelIndexer.RemoveVariablePanel(tagname)
if self.TabsOpened.GetPageCount() > 0:
new_index = min(selected, self.TabsOpened.GetPageCount() - 1)
- tagname = self.TabsOpened.GetPage(new_index).GetTagName()
self.TabsOpened.SetSelection(new_index)
- self.VariablePanelIndexer.ChangeVariablePanel(tagname)
- self.RefreshTitle()
+ if not self.Debug:
+ tagname = self.TabsOpened.GetPage(new_index).GetTagName()
+ self.VariablePanelIndexer.ChangeVariablePanel(tagname)
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
@@ -845,7 +881,7 @@
if filepath != "":
directory, filename = os.path.split(filepath)
else:
- directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties()
+ directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties(self.Debug)
dialog = wx.FileDialog(self, "Choose a file", directory, filename, "PLCOpen files (*.xml)|*.xml|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT)
if dialog.ShowModal() == wx.ID_OK:
filepath = dialog.GetPath()
@@ -874,7 +910,7 @@
selected = self.TabsOpened.GetSelection()
if selected != -1:
data = wx.PrintDialogData(self.PrintData)
- properties = self.Controler.GetProjectProperties()
+ properties = self.Controler.GetProjectProperties(self.Debug)
page_size = map(int, properties["pageSize"])
margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight())
printout = GraphicPrintout(self.TabsOpened.GetPage(selected), page_size, margins, True)
@@ -894,7 +930,7 @@
if selected != -1:
dialog_data = wx.PrintDialogData(self.PrintData)
dialog_data.SetToPage(1)
- properties = self.Controler.GetProjectProperties()
+ properties = self.Controler.GetProjectProperties(self.Debug)
page_size = map(int, properties["pageSize"])
margins = (self.PageSetupData.GetMarginTopLeft(), self.PageSetupData.GetMarginBottomRight())
printer = wx.Printer(dialog_data)
@@ -949,7 +985,8 @@
if selected != -1:
window = self.TabsOpened.GetPage(selected)
window.RefreshView()
- self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
+ if not self.Debug:
+ self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
event.Skip()
def OnClearErrorsMenu(self, event):
@@ -962,7 +999,7 @@
idxs.reverse()
for idx in idxs:
tagname = self.TabsOpened.GetPage(idx).GetTagName()
- if self.Controler.GetEditedElement(tagname) is None:
+ if self.Controler.GetEditedElement(tagname, self.Debug) is None:
self.VariablePanelIndexer.RemoveVariablePanel(tagname)
self.TabsOpened.DeletePage(idx)
selected = self.TabsOpened.GetSelection()
@@ -983,7 +1020,7 @@
idxs.reverse()
for idx in idxs:
tagname = self.TabsOpened.GetPage(idx).GetTagName()
- if self.Controler.GetEditedElement(tagname) is None:
+ if self.Controler.GetEditedElement(tagname, self.Debug) is None:
self.VariablePanelIndexer.RemoveVariablePanel(tagname)
self.TabsOpened.DeletePage(idx)
selected = self.TabsOpened.GetSelection()
@@ -1031,7 +1068,7 @@
tagname = ""
if type == ITEM_DATATYPE:
name = self.TypesTree.GetItemText(selected)
- if not self.Controler.DataTypeIsUsed(name):
+ if not self.Controler.DataTypeIsUsed(name, self.Debug):
self.Controler.ProjectRemoveDataType(name)
tagname = self.Controler.ComputeDataTypeName(name)
else:
@@ -1040,9 +1077,9 @@
message.Destroy()
elif type == ITEM_POU:
name = self.TypesTree.GetItemText(selected)
- if not self.Controler.DataTypeIsUsed(name):
- self.Controler.ProjectRemoveDataType(name)
- tagname = self.Controler.ComputeDataTypeName(name)
+ if not self.Controler.PouIsUsed(name, self.Debug):
+ self.Controler.ProjectRemovePou(name)
+ tagname = self.Controler.ComputePouName(name)
else:
message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
message.ShowModal()
@@ -1100,13 +1137,20 @@
def OnPouSelectedChanged(self, event):
old_selected = self.TabsOpened.GetSelection()
if old_selected >= 0:
- self.TabsOpened.GetPage(old_selected).ResetBuffer()
+ if self.Debug:
+ pass
+ else:
+ self.TabsOpened.GetPage(old_selected).ResetBuffer()
selected = event.GetSelection()
if selected >= 0:
window = self.TabsOpened.GetPage(selected)
- self.SelectTypesTreeItem(window.GetTagName())
+ if self.Debug:
+ self.SelectTypesTreeItem(window.GetTagName())
+ else:
+ self.SelectInstancesTreeItem(self.InstancesTree.GetRootItem(), window.GetInstancePath())
window.RefreshView()
- self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
+ if not self.Debug:
+ self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
@@ -1141,14 +1185,14 @@
window = self.TabsOpened.GetPage(idx)
words = window.GetTagName().split("::")
if words[0] == "P":
- pou_type = self.Controler.GetEditedElementType(window.GetTagName())[1].upper()
- pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName())
+ pou_type = self.Controler.GetEditedElementType(window.GetTagName(), self.Debug)[1].upper()
+ pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug)
self.SetPageBitmap(idx, GenerateBitmap(pou_type, pou_body_type))
elif words[0] == "T":
- pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName())
+ pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug)
self.SetPageBitmap(idx, GenerateBitmap("TRANSITION", pou_body_type))
elif words[0] == "A":
- pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName())
+ pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), self.Debug)
self.SetPageBitmap(idx, GenerateBitmap("ACTION", pou_body_type))
elif words[0] == "C":
self.SetPageBitmap(idx, GenerateBitmap("CONFIGURATION"))
@@ -1156,7 +1200,10 @@
self.SetPageBitmap(idx, GenerateBitmap("RESOURCE"))
elif words[0] == "D":
self.SetPageBitmap(idx, GenerateBitmap("DATATYPE"))
- self.TabsOpened.SetPageText(idx, "-".join(words[1:]))
+ if self.Debug:
+ self.TabsOpened.SetPageText(idx, window.GetInstancePath())
+ else:
+ self.TabsOpened.SetPageText(idx, "-".join(words[1:]))
#-------------------------------------------------------------------------------
@@ -1164,7 +1211,7 @@
#-------------------------------------------------------------------------------
def RefreshTypesTree(self):
- infos = self.Controler.GetProjectInfos()
+ infos = self.Controler.GetProjectInfos(self.Debug)
root = self.TypesTree.GetRootItem()
if not root.IsOk():
root = self.TypesTree.AddRoot(infos["name"])
@@ -1182,7 +1229,7 @@
self.TypesTree.SetItemBackgroundColour(root, wx.WHITE)
self.TypesTree.SetItemTextColour(root, wx.BLACK)
if infos["type"] == ITEM_POU:
- self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[self.Controler.GetPouBodyType(infos["name"])])
+ self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[self.Controler.GetPouBodyType(infos["name"], self.Debug)])
else:
self.TypesTree.SetItemImage(root, self.TypesTreeImageDict[infos["type"]])
@@ -1204,7 +1251,7 @@
self.TypesTree.Delete(item)
def SelectTypesTreeItem(self, tagname):
- if self.TypesTree:
+ if self.TypesTree is not None:
root = self.TypesTree.GetRootItem()
words = tagname.split("::")
if words[0] == "D":
@@ -1223,7 +1270,7 @@
def RecursiveTypesTreeItemSelection(self, root, items):
found = False
- if self.TypesTree:
+ if self.TypesTree is not None:
if wx.VERSION >= (2, 6, 0):
item, root_cookie = self.TypesTree.GetFirstChild(root)
else:
@@ -1247,7 +1294,7 @@
self.SelectedItem = event.GetItem()
if self.SelectedItem is not None and self.TypesTree.GetPyData(self.SelectedItem) == ITEM_POU:
block_name = self.TypesTree.GetItemText(self.SelectedItem)
- block_type = self.Controler.GetPouType(block_name)
+ block_type = self.Controler.GetPouType(block_name, self.Debug)
if block_type != "program":
data = wx.TextDataObject(str((block_name, block_type, "")))
dragSource = wx.DropSource(self.TypesTree)
@@ -1278,7 +1325,7 @@
if itemtype == ITEM_PROJECT:
self.Controler.SetProjectProperties(name = new_name)
elif itemtype == ITEM_DATATYPE:
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames(self.Debug) if name != old_name]:
message = "\"%s\" data type already exists!"%new_name
abort = True
if not abort:
@@ -1287,10 +1334,10 @@
self.Controler.ComputeDataTypeName(new_name))
self.RefreshPageTitles()
elif itemtype == ITEM_POU:
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug) if name != old_name]:
message = "\"%s\" pou already exists!"%new_name
abort = True
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]:
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)
if messageDialog.ShowModal() == wx.ID_NO:
abort = True
@@ -1307,9 +1354,9 @@
parent = self.TypesTree.GetItemParent(parent)
parent_type = self.TypesTree.GetPyData(parent)
pou_name = self.TypesTree.GetItemText(parent)
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]:
message = "A pou with \"%s\" as name exists!"%new_name
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name, self.Debug) if name != old_name]:
message = "A variable with \"%s\" as name already exists in this pou!"%new_name
else:
self.Controler.ChangePouTransitionName(pou_name, old_name, new_name)
@@ -1323,9 +1370,9 @@
parent = self.TypesTree.GetItemParent(parent)
parent_type = self.TypesTree.GetPyData(parent)
pou_name = self.TypesTree.GetItemText(parent)
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]:
message = "A pou with \"%s\" as name exists!"%new_name
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name, self.Debug) if name != old_name]:
message = "A variable with \"%s\" as name already exists in this pou!"%new_name
else:
self.Controler.ChangePouActionName(pou_name, old_name, new_name)
@@ -1333,15 +1380,15 @@
self.Controler.ComputePouActionName(pou_name, new_name))
self.RefreshPageTitles()
elif itemtype == ITEM_CONFIGURATION:
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames(self.Debug) if name != old_name]:
message = "\"%s\" config already exists!"%new_name
abort = True
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]:
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)
if messageDialog.ShowModal() == wx.ID_NO:
abort = True
messageDialog.Destroy()
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]:
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)
if messageDialog.ShowModal() == wx.ID_NO:
abort = True
@@ -1358,15 +1405,15 @@
parent = self.TypesTree.GetItemParent(parent)
parent_type = self.TypesTree.GetPyData(parent)
config_name = self.TypesTree.GetItemText(parent)
- if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]:
+ if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames(self.Debug)]:
message = "\"%s\" config already exists!"%new_name
abort = True
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]:
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)
if messageDialog.ShowModal() == wx.ID_NO:
abort = True
messageDialog.Destroy()
- elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables()]:
+ elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(debug = self.Debug)]:
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)
if messageDialog.ShowModal() == wx.ID_NO:
abort = True
@@ -1501,7 +1548,7 @@
self.TabsOpened.AddPage(new_window, "")
self.VariablePanelIndexer.AddVariablePanel(tagname, "resource")
elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
- bodytype = self.Controler.GetEditedElementBodyType(tagname)
+ bodytype = self.Controler.GetEditedElementBodyType(tagname, self.Debug)
if bodytype == "FBD":
new_window = Viewer(self.TabsOpened, tagname, self, self.Controler)
new_window.RefreshScaling(False)
@@ -1513,14 +1560,14 @@
new_window.RefreshScaling(False)
else:
new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler)
- new_window.SetTextSyntax(elementtype)
+ new_window.SetTextSyntax(bodytype)
if bodytype == "IL":
new_window.SetKeywords(IL_KEYWORDS)
else:
new_window.SetKeywords(ST_KEYWORDS)
self.TabsOpened.AddPage(new_window, "")
words = tagname.split("::")
- self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1]))
+ self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1], self.Debug))
elif elementtype == ITEM_DATATYPE:
new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler)
self.TabsOpened.AddPage(new_window, "")
@@ -1550,7 +1597,7 @@
type = self.TypesTree.GetPyData(item)
if type == ITEM_POU:
menu = wx.Menu(title='')
- if self.Controler.GetPouBodyType(name) == "SFC":
+ if self.Controler.GetPouBodyType(name, self.Debug) == "SFC":
new_id = wx.NewId()
AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition")
self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id)
@@ -1644,7 +1691,7 @@
#-------------------------------------------------------------------------------
def RefreshInstancesTree(self):
- infos = self.Controler.GetProjectTopology()
+ infos = self.Controler.GetProjectTopology(self.Debug)
root = self.InstancesTree.GetRootItem()
if not root.IsOk():
root = self.InstancesTree.AddRoot(infos["name"])
@@ -1654,10 +1701,10 @@
def GenerateInstancesTreeBranch(self, root, infos):
to_delete = []
if infos.get("elmt_type", None) is not None:
- self.InstancesTree.SetItemText(root, "%s(%s)"%(infos["name"], infos["elmt_type"]))
+ self.InstancesTree.SetItemText(root, "%s (%s)"%(infos["name"], infos["elmt_type"]))
else:
self.InstancesTree.SetItemText(root, infos["name"])
- self.InstancesTree.SetPyData(root, infos["type"])
+ self.InstancesTree.SetPyData(root, (infos["type"], infos.get("tagname", None)))
self.InstancesTree.SetItemImage(root, self.InstancesTreeImageDict[infos["type"]])
if wx.VERSION >= (2, 6, 0):
@@ -1677,62 +1724,140 @@
for item in to_delete:
self.InstancesTree.Delete(item)
+ def OnInstancesTreeBeginDrag(self, event):
+ selected_item = event.GetItem()
+ selected_infos = self.InstancesTree.GetPyData(selected_item)
+ if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE:
+ var_path = self.InstancesTree.GetItemText(selected_item).split(" (")[0]
+ parent_item = self.InstancesTree.GetItemParent(selected_item)
+ while self.InstancesTree.GetPyData(parent_item)[0] != ITEM_PROJECT:
+ parent_name = self.InstancesTree.GetItemText(parent_item).split(" (")[0]
+ var_path = "%s.%s"%(parent_name, var_path)
+ parent_item = self.InstancesTree.GetItemParent(parent_item)
+ data = wx.TextDataObject(str((var_path, "debug")))
+ dragSource = wx.DropSource(self.InstancesTree)
+ dragSource.SetData(data)
+ dragSource.DoDragDrop()
+ event.Skip()
+
+ def OnInstancesTreeItemActivated(self, event):
+ selected_item = event.GetItem()
+ selected_infos = self.InstancesTree.GetPyData(selected_item)
+ if selected_item is not None and selected_infos[0] in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM, ITEM_TRANSITION, ITEM_ACTION]:
+ instance_path = self.InstancesTree.GetItemText(selected_item).split(" (")[0]
+ parent_item = self.InstancesTree.GetItemParent(selected_item)
+ while self.InstancesTree.GetPyData(parent_item)[0] != ITEM_PROJECT:
+ parent_name = self.InstancesTree.GetItemText(parent_item).split(" (")[0]
+ instance_path = "%s.%s"%(parent_name, instance_path)
+ parent_item = self.InstancesTree.GetItemParent(parent_item)
+ openedidx = self.IsOpened(instance_path)
+ if openedidx is not None:
+ old_selected = self.TabsOpened.GetSelection()
+ if old_selected != openedidx:
+ if old_selected >= 0:
+ self.TabsOpened.GetPage(old_selected).ResetBuffer()
+ self.TabsOpened.SetSelection(openedidx)
+ self.TabsOpened.GetPage(openedidx).RefreshView()
+ elif selected_infos[1] is not None:
+ bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug)
+ if bodytype == "FBD":
+ new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
+ new_window.RefreshScaling(False)
+ elif bodytype == "LD":
+ new_window = LD_Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
+ new_window.RefreshScaling(False)
+ elif bodytype == "SFC":
+ new_window = SFC_Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
+ new_window.RefreshScaling(False)
+ else:
+ new_window = TextViewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path)
+ new_window.SetTextSyntax(bodytype)
+ if bodytype == "IL":
+ new_window.SetKeywords(IL_KEYWORDS)
+ else:
+ new_window.SetKeywords(ST_KEYWORDS)
+ self.TabsOpened.AddPage(new_window, "")
+ new_window.RefreshView()
+ new_window.SetFocus()
+ self.RefreshPageTitles()
+ event.Skip()
+
+ def SelectInstancesTreeItem(self, root, instancepath):
+ found = False
+ if self.InstancesTree is not None:
+ paths = instancepath.split(".")
+ if wx.VERSION >= (2, 6, 0):
+ item, root_cookie = self.InstancesTree.GetFirstChild(root)
+ else:
+ item, root_cookie = self.InstancesTree.GetFirstChild(root, 0)
+ while item.IsOk() and not found:
+ if self.InstancesTree.GetItemText(item) == paths[0]:
+ if len(paths) == 1:
+ self.InstancesTree.SelectItem(item)
+ return True
+ else:
+ found = self.SelectInstancesTreeItem(item, paths[1:])
+ else:
+ item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie)
+ return found
+
#-------------------------------------------------------------------------------
# Library Tree Management Functions
#-------------------------------------------------------------------------------
def RefreshLibraryTree(self):
- to_delete = []
- blocktypes = self.Controler.GetBlockTypes()
- root = self.LibraryTree.GetRootItem()
- if not root.IsOk():
- if wx.Platform == '__WXMSW__':
- root = self.LibraryTree.AddRoot("Block Types")
- self.LibraryTree.SetPyData(root, {"type" : CATEGORY})
+ if not self.Debug:
+ to_delete = []
+ blocktypes = self.Controler.GetBlockTypes(debug = self.Debug)
+ root = self.LibraryTree.GetRootItem()
+ if not root.IsOk():
+ if wx.Platform == '__WXMSW__':
+ root = self.LibraryTree.AddRoot("Block Types")
+ self.LibraryTree.SetPyData(root, {"type" : CATEGORY})
+ else:
+ root = self.LibraryTree.AddRoot("")
+ if wx.VERSION >= (2, 6, 0):
+ category_item, root_cookie = self.LibraryTree.GetFirstChild(root)
else:
- root = self.LibraryTree.AddRoot("")
- if wx.VERSION >= (2, 6, 0):
- category_item, root_cookie = self.LibraryTree.GetFirstChild(root)
- else:
- category_item, root_cookie = self.LibraryTree.GetFirstChild(root, 0)
- for category in blocktypes:
- if not category_item.IsOk():
- category_item = self.LibraryTree.AppendItem(root, category["name"])
- if wx.Platform != '__WXMSW__':
- category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
- else:
- self.LibraryTree.SetItemText(category_item, category["name"])
- self.LibraryTree.SetPyData(category_item, {"type" : CATEGORY})
- if wx.VERSION >= (2, 6, 0):
- blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item)
- else:
- blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item, 0)
- for blocktype in category["list"]:
- if not blocktype_item.IsOk():
- blocktype_item = self.LibraryTree.AppendItem(category_item, blocktype["name"])
+ category_item, root_cookie = self.LibraryTree.GetFirstChild(root, 0)
+ for category in blocktypes:
+ if not category_item.IsOk():
+ category_item = self.LibraryTree.AppendItem(root, category["name"])
if wx.Platform != '__WXMSW__':
- blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
+ category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
else:
- self.LibraryTree.SetItemText(blocktype_item, blocktype["name"])
- self.LibraryTree.SetPyData(blocktype_item, {"type" : BLOCK, "block_type" : blocktype["type"], "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])})
- blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
- while blocktype_item.IsOk():
- to_delete.append(blocktype_item)
- blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
- category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
- while category_item.IsOk():
- to_delete.append(category_item)
- category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
- for item in to_delete:
- self.LibraryTree.Delete(item)
- if wx.Platform == '__WXMSW__':
- self.LibraryTree.Expand(root)
+ self.LibraryTree.SetItemText(category_item, category["name"])
+ self.LibraryTree.SetPyData(category_item, {"type" : CATEGORY})
+ if wx.VERSION >= (2, 6, 0):
+ blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item)
+ else:
+ blocktype_item, category_cookie = self.LibraryTree.GetFirstChild(category_item, 0)
+ for blocktype in category["list"]:
+ if not blocktype_item.IsOk():
+ blocktype_item = self.LibraryTree.AppendItem(category_item, blocktype["name"])
+ if wx.Platform != '__WXMSW__':
+ blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
+ else:
+ self.LibraryTree.SetItemText(blocktype_item, blocktype["name"])
+ self.LibraryTree.SetPyData(blocktype_item, {"type" : BLOCK, "block_type" : blocktype["type"], "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])})
+ blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
+ while blocktype_item.IsOk():
+ to_delete.append(blocktype_item)
+ blocktype_item, category_cookie = self.LibraryTree.GetNextChild(category_item, category_cookie)
+ category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
+ while category_item.IsOk():
+ to_delete.append(category_item)
+ category_item, root_cookie = self.LibraryTree.GetNextChild(root, root_cookie)
+ for item in to_delete:
+ self.LibraryTree.Delete(item)
+ if wx.Platform == '__WXMSW__':
+ self.LibraryTree.Expand(root)
def OnLibraryTreeItemSelected(self, event):
selected = event.GetItem()
pydata = self.LibraryTree.GetPyData(selected)
if pydata["type"] != CATEGORY:
- blocktype = self.Controler.GetBlockType(self.LibraryTree.GetItemText(selected), pydata["inputs"])
+ blocktype = self.Controler.GetBlockType(self.LibraryTree.GetItemText(selected), pydata["inputs"], debug = self.Debug)
if blocktype:
self.LibraryComment.SetValue(blocktype["comment"])
else:
@@ -1756,54 +1881,56 @@
#-------------------------------------------------------------------------------
def ResetToolBar(self):
- for item in self.CurrentToolBar:
- if wx.VERSION >= (2, 6, 0):
- self.Unbind(wx.EVT_MENU, id=item)
+ if not self.Debug:
+ for item in self.CurrentToolBar:
+ if wx.VERSION >= (2, 6, 0):
+ self.Unbind(wx.EVT_MENU, id=item)
+ else:
+ self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED)
+
+ if wx.VERSION < (2, 8, 0):
+ ToolBar = self.ToolBar
+ else:
+ ToolBar = self.Panes["ToolBar"]
+ if ToolBar:
+ ToolBar.DeleteTool(item)
+ ToolBar.Realize()
+ if wx.VERSION >= (2, 8, 0):
+ self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
+ self.AUIManager.Update()
+
+ def RefreshToolBar(self):
+ if not self.Debug:
+ selected = self.TabsOpened.GetSelection()
+ if selected != -1:
+ language = self.Controler.GetEditedElementBodyType(self.TabsOpened.GetPage(selected).GetTagName(), self.Debug)
else:
- self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED)
-
- if wx.VERSION < (2, 8, 0):
- ToolBar = self.ToolBar
- else:
- ToolBar = self.Panes["ToolBar"]
- if ToolBar:
- ToolBar.DeleteTool(item)
- ToolBar.Realize()
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
- self.AUIManager.Update()
-
- def RefreshToolBar(self):
- selected = self.TabsOpened.GetSelection()
- if selected != -1:
- language = self.Controler.GetEditedElementBodyType(self.TabsOpened.GetPage(selected).GetTagName())
- else:
- language = None
- if language is not None and language != self.CurrentLanguage:
- self.ResetToolBar()
- self.CurrentLanguage = language
- self.CurrentToolBar = []
- if wx.VERSION < (2, 8, 0):
- ToolBar = self.ToolBar
- else:
- ToolBar = self.Panes["ToolBar"]
- if ToolBar:
- for radio, modes, id, method, picture, help in ToolBarItems[language]:
- if modes & self.DrawingMode:
- if radio or self.DrawingMode == FREEDRAWING_MODE:
- ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
- else:
- ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
- self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
- self.CurrentToolBar.append(id)
- ToolBar.Realize()
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
- self.AUIManager.Update()
- elif not language:
- self.ResetToolBar()
- self.CurrentLanguage = language
- self.ResetCurrentMode()
+ language = None
+ if language is not None and language != self.CurrentLanguage:
+ self.ResetToolBar()
+ self.CurrentLanguage = language
+ self.CurrentToolBar = []
+ if wx.VERSION < (2, 8, 0):
+ ToolBar = self.ToolBar
+ else:
+ ToolBar = self.Panes["ToolBar"]
+ if ToolBar:
+ for radio, modes, id, method, picture, help in ToolBarItems[language]:
+ if modes & self.DrawingMode:
+ if radio or self.DrawingMode == FREEDRAWING_MODE:
+ ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
+ else:
+ ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
+ self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
+ self.CurrentToolBar.append(id)
+ ToolBar.Realize()
+ if wx.VERSION >= (2, 8, 0):
+ self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
+ self.AUIManager.Update()
+ elif not language:
+ self.ResetToolBar()
+ self.CurrentLanguage = language
+ self.ResetCurrentMode()
#-------------------------------------------------------------------------------
@@ -1965,7 +2092,7 @@
def OnAddDataTypeMenu(self, event):
dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL)
- dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames())
+ dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames(self.Debug))
if dialog.ShowModal() == wx.ID_OK:
self.Controler.ProjectAddDataType(dialog.GetValue())
self.RefreshTitle()
@@ -1977,8 +2104,8 @@
def GenerateAddPouFunction(self, pou_type):
def OnAddPouMenu(event):
dialog = PouDialog(self, pou_type)
- dialog.SetPouNames(self.Controler.GetProjectPouNames())
- dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
+ dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
+ dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug))
if dialog.ShowModal() == wx.ID_OK:
values = dialog.GetValues()
self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
@@ -1993,8 +2120,8 @@
def GenerateAddTransitionFunction(self, pou_name):
def OnAddTransitionMenu(event):
dialog = PouTransitionDialog(self)
- dialog.SetPouNames(self.Controler.GetProjectPouNames())
- dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name))
+ dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
+ dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name, self.Debug))
if dialog.ShowModal() == wx.ID_OK:
values = dialog.GetValues()
self.Controler.ProjectAddPouTransition(pou_name, values["transitionName"], values["language"])
@@ -2008,8 +2135,8 @@
def GenerateAddActionFunction(self, pou_name):
def OnAddActionMenu(event):
dialog = PouActionDialog(self)
- dialog.SetPouNames(self.Controler.GetProjectPouNames())
- dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name))
+ dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
+ dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name, self.Debug))
if dialog.ShowModal() == wx.ID_OK:
values = dialog.GetValues()
self.Controler.ProjectAddPouAction(pou_name, values["actionName"], values["language"])
@@ -2022,8 +2149,8 @@
def OnAddConfigurationMenu(self, event):
dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration")
- dialog.SetPouNames(self.Controler.GetProjectPouNames())
- dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
+ dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
+ dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug))
if dialog.ShowModal() == wx.ID_OK:
value = dialog.GetValue()
self.Controler.ProjectAddConfiguration(value)
@@ -2037,8 +2164,8 @@
def GenerateAddResourceFunction(self, config_name):
def OnAddResourceMenu(event):
dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource")
- dialog.SetPouNames(self.Controler.GetProjectPouNames())
- dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
+ dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug))
+ dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug))
if dialog.ShowModal() == wx.ID_OK:
value = dialog.GetValue()
self.Controler.ProjectAddConfigurationResource(config_name, value)
@@ -2059,7 +2186,7 @@
selected = self.TypesTree.GetSelection()
if self.TypesTree.GetPyData(selected) == ITEM_DATATYPE:
name = self.TypesTree.GetItemText(selected)
- if not self.Controler.DataTypeIsUsed(name):
+ if not self.Controler.DataTypeIsUsed(name, self.Debug):
self.Controler.ProjectRemoveDataType(name)
tagname = self.Controler.ComputeDataTypeName(name)
idx = self.IsOpened(tagname)
@@ -2079,7 +2206,7 @@
selected = self.TypesTree.GetSelection()
if self.TypesTree.GetPyData(selected) == ITEM_POU:
name = self.TypesTree.GetItemText(selected)
- if not self.Controler.PouIsUsed(name):
+ if not self.Controler.PouIsUsed(name, self.Debug):
self.Controler.ProjectRemovePou(name)
tagname = self.Controler.ComputePouName(name)
idx = self.IsOpened(tagname)
@@ -3598,7 +3725,7 @@
if values is not None and values[1] == "location":
location = values[0]
variable_type = self.ParentWindow.Table.GetValueByName(row, "Type")
- base_type = self.ParentWindow.Controler.GetBaseType(variable_type)
+ base_type = self.ParentWindow.Controler.GetBaseType(variable_type, self.Debug)
message = None
if location.startswith("%"):
if base_type != values[2]:
@@ -3628,13 +3755,13 @@
self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid)
self.ParentWindow.SaveValues()
dialog.Destroy()
+ if message is not None:
wx.CallAfter(self.ShowMessage, message)
def ShowMessage(self, message):
- if message is not None:
- message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR)
- message.ShowModal()
- message.Destroy()
+ message = wx.MessageDialog(self.ParentWindow, message, "Error", wx.OK|wx.ICON_ERROR)
+ message.ShowModal()
+ message.Destroy()
[ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID,
ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELCLASSFILTER,
@@ -3834,21 +3961,21 @@
self.TagName = tagname
def RefreshView(self):
- self.PouNames = self.Controler.GetProjectPouNames()
+ self.PouNames = self.Controler.GetProjectPouNames(self.ParentWindow.Debug)
words = self.TagName.split("::")
if self.ElementType == "config":
self.PouIsUsed = False
returnType = None
- self.Values = self.Controler.GetConfigurationGlobalVars(words[1])
+ self.Values = self.Controler.GetConfigurationGlobalVars(words[1], self.ParentWindow.Debug)
elif self.ElementType == "resource":
self.PouIsUsed = False
returnType = None
- self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2])
- else:
- self.PouIsUsed = self.Controler.PouIsUsed(words[1])
- returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName)
- self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName)
+ self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2], self.ParentWindow.Debug)
+ else:
+ self.PouIsUsed = self.Controler.PouIsUsed(words[1], self.ParentWindow.Debug)
+ returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.ParentWindow.Debug)
+ self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.ParentWindow.Debug)
if returnType and self.ReturnType.IsEnabled():
self.ReturnType.SetStringSelection(returnType)
@@ -3981,13 +4108,13 @@
self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(base_type), id=new_id)
type_menu.AppendMenu(wx.NewId(), "Base Types", base_menu)
datatype_menu = wx.Menu(title='')
- for datatype in self.Controler.GetDataTypes(basetypes = False):
+ for datatype in self.Controler.GetDataTypes(basetypes = False, debug = self.Debug):
new_id = wx.NewId()
AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype)
self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id)
type_menu.AppendMenu(wx.NewId(), "User Data Types", datatype_menu)
functionblock_menu = wx.Menu(title='')
- for functionblock_type in self.Controler.GetFunctionBlockTypes():
+ for functionblock_type in self.Controler.GetFunctionBlockTypes(debug = self.Debug):
new_id = wx.NewId()
AppendMenu(functionblock_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type)
self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id)