【问题标题】:Eclipse RCP: Command handler for view and editorEclipse RCP:视图和编辑器的命令处理程序
【发布时间】:2013-05-10 11:49:39
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 请将HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection() 改为HandlerUtil.getCurrentSelectionChecked(event)... :-)
  • 哦,谢谢!不错的指针!

标签: java eclipse eclipse-rcp


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我只是想确保没有其他方法可以让我错过。
  • 我只需要在活动编辑器中获取文件的路径以及在我的treeviewer中选择的文件的路径。
【解决方案2】:

您可以拥有相同的处理程序,并根据HandlerUtil.getActiveEditor(event)(仅当活动部分是编辑器时非null)和HandlerUtil.getActiveView(event)(仅非null)来决定行为当活动部分是视图时)。

或者您可以让您的处理程序实现IExecutableExtension 并提供方法setInitializationData(IConfigurationElement config, String propertyName, Object data)' which is invoked when the handler is created. Heredatais usually given in theclassattribute of the handler declaration (see the Javadoc ofsetInitializationData`)...

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

【讨论】:

  • 我不知道为什么,但是当我实现前一种方法时(正如我在问题中提到的那样),即使视图处于焦点,getActiveEditor 也总是返回一个编辑器。
  • 我会检查的。我很确定getActiveView(...) 仅在视图实际上处于活动状态时才返回视图...
  • 是的 getActiveView 就像你说的那样;我说的是getActiveEditor。即使在我调用处理程序时我的视图处于焦点位置,我也会得到一个编辑器。
  • 我可以看到它是这样编码的......但我无法解释这背后的基本原理。
  • 人们可能想要当前活动的“文件”,也就是顶部的文件,在编辑器中甚至从视图中,以便视图可以对该文件执行操作。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2014-01-05
  • 2011-04-27
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多