Commit a7c14ac7 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Added namespace info to the context

parent 2e837e0b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -187,8 +187,8 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS     =
MATHJAX_CODEFILE       =
SEARCHENGINE           = YES
SERVER_BASED_SEARCH    = YES
EXTERNAL_SEARCH        = YES
SERVER_BASED_SEARCH    = NO
EXTERNAL_SEARCH        = NO
SEARCHENGINE_URL       = http://macbookpro/~dimitri/doxysearch.cgi
SEARCHDATA_FILE        = searchdata.xml
EXTERNAL_SEARCH_ID     =
+213 −5
Original line number Diff line number Diff line
@@ -2062,6 +2062,19 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
      addProperty("subhighlight",      this,&Private::subHighlight);
      addProperty("compoundType",      this,&Private::compoundType);
      addProperty("hasDetails",        this,&Private::hasDetails);
      addProperty("classes",           this,&Private::classes);
      addProperty("namespaces",        this,&Private::namespaces);
      addProperty("constantgroups",    this,&Private::constantgroups);
      addProperty("typedefs",          this,&Private::typedefs);
      addProperty("enums",             this,&Private::enums);
      addProperty("functions",         this,&Private::functions);
      addProperty("variables",         this,&Private::variables);
      addProperty("memberGroups",      this,&Private::memberGroups);
      addProperty("detailedTypedefs",  this,&Private::detailedTypedefs);
      addProperty("detailedEnums",     this,&Private::detailedEnums);
      addProperty("detailedFunctions", this,&Private::detailedFunctions);
      addProperty("detailedVariables", this,&Private::detailedVariables);
      addProperty("inlineClasses",     this,&Private::inlineClasses);
    }
    TemplateVariant title() const
    {
@@ -2083,8 +2096,182 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
    {
      return m_namespaceDef->hasDetailedDescription();
    }
    TemplateVariant classes() const
    {
      if (!m_cache.classes)
      {
        NestedClassListContext *classList = NestedClassListContext::alloc();
        if (m_namespaceDef->getClassSDict())
        {
          ClassSDict::Iterator sdi(*m_namespaceDef->getClassSDict());
          ClassDef *cd;
          for (sdi.toFirst();(cd=sdi.current());++sdi)
          {
            if (cd->visibleInParentsDeclList())
            {
              classList->append(cd);
            }
          }
        }
        m_cache.classes.reset(classList);
      }
      return m_cache.classes.get();
    }
    TemplateVariant namespaces() const
    {
      if (!m_cache.namespaces)
      {
        NestedNamespaceListContext *namespaceList = NestedNamespaceListContext::alloc();
        if (m_namespaceDef->getNamespaceSDict())
        {
          NamespaceSDict::Iterator sdi(*m_namespaceDef->getNamespaceSDict());
          NamespaceDef *nd;
          for (sdi.toFirst();(nd=sdi.current());++sdi)
          {
            if (nd->isLinkable() && !nd->isConstantGroup())
            {
              namespaceList->append(nd);
            }
          }
        }
        m_cache.namespaces.reset(namespaceList);
      }
      return m_cache.namespaces.get();
    }
    TemplateVariant constantgroups() const
    {
      if (!m_cache.constantgroups)
      {
        NestedNamespaceListContext *namespaceList = NestedNamespaceListContext::alloc();
        if (m_namespaceDef->getNamespaceSDict())
        {
          NamespaceSDict::Iterator sdi(*m_namespaceDef->getNamespaceSDict());
          NamespaceDef *nd;
          for (sdi.toFirst();(nd=sdi.current());++sdi)
          {
            if (nd->isLinkable() && nd->isConstantGroup())
            {
              namespaceList->append(nd);
            }
          }
        }
        m_cache.constantgroups.reset(namespaceList);
      }
      return m_cache.constantgroups.get();
    }
    TemplateVariant getMemberList(SharedPtr<MemberListInfoContext> &list,
                                  MemberListType type,const char *title,bool detailed=FALSE) const
    {
      if (!list)
      {
        MemberList *ml = m_namespaceDef->getMemberList(type);
        if (ml)
        {
          list.reset(MemberListInfoContext::alloc(m_namespaceDef,relPathAsString(),ml,title,detailed));
        }
      }
      if (list)
      {
        return list.get();
      }
      else
      {
        return TemplateVariant(FALSE);
      }
    }
    TemplateVariant typedefs() const
    {
      return getMemberList(m_cache.typedefs,MemberListType_decTypedefMembers,theTranslator->trTypedefs());
    }
    TemplateVariant enums() const
    {
      return getMemberList(m_cache.enums,MemberListType_decEnumMembers,theTranslator->trEnumerations());
    }
    TemplateVariant functions() const
    {
      // TODO: Fortran: trSubprograms()
      // TODO: VHDL:    VhdlDocGen::trFunctionAndProc()
      return getMemberList(m_cache.functions,MemberListType_decFuncMembers,theTranslator->trFunctions());
    }
    TemplateVariant variables() const
    {
      return getMemberList(m_cache.variables,MemberListType_decVarMembers,theTranslator->trVariables());
    }
    TemplateVariant memberGroups() const
    {
      if (!m_cache.memberGroups)
      {
        if (m_namespaceDef->getMemberGroupSDict())
        {
          m_cache.memberGroups.reset(MemberGroupListContext::alloc(m_namespaceDef,relPathAsString(),m_namespaceDef->getMemberGroupSDict(),m_namespaceDef->subGrouping()));
        }
        else
        {
          m_cache.memberGroups.reset(MemberGroupListContext::alloc());
        }
      }
      return m_cache.memberGroups.get();
    }
    TemplateVariant detailedTypedefs() const
    {
      return getMemberList(m_cache.detailedTypedefs,MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation());
    }
    TemplateVariant detailedEnums() const
    {
      return getMemberList(m_cache.detailedEnums,MemberListType_docEnumMembers,theTranslator->trEnumerationTypeDocumentation());
    }
    TemplateVariant detailedFunctions() const
    {
      // TODO: Fortran: trSubprogramDocumentation()
      return getMemberList(m_cache.detailedFunctions,MemberListType_docFuncMembers,theTranslator->trFunctionDocumentation());
    }
    TemplateVariant detailedVariables() const
    {
      return getMemberList(m_cache.detailedVariables,MemberListType_docVarMembers,theTranslator->trVariableDocumentation());
    }
    TemplateVariant inlineClasses() const
    {
      if (!m_cache.inlineClasses)
      {
        NestedClassListContext *classList = NestedClassListContext::alloc();
        if (m_namespaceDef->getClassSDict())
        {
          ClassSDict::Iterator sdi(*m_namespaceDef->getClassSDict());
          ClassDef *cd;
          for (sdi.toFirst();(cd=sdi.current());++sdi)
          {
            if (cd->name().find('@')==-1 &&
                cd->isLinkableInProject() &&
                cd->isEmbeddedInOuterScope() &&
                cd->partOfGroups()==0)
            {
              classList->append(cd);
            }
          }
        }
        m_cache.inlineClasses.reset(classList);
      }
      return m_cache.inlineClasses.get();
    }
  private:
    NamespaceDef *m_namespaceDef;
    struct Cachable
    {
      SharedPtr<NestedClassListContext>     classes;
      SharedPtr<NestedNamespaceListContext> namespaces;
      SharedPtr<NestedNamespaceListContext> constantgroups;
      SharedPtr<MemberListInfoContext>      typedefs;
      SharedPtr<MemberListInfoContext>      enums;
      SharedPtr<MemberListInfoContext>      functions;
      SharedPtr<MemberListInfoContext>      variables;
      SharedPtr<MemberGroupListContext>     memberGroups;
      SharedPtr<MemberListInfoContext>      detailedTypedefs;
      SharedPtr<MemberListInfoContext>      detailedEnums;
      SharedPtr<MemberListInfoContext>      detailedFunctions;
      SharedPtr<MemberListInfoContext>      detailedVariables;
      SharedPtr<NestedClassListContext>     inlineClasses;
    };
    mutable Cachable m_cache;
};
//%% }

