1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (info@qt.nokia.com)
10 ** GNU Lesser General Public License Usage
12 ** This file may be used under the terms of the GNU Lesser General Public
13 ** License version 2.1 as published by the Free Software Foundation and
14 ** appearing in the file LICENSE.LGPL included in the packaging of this file.
15 ** Please review the following information to ensure the GNU Lesser General
16 ** Public License version 2.1 requirements will be met:
17 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
19 ** In addition, as a special exception, Nokia gives you certain additional
20 ** rights. These rights are described in the Nokia Qt LGPL Exception
21 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
25 ** Alternatively, this file may be used in accordance with the terms and
26 ** conditions contained in a signed written agreement between you and Nokia.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
31 **************************************************************************/
33 #include "findinfiles.h"
35 #include <coreplugin/editormanager/editormanager.h>
37 #include <QtCore/QtDebug>
38 #include <QtCore/QSettings>
39 #include <QtCore/QDir>
40 #include <QtCore/QDirIterator>
41 #include <QtGui/QPushButton>
42 #include <QtGui/QFileDialog>
43 #include <QtGui/QVBoxLayout>
46 using namespace TextEditor::Internal;
48 FindInFiles::FindInFiles(SearchResultWindow *resultWindow)
49 : BaseFileFind(resultWindow),
55 QString FindInFiles::id() const
57 return "Files on Disk";
60 QString FindInFiles::displayName() const
62 return tr("Files on File System");
65 void FindInFiles::findAll(const QString &txt, Find::FindFlags findFlags)
67 updateComboEntries(m_directory, true);
68 BaseFileFind::findAll(txt, findFlags);
71 Utils::FileIterator *FindInFiles::files() const
73 return new Utils::SubDirFileIterator(QStringList() << m_directory->currentText(),
75 Core::EditorManager::instance()->defaultTextCodec());
78 QWidget *FindInFiles::createConfigWidget()
80 if (!m_configWidget) {
81 m_configWidget = new QWidget;
82 QGridLayout * const gridLayout = new QGridLayout(m_configWidget);
83 gridLayout->setMargin(0);
84 m_configWidget->setLayout(gridLayout);
86 QLabel *dirLabel = new QLabel(tr("&Directory:"));
87 gridLayout->addWidget(dirLabel, 0, 0, Qt::AlignRight);
88 m_directory = new QComboBox;
89 m_directory->setEditable(true);
90 m_directory->setMaxCount(30);
91 m_directory->setMinimumContentsLength(10);
92 m_directory->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
93 m_directory->setInsertPolicy(QComboBox::InsertAtTop);
94 m_directory->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
95 m_directory->setModel(&m_directoryStrings);
96 syncComboWithSettings(m_directory, m_directorySetting);
97 dirLabel->setBuddy(m_directory);
98 gridLayout->addWidget(m_directory, 0, 1);
99 QPushButton *browseButton = new QPushButton(tr("&Browse"));
100 gridLayout->addWidget(browseButton, 0, 2);
101 connect(browseButton, SIGNAL(clicked()), this, SLOT(openFileBrowser()));
103 QLabel * const filePatternLabel = new QLabel(tr("File &pattern:"));
104 filePatternLabel->setMinimumWidth(80);
105 filePatternLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
106 filePatternLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
107 QWidget *patternWidget = createPatternWidget();
108 filePatternLabel->setBuddy(patternWidget);
109 gridLayout->addWidget(filePatternLabel, 1, 0);
110 gridLayout->addWidget(patternWidget, 1, 1, 1, 2);
111 m_configWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
113 return m_configWidget;
116 void FindInFiles::openFileBrowser()
120 QString oldDir = m_directory->currentText();
121 if (!QDir(oldDir).exists())
123 QString dir = QFileDialog::getExistingDirectory(m_configWidget,
124 tr("Directory to search"), oldDir);
126 m_directory->setEditText(dir);
129 void FindInFiles::writeSettings(QSettings *settings)
131 settings->beginGroup("FindInFiles");
132 writeCommonSettings(settings);
133 settings->setValue("directories", m_directoryStrings.stringList());
135 settings->setValue("currentDirectory", m_directory->currentText());
136 settings->endGroup();
139 void FindInFiles::readSettings(QSettings *settings)
141 settings->beginGroup("FindInFiles");
142 readCommonSettings(settings, "*.cpp,*.h");
143 m_directoryStrings.setStringList(settings->value("directories").toStringList());
144 m_directorySetting = settings->value("currentDirectory").toString();
145 settings->endGroup();
146 syncComboWithSettings(m_directory, m_directorySetting);