diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2019-10-09 23:30:19 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2020-02-17 13:11:52 +0000 |
commit | 1b2aa56f15ca27e0e8760875fd1ff9accbe9717e (patch) | |
tree | 1d9f2fbf4c7f72b602f9d0810281fb1b99ee71df /src/plugins/git | |
parent | 1ebb72b47f95bf34da6b3dc9883366e642849058 (diff) | |
download | qt-creator-1b2aa56f15ca27e0e8760875fd1ff9accbe9717e.tar.gz |
Git: Add grep and pickaxe filters
Fixes: QTCREATORBUG-22512
Change-Id: I98eed9a7f9da15e163804a0fd81713149a06c5b0
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/git')
-rw-r--r-- | src/plugins/git/gitclient.cpp | 12 | ||||
-rw-r--r-- | src/plugins/git/giteditor.cpp | 45 | ||||
-rw-r--r-- | src/plugins/git/giteditor.h | 10 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 54 |
4 files changed, 115 insertions, 6 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 525fca7aba..7ba46935db 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -999,8 +999,9 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName, const QString title = tr("Git Log \"%1\"").arg(msgArg); const Id editorId = Git::Constants::GIT_LOG_EDITOR_ID; const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); - VcsBaseEditorWidget *editor = createVcsEditor(editorId, title, sourceFile, - codecFor(CodecLogOutput), "logTitle", msgArg); + GitEditorWidget *editor = static_cast<GitEditorWidget *>( + createVcsEditor(editorId, title, sourceFile, + codecFor(CodecLogOutput), "logTitle", msgArg)); VcsBaseEditorConfig *argWidget = editor->editorConfig(); if (!argWidget) { argWidget = new GitLogArgumentsWidget(settings(), !fileName.isEmpty(), editor->toolBar()); @@ -1018,6 +1019,13 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName, arguments << "-n" << QString::number(logCount); arguments << argWidget->arguments(); + const QString grepValue = editor->grepValue(); + if (!grepValue.isEmpty()) + arguments << "--grep=" + grepValue; + + const QString pickaxeValue = editor->pickaxeValue(); + if (!pickaxeValue.isEmpty()) + arguments << "-S" << pickaxeValue; if (!fileName.isEmpty()) arguments << "--" << fileName; diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 78b8389da1..d9c29afebf 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -35,10 +35,11 @@ #include "githighlighters.h" #include <coreplugin/icore.h> -#include <utils/qtcassert.h> -#include <vcsbase/vcsoutputwindow.h> #include <texteditor/textdocument.h> +#include <vcsbase/vcsbaseeditorconfig.h> +#include <vcsbase/vcsoutputwindow.h> +#include <utils/qtcassert.h> #include <utils/temporaryfile.h> #include <QMenu> @@ -380,5 +381,45 @@ QString GitEditorWidget::sourceWorkingDirectory() const return path.toString(); } +void GitEditorWidget::lineEditChanged() +{ + if (VcsBaseEditorConfig *config = editorConfig()) + config->handleArgumentsChanged(); +} + +void GitEditorWidget::refreshOnLineEdit(Utils::FancyLineEdit *lineEdit) +{ + connect(lineEdit, &QLineEdit::returnPressed, + this, &GitEditorWidget::lineEditChanged); + connect(lineEdit, &Utils::FancyLineEdit::rightButtonClicked, + this, &GitEditorWidget::lineEditChanged); +} + +void GitEditorWidget::setGrepLineEdit(Utils::FancyLineEdit *lineEdit) +{ + m_grepLineEdit = lineEdit; + refreshOnLineEdit(lineEdit); +} + +void GitEditorWidget::setPickaxeLineEdit(Utils::FancyLineEdit *lineEdit) +{ + m_pickaxeLineEdit = lineEdit; + refreshOnLineEdit(lineEdit); +} + +QString GitEditorWidget::grepValue() const +{ + if (!m_grepLineEdit) + return QString(); + return m_grepLineEdit->text(); +} + +QString GitEditorWidget::pickaxeValue() const +{ + if (!m_pickaxeLineEdit) + return QString(); + return m_pickaxeLineEdit->text(); +} + } // namespace Internal } // namespace Git diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index a23a4fe76d..bc7df7fe9e 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -29,6 +29,8 @@ #include <QRegExp> +namespace Utils { class FancyLineEdit; } + namespace Git { namespace Internal { @@ -40,6 +42,10 @@ public: GitEditorWidget(); void setPlainText(const QString &text) override; + void setGrepLineEdit(Utils::FancyLineEdit *lineEdit); + void setPickaxeLineEdit(Utils::FancyLineEdit *lineEdit); + QString grepValue() const; + QString pickaxeValue() const; private: void applyDiffChunk(const VcsBase::DiffChunk& chunk, bool revert); @@ -59,9 +65,13 @@ private: bool supportChangeLinks() const override; QString fileNameForLine(int line) const override; QString sourceWorkingDirectory() const; + void refreshOnLineEdit(Utils::FancyLineEdit *lineEdit); + void lineEditChanged(); mutable QRegExp m_changeNumberPattern; QString m_currentChange; + Utils::FancyLineEdit *m_grepLineEdit = nullptr; + Utils::FancyLineEdit *m_pickaxeLineEdit = nullptr; }; } // namespace Git diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index a4731b07b7..b04db69e94 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -54,11 +54,13 @@ #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> #include <coreplugin/locator/commandlocator.h> +#include <coreplugin/messagebox.h> #include <coreplugin/modemanager.h> #include <coreplugin/navigationwidget.h> #include <coreplugin/vcsmanager.h> -#include <coreplugin/messagebox.h> +#include <aggregation/aggregate.h> +#include <utils/fancylineedit.h> #include <utils/parameteraction.h> #include <utils/pathchooser.h> #include <utils/qtcassert.h> @@ -83,7 +85,9 @@ #include <QAction> #include <QApplication> #include <QFileDialog> +#include <QHBoxLayout> #include <QMenu> +#include <QVBoxLayout> #ifdef WITH_TESTS #include <QTest> @@ -125,6 +129,52 @@ private: GitClient *m_client; }; +class GitLogEditorWidget : public QWidget +{ + Q_DECLARE_TR_FUNCTIONS(Git::Internal::GitLogEditorWidget); +public: + GitLogEditorWidget() + { + auto gitEditor = new GitEditorWidget; + auto vlayout = new QVBoxLayout; + auto hlayout = new QHBoxLayout; + vlayout->setSpacing(0); + vlayout->setContentsMargins(0, 0, 0, 0); + auto grepLineEdit = addLineEdit(tr("Filter by message"), + tr("Filter log entries by text in the commit message.")); + auto pickaxeLineEdit = addLineEdit(tr("Filter by content"), + tr("Filter log entries by added or removed string.")); + hlayout->setSpacing(20); + hlayout->setContentsMargins(0, 0, 0, 0); + hlayout->addWidget(new QLabel(tr("Filter:"))); + hlayout->addWidget(grepLineEdit); + hlayout->addWidget(pickaxeLineEdit); + hlayout->addStretch(); + vlayout->addLayout(hlayout); + vlayout->addWidget(gitEditor); + setLayout(vlayout); + gitEditor->setGrepLineEdit(grepLineEdit); + gitEditor->setPickaxeLineEdit(pickaxeLineEdit); + + auto textAgg = Aggregation::Aggregate::parentAggregate(gitEditor); + auto agg = textAgg ? textAgg : new Aggregation::Aggregate; + agg->add(this); + agg->add(gitEditor); + setFocusProxy(gitEditor); + } + +private: + FancyLineEdit *addLineEdit(const QString &placeholder, const QString &tooltip) + { + auto lineEdit = new FancyLineEdit; + lineEdit->setFiltering(true); + lineEdit->setToolTip(tooltip); + lineEdit->setPlaceholderText(placeholder); + lineEdit->setMaximumWidth(200); + return lineEdit; + } +}; + const unsigned minimumRequiredVersion = 0x010900; const VcsBaseSubmitEditorParameters submitParameters { @@ -346,7 +396,7 @@ public: VcsEditorFactory logEditorFactory { &logEditorParameters, - [] { return new GitEditorWidget; }, + [] { return new GitLogEditorWidget; }, std::bind(&GitPluginPrivate::describe, this, _1, _2) }; |