Статьи

Динамическая контекстная справка

Я признаю, что я пропустил эту функцию поддержки пользователей в течение последних нескольких лет. Мои причины: это пух, документация расплывчатая, и никто не будет ее использовать. Я не мог быть более неправильным.

[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, которая требует от вас нескольких
ключи, чтобы иметь представление справки обновить свой список ссылок. Это было исправлено в Eclipse 3.4 (выйдет в июне 2008 года). Не позволяйте этой ошибке помешать вам использовать динамическую справку.