0

我正在研究基于 Eclipse 表单的编辑器。我已经向我的编辑器提供了对 Undo Redo 和脏标志处理的支持。这两个功能都适用于单个插件实例。当我用 2 个或更多文件(2 个或更多 eclipse 插件实例)打开它时,问题就来了。现在,撤消重做开始变得奇怪。它们仅适用于最后打开的实例。

例如:假设我的编辑器支持“.xeb”文件。如果我使用编辑器一一打开 test1.xeb 和 test2.xeb 文件。然后撤消重做仅适用于为 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

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

4

1 回答 1

0

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

@Override
    public void setFocus() {
        switch (getActivePage()) {
        case 0:
            pageOne.setUndoRedoActionHandlers();
            break;
        case 1:
            pageTwo.setUndoRedoActionHandlers();
            break;
        }   
        super.setFocus();
    }
于 2013-05-13T11:05:38.433 回答