Clang: Remember selected function signature hint

...when typing more arguments:

    struct Foo {};
    void f(int, int);
    void f(Foo, Foo);
    void f(char, char);

    void c()
    {
        f( // 1. Trigger completion with Ctrl+Space
           // 2. Chose item "f(Foo, Foo)"
           // 3. Type: Foo(),
           // OK, signature hint "f(Foo, Foo)" is displayed again
    }

FunctionHintProposalWidget and IFunctionHintProposalModel are
instantiated for each calculation, so remember the selected hint in the
CodeAssist. Keep the latest 20 entries.

Task-number: QTCREATORBUG-11688
Change-Id: I579fc6d8a35dd8fa398e4b3170ddc05a85252d1a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Nikolai Kosjar
2017-08-18 12:21:45 +02:00
parent 0ff2c036ac
commit b4e2ab36a7
10 changed files with 151 additions and 1 deletions

View File

@@ -74,6 +74,9 @@ public:
bool hasContext() const;
void destroyContext();
QVariant userData() const;
void setUserData(const QVariant &data);
CompletionAssistProvider *identifyActivationSequence();
void stopAutomaticProposalTimer();
@@ -105,6 +108,7 @@ private:
CompletionSettings m_settings;
int m_abortedBasePosition;
static const QChar m_null;
QVariant m_userData;
};
// --------------------
@@ -340,6 +344,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
m_proposalWidget->setAssistant(q);
m_proposalWidget->setReason(reason);
m_proposalWidget->setKind(m_assistKind);
m_proposalWidget->setBasePosition(basePosition);
m_proposalWidget->setUnderlyingWidget(m_editorWidget);
m_proposalWidget->setModel(proposalCandidateModel.take());
m_proposalWidget->setDisplayRect(m_editorWidget->cursorRect(basePosition));
@@ -465,6 +470,16 @@ void CodeAssistantPrivate::destroyContext()
}
}
QVariant CodeAssistantPrivate::userData() const
{
return m_userData;
}
void CodeAssistantPrivate::setUserData(const QVariant &data)
{
m_userData = data;
}
void CodeAssistantPrivate::startAutomaticProposalTimer()
{
if (m_settings.m_completionTrigger == AutomaticCompletion)
@@ -572,6 +587,16 @@ void CodeAssistant::destroyContext()
d->destroyContext();
}
QVariant CodeAssistant::userData() const
{
return d->userData();
}
void CodeAssistant::setUserData(const QVariant &data)
{
d->setUserData(data);
}
void CodeAssistant::invoke(AssistKind kind, IAssistProvider *provider)
{
d->invoke(kind, provider);