繁体   English   中英

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

[英]How to set seperate global action handler for multiple instance of eclipse form based plugin editor

我正在基于Eclipse表单的编辑器上工作。 我已经为编辑器提供了对撤消重做和脏标志的处理支持,这两个功能对于单个插件实例都可以正常工作。 当我用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

任何人都可以调查这个问题。 提前致谢。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM