TextEditor: modernize codeassistant

Change-Id: I298d53b5b06765489b866e99a8b2c942c53454f8
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
David Schulz
2018-02-14 12:25:15 +01:00
parent fab46508a2
commit c67902ec4e
2 changed files with 23 additions and 31 deletions

View File

@@ -60,9 +60,9 @@ public:
void configure(TextEditorWidget *editorWidget); void configure(TextEditorWidget *editorWidget);
bool isConfigured() const; bool isConfigured() const;
void invoke(AssistKind kind, IAssistProvider *provider = 0); void invoke(AssistKind kind, IAssistProvider *provider = nullptr);
void process(); void process();
void requestProposal(AssistReason reason, AssistKind kind, IAssistProvider *provider = 0); void requestProposal(AssistReason reason, AssistKind kind, IAssistProvider *provider = nullptr);
void cancelCurrentRequest(); void cancelCurrentRequest();
void invalidateCurrentRequestData(); void invalidateCurrentRequestData();
void displayProposal(IAssistProposal *newProposal, AssistReason reason); void displayProposal(IAssistProposal *newProposal, AssistReason reason);
@@ -93,19 +93,19 @@ private:
void explicitlyAborted(); void explicitlyAborted();
private: private:
CodeAssistant *q; CodeAssistant *q = nullptr;
TextEditorWidget *m_editorWidget; TextEditorWidget *m_editorWidget = nullptr;
Internal::ProcessorRunner *m_requestRunner; Internal::ProcessorRunner *m_requestRunner = nullptr;
QMetaObject::Connection m_runnerConnection; QMetaObject::Connection m_runnerConnection;
IAssistProvider *m_requestProvider; IAssistProvider *m_requestProvider = nullptr;
IAssistProcessor *m_asyncProcessor; IAssistProcessor *m_asyncProcessor = nullptr;
AssistKind m_assistKind; AssistKind m_assistKind = TextEditor::Completion;
IAssistProposalWidget *m_proposalWidget; IAssistProposalWidget *m_proposalWidget = nullptr;
QScopedPointer<IAssistProposal> m_proposal; QScopedPointer<IAssistProposal> m_proposal;
bool m_receivedContentWhileWaiting; bool m_receivedContentWhileWaiting = false;
QTimer m_automaticProposalTimer; QTimer m_automaticProposalTimer;
CompletionSettings m_settings; CompletionSettings m_settings;
int m_abortedBasePosition; int m_abortedBasePosition = -1;
static const QChar m_null; static const QChar m_null;
QVariant m_userData; QVariant m_userData;
}; };
@@ -117,14 +117,6 @@ const QChar CodeAssistantPrivate::m_null;
CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant)
: q(assistant) : q(assistant)
, m_editorWidget(0)
, m_requestRunner(0)
, m_requestProvider(0)
, m_asyncProcessor(0)
, m_assistKind(TextEditor::Completion)
, m_proposalWidget(0)
, m_receivedContentWhileWaiting(false)
, m_abortedBasePosition(-1)
{ {
m_automaticProposalTimer.setSingleShot(true); m_automaticProposalTimer.setSingleShot(true);
connect(&m_automaticProposalTimer, &QTimer::timeout, connect(&m_automaticProposalTimer, &QTimer::timeout,
@@ -146,7 +138,7 @@ void CodeAssistantPrivate::configure(TextEditorWidget *editorWidget)
bool CodeAssistantPrivate::isConfigured() const bool CodeAssistantPrivate::isConfigured() const
{ {
return m_editorWidget != 0; return m_editorWidget != nullptr;
} }
void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider) void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
@@ -390,37 +382,37 @@ void CodeAssistantPrivate::finalizeProposal()
{ {
stopAutomaticProposalTimer(); stopAutomaticProposalTimer();
m_proposal.reset(); m_proposal.reset();
m_proposalWidget = 0; m_proposalWidget = nullptr;
if (m_receivedContentWhileWaiting) if (m_receivedContentWhileWaiting)
m_receivedContentWhileWaiting = false; m_receivedContentWhileWaiting = false;
} }
bool CodeAssistantPrivate::isDisplayingProposal() const bool CodeAssistantPrivate::isDisplayingProposal() const
{ {
return m_proposalWidget != 0; return m_proposalWidget != nullptr;
} }
bool CodeAssistantPrivate::isWaitingForProposal() const bool CodeAssistantPrivate::isWaitingForProposal() const
{ {
return m_requestRunner != 0 || m_asyncProcessor != 0; return m_requestRunner != nullptr || m_asyncProcessor != nullptr;
} }
void CodeAssistantPrivate::invalidateCurrentRequestData() void CodeAssistantPrivate::invalidateCurrentRequestData()
{ {
m_asyncProcessor = 0; m_asyncProcessor = nullptr;
m_requestRunner = 0; m_requestRunner = nullptr;
m_requestProvider = 0; m_requestProvider = nullptr;
} }
CompletionAssistProvider *CodeAssistantPrivate::identifyActivationSequence() CompletionAssistProvider *CodeAssistantPrivate::identifyActivationSequence()
{ {
CompletionAssistProvider *completionProvider = m_editorWidget->textDocument()->completionAssistProvider(); CompletionAssistProvider *completionProvider = m_editorWidget->textDocument()->completionAssistProvider();
if (!completionProvider) if (!completionProvider)
return 0; return nullptr;
const int length = completionProvider->activationCharSequenceLength(); const int length = completionProvider->activationCharSequenceLength();
if (length == 0) if (length == 0)
return 0; return nullptr;
QString sequence = m_editorWidget->textAt(m_editorWidget->position() - length, length); QString sequence = m_editorWidget->textAt(m_editorWidget->position() - 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
@@ -429,7 +421,7 @@ CompletionAssistProvider *CodeAssistantPrivate::identifyActivationSequence()
const int lengthDiff = length - sequence.length(); const int lengthDiff = length - sequence.length();
for (int j = 0; j < lengthDiff; ++j) for (int j = 0; j < lengthDiff; ++j)
sequence.prepend(m_null); sequence.prepend(m_null);
return completionProvider->isActivationCharSequence(sequence) ? completionProvider : 0; return completionProvider->isActivationCharSequence(sequence) ? completionProvider : nullptr;
} }
void CodeAssistantPrivate::notifyChange() void CodeAssistantPrivate::notifyChange()
@@ -528,7 +520,7 @@ bool CodeAssistantPrivate::eventFilter(QObject *o, QEvent *e)
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e); QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
const QString &keyText = keyEvent->text(); const QString &keyText = keyEvent->text();
CompletionAssistProvider *completionProvider = 0; CompletionAssistProvider *completionProvider = nullptr;
if ((keyText.isEmpty() if ((keyText.isEmpty()
&& keyEvent->key() != Qt::LeftArrow && keyEvent->key() != Qt::LeftArrow
&& keyEvent->key() != Qt::RightArrow && keyEvent->key() != Qt::RightArrow

View File

@@ -55,7 +55,7 @@ public:
QVariant userData() const; QVariant userData() const;
void setUserData(const QVariant &data); void setUserData(const QVariant &data);
void invoke(AssistKind assistKind, IAssistProvider *provider = 0); void invoke(AssistKind assistKind, IAssistProvider *provider = nullptr);
signals: signals:
void finished(); void finished();