aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitgrep.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2016-01-28 23:37:10 +0200
committerOrgad Shaneh <orgads@gmail.com>2016-02-04 11:58:29 +0000
commit558c08e2c5a5d2d22ae5ee9bffdd138e90668214 (patch)
tree3a65470a6c2ea473d7f653f96a4b5a8eb461d25b /src/plugins/git/gitgrep.cpp
parent1b9b1541d376c5e75dada0d266c2b5b7f3e5fd30 (diff)
Git: Hook grep into Find In File System dialog
Change-Id: I0fc77ad61c8874a21afd5b5135df4d30fa795a8e Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/git/gitgrep.cpp')
-rw-r--r--src/plugins/git/gitgrep.cpp132
1 files changed, 38 insertions, 94 deletions
diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp
index 20ec0507479..3f0729e9f54 100644
--- a/src/plugins/git/gitgrep.cpp
+++ b/src/plugins/git/gitgrep.cpp
@@ -27,24 +27,21 @@
#include "gitclient.h"
#include "gitplugin.h"
-#include <coreplugin/editormanager/editormanager.h>
-#include <coreplugin/find/findplugin.h>
#include <coreplugin/vcsmanager.h>
+#include <texteditor/findinfiles.h>
#include <vcsbase/vcsbaseconstants.h>
#include <utils/filesearch.h>
#include <utils/fileutils.h>
-#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/runextensions.h>
-#include <QDir>
+#include <QCheckBox>
+#include <QCoreApplication>
#include <QEventLoop>
#include <QFuture>
#include <QFutureWatcher>
-#include <QGridLayout>
-#include <QLabel>
#include <QSettings>
using namespace Utils;
@@ -54,18 +51,10 @@ namespace Internal {
using namespace Core;
-QString GitGrep::id() const
-{
- return QLatin1String("Git Grep");
-}
-
-QString GitGrep::displayName() const
-{
- return tr("Git Grep");
-}
-
namespace {
+const char EnableGitGrep[] = "EnableGitGrep";
+
class GitGrepRunner : public QObject
{
using FutureInterfaceType = QFutureInterface<FileSearchResultList>;
@@ -180,116 +169,71 @@ private:
} // namespace
-QFuture<FileSearchResultList> GitGrep::executeSearch(
- const TextEditor::FileFindParameters &parameters)
-{
- return Utils::runAsync<FileSearchResultList>(GitGrepRunner::run, parameters);
-}
-
-FileIterator *GitGrep::files(const QStringList &, const QVariant &) const
+static bool validateDirectory(const QString &path)
{
- QTC_ASSERT(false, return 0);
+ static IVersionControl *gitVc = VcsManager::versionControl(VcsBase::Constants::VCS_ID_GIT);
+ QTC_ASSERT(gitVc, return false);
+ return gitVc == VcsManager::findVersionControlForDirectory(path, 0);
}
-QVariant GitGrep::additionalParameters() const
+GitGrep::GitGrep()
{
- return qVariantFromValue(path().toString());
+ m_widget = new QCheckBox(tr("&Use Git Grep"));
+ m_widget->setToolTip(tr("Use Git Grep for searching. This includes only files "
+ "that are managed by source control."));
+ TextEditor::FindInFiles *findInFiles = TextEditor::FindInFiles::instance();
+ QTC_ASSERT(findInFiles, return);
+ QObject::connect(findInFiles, &TextEditor::FindInFiles::pathChanged,
+ m_widget.data(), [this](const QString &path) {
+ m_widget->setEnabled(validateDirectory(path));
+ });
+ findInFiles->setFindExtension(this);
}
-QString GitGrep::label() const
+GitGrep::~GitGrep()
{
- const QChar slash = QLatin1Char('/');
- const QStringList &nonEmptyComponents = path().toFileInfo().absoluteFilePath()
- .split(slash, QString::SkipEmptyParts);
- return tr("Git Grep \"%1\":").arg(nonEmptyComponents.isEmpty() ? QString(slash)
- : nonEmptyComponents.last());
+ delete m_widget.data();
}
-QString GitGrep::toolTip() const
+QString GitGrep::title() const
{
- //: %3 is filled by BaseFileFind::runNewSearch
- return tr("Path: %1\nFilter: %2\n%3")
- .arg(path().toUserOutput(), fileNameFilters().join(QLatin1Char(',')));
+ return tr("Git Grep");
}
-bool GitGrep::validateDirectory(FancyLineEdit *edit, QString *errorMessage) const
+QWidget *GitGrep::widget() const
{
- static IVersionControl *gitVc =
- VcsManager::versionControl(VcsBase::Constants::VCS_ID_GIT);
- QTC_ASSERT(gitVc, return false);
- if (!m_directory->defaultValidationFunction()(edit, errorMessage))
- return false;
- const QString path = m_directory->path();
- IVersionControl *vc = VcsManager::findVersionControlForDirectory(path, 0);
- if (vc == gitVc)
- return true;
- if (errorMessage)
- *errorMessage = tr("The path \"%1\" is not managed by Git").arg(path);
- return false;
+ return m_widget.data();
}
-QWidget *GitGrep::createConfigWidget()
+bool GitGrep::isEnabled() const
{
- if (!m_configWidget) {
- m_configWidget = new QWidget;
- QGridLayout * const gridLayout = new QGridLayout(m_configWidget);
- gridLayout->setMargin(0);
- m_configWidget->setLayout(gridLayout);
-
- QLabel *dirLabel = new QLabel(tr("Director&y:"));
- gridLayout->addWidget(dirLabel, 0, 0, Qt::AlignRight);
- m_directory = new PathChooser;
- m_directory->setExpectedKind(PathChooser::ExistingDirectory);
- m_directory->setHistoryCompleter(QLatin1String("Git.Grep.History"), true);
- m_directory->setPromptDialogTitle(tr("Directory to search"));
- m_directory->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) {
- return validateDirectory(edit, errorMessage);
- });
- connect(m_directory.data(), &PathChooser::validChanged,
- this, &GitGrep::enabledChanged);
- dirLabel->setBuddy(m_directory);
- gridLayout->addWidget(m_directory, 0, 1, 1, 2);
-
- QLabel * const filePatternLabel = new QLabel(tr("Fi&le pattern:"));
- filePatternLabel->setMinimumWidth(80);
- filePatternLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
- filePatternLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
- QWidget *patternWidget = createPatternWidget();
- filePatternLabel->setBuddy(patternWidget);
- gridLayout->addWidget(filePatternLabel, 1, 0);
- gridLayout->addWidget(patternWidget, 1, 1, 1, 2);
- m_configWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- }
- return m_configWidget;
+ return m_widget->isEnabled() && m_widget->isChecked();
}
-FileName GitGrep::path() const
+bool GitGrep::isEnabled(const TextEditor::FileFindParameters &parameters) const
{
- return m_directory->fileName();
+ return parameters.extensionParameters.toBool();
}
-void GitGrep::writeSettings(QSettings *settings)
+QVariant GitGrep::parameters() const
{
- settings->beginGroup(QLatin1String("GitGrep"));
- writeCommonSettings(settings);
- settings->endGroup();
+ return isEnabled();
}
void GitGrep::readSettings(QSettings *settings)
{
- settings->beginGroup(QLatin1String("GitGrep"));
- readCommonSettings(settings, QLatin1String("*"));
- settings->endGroup();
+ m_widget->setChecked(settings->value(QLatin1String(EnableGitGrep), false).toBool());
}
-bool GitGrep::isValid() const
+void GitGrep::writeSettings(QSettings *settings) const
{
- return m_directory->isValid();
+ settings->setValue(QLatin1String(EnableGitGrep), m_widget->isChecked());
}
-void GitGrep::setDirectory(const FileName &directory)
+QFuture<FileSearchResultList> GitGrep::executeSearch(
+ const TextEditor::FileFindParameters &parameters)
{
- m_directory->setFileName(directory);
+ return Utils::runAsync<FileSearchResultList>(GitGrepRunner::run, parameters);
}
} // Internal