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)
LayoutNavEntry * parent () const
Kind kind () const
DString baseFile () const
std::string id () const
DString title () const
DString intro () const
DString url () const
const LayoutNavEntryList & children () const
LayoutNavEntryList & children ()
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)
LayoutNavEntry * find (LayoutNavEntry::Kind k, const DString &file=DString()) const
void swap (LayoutNavEntry &other)

Private Member Functions

 LayoutNavEntry ()

Private Attributes

LayoutNavEntry * m_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:3932
DString externalRef(const DString &relPath, const DString &ref)
Definition util.cpp:4539

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: