CMake: Don't filter out new keys

Previously, if you have a filter set in the CMake Settings
variable list, adding a new one would immediately hide it,
as the text filter hides the "<UNSET>" key. This made it look
like the adding failed.

With this change, new Variables are always shown so
they stay editable to user.

Change-Id: I9c2eb7f9983b23e1cd3aa50f589142551caaf56f
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Marcus Tillmanns
2022-10-17 13:28:59 +02:00
parent 4266f612e6
commit f7a2132598
5 changed files with 32 additions and 1 deletions

View File

@@ -12,6 +12,12 @@ CategorySortFilterModel::CategorySortFilterModel(QObject *parent)
{
}
void CategorySortFilterModel::setNewItemRole(int role)
{
m_newItemRole = role;
invalidate();
}
bool CategorySortFilterModel::filterAcceptsRow(int source_row,
const QModelIndex &source_parent) const
{
@@ -21,6 +27,12 @@ bool CategorySortFilterModel::filterAcceptsRow(int source_row,
const QModelIndex &categoryIndex = sourceModel()->index(source_row, 0, source_parent);
if (regexp.match(sourceModel()->data(categoryIndex, filterRole()).toString()).hasMatch())
return true;
if (m_newItemRole != -1 && categoryIndex.isValid()) {
if (categoryIndex.data(m_newItemRole).toBool())
return true;
}
const int rowCount = sourceModel()->rowCount(categoryIndex);
for (int row = 0; row < rowCount; ++row) {
if (filterAcceptsRow(row, categoryIndex))
@@ -28,6 +40,14 @@ bool CategorySortFilterModel::filterAcceptsRow(int source_row,
}
return false;
}
if (m_newItemRole != -1) {
const QModelIndex &idx = sourceModel()->index(source_row, 0, source_parent);
if (idx.data(m_newItemRole).toBool())
return true;
}
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}

View File

@@ -14,8 +14,14 @@ class QTCREATOR_UTILS_EXPORT CategorySortFilterModel : public QSortFilterProxyMo
public:
CategorySortFilterModel(QObject *parent = nullptr);
// "New" items will always be accepted, regardless of the filter.
void setNewItemRole(int role);
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
private:
int m_newItemRole = -1;
};
} // Utils

View File

@@ -236,6 +236,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
m_configTextFilterModel->setSourceModel(m_configFilterModel);
m_configTextFilterModel->setSortRole(Qt::DisplayRole);
m_configTextFilterModel->setFilterKeyColumn(-1);
m_configTextFilterModel->setNewItemRole(ConfigModel::ItemIsUserNew);
connect(m_configTextFilterModel, &QAbstractItemModel::layoutChanged, this, [this]() {
QModelIndex selectedIdx = m_configView->currentIndex();

View File

@@ -546,6 +546,9 @@ QVariant ConfigModelTreeItem::data(int column, int role) const
if (role == ConfigModel::ItemIsInitialRole) {
return dataItem->isInitial ? "1" : "0";
}
if (role == ConfigModel::ItemIsUserNew) {
return dataItem->isUserNew ? "1" : "0";
}
auto fontRole = [this]() -> QFont {
QFont font;

View File

@@ -18,7 +18,8 @@ class ConfigModel : public Utils::TreeModel<>
public:
enum Roles {
ItemIsAdvancedRole = Qt::UserRole,
ItemIsInitialRole
ItemIsInitialRole,
ItemIsUserNew,
};
struct DataItem {