Я признаю, что я пропустил эту функцию поддержки пользователей в течение последних нескольких лет. Мои причины: это пух, документация расплывчатая, и никто не будет ее использовать. Я не мог быть более неправильным.
[Img_assist | NID = 2218 | название = | убывание = | ссылка = нет | ALIGN = не определено | ширина = 439 | Высота = 301]
Мы впервые подключили динамическую помощь нашему редактору рабочих колод в январе. Глядя на изображение выше, вы увидите, что тег * TFSUPPRESS NOISEDIP был выбран с помощью справки и предлагает ссылку для более подробной информации. Это просто, это работает, и это не раздражает .
Идея состоит в том, чтобы предложить пользователю помощь в том, что было выбрано в активном представлении или редакторе. Справка отображается в представлении справки Eclipse. Я собрал пример плагина, который показывает, как он работает. Это представление, в котором перечислены три персонажа из классического фильма «Хороший, плохой и уродливый». Класс представления называется DynamicHelpView.
Загрузите исходный код плагина здесь с SourceForge.net. Код предполагает, что вы используете Eclipse 3.3 и, по крайней мере, Java 5.0. Я предполагаю, что у вас есть некоторый опыт добавления справки в ваш плагин. Если нет, потратьте несколько минут на просмотр файлов plugin.xml, context.xml и reference /*.*.
Представление справки Eclipse, если оно отображается, будет прослушивать события активации или выбора представления или редактора. В нашем примере, когда он видит одно из этих событий, он вызывает DynamicHelpView.getAdapter (Class) с запросом IContextProvider.
Чтобы это сработало, сделайте выбор и запросите динамическую помощь, нажав клавишу F1.
public Object getAdapter(Class adapter) { if (IContextProvider.class.equals(adapter)) { return new ContextProvider(Activator.PLUGIN_ID + ".context_dynamichelpview", (IStructuredSelection) viewer.getSelection()); } return super.getAdapter(adapter); }
ContextProvider извлекает текущий выбор таблицы и возвращает SelectionContext, который обеспечивает представление справки с ресурсами контекста справки для отображения. Контекстные ресурсы справки могут быть связанными темами или внешними ссылками.
public class ContextProvider implements IContextProvider { public IContext getContext(Object target) { IContext context = HelpSystem.getContext(fContextId); if (!fSelected.isEmpty()) { context = new SelectionContext(context, fSelected); } return context; } public int getContextChangeMask() { return SELECTION; } }
SelectionContext создает список IHelpResources. Первая — это одна внешняя ссылка на Википедию, за которой следуют некоторые внутренние ссылки на связанную статическую справку. Статическая справка была зарегистрирована в plugin.xml.
public class SelectionContext implements IContext2 { private IHelpResource[] fHelpResources; private String fText; private String fTitle; public SelectionContext(IContext context, IStructuredSelection selection) { Assert.isNotNull(selection); if (context instanceof IContext2) { fTitle = ((IContext2) context).getTitle(); } ListhelpResources = new ArrayList (); String label = null; StringBuffer location = new StringBuffer("http://en.wikipedia.org/wiki/"); if (selection.getFirstElement().equals("The Good")) { label = "Clint Eastwood " + selection.toString(); location.append("Man_with_No_Name"); } else if (selection.getFirstElement().equals("The Bad")) { label = "Lee Van Cleef " + selection.toString(); location.append("Angel_Eyes_%28The_Good%2C_the_Bad_and_the_Ugly%29"); } else if (selection.getFirstElement().equals("The Ugly")) { label = "Eli Wallach " + selection.toString(); location.append("Tuco_%28The_Ugly%29"); } helpResources.add(new SelectionHelpResource(label, location.toString())); // Add static help topics if (context != null) { IHelpResource[] resources = context.getRelatedTopics(); if (resources != null) { for (int j = 0; j < resources.length; j++) { helpResources.add(resources[j]); } } } fHelpResources = helpResources.toArray(new IHelpResource[helpResources.size()]); if (context != null) { fText = context.getText(); } if (fText == null) { fText = ""; } } }
Установите несколько точек останова в плагине, чтобы узнать, как работает динамическая справка.
Есть небольшая ошибка 173073, которая требует от вас нескольких