在我的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中的一个编辑器后启用菜单选项。
我该怎么做?
答案 0 :(得分:0)
首先,您无需检查targetEditor
是否 null ,因为该操作已通过plugin.xml
挂钩到编辑器。
其次,我可以看到您有一个API isMachineHallEditingMode()
。这应该告诉您是否选择了左侧树,并且该操作应该正常工作。
重要将您的操作设置为{b}始终启用 plugin.xml
。 Enables 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());
}
}