insilmaril@616: #ifndef ATTRIBUTE_H insilmaril@616: #define ATTRIBUTE_H insilmaril@616: insilmaril@616: #include insilmaril@636: #include insilmaril@616: insilmaril@616: #include "xmlobj.h" insilmaril@616: insilmaril@626: class AttributeTable; insilmaril@636: class AttributeDef; insilmaril@616: insilmaril@636: enum AttributeType { insilmaril@636: Undefined, //!< Undefined type insilmaril@636: StringList, //!< List of strings, one can be attribute value insilmaril@636: FreeString, //!< Any string can be attribute value, not unique insilmaril@636: UniqueString//!< UniqueString, e.g. for IDs insilmaril@636: }; insilmaril@636: insilmaril@636: /*! \brief A key and a value insilmaril@636: The data itself is stored in Attribute Definitions (AttributeDef). A list of these tables insilmaril@636: AttributeTable is maintained for every MapEditor. insilmaril@616: */ insilmaril@616: class Attribute:public XMLObj { insilmaril@616: public: insilmaril@616: Attribute(); insilmaril@636: void setKey (const QString &k, const AttributeType &t); insilmaril@626: QString getKey (); insilmaril@626: void setValue (const QString &v); insilmaril@636: QVariant getValue (); insilmaril@636: void setType (const AttributeType &t); insilmaril@636: AttributeType getType (); insilmaril@636: QString getTypeString (); insilmaril@626: void setTable (AttributeTable *at); insilmaril@626: AttributeTable* getTable(); insilmaril@626: QString getDataXML(); insilmaril@616: protected: insilmaril@636: AttributeTable *table; insilmaril@636: AttributeDef *definition; insilmaril@636: QString freeString; //!< String value for type FreeString insilmaril@636: }; insilmaril@636: insilmaril@636: insilmaril@636: /*! \brief insilmaril@636: Attribute definition, defines possible values and type of attribute. insilmaril@636: */ insilmaril@636: class AttributeDef { insilmaril@636: public: insilmaril@636: AttributeDef(); insilmaril@636: ~AttributeDef(); insilmaril@636: void setType (const AttributeType &t); insilmaril@636: AttributeType getType(); insilmaril@636: QString getTypeString (); insilmaril@636: void setKey (const QString &k); insilmaril@636: QString getKey (); insilmaril@636: void setValue (const QString &v); insilmaril@636: void setValue (const QVariant &v); insilmaril@636: QVariant getValue (); insilmaril@636: private: insilmaril@616: QString key; insilmaril@636: AttributeType type; insilmaril@636: insilmaril@636: QVariant value; //!< value (except FreeString, FreeInt ... insilmaril@616: }; insilmaril@616: insilmaril@616: /*! \brief A table containing a list of keys and each of these keys has insilmaril@616: a list of default values. The keys and the values for each key are insilmaril@616: unique. insilmaril@616: */ insilmaril@636: insilmaril@616: class AttributeTable:public XMLObj{ insilmaril@616: public: insilmaril@616: AttributeTable(); insilmaril@626: ~AttributeTable(); insilmaril@626: void clear(); insilmaril@636: AttributeDef* addKey (const QString &k, const AttributeType &t); //!< Adds a key to the table insilmaril@626: void removeKey (const QString &k); //!< Removes key and its default values insilmaril@636: AttributeDef* getDef(const QString &k); //!< Get defintion of attribute insilmaril@626: int countKeys(); //!< Return number of keys insilmaril@626: QStringList getKeys (); insilmaril@626: QString getDataXML(); insilmaril@616: insilmaril@616: protected: insilmaril@636: QList attdefs; insilmaril@616: }; insilmaril@616: insilmaril@616: insilmaril@616: insilmaril@616: #endif insilmaril@616: