private void CreateTOCTreeViewAux(MetaClass metaClass, string treePath, StringBuilder sb) { Debug.Assert(metaClass != null, "ArgumentNullException(metaClass)"); Debug.Assert(sb != null, "ArgumentNullException(sb)"); Debug.Assert(metaClass is ISummarisableMember, "Meta class must implement ISummarisableMember interface."); bool hasChildren = HasChildren(metaClass); string label = Utils.HTMLEncode(metaClass.Name.Replace('/', '.')) + " " + metaClass.GetMetaName(); string href = ResolveLink(metaClass); string link = String.Format("<a href=\"{0}\" class=\"TV_NodeLink\" target=\"ContentsFrame\" onclick=\"TV_NodeLink_Clicked(this, '{2}');\">{1}</a>", string.IsNullOrEmpty(href) ? "javascript: void(0);" : href, label, treePath); string id = ""; string imgSrc = "../../" + GRAPHICS_DIRECTORY + "/TV_Null.gif"; string onclick = ""; string alt = ""; if (hasChildren) { id = " id=\"TV_NodeExpansionIcon_" + treePath + "\""; onclick = " onclick=\"TV_Node_Clicked('" + treePath + "');\""; imgSrc = "../../" + GRAPHICS_DIRECTORY + "/TV_Plus.gif"; alt = "Expand/Collapse"; } sb.Append("<div class=\"TV_NodeContainer\">\n"); sb.Append(String.Format("<img{0} class=\"TV_NodeExpansionIcon\" src=\"{1}\"{2} alt=\"{3}\" />\n", id, imgSrc, onclick, alt)); sb.Append(String.Format("<span class=\"TV_NodeLabel\">{0}</span>\n", link)); sb.Append("</div>\n"); if (hasChildren) { sb.Append(String.Format("<div class=\"TV_SubtreeContainer\" id=\"TV_Subtree_{0}\">\n", treePath)); if (metaClass is MyAssemblyInfo) { MyAssemblyInfo myAssemblyInfo = (MyAssemblyInfo)metaClass; int number = 1; foreach (MyNamespaceInfo myNamespaceInfo in myAssemblyInfo.Namespaces.OrderBy(s => s.DisplayableName)) { CreateTOCTreeViewAux(myNamespaceInfo, treePath + "_" + number, sb); number++; } } else if (metaClass is MyNamespaceInfo) { MyNamespaceInfo myNamespaceInfo = (MyNamespaceInfo)metaClass; int number1 = 1; IEnumerable<MetaClass> members = myNamespaceInfo.GetEnumerator(); foreach (MetaClass member in members) { string newTreePath = treePath + "_" + number1; CreateTOCTreeViewAux(member, newTreePath + "_" + number1, sb); number1++; } } else if (metaClass is MyClassInfo) { if (!(metaClass is MyDelegateInfo) && !(metaClass is MyEnumerationInfo)) { MyClassInfo myClassInfo = (MyClassInfo)metaClass; id = " id=\"TV_NodeExpansionIcon_" + treePath + "_1" + "\""; onclick = " onclick=\"TV_Node_Clicked('" + treePath + "_1" + "');\""; string namespaceDirName = GetNamespaceDirName(myClassInfo.Namespace); href = GetAliasName(myClassInfo.AssemblyName + "_" + myClassInfo.AssemblyName.GetHashCode() + Path.DirectorySeparatorChar + namespaceDirName + Path.DirectorySeparatorChar + "MS_" + myClassInfo.Name + "_" + myClassInfo.Name.GetHashCode() + ".html", true, true); sb.Append("<div class=\"TV_NodeContainer\">\n"); sb.Append("<img class=\"TV_NodeExpansionIcon\" src=\"../../" + GRAPHICS_DIRECTORY + "/TV_Null.gif\" alt=\"\" />\n"); sb.Append(String.Format("<span class=\"TV_NodeLabel\"><a href=\"{0}\" class=\"TV_NodeLink\" target=\"ContentsFrame\" onclick=\"TV_NodeLink_Clicked(this, null);\">Members</a></span>\n", href)); sb.Append("</div>\n"); } } else { Debug.Assert(false, "Impossible! Couldn't recognize type of a metaclass (" + metaClass.GetType() + ")."); } sb.Append("</div>\n"); } }
private void CreateCHMTOCAux(MetaClass metaClass, StreamWriter sw) { Debug.Assert(metaClass != null, "ArgumentNullException(metaClass)"); Debug.Assert(sw != null, "ArgumentNullException(sb)"); Debug.Assert(metaClass is ISummarisableMember, "Meta class must implement ISummarisableMember interface."); bool hasChildren = HasChildren(metaClass); string label = Utils.HTMLEncode(metaClass.Name.Replace('/', '.')) + " " + metaClass.GetMetaName(); string href = ResolveLink(metaClass); Debug.Assert(href.StartsWith("../../"), "Impossible (1)! href should start with '../../'!"); href = href.Substring("../../".Length); sw.WriteLine("<LI> <OBJECT type=\"text/sitemap\">"); sw.WriteLine("<param name=\"ImageNumber\" value=\"1\">"); sw.WriteLine("<param name=\"Name\" value=\"{0}\">", label); sw.WriteLine("<param name=\"Local\" value=\"{0}\">", href); sw.WriteLine("</OBJECT>"); if (hasChildren) { sw.Write("<UL>"); if (metaClass is MyAssemblyInfo) { MyAssemblyInfo myAssemblyInfo = (MyAssemblyInfo)metaClass; int number = 1; foreach (MyNamespaceInfo myNamespaceInfo in myAssemblyInfo.Namespaces) { CreateCHMTOCAux(myNamespaceInfo, sw); number++; } } else if (metaClass is MyNamespaceInfo) { MyNamespaceInfo myNamespaceInfo = (MyNamespaceInfo)metaClass; IEnumerable<MetaClass> members = myNamespaceInfo.GetEnumerator(); foreach (MetaClass member in members) { CreateCHMTOCAux(member, sw); } } else if (metaClass is MyClassInfo) { if (!(metaClass is MyDelegateInfo) && !(metaClass is MyEnumerationInfo)) { MyClassInfo myClassInfo = (MyClassInfo)metaClass; string namespaceDirName = GetNamespaceDirName(myClassInfo.Namespace); href = GetAliasName(myClassInfo.AssemblyName + "_" + myClassInfo.AssemblyName.GetHashCode() + Path.DirectorySeparatorChar + namespaceDirName + Path.DirectorySeparatorChar + "MS_" + myClassInfo.Name + "_" + myClassInfo.Name.GetHashCode() + ".html", true, true); Debug.Assert(href.StartsWith("../../"), "Impossible (2)! href should start with '../../'!"); href = href.Substring("../../".Length); sw.WriteLine("<LI> <OBJECT type=\"text/sitemap\">"); sw.WriteLine("<param name=\"Name\" value=\"Members\">"); sw.WriteLine("<param name=\"Local\" value=\"{0}\">", href); sw.WriteLine("</OBJECT>"); } } else { Debug.Assert(false, "Impossible! Couldn't recognize type of a metaclass (" + metaClass.GetType() + ")."); } sw.Write("</UL>\n"); } }