1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
/******************************************************************************
*
* $Id$
*
*
* Copyright (C) 1997-2002 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _GRAPHHANDLER_H
#define _GRAPHHANDLER_H
#include "doxmlintf.h"
#include "basehandler.h"
#include "baseiterator.h"
class NodeHandler;
class ChildNodeHandler;
class GraphHandler : public IGraph, public BaseHandler<GraphHandler>
{
friend class NodeIterator;
public:
GraphHandler(IBaseHandler *parent,const char *endTag);
virtual ~GraphHandler();
void startGraph(const QXmlAttributes &attrib);
void endGraph();
void startNode(const QXmlAttributes &attrib);
// IGraph
virtual INodeIterator *nodes() const;
private:
IBaseHandler *m_parent;
QList<NodeHandler> m_nodes;
};
//----------------------------------------------------------------------
class NodeHandler : public INode, public BaseHandler<NodeHandler>
{
friend class ChildNodeIterator;
public:
NodeHandler(IBaseHandler *parent);
virtual ~NodeHandler();
void startNode(const QXmlAttributes &attrib);
void endNode();
void startLabel(const QXmlAttributes &attrib);
void endLabel();
void startLink(const QXmlAttributes &attrib);
void endLink();
// INode
virtual QString id() const { return m_id; }
virtual QString label() const { return m_label; }
virtual QString linkId() const { return m_link; }
virtual IChildNodeIterator *children() const { return 0; } // TODO: implement
private:
IBaseHandler *m_parent;
QString m_id;
QString m_label;
QString m_link;
QList<ChildNodeHandler> m_children;
};
class NodeIterator : public BaseIterator<INodeIterator,INode,NodeHandler>
{
public:
NodeIterator(const GraphHandler &handler) :
BaseIterator<INodeIterator,INode,NodeHandler>(handler.m_nodes) {}
};
//----------------------------------------------------------------------
class ChildNodeHandler : public IChildNode, public BaseHandler<ChildNodeHandler>
{
public:
ChildNodeHandler(IBaseHandler *parent);
virtual ~ChildNodeHandler();
void startChildNode(const QXmlAttributes &attrib);
void endChildNode();
// IChildNode
virtual QString id() const { return m_id; }
private:
IBaseHandler *m_parent;
QString m_id;
};
class ChildNodeIterator : public BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>
{
public:
ChildNodeIterator(const NodeHandler &handler) :
BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>(handler.m_children) {}
};
#endif
|