diff -r 50e7ff3a0366 src/config-store/model/attribute-default-iterator.cc --- a/src/config-store/model/attribute-default-iterator.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/attribute-default-iterator.cc Mon Oct 22 16:00:38 2012 +0200 @@ -112,6 +112,11 @@ } void +AttributeDefaultIterator::DoVisitAttributeReadOnly (std::string name, std::string defaultValue) +{ +} + +void AttributeDefaultIterator::VisitAttribute (TypeId tid, std::string name, std::string defaultValue, uint32_t index) { DoVisitAttribute (name, defaultValue); diff -r 50e7ff3a0366 src/config-store/model/attribute-default-iterator.h --- a/src/config-store/model/attribute-default-iterator.h Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/attribute-default-iterator.h Mon Oct 22 16:00:38 2012 +0200 @@ -53,6 +53,10 @@ * \brief This method is just an interface and needs to be implemented */ virtual void DoVisitAttribute (std::string name, std::string defaultValue); + /** + * \brief This method is just an interface and needs to be implemented + */ + virtual void DoVisitAttributeReadOnly (std::string name, std::string defaultValue); }; } // namespace ns3 diff -r 50e7ff3a0366 src/config-store/model/attribute-iterator.cc --- a/src/config-store/model/attribute-iterator.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/attribute-iterator.cc Mon Oct 22 16:00:38 2012 +0200 @@ -134,6 +134,14 @@ } void +AttributeIterator::VisitAttributeReadOnly (Ptr object, std::string name) +{ + m_currentPath.push_back (name); + DoVisitAttributeReadOnly (object, name); + m_currentPath.pop_back (); +} + +void AttributeIterator::StartVisitObject (Ptr object) { m_currentPath.push_back ("$" + object->GetInstanceTypeId ().GetName ()); @@ -250,6 +258,10 @@ { VisitAttribute (object, info.name); } + else if ((info.flags & TypeId::ATTR_GET) && info.accessor->HasGetter ()) + { + VisitAttributeReadOnly (object, info.name); + } else { NS_LOG_DEBUG ("could not store " << info.name); diff -r 50e7ff3a0366 src/config-store/model/attribute-iterator.h --- a/src/config-store/model/attribute-iterator.h Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/attribute-iterator.h Mon Oct 22 16:00:38 2012 +0200 @@ -42,6 +42,7 @@ std::string GetCurrentPath (void) const; private: virtual void DoVisitAttribute (Ptr object, std::string name) = 0; + virtual void DoVisitAttributeReadOnly (Ptr object, std::string name) = 0; virtual void DoStartVisitObject (Ptr object); virtual void DoEndVisitObject (void); virtual void DoStartVisitPointerAttribute (Ptr object, std::string name, Ptr value); @@ -56,6 +57,7 @@ std::string GetCurrentPath (std::string attr) const; void VisitAttribute (Ptr object, std::string name); + void VisitAttributeReadOnly (Ptr object, std::string name); void StartVisitObject (Ptr object); void EndVisitObject (void); void StartVisitPointerAttribute (Ptr object, std::string name, Ptr value); diff -r 50e7ff3a0366 src/config-store/model/display-functions.cc --- a/src/config-store/model/display-functions.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/display-functions.cc Mon Oct 22 16:00:38 2012 +0200 @@ -40,6 +40,13 @@ g_object_set (renderer, "text", str.Get ().c_str (), (char*) 0); g_object_set (renderer, "editable", TRUE, (char*) 0); } + else if (node->type == ModelNode::NODE_ATTRIBUTE_READ_ONLY) + { + StringValue str; + node->object->GetAttribute (node->name, str); + g_object_set (renderer, "text", str.Get ().c_str (), (char*) 0); + g_object_set (renderer, "editable", FALSE, (char*) 0); + } else { g_object_set (renderer, "text", "", (char*) 0); @@ -76,6 +83,7 @@ } break; case ModelNode::NODE_ATTRIBUTE: + case ModelNode::NODE_ATTRIBUTE_READ_ONLY: g_object_set (renderer, "text", node->name.c_str (), (char*) 0); break; } @@ -173,6 +181,7 @@ } break; case ModelNode::NODE_ATTRIBUTE: + case ModelNode::NODE_ATTRIBUTE_READ_ONLY: { uint32_t attrIndex = 0; TypeId tid; diff -r 50e7ff3a0366 src/config-store/model/model-node-creator.cc --- a/src/config-store/model/model-node-creator.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/model-node-creator.cc Mon Oct 22 16:00:38 2012 +0200 @@ -64,6 +64,18 @@ Add (node); Remove (); } + +void +ModelCreator::DoVisitAttributeReadOnly (Ptr object, std::string name) +{ + ModelNode *node = new ModelNode (); + node->type = ModelNode::NODE_ATTRIBUTE_READ_ONLY; + node->object = object; + node->name = name; + Add (node); + Remove (); +} + void ModelCreator::DoStartVisitObject (Ptr object) { diff -r 50e7ff3a0366 src/config-store/model/model-node-creator.h --- a/src/config-store/model/model-node-creator.h Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/model-node-creator.h Mon Oct 22 16:00:38 2012 +0200 @@ -35,6 +35,8 @@ // store object + attribute name NODE_ATTRIBUTE, // store object + attribute name + NODE_ATTRIBUTE_READ_ONLY, + // store object + attribute name NODE_POINTER, // store object + attribute name NODE_VECTOR, @@ -59,6 +61,7 @@ void Build (GtkTreeStore *treestore); private: virtual void DoVisitAttribute (Ptr object, std::string name); + virtual void DoVisitAttributeReadOnly (Ptr object, std::string name); virtual void DoStartVisitObject (Ptr object); virtual void DoEndVisitObject (void); virtual void DoStartVisitPointerAttribute (Ptr object, std::string name, Ptr value); diff -r 50e7ff3a0366 src/config-store/model/raw-text-config.cc --- a/src/config-store/model/raw-text-config.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/raw-text-config.cc Mon Oct 22 16:00:38 2012 +0200 @@ -76,6 +76,9 @@ object->GetAttribute (name, str); *m_os << "value " << GetCurrentPath () << " \"" << str.Get () << "\"" << std::endl; } + virtual void DoVisitAttributeReadOnly (Ptr object, std::string name) { + } + std::ostream *m_os; }; diff -r 50e7ff3a0366 src/config-store/model/xml-config.cc --- a/src/config-store/model/xml-config.cc Tue Aug 28 15:46:47 2012 +0200 +++ b/src/config-store/model/xml-config.cc Mon Oct 22 16:00:38 2012 +0200 @@ -159,6 +159,9 @@ NS_FATAL_ERROR ("Error at xmlTextWriterEndElement"); } } + virtual void DoVisitAttributeReadOnly (Ptr object, std::string name) { + } + xmlTextWriterPtr m_writer; };