Mercurial > projects > qtd
comparison d2/qtd/MOC.d @ 364:a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Fri, 11 Jun 2010 12:16:09 +0300 |
parents | a3f5c10414f3 |
children | 958e8b9a89bd |
comparison
equal
deleted
inserted
replaced
363:3b0545d4d479 | 364:a084e2df3776 |
---|---|
488 return gen.output; | 488 return gen.output; |
489 } | 489 } |
490 | 490 |
491 mixin template Q_OBJECT() | 491 mixin template Q_OBJECT() |
492 { | 492 { |
493 import std.typetuple; | 493 import |
494 import qtd.Marshal; | 494 std.typetuple, |
495 import std.stdio; | 495 qtd.meta.Runtime, |
496 import qt.core.QString; // for QStringUtil.toNative | 496 qtd.Marshal, |
497 qt.core.QString, | |
498 std.stdio; | |
497 | 499 |
498 public: // required to override the outside scope protection. | 500 public: // required to override the outside scope protection. |
499 | 501 |
500 alias typeof(this) This; | 502 alias typeof(this) This; |
501 | 503 |
528 } | 530 } |
529 | 531 |
530 @property | 532 @property |
531 override QMetaObject metaObject() const { return staticMetaObject(); } | 533 override QMetaObject metaObject() const { return staticMetaObject(); } |
532 | 534 |
533 private static | |
534 { | |
535 __gshared QMetaObject staticMetaObject_; | |
536 __gshared QMetaObjectNative nativeStaticMetaObject_; | |
537 bool staticMoInited_; | |
538 } | |
539 | |
540 @property | 535 @property |
541 static QMetaObject staticMetaObject() | 536 static QMetaObject staticMetaObject() |
542 { | 537 { |
543 // using a thread-local flag to mitigate | 538 return meta!This; |
544 // the performance hit caused by lazy initialization | 539 } |
545 if(!staticMoInited_) | 540 |
541 @property static void* qtd_nativeMetaObject() | |
542 { | |
543 __gshared static QMetaObjectNative nativeMo; | |
544 if (!nativeMo.data) | |
546 { | 545 { |
547 synchronized(qtdMoLock) | 546 alias BaseClassesTuple!(This)[0] Base; |
548 { | 547 nativeMo = QMetaObjectNative( |
549 if (!staticMetaObject_) | 548 Base.staticMetaObject.nativeId, |
550 { | 549 qt_meta_stringdata.ptr, |
551 alias BaseClassesTuple!(This)[0] Base; | 550 qt_meta_data.ptr, null); |
552 | 551 } |
553 nativeStaticMetaObject_ = QMetaObjectNative( | 552 return &nativeMo; |
554 Base.staticMetaObject.nativeId, | 553 } |
555 qt_meta_stringdata.ptr, | 554 } |
556 qt_meta_data.ptr, null); | 555 |
557 | |
558 QMetaObject.create!This(&nativeStaticMetaObject_); | |
559 } | |
560 } | |
561 staticMoInited_ = true; | |
562 } | |
563 | |
564 return staticMetaObject_; | |
565 } | |
566 | |
567 /*internal*/ static void setStaticMetaObject(QMetaObject m) | |
568 { | |
569 staticMetaObject_ = m; | |
570 } | |
571 } | |
572 |