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