00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GLUON_CORE_GLUONOBJECT_H
00020 #define GLUON_CORE_GLUONOBJECT_H
00021
00022 #include "gluonobjectfactory.h"
00023 #include "gluon_core_export.h"
00024
00025 #include <QtCore/QObject>
00026 #include <QtCore/QSharedData>
00027 #include <QtCore/QList>
00028 #include <QtCore/QUrl>
00029 #include <QtCore/QStringList>
00030 #include <QtCore/QVariant>
00031
00032 Q_DECLARE_METATYPE( QList<QUrl> )
00033
00034
00055 #define GLUON_OBJECT(CLASSNAME)\
00056 public:\
00057 virtual GluonCore::GluonObject* instantiate();\
00058 virtual GluonCore::GluonObject* fromVariant(const QVariant &wrappedObject);\
00059 virtual QVariant toVariant(GluonCore::GluonObject *wrapThis);\
00060 private:
00061
00062 namespace GluonCore
00063 {
00064 class GameProject;
00065 class GluonObjectPrivate;
00066 class MetaInfo;
00067
00133 class GLUON_CORE_EXPORT GluonObject : public QObject
00134 {
00135 Q_OBJECT
00147 Q_PROPERTY( QString name READ name WRITE setName )
00148
00149 GLUON_OBJECT( GluonCore::GluonObject );
00150
00151 public:
00152 Q_INVOKABLE GluonObject( QObject* parent = 0 );
00153 explicit GluonObject( const QString& name, QObject* parent = 0 );
00154 GluonObject( const GluonObject& rt );
00155 virtual ~GluonObject();
00156
00163 Q_INVOKABLE void debug( const QString& debugText ) const;
00164
00172 Q_INVOKABLE void debug( const QString& debugText, const QString& arg ) const;
00173
00179 Q_SIGNAL void showDebug( const QString& debugText ) const;
00180
00187 Q_INVOKABLE GluonObject* clone() const;
00194 Q_INVOKABLE GluonObject* clone( GluonObject* parentObject ) const;
00195
00201 virtual QString name() const;
00207 virtual void setName( const QString& newName );
00214 QString fullyQualifiedName() const;
00224 QString fullyQualifiedFileName() const;
00225
00235 virtual const QStringList supportedMimeTypes() const;
00236
00245 GluonObject* gameProject() const;
00254 void setGameProject( GluonObject* newGameProject );
00255
00262 Q_INVOKABLE MetaInfo* metaInfo();
00269 Q_INVOKABLE bool hasMetaInfo() const;
00270
00275 virtual QString toGDL( int indentLevel = 0 ) const;
00276 virtual QString childrenToGDL( int indentLevel = 0 ) const;
00277 virtual QString propertiesToGDL( int indentLevel = 0 ) const;
00278
00279 virtual void setPropertyFromString( const QString& propertyName, const QString& propertyValue );
00280 virtual QString stringFromProperty( const QString& propertyName, const QString& indentChars ) const;
00281
00282 virtual void sanitize();
00283
00284
00285
00286
00287
00296 Q_INVOKABLE GluonObject* findItemByName( QString qualifiedName );
00302 Q_INVOKABLE virtual GluonObject* root();
00303
00312 virtual void addChild( GluonObject* child );
00319 virtual bool removeChild( GluonObject* child );
00326 virtual GluonObject* child( int index ) const;
00333 virtual GluonObject* child( const QString& name ) const;
00334
00335 protected:
00345 static GluonObject* findItemByNameInObject( QStringList qualifiedName, GluonCore::GluonObject* object );
00351 virtual void postCloneSanitize() {};
00352
00353 private:
00354 void sanitizeReference( const QString& propName, const QString& propValue );
00355
00356 QSharedDataPointer<GluonObjectPrivate> d;
00357 };
00358 }
00359
00360 Q_DECLARE_METATYPE( GluonCore::GluonObject )
00361 Q_DECLARE_METATYPE( GluonCore::GluonObject* )
00362
00363 #endif // GLUON_CORE_GLUONOBJECT_H