Doxygen
Loading...
Searching...
No Matches
LayoutNavEntry Struct Reference

Base class for the layout of a navigation item at the top of the HTML pages. More...

#include <src/layout.h>

Collaboration diagram for LayoutNavEntry:

Public Types

enum  Kind { NAV_SPECIFICATIONS }

Public Member Functions

std::string navToString () const
 LayoutNavEntry (LayoutNavEntry *parent, Kind k, bool vs, const DString &bf, const DString &tl, const DString &intro)
LayoutNavEntryparent () const
Kind kind () const
DString baseFile () const
std::string id () const
DString title () const
DString intro () const
DString url () const
const LayoutNavEntryListchildren () const
LayoutNavEntryListchildren ()
void setVisible (bool v)
bool visible () const
void insertChild (size_t pos, std::unique_ptr< LayoutNavEntry > &&e)
void appendChild (std::unique_ptr< LayoutNavEntry > &&e)
void updateVisibility (LayoutNavEntry *parent)
LayoutNavEntryfind (LayoutNavEntry::Kind k, const DString &file=DString()) const
void swap (LayoutNavEntry &other)

Private Member Functions

 LayoutNavEntry ()

Private Attributes

LayoutNavEntrym_parent
Kind m_kind
bool m_visible
DString m_baseFile
DString m_title
DString m_intro
LayoutNavEntryList m_children

Friends

class LayoutDocManager

Detailed Description

Base class for the layout of a navigation item at the top of the HTML pages.

Definition at line 154 of file layout.h.

Member Enumeration Documentation

◆ Kind

Enumerator
NAV_SPECIFICATIONS 

Definition at line 192 of file layout.h.

192 {
193#define NSPEC(x,y) x y,
195#undef NSPEC
196 };
@ NAV_SPECIFICATIONS
Definition layout.h:194

Constructor & Destructor Documentation

◆ LayoutNavEntry() [1/2]

LayoutNavEntry::LayoutNavEntry ( LayoutNavEntry * parent,
Kind k,
bool vs,
const DString & bf,
const DString & tl,
const DString & intro )
inline

Definition at line 208 of file layout.h.

210 : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl), m_intro(intro) {}
bool m_visible
Definition layout.h:246
DString m_title
Definition layout.h:248
LayoutNavEntry * parent() const
Definition layout.h:211
DString intro() const
Definition layout.h:216
DString m_baseFile
Definition layout.h:247
Kind m_kind
Definition layout.h:245
LayoutNavEntry * m_parent
Definition layout.h:244
DString m_intro
Definition layout.h:249

References intro(), LayoutNavEntry(), m_baseFile, m_intro, m_kind, m_parent, m_title, m_visible, and parent().

Referenced by find(), LayoutNavEntry(), parent(), swap(), and updateVisibility().

◆ LayoutNavEntry() [2/2]

LayoutNavEntry::LayoutNavEntry ( )
inlineprivate

Definition at line 243 of file layout.h.

243: m_parent(nullptr), m_kind(None), m_visible(true) {}

References m_kind, m_parent, m_visible, and None.

Member Function Documentation

◆ appendChild()

void LayoutNavEntry::appendChild ( std::unique_ptr< LayoutNavEntry > && e)

Definition at line 123 of file layout.cpp.

124{
125 e->updateVisibility(this);
126 m_children.push_back(std::move(e));
127}
LayoutNavEntryList m_children
Definition layout.h:250

References m_children.

◆ baseFile()

DString LayoutNavEntry::baseFile ( ) const
inline

Definition at line 213 of file layout.h.

213{ return m_baseFile; }

References m_baseFile.

Referenced by url().

◆ children() [1/2]

LayoutNavEntryList & LayoutNavEntry::children ( )
inline

Definition at line 219 of file layout.h.

219{ return m_children; }

References m_children.

◆ children() [2/2]

const LayoutNavEntryList & LayoutNavEntry::children ( ) const
inline

◆ find()

LayoutNavEntry * LayoutNavEntry::find ( LayoutNavEntry::Kind k,
const DString & file = DString() ) const

Definition at line 135 of file layout.cpp.

137{
138 LayoutNavEntry *result=nullptr;
139 for (const auto &entry : m_children)
140 {
141 // depth first search, needed to find the entry furthest from the
142 // root in case an entry is in the tree twice
143 result = entry->find(kind,file);
144 if (result) return result;
145 if (entry->kind()==kind && (file==DString() || entry->baseFile()==file))
146 {
147 return entry.get();
148 }
149 }
150 return result;
151}
LayoutNavEntry * find(LayoutNavEntry::Kind k, const DString &file=DString()) const
Definition layout.cpp:135
Kind kind() const
Definition layout.h:212
LayoutNavEntry(LayoutNavEntry *parent, Kind k, bool vs, const DString &bf, const DString &tl, const DString &intro)
Definition layout.h:208

References find(), kind(), LayoutNavEntry(), and m_children.

Referenced by LayoutParser::endNavIndex(), find(), generateJSNavTree(), writeAlphabeticalExceptionIndex(), writeAlphabeticalIndex(), writeAlphabeticalInterfaceIndex(), writeAlphabeticalStructIndex(), writeAnnotatedIndexGeneric(), writeDefaultQuickLinks(), writeExampleIndex(), writeFileIndex(), writeGraphicalClassHierarchy(), writeGraphicalExceptionHierarchy(), writeGraphicalInterfaceHierarchy(), writeHierarchicalExceptionIndex(), writeHierarchicalIndex(), writeHierarchicalInterfaceIndex(), and writeNamespaceIndex().

◆ id()

std::string LayoutNavEntry::id ( ) const
inline

Definition at line 214 of file layout.h.

214{ return navToString()+":"+m_baseFile.str(); }
const std::string & str() const
Definition dstring.h:645
std::string navToString() const
Definition layout.h:197

References m_baseFile, navToString(), and DString::str().

Referenced by findNavEntryRec(), and mergeNavTreeNodesRec().

◆ insertChild()

void LayoutNavEntry::insertChild ( size_t pos,
std::unique_ptr< LayoutNavEntry > && e )

Definition at line 129 of file layout.cpp.

130{
131 e->updateVisibility(this);
132 m_children.insert(m_children.begin()+pos,std::move(e));
133}

References m_children.

Referenced by LayoutParser::endNavIndex(), and mergeNavTreeNodesRec().

◆ intro()

◆ kind()

Kind LayoutNavEntry::kind ( ) const
inline

Definition at line 212 of file layout.h.

212{ return m_kind; }

References m_kind.

Referenced by find(), navToString(), and url().

◆ navToString()

std::string LayoutNavEntry::navToString ( ) const
inline

Definition at line 197 of file layout.h.

198 {
199 switch (kind())
200 {
201#define NSPEC(x,y) case x: return #x; break;
203#undef NSPEC
204 default: return "unknown"; // to satisfy compiler
205 }
206 }

References kind(), and NAV_SPECIFICATIONS.

Referenced by id(), and printNavLayout().

◆ parent()

LayoutNavEntry * LayoutNavEntry::parent ( ) const
inline

Definition at line 211 of file layout.h.

211{ return m_parent; }

References LayoutNavEntry(), and m_parent.

Referenced by LayoutParser::endNavEntry(), LayoutNavEntry(), renderQuickLinksAsTabs(), and updateVisibility().

◆ setVisible()

void LayoutNavEntry::setVisible ( bool v)
inline

Definition at line 220 of file layout.h.

220{ m_visible = v; }

References m_visible.

◆ swap()

void LayoutNavEntry::swap ( LayoutNavEntry & other)
inline

Definition at line 226 of file layout.h.

227 {
228 std::swap(m_parent,other.m_parent);
229 std::swap(m_kind,other.m_kind);
230 std::swap(m_visible,other.m_visible);
231 std::swap(m_baseFile,other.m_baseFile);
232 std::swap(m_title,other.m_title);
233 std::swap(m_intro,other.m_intro);
234 std::swap(m_children,other.m_children);
235 // reparent children
236 for (auto &child : m_children)
237 {
238 child->m_parent = this;
239 }
240 }

References LayoutNavEntry(), m_baseFile, m_children, m_intro, m_kind, m_parent, m_title, and m_visible.

◆ title()

◆ updateVisibility()

void LayoutNavEntry::updateVisibility ( LayoutNavEntry * parent)

Definition at line 118 of file layout.cpp.

119{
120 m_visible = m_visible && (parent==nullptr || parent->visible());
121}

References LayoutNavEntry(), m_visible, and parent().

◆ url()

DString LayoutNavEntry::url ( ) const

Definition at line 153 of file layout.cpp.

154{
155 DString url = baseFile().stripWhiteSpace();
156 if ((kind()!=LayoutNavEntry::User && kind()!=LayoutNavEntry::UserGroup) ||
157 (kind()==LayoutNavEntry::UserGroup && url.startsWith("usergroup")))
158 {
160 }
161 else if (url.startsWith("@ref ") || url.startsWith("\\ref "))
162 {
163 bool found=false;
164 DString relPath = "";
165 DString context = DString();
166 auto parser { createDocParser() };
167 auto dfAst { createRef( *parser.get(), url.mid(5).stripWhiteSpace(), context ) };
168 auto dfAstImpl = dynamic_cast<const DocNodeAST*>(dfAst.get());
169 const DocRef *df = std::get_if<DocRef>(&dfAstImpl->root);
170 if (!df->file().empty() || !df->anchor().empty())
171 {
172 found = true;
173 url=externalRef(relPath,df->ref());
174 if (!df->file().empty())
175 {
176 DString fn = df->file();
178 url += fn;
179 }
180 if (!df->anchor().empty())
181 {
182 url += "#" + df->anchor();
183 }
184 }
185 if (!found)
186 {
187 msg("explicit link request to '{}' in layout file '{}' could not be resolved\n",url.mid(5),Config_getString(LAYOUT_FILE));
188 }
189 }
190 //printf("LayoutNavEntry::url()=%s\n",qPrint(url));
191 return url;
192}
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:318
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:337
bool startsWith(const char *s) const
Definition dstring.h:600
DString ref() const
Definition docnode.h:793
DString file() const
Definition docnode.h:791
DString anchor() const
Definition docnode.h:794
#define Config_getString(name)
Definition config.h:32
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:59
IDocNodeASTPtr createRef(IDocParser &parserIntf, const DString &target, const DString &context, const DString &srcFile, int srcLine)
#define msg(fmt,...)
Definition message.h:94
DString url() const
Definition layout.cpp:153
DString baseFile() const
Definition layout.h:213
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:3931
DString externalRef(const DString &relPath, const DString &ref)
Definition util.cpp:4538

References addHtmlExtensionIfMissing(), DocRef::anchor(), baseFile(), Config_getString, createDocParser(), createRef(), DString::empty(), externalRef(), DocRef::file(), kind(), DString::mid(), msg, DocRef::ref(), DString::startsWith(), DString::stripWhiteSpace(), and url().

Referenced by url().

◆ visible()

◆ LayoutDocManager

friend class LayoutDocManager
friend

Definition at line 251 of file layout.h.

References LayoutDocManager.

Referenced by LayoutDocManager.

Member Data Documentation

◆ m_baseFile

DString LayoutNavEntry::m_baseFile
private

Definition at line 247 of file layout.h.

Referenced by baseFile(), id(), LayoutNavEntry(), and swap().

◆ m_children

LayoutNavEntryList LayoutNavEntry::m_children
private

Definition at line 250 of file layout.h.

Referenced by appendChild(), children(), children(), find(), insertChild(), and swap().

◆ m_intro

DString LayoutNavEntry::m_intro
private

Definition at line 249 of file layout.h.

Referenced by intro(), LayoutNavEntry(), and swap().

◆ m_kind

Kind LayoutNavEntry::m_kind
private

Definition at line 245 of file layout.h.

Referenced by kind(), LayoutNavEntry(), LayoutNavEntry(), and swap().

◆ m_parent

LayoutNavEntry* LayoutNavEntry::m_parent
private

Definition at line 244 of file layout.h.

Referenced by LayoutNavEntry(), LayoutNavEntry(), parent(), and swap().

◆ m_title

DString LayoutNavEntry::m_title
private

Definition at line 248 of file layout.h.

Referenced by LayoutNavEntry(), swap(), and title().

◆ m_visible

bool LayoutNavEntry::m_visible
private

Definition at line 246 of file layout.h.

Referenced by LayoutNavEntry(), LayoutNavEntry(), setVisible(), swap(), updateVisibility(), and visible().


The documentation for this struct was generated from the following files: