WSortFilterProxyModel::Item * WSortFilterProxyModel::itemFromIndex(const WModelIndex& index) const { if (index.isValid()) { Item *parentItem = parentItemFromIndex(index); WModelIndex sourceIndex = sourceModel()->index(parentItem->proxyRowMap_[index.row()], index.column(), parentItem->sourceIndex_); return itemFromSourceIndex(sourceIndex); } else return itemFromSourceIndex(WModelIndex()); }
bool QgsComposerProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const { //sort by item id const QgsComposerItem *item1 = itemFromSourceIndex( left ); const QgsComposerItem *item2 = itemFromSourceIndex( right ); if ( !item1 ) return false; if ( !item2 ) return true; return QString::localeAwareCompare( item1->displayName(), item2->displayName() ) < 0; }
WModelIndex WSortFilterProxyModel::mapFromSource(const WModelIndex& sourceIndex) const { if (sourceIndex.isValid()) { WModelIndex sourceParent = sourceIndex.parent(); Item *item = itemFromSourceIndex(sourceParent); int row = item->sourceRowMap_[sourceIndex.row()]; if (row != -1) return createIndex(row, sourceIndex.column(), static_cast<void *>(item)); else return WModelIndex(); } else return WModelIndex(); }
bool QgsComposerProxyModel::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const { //get QgsComposerItem corresponding to row QModelIndex index = sourceModel()->index( source_row, 0, source_parent ); QgsComposerItem *item = itemFromSourceIndex( index ); if ( !item ) return false; // specific exceptions if ( mExceptedList.contains( item ) ) return false; // filter by type if ( mItemTypeFilter != QgsComposerItem::ComposerItem && item->type() != mItemTypeFilter ) return false; return true; }