PLCOpenEditor.py
changeset 249 d8425712acef
parent 245 fdd05081c966
child 253 d9391572655f
--- 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)