⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphhandler.cpp

📁 Doxygen的词根来源于Document(文档)和Oxygen(氧气)
💻 CPP
字号:
#include "graphhandler.h"class EdgeRelationMapper{  public:    EdgeRelationMapper()    {      m_map.insert("public-inheritance",    IChildNode::PublicInheritance);      m_map.insert("protected-inheritance", IChildNode::ProtectedInheritance);      m_map.insert("private-inheritance",   IChildNode::PrivateInheritance);      m_map.insert("usage",                 IChildNode::Usage);      m_map.insert("template-instance",     IChildNode::TemplateInstance);    }    IChildNode::NodeRelation stringToNodeRelation(const QString &nrStr)    {      return m_map[nrStr];    }  private:    QMap<QString,IChildNode::NodeRelation> m_map;};static EdgeRelationMapper *s_edgeRelationMapper;void graphhandler_init(){  s_edgeRelationMapper = new EdgeRelationMapper;}void graphhandler_exit(){  delete s_edgeRelationMapper;}//------------------------------------------------------------------------GraphHandler::GraphHandler(IBaseHandler *parent,const char *endTag)   : m_parent(parent){  addEndHandler(endTag,this,&GraphHandler::endGraph);  addStartHandler("node",this,&GraphHandler::startNode);  m_nodes.setAutoDelete(TRUE);  m_nodeDict = new QDict<NodeHandler>(1009);}GraphHandler::~GraphHandler(){  delete m_nodeDict;}void GraphHandler::startGraph(const QXmlAttributes &){  debug(2,"startGraph\n");  m_parent->setDelegate(this);}void GraphHandler::endGraph(){  debug(2,"endGraph\n");  m_parent->setDelegate(0);}void GraphHandler::startNode(const QXmlAttributes &attrib){  NodeHandler *n = new NodeHandler(this);  n->startNode(attrib);  m_nodes.append(n);  m_nodeDict->insert(attrib.value("id"),n);}INodeIterator *GraphHandler::nodes() const{  return new NodeIterator(*this);}NodeHandler *GraphHandler::getNodeById(const QString &id) const{  return m_nodeDict->find(id);}//------------------------------------------------------------------------NodeHandler::NodeHandler(GraphHandler *gh)   : m_parent(gh), m_graph(gh){  addEndHandler("node",this,&NodeHandler::endNode);  addStartHandler("link",this,&NodeHandler::startLink);  addEndHandler("link",this,&NodeHandler::endLink);  addStartHandler("label",this,&NodeHandler::startLabel);  addEndHandler("label",this,&NodeHandler::endLabel);  addStartHandler("childnode",this,&NodeHandler::startChildNode);  m_children.setAutoDelete(TRUE);}NodeHandler::~NodeHandler(){}void NodeHandler::startNode(const QXmlAttributes &attrib){  debug(2,"startNode\n");  m_parent->setDelegate(this);  m_id = attrib.value("id");}void NodeHandler::endNode(){  debug(2,"endNode\n");  m_parent->setDelegate(0);}void NodeHandler::startLink(const QXmlAttributes &attrib){  m_link = attrib.value("refid");}void NodeHandler::endLink(){}void NodeHandler::startLabel(const QXmlAttributes &/*attrib*/){  m_curString="";}void NodeHandler::endLabel(){  m_label = m_curString;}void NodeHandler::startChildNode(const QXmlAttributes &attrib){  ChildNodeHandler *cnh = new ChildNodeHandler(this,m_graph);  cnh->startChildNode(attrib);  m_children.append(cnh);}  IChildNodeIterator *NodeHandler::children() const {   return new ChildNodeIterator(*this); }//------------------------------------------------------------------------ChildNodeHandler::ChildNodeHandler(IBaseHandler *parent,GraphHandler *gh)  : m_parent(parent), m_graph(gh){  addEndHandler("childnode",this,&ChildNodeHandler::endChildNode);  addStartHandler("edgelabel",this,&ChildNodeHandler::startEdgeLabel);  m_edgeLabels.setAutoDelete(TRUE);}ChildNodeHandler::~ChildNodeHandler(){}void ChildNodeHandler::startChildNode(const QXmlAttributes &attrib){  debug(2,"startChildNode\n");  m_id             = attrib.value("refid");  m_relationString = attrib.value("relation");  m_relation       = s_edgeRelationMapper->stringToNodeRelation(m_relationString);  m_parent->setDelegate(this);}void ChildNodeHandler::endChildNode(){  debug(2,"endChildNode\n");  m_parent->setDelegate(0);}void ChildNodeHandler::startEdgeLabel(const QXmlAttributes &attrib){  EdgeLabelHandler *elh = new EdgeLabelHandler(this);  elh->startEdgeLabel(attrib);  m_edgeLabels.append(elh);}IEdgeLabelIterator *ChildNodeHandler::edgeLabels() const{  return new EdgeLabelIterator(*this);}INode *ChildNodeHandler::node() const{  return m_graph->getNodeById(m_id);}//-----------------------------------------------------------------------EdgeLabelHandler::EdgeLabelHandler(IBaseHandler *parent)  : m_parent(parent){  addEndHandler("edgelabel",this,&EdgeLabelHandler::endEdgeLabel);}EdgeLabelHandler::~EdgeLabelHandler(){}void EdgeLabelHandler::startEdgeLabel(const QXmlAttributes &){  m_parent->setDelegate(this);  m_curString="";}void EdgeLabelHandler::endEdgeLabel(){  m_label=m_curString;  m_parent->setDelegate(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -