rendered paste body#include <proxymodel.h>#include <QDebug>#include <mixxxview.h>#include <wtracktableview.h>#include <QTableView>#include <QHeaderView>SortFilterProxyModel::SortFilterProxyModel( QObject * parent ) : QSortFilterProxyModel( parent ){ setFilterCaseSensitivity( Qt::CaseInsensitive );}bool SortFilterProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex & sourceParent ) const{ QModelIndex index1 = sourceModel()->index(sourceRow, 0, sourceParent); QModelIndex index2 = sourceModel()->index(sourceRow, 1, sourceParent); QModelIndex index3 = sourceModel()->index(sourceRow, 6, sourceParent); return ( sourceModel()->data(index1).toString().contains(filterRegExp()) || sourceModel()->data(index2).toString().contains(filterRegExp()) || sourceModel()->data(index3).toString().contains(filterRegExp()) );}bool SortFilterProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const{ // Do the strings look like they are BPM counts? const QString bpmPattern = "^[0-9]+\\.[0-9]+$"; if (sourceModel()->data( left ).toString().trimmed().indexOf(QRegExp(bpmPattern)) == 0 && sourceModel()->data( right ).toString().trimmed().indexOf(QRegExp(bpmPattern)) == 0) { double leftBPM = sourceModel()->data( left ).toString().trimmed().toDouble(); double rightBPM = sourceModel()->data( right ).toString().trimmed().toDouble(); qDebug() << "left BPM --" << " row: " << left.row() << " col: " << left.column() << " header: " << (WTrackTableView *)( ( (MixxxView *)(this->parent()) )->m_pTrackTableView )->horizontalHeader(); // const Qt::SortOrder sortOrder = sourceModel()->headerData(left.column(), Qt::Horizontal)->sortIndicatorOrder();// const Qt::SortOrder sortOrder = this->parent().m_pTrackTableView.header()->sortIndicatorOrder(); if (leftBPM == 0.0 /* && sortOrder == Qt::AscendingOrder */) rightBPM = -1 * rightBPM; if (rightBPM == 0.0 /* && sortOrder == Qt::AscendingOrder */) leftBPM = -1 * leftBPM; // qDebug() << "BPM Comparasion leftBPM =" << leftBPM << "rightBPM =" << rightBPM; // return leftBPM < rightBPM; } const QString invalidStartCharsExpr = "^[()]"; QString leftStr = sourceModel()->data( left ).toString().trimmed().simplified().toLower().remove(QRegExp("^the "));; QString rightStr = sourceModel()->data( right ).toString().trimmed().simplified().toLower().remove(QRegExp("^the "));; leftStr = leftStr.replace(QRegExp(invalidStartCharsExpr, QRegExp::RegExp2), "~~"); if (leftStr.contains(" - ")) { leftStr = "~"; } if (!leftStr.length()) { leftStr = "~~~"; } rightStr = rightStr.replace(QRegExp(invalidStartCharsExpr, QRegExp::RegExp2), "~~"); if (rightStr.contains(" - ")) { rightStr = "~"; } if (!rightStr.length()) { rightStr = "~~~"; }// if (leftStr.startsWith("~") || rightStr.startsWith("~")) qDebug() << "left:" << leftStr <<"right:" << rightStr << " result:" << (leftStr < rightStr); return leftStr < rightStr;}