From 13c7283c0e3f8cb1c199bbc3ddb16bc5f99f5910 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 12 Dec 2022 16:56:17 +0100 Subject: [PATCH] GitBaseDiffEditorController: Remove interactive branch expansion Branches are now being automatically expanded. Change-Id: I6c8986f39fe0ceb71841a2fea46b6038123240b7 Reviewed-by: Orgad Shaneh --- src/plugins/diffeditor/CMakeLists.txt | 1 - .../diffeditor/descriptionwidgetwatcher.cpp | 56 ------ .../diffeditor/descriptionwidgetwatcher.h | 38 ---- src/plugins/diffeditor/diffeditor.qbs | 2 - src/plugins/git/gitclient.cpp | 177 ------------------ 5 files changed, 274 deletions(-) delete mode 100644 src/plugins/diffeditor/descriptionwidgetwatcher.cpp delete mode 100644 src/plugins/diffeditor/descriptionwidgetwatcher.h diff --git a/src/plugins/diffeditor/CMakeLists.txt b/src/plugins/diffeditor/CMakeLists.txt index 6ea288f3941..580bce7fa41 100644 --- a/src/plugins/diffeditor/CMakeLists.txt +++ b/src/plugins/diffeditor/CMakeLists.txt @@ -1,7 +1,6 @@ add_qtc_plugin(DiffEditor PLUGIN_DEPENDS Core TextEditor SOURCES - descriptionwidgetwatcher.cpp descriptionwidgetwatcher.h diffeditor.cpp diffeditor.h diffeditor.qrc diffeditor_global.h diff --git a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp b/src/plugins/diffeditor/descriptionwidgetwatcher.cpp deleted file mode 100644 index 1cf88d97e7b..00000000000 --- a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 - -#include "descriptionwidgetwatcher.h" -#include "diffeditor.h" -#include "diffeditorcontroller.h" - -#include -#include -#include - -using namespace Core; - -namespace DiffEditor { - -DescriptionWidgetWatcher::DescriptionWidgetWatcher(DiffEditorController *controller) - : QObject(controller), m_document(controller->document()) -{ - const QList editors = DocumentModel::editorsForDocument(controller->document()); - for (auto *editor : editors) { - if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) - m_widgets.append(widget); - } - - connect(EditorManager::instance(), &EditorManager::editorOpened, this, - [this](IEditor *editor) { - if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) { - m_widgets.append(widget); - emit descriptionWidgetAdded(widget); - } - }); - - connect(EditorManager::instance(), &EditorManager::editorAboutToClose, this, - [this](IEditor *editor) { - if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) { - emit descriptionWidgetRemoved(widget); - m_widgets.removeAll(widget); - } - }); -} - -QList DescriptionWidgetWatcher::descriptionWidgets() const -{ - return m_widgets; -} - -TextEditor::TextEditorWidget *DescriptionWidgetWatcher::descriptionWidget(Core::IEditor *editor) const -{ - if (auto diffEditor = qobject_cast(editor)) { - if (diffEditor->document() == m_document) - return diffEditor->descriptionWidget(); - } - return nullptr; -} - -} // namespace DiffEditor diff --git a/src/plugins/diffeditor/descriptionwidgetwatcher.h b/src/plugins/diffeditor/descriptionwidgetwatcher.h deleted file mode 100644 index 0277a4307f2..00000000000 --- a/src/plugins/diffeditor/descriptionwidgetwatcher.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "diffeditor_global.h" - -#include - -namespace Core { -class IDocument; -class IEditor; -} -namespace TextEditor { class TextEditorWidget; } - -namespace DiffEditor { - -class DiffEditorController; - -class DIFFEDITOR_EXPORT DescriptionWidgetWatcher : public QObject -{ - Q_OBJECT -public: - explicit DescriptionWidgetWatcher(DiffEditorController *controller); - QList descriptionWidgets() const; - -signals: - void descriptionWidgetAdded(TextEditor::TextEditorWidget *editor); - void descriptionWidgetRemoved(TextEditor::TextEditorWidget *editor); - -private: - TextEditor::TextEditorWidget *descriptionWidget(Core::IEditor *editor) const; - - QList m_widgets; - Core::IDocument *m_document = nullptr; -}; - -} // namespace DiffEditor diff --git a/src/plugins/diffeditor/diffeditor.qbs b/src/plugins/diffeditor/diffeditor.qbs index e1ce4998716..742997d4db9 100644 --- a/src/plugins/diffeditor/diffeditor.qbs +++ b/src/plugins/diffeditor/diffeditor.qbs @@ -14,8 +14,6 @@ QtcPlugin { ] files: [ - "descriptionwidgetwatcher.cpp", - "descriptionwidgetwatcher.h", "diffeditor.cpp", "diffeditor.h", "diffeditor.qrc", diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 97f3b7c0755..8019e0577f8 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -42,7 +42,6 @@ #include #include -#include #include #include @@ -120,125 +119,6 @@ static QString branchesDisplay(const QString &prefix, QStringList *branches, boo return output; } -class DescriptionWidgetDecorator : public QObject -{ - Q_OBJECT -public: - DescriptionWidgetDecorator(DescriptionWidgetWatcher *watcher); - - bool eventFilter(QObject *watched, QEvent *event) override; - -signals: - void branchListRequested(); - -private: - bool checkContentsUnderCursor(const QTextCursor &cursor) const; - void highlightCurrentContents(TextEditor::TextEditorWidget *textEditor, - const QTextCursor &cursor); - void handleCurrentContents(const QTextCursor &cursor); - void addWatch(TextEditor::TextEditorWidget *widget); - void removeWatch(TextEditor::TextEditorWidget *widget); - - DescriptionWidgetWatcher *m_watcher; - QHash m_viewportToTextEditor; -}; - -DescriptionWidgetDecorator::DescriptionWidgetDecorator(DescriptionWidgetWatcher *watcher) - : QObject(), - m_watcher(watcher) -{ - QList widgets = m_watcher->descriptionWidgets(); - for (auto *widget : widgets) - addWatch(widget); - - connect(m_watcher, &DescriptionWidgetWatcher::descriptionWidgetAdded, - this, &DescriptionWidgetDecorator::addWatch); - connect(m_watcher, &DescriptionWidgetWatcher::descriptionWidgetRemoved, - this, &DescriptionWidgetDecorator::removeWatch); -} - -bool DescriptionWidgetDecorator::eventFilter(QObject *watched, QEvent *event) -{ - TextEditor::TextEditorWidget *textEditor = m_viewportToTextEditor.value(watched); - if (!textEditor) - return QObject::eventFilter(watched, event); - - if (event->type() == QEvent::MouseMove) { - auto mouseEvent = static_cast(event); - if (mouseEvent->buttons()) - return QObject::eventFilter(watched, event); - - Qt::CursorShape cursorShape; - - const QTextCursor cursor = textEditor->cursorForPosition(mouseEvent->pos()); - if (checkContentsUnderCursor(cursor)) { - highlightCurrentContents(textEditor, cursor); - cursorShape = Qt::PointingHandCursor; - } else { - textEditor->setExtraSelections(TextEditor::TextEditorWidget::OtherSelection, - QList()); - cursorShape = Qt::IBeamCursor; - } - - bool ret = QObject::eventFilter(watched, event); - textEditor->viewport()->setCursor(cursorShape); - return ret; - } else if (event->type() == QEvent::MouseButtonRelease) { - auto mouseEvent = static_cast(event); - - if (mouseEvent->button() == Qt::LeftButton && !(mouseEvent->modifiers() & Qt::ShiftModifier)) { - const QTextCursor cursor = textEditor->cursorForPosition(mouseEvent->pos()); - if (checkContentsUnderCursor(cursor)) { - handleCurrentContents(cursor); - return true; - } - } - - return QObject::eventFilter(watched, event); - } - return QObject::eventFilter(watched, event); -} - -bool DescriptionWidgetDecorator::checkContentsUnderCursor(const QTextCursor &cursor) const -{ - return cursor.block().text() == Constants::EXPAND_BRANCHES; -} - -void DescriptionWidgetDecorator::highlightCurrentContents( - TextEditor::TextEditorWidget *textEditor, const QTextCursor &cursor) -{ - QTextEdit::ExtraSelection sel; - sel.cursor = cursor; - sel.cursor.select(QTextCursor::LineUnderCursor); - sel.format.setUnderlineStyle(QTextCharFormat::SingleUnderline); - const QColor textColor = TextEditor::TextEditorSettings::fontSettings().formatFor(TextEditor::C_TEXT).foreground(); - sel.format.setUnderlineColor(textColor.isValid() ? textColor : textEditor->palette().color(QPalette::WindowText)); - textEditor->setExtraSelections(TextEditor::TextEditorWidget::OtherSelection, - QList() << sel); -} - -void DescriptionWidgetDecorator::handleCurrentContents(const QTextCursor &cursor) -{ - QTextCursor copy = cursor; - - copy.select(QTextCursor::LineUnderCursor); - copy.removeSelectedText(); - copy.insertText("Branches: Expanding..."); - emit branchListRequested(); -} - -void DescriptionWidgetDecorator::addWatch(TextEditor::TextEditorWidget *widget) -{ - m_viewportToTextEditor.insert(widget->viewport(), widget); - widget->viewport()->installEventFilter(this); -} - -void DescriptionWidgetDecorator::removeWatch(TextEditor::TextEditorWidget *widget) -{ - widget->viewport()->removeEventFilter(this); - m_viewportToTextEditor.remove(widget->viewport()); -} - /////////////////////////////// class GitBaseDiffEditorController : public VcsBaseDiffEditorController @@ -259,10 +139,6 @@ public: void initialize(); private: - void updateBranchList(); - - DescriptionWidgetWatcher m_watcher; - DescriptionWidgetDecorator m_decorator; QString m_leftCommit; QString m_rightCommit; }; @@ -287,13 +163,9 @@ GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document, const QString &leftCommit, const QString &rightCommit) : VcsBaseDiffEditorController(document), - m_watcher(this), - m_decorator(&m_watcher), m_leftCommit(leftCommit), m_rightCommit(rightCommit) { - connect(&m_decorator, &DescriptionWidgetDecorator::branchListRequested, - this, &GitBaseDiffEditorController::updateBranchList); setDisplayName("Git Diff"); } @@ -310,55 +182,6 @@ void GitBaseDiffEditorController::initialize() } } -void GitBaseDiffEditorController::updateBranchList() -{ - const QString revision = description().mid(7, 12); - if (revision.isEmpty()) - return; - - const auto commandHandler = [this](const CommandResult &result) { - const QString remotePrefix = "remotes/"; - const QString localPrefix = ""; - const int prefixLength = remotePrefix.length(); - QString output = BRANCHES_PREFIX; - QStringList branches; - QString previousRemote = localPrefix; - bool first = true; - for (const QString &branch : result.cleanedStdOut().split('\n')) { - const QString b = branch.mid(2).trimmed(); - if (b.isEmpty()) - continue; - if (b.startsWith(remotePrefix)) { - const int nextSlash = b.indexOf('/', prefixLength); - if (nextSlash < 0) - continue; - const QString remote = b.mid(prefixLength, nextSlash - prefixLength); - if (remote != previousRemote) { - output += branchesDisplay(previousRemote, &branches, &first) + '\n'; - branches.clear(); - previousRemote = remote; - } - branches << b.mid(nextSlash + 1); - } else { - branches << b; - } - } - if (branches.isEmpty()) { - if (previousRemote == localPrefix) - output += Tr::tr(""); - } else { - output += branchesDisplay(previousRemote, &branches, &first); - } - const QString branchList = output.trimmed(); - QString newDescription = description(); - newDescription.replace(Constants::EXPAND_BRANCHES, branchList); - setDescription(newDescription); - }; - m_instance->vcsExecWithHandler(baseDirectory(), - {"branch", noColorOption, "-a", "--contains", revision}, - this, commandHandler); -} - /////////////////////////////// void GitBaseDiffEditorController::runCommand(const QList &args, QTextCodec *codec)