Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
DotGroupCollaboration Class Reference

#include <dot.h>

Classes

class  Edge
 
class  Link
 

Public Types

enum  EdgeType {
  tmember = 0, tclass, tnamespace, tfile,
  tpages, tdir, thierarchy
}
 

Public Member Functions

 DotGroupCollaboration (GroupDef *gd)
 
 ~DotGroupCollaboration ()
 
QCString writeGraph (FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const char *path, const char *fileName, const char *relPath, bool writeImageMap=TRUE, int graphId=-1) const
 
void buildGraph (GroupDef *gd)
 
bool isTrivial () const
 

Private Member Functions

void addCollaborationMember (Definition *def, QCString &url, EdgeType eType)
 
void addMemberList (class MemberList *ml)
 
void writeGraphHeader (FTextStream &t, const QCString &title) const
 
EdgeaddEdge (DotNode *_pNStart, DotNode *_pNEnd, EdgeType _eType, const QCString &_label, const QCString &_url)
 

Private Attributes

DotNodem_rootNode
 
int m_curNodeId
 
QDict< DotNode > * m_usedNodes
 
QCString m_diskName
 
QList< Edgem_edges
 

Detailed Description

Representation of a group collaboration graph

Definition at line 272 of file dot.h.

Member Enumeration Documentation

Enumerator
tmember 
tclass 
tnamespace 
tfile 
tpages 
tdir 
thierarchy 

Definition at line 275 of file dot.h.

Constructor & Destructor Documentation

DotGroupCollaboration::DotGroupCollaboration ( GroupDef gd)

Definition at line 4306 of file dot.cpp.

4307 {
4308  m_curNodeId = 0;
4309  QCString tmp_url = gd->getReference()+"$"+gd->getOutputFileBase();
4310  m_usedNodes = new QDict<DotNode>(1009);
4311  m_rootNode = new DotNode(m_curNodeId++, gd->groupTitle(), "", tmp_url, TRUE );
4312  m_rootNode->markAsVisible();
4313  m_usedNodes->insert(gd->name(), m_rootNode );
4314  m_edges.setAutoDelete(TRUE);
4315 
4316  m_diskName = gd->getOutputFileBase();
4317 
4318  buildGraph( gd );
4319 }
DotNode * m_rootNode
Definition: dot.h:322
virtual QCString getReference() const
Definition: dot.h:60
const char * groupTitle() const
Definition: groupdef.h:54
QDict< DotNode > * m_usedNodes
Definition: dot.h:324
QCString m_diskName
Definition: dot.h:325
const QCString & name() const
Definition: definition.h:114
QList< Edge > m_edges
Definition: dot.h:326
void buildGraph(GroupDef *gd)
Definition: dot.cpp:4326
void markAsVisible(bool b=TRUE)
Definition: dot.h:101
QCString getOutputFileBase() const
Definition: groupdef.cpp:1512
const bool TRUE
Definition: qglobal.h:371
DotGroupCollaboration::~DotGroupCollaboration ( )

Definition at line 4321 of file dot.cpp.

4322 {
4323  delete m_usedNodes;
4324 }
QDict< DotNode > * m_usedNodes
Definition: dot.h:324

Member Function Documentation

void DotGroupCollaboration::addCollaborationMember ( Definition def,
QCString url,
EdgeType  eType 
)
private

Definition at line 4490 of file dot.cpp.

