forked from qt-creator/qt-creator
QmlDesigner: Use std::ranges in ListModelEditorModel
Change-Id: Icd0bfb1bf468169ecd90c17ab9946d6ceab88f8a Reviewed-by: Ali Kianian <ali.kianian@qt.io>
This commit is contained in:
@@ -15,9 +15,12 @@
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <memory>
|
||||
#include <ranges>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
namespace {
|
||||
|
||||
class ListModelItem : public QStandardItem
|
||||
{
|
||||
public:
|
||||
@@ -92,7 +95,6 @@ public:
|
||||
bool hasInvalidValue = false;
|
||||
};
|
||||
|
||||
namespace {
|
||||
QList<PropertyName> getPropertyNames(const ModelNode &listElementNode)
|
||||
{
|
||||
auto properties = listElementNode.variantProperties();
|
||||
@@ -103,7 +105,7 @@ QList<PropertyName> getPropertyNames(const ModelNode &listElementNode)
|
||||
for (const auto &property : properties)
|
||||
names.push_back(property.name().toByteArray());
|
||||
|
||||
std::sort(names.begin(), names.end());
|
||||
std::ranges::sort(names);
|
||||
|
||||
return names;
|
||||
}
|
||||
@@ -114,11 +116,7 @@ QList<PropertyName> mergeProperyNames(const QList<PropertyName> &first,
|
||||
QList<PropertyName> merged;
|
||||
merged.reserve(first.size() + second.size());
|
||||
|
||||
std::set_union(first.begin(),
|
||||
first.end(),
|
||||
second.begin(),
|
||||
second.end(),
|
||||
std::back_inserter(merged));
|
||||
std::ranges::set_union(first, second, std::back_inserter(merged));
|
||||
|
||||
return merged;
|
||||
}
|
||||
@@ -262,7 +260,7 @@ void ListModelEditorModel::addColumn(const QString &columnName)
|
||||
{
|
||||
PropertyName propertyName = columnName.toUtf8();
|
||||
|
||||
auto found = std::lower_bound(m_propertyNames.begin(), m_propertyNames.end(), propertyName);
|
||||
auto found = std::ranges::lower_bound(m_propertyNames, propertyName);
|
||||
|
||||
if (found != m_propertyNames.end() && *found == propertyName)
|
||||
return;
|
||||
@@ -298,21 +296,21 @@ void ListModelEditorModel::removeColumn(int column)
|
||||
|
||||
void ListModelEditorModel::removeColumns(const QList<QModelIndex> &indices)
|
||||
{
|
||||
using std::ranges::views::reverse;
|
||||
|
||||
std::vector<int> columns = filterColumns(indices);
|
||||
|
||||
std::reverse(columns.begin(), columns.end());
|
||||
|
||||
for (int column : columns)
|
||||
for (int column : columns | reverse)
|
||||
removeColumn(column);
|
||||
}
|
||||
|
||||
void ListModelEditorModel::removeRows(const QList<QModelIndex> &indices)
|
||||
{
|
||||
using std::ranges::views::reverse;
|
||||
|
||||
std::vector<int> rows = filterRows(indices);
|
||||
|
||||
std::reverse(rows.begin(), rows.end());
|
||||
|
||||
for (int row : rows)
|
||||
for (int row : rows | reverse)
|
||||
removeRow(row);
|
||||
}
|
||||
|
||||
@@ -330,7 +328,7 @@ void ListModelEditorModel::renameColumn(int oldColumn, const QString &newColumnN
|
||||
{
|
||||
const PropertyName newPropertyName = newColumnName.toUtf8();
|
||||
|
||||
auto found = std::lower_bound(m_propertyNames.begin(), m_propertyNames.end(), newPropertyName);
|
||||
auto found = std::ranges::lower_bound(m_propertyNames, newPropertyName);
|
||||
|
||||
if (found != m_propertyNames.end() && *found == newPropertyName)
|
||||
return;
|
||||
@@ -374,6 +372,8 @@ QItemSelection ListModelEditorModel::moveRowsUp(const QList<QModelIndex> &indice
|
||||
|
||||
QItemSelection ListModelEditorModel::moveRowsDown(const QList<QModelIndex> &indices)
|
||||
{
|
||||
using std::ranges::views::reverse;
|
||||
|
||||
std::vector<int> rows = filterRows(indices);
|
||||
|
||||
if (rows.empty() || rows.back() >= (rowCount() - 1))
|
||||
@@ -381,29 +381,35 @@ QItemSelection ListModelEditorModel::moveRowsDown(const QList<QModelIndex> &indi
|
||||
|
||||
auto nodeListProperty = m_listModelNode.defaultNodeListProperty();
|
||||
|
||||
std::reverse(rows.begin(), rows.end());
|
||||
|
||||
for (int row : rows) {
|
||||
for (int row : rows | reverse) {
|
||||
insertRow(row + 1, takeRow(row));
|
||||
nodeListProperty.slide(row, row + 1);
|
||||
}
|
||||
|
||||
return {index(rows.front() + 1, 0), index(rows.back() + 1, columnCount() - 1)};
|
||||
return {index(rows.back() + 1, 0), index(rows.front() + 1, columnCount() - 1)};
|
||||
}
|
||||
|
||||
namespace {
|
||||
void removeDuplicates(std::vector<int> &container)
|
||||
{
|
||||
std::ranges::sort(container);
|
||||
|
||||
auto removed = std::ranges::unique(container);
|
||||
container.erase(removed.begin(), removed.end());
|
||||
}
|
||||
} // namespace
|
||||
|
||||
std::vector<int> ListModelEditorModel::filterColumns(const QList<QModelIndex> &indices)
|
||||
{
|
||||
std::vector<int> columns;
|
||||
columns.reserve(indices.size());
|
||||
columns.reserve(Utils::usize(indices));
|
||||
|
||||
for (QModelIndex index : indices) {
|
||||
if (index.column() >= 0)
|
||||
columns.push_back(index.column());
|
||||
}
|
||||
|
||||
std::sort(columns.begin(), columns.end());
|
||||
|
||||
columns.erase(std::unique(columns.begin(), columns.end()), columns.end());
|
||||
removeDuplicates(columns);
|
||||
|
||||
return columns;
|
||||
}
|
||||
@@ -411,16 +417,14 @@ std::vector<int> ListModelEditorModel::filterColumns(const QList<QModelIndex> &i
|
||||
std::vector<int> ListModelEditorModel::filterRows(const QList<QModelIndex> &indices)
|
||||
{
|
||||
std::vector<int> rows;
|
||||
rows.reserve(indices.size());
|
||||
rows.reserve(Utils::usize(indices));
|
||||
|
||||
for (QModelIndex index : indices) {
|
||||
if (index.row() >= 0)
|
||||
rows.push_back(index.row());
|
||||
}
|
||||
|
||||
std::sort(rows.begin(), rows.end());
|
||||
|
||||
rows.erase(std::unique(rows.begin(), rows.end()), rows.end());
|
||||
removeDuplicates(rows);
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
Reference in New Issue
Block a user