Как создать настраиваемую подсказку SWT, используя JFACE для RCP MDirectToolItem? - PullRequest
1 голос
/ 01 июня 2019

Я хотел бы создать настраиваемую подсказку для RCP MDirectToolItem или MHandledToolItem.JFace предоставляет класс org.eclipse.jface.window.ToolTip, который я могу расширить и переопределить метод createToolTipContentArea ().Однако, чтобы создать JTace ToolTip, я должен дать ему SWT Control, который будет использовать ToolTip.Я не могу найти способ получить базовый элемент управления SWT из MDirectToolItem.

Мне удалось получить MToolBar и MDirectToolItem (который я определил в Application.e4xmi) с помощью метода EModelService.find ().Я попытался получить базовый элемент управления SWT из MDirectToolItem, но, похоже, нет способа сделать это.

Я также попытался создать SWT ToolItem и добавить его в MToolBar, но дочерние элементы MToolBar - только MToolBarElement.

1 Ответ

2 голосов
/ 01 июня 2019

Элементы инструментов не имеют отдельного элемента управления, они являются частью родительского элемента управления ToolBar. Класс SWT ToolItem представляет элемент инструмента, он просто получен из Widget, а не Control.

Таким образом, вам придется установить подсказку на панели инструментов и определить, какой элемент активен, когда отображается подсказка.

Классы модели приложения, которые представляют объекты пользовательского интерфейса, расширяют интерфейс MUIElement. Это обеспечивает getWidget метод для получения объекта пользовательского интерфейса.

Так что для MToolBar вы можете сделать:

ToolBar toolbar = (ToolBar)mtoolbar.getWidget();

и для MToolItem (с обработкой или прямым) вы можете сделать:

ToolItem toolitem = (ToolItem)mtoolitem.getWidget();

Если вы создадите ToolTip со стилем NO_RECREATE, он вызовет getToolTipArea метод определения необходимости смены наконечника инструмента. Вы можете использовать что-то вроде следующего, чтобы иметь разные области для каждого элемента инструмента:

@Override
protected Object getToolTipArea(final Event event)
{
  // TODO save the ToolBar in the class as 'toolBar'
  ToolItem item = toolBar.getItem(new Point(event.x, event.y));
  if (item != null)
    return item;

  return super.getToolTipArea(event);
}
...