diff options
author | John Tapsell <john.tapsell.ext@basyskom.de> | 2010-08-20 18:37:22 +0900 |
---|---|---|
committer | Tomas Junnonen <tomas.junnonen@nokia.com> | 2010-08-20 16:56:56 +0300 |
commit | d5e7f2bf126f150cf2e0db02fc31a58ed508c654 (patch) | |
tree | c7286ab6a4dfcc5c1443700d9612574e2b52c7aa | |
parent | ff79318ae1002610877d1ea79312d886b59e4294 (diff) |
Changes: mgen - add ability to have a custom destructor
RevBy: Armin Berres
-rw-r--r-- | mgen/mgen_processor.cpp | 32 | ||||
-rw-r--r-- | src/corelib/widgets/mdialogmodel.cpp | 6 | ||||
-rw-r--r-- | src/corelib/widgets/mdialogmodel.h | 1 | ||||
-rw-r--r-- | src/corelib/widgets/mwidgetmodel.h | 2 |
4 files changed, 33 insertions, 8 deletions
diff --git a/mgen/mgen_processor.cpp b/mgen/mgen_processor.cpp index 0d147f46..ac7ad24f 100644 --- a/mgen/mgen_processor.cpp +++ b/mgen/mgen_processor.cpp @@ -141,11 +141,13 @@ public: ModelClass(const QString &name, const QString &superClassName, bool generatePrivate, + bool generateDestructor, bool internal, const QList<ModelProperty>& properties) : m_name(name), m_superClassName(superClassName), m_generatePrivate(generatePrivate), + m_generateDestructor(generateDestructor), m_internal(internal), m_properties(properties) { } @@ -159,6 +161,9 @@ public: bool generatePrivate() const { return m_generatePrivate; } + bool generateDestructor() const { + return m_generateDestructor; + } bool internal() const { return m_internal; } @@ -169,6 +174,7 @@ private: QString m_name; QString m_superClassName; bool m_generatePrivate; + bool m_generateDestructor; bool m_internal; QList<ModelProperty> m_properties; }; @@ -300,6 +306,7 @@ ModelClass *parseModelClassHeader(const QString &modelHeader) QString className; QString superClassName; bool generatePrivate = false; + bool generateDestructor = true; bool internal = false; const QString spaces("\\s*"); @@ -457,7 +464,12 @@ ModelClass *parseModelClassHeader(const QString &modelHeader) anyParam + spaces + parenC + spaces ); + QRegExp destructorRegExp( + "M_MODEL_CUSTOM_DESTRUCTOR" + ); + if(line.indexOf(destructorRegExp, index) != -1) + generateDestructor = false; while (true) { int result = line.indexOf(propertyRegExp, index); int result2 = line.indexOf(propertyPtrRegExp, index); @@ -492,7 +504,7 @@ ModelClass *parseModelClassHeader(const QString &modelHeader) } } - return new ModelClass(className, superClassName, generatePrivate, internal, properties); + return new ModelClass(className, superClassName, generatePrivate, generateDestructor, internal, properties); } ////////////////////////// @@ -1059,6 +1071,7 @@ void generateModelDataCpp(const ModelClass *c, const QString &cppfilename) // static_cast<MButtonModelData*>(data)->iconID = "DEFAULT_B"; // } // + // ---- if(generateDestructor) ---- // MButtonModel::~MButtonModel() // { // ---- if(!internal) ---- @@ -1067,6 +1080,7 @@ void generateModelDataCpp(const ModelClass *c, const QString &cppfilename) // delete d_ptr; // ---- endif ---- // } + // ---- endif ---- // // ---- if(generatePrivate) ---- // MButtonModel::MButtonModel(MButtonModelData* data, MButtonModelPrivate* dd) : @@ -1172,15 +1186,17 @@ void generateModelDataCpp(const ModelClass *c, const QString &cppfilename) cpp << "}\n\n"; // destructor - cpp << c->name() << "::~" << c->name() << "()\n"; - cpp << "{\n"; - if (!c->internal()) { - cpp << " delete data;\n"; - if (c->generatePrivate()) { - cpp << " delete d_ptr;\n"; + if (c->generateDestructor()) { + cpp << c->name() << "::~" << c->name() << "()\n"; + cpp << "{\n"; + if (!c->internal()) { + cpp << " delete data;\n"; + if (c->generatePrivate()) { + cpp << " delete d_ptr;\n"; + } } + cpp << "}\n\n"; } - cpp << "}\n\n"; // protected constructor cpp << c->name() << "::" << c->name() << "(" << c->name() << "Data* data"; diff --git a/src/corelib/widgets/mdialogmodel.cpp b/src/corelib/widgets/mdialogmodel.cpp index 83f1771a..78d8061d 100644 --- a/src/corelib/widgets/mdialogmodel.cpp +++ b/src/corelib/widgets/mdialogmodel.cpp @@ -196,6 +196,12 @@ MButtonModel *MDialogModelPrivate::createStandardButton(M::StandardButton button return button; } +MDialogModel::~MDialogModel() +{ + foreach(MButtonModel *button, _buttons()) { + button->decreaseReferenceCount(); + } +} QGraphicsWidget *MDialogModel::centralWidget() { const MDialogModel *constThis = this; diff --git a/src/corelib/widgets/mdialogmodel.h b/src/corelib/widgets/mdialogmodel.h index a1c6663d..dce9966f 100644 --- a/src/corelib/widgets/mdialogmodel.h +++ b/src/corelib/widgets/mdialogmodel.h @@ -32,6 +32,7 @@ class M_EXPORT MDialogModel : public MSceneWindowModel { Q_OBJECT M_MODEL_INTERNAL(MDialogModel) + M_MODEL_CUSTOM_DESTRUCTOR private: diff --git a/src/corelib/widgets/mwidgetmodel.h b/src/corelib/widgets/mwidgetmodel.h index 6889a4f5..105755d6 100644 --- a/src/corelib/widgets/mwidgetmodel.h +++ b/src/corelib/widgets/mwidgetmodel.h @@ -29,6 +29,8 @@ #include <mwidgetcontroller.h> #include <mtheme.h> +// Use to prevent a destructor implementation being generated. You must manually delete d_ptr or data if you use this +#define M_MODEL_CUSTOM_DESTRUCTOR // model macro #define M_MODEL(CLASS) \ public: \ |