diff qt/d1/qt/QtdObject.d @ 253:073b9153ed8a

Rev. 264 done right. Problems: - classwizard segfaults on exit due to a bug in signals/slots or runtime. - hellogl doesn't compile with dmd2 due to a bug in the compiler backend
author maxter
date Sun, 30 Aug 2009 09:59:12 +0000
parents
children b1abe7f57321
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qt/d1/qt/QtdObject.d	Sun Aug 30 09:59:12 2009 +0000
@@ -0,0 +1,91 @@
+/**
+*
+*  Copyright: Copyright QtD Team, 2008-2009
+*  License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>
+*
+*  Copyright QtD Team, 2008-2009
+*  Distributed under the Boost Software License, Version 1.0.
+*  (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+*
+*/
+
+module qt.QtdObject;
+
+import qt.Signal;
+//import tango.io.Stdout;
+
+enum QtdObjectFlags : ubyte
+{
+    none,
+    nativeOwnership           = 0x1,
+    dOwnership                = 0x2,
+    dynamicEntity             = 0x4
+    //gcManaged               = 0x4
+}
+
+package abstract class QtdObject
+{
+    protected QtdObjectFlags __flags_;
+    void* __nativeId;
+    
+    mixin SignalHandlerOps;
+    
+    this(void* nativeId, QtdObjectFlags flags = QtdObjectFlags.none)
+    {
+        //Stdout.formatln("Created D object {} {:x}", nativeId, flags).newline;
+        __nativeId = nativeId;
+        __flags_ = flags;
+    }
+
+    final QtdObjectFlags __flags()
+    {
+        return __flags_;
+    }
+
+    /+ final +/ void __setFlags(QtdObjectFlags flags, bool value)
+    {
+        if (value)
+            __flags_ |= flags;
+        else
+            __flags_ &= ~flags;
+    }
+
+    // COMPILER BUG: 3206
+    protected void __deleteNative()
+    {
+        assert(false);
+    }
+
+    ~this()
+    {
+        //Stdout.formatln("Deleting D object {}", __nativeId);
+        if (!(__flags_ & QtdObjectFlags.nativeOwnership))
+        {
+            // avoid deleting D object twice.
+            //Stdout.formatln("About to delete native object {}", __nativeId);
+            __flags_ |= QtdObjectFlags.dOwnership;
+            __deleteNative;
+        }
+        //Stdout.formatln("Deleted native D object {}", __nativeId);
+    }    
+}
+
+class QtdMetaObject
+{
+    private
+    {
+        void* _typeId;
+        QtdMetaObject _base;
+    }
+    
+    QtdMetaObject base()
+    {
+        return _base;
+    }
+    
+    this(void* typeId, QtdMetaObject base)
+    {
+        _typeId = typeId;
+        _base = base;
+    }
+}
\ No newline at end of file