Mercurial > projects > qtd
diff generator/typesystem_core-java.java @ 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 | 37eed70de029 |
children | 17b5e13364b7 f9559a957be9 |
line wrap: on
line diff
--- a/generator/typesystem_core-java.java Sat Aug 22 12:50:58 2009 +0000 +++ b/generator/typesystem_core-java.java Sun Aug 30 09:59:12 2009 +0000 @@ -22,7 +22,7 @@ * exception, Nokia gives you certain additional rights. These rights * are described in the Nokia Qt GPL Exception version 1.2, included in * the file GPL_EXCEPTION.txt in this package. -* +* * Qt for Windows(R) Licensees * As a special exception, Nokia, as the sole copyright holder for Qt * Designer, grants users of the Qt/Eclipse Integration plug-in the @@ -46,10 +46,9 @@ class QObject___ extends QObject { + /* TODO: test whether the linked list is really a better solution public bool __stackAllocated = false; - public bool __qobject_is_deleting = false; - new(size_t size, void* p = null) { if (!p) @@ -72,12 +71,89 @@ } } } + */ - // list of QObjects references to prevent them from garbage collecting if they are managed by Qt - private static QObject[] __gc_ref_list; + private + { + static QObject __root; + QObject __next; + QObject __prev; + } + + override void onSignalHandlerCreated(ref SignalHandler sh) + { + sh.signalEvent = &onSignalEvent; + } + + private void onSignalEvent(int signalId, SignalEventId event) + { + stringz signature; + signalSignature(signalId, signature); + if (signature) + { + switch (event) + { + case SignalEventId.firstSlotConnected: + qtd_connect(__nativeId, signature, signalId, cast(bool)(__flags_ & QtdObjectFlags.dynamicEntity)); + break; + case SignalEventId.lastSlotDisconnected: + qtd_disconnect(__nativeId, signature, signalId, cast(bool)(__flags_ & QtdObjectFlags.dynamicEntity)); + break; + default: + assert (false); + } + } + } - // this flag needs to be set false when QObject is deleted from inside Qt so when deleting it from D it won't delete C++ object - public bool __no_real_delete = false; + ~this() + { + if (__prev) + __prev.__next = __next; + else + __root = __next; + + if (__next) + __next.__prev = __prev; + } + + /** + */ + T findChild(T : QObject = QObject)(string name = null) + { + foreach (obj; children) + { + auto tmp = cast(T)obj; + if (tmp && (!name.length || tmp.objectName == name)) + return tmp; + + tmp = obj.findChild!(T)(name); + if (tmp) + return tmp; + } + + return null; + } + + /** + */ + T[] findChildren(T : QObject = QObject)(string name = null) + { + T[] result; + + void find(QObject[] objects) + { + foreach (obj; objects) + { + auto tmp = cast(T)obj; + if (tmp && (!name.length || tmp.objectName == name)) + result ~= tmp; + find(obj.children); + } + } + + find(children); + return result; + } }// class abstract class QAbstractItemModel___ extends QAbstractItemModel { @@ -141,14 +217,14 @@ { // if (m_instance != null) // throw new RuntimeException("QCoreApplication can only be initialized once"); - + argc = args.length; argv = toStringzArray(args); this(&argc, argv); // m_instance.aboutToQuit.connect(m_instance, "disposeOfMyself()"); } - + private int argc; private char **argv; /* @@ -489,7 +565,7 @@ public final long write(string str) { return write(str.ptr, str.length); - } + } }// class class QCryptographicHash___ extends QCryptographicHash {