如何使用JFACE为RCP MDirectToolItem创建自定义SWT工具提示?

时间:2019-05-31 21:17:09

标签: eclipse swt jface rcp e4

我想为RCP MDirectToolItem或MHandledToolItem创建自定义工具提示。 JFace提供了org.eclipse.jface.window.ToolTip类,我可以扩展和覆盖createToolTipContentArea()方法。但是,要实例化JFace ToolTip,我必须给它提供将使用ToolTip的SWT控件。我无法弄清楚从MDirectToolItem获取基础SWT控件的方法。

我已经能够使用EModelService.find()方法获取MToolBar和MDirectToolItem(在Application.e4xmi中定义)。我尝试从MDirectToolItem获取基础的SWT控件,但似乎没有办法做到这一点。

我还尝试创建一个SWT ToolItem并将其添加到MToolBar,但是MToolBar的子代只是MToolBarElement的。

1 个答案:

答案 0 :(得分:2)

工具项没有单独的控件,它们是父ToolBar控件的一部分。 SWT ToolItem类代表工具项,它只是从Widget而不是Control派生而来。

因此,您将必须在工具栏控件上设置工具提示,并确定显示工具提示时哪个工具项处于活动状态。

代表UI对象的应用程序模型类都扩展了MUIElement接口。这提供了一种getWidget方法来获取UI对象。

对于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);
}