using System; using System.Xml; using System.Text; namespace VlnXml { /// /// Summary description for Class1. /// public class VlnXmlDocument:XmlDocument { public VlnXmlDocument():base() { } public override XmlElement CreateElement( string prefix, string localname, string nsURI) { VlnXmlElement elem = new VlnXmlElement(prefix, localname, nsURI, this); return elem; } } public class VlnXmlElement:XmlElement { public VlnXmlElement( string prefix, string localname, string nsURI, XmlDocument doc ):base( prefix,localname,nsURI, doc ) { } public string GetMenuString(string grpmenuitm, bool isgrp) { VlnXmlElement elm = this; StringBuilder strbld = new StringBuilder(); bool usespecial; // flags need for (Table) or (Graph) string strspecial=""; // use grpmenuitm, parse for field(s) and generate a string to return int left = grpmenuitm.IndexOf("<"); int right; int stindx = 0; if (left > 0) strbld.Append(grpmenuitm.Substring(0,left)); while (left != -1) { // get right bracket and then check for valid field & if commas with // this, check for integer values. right = grpmenuitm.IndexOf(">",stindx); string substring = grpmenuitm.Substring(left+1,right-left-1); // do comma parts now. string inusename; substring = substring.Replace(" ","_"); int comma1 = substring.IndexOf(","); int frmt1=0, frmt2=0; if (comma1 != -1) { // get any numbers for formatting & check for ints. int comma2 = substring.IndexOf(",",comma1+1); if (comma2 != -1) // two ints. { if (comma2-comma1 > 1) // first format field - not empty { string int1 = substring.Substring(comma1+1,comma2-comma1-1); frmt1 = System.Convert.ToInt32(int1); } if (comma20) strbld.Append(text.PadRight(frmt2,' ')); else strbld.Append(text); } else if (frmt1 != frmt2) { char[] tmp = text.ToCharArray(); int cnt = 0; while (tmp[cnt] <= '9' && tmp[cnt] >= '0') cnt++; int padcnt = (cnt>frmt1)?0:frmt1-cnt; StringBuilder strtmp = new StringBuilder(); cnt = 0; while(cnt right+1) // append any plain text. strbld.Append(grpmenuitm.Substring(right+1,left-right-1)); } return strbld.ToString(); } public string GetMenuValueTemplate(string menuitm) { VlnXmlElement parent; string grpmenuitm; VlnXmlElement tmp; if (menuitm == "GroupMenuItem") { // if at top of tree, use this top GroupMenuItem. but if not, // the parent node defines the GroupMenuItem for the subgroups. if (this.ParentNode.Name == "RO_Root") { tmp = (VlnXmlElement) this.ParentNode; grpmenuitm=tmp.GetAttribute(menuitm); return(grpmenuitm); } else parent = (VlnXmlElement) this.ParentNode; while (parent != null) { if (parent.HasAttribute(menuitm) == true) break; parent = (VlnXmlElement) parent.ParentNode; } if (parent == null) return null; grpmenuitm = parent.GetAttribute(menuitm); return grpmenuitm; } // Now just do 'MenuItem', which is for ROs parent = (VlnXmlElement) this; grpmenuitm = parent.GetAttribute(menuitm); while (parent != null && grpmenuitm == "") { // walk up tree to get parent. grpmenuitm = parent.GetAttribute(menuitm); parent = (VlnXmlElement) parent.ParentNode; } return grpmenuitm; } } }