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; }
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 ); }