4492 {
4493  // Create group nodes
4494  if ( !def->partOfGroups() )
4495  return;
4496  GroupListIterator gli(*def->partOfGroups());
4497  GroupDef *d;
4498  QCString tmp_str;
4499  for (;(d=gli.current());++gli)
4500  {
4501  DotNode* nnode = m_usedNodes->find(d->name());
4502  if ( nnode != m_rootNode )
4503  {
4504  if ( nnode==0 )
4505  { // add node
4506  tmp_str = d->getReference()+"$"+d->getOutputFileBase();
4507  QCString tooltip = d->briefDescriptionAsTooltip();
4508  nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_str );
4509  nnode->markAsVisible();
4510  m_usedNodes->insert(d->name(), nnode );
4511  }
4512  tmp_str = def->qualifiedName();
4513  addEdge( m_rootNode, nnode, eType, tmp_str, url );
4514  }
4515  }
4516 }
DotNode * m_rootNode
Definition: dot.h:322
Definition: dot.h:60
GroupList * partOfGroups() const
QDict< DotNode > * m_usedNodes
Definition: dot.h:324
virtual QCString qualifiedName() const
Edge * addEdge(DotNode *_pNStart, DotNode *_pNEnd, EdgeType _eType, const QCString &_label, const QCString &_url)
Definition: dot.cpp:4459
void markAsVisible(bool b=TRUE)
Definition: dot.h:101
DotGroupCollaboration::Edge * DotGroupCollaboration::addEdge ( DotNode _pNStart,
DotNode _pNEnd,
EdgeType  _eType,
const QCString _label,
const QCString _url 
)
private

Definition at line 4459 of file dot.cpp.

4462 {
4463  // search a existing link.
4465  Edge* newEdge = 0;
4466  for ( lli.toFirst(); (newEdge=lli.current()); ++lli)
4467  {
4468  if ( newEdge->pNStart==_pNStart &&
4469  newEdge->pNEnd==_pNEnd &&
4470  newEdge->eType==_eType
4471  )
4472  { // edge already found
4473  break;
4474  }
4475  }
4476  if ( newEdge==0 ) // new link
4477  {
4478  newEdge = new Edge(_pNStart,_pNEnd,_eType);
4479  m_edges.append( newEdge );
4480  }
4481 
4482  if (!_label.isEmpty())
4483  {
4484  newEdge->links.append(new Link(_label,_url));
4485  }
4486 
4487  return newEdge;
4488 }
bool isEmpty() const
Definition: qcstring.h:189
boost::graph_traits< ModuleGraph >::edge_descriptor Edge
Definition: ModuleGraph.h:24
QList< Edge > m_edges
Definition: dot.h:326
void DotGroupCollaboration::addMemberList ( class MemberList ml)
private

Definition at line 4446 of file dot.cpp.

4447 {
4448  if ( !( ml && ml->count()) ) return;
4449  MemberListIterator defli(*ml);
4450  MemberDef *def;
4451  for (;(def=defli.current());++defli)
4452  {
4454  +"#"+def->anchor();
4456  }
4457 }
QCString getReference() const
Definition: memberdef.cpp:1001
static QCString htmlFileExtension
Definition: doxygen.h:130
void addCollaborationMember(Definition *def, QCString &url, EdgeType eType)
Definition: dot.cpp:4490
QCString anchor() const
Definition: memberdef.cpp:1031
QCString getOutputFileBase() const
Definition: memberdef.cpp:941
void DotGroupCollaboration::buildGraph ( GroupDef gd)

Definition at line 4326 of file dot.cpp.

