我已经实现了我的操作类,它扩展了 org.eclipse.core.commands.operations.AbstractOperation,因此它实现了方法 execute()、redo() 和 undo()。起初,我只能调用 execute() 方法,但我永远无法在我的 Eclipse 撤消重做按钮上看到撤消或重做命令可用。
然后我在我的 RCP 应用程序 (org.eclipse.ui.examples.undo) 中安装了一个示例插件,魔法开始发生。
使用示例插件附带的视图“撤消历史视图”,我可以看到我的自定义撤消和重做项目被添加到要撤消和重做的事物堆栈中。另外,当“撤消历史视图”处于活动状态时,我的自定义撤消重做操作会显示在 Eclipse 撤消重做按钮中。所以,它正在工作,但有一个问题。
当我选择我的视图部分时,项目会从 Eclipse 撤消重做按钮中消失。我的假设是我没有正确使用 IUndoContext。
这是我在执行操作方面所拥有的。我的 InventoryLabelOperation 类扩展了 org.eclipse.core.commands.operations.AbstractOperation。activePart 字段是我希望与 IUndoContext 正确播放的 View Part 的一个实例,但事实并非如此。
InventoryLabelOperation operation = new InventoryLabelOperation(message + name);
IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
IWorkbench workbench = activePart.getSite().getWorkbenchWindow().getWorkbench();
IUndoContext undoContext = workbench.getOperationSupport().getUndoContext();
operation.addContext(undoContext);
operationHistory.execute(operation, new NullProgressMonitor(), null);
有人看到我在这里缺少什么吗?