All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Protected Member Functions
QGpCoreTools::XMLMap< Key, T > Class Template Reference

Save/Restore a QMap to a XML stream. More...

#include <XMLMap.h>

Inheritance diagram for QGpCoreTools::XMLMap< Key, T >:
QGpCoreTools::XMLClass

List of all members.

Public Member Functions

QMap< Key, T > * map ()
virtual const QString & xml_tagName () const
 XMLMap (QString tag, QMap< Key, T > *map)
 XMLMap (QString tag, const QMap< Key, T > *map)

Protected Member Functions

virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual bool xml_setProperty (XML_SETPROPERTY_ARGS)
virtual void xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const

Detailed Description

template<class Key, class T>
class QGpCoreTools::XMLMap< Key, T >

Save/Restore a QMap to a XML stream.


Constructor & Destructor Documentation

template<class Key , class T >
QGpCoreTools::XMLMap< Key, T >::XMLMap ( QString  tag,
QMap< Key, T > *  map 
)

Description of constructor still missing

{
  _tag=tag;
  _map=map;
}
template<class Key , class T >
QGpCoreTools::XMLMap< Key, T >::XMLMap ( QString  tag,
const QMap< Key, T > *  map 
)
{
  _tag=tag;
  _map=const_cast<QMap<Key,T> *>(map);
}

Member Function Documentation

template<class Key , class T >
QMap<Key,T>* QGpCoreTools::XMLMap< Key, T >::map ( ) [inline]
{return _map;}
template<class Key , class T >
XMLMember QGpCoreTools::XMLMap< Key, T >::xml_member ( XML_MEMBER_ARGS  ) [protected, virtual]

Re-implement this function to offer XML restore (children and properties) support to your class.

From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:

  • An integer: id number of a property
  • A XMLClass * : a child of this object identified by tag
  • Default constructor: error, unknow child or property

Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):

    static const QString tmp("childrenName");
    XMLRestoreAttributeIterator it=map.find(tmp);
    if(it!=map.end()) {
      // found attribute "childrenName"
    }

If the map of attributes is not used:

    Q_UNUSED(attributes);
    if(tag=="x1") return XMLMember(0);
    else if(tag=="y1") return XMLMember(1);
    else if(tag=="x2") return XMLMember(2);
    else if(tag=="y2") return XMLMember(3);
    else return XMLMember(XMLMember::Unknown);

Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.

    if(tag=="anInteger") return XMLMember(0);
    else if(tag=="aString") return XMLMember(1);
    else if(tag=="aDouble") return XMLMember(2);
    return AbstractLine::xml_member(tag, attributes, context)+3;

For the arguments of this function use Macro XML_MEMBER_ARGS.

Reimplemented from QGpCoreTools::XMLClass.

References TRACE, and QGpCoreTools::XMLMember::Unknown.

{
  TRACE;
  Q_UNUSED(attributes);
  Q_UNUSED(context);
  if(tag=="value" ) return XMLMember(0);
  return XMLMember(XMLMember::Unknown);
}
template<class Key , class T >
bool QGpCoreTools::XMLMap< Key, T >::xml_setProperty ( XML_SETPROPERTY_ARGS  ) [protected, virtual]

Re-implement this function to offer XML restore properties support to your class.

From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).

For a general case:

  Q_UNUSED(attributes);
  double val=content.toDouble();
  switch (memberID) {
  case 0:
    _x1=val;
    return true;
  case 1:
    _y1=val;
    return true;
  case 2:
    _x2=val;
    return true;
  case 3:
    _y2=val;
    return true;
  default:
    return false;
  }

For classes inheriting other classes (see also xml_member())

  switch (memberID) {
  case 0:
    _anInteger=content.toString();
    return true;
  case 1:
    _aString=content.toInt();
    return true;
  case 2:
    _aDouble=content.toDouble();
    return true;
  default:
    return AbstractLine::xml_setProperty(memberID-3, map, content);

For the arguments of this function use Macro XML_SETPROPERTY_ARGS.

Reimplemented from QGpCoreTools::XMLClass.

References TRACE.

{
  TRACE;
  Q_UNUSED(context);
  static const QString att="key";
  if(memberID==0) {
    XMLRestoreAttributeIterator it=attributes.find(att);
    if(it!=attributes.end()) {
      Key tmpKey;
      T tmpT;
      _map->insert(it.value().to(tmpKey), content.to(tmpT));
      return true;
    }
  }
  return false;
}
template<class Key , class T >
virtual const QString& QGpCoreTools::XMLMap< Key, T >::xml_tagName ( ) const [inline, virtual]

Implements QGpCoreTools::XMLClass.

{return _tag;}
template<class Key , class T >
void QGpCoreTools::XMLMap< Key, T >::xml_writeProperties ( XML_WRITEPROPERTIES_ARGS  ) const [protected, virtual]

Reimplemented from QGpCoreTools::XMLClass.

References QGpCoreTools::XMLSaveAttributes::add(), TRACE, and QGpCoreTools::XMLSaveAttributes::value().

{
  TRACE;
  Q_UNUSED(context);
  static const QString tag="value";
  static const QString key("key");
  XMLSaveAttributes att;
  QString& value=att.add(key);
  QMapIterator<Key,T> it(*_map);
  while(it.hasNext()) {
    it.next();
    value=it.key();
    writeProperty(s, tag, att, it.value());
  }
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines