From a82dd10518861a869a5a95f6c81868f0785edf86 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 4 Nov 2018 05:03:46 +0200 Subject: [PATCH] Git: Enable renaming local branches by direct editing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7edab94d949a6e48642f280af52fd156c803cafb Reviewed-by: André Hartmann --- src/plugins/git/branchadddialog.cpp | 17 +++++++++++++++++ src/plugins/git/branchadddialog.h | 13 +++++++++++++ src/plugins/git/branchmodel.cpp | 5 ++++- src/plugins/git/branchview.cpp | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/plugins/git/branchadddialog.cpp b/src/plugins/git/branchadddialog.cpp index 2ea024bef4a..b6d753b9f04 100644 --- a/src/plugins/git/branchadddialog.cpp +++ b/src/plugins/git/branchadddialog.cpp @@ -24,9 +24,11 @@ ****************************************************************************/ #include "branchadddialog.h" +#include "branchmodel.h" #include "ui_branchadddialog.h" #include "gitplugin.h" +#include #include #include @@ -87,6 +89,21 @@ private: QStringList m_localBranches; }; +BranchValidationDelegate::BranchValidationDelegate(QWidget *parent, BranchModel *model) + : QItemDelegate(parent) + , m_model(model) +{ +} + +QWidget *BranchValidationDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem & /*option*/, + const QModelIndex & /*index*/) const +{ + auto lineEdit = new Utils::FancyLineEdit(parent); + BranchNameValidator *validator = new BranchNameValidator(m_model->localBranchNames(), lineEdit); + lineEdit->setValidator(validator); + return lineEdit; +} BranchAddDialog::BranchAddDialog(const QStringList &localBranches, bool addBranch, QWidget *parent) : QDialog(parent), diff --git a/src/plugins/git/branchadddialog.h b/src/plugins/git/branchadddialog.h index b1320d6aa96..f8331fd5c82 100644 --- a/src/plugins/git/branchadddialog.h +++ b/src/plugins/git/branchadddialog.h @@ -26,13 +26,26 @@ #pragma once #include +#include namespace Git { namespace Internal { +class BranchModel; namespace Ui { class BranchAddDialog; } +class BranchValidationDelegate : public QItemDelegate +{ +public: + BranchValidationDelegate(QWidget *parent, BranchModel *model); + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + +private: + BranchModel *m_model; +}; + class BranchAddDialog : public QDialog { Q_OBJECT diff --git a/src/plugins/git/branchmodel.cpp b/src/plugins/git/branchmodel.cpp index 6f7f83609c8..8c9db00828a 100644 --- a/src/plugins/git/branchmodel.cpp +++ b/src/plugins/git/branchmodel.cpp @@ -317,7 +317,10 @@ Qt::ItemFlags BranchModel::flags(const QModelIndex &index) const BranchNode *node = indexToNode(index); if (!node) return Qt::NoItemFlags; - return Qt::ItemIsSelectable | Qt::ItemIsEnabled; + Qt::ItemFlags res = Qt::ItemIsSelectable | Qt::ItemIsEnabled; + if (node->isLeaf() && node->isLocal()) + res |= Qt::ItemIsEditable; + return res; } void BranchModel::clear() diff --git a/src/plugins/git/branchview.cpp b/src/plugins/git/branchview.cpp index 52fe887616c..4e17f31686b 100644 --- a/src/plugins/git/branchview.cpp +++ b/src/plugins/git/branchview.cpp @@ -126,6 +126,9 @@ BranchView::BranchView() : this, &BranchView::BranchView::setIncludeTags); m_branchView->setContextMenuPolicy(Qt::CustomContextMenu); + m_branchView->setEditTriggers(QAbstractItemView::SelectedClicked + | QAbstractItemView::EditKeyPressed); + m_branchView->setItemDelegate(new BranchValidationDelegate(this, m_model)); connect(m_branchView, &QAbstractItemView::doubleClicked, this, [this](const QModelIndex &idx) { log(m_filterModel->mapToSource(idx)); }); connect(m_branchView, &QWidget::customContextMenuRequested,