diff -r 8baeb9dff775 -r 8a60ffcfd70b controls/VariablePanel.py --- 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)