我有一个命令,我已添加到视图的上下文菜单(有一个treeviewer)和我的自定义编辑器的上下文菜单。
在我的处理程序中,有什么方法可以区分调用命令的上下文菜单?这是因为在视图的情况下,我使用这样的东西来获取我需要的数据,
ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
.getActivePage().getSelection();
if (selection != null & selection instanceof IStructuredSelection)
{
IStructuredSelection strucSelection = (IStructuredSelection) selection;
.....
对于编辑器,选择当然是空的。所以我添加了以下内容来处理编辑器部分,
IEditorPart editor = HandlerUtil.getActiveEditor(event);
IEditorInput input = editor.getEditorInput();
IPath path = ((FileEditorInput)input).getPath();
但是,即使我从我的视图中执行此命令,它总会返回一个活动的编辑器。这是否意味着我必须根据视图或编辑器是否处于焦点而写入将处于活动状态的单独处理程序?
谢谢!
答案 0 :(得分:1)
这是否意味着我必须根据视图或编辑器是否处于焦点而写入将处于活动状态的单独处理程序?
是的。但是,您的单独处理程序可以是小类,它们调用公共类来执行命令的大部分工作。我不知道您的命令需要运行什么数据,但是您的单独处理程序可以准备该数据并通过一个或多个构造函数将其传递给公共类。
答案 1 :(得分:0)
您可以拥有相同的处理程序,并根据HandlerUtil.getActiveEditor(event)
(当活动部件是编辑器时只有非null
)和HandlerUtil.getActiveView(event)
(这是当活动部分是视图时,只有非null
。
或者您可以让处理程序实施IExecutableExtension
并提供方法setInitializationData(IConfigurationElement config, String propertyName, Object data)' which is invoked when the handler is created. Here
数据is usually given in the
类attribute of the handler declaration (see the Javadoc of
setInitializationData`)...
在这种情况下,我更喜欢前一种方法,但每当我无法在运行时决定行为时,我经常使用后一种方法。