4327 {
4328  QCString tmp_url;
4329  //===========================
4330  // hierarchy.
4331 
4332  // Write parents
4333  GroupList *groups = gd->partOfGroups();
4334  if ( groups )
4335  {
4336  GroupListIterator gli(*groups);
4337  GroupDef *d;
4338  for (gli.toFirst();(d=gli.current());++gli)
4339  {
4340  DotNode* nnode = m_usedNodes->find(d->name());
4341  if ( !nnode )
4342  { // add node
4343  tmp_url = d->getReference()+"$"+d->getOutputFileBase();
4344  QCString tooltip = d->briefDescriptionAsTooltip();
4345  nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_url );
4346  nnode->markAsVisible();
4347  m_usedNodes->insert(d->name(), nnode );
4348  }
4349  tmp_url = "";
4350  addEdge( nnode, m_rootNode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
4351  }
4352  }
4353 
4354  // Add subgroups
4355  if ( gd->getSubGroups() && gd->getSubGroups()->count() )
4356  {
4357  QListIterator<GroupDef> defli(*gd->getSubGroups());
4358  GroupDef *def;
4359  for (;(def=defli.current());++defli)
4360  {
4361  DotNode* nnode = m_usedNodes->find(def->name());
4362  if ( !nnode )
4363  { // add node
4364  tmp_url = def->getReference()+"$"+def->getOutputFileBase();
4365  QCString tooltip = def->briefDescriptionAsTooltip();
4366  nnode = new DotNode(m_curNodeId++, def->groupTitle(), tooltip, tmp_url );
4367  nnode->markAsVisible();
4368  m_usedNodes->insert(def->name(), nnode );
4369  }
4370  tmp_url = "";
4371  addEdge( m_rootNode, nnode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
4372  }
4373  }
4374 
4375  //=======================
4376  // Write collaboration
4377 
4378  // Add members
4380 
4381  // Add classes
4382  if ( gd->getClasses() && gd->getClasses()->count() )
4383  {
4384  ClassSDict::Iterator defli(*gd->getClasses());
4385  ClassDef *def;
4386  for (;(def=defli.current());++defli)
4387  {
4388  tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
4389  if (!def->anchor().isEmpty())
4390  {
4391  tmp_url+="#"+def->anchor();
4392  }
4394  }
4395  }
4396 
4397  // Add namespaces
4398  if ( gd->getNamespaces() && gd->getNamespaces()->count() )
4399  {
4401  NamespaceDef *def;
4402  for (;(def=defli.current());++defli)
4403  {
4404  tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
4406  }
4407  }
4408 
4409  // Add files
4410  if ( gd->getFiles() && gd->getFiles()->count() )
4411  {
4412  QListIterator<FileDef> defli(*gd->getFiles());
4413  FileDef *def;
4414  for (;(def=defli.current());++defli)
4415  {
4416  tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
4418  }
4419  }
4420 
4421  // Add pages
4422  if ( gd->getPages() && gd->getPages()->count() )
4423  {
4424  PageSDict::Iterator defli(*gd->getPages());
4425  PageDef *def;
4426  for (;(def=defli.current());++defli)
4427  {
4428  tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
4430  }
4431  }
4432 
4433  // Add directories
4434  if ( gd->getDirs() && gd->getDirs()->count() )
4435  {
4436  QListIterator<DirDef> defli(*gd->getDirs());
4437  DirDef *def;
4438  for (;(def=defli.current());++defli)
4439  {
4440  tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
4442  }
4443  }
4444 }
DotNode * m_rootNode
Definition: dot.h:322
virtual QCString getReference() const
static QCString htmlFileExtension
Definition: doxygen.h:130
void addCollaborationMember(Definition *def, QCString &url, EdgeType eType)
Definition: dot.cpp:4490
Definition: dot.h:60
int count() const
Definition: sortdict.h:284
const char * groupTitle() const
Definition: groupdef.h:54
GroupList * partOfGroups() const
ClassSDict * getClasses() const
Definition: groupdef.h:101
GroupList * getSubGroups() const
Definition: groupdef.h:103
QDict< DotNode > * m_usedNodes
Definition: dot.h:324
uint count() const
Definition: qlist.h:66
const QCString & name() const
Definition: definition.h:114
PageSDict * getPages() const
Definition: groupdef.h:104
NamespaceSDict * getNamespaces() const
Definition: groupdef.h:102
Definition: dirdef.h:44
type * current() const
Definition: qlist.h:146
MemberList * getMemberList(MemberListType lt) const
Definition: groupdef.cpp:1593
A model of a page symbol.
Definition: pagedef.h:29
Edge * addEdge(DotNode *_pNStart, DotNode *_pNEnd, EdgeType _eType, const QCString &_label, const QCString &_url)
Definition: dot.cpp:4459
FileList * getFiles() const
Definition: groupdef.h:100
friend class Iterator
Definition: sortdict.h:289
QCString briefDescriptionAsTooltip() const
void markAsVisible(bool b=TRUE)
Definition: dot.h:101
QCString getOutputFileBase() const
Definition: groupdef.cpp:1512
DirList * getDirs() const
Definition: groupdef.h:105
void addMemberList(class MemberList *ml)
Definition: dot.cpp:4446
bool DotGroupCollaboration::isTrivial ( ) const

Definition at line 4740 of file dot.cpp.

4741 {
4742  return m_usedNodes->count() <= 1;
4743 }
QDict< DotNode > * m_usedNodes
Definition: dot.h:324
QCString DotGroupCollaboration::writeGraph ( FTextStream t,
GraphOutputFormat  gf,
EmbeddedOutputFormat  ef,
const char *  path,
const char *  fileName,
const char *  relPath,
bool  writeImageMap = TRUE,
int  graphId = -1 
) const

Definition at line 4519 of file dot.cpp.

4523 {
4524  QDir d(path);
4525  // store the original directory
4526  if (!d.exists())
4527  {
4528  err("Output dir %s does not exist!\n",path); exit(1);
4529  }
4530  static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
4531 
4532  QGString theGraph;
4533  FTextStream md5stream(&theGraph);
4534  writeGraphHeader(md5stream,m_rootNode->label());
4535 
4536  // clean write flags
4537  QDictIterator<DotNode> dni(*m_usedNodes);
4538  DotNode *pn;
4539  for (dni.toFirst();(pn=dni.current());++dni)
4540  {
4541  pn->clearWriteFlag();
4542  }
4543 
4544  // write other nodes.
4545  for (dni.toFirst();(pn=dni.current());++dni)
4546  {
4547  pn->write(md5stream,DotNode::Inheritance,graphFormat,TRUE,FALSE,FALSE,FALSE);
4548  }
4549 
4550  // write edges
4552  Edge* edge;
4553  for (eli.toFirst();(edge=eli.current());++eli)
4554  {
4555  edge->write( md5stream );
4556  }
4557 
4558  writeGraphFooter(md5stream);
4559  resetReNumbering();
4560  uchar md5_sig[16];
4561  QCString sigStr(33);
4562  MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
4563  MD5SigToString(md5_sig,sigStr.rawData(),33);
4564  QCString imgExt = getDotImageExtension();
4565  QCString imgFmt = Config_getEnum("DOT_IMAGE_FORMAT");
4567  QCString imgName = baseName+"."+imgExt;
4568  QCString absPath = d.absPath().data();
4569  QCString absBaseName = absPath+"/"+baseName;
4570  QCString absDotName = absBaseName+".dot";
4571  QCString absImgName = absBaseName+"."+imgExt;
4572  QCString absMapName = absBaseName+".map";
4573  QCString absPdfName = absBaseName+".pdf";
4574  QCString absEpsName = absBaseName+".eps";
4575  bool regenerate=FALSE;
4576  if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
4577  !checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
4578  usePDFLatex ? absPdfName : absEpsName,
4579  graphFormat==GOF_BITMAP /*&& generateImageMap*/ ? absMapName : QCString())
4580  )
4581  {
4582  regenerate=TRUE;
4583 
4584  QFile dotfile(absDotName);
4585  if (dotfile.open(IO_WriteOnly))
4586  {
4587  FTextStream tdot(&dotfile);
4588  tdot << theGraph;
4589  dotfile.close();
4590  }
4591 
4592  if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
4593  {
4594  DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
4595  dotRun->addJob(imgFmt,absImgName);
4596  if (writeImageMap) dotRun->addJob(MAP_CMD,absMapName);
4597  DotManager::instance()->addRun(dotRun);
4598 
4599  }
4600  else if (graphFormat==GOF_EPS)
4601  {
4602  DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
4603  if (usePDFLatex)
4604  {
4605  dotRun->addJob("pdf",absPdfName);
4606  }
4607  else
4608  {
4609  dotRun->addJob("ps",absEpsName);
4610  }
4611  DotManager::instance()->addRun(dotRun);
4612  }
4613 
4614  }
4615  if (graphFormat==GOF_BITMAP && textFormat==EOF_DocBook)
4616  {
4617  t << "<para>" << endl;
4618  t << " <figure>" << endl;
4619  t << " <title>Group Collaboration diagram";
4620  t << "</title>" << endl;
4621  t << " <mediaobject>" << endl;
4622  t << " <imageobject>" << endl;
4623  t << " <imagedata";
4624  t << " width=\"50%\" align=\"center\" valign=\"middle\" scalefit=\"1\" fileref=\"" << relPath << baseName << "." << imgExt << "\">";
4625  t << "</imagedata>" << endl;
4626  t << " </imageobject>" << endl;
4627  t << " </mediaobject>" << endl;
4628  t << " </figure>" << endl;
4629  t << "</para>" << endl;
4630  }
4631  else if (graphFormat==GOF_BITMAP && writeImageMap)
4632  {
4633  QCString mapLabel = escapeCharsInString(baseName,FALSE);
4634  t << "<center><table><tr><td>";
4635 
4636  if (imgExt=="svg")
4637  {
4638  t << "<div class=\"center\">";
4639  if (regenerate || !writeSVGFigureLink(t,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
4640  {
4641  if (regenerate)
4642  {
4643  DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
4644  }
4645  int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
4646  t << "<!-- SVG " << mapId << " -->" << endl;
4647  }
4648  t << "</div>" << endl;
4649  }
4650  else
4651  {
4652  t << "<img src=\"" << relPath << imgName
4653  << "\" border=\"0\" alt=\"\" usemap=\"#"
4654  << mapLabel << "\"/>" << endl;
4655  if (regenerate || !insertMapFile(t,absMapName,relPath,mapLabel))
4656  {
4657  int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
4658  FALSE,QCString(),mapLabel);
4659  t << "<!-- MAP " << mapId << " -->" << endl;
4660  }
4661  }
4662  t << "</td></tr></table></center>" << endl;
4663  }
4664  else if (graphFormat==GOF_EPS)
4665  {
4666  if (regenerate || !writeVecGfxFigure(t,baseName,absBaseName))
4667  {
4668  int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE);
4669  t << endl << "% FIG " << figId << endl;
4670  }
4671  }
4672  if (!regenerate) removeDotGraph(absDotName);
4673 
4674  return baseName;
4675 }
Traverses directory structures and contents in a platform-independent way.
Definition: qdir.h:52
static void resetReNumbering()
Definition: dot.cpp:436
int addSVGConversion(const QCString &file, const QCString &relPath, bool urlOnly, const QCString &context, bool zoomable, int graphId)
Definition: dot.cpp:1292
char * data() const
Definition: qgstring.h:42
DotNode * m_rootNode
Definition: dot.h:322
void clearWriteFlag()
Definition: dot.cpp:2168
QCString escapeCharsInString(const char *name, bool allowDots, bool allowUnderscore)
Definition: util.cpp:5242
static bool insertMapFile(FTextStream &out, const QCString &mapFile, const QCString &relPath, const QCString &mapLabel)
Definition: dot.cpp:694
static bool checkAndUpdateMd5Signature(const QCString &baseName, const QCString &md5)
Definition: dot.cpp:731
Definition: dot.h:356
uint length() const
Definition: qgstring.h:40
void write(FTextStream &t, GraphType gt, GraphOutputFormat f, bool topDown, bool toChildren, bool backArrows, bool reNumber)
Definition: dot.cpp:1906
static bool checkDeliverables(const QCString &file1, const QCString &file2=QCString())
Definition: dot.cpp:758
#define IO_WriteOnly
Definition: qiodevice.h:62
Definition: dot.h:60
static DotManager * instance()
Definition: dot.cpp:1221
const bool FALSE
Definition: qglobal.h:370
boost::graph_traits< ModuleGraph >::edge_descriptor Edge
Definition: ModuleGraph.h:24
QCString label() const
Definition: dot.h:87
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
int addMap(const QCString &file, const QCString &mapFile, const QCString &relPath, bool urlOnly, const QCString &context, const QCString &label)
Definition: dot.cpp:1267
unsigned char uchar
Definition: nybbler.cc:11
QDict< DotNode > * m_usedNodes
Definition: dot.h:324
#define Config_getEnum(val)
Definition: config.cpp:663
static void removeDotGraph(const QCString &dotName)
Definition: dot.cpp:714
QCString m_diskName
Definition: dot.h:325
QList< Edge > m_edges
Definition: dot.h:326
fileName
Definition: dumpTree.py:9
void MD5Buffer(const unsigned char *buf, unsigned int len, unsigned char sig[16])
Definition: md5.c:275
static bool writeVecGfxFigure(FTextStream &out, const QCString &baseName, const QCString &figureName)
Definition: dot.cpp:518
int addFigure(const QCString &file, const QCString &baseName, const QCString &figureName, bool heightCheck)
Definition: dot.cpp:1280
#define Config_getBool(val)
Definition: config.cpp:664
QCString getDotImageExtension(void)
Definition: util.cpp:8562
#define MAP_CMD
Definition: dot.cpp:51
Definition: dot.h:42
void err(const char *fmt,...)
Definition: message.cpp:226
The QFile class is an I/O device that operates on files.
Definition: qfile.h:50
int addSVGObject(const QCString &file, const QCString &baseName, const QCString &figureNAme, const QCString &relPath)
Definition: dot.cpp:1305
static void writeGraphFooter(FTextStream &t)
Definition: dot.cpp:281
void addJob(const char *format, const char *output)
Definition: dot.cpp:807
void MD5SigToString(unsigned char signature[16], char *str, int len)
Definition: md5.c:285
static bool writeSVGFigureLink(FTextStream &out, const QCString &relPath, const QCString &baseName, const QCString &absImgName)
Definition: dot.cpp:618
void writeGraphHeader(FTextStream &t, const QCString &title) const
Definition: dot.cpp:4745
static QCString baseName
Definition: scanner.cpp:10890
Definition: dot.h:42
void addRun(DotRunner *run)
Definition: dot.cpp:1262
const bool TRUE
Definition: qglobal.h:371
QTextStream & endl(QTextStream &s)
void DotGroupCollaboration::writeGraphHeader ( FTextStream t,
const QCString title 
) const
private

