bool QgsComposerTableSortColumnsProxyModelV2::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const { //get QgsComposerTableColumn corresponding to row QModelIndex index = sourceModel()->index( source_row, 0, source_parent ); QgsComposerTableColumn* column = columnFromSourceIndex( index ); if ( !column ) { return false; } if (( column->sortByRank() > 0 && mFilterType == ShowSortedColumns ) || ( column->sortByRank() <= 0 && mFilterType == ShowUnsortedColumns ) ) { //column matches filter type return true; } else { return false; } }
bool QgsComposerAttributeTableColumnModelV2::moveColumnInSortRank( QgsComposerTableColumn * column, ShiftDirection direction ) { if ( !mComposerTable || !column ) { return false; } if (( direction == ShiftUp && column->sortByRank() <= 1 ) || ( direction == ShiftDown && column->sortByRank() <= 0 ) ) { //already at start/end of list or not being used for sort return false; } //find column before this one in sort order QList<QgsComposerTableColumn*> sortedColumns; QList<QgsComposerTableColumn*>::iterator columnIt = mComposerTable->columns()->begin(); for ( ; columnIt != mComposerTable->columns()->end(); ++columnIt ) { if (( *columnIt )->sortByRank() > 0 ) { sortedColumns.append( *columnIt ); } } qStableSort( sortedColumns.begin(), sortedColumns.end(), columnsBySortRank ); int columnPos = sortedColumns.indexOf( column ); if (( columnPos == 0 && direction == ShiftUp ) || (( columnPos == sortedColumns.length() - 1 ) && direction == ShiftDown ) ) { //column already at start/end return false; } QgsComposerTableColumn* swapColumn = direction == ShiftUp ? sortedColumns[ columnPos - 1] : sortedColumns[ columnPos + 1]; QModelIndex idx = indexFromColumn( column ); QModelIndex idxSwap = indexFromColumn( swapColumn ); //now swap sort ranks int oldSortRank = column->sortByRank(); column->setSortByRank( swapColumn->sortByRank() ); emit dataChanged( idx, idx ); swapColumn->setSortByRank( oldSortRank ); emit dataChanged( idxSwap, idxSwap ); return true; }