diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2016-01-28 23:37:10 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2016-02-04 11:58:29 +0000 |
commit | 558c08e2c5a5d2d22ae5ee9bffdd138e90668214 (patch) | |
tree | 3a65470a6c2ea473d7f653f96a4b5a8eb461d25b /src/plugins/git/gitgrep.cpp | |
parent | 1b9b1541d376c5e75dada0d266c2b5b7f3e5fd30 (diff) | |
download | qt-creator-558c08e2c5a5d2d22ae5ee9bffdd138e90668214.tar.gz |
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.cpp | 132 |
1 files changed, 38 insertions, 94 deletions
diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index 20ec050747..3f0729e9f5 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 ¶meters) -{ - 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 ¶meters) 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 ¶meters) { - m_directory->setFileName(directory); + return Utils::runAsync<FileSearchResultList>(GitGrepRunner::run, parameters); } } // Internal |