diff -r 92efd8fe3120 -r 533741e5075c controls/VariablePanel.py --- a/controls/VariablePanel.py Fri Oct 04 12:17:03 2013 +0200 +++ b/controls/VariablePanel.py Wed Oct 09 10:57:20 2013 +0200 @@ -37,6 +37,7 @@ from CustomTable import CustomTable from LocationCellEditor import LocationCellEditor from util.BitmapLibrary import GetBitmap +from PLCControler import _VariableInfos #------------------------------------------------------------------------------- # Helpers @@ -105,12 +106,22 @@ CustomTable.__init__(self, parent, data, colnames) self.old_value = None + def GetValueByName(self, row, colname): + if row < self.GetNumberRows(): + return getattr(self.data[row], colname) + + def SetValueByName(self, row, colname, value): + if row < self.GetNumberRows(): + setattr(self.data[row], colname, value) + def GetValue(self, row, col): if row < self.GetNumberRows(): if col == 0: - return self.data[row]["Number"] + return self.data[row].Number colname = self.GetColLabelValue(col, False) - value = self.data[row].get(colname, "") + if colname == "Initial Value": + colname = "InitialValue" + value = getattr(self.data[row], colname, "") if colname == "Type" and isinstance(value, TupleType): if value[0] == "array": return "ARRAY [%s] OF %s" % (",".join(map(lambda x : "..".join(x), value[2])), value[1]) @@ -124,15 +135,17 @@ if col < len(self.colnames): colname = self.GetColLabelValue(col, False) if colname == "Name": - self.old_value = self.data[row][colname] + self.old_value = getattr(self.data[row], colname) elif colname == "Class": value = VARIABLE_CLASSES_DICT[value] self.SetValueByName(row, "Option", CheckOptionForClass[value](self.GetValueByName(row, "Option"))) if value == "External": - self.SetValueByName(row, "Initial Value", "") + self.SetValueByName(row, "InitialValue", "") elif colname == "Option": value = OPTIONS_DICT[value] - self.data[row][colname] = value + elif colname == "Initial Value": + colname = "InitialValue" + setattr(self.data[row], colname, value) def GetOldValue(self): return self.old_value @@ -314,8 +327,8 @@ 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] + var_infos.Name = var_name + var_infos.Type = values[2] if values[1] == "location": location = values[0] if not location.startswith("%"): @@ -346,16 +359,16 @@ GetConfigurationVariableNames(configs[0])]: self.ParentWindow.Controler.AddConfigurationGlobalVar( configs[0], values[2], var_name, location, "") - var_infos["Class"] = "External" + var_infos.Class = "External" else: if element_type == "program": - var_infos["Class"] = "Local" + var_infos.Class = "Local" else: - var_infos["Class"] = "Global" - var_infos["Location"] = location + var_infos.Class = "Global" + var_infos.Location = location else: - var_infos["Class"] = "External" - var_infos["Number"] = len(self.ParentWindow.Values) + var_infos.Class = "External" + var_infos.Number = len(self.ParentWindow.Values) self.ParentWindow.Values.append(var_infos) self.ParentWindow.SaveValues() self.ParentWindow.RefreshValues() @@ -447,16 +460,7 @@ self.FilterChoices = [] self.FilterChoiceTransfer = GetFilterChoiceTransfer() - self.DefaultValue = { - "Name" : "", - "Class" : "", - "Type" : "INT", - "Location" : "", - "Initial Value" : "", - "Option" : "", - "Documentation" : "", - "Edit" : True - } + self.DefaultValue = _VariableInfos("", "", "", "", "", True, "", "INT", ([], []), 0) if element_type in ["config", "resource"]: self.DefaultTypes = {"All" : "Global"} @@ -527,32 +531,32 @@ if new_row > 0: row_content = self.Values[new_row - 1].copy() - result = VARIABLE_NAME_SUFFIX_MODEL.search(row_content["Name"]) + result = VARIABLE_NAME_SUFFIX_MODEL.search(row_content.Name) if result is not None: - name = row_content["Name"][:result.start(1)] + name = row_content.Name[:result.start(1)] suffix = result.group(1) if suffix != "": start_idx = int(suffix) else: start_idx = 0 else: - name = row_content["Name"] + name = row_content.Name start_idx = 0 else: row_content = None start_idx = 0 name = "LocalVar" - if row_content is not None and row_content["Edit"]: + if row_content is not None and row_content.Edit: row_content = self.Values[new_row - 1].copy() else: row_content = self.DefaultValue.copy() if self.Filter in self.DefaultTypes: - row_content["Class"] = self.DefaultTypes[self.Filter] + row_content.Class = self.DefaultTypes[self.Filter] else: - row_content["Class"] = self.Filter + row_content.Class = self.Filter - row_content["Name"] = self.Controler.GenerateNewName( + row_content.Name = self.Controler.GenerateNewName( self.TagName, None, name + "%d", start_idx) if self.Filter == "All" and len(self.Values) > 0: @@ -637,9 +641,9 @@ self.ReturnType.Clear() for data_type in self.Controler.GetDataTypes(self.TagName, debug=self.Debug): self.ReturnType.Append(data_type) - returnType, (var_tree, dimensions) = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug) + returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, debug=self.Debug) description = self.Controler.GetPouDescription(words[1]) - self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug) + self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug) if returnType is not None: self.ReturnType.SetStringSelection(returnType) @@ -712,7 +716,7 @@ message = _("\"%s\" is a keyword. It can't be used!") % value elif value.upper() in self.PouNames: message = _("A POU named \"%s\" already exists!") % value - elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]: + elif value.upper() in [var.Name.upper() for var in self.Values if var != self.Table.data[row]]: message = _("A variable with \"%s\" as name already exists in this pou!") % value else: self.SaveValues(False) @@ -846,8 +850,8 @@ def RefreshValues(self): data = [] for num, variable in enumerate(self.Values): - if variable["Class"] in self.ClassList: - variable["Number"] = num + 1 + if variable.Class in self.ClassList: + variable.Number = num + 1 data.append(variable) self.Table.SetData(data) self.Table.ResetView(self.VariablesGrid)