--- 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)