forked from qt-creator/qt-creator
TextEditor: modernize codeassistant
Change-Id: I298d53b5b06765489b866e99a8b2c942c53454f8 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user