|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* $Id$
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef _GRAPHHANDLER_H
|
|
Packit |
1c1d7e |
#define _GRAPHHANDLER_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "stringimpl.h"
|
|
Packit |
1c1d7e |
#include "doxmlintf.h"
|
|
Packit |
1c1d7e |
#include "basehandler.h"
|
|
Packit |
1c1d7e |
#include "baseiterator.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class NodeHandler;
|
|
Packit |
1c1d7e |
class ChildNodeHandler;
|
|
Packit |
1c1d7e |
class EdgeLabelHandler;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class GraphHandler : public IGraph, public BaseHandler<GraphHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
friend class NodeIterator;
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
GraphHandler(IBaseHandler *parent,const char *endTag);
|
|
Packit |
1c1d7e |
virtual ~GraphHandler();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void startGraph(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endGraph();
|
|
Packit |
1c1d7e |
void startNode(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
NodeHandler *getNodeById(const QString &id) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// IGraph
|
|
Packit |
1c1d7e |
virtual INodeIterator *nodes() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
IBaseHandler *m_parent;
|
|
Packit |
1c1d7e |
QList<NodeHandler> m_nodes;
|
|
Packit |
1c1d7e |
QDict<NodeHandler> *m_nodeDict;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//----------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class NodeHandler : public INode, public BaseHandler<NodeHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
friend class ChildNodeIterator;
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
NodeHandler(GraphHandler *gh);
|
|
Packit |
1c1d7e |
virtual ~NodeHandler();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void startNode(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endNode();
|
|
Packit |
1c1d7e |
void startLabel(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endLabel();
|
|
Packit |
1c1d7e |
void startLink(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endLink();
|
|
Packit |
1c1d7e |
void startChildNode(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// INode
|
|
Packit |
1c1d7e |
virtual const IString *id() const { return &m_id; }
|
|
Packit |
1c1d7e |
virtual const IString *label() const { return &m_label; }
|
|
Packit |
1c1d7e |
virtual const IString *linkId() const { return &m_link; }
|
|
Packit |
1c1d7e |
virtual IChildNodeIterator *children() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
IBaseHandler *m_parent;
|
|
Packit |
1c1d7e |
StringImpl m_id;
|
|
Packit |
1c1d7e |
StringImpl m_label;
|
|
Packit |
1c1d7e |
StringImpl m_link;
|
|
Packit |
1c1d7e |
QList<ChildNodeHandler> m_children;
|
|
Packit |
1c1d7e |
GraphHandler *m_graph;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class NodeIterator : public BaseIterator<INodeIterator,INode,NodeHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
NodeIterator(const GraphHandler &handler) :
|
|
Packit |
1c1d7e |
BaseIterator<INodeIterator,INode,NodeHandler>(handler.m_nodes) {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//----------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class ChildNodeHandler : public IChildNode, public BaseHandler<ChildNodeHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
friend class EdgeLabelIterator;
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ChildNodeHandler(IBaseHandler *parent,GraphHandler *gh);
|
|
Packit |
1c1d7e |
virtual ~ChildNodeHandler();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void startChildNode(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endChildNode();
|
|
Packit |
1c1d7e |
void startEdgeLabel(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// IChildNode
|
|
Packit |
1c1d7e |
virtual INode *node() const;
|
|
Packit |
1c1d7e |
virtual NodeRelation relation() const { return m_relation; }
|
|
Packit |
1c1d7e |
virtual const IString * relationString() const { return &m_relationString; }
|
|
Packit |
1c1d7e |
virtual IEdgeLabelIterator *edgeLabels() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
IBaseHandler *m_parent;
|
|
Packit |
1c1d7e |
QString m_id;
|
|
Packit |
1c1d7e |
NodeRelation m_relation;
|
|
Packit |
1c1d7e |
StringImpl m_relationString;
|
|
Packit |
1c1d7e |
QList<EdgeLabelHandler> m_edgeLabels;
|
|
Packit |
1c1d7e |
GraphHandler *m_graph;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class ChildNodeIterator : public BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ChildNodeIterator(const NodeHandler &handler) :
|
|
Packit |
1c1d7e |
BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>(handler.m_children) {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//----------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class EdgeLabelHandler : public IEdgeLabel, public BaseHandler<EdgeLabelHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
friend class EdgeLabelIterator;
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
EdgeLabelHandler(IBaseHandler *parent);
|
|
Packit |
1c1d7e |
virtual ~EdgeLabelHandler();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void startEdgeLabel(const QXmlAttributes &attrib);
|
|
Packit |
1c1d7e |
void endEdgeLabel();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// IEdgeLabel
|
|
Packit |
1c1d7e |
virtual const IString *label() const { return &m_label; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
IBaseHandler *m_parent;
|
|
Packit |
1c1d7e |
StringImpl m_label;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class EdgeLabelIterator : public BaseIterator<IEdgeLabelIterator,IEdgeLabel,EdgeLabelHandler>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
EdgeLabelIterator(const ChildNodeHandler &handler) :
|
|
Packit |
1c1d7e |
BaseIterator<IEdgeLabelIterator,IEdgeLabel,EdgeLabelHandler>(handler.m_edgeLabels) {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void graphhandler_init();
|
|
Packit |
1c1d7e |
void graphhandler_exit();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|