如何为基于eclipse表单的插件编辑器的多个实例设置单独的全局动作处理程序

时间:2013-04-19 05:35:11

标签: java eclipse plugins eclipse-plugin eclipse-rcp

我正在使用基于eclipse表单的编辑器。我已经支持处理Undo Redo和脏标志到我的编辑器。这些功能都适用于单个插件实例。当我用2个或更多文件(2个或更多eclipse插件实例)打开它时,问题就出现了。现在,撤消重做开始工作很奇怪。它们仅适用于最后打开的实例。

例如:假设我的编辑器支持'.xeb'文件。如果我使用我的编辑器逐个打开test1.xeb和test2.xeb文件。 undo redo仅适用于为test2.xeb文件打开的实例。如果我切换回其他实例,则会出现撤消第一个实例的重做。

我在编辑器的plugin.xml中有以下条目:

  <plugin><extension
     point="org.eclipse.ui.editors">
  <editor
        class="Testeditor"
        default="true"
        extensions="xeb"
        icon="icons/sample.gif"
        id="testeditor"
        name="editor">
  </editor>
 </plugin>

我调试了代码并发现由于以错误的方式处理全局操作而发生这种奇怪的行为。我在下面的代码中使用了设置全局操作处理程序:

public void setUndoRedoActionHandlers() {

    final IActionBars actionBars = getEditorSite().getActionBars();
    actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
            mUndoAction);
    actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
            mRedoAction);
    actionBars.updateActionBars();
} 

我浏览了一些与此问题相关的链接。但无法理解实施此行为的概念。

http://wiki.eclipse.org/FAQ_How_do_I_find_out_what_view_or_editor_is_selected%3F
http://wiki.eclipse.org/FAQ_How_do_I_hook_into_global_actions,_such_as_Copy_and_Delete%3F

任何人都可以研究这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

只覆盖编辑器类中MultiPageEditorPart的setFocus()方法,并调用设置全局操作处理程序的适当方法,如下所示:

@Override
    public void setFocus() {
        switch (getActivePage()) {
        case 0:
            pageOne.setUndoRedoActionHandlers();
            break;
        case 1:
            pageTwo.setUndoRedoActionHandlers();
            break;
        }   
        super.setFocus();
    }