QVariant QPropertyModel::data(const QModelIndex& index, int role) const
{
    if( !index.isValid() )
        return QVariant();

    if( role != Qt::DisplayRole && role != Qt::ToolTipRole && role != Qt::StatusTipRole )
        return QVariant();

    Property* prop = GetProperty(index);

    if( role == Qt::ToolTipRole || role == Qt::StatusTipRole )
        return QVariant(prop->GetDescription());

    if( index.column() == PROPERTY_COLUMN )
    {
        if( IsComponent(index) )
            return QVariant(prop->GetComponentName(index.row()));
        else
            return QVariant(prop->GetName());
    }
    else
    {
        String str;

        if( IsComponent(index) )
            prop->GetComponentValueString(mEdited, GetComponentIndex(index), str);  
        else
            prop->GetValueString(mEdited, str);

        return QVariant(str.c_str());
    }
}
plComponentBase *plMaxNodeBase::ConvertToComponent()
{
    if (IsComponent())
        return (plComponentBase*)GetObjectRef();

    return nil;
}
示例#3
0
 Handle<Value> COEquals(const Arguments& args)
 {
    if(!IsComponent(args[0]))
    {
       return False();
    }
    dtEntity::Component* component = UnwrapComponent(args.This());
    dtEntity::Component* other = UnwrapComponent(args[0]);
    return (other == component) ? True() : False();
 }
QModelIndex QPropertyModel::parent(const QModelIndex& idx) const
{
    if( !idx.isValid() )
        return QModelIndex();

    if( !IsComponent(idx) )
        return QModelIndex();
    else
    {
        return index( (size_t)idx.internalPointer(), 0, QModelIndex() );
    }
}
void plMaxNodeBase::SetMaxNodeData(plMaxNodeData * pdat)
{
    const char* dbgNodeName = GetName();

    // If object is a component, don't add node data
    if (IsComponent())
        return;

    AppDataChunk *adc = GetAppDataChunk(PLASMA_MAX_CLASSID, GUP_CLASS_ID, kPlasmaMaxNodeDataChunk);

    // If pointer is nil, remove any data
    if (!pdat)
    {
        if( adc )
        {
            plMaxNodeData *pDataChunk = (plMaxNodeData*)adc->data;
            pDataChunk->DeInit();
        }
        RemoveAppDataChunk(PLASMA_MAX_CLASSID, GUP_CLASS_ID, kPlasmaMaxNodeDataChunk);
        return;     
    }

    if (!adc)
    {
        // Does not exist, create a new one...
        int len = sizeof(plMaxNodeData);
        plMaxNodeData *pDataChunk = (plMaxNodeData *)MAX_new(len);
        memcpy(pDataChunk, pdat, sizeof(*pdat));
        pDataChunk->Init();
        *pDataChunk = *pdat;
        AddAppDataChunk(PLASMA_MAX_CLASSID, GUP_CLASS_ID, kPlasmaMaxNodeDataChunk, len, pDataChunk);
    }
    else
    {
        plMaxNodeData *pDataChunk = (plMaxNodeData*)adc->data;
        // if someone does a GetMaxNodeData, they get a pointer to the data,
        // No need to set it, other wise set the Data chunk from the  MaxNodeData passed in
        if (pDataChunk != pdat)
            *pDataChunk = *pdat;
    }
}
plComponentBase *plMaxNodeBase::IRefMakerToComponent(ReferenceMaker *maker, bool all)
{
    if (!maker)
        return nil;

    // Is the refmaker a paramblock?  If so, it may be the
    // targets block of a component
    if (maker->SuperClassID() == PARAMETER_BLOCK2_CLASS_ID)
    {
        IParamBlock2 *pb = (IParamBlock2*)maker;
        ReferenceMaker *pbowner = pb->GetOwner();

        // Is the owner of the paramblock a helper object (component superclass)?
        if (pbowner && pbowner->SuperClassID() == HELPER_CLASS_ID)
        {
            Object *obj = (Object*)pbowner;
            // Is the owner of the paramblock a component?
            if (IsComponent(obj))
            {
                plComponentBase *comp = (plComponentBase*)obj;

                if (!all)
                {
                    // Does this component actually ref us? (A component can have other
                    // refs to a node, like a proxy object, so we want to make sure this
                    // node is actually in the target list.)
                    for (uint32_t i = 0; i < comp->NumTargets(); i++)
                    {
                        if (comp->GetTarget(i) == this)
                            return comp;
                    }
                }
                else
                    return comp;
            }
        }
    }

    return nil;
}
bool QPropertyModel::setData( const QModelIndex& pIndex, const QVariant& pValue, int role )
{    
    if( !pIndex.isValid() )
        return false;

    if( role != Qt::DisplayRole )
        return false;

    dataChanged(pIndex, pIndex);

    Property* prop = QPropertyModel::GetProperty(pIndex);

    if( IsComponent(pIndex) )
    {
        dataChanged(pIndex.parent(), pIndex);
    }
    else if( prop->GetComponentCount() )
    {
        dataChanged(createIndex(0, pIndex.column(), pIndex.row()), 
                    createIndex(prop->GetComponentCount()-1, pIndex.column(), pIndex.row()));
    }
    
    return false;
}
UInt32 QPropertyModel::GetComponentIndex(const QModelIndex& index)
{
    return IsComponent(index) ? (UInt32)index.row() : Property::InvalidComponent;
}