Mercurial > projects > qtd
comparison generator/dgenerator.cpp @ 350:31520b2c0b3c
Removed dependency on parent trait and stringof
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Thu, 20 May 2010 15:49:08 +0300 |
parents | 96a75b1e5b26 |
children | 18bd68f586c6 |
comparison
equal
deleted
inserted
replaced
349:925386e0e780 | 350:31520b2c0b3c |
---|---|
2556 | 2556 |
2557 if (d_class->typeEntry()->isValue()) | 2557 if (d_class->typeEntry()->isValue()) |
2558 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; | 2558 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; |
2559 | 2559 |
2560 if (d_class->isQObject()) { | 2560 if (d_class->isQObject()) { |
2561 s << INDENT << "if (!" << d_class->name() << "._staticMetaObject) " << endl | 2561 // ensure meta-object is created at static construction |
2562 << INDENT << " " << d_class->name() << ".createStaticMetaObject;" << endl << endl; | 2562 s << INDENT << d_class->name() << ".staticMetaObject();" << endl; |
2563 } | 2563 } |
2564 | 2564 |
2565 if (cpp_shared && d_class->generateShellClass()) { | 2565 if (cpp_shared && d_class->generateShellClass()) { |
2566 // virtual functions | 2566 // virtual functions |
2567 s << INDENT << "void*[" << virtualFunctions.size() << "] virt_arr;" << endl; | 2567 s << INDENT << "void*[" << virtualFunctions.size() << "] virt_arr;" << endl; |
2730 if(function->isSlot()) | 2730 if(function->isSlot()) |
2731 slot_funcs += function; | 2731 slot_funcs += function; |
2732 } | 2732 } |
2733 writeMetaMethodSignatures(s, "__slotSignatures", slot_funcs); | 2733 writeMetaMethodSignatures(s, "__slotSignatures", slot_funcs); |
2734 | 2734 |
2735 QString concreteArg; | 2735 if (d_class->isAbstract()) |
2736 if (d_class->isAbstract()) | 2736 s << "alias " << d_class->name() << "_ConcreteWrapper ConcreteType;" << endl; |
2737 concreteArg += ", " + d_class->name() + "_ConcreteWrapper"; | |
2738 | 2737 |
2739 if (!d_class->isFinal()) | 2738 if (!d_class->isFinal()) |
2740 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl | 2739 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl |
2741 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl | 2740 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl |
2742 << " }" << endl << endl; | 2741 << " }" << endl << endl; |
2743 | 2742 |
2744 s << " private static __gshared QMetaObject _staticMetaObject;" << endl | 2743 s << " private static __gshared QMetaObject _staticMetaObject;" << endl |
2745 << " protected static void createStaticMetaObject() {" << endl | 2744 << " protected static void setStaticMetaObject(QMetaObject m) {" << endl |
2746 << " assert(!_staticMetaObject);" << endl | 2745 << " _staticMetaObject = m;" << endl |
2747 << " QMetaObject base;" << endl; | |
2748 | |
2749 if (d_class->name() != "QObject") | |
2750 { | |
2751 QString baseName = d_class->baseClassName(); | |
2752 s << " if (!" << baseName << "._staticMetaObject)" << endl | |
2753 << " " << baseName << ".createStaticMetaObject;" << endl | |
2754 << " base = " << baseName << "._staticMetaObject;" << endl; | |
2755 } | |
2756 | |
2757 s << " _staticMetaObject = new QMetaObject(qtd_" << d_class->name() << "_staticMetaObject, base);" << endl | |
2758 << " _staticMetaObject.construct!(" << d_class->name() << concreteArg << ");" << endl | |
2759 << " _populateMetaInfo();" << endl | |
2760 << " }" << endl << endl | 2746 << " }" << endl << endl |
2761 | 2747 |
2762 << " QMetaObject metaObject() {" << endl | 2748 << " @property QMetaObject metaObject() {" << endl |
2763 << " return _staticMetaObject;" << endl | 2749 << " return _staticMetaObject;" << endl |
2764 << " }" << endl << endl | 2750 << " }" << endl << endl |
2765 | 2751 |
2766 << " static QMetaObject staticMetaObject() {" << endl | 2752 << " @property static QMetaObject staticMetaObject() {" << endl |
2753 << " if (!_staticMetaObject)" << endl | |
2754 << " QMetaObject.create!(typeof(this))(qtd_" << d_class->name() << "_staticMetaObject());" << endl | |
2767 << " return _staticMetaObject;" << endl | 2755 << " return _staticMetaObject;" << endl |
2768 << " }" << endl << endl | 2756 << " }" << endl << endl |
2769 | 2757 |
2770 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl | 2758 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl |
2771 << " return static_cast!(" << d_class->name() << ")(_staticMetaObject.getObject(nativeId));" << endl | 2759 << " return static_cast!(" << d_class->name() << ")(_staticMetaObject.getObject(nativeId));" << endl |
2772 << " }" << endl << endl | 2760 << " }" << endl << endl |
2773 | 2761 |
2774 << " static void __createEntity(void* nativeId, void* dId) {" << endl | 2762 << " /* internal */ static void __createEntity(void* nativeId, void* dId) {" << endl |
2775 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl | 2763 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl |
2776 << " }" << endl << endl | 2764 << " }" << endl << endl |
2777 | 2765 |
2778 << " private static void _populateMetaInfo() {" << endl | 2766 << " /* internal */ static void _populateMetaInfo() {" << endl |
2779 << " int index;" << endl << endl; | 2767 << " int index;" << endl << endl; |
2780 | 2768 |
2781 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); | 2769 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); |
2782 | 2770 |
2783 int staticId = 0; | 2771 int staticId = 0; |