Definition at line 4745 of file dot.cpp.

4747 {
4748  t << "digraph ";
4749  if (title.isEmpty())
4750  {
4751  t << "\"Dot Graph\"";
4752  }
4753  else
4754  {
4755  t << "\"" << convertToXML(title) << "\"";
4756  }
4757  t << endl;
4758  t << "{" << endl;
4759  if (Config_getBool("DOT_TRANSPARENT"))
4760  {
4761  t << " bgcolor=\"transparent\";" << endl;
4762  }
4763  t << " edge [fontname=\"" << FONTNAME << "\",fontsize=\"" << FONTSIZE << "\","
4764  "labelfontname=\"" << FONTNAME << "\",labelfontsize=\"" << FONTSIZE << "\"];\n";
4765  t << " node [fontname=\"" << FONTNAME << "\",fontsize=\"" << FONTSIZE << "\",shape=record];\n";
4766  t << " rankdir=LR;\n";
4767 }
QCString convertToXML(const char *s)
Definition: util.cpp:5717
bool isEmpty() const
Definition: qcstring.h:189
#define FONTNAME
Definition: dot.cpp:54
#define Config_getBool(val)
Definition: config.cpp:664
#define FONTSIZE
Definition: dot.cpp:55
QTextStream & endl(QTextStream &s)

Member Data Documentation

int DotGroupCollaboration::m_curNodeId
private

Definition at line 323 of file dot.h.

QCString DotGroupCollaboration::m_diskName
private

Definition at line 325 of file dot.h.

QList<Edge> DotGroupCollaboration::m_edges
private

Definition at line 326 of file dot.h.

DotNode* DotGroupCollaboration::m_rootNode
private

Definition at line 322 of file dot.h.

QDict<DotNode>* DotGroupCollaboration::m_usedNodes
private

Definition at line 324 of file dot.h.


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