From bf22f2306637aee7ab5ae9116dc895fbc906f224 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sat, 26 Dec 2015 21:47:16 +0200 Subject: [PATCH] TextEditor: Use PathChooser for FindInFiles Change-Id: I17058cd41eec1cfea41ddbf2cae1a7c70a4e3a10 Reviewed-by: Eike Ziller --- src/libs/utils/historycompleter.cpp | 7 +++ src/libs/utils/historycompleter.h | 1 + src/libs/utils/pathchooser.cpp | 4 +- src/libs/utils/pathchooser.h | 2 +- src/plugins/texteditor/findinfiles.cpp | 62 +++++++++----------------- src/plugins/texteditor/findinfiles.h | 10 ++--- 6 files changed, 34 insertions(+), 52 deletions(-) diff --git a/src/libs/utils/historycompleter.cpp b/src/libs/utils/historycompleter.cpp index d98ed5b1f8d..a0f11372334 100644 --- a/src/libs/utils/historycompleter.cpp +++ b/src/libs/utils/historycompleter.cpp @@ -196,6 +196,13 @@ QString HistoryCompleter::historyItem() const return d->list.at(0); } +bool HistoryCompleter::historyExistsFor(const QString &historyKey) +{ + QTC_ASSERT(theSettings, return false); + const QString fullKey = QLatin1String("CompleterHistory/") + historyKey; + return theSettings->value(fullKey).isValid(); +} + HistoryCompleter::~HistoryCompleter() { delete d; diff --git a/src/libs/utils/historycompleter.h b/src/libs/utils/historycompleter.h index dc1efa354f6..eaaca115a16 100644 --- a/src/libs/utils/historycompleter.h +++ b/src/libs/utils/historycompleter.h @@ -47,6 +47,7 @@ public: HistoryCompleter(const QString &historyKey, QObject *parent = 0); bool removeHistoryItem(int index); QString historyItem() const; + static bool historyExistsFor(const QString &historyKey); private: ~HistoryCompleter(); diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index 5ffa90296ab..f591f605389 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -714,9 +714,9 @@ void PathChooser::installLineEditVersionToolTip(QLineEdit *le, const QStringList ef->setArguments(arguments); } -void PathChooser::setHistoryCompleter(const QString &historyKey) +void PathChooser::setHistoryCompleter(const QString &historyKey, bool restoreLastItemFromHistory) { - d->m_lineEdit->setHistoryCompleter(historyKey); + d->m_lineEdit->setHistoryCompleter(historyKey, restoreLastItemFromHistory); } QStringList PathChooser::commandVersionArguments() const diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h index 344cc9255f1..1e9ab523ce2 100644 --- a/src/libs/utils/pathchooser.h +++ b/src/libs/utils/pathchooser.h @@ -134,7 +134,7 @@ public: static void installLineEditVersionToolTip(QLineEdit *le, const QStringList &arguments); // Enable a history completer with a history of entries. - void setHistoryCompleter(const QString &historyKey); + void setHistoryCompleter(const QString &historyKey, bool restoreLastItemFromHistory = false); bool isReadOnly() const; void setReadOnly(bool b); diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp index 526a991a7af..b1770b5b5ac 100644 --- a/src/plugins/texteditor/findinfiles.cpp +++ b/src/plugins/texteditor/findinfiles.cpp @@ -27,8 +27,10 @@ #include #include +#include #include #include +#include #include #include @@ -38,7 +40,6 @@ #include #include #include -#include #include using namespace Core; @@ -46,6 +47,7 @@ using namespace TextEditor; using namespace Utils; static FindInFiles *m_instance = 0; +static const char HistoryKey[] = "FindInFiles.Directories.History"; FindInFiles::FindInFiles() : m_configWidget(0), @@ -70,12 +72,6 @@ QString FindInFiles::displayName() const return tr("Files in File System"); } -void FindInFiles::findAll(const QString &txt, FindFlags findFlags) -{ - updateComboEntries(m_directory, true); - BaseFileFind::findAll(txt, findFlags); -} - FileIterator *FindInFiles::files(const QStringList &nameFilters, const QVariant &additionalParameters) const { @@ -115,20 +111,22 @@ QWidget *FindInFiles::createConfigWidget() QLabel *dirLabel = new QLabel(tr("Director&y:")); gridLayout->addWidget(dirLabel, 0, 0, Qt::AlignRight); - m_directory = new QComboBox; - m_directory->setEditable(true); - m_directory->setMaxCount(30); - m_directory->setMinimumContentsLength(10); - m_directory->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); - m_directory->setInsertPolicy(QComboBox::InsertAtTop); - m_directory->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - m_directory->setModel(&m_directoryStrings); - syncComboWithSettings(m_directory, m_directorySetting.toUserOutput()); + m_directory = new PathChooser; + m_directory->setExpectedKind(PathChooser::ExistingDirectory); + m_directory->setHistoryCompleter(QLatin1String(HistoryKey), + /*restoreLastItemFromHistory=*/ true); + m_directory->setPromptDialogTitle(tr("Directory to Search")); + connect(m_directory.data(), &PathChooser::validChanged, + this, &FindInFiles::enabledChanged); + if (!HistoryCompleter::historyExistsFor(QLatin1String(HistoryKey))) { + auto completer = static_cast(m_directory->lineEdit()->completer()); + const QStringList legacyHistory = Core::ICore::settings()->value( + QLatin1String("Find/FindInFiles/directories")).toStringList(); + for (const QString &dir: legacyHistory) + completer->addEntry(dir); + } dirLabel->setBuddy(m_directory); - gridLayout->addWidget(m_directory, 0, 1); - QPushButton *browseButton = new QPushButton(PathChooser::browseButtonLabel()); - gridLayout->addWidget(browseButton, 0, 2); - connect(browseButton, &QAbstractButton::clicked, this, &FindInFiles::openFileBrowser); + gridLayout->addWidget(m_directory, 0, 1, 1, 2); QLabel * const filePatternLabel = new QLabel(tr("Fi&le pattern:")); filePatternLabel->setMinimumWidth(80); @@ -143,31 +141,15 @@ QWidget *FindInFiles::createConfigWidget() return m_configWidget; } -void FindInFiles::openFileBrowser() -{ - if (!m_directory) - return; - QString oldDir = path().toString(); - if (!QDir(oldDir).exists()) - oldDir.clear(); - QString dir = QFileDialog::getExistingDirectory(m_configWidget, - tr("Directory to search"), oldDir); - if (!dir.isEmpty()) - m_directory->setEditText(QDir::toNativeSeparators(dir)); -} - FileName FindInFiles::path() const { - return FileName::fromUserInput(FileUtils::normalizePathName(m_directory->currentText())); + return m_directory->fileName(); } void FindInFiles::writeSettings(QSettings *settings) { settings->beginGroup(QLatin1String("FindInFiles")); writeCommonSettings(settings); - settings->setValue(QLatin1String("directories"), m_directoryStrings.stringList()); - if (m_directory) - settings->setValue(QLatin1String("currentDirectory"), path().toString()); settings->endGroup(); } @@ -175,16 +157,12 @@ void FindInFiles::readSettings(QSettings *settings) { settings->beginGroup(QLatin1String("FindInFiles")); readCommonSettings(settings, QLatin1String("*.cpp,*.h")); - m_directoryStrings.setStringList(settings->value(QLatin1String("directories")).toStringList()); - m_directorySetting = FileName::fromString( - settings->value(QLatin1String("currentDirectory")).toString()); settings->endGroup(); - syncComboWithSettings(m_directory, m_directorySetting.toUserOutput()); } void FindInFiles::setDirectory(const FileName &directory) { - syncComboWithSettings(m_directory, directory.toUserOutput()); + m_directory->setFileName(directory); } void FindInFiles::findOnFileSystem(const QString &path) diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h index 31fc2b85e01..24e0890fc2f 100644 --- a/src/plugins/texteditor/findinfiles.h +++ b/src/plugins/texteditor/findinfiles.h @@ -34,7 +34,8 @@ #include QT_FORWARD_DECLARE_CLASS(QLabel) -QT_FORWARD_DECLARE_CLASS(QComboBox) + +namespace Utils { class PathChooser; } namespace TextEditor { @@ -48,7 +49,6 @@ public: QString id() const; QString displayName() const; - void findAll(const QString &txt, Core::FindFlags findFlags); QWidget *createConfigWidget(); void writeSettings(QSettings *settings); void readSettings(QSettings *settings); @@ -64,14 +64,10 @@ protected: QString toolTip() const; private: - void openFileBrowser(); - Utils::FileName path() const; - QStringListModel m_directoryStrings; - Utils::FileName m_directorySetting; QPointer m_configWidget; - QPointer m_directory; + QPointer m_directory; }; } // namespace TextEditor