TextEditor: Use PathChooser for FindInFiles

Change-Id: I17058cd41eec1cfea41ddbf2cae1a7c70a4e3a10
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-12-26 21:47:16 +02:00
committed by Orgad Shaneh
parent 2cba6ed06c
commit bf22f23066
6 changed files with 34 additions and 52 deletions

View File

@@ -196,6 +196,13 @@ QString HistoryCompleter::historyItem() const
return d->list.at(0); 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() HistoryCompleter::~HistoryCompleter()
{ {
delete d; delete d;

View File

@@ -47,6 +47,7 @@ public:
HistoryCompleter(const QString &historyKey, QObject *parent = 0); HistoryCompleter(const QString &historyKey, QObject *parent = 0);
bool removeHistoryItem(int index); bool removeHistoryItem(int index);
QString historyItem() const; QString historyItem() const;
static bool historyExistsFor(const QString &historyKey);
private: private:
~HistoryCompleter(); ~HistoryCompleter();

View File

@@ -714,9 +714,9 @@ void PathChooser::installLineEditVersionToolTip(QLineEdit *le, const QStringList
ef->setArguments(arguments); 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 QStringList PathChooser::commandVersionArguments() const

View File

@@ -134,7 +134,7 @@ public:
static void installLineEditVersionToolTip(QLineEdit *le, const QStringList &arguments); static void installLineEditVersionToolTip(QLineEdit *le, const QStringList &arguments);
// Enable a history completer with a history of entries. // 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; bool isReadOnly() const;
void setReadOnly(bool b); void setReadOnly(bool b);

View File

@@ -27,8 +27,10 @@
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/find/findplugin.h> #include <coreplugin/find/findplugin.h>
#include <coreplugin/icore.h>
#include <utils/filesearch.h> #include <utils/filesearch.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/historycompleter.h>
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -38,7 +40,6 @@
#include <QPushButton> #include <QPushButton>
#include <QFileDialog> #include <QFileDialog>
#include <QLabel> #include <QLabel>
#include <QComboBox>
#include <QHBoxLayout> #include <QHBoxLayout>
using namespace Core; using namespace Core;
@@ -46,6 +47,7 @@ using namespace TextEditor;
using namespace Utils; using namespace Utils;
static FindInFiles *m_instance = 0; static FindInFiles *m_instance = 0;
static const char HistoryKey[] = "FindInFiles.Directories.History";
FindInFiles::FindInFiles() FindInFiles::FindInFiles()
: m_configWidget(0), : m_configWidget(0),
@@ -70,12 +72,6 @@ QString FindInFiles::displayName() const
return tr("Files in File System"); 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, FileIterator *FindInFiles::files(const QStringList &nameFilters,
const QVariant &additionalParameters) const const QVariant &additionalParameters) const
{ {
@@ -115,20 +111,22 @@ QWidget *FindInFiles::createConfigWidget()
QLabel *dirLabel = new QLabel(tr("Director&y:")); QLabel *dirLabel = new QLabel(tr("Director&y:"));
gridLayout->addWidget(dirLabel, 0, 0, Qt::AlignRight); gridLayout->addWidget(dirLabel, 0, 0, Qt::AlignRight);
m_directory = new QComboBox; m_directory = new PathChooser;
m_directory->setEditable(true); m_directory->setExpectedKind(PathChooser::ExistingDirectory);
m_directory->setMaxCount(30); m_directory->setHistoryCompleter(QLatin1String(HistoryKey),
m_directory->setMinimumContentsLength(10); /*restoreLastItemFromHistory=*/ true);
m_directory->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); m_directory->setPromptDialogTitle(tr("Directory to Search"));
m_directory->setInsertPolicy(QComboBox::InsertAtTop); connect(m_directory.data(), &PathChooser::validChanged,
m_directory->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); this, &FindInFiles::enabledChanged);
m_directory->setModel(&m_directoryStrings); if (!HistoryCompleter::historyExistsFor(QLatin1String(HistoryKey))) {
syncComboWithSettings(m_directory, m_directorySetting.toUserOutput()); auto completer = static_cast<HistoryCompleter *>(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); dirLabel->setBuddy(m_directory);
gridLayout->addWidget(m_directory, 0, 1); gridLayout->addWidget(m_directory, 0, 1, 1, 2);
QPushButton *browseButton = new QPushButton(PathChooser::browseButtonLabel());
gridLayout->addWidget(browseButton, 0, 2);
connect(browseButton, &QAbstractButton::clicked, this, &FindInFiles::openFileBrowser);
QLabel * const filePatternLabel = new QLabel(tr("Fi&le pattern:")); QLabel * const filePatternLabel = new QLabel(tr("Fi&le pattern:"));
filePatternLabel->setMinimumWidth(80); filePatternLabel->setMinimumWidth(80);
@@ -143,31 +141,15 @@ QWidget *FindInFiles::createConfigWidget()
return m_configWidget; 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 FileName FindInFiles::path() const
{ {
return FileName::fromUserInput(FileUtils::normalizePathName(m_directory->currentText())); return m_directory->fileName();
} }
void FindInFiles::writeSettings(QSettings *settings) void FindInFiles::writeSettings(QSettings *settings)
{ {
settings->beginGroup(QLatin1String("FindInFiles")); settings->beginGroup(QLatin1String("FindInFiles"));
writeCommonSettings(settings); writeCommonSettings(settings);
settings->setValue(QLatin1String("directories"), m_directoryStrings.stringList());
if (m_directory)
settings->setValue(QLatin1String("currentDirectory"), path().toString());
settings->endGroup(); settings->endGroup();
} }
@@ -175,16 +157,12 @@ void FindInFiles::readSettings(QSettings *settings)
{ {
settings->beginGroup(QLatin1String("FindInFiles")); settings->beginGroup(QLatin1String("FindInFiles"));
readCommonSettings(settings, QLatin1String("*.cpp,*.h")); readCommonSettings(settings, QLatin1String("*.cpp,*.h"));
m_directoryStrings.setStringList(settings->value(QLatin1String("directories")).toStringList());
m_directorySetting = FileName::fromString(
settings->value(QLatin1String("currentDirectory")).toString());
settings->endGroup(); settings->endGroup();
syncComboWithSettings(m_directory, m_directorySetting.toUserOutput());
} }
void FindInFiles::setDirectory(const FileName &directory) void FindInFiles::setDirectory(const FileName &directory)
{ {
syncComboWithSettings(m_directory, directory.toUserOutput()); m_directory->setFileName(directory);
} }
void FindInFiles::findOnFileSystem(const QString &path) void FindInFiles::findOnFileSystem(const QString &path)

View File

@@ -34,7 +34,8 @@
#include <QStringListModel> #include <QStringListModel>
QT_FORWARD_DECLARE_CLASS(QLabel) QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QComboBox)
namespace Utils { class PathChooser; }
namespace TextEditor { namespace TextEditor {
@@ -48,7 +49,6 @@ public:
QString id() const; QString id() const;
QString displayName() const; QString displayName() const;
void findAll(const QString &txt, Core::FindFlags findFlags);
QWidget *createConfigWidget(); QWidget *createConfigWidget();
void writeSettings(QSettings *settings); void writeSettings(QSettings *settings);
void readSettings(QSettings *settings); void readSettings(QSettings *settings);
@@ -64,14 +64,10 @@ protected:
QString toolTip() const; QString toolTip() const;
private: private:
void openFileBrowser();
Utils::FileName path() const; Utils::FileName path() const;
QStringListModel m_directoryStrings;
Utils::FileName m_directorySetting;
QPointer<QWidget> m_configWidget; QPointer<QWidget> m_configWidget;
QPointer<QComboBox> m_directory; QPointer<Utils::PathChooser> m_directory;
}; };
} // namespace TextEditor } // namespace TextEditor