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 );
}
Beispiel #2
0
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>();
  }
}