0

我有一个命令,已添加到视图的上下文菜单(具有树形查看器)和自定义编辑器的上下文菜单中。

在我的处理程序中,我有什么方法可以区分从哪个上下文菜单调用命令?这是因为在视图的情况下,我使用类似这样的东西来获取我需要的数据,

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();

但是发生的情况是,即使我从我的视图中执行此命令,它也总是返回一个活动的编辑器。这是否意味着我必须编写单独的处理程序,这些处理程序将根据视图或编辑器是否处于焦点而处于活动状态?

谢谢!

4

2 回答 2

1

这是否意味着我必须编写单独的处理程序,这些处理程序将根据视图或编辑器是否处于焦点而处于活动状态?

是的,它确实。但是,您的单独处理程序可以是小类,它们调用一个通用类来完成您的命令的大部分工作。我不知道您的命令需要哪些数据才能运行,但是您的单独处理程序可以准备该数据并通过一个或多个构造函数将其传递给公共类。

于 2013-05-10T12:44:08.927 回答
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 theattribute of the handler declaration (see the Javadoc ofsetInitializationData`)...

在这种情况下,我更喜欢前一种方法,但当我无法确定运行时的行为时,我经常使用后一种方法。

于 2013-05-11T08:40:52.543 回答