1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #include "findinopenfiles.h"
27 #include "textdocument.h"
28 #include "texteditor.h"
29 
30 #include <utils/filesearch.h>
31 #include <coreplugin/icore.h>
32 #include <coreplugin/editormanager/editormanager.h>
33 #include <coreplugin/editormanager/documentmodel.h>
34 
35 #include <QSettings>
36 
37 using namespace TextEditor;
38 using namespace TextEditor::Internal;
39 
FindInOpenFiles()40 FindInOpenFiles::FindInOpenFiles()
41 {
42     connect(Core::EditorManager::instance(), &Core::EditorManager::editorOpened,
43             this, &FindInOpenFiles::updateEnabledState);
44     connect(Core::EditorManager::instance(), &Core::EditorManager::editorsClosed,
45             this, &FindInOpenFiles::updateEnabledState);
46 }
47 
id() const48 QString FindInOpenFiles::id() const
49 {
50     return QLatin1String("Open Files");
51 }
52 
displayName() const53 QString FindInOpenFiles::displayName() const
54 {
55     return tr("Open Documents");
56 }
57 
files(const QStringList & nameFilters,const QStringList & exclusionFilters,const QVariant & additionalParameters) const58 Utils::FileIterator *FindInOpenFiles::files(const QStringList &nameFilters,
59                                             const QStringList &exclusionFilters,
60                                             const QVariant &additionalParameters) const
61 {
62     Q_UNUSED(nameFilters)
63     Q_UNUSED(exclusionFilters)
64     Q_UNUSED(additionalParameters)
65     QMap<QString, QTextCodec *> openEditorEncodings
66             = TextDocument::openedTextDocumentEncodings();
67     QStringList fileNames;
68     QList<QTextCodec *> codecs;
69     foreach (Core::DocumentModel::Entry *entry,
70              Core::DocumentModel::entries()) {
71         QString fileName = entry->fileName().toString();
72         if (!fileName.isEmpty()) {
73             fileNames.append(fileName);
74             QTextCodec *codec = openEditorEncodings.value(fileName);
75             if (!codec)
76                 codec = Core::EditorManager::defaultTextCodec();
77             codecs.append(codec);
78         }
79     }
80 
81     return new Utils::FileListIterator(fileNames, codecs);
82 }
83 
additionalParameters() const84 QVariant FindInOpenFiles::additionalParameters() const
85 {
86     return QVariant();
87 }
88 
label() const89 QString FindInOpenFiles::label() const
90 {
91     return tr("Open documents:");
92 }
93 
toolTip() const94 QString FindInOpenFiles::toolTip() const
95 {
96     // %1 is filled by BaseFileFind::runNewSearch
97     return tr("Open Documents\n%1");
98 }
99 
isEnabled() const100 bool FindInOpenFiles::isEnabled() const
101 {
102     return Core::DocumentModel::entryCount() > 0;
103 }
104 
writeSettings(QSettings * settings)105 void FindInOpenFiles::writeSettings(QSettings *settings)
106 {
107     settings->beginGroup(QLatin1String("FindInOpenFiles"));
108     writeCommonSettings(settings);
109     settings->endGroup();
110 }
111 
readSettings(QSettings * settings)112 void FindInOpenFiles::readSettings(QSettings *settings)
113 {
114     settings->beginGroup(QLatin1String("FindInOpenFiles"));
115     readCommonSettings(settings, "*", "");
116     settings->endGroup();
117 }
118 
updateEnabledState()119 void FindInOpenFiles::updateEnabledState()
120 {
121     emit enabledChanged(isEnabled());
122 }
123