Doxygen
Loading...
Searching...
No Matches
diagram.cpp File Reference
#include "diagram.h"
#include <cstdio>
#include <algorithm>
#include "classdef.h"
#include "config.h"
#include "dir.h"
#include "doxygen.h"
#include "image.h"
#include "indexlist.h"
#include "message.h"
#include "portable.h"
#include "textstream.h"
#include "util.h"
Include dependency graph for diagram.cpp:

Go to the source code of this file.

Classes

class  DiagramItem
 Class representing a single node in the built-in class diagram. More...
class  DiagramRow
 Class representing a row in the built-in class diagram. More...
class  TreeDiagram
 Class representing the tree layout for the built-in class diagram. More...
class  DualDirIterator< C, I >
 helper class representing an iterator that can iterate forwards or backwards More...
struct  ClassDiagram::Private

Macros

#define IMAGE_EXT   ".png"

Typedefs

using DiagramItemList = std::vector<DiagramItem*>

Functions

static uint32_t protToMask (Protection p)
static uint8_t protToColor (Protection p)
static DString protToString (Protection p)
static uint32_t virtToMask (Specifier p)
static DString convertToPSString (const DString &s)
static Protection getMinProtectionLevel (const DiagramItemList &dil)
static void writeBitmapBox (DiagramItem *di, Image *image, uint32_t x, uint32_t y, uint32_t w, uint32_t h, bool firstRow, bool hasDocs, bool children=false)
static void writeVectorBox (TextStream &t, DiagramItem *di, float x, float y, bool children=false)
static void writeMapArea (TextStream &t, const ClassDef *cd, DString relPath, uint32_t x, uint32_t y, uint32_t w, uint32_t h)

Variables

const uint32_t maxTreeWidth = 8
const uint32_t gridWidth = 100
const uint32_t gridHeight = 100
const uint32_t labelHorSpacing = 10
const uint32_t labelVertSpacing = 32
const uint32_t labelHorMargin = 6
const uint32_t fontHeight = 12

Macro Definition Documentation

◆ IMAGE_EXT

#define IMAGE_EXT   ".png"

Typedef Documentation

◆ DiagramItemList

using DiagramItemList = std::vector<DiagramItem*>

Definition at line 39 of file diagram.cpp.

Function Documentation

◆ convertToPSString()

DString convertToPSString ( const DString & s)
static

Definition at line 194 of file diagram.cpp.

195{
196 if (s.empty()) return s;
197 DString result;
198 result.reserve(s.length()+8);
199 const char *p=s.data();
200 char c=0;
201 while ((c=*p++))
202 {
203 switch (c)
204 {
205 case '(': result+="\\("; break;
206 case ')': result+="\\)"; break;
207 default: result+=c; break;
208 }
209 }
210 return result;
211}
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
Definition dstring.h:217
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:157
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151

References DString::data(), DString::empty(), DString::length(), and DString::reserve().

Referenced by ClassDiagram::writeFigure(), and writeVectorBox().

◆ getMinProtectionLevel()

Protection getMinProtectionLevel ( const DiagramItemList & dil)
static

Definition at line 214 of file diagram.cpp.

215{
216 auto it = dil.begin();
217 Protection result = Protection::Private;
218 if (it!=dil.end())
219 {
220 result=(*it)->protection();
221 for (++it;it!=dil.end();++it)
222 {
223 Protection p=(*it)->protection();
224 if (p!=result)
225 {
226 if (result==Protection::Protected && p==Protection::Public) result=p;
227 else if (result==Protection::Private) result=p;
228 }
229 }
230 }
231 return result;
232}
Protection
Definition types.h:32

Referenced by TreeDiagram::drawConnectors().

◆ protToColor()

uint8_t protToColor ( Protection p)
static

Definition at line 159 of file diagram.cpp.

160{
161 switch(p)
162 {
163 case Protection::Public: return 6;
164 case Protection::Package: // package is not possible!
165 case Protection::Protected: return 5;
166 case Protection::Private: return 4;
167 }
168 return 0;
169}

Referenced by TreeDiagram::drawConnectors().

◆ protToMask()

uint32_t protToMask ( Protection p)
static

Definition at line 147 of file diagram.cpp.

148{
149 switch(p)
150 {
151 case Protection::Public: return 0xffffffff;
152 case Protection::Package: // package is not possible!
153 case Protection::Protected: return 0xcccccccc;
154 case Protection::Private: return 0xaaaaaaaa;
155 }
156 return 0;
157}

Referenced by TreeDiagram::drawConnectors().

◆ protToString()

DString protToString ( Protection p)
static

Definition at line 171 of file diagram.cpp.

172{
173 switch(p)
174 {
175 case Protection::Public: return "solid";
176 case Protection::Package: // package is not possible!
177 case Protection::Protected: return "dashed";
178 case Protection::Private: return "dotted";
179 }
180 return DString();
181}

Referenced by TreeDiagram::drawConnectors().

◆ virtToMask()

uint32_t virtToMask ( Specifier p)
static

Definition at line 183 of file diagram.cpp.

184{
185 switch(p)
186 {
187 case Specifier::Normal: return 0xffffffff;
188 case Specifier::Virtual: return 0xf0f0f0f0;
189 default: break;
190 }
191 return 0;
192}

Referenced by writeBitmapBox().

◆ writeBitmapBox()

