TextEditor: CodeAssist: Allow immediate proposals

Immediate proposals are displayed for asynchronous providers and fragile
proposals.

The idea is to show already available results immediately. The proposal
calculated in the process runner can then replace the immediate
proposal.

Change-Id: I7903e6677c9dfeb4957eb416062fff1fb01ff23f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
Nikolai Kosjar
2013-09-18 09:07:21 +02:00
parent 0eb0f54480
commit 3a64f8a344
14 changed files with 40 additions and 1 deletions

View File

@@ -639,6 +639,11 @@ CppCompletionAssistProcessor::CppCompletionAssistProcessor()
CppCompletionAssistProcessor::~CppCompletionAssistProcessor()
{}
IAssistProposal *CppCompletionAssistProcessor::immediateProposal(const IAssistInterface *)
{
return 0;
}
IAssistProposal * CppCompletionAssistProcessor::perform(const IAssistInterface *interface)
{
m_interface.reset(static_cast<const CppCompletionAssistInterface *>(interface));

View File

@@ -102,6 +102,7 @@ public:
CppCompletionAssistProcessor();
virtual ~CppCompletionAssistProcessor();
virtual TextEditor::IAssistProposal *immediateProposal(const TextEditor::IAssistInterface *);
virtual TextEditor::IAssistProposal *perform(const TextEditor::IAssistInterface *interface);
private:

View File

@@ -808,6 +808,8 @@ public:
: m_provider(static_cast<const FakeVimCompletionAssistProvider *>(provider))
{}
IAssistProposal *immediateProposal(const IAssistInterface *) { return 0; }
IAssistProposal *perform(const IAssistInterface *interface)
{
const QString &needle = m_provider->needle();

View File

@@ -214,6 +214,11 @@ GLSLCompletionAssistProcessor::GLSLCompletionAssistProcessor()
GLSLCompletionAssistProcessor::~GLSLCompletionAssistProcessor()
{}
IAssistProposal *GLSLCompletionAssistProcessor::immediateProposal(const IAssistInterface *)
{
return 0;
}
IAssistProposal *GLSLCompletionAssistProcessor::perform(const IAssistInterface *interface)
{
m_interface.reset(static_cast<const GLSLCompletionAssistInterface *>(interface));

View File

@@ -71,6 +71,7 @@ public:
GLSLCompletionAssistProcessor();
virtual ~GLSLCompletionAssistProcessor();
virtual TextEditor::IAssistProposal *immediateProposal(const TextEditor::IAssistInterface *);
virtual TextEditor::IAssistProposal *perform(const TextEditor::IAssistInterface *interface);
private:

View File

@@ -510,6 +510,11 @@ QmlJSCompletionAssistProcessor::QmlJSCompletionAssistProcessor()
QmlJSCompletionAssistProcessor::~QmlJSCompletionAssistProcessor()
{}
IAssistProposal *QmlJSCompletionAssistProcessor::immediateProposal(const IAssistInterface *)
{
return 0;
}
IAssistProposal *QmlJSCompletionAssistProcessor::createContentProposal() const
{
IGenericProposalModel *model = new QmlJSAssistProposalModel(m_completions);

View File

@@ -95,6 +95,7 @@ public:
QmlJSCompletionAssistProcessor();
virtual ~QmlJSCompletionAssistProcessor();
virtual TextEditor::IAssistProposal *immediateProposal(const TextEditor::IAssistInterface *);
virtual TextEditor::IAssistProposal *perform(const TextEditor::IAssistInterface *interface);
private:

View File

@@ -86,6 +86,8 @@ private:
class ClipboardAssistProcessor: public IAssistProcessor
{
public:
IAssistProposal *immediateProposal(const TextEditor::IAssistInterface *) { return 0; }
IAssistProposal *perform(const IAssistInterface *interface)
{
if (!interface)

View File

@@ -259,6 +259,9 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
return;
if (provider->isAsynchronous()) {
if (IAssistProposal *newProposal = processor->immediateProposal(assistInterface))
displayProposal(newProposal, reason);
m_requestProvider = provider;
m_requestRunner = new ProcessorRunner;
connect(m_requestRunner, SIGNAL(finished()), this, SLOT(proposalComputed()));
@@ -305,7 +308,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
QScopedPointer<IAssistProposal> proposalCandidate(newProposal);
if (isDisplayingProposal()) {
if (!m_proposal->isFragile() || proposalCandidate->isFragile())
if (!m_proposal->isFragile())
return;
destroyContext();
}

View File

@@ -46,6 +46,7 @@ public:
IAssistProcessor();
virtual ~IAssistProcessor();
virtual IAssistProposal *immediateProposal(const IAssistInterface *interface) = 0;
virtual IAssistProposal *perform(const IAssistInterface *interface) = 0;
};

View File

@@ -177,6 +177,11 @@ KeywordsCompletionAssistProcessor::KeywordsCompletionAssistProcessor(Keywords ke
KeywordsCompletionAssistProcessor::~KeywordsCompletionAssistProcessor()
{}
IAssistProposal *KeywordsCompletionAssistProcessor::immediateProposal(const IAssistInterface *)
{
return 0;
}
IAssistProposal *KeywordsCompletionAssistProcessor::perform(const IAssistInterface *interface)
{
m_interface.reset(interface);

View File

@@ -88,6 +88,7 @@ public:
KeywordsCompletionAssistProcessor(Keywords keywords);
virtual ~KeywordsCompletionAssistProcessor();
virtual TextEditor::IAssistProposal *immediateProposal(const TextEditor::IAssistInterface *);
virtual TextEditor::IAssistProposal *perform(const TextEditor::IAssistInterface *interface);
virtual QChar startOfCommentChar() const;

View File

@@ -47,6 +47,11 @@ QuickFixAssistProcessor::QuickFixAssistProcessor()
QuickFixAssistProcessor::~QuickFixAssistProcessor()
{}
IAssistProposal *QuickFixAssistProcessor::immediateProposal(const IAssistInterface *)
{
return 0;
}
IAssistProposal *QuickFixAssistProcessor::perform(const IAssistInterface *interface)
{
if (!interface)

View File

@@ -41,6 +41,8 @@ public:
virtual ~QuickFixAssistProcessor();
virtual const IAssistProvider *provider() const = 0;
virtual TextEditor::IAssistProposal *immediateProposal(const IAssistInterface *interface);
virtual IAssistProposal *perform(const IAssistInterface *interface);
};