void QcTreeWidget::Item::initialize ( VMGlobals *g, PyrObject *obj, const QcTreeWidget::ItemPtr &ptr ) { Q_ASSERT( isKindOf( obj, SC_CLASS(TreeViewItem) ) ); if( ptr.id() ) { // store the SafePtr QcTreeWidget::ItemPtr *newPtr = new QcTreeWidget::ItemPtr( ptr ); SetPtr( obj->slots+0, newPtr ); // store the id for equality comparison SetPtr( obj->slots+1, ptr.id() ); // install finalizer } else { SetNil( obj->slots+0 ); SetNil( obj->slots+1 ); } InstallFinalizer( g, obj, 2, &QcTreeWidget::Item::finalize ); }
MetaType *MetaType::find( PyrSlot *slot ) { switch (GetTag(slot)) { case tagNil : return 0; case tagInt : return metaType<int>(); case tagSym : return metaType<QString>(); case tagChar : return metaType<QChar>(); case tagFalse : case tagTrue : return metaType<bool>(); case tagObj : { PyrObject *obj = slotRawObject(slot); PyrClass *klass = obj->classptr; unsigned char format = obj->obj_format; if( format == obj_double || format == obj_float ) return metaType< QVector<double> >(); else if( format == obj_int32 || format == obj_int16 || format == obj_int8 ) return metaType< QVector<int> >(); else if( isKindOfSlot( slot, class_string ) ) { return metaType<QString>(); } else if( isKindOfSlot( slot, SC_CLASS(Point) ) ) { return metaType<QPointF>(); } else if( isKindOfSlot( slot, SC_CLASS(Rect) ) ) { return metaType<QRectF>(); } else if( isKindOfSlot( slot, SC_CLASS(Size) ) ) { return metaType<QSizeF>(); } else if( klass == SC_CLASS(Color) || klass == SC_CLASS(Gradient) || klass == SC_CLASS(HiliteGradient) ) { return metaType<QColor>(); } else if( isKindOfSlot( slot, SC_CLASS(QFont) ) ) { return metaType<QFont>(); } else if( isKindOfSlot( slot, SC_CLASS(QPalette) ) ) { return metaType<QPalette>(); } else if( isKindOfSlot( slot, SC_CLASS(QObject) ) ) { return metaType<QObjectProxy*>(); } else if( isKindOfSlot( slot, class_array ) || isKindOfSlot( slot, class_symbolarray ) ) { return metaType<QVariantList>(); } else if( isKindOfSlot( slot, SC_CLASS(QTreeViewItem) ) ) { return metaType<QcTreeWidget::ItemPtr>(); } else { QString className = TypeCodec<QString>::read( &slotRawObject(slot)->classptr->name ); qcWarningMsg(QString("WARNING: Do not know how to use an instance of class '%1'").arg(className)); return 0; } } default: return metaType<double>(); } }