Doxygen
Loading...
Searching...
No Matches
TooltipManager Class Reference

Class that manages the tooltips for a source file. More...

#include <src/tooltip.h>

Classes

class  Private

Public Member Functions

 TooltipManager ()
 ~TooltipManager ()
void addTooltip (const Definition *d)
 add a tooltip for a given symbol definition
void writeTooltips (OutputCodeList &ol)
 write the list of all collected tooltip to the given outputs

Private Attributes

std::unique_ptr< Privatep

Detailed Description

Class that manages the tooltips for a source file.

Definition at line 25 of file tooltip.h.

Constructor & Destructor Documentation

◆ TooltipManager()

TooltipManager::TooltipManager ( )

Definition at line 41 of file tooltip.cpp.

41 : p(std::make_unique<Private>())
42{
43}
std::unique_ptr< Private > p
Definition tooltip.h:40

References p.

◆ ~TooltipManager()

TooltipManager::~TooltipManager ( )

Definition at line 45 of file tooltip.cpp.

46{
47}

Member Function Documentation

◆ addTooltip()

void TooltipManager::addTooltip ( const Definition * d)

add a tooltip for a given symbol definition

Definition at line 56 of file tooltip.cpp.

57{
58 bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS);
59 if (!sourceTooltips) return;
60
61 DString id = d->getOutputFileBase();
62 if (size_t i=id.rfind('/'); i!=DString::npos)
63 {
64 id = id.mid(i+1); // strip path (for CREATE_SUBDIRS=YES)
65 }
66 // In case an extension is present translate this extension to something understood by the tooltip handler
67 // otherwise extend t with a translated htmlFileExtension.
68 DString currentExtension = getFileNameExtension(id);
69 if (currentExtension.empty())
70 {
72 }
73 else
74 {
75 id = stripExtensionGeneral(id,currentExtension) + escapeId(currentExtension);
76 }
77
78 DString anc = d->anchor();
79 if (!anc.empty())
80 {
81 id+="_"+anc;
82 }
83 id = "a" + id;
84 p->tooltipInfo.emplace(id.str(),d);
85 //printf("%p: addTooltip(%s)\n",this,id.data());
86}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:153
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:183
virtual DString anchor() const =0
virtual DString getOutputFileBase() const =0
static DString htmlFileExtension
Definition doxygen.h:122
#define Config_getBool(name)
Definition config.h:33
static DString escapeId(const DString &s)
Definition tooltip.cpp:49
DString stripExtensionGeneral(const DString &fName, const DString &ext)
Definition util.cpp:4983
DString getFileNameExtension(const DString &fn)
Definition util.cpp:5300

References Definition::anchor(), Config_getBool, DString::empty(), escapeId(), getFileNameExtension(), Definition::getOutputFileBase(), Doxygen::htmlFileExtension, DString::npos, p, and stripExtensionGeneral().

◆ writeTooltips()

void TooltipManager::writeTooltips ( OutputCodeList & ol)

write the list of all collected tooltip to the given outputs

Definition at line 88 of file tooltip.cpp.

89{
90 std::unordered_map<int, std::unordered_set<std::string> >::iterator it;
91 // critical section
92 {
93 std::lock_guard<std::mutex> lock(g_tooltipsFileMutex);
94
95 int id = ol.id();
96 it = g_tooltipsWrittenPerFile.find(id);
97 if (it==g_tooltipsWrittenPerFile.end()) // new file
98 {
99 it = g_tooltipsWrittenPerFile.emplace(id,std::unordered_set<std::string>()).first;
100 }
101 }
102
103 for (const auto &[name,d] : p->tooltipInfo)
104 {
105 bool written = false;
106
107 // critical section
108 {
109 std::lock_guard<std::mutex> lock(g_tooltipsTipMutex);
110 written = it->second.find(name)!=it->second.end();
111 if (!written) // only write tooltips once
112 {
113 it->second.insert(name); // remember we wrote this tooltip for the given file id
114 }
115 }
116
117 if (!written)
118 {
119 //printf("%p: writeTooltips(%s) ol=%d\n",this,qPrint(name),ol.id());
120 DocLinkInfo docInfo;
121 docInfo.name = d->qualifiedName();
122 docInfo.ref = d->getReference();
123 docInfo.url = d->getOutputFileBase();
124 docInfo.anchor = d->anchor();
125 SourceLinkInfo defInfo;
126 if (d->getBodyDef() && d->getStartBodyLine()!=-1)
127 {
128 defInfo.file = d->getBodyDef()->name();
129 defInfo.line = d->getStartBodyLine();
130 defInfo.url = d->getSourceFileBase();
131 defInfo.anchor = d->getSourceAnchor();
132 }
133 SourceLinkInfo declInfo; // TODO: fill in...
134 DString decl;
135 if (d->definitionType()==Definition::TypeMember)
136 {
137 const MemberDef *md = toMemberDef(d);
138 if (!md->isAnonymous())
139 {
140 decl = md->declaration();
141 }
142 }
143 ol.writeTooltip(name, // id
144 docInfo, // symName
145 decl, // decl
146 d->briefDescriptionAsTooltip(), // desc
147 defInfo,
148 declInfo
149 );
150 }
151 }
152}
virtual bool isAnonymous() const =0
virtual DString declaration() const =0
int id() const
Definition outputlist.h:192
void writeTooltip(const DString &id, const DocLinkInfo &docInfo, const DString &decl, const DString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo)
Definition outputlist.h:260
MemberDef * toMemberDef(Definition *d)
static std::mutex g_tooltipsFileMutex
Definition tooltip.cpp:31
static std::mutex g_tooltipsTipMutex
Definition tooltip.cpp:32
static std::unordered_map< int, std::unordered_set< std::string > > g_tooltipsWrittenPerFile
Definition tooltip.cpp:33

References DocLinkInfo::anchor, SourceLinkInfo::anchor, MemberDef::declaration(), SourceLinkInfo::file, g_tooltipsFileMutex, g_tooltipsTipMutex, g_tooltipsWrittenPerFile, OutputCodeList::id(), Definition::isAnonymous(), SourceLinkInfo::line, DocLinkInfo::name, p, DocLinkInfo::ref, toMemberDef(), Definition::TypeMember, DocLinkInfo::url, SourceLinkInfo::url, and OutputCodeList::writeTooltip().

Member Data Documentation

◆ p

std::unique_ptr<Private> TooltipManager::p
private

Definition at line 40 of file tooltip.h.

Referenced by addTooltip(), TooltipManager(), and writeTooltips().


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