diff options
author | Marco Bubke <marco.bubke@qt.io> | 2020-07-02 19:19:52 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2020-07-08 09:17:41 +0000 |
commit | b73ce9eccfc5f3e06fa92efb53bd8c341c13f3e7 (patch) | |
tree | 97a669c36de59d330faefb7840c0ccd79b875978 /src | |
parent | 7504c966bf64a4b38b8e9ff200c93b2e8470acad (diff) |
QmlDesigner: Add row move up and move down buttons
Task-number: QDS-2294
Change-Id: Ia1e64d0811f55151dfe529db4868821840a8fba9
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src')
4 files changed, 62 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.cpp b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.cpp index 968c719af08..0cf73976a84 100644 --- a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.cpp +++ b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.cpp @@ -27,6 +27,7 @@ #include "listmodeleditormodel.h" #include <theme.h> +#include <qmldesignericons.h> #include <coreplugin/icore.h> #include <utils/algorithm.h> @@ -71,6 +72,10 @@ ListModelEditorDialog::ListModelEditorDialog(QWidget *parent) m_addColumnAction = toolBar->addAction(getIcon(Theme::Icon::addColumnAfter), tr("Add Column")); m_removeColumnsAction = toolBar->addAction(getIcon(Theme::Icon::deleteColumn), tr("Remove Columns")); + m_moveDownAction = toolBar->addAction(Icons::ARROW_DOWN.icon(), tr("Move down (CTRL + Down).")); + m_moveDownAction->setShortcut(QKeySequence(Qt::Key_Down | Qt::CTRL)); + m_moveUpAction = toolBar->addAction(Icons::ARROW_UP.icon(), tr("Move up (CTRL + Up).")); + m_moveDownAction->setShortcut(QKeySequence(Qt::Key_Up | Qt::CTRL)); } ListModelEditorDialog::~ListModelEditorDialog() = default; @@ -83,6 +88,8 @@ void ListModelEditorDialog::setModel(ListModelEditorModel *model) connect(m_addColumnAction, &QAction::triggered, this, &ListModelEditorDialog::openColumnDialog); connect(m_removeRowsAction, &QAction::triggered, this, &ListModelEditorDialog::removeRows); connect(m_removeColumnsAction, &QAction::triggered, this, &ListModelEditorDialog::removeColumns); + connect(m_moveDownAction, &QAction::triggered, this, &ListModelEditorDialog::moveRowsDown); + connect(m_moveUpAction, &QAction::triggered, this, &ListModelEditorDialog::moveRowsUp); connect(m_tableView->horizontalHeader(), &QHeaderView::sectionDoubleClicked, this, @@ -134,4 +141,16 @@ void ListModelEditorDialog::changeHeader(int column) m_model->renameColumn(column, newPropertyName); } +void ListModelEditorDialog::moveRowsDown() +{ + QItemSelection selection = m_model->moveRowsDown(m_tableView->selectionModel()->selectedRows()); + m_tableView->selectionModel()->select(selection, QItemSelectionModel::Select); +} + +void ListModelEditorDialog::moveRowsUp() +{ + QItemSelection selection = m_model->moveRowsUp(m_tableView->selectionModel()->selectedRows()); + m_tableView->selectionModel()->select(selection, QItemSelectionModel::Select); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.h b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.h index 519d0869fae..24e19c8ff97 100644 --- a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.h +++ b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditordialog.h @@ -59,6 +59,8 @@ private: void removeRows(); void removeColumns(); void changeHeader(int column); + void moveRowsDown(); + void moveRowsUp(); private: ListModelEditorModel *m_model{}; @@ -66,6 +68,8 @@ private: QAction *m_removeRowsAction{}; QAction *m_addColumnAction{}; QAction *m_removeColumnsAction{}; + QAction *m_moveUpAction{}; + QAction *m_moveDownAction{}; QTableView *m_tableView{}; }; diff --git a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.cpp b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.cpp index 066af6e3451..0aeabb8b895 100644 --- a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.cpp +++ b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.cpp @@ -319,6 +319,42 @@ void ListModelEditorModel::renameColumn(int oldColumn, const QString &newColumnN setHorizontalHeaderLabels(convertToStringList(m_propertyNames)); } +QItemSelection ListModelEditorModel::moveRowsUp(const QList<QModelIndex> &indices) +{ + std::vector<int> rows = filterRows(indices); + + if (rows.empty() || rows.front() < 1) + return {}; + + auto nodeListProperty = m_listModelNode.defaultNodeListProperty(); + + for (int row : rows) { + insertRow(row - 1, takeRow(row)); + nodeListProperty.slide(row, row - 1); + } + + return {index(rows.front() - 1, 0), index(rows.back() - 1, columnCount() - 1)}; +} + +QItemSelection ListModelEditorModel::moveRowsDown(const QList<QModelIndex> &indices) +{ + std::vector<int> rows = filterRows(indices); + + if (rows.empty() || rows.back() >= (rowCount() - 1)) + return {}; + + auto nodeListProperty = m_listModelNode.defaultNodeListProperty(); + + std::reverse(rows.begin(), rows.end()); + + for (int row : rows) { + insertRow(row + 1, takeRow(row)); + nodeListProperty.slide(row, row + 1); + } + + return {index(rows.front() + 1, 0), index(rows.back() + 1, columnCount() - 1)}; +} + std::vector<int> ListModelEditorModel::filterColumns(const QList<QModelIndex> &indices) { std::vector<int> columns; diff --git a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.h b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.h index 3976b34a9d8..3056d32dbb0 100644 --- a/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.h +++ b/src/plugins/qmldesigner/components/listmodeleditor/listmodeleditormodel.h @@ -27,6 +27,7 @@ #include <modelnode.h> +#include <QItemSelection> #include <QStandardItemModel> namespace QmlDesigner { @@ -53,6 +54,8 @@ public: void removeColumns(const QList<QModelIndex> &indices); void removeRows(const QList<QModelIndex> &indices); void renameColumn(int column, const QString &newColumnName); + QItemSelection moveRowsUp(const QList<QModelIndex> &indices); + QItemSelection moveRowsDown(const QList<QModelIndex> &indices); static std::vector<int> filterColumns(const QList<QModelIndex> &indices); static std::vector<int> filterRows(const QList<QModelIndex> &indices); |