void writeBitmapBox ( DiagramItem * di,
Image * image,
uint32_t x,
uint32_t y,
uint32_t w,
uint32_t h,
bool firstRow,
bool hasDocs,
bool children = false )
static

Definition at line 234 of file diagram.cpp.

237{
238 uint8_t colFill = hasDocs ? (firstRow ? 8 : 2) : 7;
239 uint8_t colBorder = (firstRow || !hasDocs) ? 1 : 3;
240 uint32_t l = Image::stringLength(di->label());
241 uint32_t mask=virtToMask(di->virtualness());
242 image->fillRect(x+1,y+1,w-2,h-2,colFill,mask);
243 image->drawRect(x,y,w,h,colBorder,mask);
244 image->writeString(x+(w-l)/2, y+(h-fontHeight)/2, di->label(),1);
245 if (children)
246 {
247 for (uint32_t i=0;i<5;i++)
248 {
249 image->drawHorzLine(y+h+i-6,x+w-2-i,x+w-2,firstRow?1:3,0xffffffff);
250 }
251 }
252}
Specifier virtualness() const
Definition diagram.cpp:60
DString label() const
Definition diagram.cpp:302
void drawHorzLine(uint32_t y, uint32_t xs, uint32_t xe, uint8_t colIndex, uint32_t mask)
Definition image.cpp:294
void fillRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:341
void drawRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:333
void writeString(uint32_t x, uint32_t y, const DString &s, uint8_t fg)
Definition image.cpp:268
friend uint32_t stringLength(const DString &s)
Definition image.cpp:282
const uint32_t fontHeight
Definition diagram.cpp:145
static uint32_t virtToMask(Specifier p)
Definition diagram.cpp:183

References Image::drawHorzLine(), Image::drawRect(), Image::fillRect(), fontHeight, DiagramItem::label(), Image::stringLength, virtToMask(), DiagramItem::virtualness(), and Image::writeString().

Referenced by TreeDiagram::drawBoxes().

◆ writeMapArea()

void writeMapArea ( TextStream & t,
const ClassDef * cd,
DString relPath,
uint32_t x,
uint32_t y,
uint32_t w,
uint32_t h )
static

Definition at line 263 of file diagram.cpp.

265{
266 if (cd->isLinkable())
267 {
268 DString ref=cd->getReference();
269 t << "<area ";
270 if (!ref.empty())
271 {
272 t << externalLinkTarget(true);
273 }
274 t << "href=\"";
275 t << externalRef(relPath,ref);
276 DString fn = cd->getOutputFileBase();
278 t << fn;
279 if (!cd->anchor().empty())
280 {
281 t << "#" << cd->anchor();
282 }
283 t << "\" ";
284 DString tooltip = cd->briefDescriptionAsTooltip();
285 if (!tooltip.empty())
286 {
287 t << "title=\"" << convertToHtml(tooltip) << "\" ";
288 }
289 t << "alt=\"" << convertToXML(cd->displayName());
290 t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
291 t << (x+w) << "," << (y+h) << "\"/>\n";
292 }
293}
virtual bool isLinkable() const =0
virtual DString briefDescriptionAsTooltip() const =0
virtual DString displayName(bool includeScope=true) const =0
virtual DString anchor() const =0
virtual DString getReference() const =0
virtual DString getOutputFileBase() const =0
DString externalLinkTarget(const bool parent)
Definition util.cpp:4491
DString convertToHtml(const DString &s, bool keepEntities)
Definition util.cpp:3291
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:3931
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3232
DString externalRef(const DString &relPath, const DString &ref)
Definition util.cpp:4538

References addHtmlExtensionIfMissing(), Definition::anchor(), Definition::briefDescriptionAsTooltip(), convertToHtml(), convertToXML(), Definition::displayName(), DString::empty(), externalLinkTarget(), externalRef(), Definition::getOutputFileBase(), Definition::getReference(), and Definition::isLinkable().

Referenced by TreeDiagram::drawBoxes().

◆ writeVectorBox()

void writeVectorBox ( TextStream & t,
DiagramItem * di,
float x,
float y,
bool children = false )
static

Definition at line 254 of file diagram.cpp.

256{
257 if (di->virtualness()==Specifier::Virtual) t << "dashed\n";
258 t << " (" << convertToPSString(di->label()) << ") " << x << " " << y << " box\n";
259 if (children) t << x << " " << y << " mark\n";
260 if (di->virtualness()==Specifier::Virtual) t << "solid\n";
261}
static DString convertToPSString(const DString &s)
Definition diagram.cpp:194

References convertToPSString(), DiagramItem::label(), and DiagramItem::virtualness().

Referenced by TreeDiagram::drawBoxes().

Variable Documentation

◆ fontHeight

const uint32_t fontHeight = 12

Definition at line 145 of file diagram.cpp.

Referenced by writeBitmapBox(), and ClassDiagram::writeImage().

◆ gridHeight

const uint32_t gridHeight = 100

◆ gridWidth

◆ labelHorMargin

const uint32_t labelHorMargin = 6

Definition at line 144 of file diagram.cpp.

Referenced by ClassDiagram::writeImage().

◆ labelHorSpacing

const uint32_t labelHorSpacing = 10

◆ labelVertSpacing

const uint32_t labelVertSpacing = 32

◆ maxTreeWidth

const uint32_t maxTreeWidth = 8

Definition at line 138 of file diagram.cpp.

Referenced by TreeDiagram::computeLayout().