@@ -4258,6 +4445,8 @@ class NestingNodeContext::Private : public PropertyMapper
      addProperty("dir",this,&Private::getDir);
      //%% [optional] Page page: page info (if this node represents a page)
      addProperty("page",this,&Private::getPage);
      //%% [optional] Module module: module info (if this node represents a module)
      addProperty("module",this,&Private::getModule);
      //%% int id
      addProperty("id",this,&Private::id);
      //%% string level
@@ -4359,6 +4548,21 @@ class NestingNodeContext::Private : public PropertyMapper
        return TemplateVariant(FALSE);
      }
    }
    TemplateVariant getModule() const
    {
      if (!m_cache.moduleContext && m_def->definitionType()==Definition::TypeGroup)
      {
        m_cache.moduleContext.reset(ModuleContext::alloc((GroupDef*)m_def));
      }
      if (m_cache.moduleContext)
      {
        return m_cache.moduleContext.get();
      }
      else
      {
        return TemplateVariant(FALSE);
      }
    }
    TemplateVariant level() const
    {
      return m_level;
@@ -4461,6 +4665,7 @@ class NestingNodeContext::Private : public PropertyMapper
      SharedPtr<DirContext>       dirContext;
      SharedPtr<FileContext>      fileContext;
      SharedPtr<PageContext>      pageContext;
      SharedPtr<ModuleContext>    moduleContext;
      ScopedPtr<TemplateVariant>  brief;
    };
    mutable Cachable m_cache;
@@ -6964,6 +7169,8 @@ void generateOutputViaTemplate()
    //%% ClassTree classTree:
    ctx->set("classTree",classTree.get());
    // classIndex
    // globals
    // members
    //%% ClassHierarchy classHierarchy:
    ctx->set("classHierarchy",classHierarchy.get());
    //%% NamespaceList namespaceList:
@@ -6987,6 +7194,7 @@ void generateOutputViaTemplate()
    //%% Page mainPage
    ctx->set("mainPage",mainPage.get());


    // render HTML output
    Template *tpl = e.loadByName("htmllayout.tpl",1);
    if (tpl)
+2 −0
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ class NamespaceDef : public Definition
    void addInnerCompound(Definition *d);
    void addListReferences();

    bool subGrouping() const { return m_subGrouping; }
    
    MemberList *getMemberList(MemberListType lt) const;
    const QList<MemberList> &getMemberLists() const { return m_memberLists; }
    MemberDef    *getMemberByName(const QCString &) const;