如何使用 JFACE 为 RCP MDirectToolItem 创建自定义 SWT 工具提示?
How to create a custom SWT Tooltip using JFACE for an RCP MDirectToolItem?
我想为 RCP MDirectToolItem 或 MHandledToolItem 创建自定义工具提示。 JFace 提供了 org.eclipse.jface.window.ToolTip class,我可以扩展和覆盖 createToolTipContentArea() 方法。但是,要实例化 JFace 工具提示,我必须为其提供将使用该工具提示的 SWT 控件。我想不出从 MDirectToolItem 获取底层 SWT 控件的方法。
我已经能够使用 EModelService.find() 方法获取 MToolBar 和 MDirectToolItem(我在 Application.e4xmi 中定义的)。我尝试从 MDirectToolItem 获取底层 SWT 控件,但似乎没有办法做到这一点。
我也尝试创建一个 SWT ToolItem 并将其添加到 MToolBar,但是 MToolBar 的子项只是 MToolBarElement 的。
工具项没有单独的控件,它们是父 ToolBar
控件的一部分。 SWT ToolItem
class 表示工具项,这只是从 Widget
而不是 Control
.
派生的
因此您必须在工具栏控件上设置工具提示,并计算出显示工具提示时哪个工具项处于活动状态。
表示UI对象的应用程序模型classes都扩展了MUIElement
接口。这提供了一个 getWidget
方法来获取 UI 对象。
所以对于 MToolBar
你可以这样做:
ToolBar toolbar = (ToolBar)mtoolbar.getWidget();
对于MToolItem
(处理或直接),您可以:
ToolItem toolitem = (ToolItem)mtoolitem.getWidget();
如果您使用 NO_RECREATE
样式创建 ToolTip
,它将调用
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);
}
我想为 RCP MDirectToolItem 或 MHandledToolItem 创建自定义工具提示。 JFace 提供了 org.eclipse.jface.window.ToolTip class,我可以扩展和覆盖 createToolTipContentArea() 方法。但是,要实例化 JFace 工具提示,我必须为其提供将使用该工具提示的 SWT 控件。我想不出从 MDirectToolItem 获取底层 SWT 控件的方法。
我已经能够使用 EModelService.find() 方法获取 MToolBar 和 MDirectToolItem(我在 Application.e4xmi 中定义的)。我尝试从 MDirectToolItem 获取底层 SWT 控件,但似乎没有办法做到这一点。
我也尝试创建一个 SWT ToolItem 并将其添加到 MToolBar,但是 MToolBar 的子项只是 MToolBarElement 的。
工具项没有单独的控件,它们是父 ToolBar
控件的一部分。 SWT ToolItem
class 表示工具项,这只是从 Widget
而不是 Control
.
因此您必须在工具栏控件上设置工具提示,并计算出显示工具提示时哪个工具项处于活动状态。
表示UI对象的应用程序模型classes都扩展了MUIElement
接口。这提供了一个 getWidget
方法来获取 UI 对象。
所以对于 MToolBar
你可以这样做:
ToolBar toolbar = (ToolBar)mtoolbar.getWidget();
对于MToolItem
(处理或直接),您可以:
ToolItem toolitem = (ToolItem)mtoolitem.getWidget();
如果您使用 NO_RECREATE
样式创建 ToolTip
,它将调用
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);
}