TextEditor: Move base of operation from Editor to *Widget

One less level of indirection

Change-Id: I4777bd7d54e572f36a490aeb747a8e0f89599049
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
hjk
2014-09-03 22:45:33 +02:00
parent 0feb80fa00
commit 127d3b9687
21 changed files with 120 additions and 122 deletions

View File

@@ -79,7 +79,7 @@ public:
CodeAssistantPrivate(CodeAssistant *assistant);
virtual ~CodeAssistantPrivate();
void configure(BaseTextEditor *textEditor);
void configure(BaseTextEditorWidget *editorWidget);
void reconfigure();
bool isConfigured() const;
@@ -119,7 +119,7 @@ private slots:
private:
CodeAssistant *m_q;
BaseTextEditor *m_textEditor;
BaseTextEditorWidget *m_editorWidget;
CompletionAssistProvider *m_completionProvider;
QList<QuickFixAssistProvider *> m_quickFixProviders;
Internal::ProcessorRunner *m_requestRunner;
@@ -145,7 +145,7 @@ static const int AutomaticProposalTimerInterval = 400;
CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant)
: m_q(assistant)
, m_textEditor(0)
, m_editorWidget(0)
, m_completionProvider(0)
, m_requestRunner(0)
, m_requestProvider(0)
@@ -171,33 +171,33 @@ CodeAssistantPrivate::~CodeAssistantPrivate()
{
}
void CodeAssistantPrivate::configure(BaseTextEditor *textEditor)
void CodeAssistantPrivate::configure(BaseTextEditorWidget *editorWidget)
{
// @TODO: There's a list of providers but currently only the first one is used. Perhaps we
// should implement a truly mechanism to support multiple providers for an editor (either
// merging or not proposals) or just leave it as not extensible and store directly the one
// completion and quick-fix provider (getting rid of the list).
m_textEditor = textEditor;
m_completionProvider = textEditor->editorWidget()->completionAssistProvider();
m_editorWidget = editorWidget;
m_completionProvider = editorWidget->completionAssistProvider();
m_quickFixProviders =
ExtensionSystem::PluginManager::getObjects<QuickFixAssistProvider>();
filterEditorSpecificProviders(&m_quickFixProviders, m_textEditor->document()->id());
filterEditorSpecificProviders(&m_quickFixProviders, m_editorWidget->textDocument()->id());
m_textEditor->editorWidget()->installEventFilter(this);
connect(m_textEditor->textDocument(),SIGNAL(mimeTypeChanged()),
m_editorWidget->installEventFilter(this);
connect(m_editorWidget->textDocument(),SIGNAL(mimeTypeChanged()),
m_q, SLOT(reconfigure()));
}
void CodeAssistantPrivate::reconfigure()
{
if (isConfigured())
m_completionProvider = m_textEditor->editorWidget()->completionAssistProvider();
m_completionProvider = m_editorWidget->completionAssistProvider();
}
bool CodeAssistantPrivate::isConfigured() const
{
return m_textEditor != 0;
return m_editorWidget != 0;
}
void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
@@ -210,9 +210,9 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider)
if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile()) {
m_proposalWidget->setReason(ExplicitlyInvoked);
m_proposalWidget->updateProposal(
m_textEditor->textDocument()->textAt(
m_editorWidget->textDocument()->textAt(
m_proposal->basePosition(),
m_textEditor->position() - m_proposal->basePosition()));
m_editorWidget->position() - m_proposal->basePosition()));
} else {
destroyContext();
requestProposal(ExplicitlyInvoked, kind, provider);
@@ -248,7 +248,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
{
QTC_ASSERT(!isWaitingForProposal(), return);
if (m_textEditor->editorWidget()->hasBlockSelection())
if (m_editorWidget->hasBlockSelection())
return; // TODO
if (!provider) {
@@ -263,8 +263,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
m_assistKind = kind;
IAssistProcessor *processor = provider->createProcessor();
IAssistInterface *assistInterface =
m_textEditor->editorWidget()->createAssistInterface(kind, reason);
IAssistInterface *assistInterface = m_editorWidget->createAssistInterface(kind, reason);
if (!assistInterface)
return;
@@ -324,7 +323,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
}
int basePosition = proposalCandidate->basePosition();
if (m_textEditor->position() < basePosition)
if (m_editorWidget->position() < basePosition)
return;
if (m_abortedBasePosition == basePosition && reason != ExplicitlyInvoked)
@@ -334,7 +333,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
m_proposal.reset(proposalCandidate.take());
if (m_proposal->isCorrective())
m_proposal->makeCorrection(m_textEditor);
m_proposal->makeCorrection(m_editorWidget);
basePosition = m_proposal->basePosition();
m_proposalWidget = m_proposal->createWidget();
@@ -348,22 +347,22 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
m_proposalWidget->setAssistant(m_q);
m_proposalWidget->setReason(reason);
m_proposalWidget->setKind(m_assistKind);
m_proposalWidget->setUnderlyingWidget(m_textEditor->widget());
m_proposalWidget->setUnderlyingWidget(m_editorWidget);
m_proposalWidget->setModel(m_proposal->model());
m_proposalWidget->setDisplayRect(m_textEditor->cursorRect(basePosition));
m_proposalWidget->setDisplayRect(m_editorWidget->cursorRect(basePosition));
if (m_receivedContentWhileWaiting)
m_proposalWidget->setIsSynchronized(false);
else
m_proposalWidget->setIsSynchronized(true);
m_proposalWidget->showProposal(m_textEditor->textDocument()->textAt(
m_proposalWidget->showProposal(m_editorWidget->textDocument()->textAt(
basePosition,
m_textEditor->position() - basePosition));
m_editorWidget->position() - basePosition));
}
void CodeAssistantPrivate::processProposalItem(IAssistProposalItem *proposalItem)
{
QTC_ASSERT(m_proposal, return);
proposalItem->apply(m_textEditor, m_proposal->basePosition());
proposalItem->apply(m_editorWidget, m_proposal->basePosition());
destroyContext();
process();
}
@@ -371,9 +370,9 @@ void CodeAssistantPrivate::processProposalItem(IAssistProposalItem *proposalItem
void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)
{
QTC_ASSERT(m_proposal, return);
const int currentPosition = m_textEditor->position();
m_textEditor->setCursorPosition(m_proposal->basePosition());
m_textEditor->replace(currentPosition - m_proposal->basePosition(), newPrefix);
const int currentPosition = m_editorWidget->position();
m_editorWidget->setCursorPosition(m_proposal->basePosition());
m_editorWidget->replace(currentPosition - m_proposal->basePosition(), newPrefix);
notifyChange();
}
@@ -416,7 +415,7 @@ CompletionAssistProvider *CodeAssistantPrivate::identifyActivationSequence()
const int length = m_completionProvider->activationCharSequenceLength();
if (length == 0)
return 0;
QString sequence = m_textEditor->textDocument()->textAt(m_textEditor->position() - length,
QString sequence = m_editorWidget->textDocument()->textAt(m_editorWidget->position() - length,
length);
// 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
@@ -434,12 +433,12 @@ void CodeAssistantPrivate::notifyChange()
if (isDisplayingProposal()) {
QTC_ASSERT(m_proposal, return);
if (m_textEditor->position() < m_proposal->basePosition()) {
if (m_editorWidget->position() < m_proposal->basePosition()) {
destroyContext();
} else {
m_proposalWidget->updateProposal(
m_textEditor->textDocument()->textAt(m_proposal->basePosition(),
m_textEditor->position() - m_proposal->basePosition()));
m_editorWidget->textDocument()->textAt(m_proposal->basePosition(),
m_editorWidget->position() - m_proposal->basePosition()));
if (m_proposal->isFragile())
startAutomaticProposalTimer();
}
@@ -544,9 +543,9 @@ CodeAssistant::~CodeAssistant()
delete d;
}
void CodeAssistant::configure(BaseTextEditor *textEditor)
void CodeAssistant::configure(BaseTextEditorWidget *editorWidget)
{
d->configure(textEditor);
d->configure(editorWidget);
}
void CodeAssistant::process()