controls/VariablePanel.py
changeset 616 8a60ffcfd70b
parent 606 d65122c61eaf
child 623 e747685e4241
--- a/controls/VariablePanel.py	Sun Jan 08 18:23:55 2012 +0100
+++ b/controls/VariablePanel.py	Sun Jan 08 19:16:58 2012 +0100
@@ -220,28 +220,28 @@
         x, y = self.ParentWindow.VariablesGrid.CalcUnscrolledPosition(x, y)
         col = self.ParentWindow.VariablesGrid.XToCol(x)
         row = self.ParentWindow.VariablesGrid.YToRow(y - self.ParentWindow.VariablesGrid.GetColLabelSize())
-        if col != wx.NOT_FOUND and row != wx.NOT_FOUND:
-            if self.ParentWindow.Table.GetColLabelValue(col, False) != "Location":
-                return
-            message = None
-            if not self.ParentWindow.Table.GetValueByName(row, "Edit"):
-                message = _("Can't give a location to a function block instance")
-            elif self.ParentWindow.Table.GetValueByName(row, "Class") not in ["Local", "Global"]:
-                message = _("Can only give a location to local or global variables")
-            else:
-                try:
-                    values = eval(data)    
-                except:
-                    message = _("Invalid value \"%s\" for location")%data
-                    values = None
-                if not isinstance(values, TupleType):
-                    message = _("Invalid value \"%s\" for location")%data
-                    values = None
-                if values is not None and values[1] == "location":
+        message = None
+        element_type = self.ParentWindow.ElementType
+        try:
+            values = eval(data)    
+        except:
+            message = _("Invalid value \"%s\" for variable grid element")%data
+            values = None
+        if not isinstance(values, TupleType):
+            message = _("Invalid value \"%s\" for variable grid element")%data
+            values = None
+        if values is not None:
+            if col != wx.NOT_FOUND and row != wx.NOT_FOUND:
+                if self.ParentWindow.Table.GetColLabelValue(col, False) != "Location":
+                    return
+                if not self.ParentWindow.Table.GetValueByName(row, "Edit"):
+                    message = _("Can't give a location to a function block instance")
+                elif self.ParentWindow.Table.GetValueByName(row, "Class") not in ["Local", "Global"]:
+                    message = _("Can only give a location to local or global variables")
+                elif 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)
-                    message = None
                     if location.startswith("%"):
                         if base_type != values[2]:
                             message = _("Incompatible data types between \"%s\" and \"%s\"")%(values[2], variable_type)
@@ -270,9 +270,33 @@
                                 self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid)
                                 self.ParentWindow.SaveValues()
                             dialog.Destroy()
-            if message is not None:
-                wx.CallAfter(self.ShowMessage, message)
+            elif (element_type not in ["config", "resource"] and values[1] == "Global" and self.ParentWindow.Filter in ["All", "Interface", "External"] or
+                  element_type in ["config", "resource"] and values[1] == "location"):
+                if values[1] == "location":
+                    var_name = values[3]
+                else:
+                    var_name = values[0]
+                tagname = self.ParentWindow.GetTagName()
+                if var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
+                    message = _("\"%s\" pou already exists!")%var_name
+                elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
+                    var_infos = self.ParentWindow.DefaultValue.copy()
+                    var_infos["Name"] = var_name
+                    var_infos["Type"] = values[2]
+                    if values[1] == "location":
+                        var_infos["Class"] = "Global"
+                        var_infos["Location"] = values[0]
+                    else:
+                        var_infos["Class"] = "External"
+                    var_infos["Number"] = len(self.ParentWindow.Values)
+                    self.ParentWindow.Values.append(var_infos)
+                    self.ParentWindow.SaveValues()
+                    self.ParentWindow.RefreshValues()
+        
+        if message is not None:
+            wx.CallAfter(self.ShowMessage, message)
             
+                
     def ShowMessage(self, message):
         message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
         message.ShowModal()
@@ -537,6 +561,9 @@
     def SetTagName(self, tagname):
         self.TagName = tagname
     
+    def GetTagName(self):
+        return self.TagName
+    
     def IsFunctionBlockType(self, name):
         bodytype = self.Controler.GetEditedElementBodyType(self.TagName)
         pouname, poutype = self.Controler.GetEditedElementType(self.TagName)