PLCOpenEditor.py
changeset 301 b5e564608b9e
parent 298 1b1a3ee785da
child 304 2df3d31d8059
--- a/PLCOpenEditor.py	Tue Jan 13 17:26:37 2009 +0100
+++ b/PLCOpenEditor.py	Wed Jan 14 19:45:22 2009 +0100
@@ -35,6 +35,7 @@
 from LDViewer import *
 from Viewer import *
 from TextViewer import *
+from GraphicViewer import *
 from RessourceEditor import *
 from DataTypeEditor import *
 from PLCControler import *
@@ -411,6 +412,10 @@
                   pos=wx.Point(0, 0), size=wx.Size(0, 0),
                   style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
         if self.Debug:
+            if wx.VERSION >= (2, 6, 0):
+                self.InstancesTree.Bind(wx.EVT_RIGHT_UP, self.OnInstancesTreeRightUp)
+            else:
+                wx.EVT_RIGHT_UP(self.InstancesTree, self.OnInstancesTreeRightUp)
             self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnInstancesTreeBeginDrag,
                   id=ID_PLCOPENEDITORINSTANCESTREE)
             self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnInstancesTreeItemActivated,
@@ -1820,7 +1825,59 @@
                 new_window.RefreshView()
                 new_window.SetFocus()
                 self.RefreshPageTitles()
-        event.Skip()
+        if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE:
+            var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (")
+            var_type = var_type.split(")")[0]
+            
+            if self.Controler.IsOfType(var_type, "ANY_NUM", self.Debug) or\
+               self.Controler.IsOfType(var_type, "ANY_BIT", self.Debug):
+                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)
+                
+                new_window = GraphicViewer(self.TabsOpened, self, self.Controler, var_path)
+                self.TabsOpened.AddPage(new_window, "")
+                new_window.SetFocus()
+                self.RefreshPageTitles()
+        event.Skip()
+
+    def OnInstancesTreeRightUp(self, event):
+        if wx.Platform == '__WXMSW__':
+            selected_item = event.GetItem()
+        else:
+            selected_item = self.InstancesTree.GetSelection()
+        selected_infos = self.InstancesTree.GetPyData(selected_item)
+        if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE:
+            var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (")
+            var_type = var_type.split(")")[0]
+            
+            if self.Controler.IsOfType(var_type, "ANY_NUM", self.Debug) or\
+               self.Controler.IsOfType(var_type, "ANY_BIT", self.Debug):
+                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)
+                
+                menu = wx.Menu(title='')
+                new_id = wx.NewId()
+                AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Graphic Panel")
+                self.Bind(wx.EVT_MENU, self.AddVariableGraphicFunction(var_path), id=new_id)
+                new_id = wx.NewId()
+                AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="CSV Log")
+                self.PopupMenu(menu)
+        event.Skip()
+
+    def AddVariableGraphicFunction(self, iec_path):
+        def AddVariableGraphic(event):
+            new_window = GraphicViewer(self.TabsOpened, self, self.Controler, iec_path)
+            self.TabsOpened.AddPage(new_window, "")
+            new_window.SetFocus()
+            self.RefreshPageTitles()
+            event.Skip()
+        return AddVariableGraphic
 
     def SelectInstancesTreeItem(self, root, instancepath):
         found = False