# HG changeset patch # User lbessard # Date 1231749707 -3600 # Node ID 15669fe26e56305cf51958ee7862c2a47f44d7e1 # Parent 1b1a3ee785daa92b5443db1b634538e003defe5d Adding support for generating real array dimension in variable blocks diff -r 1b1a3ee785da -r 15669fe26e56 PLCControler.py --- a/PLCControler.py Fri Jan 09 17:11:09 2009 +0100 +++ b/PLCControler.py Mon Jan 12 09:41:47 2009 +0100 @@ -966,26 +966,32 @@ tree = [] for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]: tree.append((var_name, var_type, self.GenerateVarTree(var_type, debug))) - return tree + return tree, [] datatype = project.getdataType(typename) if datatype is not None: tree = [] basetype_content = datatype.baseType.getcontent() if basetype_content["name"] == "derived": - tree = self.GenerateVarTree(basetype_content["value"].getname()) + return self.GenerateVarTree(basetype_content["value"].getname()) elif basetype_content["name"] == "array": + dimensions = [] base_type = basetype_content["value"].baseType.getcontent() if base_type["name"] == "derived": - tree = [self.GenerateVarTree(base_type["value"].getname())] + tree = self.GenerateVarTree(base_type["value"].getname()) + if len(tree[1]) == 0: + tree = tree[0] + for dimension in basetype_content["value"].getdimension(): + dimensions.append((dimension.getlower(), dimension.getupper())) + return tree, dimensions elif basetype_content["name"] == "struct": for element in basetype_content["value"].getvariable(): element_type = element.type.getcontent() if element_type["name"] == "derived": tree.append((element.getname(), element_type["value"].getname(), self.GenerateVarTree(element_type["value"].getname()))) else: - tree.append((element.getname(), element_type["name"], [])) - return tree - return {} + tree.append((element.getname(), element_type["name"], ([], []))) + return tree, [] + return [], [] # Return the interface for the given pou def GetPouInterfaceVars(self, pou, debug = False): @@ -995,7 +1001,7 @@ # Extract variables from every varLists for type, varlist in pou.getvars(): for var in varlist.getvariable(): - tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : []} + tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : ([], [])} vartype_content = var.gettype().getcontent() if vartype_content["name"] == "derived": tempvar["Type"] = vartype_content["value"].getname() diff -r 1b1a3ee785da -r 15669fe26e56 TextViewer.py --- a/TextViewer.py Fri Jan 09 17:11:09 2009 +0100 +++ b/TextViewer.py Mon Jan 12 09:41:47 2009 +0100 @@ -294,7 +294,7 @@ tree = {} if len(list) == 1 and isinstance(list, ListType): list = list[0] - for var_name, var_type, var_tree in list: + for var_name, var_type, (var_tree, var_dimension) in list: tree[var_name] = self.GenerateVariableTree(var_tree) return tree diff -r 1b1a3ee785da -r 15669fe26e56 Viewer.py --- a/Viewer.py Fri Jan 09 17:11:09 2009 +0100 +++ b/Viewer.py Mon Jan 12 09:41:47 2009 +0100 @@ -176,15 +176,14 @@ wx.CallAfter(self.ShowMessage, message) def GenerateTreeMenu(self, x, y, scaling, menu, base_path, var_class, tree): - for child_name, child_type, child_tree in tree: + for child_name, child_type, (child_tree, child_dimensions) in tree: if base_path: child_path = "%s.%s" % (base_path, child_name) else: child_path = child_name - if len(child_tree) == 1 and isinstance(child_tree[0], ListType): - child_path += "[0]" + if len(child_dimensions) > 0: + child_path += "[%s]" % ",".join([str(dimension[0]) for dimension in child_dimensions]) child_name += "[]" - child_tree = child_tree[0] new_id = wx.NewId() AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=child_name) self.ParentWindow.Bind(wx.EVT_MENU, self.GetAddVariableBlockFunction(x, y, scaling, var_class, child_path, child_type), id=new_id)