# HG changeset patch # User Max Samukha # Date 1278964258 -10800 # Node ID bd7f485e357378fcc237b7114ef50ce88542c90c # Parent 1d56b2a2e10c8fdcba87a9aae23cb4055c45850f More debug fixes diff -r 1d56b2a2e10c -r bd7f485e3573 d2/qt/core/QMetaType.d --- a/d2/qt/core/QMetaType.d Mon Jul 12 20:36:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -module qt.core.QMetaType; -public import qt.core.Qt; -private import qt.core.QDataStream; - -alias extern(C) void *function(void *copy) Ctor; -alias extern(C) void function(void *obj) Dtor; -alias extern(C) void function(void *stream, void * object) StreamOp; - -struct DArrayToC -{ - void[] array; -} - -public template MetaTypeOps(T) -{ - // TODO: - // static assert(typeof(new T), "Type " ~ T.stringof ~ " has no default constructor"); - // static assert(typeof(new T(T.init))), "Type " ~ T.stringof ~ " has no default copy constructor"); - - extern(C) void* ctor(void* copy) - { - static if (is(T == class) || is(T == interface)) - { - return cast(void*)(copy ? new T(cast(T)copy) : new T); - } - else static if (isDynamicArrayType!(T) || isStaticArrayType!(T) ) - { - auto darray = new DArrayToC; - if(copy) - darray.array = (cast(DArrayToC*)copy).array.dup; - return cast(void*)darray; - } - else - { - auto data = new T; - if(copy) - *data = *cast(T*)copy; - return cast(void*)data; - } - } - - - extern(C) void dtor(void* obj) - { - static if (is(T == class) || is(T == interface)) - { - auto tmp = cast(T)obj; - delete tmp; - } - else - { - auto tmp = cast(T*)obj; - delete tmp; - } - } -} - -public int qRegisterMetaType(T)(string name = null) -{ - if (!name.length) - name = typeid(T).toString; - - return qtd_qRegisterMetaType(toStringz(name), &MetaTypeOps!(T).ctor, &MetaTypeOps!(T).dtor); -} - -/* Not work.... -private class DataStreamPriv: QDataStream -{ - this(void * cobj) - { - super(cobj); - } -} -*/ -/* -public void qRegisterMetaTypeStreamOperators(T)(void function(ref QDataStream, T ) saveOp, void function (ref QDataStream, ref T) loadOp, string name = null) -{ - static void function(ref QDataStream, T ) SaveOp; - static void function (ref QDataStream, ref T) LoadOp; - SaveOp = saveOp; - LoadOp = loadOp; - - if (!name.length) - name = typeid(T).toString; - - extern(C) void saveOpC(void *stream, void *object) - { - QDataStream dstream = new DataStreamPriv(stream); - Stdout(object).newline; - static if (is(T == class) || is(T == interface)) - SaveOp(dstream, cast(T)object); - else - SaveOp(dstream, *cast(T*)object); - } - - extern(C) void loadOpC(void *stream, void *object) - { - //return stream; - } - - qtd_registerStreamOperators(toStringz(name), cast(StreamOp)&saveOpC, cast(StreamOp)&loadOpC); -} -*/ diff -r 1d56b2a2e10c -r bd7f485e3573 d2/qt/core/test/Objects.d --- a/d2/qt/core/test/Objects.d Mon Jul 12 20:36:07 2010 +0300 +++ b/d2/qt/core/test/Objects.d Mon Jul 12 22:50:58 2010 +0300 @@ -1,4 +1,6 @@ -module qt.core.test.QObject; +module qt.core.test.Objects; + +import std.stdio; // make sure QtdUnittest is defined version (QtdUnittest) {} else { static assert(false); } @@ -9,7 +11,7 @@ qtd.meta.Runtime, qt.core.QObject, qt.core.QMetaObject; - + import std.stdio; extern (C) void* qtd_test_QObject_create(void* parent); @@ -95,6 +97,7 @@ unittest { + writeln("Here"); static void reset() { qtdDebug.reset(); @@ -103,16 +106,13 @@ qtdDebug.info("Running unittests (" ~ __FILE__ ~")"); - //test1 reset(); test1(); GC.collect(); - - writeln("Collected"); assert(qtdDebug.wrapperCount == 1); - - + + //test2 reset(); test2(); @@ -124,7 +124,7 @@ test3(); assert(qtdDebug.wrapperCount == 0); assert(qtdDebug.nativeDeletedCount == 1); - + //test4 reset(); test4(); diff -r 1d56b2a2e10c -r bd7f485e3573 d2/qtd/Debug.d --- a/d2/qtd/Debug.d Mon Jul 12 20:36:07 2010 +0300 +++ b/d2/qtd/Debug.d Mon Jul 12 22:50:58 2010 +0300 @@ -60,8 +60,9 @@ { static assert (QtdObjectFlags.sizeof == ubyte.sizeof); auto flags = wrapper.qtdFlags; - return format("%s (nativeId: %s, this ptr: %s, flags: %b)", this, wrapper.qtdNativeId - , cast(void*)this, *cast(ubyte*)&flags); + return format("%s (nativeId: %s, this ptr: %s, flags: %b)" + , wrapper, wrapper.qtdNativeId + , cast(void*)wrapper, *cast(ubyte*)&flags); } void onWrapperConstructed(QtdObject wrapper) @@ -77,13 +78,13 @@ void onWrapperDestroyed(QtdObject wrapper) { - info("Leaving QtdObject destructor: " ~ wrapperToString(wrapper)); + info(format("Leaving QtdObject destructor (dId: %s)", cast(void*)wrapper)); wrapperCount_--; } void onNativeDeleted(QtdObject wrapper) { - info("Native object deleted: " ~ wrapperToString(wrapper)); + info(format("Native object deleted (dId: %s)", cast(void*)wrapper)); nativeDeletedCount_++; } @@ -92,9 +93,9 @@ info("Object ownership changed: " ~ wrapperToString(wrapper)); } - void onDeletingWrapperFromNative(void* dId) + void onDeletingWrapperFromNative(QtdObject wrapper) { - info(format("Wrapper deletion initiated from C++ (wrapper id: %s)", dId)); + info(format("Wrapper deletion initiated from C++ (wrapper id: %s)", cast(void*)wrapper)); } @property int wrapperCount() diff -r 1d56b2a2e10c -r bd7f485e3573 d2/qtd/QtdObject.d --- a/d2/qtd/QtdObject.d Mon Jul 12 20:36:07 2010 +0300 +++ b/d2/qtd/QtdObject.d Mon Jul 12 22:50:58 2010 +0300 @@ -214,7 +214,6 @@ if (!_flags.nativeDeleteDisabled) { // avoid deleting D object twice. - _flags.wrapperDeleteDisabled = true; qtdDeleteNative; @@ -319,7 +318,7 @@ q{ auto obj = cast(QtdObject)dId; - mixin(debugHandler("onDeletingWrapperFromNative", "dId")); + mixin(debugHandler("onDeletingWrapperFromNative", "obj")); if (!obj._flags.wrapperDeleteDisabled) { diff -r 1d56b2a2e10c -r bd7f485e3573 examples/qwt/simpleplot/build.sh --- a/examples/qwt/simpleplot/build.sh Mon Jul 12 20:36:07 2010 +0300 +++ b/examples/qwt/simpleplot/build.sh Mon Jul 12 22:50:58 2010 +0300 @@ -1,3 +1,2 @@ #! /bin/bash - -dmd -I../../../d2 -I../../../output/build simple.d -L-lqtdqwt -L-lqtdgui -L-lqtdcore -L-lcpp_qwt -L-lcpp_core -L-lcpp_gui -L-lqwt-qt4 -L-lQtGui -L-lQtCore -ofsimple +dmd -L-L../../../output/build/lib -I../../../d2 -I../../../output/build simple.d -L-lqtdqwt -L-lqtdgui -L-lqtdcore -L-lcpp_qwt -L-lcpp_core -L-lcpp_gui -L-lqwt-qt4 -L-lQtGui -L-lQtCore -ofsimple diff -r 1d56b2a2e10c -r bd7f485e3573 examples/qwt/simpleplot/simple.d --- a/examples/qwt/simpleplot/simple.d Mon Jul 12 20:36:07 2010 +0300 +++ b/examples/qwt/simpleplot/simple.d Mon Jul 12 22:50:58 2010 +0300 @@ -32,9 +32,9 @@ class SimpleData: QwtData { // The x values depend on its index and the y values - // can be calculated from the corresponding x value. + // can be calculated from the corresponding x value. // So we don't need to store the values. - // Such an implementation is slower because every point + // Such an implementation is slower because every point // has to be recalculated for every replot, but it demonstrates how // QwtData can be used. @@ -80,7 +80,7 @@ // Set axis titles setAxisTitle(xBottom, "x -->"); setAxisTitle(yLeft, "y -->"); - + // Insert new curves auto cSin = new QwtPlotCurve("y = sin(x)"); cSin.setRenderHint(QwtPlotItem.RenderAntialiased); @@ -98,7 +98,7 @@ cCos.setData(new SimpleData(&mycos, nPoints)); // Insert markers - + // ...a horizontal line at y = 0... auto mY = new QwtPlotMarker(); mY.setLabel(new QwtText("y = 0")); @@ -127,5 +127,5 @@ scope plot = new Plot; plot.resize(600,400); plot.show(); - return a.exec(); + return a.exec(); }