1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights. These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
32 **************************************************************************/
35 #include "basetexteditor.h"
37 #include <coreplugin/ifile.h>
38 #include <extensionsystem/pluginmanager.h>
39 #include <QtGui/QApplication>
40 #include <QtGui/QTextBlock>
42 #include <QtCore/QDebug>
44 using namespace TextEditor;
46 QuickFixState::QuickFixState(TextEditor::BaseTextEditorWidget *editor)
51 QuickFixState::~QuickFixState()
55 TextEditor::BaseTextEditorWidget *QuickFixState::editor() const
61 QuickFixOperation::QuickFixOperation(int priority)
63 setPriority(priority);
66 QuickFixOperation::~QuickFixOperation()
70 int QuickFixOperation::priority() const
75 void QuickFixOperation::setPriority(int priority)
80 QString QuickFixOperation::description() const
85 void QuickFixOperation::setDescription(const QString &description)
87 _description = description;
92 QuickFixFactory::QuickFixFactory(QObject *parent)
97 QuickFixFactory::~QuickFixFactory()
101 QuickFixCollector::QuickFixCollector()
106 QuickFixCollector::~QuickFixCollector()
110 TextEditor::ITextEditor *QuickFixCollector::editor() const
115 int QuickFixCollector::startPosition() const
117 return m_editor->position();
120 bool QuickFixCollector::triggersCompletion(TextEditor::ITextEditor *)
125 int QuickFixCollector::startCompletion(TextEditor::ITextEditor *editable)
127 Q_ASSERT(editable != 0);
130 TextEditor::BaseTextEditorWidget *editor = qobject_cast<TextEditor::BaseTextEditorWidget *>(editable->widget());
131 Q_ASSERT(editor != 0);
133 if (TextEditor::QuickFixState *state = initializeCompletion(editor)) {
134 QMap<int, QList<QuickFixOperation::Ptr> > matchedOps;
136 foreach (QuickFixFactory *factory, quickFixFactories()) {
137 QList<QuickFixOperation::Ptr> ops = factory->matchingOperations(state);
139 foreach (QuickFixOperation::Ptr op, ops) {
140 const int priority = op->priority();
142 matchedOps[priority].append(op);
146 QMapIterator<int, QList<TextEditor::QuickFixOperation::Ptr> > it(matchedOps);
148 if (it.hasPrevious()) {
150 m_quickFixes = it.value();
155 if (! m_quickFixes.isEmpty())
156 return editable->position();
162 void QuickFixCollector::completions(QList<TextEditor::CompletionItem> *quickFixItems)
164 for (int i = 0; i < m_quickFixes.size(); ++i) {
165 TextEditor::QuickFixOperation::Ptr op = m_quickFixes.at(i);
167 TextEditor::CompletionItem item(this);
168 item.text = op->description();
169 item.data = QVariant::fromValue(i);
170 quickFixItems->append(item);
174 void QuickFixCollector::fix(const TextEditor::CompletionItem &item)
176 const int index = item.data.toInt();
178 if (index < m_quickFixes.size()) {
179 TextEditor::QuickFixOperation::Ptr quickFix = m_quickFixes.at(index);
184 void QuickFixCollector::cleanup()
186 m_quickFixes.clear();