Doxygen
Loading...
Searching...
No Matches
diagram.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include "diagram.h"
#include "image.h"
#include "classdef.h"
#include "config.h"
#include "message.h"
#include "util.h"
#include "doxygen.h"
#include "portable.h"
#include "indexlist.h"
#include "classlist.h"
#include "textstream.h"
#include "growbuf.h"
#include "dir.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 QCString protToString (Protection p)
static uint32_t virtToMask (Specifier p)
static QCString convertToPSString (const QCString &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, QCString 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 38 of file diagram.cpp.

Function Documentation

◆ convertToPSString()

QCString convertToPSString ( const QCString & s)
static

Definition at line 193 of file diagram.cpp.

194{
195 if (s.isEmpty()) return s;
196 GrowBuf growBuf;
197 const char *p=s.data();
198 char c=0;
199 while ((c=*p++))
200 {
201 switch (c)
202 {
203 case '(': growBuf.addStr("\\("); break;
204 case ')': growBuf.addStr("\\)"); break;
205 default: growBuf.addChar(c); break;
206 }
207 }
208 growBuf.addChar(0);
209 return growBuf.get();
210}
Class representing a string buffer optimized for growing.
Definition growbuf.h:28
void addChar(char c)
Definition growbuf.h:69
void addStr(const QCString &s)
Definition growbuf.h:72
char * get()
Definition growbuf.h:114
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172

References GrowBuf::addChar(), GrowBuf::addStr(), QCString::data(), GrowBuf::get(), and QCString::isEmpty().

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

◆ getMinProtectionLevel()

Protection getMinProtectionLevel ( const DiagramItemList & dil)
static

Definition at line 213 of file diagram.cpp.

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

Referenced by TreeDiagram::drawConnectors().

◆ protToColor()

uint8_t protToColor ( Protection p)
static

Definition at line 158 of file diagram.cpp.

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

Referenced by TreeDiagram::drawConnectors().

◆ protToMask()

uint32_t protToMask ( Protection p)
static

Definition at line 146 of file diagram.cpp.

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

Referenced by TreeDiagram::drawConnectors().

◆ protToString()

QCString protToString ( Protection p)
static

Definition at line 170 of file diagram.cpp.

171{
172 switch(p)
173 {
174 case Protection::Public: return "solid";
175 case Protection::Package: // package is not possible!
176 case Protection::Protected: return "dashed";
177 case Protection::Private: return "dotted";
178 }
179 return QCString();
180}
This is an alternative implementation of QCString.
Definition qcstring.h:101

Referenced by TreeDiagram::drawConnectors().

◆ virtToMask()

uint32_t virtToMask ( Specifier p)
static

Definition at line 182 of file diagram.cpp.

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

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 233 of file diagram.cpp.

236{
237 uint8_t colFill = hasDocs ? (firstRow ? 8 : 2) : 7;
238 uint8_t colBorder = (firstRow || !hasDocs) ? 1 : 3;
239 uint32_t l = Image::stringLength(di->label());
240 uint32_t mask=virtToMask(di->virtualness());
241 image->fillRect(x+1,y+1,w-2,h-2,colFill,mask);
242 image->drawRect(x,y,w,h,colBorder,mask);
243 image->writeString(x+(w-l)/2, y+(h-fontHeight)/2, di->label(),1);
244 if (children)
245 {
246 for (uint32_t i=0;i<5;i++)
247 {
248 image->drawHorzLine(y+h+i-6,x+w-2-i,x+w-2,firstRow?1:3,0xffffffff);
249 }
250 }
251}
Specifier virtualness() const
Definition diagram.cpp:59
QCString label() const
Definition diagram.cpp:301
void drawHorzLine(uint32_t y, uint32_t xs, uint32_t xe, uint8_t colIndex, uint32_t mask)
Definition image.cpp:289
void fillRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:336
void drawRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:328
void writeString(uint32_t x, uint32_t y, const QCString &s, uint8_t fg)
Definition image.cpp:263
friend uint32_t stringLength(const QCString &s)
Definition image.cpp:277
const uint32_t fontHeight
Definition diagram.cpp:144
static uint32_t virtToMask(Specifier p)
Definition diagram.cpp:182

References Image::drawHorzLine(), Image::drawRect(), FALSE, 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,
QCString relPath,
uint32_t x,
uint32_t y,
uint32_t w,
uint32_t h )
static

Definition at line 262 of file diagram.cpp.

264{
265 if (cd->isLinkable())
266 {
267 QCString ref=cd->getReference();
268 t << "<area ";
269 if (!ref.isEmpty())
270 {
271 t << externalLinkTarget(true);
272 }
273 t << "href=\"";
274 t << externalRef(relPath,ref,TRUE);
275 QCString fn = cd->getOutputFileBase();
277 t << fn;
278 if (!cd->anchor().isEmpty())
279 {
280 t << "#" << cd->anchor();
281 }
282 t << "\" ";
283 QCString tooltip = cd->briefDescriptionAsTooltip();
284 if (!tooltip.isEmpty())
285 {
286 t << "title=\"" << convertToHtml(tooltip) << "\" ";
287 }
288 t << "alt=\"" << convertToXML(cd->displayName());
289 t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
290 t << (x+w) << "," << (y+h) << "\"/>\n";
291 }
292}
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual QCString briefDescriptionAsTooltip() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString getOutputFileBase() const =0
#define TRUE
Definition qcstring.h:37
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
Definition util.cpp:5692
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3900
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3849
QCString externalLinkTarget(const bool parent)
Definition util.cpp:5648
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4850

References addHtmlExtensionIfMissing(), Definition::anchor(), Definition::briefDescriptionAsTooltip(), convertToHtml(), convertToXML(), Definition::displayName(), externalLinkTarget(), externalRef(), Definition::getOutputFileBase(), Definition::getReference(), QCString::isEmpty(), Definition::isLinkable(), and TRUE.

Referenced by TreeDiagram::drawBoxes().

◆ writeVectorBox()

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

Definition at line 253 of file diagram.cpp.

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

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

Referenced by TreeDiagram::drawBoxes().

Variable Documentation

◆ fontHeight

const uint32_t fontHeight = 12

Definition at line 144 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 143 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 137 of file diagram.cpp.

Referenced by TreeDiagram::computeLayout().