forked from qt-creator/qt-creator
ExtensionManager: Introduce own SortFilterProxyModel
We want to sort by type and then alphabetically. That requires a custom lessThan() implementation, thus a custom QSortFilterProxyModel. Will come handy for further filtering/sorting requirements in the future. Change-Id: Iaacd955015d56026e41d404dcf4781a1715dc55a Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -247,6 +247,32 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class SortFilterProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
public:
|
||||
SortFilterProxyModel(QObject *parent = nullptr);
|
||||
|
||||
protected:
|
||||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
||||
};
|
||||
|
||||
SortFilterProxyModel::SortFilterProxyModel(QObject *parent)
|
||||
: QSortFilterProxyModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
bool SortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
|
||||
{
|
||||
const ItemType leftType = left.data(RoleItemType).value<ItemType>();
|
||||
const ItemType rightType = right.data(RoleItemType).value<ItemType>();
|
||||
if (leftType != rightType)
|
||||
return leftType < rightType;
|
||||
|
||||
const QString leftName = left.data(RoleName).toString();
|
||||
const QString rightName = right.data(RoleName).toString();
|
||||
return leftName < rightName;
|
||||
}
|
||||
|
||||
class ExtensionsBrowserPrivate
|
||||
{
|
||||
public:
|
||||
@@ -255,7 +281,7 @@ public:
|
||||
QLineEdit *searchBox;
|
||||
QListView *extensionsView;
|
||||
QItemSelectionModel *selectionModel = nullptr;
|
||||
QSortFilterProxyModel *filterProxyModel;
|
||||
SortFilterProxyModel *filterProxyModel;
|
||||
int columnsCount = 2;
|
||||
Tasking::TaskTreeRunner taskTreeRunner;
|
||||
SpinnerSolution::Spinner *m_spinner;
|
||||
@@ -277,7 +303,7 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
||||
|
||||
d->model = new ExtensionsModel(this);
|
||||
|
||||
d->filterProxyModel = new QSortFilterProxyModel(this);
|
||||
d->filterProxyModel = new SortFilterProxyModel(this);
|
||||
d->filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
d->filterProxyModel->setFilterRole(RoleSearchText);
|
||||
d->filterProxyModel->setSortRole(RoleItemType);
|
||||
|
Reference in New Issue
Block a user