/// <summary> /// Add an array data element. /// </summary> /// <param name="parentNode">parent node that contains this new node</param> /// <param name="at">position before which the new node is inserted</param> public void addArrayTypeNode(DataNode parentNode, int at, bool defineType) { FormArray formArray = new FormArray(); if (!defineType) { formArray.Text = "Build an array element"; formArray.ChangeLabel("Var Name:"); formArray.TypeName = "myArray-" + Convert.ToString(parentNode.Nodes.Count); //TODO: check for duplicate names } else { formArray.TypeName = "MyArray-" + Convert.ToString(++typeArrayCounter_); } formArray.DataTypeSource = document_.getTypeNames(); DialogResult r = formArray.ShowDialog(view_); if (r == DialogResult.OK) { string varName = formArray.TypeName; string arrayType = formArray.ArrayTypeName; ArrayNode an = new ArrayNode(arrayType, (defineType)?"":varName); //if variable, add sizeRef if (formArray.ArrayType == 2) { AbstractNode data = new PrimitiveNode(formArray.SizeRef); an.setSizeRef( data ); } AbstractNode aNode = an; if (defineType) { aNode = new DefineTypeNode(formArray.TypeName, an); } DataNode dn = new DataNode(aNode); addChildNode(dn, formArray.DataType, ""); //element data type as first child node of array if (formArray.ArrayType == 3) //arrayStreamed containing only one dim { //an.addDimension("", 0); addChildNode(dn, new DataNode(new DimNode("", 0)), 1); //dim as second child node of array } else //fixed or variable { DataNode tmpNode = dn; foreach (ListViewItem itm in formArray.getDimensions()) { string scount = itm.Text; string sdimname = itm.SubItems[1].Text; if (!scount.Equals("")) { //DataNode dNode = new DataNode(an.addDimension(sdimname, scount)); DataNode dNode = new DataNode(new DimNode(sdimname, scount)); addChildNode(tmpNode, dNode, 1); tmpNode = dNode; } } } addChildNode(parentNode, dn, at); document_.setModified(); parentNode.ExpandAll(); } }
/// <summary> /// Parse and load an array element type /// </summary> /// <param name="reader"></param> /// <returns></returns> protected static ArrayNode LoadArray(XmlTextReader reader) { string aname = reader.LocalName; string vname = reader.GetAttribute("varName"); string blocksize = reader.GetAttribute("blockSize"); ArrayNode a = new ArrayNode(aname); if (vname != null) { a.setVarName( vname ); } if (blocksize != null) { a.setBlockSize( Convert.ToInt32(blocksize) ); } bool inSizeRefSection = false; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.LocalName.Equals("sizeRef")) { inSizeRefSection = true; } else if (reader.LocalName.Equals("dim")) { string dname = reader.GetAttribute("name"); int nCount = 0; string indexTo = reader.GetAttribute("indexTo"); if (indexTo == null) { string count = reader.GetAttribute("count"); if (count != null) { nCount = Convert.ToInt32(count); } } else { nCount = Convert.ToInt32(indexTo) + 1; } a.addDimension(dname, nCount); } else if (inSizeRefSection) { a.setSizeRef( ParseNode(reader) ); } else { a.setElement( ParseNode(reader) ); } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.LocalName.Equals("sizeRef")) { inSizeRefSection = false; } else if (reader.LocalName.StartsWith("array")) { break; } } } return a; }
/// <summary> /// Parse and load an array element type /// </summary> /// <param name="reader"></param> /// <returns></returns> protected static ArrayNode LoadArray(XmlTextReader reader) { string aname = reader.LocalName; string vname = reader.GetAttribute("varName"); string blocksize = reader.GetAttribute("blockSize"); ArrayNode a = new ArrayNode(aname); if (vname != null) { a.setVarName(vname); } if (blocksize != null) { a.setBlockSize(Convert.ToInt32(blocksize)); } bool inSizeRefSection = false; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.LocalName.Equals("sizeRef")) { inSizeRefSection = true; } else if (reader.LocalName.Equals("dim")) { string dname = reader.GetAttribute("name"); int nCount = 0; string indexTo = reader.GetAttribute("indexTo"); if (indexTo == null) { string count = reader.GetAttribute("count"); if (count != null) { nCount = Convert.ToInt32(count); } } else { nCount = Convert.ToInt32(indexTo) + 1; } a.addDimension(dname, nCount); } else if (inSizeRefSection) { a.setSizeRef(ParseNode(reader)); } else { a.setElement(ParseNode(reader)); } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.LocalName.Equals("sizeRef")) { inSizeRefSection = false; } else if (reader.LocalName.StartsWith("array")) { break; } } } return(a); }
/// <summary> /// Add an array data element. /// </summary> /// <param name="parentNode">parent node that contains this new node</param> /// <param name="at">position before which the new node is inserted</param> public void addArrayTypeNode(DataNode parentNode, int at, bool defineType) { FormArray formArray = new FormArray(); if (!defineType) { formArray.Text = "Build an array element"; formArray.ChangeLabel("Var Name:"); formArray.TypeName = "myArray-" + Convert.ToString(parentNode.Nodes.Count); //TODO: check for duplicate names } else { formArray.TypeName = "MyArray-" + Convert.ToString(++typeArrayCounter_); } formArray.DataTypeSource = document_.getTypeNames(); DialogResult r = formArray.ShowDialog(view_); if (r == DialogResult.OK) { string varName = formArray.TypeName; string arrayType = formArray.ArrayTypeName; ArrayNode an = new ArrayNode(arrayType, (defineType)?"":varName); //if variable, add sizeRef if (formArray.ArrayType == 2) { AbstractNode data = new PrimitiveNode(formArray.SizeRef); an.setSizeRef(data); } AbstractNode aNode = an; if (defineType) { aNode = new DefineTypeNode(formArray.TypeName, an); } DataNode dn = new DataNode(aNode); addChildNode(dn, formArray.DataType, ""); //element data type as first child node of array if (formArray.ArrayType == 3) //arrayStreamed containing only one dim { //an.addDimension("", 0); addChildNode(dn, new DataNode(new DimNode("", 0)), 1); //dim as second child node of array } else //fixed or variable { DataNode tmpNode = dn; foreach (ListViewItem itm in formArray.getDimensions()) { string scount = itm.Text; string sdimname = itm.SubItems[1].Text; if (!scount.Equals("")) { //DataNode dNode = new DataNode(an.addDimension(sdimname, scount)); DataNode dNode = new DataNode(new DimNode(sdimname, scount)); addChildNode(tmpNode, dNode, 1); tmpNode = dNode; } } } addChildNode(parentNode, dn, at); document_.setModified(); parentNode.ExpandAll(); } }