Esempio n. 1
0
QModelIndex
APG::TreeModel::insertConstraint( const QModelIndex& thisIdx, const QString& constraintName )
{
    int row = thisIdx.row();
    if ( thisIdx.isValid() ) {
        ConstraintNode* p = static_cast<ConstraintNode*>( thisIdx.internalPointer() );
        ConstraintNode* n = 0;
        if ( p->getNodeType() == Constraint::ConstraintGroupType ) {
            beginInsertRows( thisIdx, 0, 0 );
            QString constraintType = ConstraintFactory::instance()->untranslateName( constraintName );
            n = ConstraintFactory::instance()->createConstraint( constraintType, p, 0 );
            endInsertRows();
            if ( n != 0 ) {
                connectDCSlotToNode( n );
                return createIndex( 0, 0, n );
            }
        } else {
            p = p->parent();
            QModelIndex parentIdx = parent( thisIdx );
            beginInsertRows( parentIdx, row + 1, row + 1 );
            QString constraintType = ConstraintFactory::instance()->untranslateName( constraintName );
            n = ConstraintFactory::instance()->createConstraint( constraintType, p, row + 1 );
            endInsertRows();
            if ( n != 0 ) {
                connectDCSlotToNode( n );
                return createIndex( row + 1, 0, n );
            }
        }
    }
    return thisIdx;
}
Esempio n. 2
0
QModelIndex
APG::TreeModel::parent( const QModelIndex& child ) const
{
    if ( !child.isValid() )
        return QModelIndex();

    ConstraintNode* childItem = static_cast<ConstraintNode*>( child.internalPointer() );
    ConstraintNode* parentItem = static_cast<ConstraintNode*>( childItem->parent() );

    if ( !parentItem || parentItem == m_rootNode )
        return QModelIndex();

    return createIndex( parentItem->row(), 0, parentItem );
}