TextViewer.py
changeset 437 59e33406eea8
parent 411 9ab97d517ae8
child 448 93a2f2034f98
--- a/TextViewer.py	Thu Sep 24 18:18:04 2009 +0200
+++ b/TextViewer.py	Thu Sep 24 18:20:07 2009 +0200
@@ -216,20 +216,41 @@
         except:
             values = event.GetDragText()
         if isinstance(values, tuple):
-            if values[1] in ["functionBlock", "program", "location", "debug"]:
+            message = None
+            if values[1] in ["functionBlock", "program", "debug"]:
                 event.SetDragText("")
             elif values[1] == "function":
                 event.SetDragText(values[0])
-            elif values[1] != "location":
-                if values[3] == self.TagName:
-                    self.ResetBuffer()
-                    event.SetDragText(values[0])
-                    wx.CallAfter(self.RefreshModel)
+            elif values[1] == "location":
+                pou_name, pou_type = self.Controler.GetEditedElementType(self.TagName, self.Debug)
+                if len(values) > 2 and pou_type == "program":
+                    var_name = values[3]
+                    if var_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]:
+                        message = _("\"%s\" pou already exists!")%blockname
+                    elif var_name.upper() in [name.upper() for name in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)]:
+                        message = _("\"%s\" element for this pou already exists!")%blockname
+                    else:
+                        if values[2] is not None:
+                            var_type = values[2]
+                        else:
+                            var_type = LOCATIONDATATYPES.get(values[0][2], ["BOOL"])[0]
+                        self.Controler.AddEditedElementPouVar(self.TagName, var_type, var_name, values[0], values[4])
+                        self.ParentWindow.RefreshVariablePanel(self.TagName)
+                        self.RefreshVariableTree()
+                        event.SetDragText(var_name)
                 else:
                     event.SetDragText("")
-                    message = wx.MessageDialog(self.ParentWindow, _("Variable don't belong to this POU!"), _("Error"), wx.OK|wx.ICON_ERROR)
-                    message.ShowModal()
-                    message.Destroy()
+            elif values[3] == self.TagName:
+                self.ResetBuffer()
+                event.SetDragText(values[0])
+                wx.CallAfter(self.RefreshModel)
+            else:
+                message = _("Variable don't belong to this POU!")
+            if message is not None:
+                dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
+                dialog.ShowModal()
+                dialog.Destroy()
+                event.SetDragText("")
         event.Skip()
     
     def SetTextSyntax(self, syntax):
@@ -278,11 +299,7 @@
         self.EmptyUndoBuffer()
         self.DisableEvents = False
         
-        words = self.TagName.split("::")
-        
-        self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)])
-        if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL":
-            self.Variables[words[-1].upper()] = {}
+        self.RefreshVariableTree()
         
         self.Functions = []
         for category in self.Controler.GetBlockTypes(self.TagName, self.Debug):
@@ -296,6 +313,12 @@
         
         self.Colourise(0, -1)
     
+    def RefreshVariableTree(self):
+        words = self.TagName.split("::")
+        self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)])
+        if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL":
+            self.Variables[words[-1].upper()] = {}
+    
     def GenerateVariableTree(self, list):
         tree = {}
         for var_name, var_type, (var_tree, var_dimension) in list: