我想为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的。
答案 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);
}