1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
|
2 /* |
|
3 * This program is free software; you can redistribute it and/or modify |
|
4 * it under the terms of the GNU General Public License version 2 as |
|
5 * published by the Free Software Foundation; |
|
6 * |
|
7 * This program is distributed in the hope that it will be useful, |
|
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
10 * GNU General Public License for more details. |
|
11 * |
|
12 * You should have received a copy of the GNU General Public License |
|
13 * along with this program; if not, write to the Free Software |
|
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
15 * |
|
16 * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr> |
|
17 * Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
|
18 */ |
|
19 |
|
20 #include "model-node-creator.h" |
|
21 namespace ns3 { |
|
22 |
|
23 ModelCreator::ModelCreator () |
|
24 { |
|
25 } |
|
26 void |
|
27 |
|
28 ModelCreator::Build (GtkTreeStore *treestore) |
|
29 { |
|
30 m_treestore = treestore; |
|
31 m_iters.push_back (0); |
|
32 //this function will go through all the objects and call on them |
|
33 //DoStartVisitObject, DoIterate and DoEndVisitObject |
|
34 Iterate (); |
|
35 NS_ASSERT (m_iters.size () == 1); |
|
36 } |
|
37 |
|
38 |
|
39 void |
|
40 ModelCreator::Add (ModelNode *node) |
|
41 { |
|
42 GtkTreeIter *parent = m_iters.back (); |
|
43 GtkTreeIter *current = g_new (GtkTreeIter, 1); |
|
44 gtk_tree_store_append (m_treestore, current, parent); |
|
45 gtk_tree_store_set (m_treestore, current, |
|
46 COL_NODE, node, -1); |
|
47 m_iters.push_back (current); |
|
48 } |
|
49 void |
|
50 ModelCreator::Remove (void) |
|
51 { |
|
52 GtkTreeIter *iter = m_iters.back (); |
|
53 g_free (iter); |
|
54 m_iters.pop_back (); |
|
55 } |
|
56 |
|
57 void |
|
58 ModelCreator::DoVisitAttribute (Ptr<Object> object, std::string name) |
|
59 { |
|
60 ModelNode *node = new ModelNode (); |
|
61 node->type = ModelNode::NODE_ATTRIBUTE; |
|
62 node->object = object; |
|
63 node->name = name; |
|
64 Add (node); |
|
65 Remove (); |
|
66 } |
|
67 void |
|
68 ModelCreator::DoStartVisitObject (Ptr<Object> object) |
|
69 { |
|
70 ModelNode *node = new ModelNode (); |
|
71 node->type = ModelNode::NODE_OBJECT; |
|
72 node->object = object; |
|
73 Add (node); |
|
74 } |
|
75 void |
|
76 ModelCreator::DoEndVisitObject (void) |
|
77 { |
|
78 Remove (); |
|
79 } |
|
80 void |
|
81 ModelCreator::DoStartVisitPointerAttribute (Ptr<Object> object, std::string name, Ptr<Object> value) |
|
82 { |
|
83 ModelNode *node = new ModelNode (); |
|
84 node->type = ModelNode::NODE_POINTER; |
|
85 node->object = object; |
|
86 node->name = name; |
|
87 Add (node); |
|
88 } |
|
89 void |
|
90 ModelCreator::DoEndVisitPointerAttribute (void) |
|
91 { |
|
92 Remove (); |
|
93 } |
|
94 void |
|
95 ModelCreator::DoStartVisitArrayAttribute (Ptr<Object> object, std::string name, const ObjectVectorValue &vector) |
|
96 { |
|
97 ModelNode *node = new ModelNode (); |
|
98 node->type = ModelNode::NODE_VECTOR; |
|
99 node->object = object; |
|
100 node->name = name; |
|
101 Add (node); |
|
102 } |
|
103 void |
|
104 ModelCreator::DoEndVisitArrayAttribute (void) |
|
105 { |
|
106 Remove (); |
|
107 } |
|
108 void |
|
109 ModelCreator::DoStartVisitArrayItem (const ObjectVectorValue &vector, uint32_t index, Ptr<Object> item) |
|
110 { |
|
111 GtkTreeIter *parent = m_iters.back (); |
|
112 GtkTreeIter *current = g_new (GtkTreeIter, 1); |
|
113 ModelNode *node = new ModelNode (); |
|
114 node->type = ModelNode::NODE_VECTOR_ITEM; |
|
115 node->object = item; |
|
116 node->index = index; |
|
117 gtk_tree_store_append (m_treestore, current, parent); |
|
118 gtk_tree_store_set (m_treestore, current, |
|
119 COL_NODE, node, |
|
120 -1); |
|
121 m_iters.push_back (current); |
|
122 } |
|
123 void |
|
124 ModelCreator::DoEndVisitArrayItem (void) |
|
125 { |
|
126 GtkTreeIter *iter = m_iters.back (); |
|
127 g_free (iter); |
|
128 m_iters.pop_back (); |
|
129 } |
|
130 }//end namespace ns3 |
|