예제 #1
0
    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");
      }
    }
예제 #2
0
    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");
      }
    }