ClangCodeModel: Let user choose the override

.... when following virtual function calls.
This brings us up to par with the built-in code model.
We do lose the icons, but they are of very little use in this context.

Change-Id: I29b27d538e7277d06a5af7acee07bddb6eb94c98
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-05-19 15:51:25 +02:00
parent 1372dfdf7f
commit b0d4fc359f
9 changed files with 454 additions and 32 deletions

View File

@@ -37,7 +37,6 @@
#include <coreplugin/actionmanager/command.h>
#include <texteditor/codeassist/genericproposalmodel.h>
#include <texteditor/codeassist/genericproposal.h>
#include <texteditor/codeassist/genericproposalwidget.h>
#include <texteditor/codeassist/assistinterface.h>
#include <texteditor/codeassist/iassistprocessor.h>
@@ -84,9 +83,13 @@ protected:
{
GenericProposalModelPtr proposalModel = model();
if (proposalModel && proposalModel->size() == 1) {
emit proposalItemActivated(proposalModel->proposalItem(0));
deleteLater();
return;
const auto item = dynamic_cast<VirtualFunctionProposalItem *>(
proposalModel->proposalItem(0));
if (item && item->link().hasValidTarget()) {
emit proposalItemActivated(proposalModel->proposalItem(0));
deleteLater();
return;
}
}
GenericProposalWidget::showProposal(prefix);
}
@@ -95,24 +98,7 @@ private:
QKeySequence m_sequence;
};
class VirtualFunctionProposal : public GenericProposal
{
public:
VirtualFunctionProposal(int cursorPos,
const QList<AssistProposalItemInterface *> &items,
bool openInSplit)
: GenericProposal(cursorPos, items)
, m_openInSplit(openInSplit)
{
setFragile(true);
}
IAssistProposalWidget *createWidget() const override
{ return new VirtualFunctionProposalWidget(m_openInSplit); }
private:
bool m_openInSplit;
};
class VirtualFunctionAssistProcessor : public IAssistProcessor
{
@@ -207,4 +193,16 @@ IAssistProcessor *VirtualFunctionAssistProvider::createProcessor() const
return new VirtualFunctionAssistProcessor(m_params);
}
VirtualFunctionProposal::VirtualFunctionProposal(
int cursorPos, const QList<AssistProposalItemInterface *> &items, bool openInSplit)
: GenericProposal(cursorPos, items), m_openInSplit(openInSplit)
{
setFragile(true);
}
IAssistProposalWidget *VirtualFunctionProposal::createWidget() const
{
return new VirtualFunctionProposalWidget(m_openInSplit);
}
} // namespace CppTools