TextEditor: CodeAssistant code cosmetics

Change-Id: I349f4d7c6ff77848e03cbcf4726ae21374bf653f
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
This commit is contained in:
hjk
2014-09-19 14:08:11 +02:00
parent d0e6da689b
commit 2fffafe2db
2 changed files with 30 additions and 47 deletions

View File

@@ -50,7 +50,6 @@
namespace TextEditor { namespace TextEditor {
class BaseTextDocument; class BaseTextDocument;
class CodeAssistant;
namespace Internal { namespace Internal {
class TextEditorOverlay; class TextEditorOverlay;

View File

@@ -50,24 +50,7 @@
#include <QScopedPointer> #include <QScopedPointer>
#include <QTimer> #include <QTimer>
using namespace TextEditor; using namespace TextEditor::Internal;
using namespace Internal;
namespace {
template <class T>
void filterEditorSpecificProviders(QList<T *> *providers, Core::Id editorId)
{
typename QList<T *>::iterator it = providers->begin();
while (it != providers->end()) {
if ((*it)->supportsEditor(editorId))
++it;
else
it = providers->erase(it);
}
}
} // Anonymous
namespace TextEditor { namespace TextEditor {
@@ -77,7 +60,6 @@ class CodeAssistantPrivate : public QObject
public: public:
CodeAssistantPrivate(CodeAssistant *assistant); CodeAssistantPrivate(CodeAssistant *assistant);
virtual ~CodeAssistantPrivate();
void configure(BaseTextEditorWidget *editorWidget); void configure(BaseTextEditorWidget *editorWidget);
void reconfigure(); void reconfigure();
@@ -100,6 +82,9 @@ public:
void stopAutomaticProposalTimer(); void stopAutomaticProposalTimer();
void startAutomaticProposalTimer(); void startAutomaticProposalTimer();
void automaticProposalTimeout();
void clearAbortedPosition();
void updateCompletionSettings(const TextEditor::CompletionSettings &settings);
virtual bool eventFilter(QObject *o, QEvent *e); virtual bool eventFilter(QObject *o, QEvent *e);
@@ -112,13 +97,10 @@ private slots:
void processProposalItem(AssistProposalItem *proposalItem); void processProposalItem(AssistProposalItem *proposalItem);
void handlePrefixExpansion(const QString &newPrefix); void handlePrefixExpansion(const QString &newPrefix);
void finalizeProposal(); void finalizeProposal();
void automaticProposalTimeout();
void updateCompletionSettings(const TextEditor::CompletionSettings &settings);
void explicitlyAborted(); void explicitlyAborted();
void clearAbortedPosition();
private: private:
CodeAssistant *m_q; CodeAssistant *q;
BaseTextEditorWidget *m_editorWidget; BaseTextEditorWidget *m_editorWidget;
CompletionAssistProvider *m_completionProvider; CompletionAssistProvider *m_completionProvider;
QList<QuickFixAssistProvider *> m_quickFixProviders; QList<QuickFixAssistProvider *> m_quickFixProviders;
@@ -134,8 +116,6 @@ private:
static const QChar m_null; static const QChar m_null;
}; };
} // TextEditor
// -------------------- // --------------------
// CodeAssistantPrivate // CodeAssistantPrivate
// -------------------- // --------------------
@@ -144,7 +124,7 @@ const QChar CodeAssistantPrivate::m_null;
static const int AutomaticProposalTimerInterval = 400; static const int AutomaticProposalTimerInterval = 400;
CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant)
: m_q(assistant) : q(assistant)
, m_editorWidget(0) , m_editorWidget(0)
, m_completionProvider(0) , m_completionProvider(0)
, m_requestRunner(0) , m_requestRunner(0)
@@ -157,18 +137,15 @@ CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant)
{ {
m_automaticProposalTimer.setSingleShot(true); m_automaticProposalTimer.setSingleShot(true);
m_automaticProposalTimer.setInterval(AutomaticProposalTimerInterval); m_automaticProposalTimer.setInterval(AutomaticProposalTimerInterval);
connect(&m_automaticProposalTimer, SIGNAL(timeout()), this, SLOT(automaticProposalTimeout()));
connect(TextEditorSettings::instance(), connect(&m_automaticProposalTimer, &QTimer::timeout,
SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)), this, &CodeAssistantPrivate::automaticProposalTimeout);
this,
SLOT(updateCompletionSettings(TextEditor::CompletionSettings)));
connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
this, SLOT(clearAbortedPosition()));
}
CodeAssistantPrivate::~CodeAssistantPrivate() connect(TextEditorSettings::instance(), &TextEditorSettings::completionSettingsChanged,
{ this, &CodeAssistantPrivate::updateCompletionSettings);
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
this, &CodeAssistantPrivate::clearAbortedPosition);
} }
void CodeAssistantPrivate::configure(BaseTextEditorWidget *editorWidget) void CodeAssistantPrivate::configure(BaseTextEditorWidget *editorWidget)
@@ -180,13 +157,20 @@ void CodeAssistantPrivate::configure(BaseTextEditorWidget *editorWidget)
m_editorWidget = editorWidget; m_editorWidget = editorWidget;
m_completionProvider = editorWidget->completionAssistProvider(); m_completionProvider = editorWidget->completionAssistProvider();
m_quickFixProviders = m_quickFixProviders = ExtensionSystem::PluginManager::getObjects<QuickFixAssistProvider>();
ExtensionSystem::PluginManager::getObjects<QuickFixAssistProvider>();
filterEditorSpecificProviders(&m_quickFixProviders, m_editorWidget->textDocument()->id()); Core::Id editorId = m_editorWidget->textDocument()->id();
auto it = m_quickFixProviders.begin();
while (it != m_quickFixProviders.end()) {
if ((*it)->supportsEditor(editorId))
++it;
else
it = m_quickFixProviders.erase(it);
}
m_editorWidget->installEventFilter(this); m_editorWidget->installEventFilter(this);
connect(m_editorWidget->textDocument(),SIGNAL(mimeTypeChanged()), connect(m_editorWidget->textDocument(), &BaseTextDocument::mimeTypeChanged,
m_q, SLOT(reconfigure())); this, &CodeAssistantPrivate::reconfigure);
} }
void CodeAssistantPrivate::reconfigure() void CodeAssistantPrivate::reconfigure()
@@ -209,8 +193,7 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile()) { if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile()) {
m_proposalWidget->setReason(ExplicitlyInvoked); m_proposalWidget->setReason(ExplicitlyInvoked);
m_proposalWidget->updateProposal( m_proposalWidget->updateProposal(m_editorWidget->textAt(
m_editorWidget->textDocument()->textAt(
m_proposal->basePosition(), m_proposal->basePosition(),
m_editorWidget->position() - m_proposal->basePosition())); m_editorWidget->position() - m_proposal->basePosition()));
} else { } else {
@@ -344,7 +327,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
this, SLOT(processProposalItem(AssistProposalItem*))); this, SLOT(processProposalItem(AssistProposalItem*)));
connect(m_proposalWidget, SIGNAL(explicitlyAborted()), connect(m_proposalWidget, SIGNAL(explicitlyAborted()),
this, SLOT(explicitlyAborted())); this, SLOT(explicitlyAborted()));
m_proposalWidget->setAssistant(m_q); m_proposalWidget->setAssistant(q);
m_proposalWidget->setReason(reason); m_proposalWidget->setReason(reason);
m_proposalWidget->setKind(m_assistKind); m_proposalWidget->setKind(m_assistKind);
m_proposalWidget->setUnderlyingWidget(m_editorWidget); m_proposalWidget->setUnderlyingWidget(m_editorWidget);
@@ -415,8 +398,7 @@ CompletionAssistProvider *CodeAssistantPrivate::identifyActivationSequence()
const int length = m_completionProvider->activationCharSequenceLength(); const int length = m_completionProvider->activationCharSequenceLength();
if (length == 0) if (length == 0)
return 0; return 0;
QString sequence = m_editorWidget->textDocument()->textAt(m_editorWidget->position() - length, QString sequence = m_editorWidget->textAt(m_editorWidget->position() - length, length);
length);
// In pretty much all cases the sequence will have the appropriate length. Only in the // In pretty much all cases the sequence will have the appropriate length. Only in the
// case of typing the very first characters in the document for providers that request a // case of typing the very first characters in the document for providers that request a
// length greater than 1 (currently only C++, which specifies 3), the sequence needs to // length greater than 1 (currently only C++, which specifies 3), the sequence needs to
@@ -578,4 +560,6 @@ void CodeAssistant::reconfigure()
d->reconfigure(); d->reconfigure();
} }
} // namespace TextEditor
#include "codeassistant.moc" #include "codeassistant.moc"