aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Tapsell <john.tapsell.ext@basyskom.de>2010-08-20 18:37:22 +0900
committerTomas Junnonen <tomas.junnonen@nokia.com>2010-08-20 16:56:56 +0300
commitd5e7f2bf126f150cf2e0db02fc31a58ed508c654 (patch)
treec7286ab6a4dfcc5c1443700d9612574e2b52c7aa
parentff79318ae1002610877d1ea79312d886b59e4294 (diff)
Changes: mgen - add ability to have a custom destructor
RevBy: Armin Berres
-rw-r--r--mgen/mgen_processor.cpp32
-rw-r--r--src/corelib/widgets/mdialogmodel.cpp6
-rw-r--r--src/corelib/widgets/mdialogmodel.h1
-rw-r--r--src/corelib/widgets/mwidgetmodel.h2
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: \