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 26 of file tooltip.h.

Constructor & Destructor Documentation

◆ TooltipManager()

TooltipManager::TooltipManager ( )

Definition at line 45 of file tooltip.cpp.

45 : p(std::make_unique<Private>())
46{
47}
std::unique_ptr< Private > p
Definition tooltip.h:41

References p.

◆ ~TooltipManager()

TooltipManager::~TooltipManager ( )

Definition at line 49 of file tooltip.cpp.

50{
51}

Member Function Documentation

◆ addTooltip()

void TooltipManager::addTooltip ( const Definition * d)

add a tooltip for a given symbol definition

Definition at line 60 of file tooltip.cpp.

61{
62 bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS);
63 if (!sourceTooltips) return;
64
65 DString id = d->getOutputFileBase();
66 if (size_t i=id.rfind('/'); i!=DString::npos)
67 {
68 id = id.mid(i+1); // strip path (for CREATE_SUBDIRS=YES)
69 }
70 // In case an extension is present translate this extension to something understood by the tooltip handler
71 // otherwise extend t with a translated htmlFileExtension.
72 DString currentExtension = getFileNameExtension(id);
73 if (currentExtension.empty())
74 {
76 }
77 else
78 {
79 id = stripExtensionGeneral(id,currentExtension) + escapeId(currentExtension);
80 }
81
82 DString anc = d->anchor();
83 if (!anc.empty())
84 {
85 id+="_"+anc;
86 }
87 id = "a" + id;
88 p->tooltipInfo.emplace(id.str(),d);
89 //printf("%p: addTooltip(%s)\n",this,id.data());
90}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
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:178
virtual DString anchor() const =0
virtual DString getOutputFileBase() const =0
static DString htmlFileExtension
Definition doxygen.h:115
#define Config_getBool(name)
Definition config.h:33
static DString escapeId(const DString &s)
Definition tooltip.cpp:53
DString stripExtensionGeneral(const DString &fName, const DString &ext)
Definition util.cpp:3945
DString getFileNameExtension(const DString &fn)
Definition util.cpp:4210

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 92 of file tooltip.cpp.

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

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 41 of file tooltip.h.

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


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