Как реализовать всплывающее окно документации content assist в Eclipse RCP
-
23-08-2019 - |
Вопрос
Я внедрил свой собственный редактор и добавил к нему функцию завершения кода.Мой помощник по контенту зарегистрирован в конфигурации source viewer следующим образом:
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
if (assistant == null) {
assistant = new ContentAssistant();
assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
assistant.setContentAssistProcessor(getMyAssistProcessor(),
MyPartitionScanner.DESIRED_PARTITION_FOR_MY_ASSISTANCE);
assistant.enableAutoActivation(true);
assistant.setAutoActivationDelay(500);
assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
}
return assistant;
}
Когда я нажимаю Ctrl + Космос внутри нужного раздела появляется всплывающее окно завершения, которое работает должным образом.
И вот мой вопрос..Как мне реализовать / зарегистрировать всплывающее окно документации, которое появляется рядом с всплывающим окном завершения?(Например, в редакторе java)
Решение
Что ж,
Я сам отвечу на этот вопрос ;-)
Вы должны добавить эту строку
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
к приведенной выше конфигурации.Затем при создании Предложения по завершению, вызывается восьмой (последний) параметр Дополнительная информация о предложении частью конструктора является текст, который будет показан во всплывающем окне документации.
new CompletionProposal(replacementString,
replacementOffset,
replacementLength,
cursorPosition,
image,
displayString,
contextInformation,
additionalProposalInfo);
Более подробную информацию о можно найти здесь.
Легко, не правда ли..если вы знаете, как это сделать ;)
Другие советы
Для стилизованного информационного окна (точно так же, как в JDT).
HTMLTextPresenter
.import org.eclipse.jface.internal.text.html.HTMLTextPresenter;
public class MyConfiguration extends SourceViewerConfiguration {
[...]
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
if (assistant == null) {
[...]
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
}
return assistant;
}
@Override
public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
return new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell parent) {
return new DefaultInformationControl(parent,new HTMLTextPresenter(false));
}
};
}
}
public class MyProposal implements ICompletionProposal {
[...]
@Override
public String getAdditionalProposalInfo() {
return "<b>Hello</b> <i>World</i>!";
}
}