单击TreeViewer元素时,通过菜单启用/禁用eclipse rcp编辑器

时间:2013-01-09 07:22:09

标签: eclipse editor rcp treeviewer

在我的eclipse RCP应用程序中,我有一个TreeViewer,我可以从中选择不同的编辑器,用于绘制元素,双击后显示。在我的顶级菜单中,我有一个允许启用/取消绘图的选项。编辑器的操作如下所示:

public class EnableEditorAction implements IEditorActionDelegate {

IEditor hallEditor = null;

@Override
public void run(IAction action) {       
    if (hallEditor != null){
        hallEditor.setMachineHallEditMode(true);
    }       
}

@Override
public void setActiveEditor(IAction action, IEditorPart targetEditor) {
    // check for enabled
    boolean bEnabled = false;
    if (targetEditor != null && targetEditor instanceof IMachineHallEditor) {
        hallEditor = (IMachineHallEditor) targetEditor;
        bEnabled = !hallEditor.isMachineHallEditingMode();
    } 
    action.setEnabled(bEnabled);
}

@Override
public void selectionChanged(IAction action, ISelection selection) {
    if (hallEditor != null) {
        action.setEnabled(!hallEditor.isMachineHallEditingMode());
    }       
}

}

我遇到的问题是菜单选项仅在编辑器中单击时启用。我想要的是在单击左侧TreeViewer中的一个编辑器后启用菜单选项。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

首先,您无需检查targetEditor是否 null ,因为该操作已通过plugin.xml挂钩到编辑器。

其次,我可以看到您有一个API isMachineHallEditingMode()。这应该告诉您是否选择了左侧树,并且该操作应该正常工作。

重要将您的操作设置为{b}始终启用 plugin.xmlEnables for:参数应为空,因为启用处理是在selectionChanged

中完成的
public class EnableEditorAction implements IEditorActionDelegate {

     IEditor hallEditor;

     @Override
     public void run(IAction action) {       
          hallEditor.setMachineHallEditMode(true);
     }       

     @Override
     public void setActiveEditor(IAction action, IEditorPart targetEditor) {
          hallEditor = (IMachineHallEditor) targetEditor;
     }

     @Override
     public void selectionChanged(IAction action, ISelection selection) {
          action.setEnabled(!hallEditor.isMachineHallEditingMode());
     }       
}