Eclipse Redo undo implementation

最近做Eclipse插件,要为一个Multi的Editor做redo/undo功能,开始查到了很多资料,网上倒是有一篇讲TreeViewer的redo/undo功能的文章(参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-udrd/index.html),但基本都是讲View的redo/undo,没有一篇文章是讲Editor的。本人试了很多次,把OperationHistory的过程写到Editor的Contributor的setActivePage方法中,基本就可以了,如下:
    undoContext = new ObjectUndoContext(this);
approver = new AskUserApprover(undoContext);
getOperationHistory().addOperationApprover(approver);
int limit = 10;
getOperationHistory().setLimit(undoContext, limit);
UndoRedoActionGroup undoRedoGroup = new UndoRedoActionGroup(getSite(),
undoContext, true);
IActionBars actionBars = getActionBars();
undoRedoGroup.fillActionBars(actionBars);
代码中没有定义的变量可以参考我提到的文章。
现在的问题的,虽然Eclipse的菜单上面的redo/undo已经可以正常的工作了,但我们使用Ctrl+Z/Y的
快捷键是不能工作的,我们开发的插件比较复杂可能是前期开发中已经在父类中处理了这个问题,查了很久没有查出
为啥快捷健不能工作,后来只好在Editor界面上单独的注册了事件,这样才使得undo/redo正常工作了。
事件处理类如下:
public class UndoRedoListener implements KeyListener{
public void keyPressed(KeyEvent e) {

}

public void keyReleased(KeyEvent e) {
IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
int mask = e.stateMask;
int ch = e.character;
if(mask == SWT.CTRL && ch == 'Z'-'A'+1){
if(operationHistory.canUndo(ScorecardTableEditor.getUndoContext())){
try {
operationHistory.undo(ScorecardTableEditor.getUndoContext(), null, null);
} catch (ExecutionException e1) {
e1.printStackTrace();
}
}
}
if(mask == SWT.CTRL && ch == 'Y'-'A'+1){
if(operationHistory.canRedo(ScorecardTableEditor.getUndoContext())){
try {
operationHistory.redo(ScorecardTableEditor.getUndoContext(), null, null);
} catch (ExecutionException e1) {
e1.printStackTrace();
}
}
}
}
}
不知道是否,有更好的方法,呵呵!反正可以工作了,这种方法使用了Operation机制来管理栈,简化了实现过程,最大程度的共用
了Eclipse提供的功能。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值