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
|
class ExtensionsBrowserPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -255,7 +281,7 @@ public:
|
|||||||
QLineEdit *searchBox;
|
QLineEdit *searchBox;
|
||||||
QListView *extensionsView;
|
QListView *extensionsView;
|
||||||
QItemSelectionModel *selectionModel = nullptr;
|
QItemSelectionModel *selectionModel = nullptr;
|
||||||
QSortFilterProxyModel *filterProxyModel;
|
SortFilterProxyModel *filterProxyModel;
|
||||||
int columnsCount = 2;
|
int columnsCount = 2;
|
||||||
Tasking::TaskTreeRunner taskTreeRunner;
|
Tasking::TaskTreeRunner taskTreeRunner;
|
||||||
SpinnerSolution::Spinner *m_spinner;
|
SpinnerSolution::Spinner *m_spinner;
|
||||||
@@ -277,7 +303,7 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
|
|||||||
|
|
||||||
d->model = new ExtensionsModel(this);
|
d->model = new ExtensionsModel(this);
|
||||||
|
|
||||||
d->filterProxyModel = new QSortFilterProxyModel(this);
|
d->filterProxyModel = new SortFilterProxyModel(this);
|
||||||
d->filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
d->filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||||
d->filterProxyModel->setFilterRole(RoleSearchText);
|
d->filterProxyModel->setFilterRole(RoleSearchText);
|
||||||
d->filterProxyModel->setSortRole(RoleItemType);
|
d->filterProxyModel->setSortRole(RoleItemType);
|
||||||
|
Reference in New Issue
Block a user