int QSortFilterProxyModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractProxyModel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 20) qt_static_metacall(this, _c, _id, _a); _id -= 20; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QRegExp*>(_v) = filterRegExp(); break; case 1: *reinterpret_cast< int*>(_v) = filterKeyColumn(); break; case 2: *reinterpret_cast< bool*>(_v) = dynamicSortFilter(); break; case 3: *reinterpret_cast< Qt::CaseSensitivity*>(_v) = filterCaseSensitivity(); break; case 4: *reinterpret_cast< Qt::CaseSensitivity*>(_v) = sortCaseSensitivity(); break; case 5: *reinterpret_cast< bool*>(_v) = isSortLocaleAware(); break; case 6: *reinterpret_cast< int*>(_v) = sortRole(); break; case 7: *reinterpret_cast< int*>(_v) = filterRole(); break; } _id -= 8; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setFilterRegExp(*reinterpret_cast< QRegExp*>(_v)); break; case 1: setFilterKeyColumn(*reinterpret_cast< int*>(_v)); break; case 2: setDynamicSortFilter(*reinterpret_cast< bool*>(_v)); break; case 3: setFilterCaseSensitivity(*reinterpret_cast< Qt::CaseSensitivity*>(_v)); break; case 4: setSortCaseSensitivity(*reinterpret_cast< Qt::CaseSensitivity*>(_v)); break; case 5: setSortLocaleAware(*reinterpret_cast< bool*>(_v)); break; case 6: setSortRole(*reinterpret_cast< int*>(_v)); break; case 7: setFilterRole(*reinterpret_cast< int*>(_v)); break; } _id -= 8; } else if (_c == QMetaObject::ResetProperty) { _id -= 8; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 8; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 8; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 8; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 8; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 8; } #endif // QT_NO_PROPERTIES return _id; }
bool OcCombinedModelFilter::lessThan(const QModelIndex &left, const QModelIndex &right) const { QPair<int, Qt::SortOrder> roleOrder; int role, c; QVariant l, r; QModelIndex idxLeft, idxRight; foreach(roleOrder, m_orders) { role = roleOrder.first; idxLeft = left.model()->index(left.row(), 0, left.parent()); idxRight = right.model()->index(right.row(), 0, right.parent()); if (roleOrder.second == Qt::AscendingOrder) { l = idxLeft.data(role); r = idxRight.data(role); } else { r = idxLeft.data(role); l = idxRight.data(role); } switch (l.userType()) { case QVariant::Invalid: return(r.type() == QVariant::Invalid); case QVariant::Int: if (l.toInt() < r.toInt()) return true; else if (l.toInt() > r.toInt()) return false; break; default: if (isSortLocaleAware()) { c = l.toString().localeAwareCompare(r.toString()); if (c<0) return true; else if (c>0) return false; } else { c = l.toString().compare(r.toString(), sortCaseSensitivity()); if (c<0) return true; else if (c>0) return false; } } }
int MultiSortFilterProxy::Compare(const QVariant& left, const QVariant& right) const { // Copied from the QSortFilterProxyModel::lessThan implementation, but returns // -1, 0 or 1 instead of true or false. switch (left.userType()) { case QVariant::Invalid: return (right.type() != QVariant::Invalid) ? -1 : 0; case QVariant::Int: return DoCompare(left.toInt(), right.toInt()); case QVariant::UInt: return DoCompare(left.toUInt(), right.toUInt()); case QVariant::LongLong: return DoCompare(left.toLongLong(), right.toLongLong()); case QVariant::ULongLong: return DoCompare(left.toULongLong(), right.toULongLong()); case QMetaType::Float: return DoCompare(left.toFloat(), right.toFloat()); case QVariant::Double: return DoCompare(left.toDouble(), right.toDouble()); case QVariant::Char: return DoCompare(left.toChar(), right.toChar()); case QVariant::Date: return DoCompare(left.toDate(), right.toDate()); case QVariant::Time: return DoCompare(left.toTime(), right.toTime()); case QVariant::DateTime: return DoCompare(left.toDateTime(), right.toDateTime()); case QVariant::String: default: if (isSortLocaleAware()) return left.toString().localeAwareCompare(right.toString()); else return left.toString().compare(right.toString(), sortCaseSensitivity()); } return 0; }