OSDN Git Service

Update license.
[qt-creator-jp/qt-creator-jp.git] / src / plugins / texteditor / findinfiles.cpp
1 /**************************************************************************
2 **
3 ** This file is part of Qt Creator
4 **
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 **
7 ** Contact: Nokia Corporation (info@qt.nokia.com)
8 **
9 **
10 ** GNU Lesser General Public License Usage
11 **
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.
18 **
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.
22 **
23 ** Other Usage
24 **
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.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **************************************************************************/
32
33 #include "findinfiles.h"
34
35 #include <coreplugin/editormanager/editormanager.h>
36
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>
44
45 using namespace Find;
46 using namespace TextEditor::Internal;
47
48 FindInFiles::FindInFiles(SearchResultWindow *resultWindow)
49   : BaseFileFind(resultWindow),
50     m_configWidget(0),
51     m_directory(0)
52 {
53 }
54
55 QString FindInFiles::id() const
56 {
57     return "Files on Disk";
58 }
59
60 QString FindInFiles::displayName() const
61 {
62     return tr("Files on File System");
63 }
64
65 void FindInFiles::findAll(const QString &txt, Find::FindFlags findFlags)
66 {
67     updateComboEntries(m_directory, true);
68     BaseFileFind::findAll(txt, findFlags);
69 }
70
71 Utils::FileIterator *FindInFiles::files() const
72 {
73     return new Utils::SubDirFileIterator(QStringList() << m_directory->currentText(),
74                                          fileNameFilters(),
75                                          Core::EditorManager::instance()->defaultTextCodec());
76 }
77
78 QWidget *FindInFiles::createConfigWidget()
79 {
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);
85
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()));
102
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);
112     }
113     return m_configWidget;
114 }
115
116 void FindInFiles::openFileBrowser()
117 {
118     if (!m_directory)
119         return;
120     QString oldDir = m_directory->currentText();
121     if (!QDir(oldDir).exists())
122         oldDir.clear();
123     QString dir = QFileDialog::getExistingDirectory(m_configWidget,
124         tr("Directory to search"), oldDir);
125     if (!dir.isEmpty())
126         m_directory->setEditText(dir);
127 }
128
129 void FindInFiles::writeSettings(QSettings *settings)
130 {
131     settings->beginGroup("FindInFiles");
132     writeCommonSettings(settings);
133     settings->setValue("directories", m_directoryStrings.stringList());
134     if (m_directory)
135         settings->setValue("currentDirectory", m_directory->currentText());
136     settings->endGroup();
137 }
138
139 void FindInFiles::readSettings(QSettings *settings)
140 {
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);
147 }