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;
}
}
}