Я признаю, что я пропустил эту функцию поддержки пользователей в течение последних нескольких лет. Мои причины: это пух, документация расплывчатая, и никто не будет ее использовать. Я не мог быть более неправильным.
[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();
}
List
helpResources = 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, которая требует от вас нескольких