来看下命令模式的高级篇。redo/undo操作的实现
1.首先参照网址
https://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-udrd/
上面讲解了撤销恢复的机制
2.机制中讲了三种上下文
GlobalUndoContext:全局上下文(与任意一个上下文匹配,这时都能重操作历史记录堆栈中取出来)
UndoContext:(轻量级)一个简单,轻量级的UndoContext,可以被用来标记任意一个Operation。这个Context 可以被任意客户端初始化也可以被继承。使用同一UndoContext对象的Operation才能相匹配。
ObjectUndoContext:这是用这个运行上下文时,可以通过其自身实现的一个特殊方法addMatch(IUndoContext)添加任意与之匹配的运行上下文,方便实现跨编辑器或视图的重复撤销操作之间的共享。
上下文就是个身份标示,是和操作绑在一起,我们重历史堆栈中拿着上下文标示就可以找出所对应的操作。这时候eclipse--edit菜单下的undo/redo方可生效。否则是灰色
3.当初始视图或编辑器时候,通过以下代码:
private void initializeOperationHistory() {
undoContext = new ObjectUndoContext(this); //视图上的撤销恢复上下文
approver = new AskUserApprover(undoContext);//执行撤销恢复时候给出提示
getOperationHistory().addOperationApprover(approver);
int limit = 10; ,
getOperationHistory().setLimit(undoContext, limit);//历史堆栈中上下文对应操作的上限
//把实现的重复撤销操作集成到Eclipse环境中
UndoRedoActionGroup undoRedoGroup = new UndoRedoActionGroup(getSite(),
undoContext, true);
IActionBars actionBars = getViewSite().getActionBars();
undoRedoGroup.fillActionBars(actionBars);
}
这个时候我们激活视图或编辑器的时候,它就拿上下文去历史堆栈中找与该上下文与之匹配的操作。
4.从历史堆栈中删除上下文,上下文对的操作也就删除了。
getOperationHistory().dispose(undoContext, true, true, false);
分享到:
相关推荐
至于提供的"Redoing_undo_2006.ppt"文件,虽然无法直接查看内容,但根据文件名推测,这可能是一个关于2006年时Eclipse撤销/重做功能的详细讲解或演示,可能涵盖了如何实现和优化撤销/重做操作的实例,以及当时的最佳...
如果你刚刚误删了文件,可以尝试按下Ctrl+Z,Eclipse通常会撤销最近一次的操作,这样就有可能直接恢复刚刚删除的文件或文件夹。但请注意,这仅适用于撤销最近的操作,如果已经进行过其他操作,这个方法可能无效。 ...
7. **命令(Command)**:GEF使用命令模式来记录和撤销/重做用户操作,确保编辑器的可恢复性和一致性。 8. **图(Graph)**:图是GEF中的核心概念,表示一组相互连接的节点和边。它们可以通过图编辑器进行操作,如...
**全局撤销 (Ctrl+Z) / 全局恢复上一个选择 (Alt+Shift+↓):** 提供了撤销和恢复的功能,对于意外的操作提供了回退机制。 **全局复制 (Ctrl+C) / 全局剪切 (Ctrl+X) / 全局粘贴 (Ctrl+V) / 全局全部选中 (Ctrl+A) ...
- **Alt+Shift+Z**:重构撤销,提供错误恢复机制,避免因重构操作失误导致的问题。 以上快捷键涵盖了从基本编辑到高级重构的各个方面,熟练掌握它们将显著提升开发效率和代码质量。在日常开发中,建议根据个人习惯...
- **Alt+Shift+Z**:重构撤销,提供安全的试验与回滚机制。 #### 查找与替换 - **Ctrl+F**:全局查找并替换,适用于跨文件的文本搜索。 - **Ctrl+Shift+K/Ctrl+K**:在文本编辑器中查找上一个或下一个,便于定位...
- **Ctrl+M**:最大化/恢复当前编辑器视图。在多任务处理时很有用,可以让当前窗口全屏显示。 - **Ctrl+/、Ctrl+\***:注释/取消注释当前行或选中的代码块。这对于临时禁用代码段落非常方便。 - **Ctrl+O**:打开...
1.3 Eclipse的诞生 3 1.4 Eclipse贡献SWT工具包 5 1.4.1 SWT的结构 6 1.4.2 SWT所支持的操作系统 6 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 Swing与SWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWT与...
8. **备份与恢复**:SVN提供了一个强大的备份和恢复机制,用户可以轻松地回滚到任何历史版本,防止因误操作或代码问题导致的数据丢失。 9. **协作与权限管理**:SVN支持用户和组级别的权限控制,管理者可以分配不同...
- **变更回复**:用户可以轻松地撤销未提交的更改,恢复至前一个状态,避免错误修改造成的影响。 - **提交选项说明**:EGit支持多种提交选项,如修正上一次提交、添加签署等,增加了提交的灵活性与规范性。 - **...
- **命令架构**:支持撤销/重做功能,保证操作的可恢复性。 - **图形适配器**:允许将不同类型的模型映射到图形元素,增强了框架的灵活性。 - **可扩展性**:通过插件机制,开发者可以轻易地添加新的图形元素类型或...
这可能涉及到对`Transaction`和`Log`类的修改,确保回滚操作能准确无误地恢复数据库到之前的状态。 在实际的开发过程中,`.classpath`和`.project`文件是Eclipse项目的配置文件,它们定义了项目的构建路径和编译...
Tomasulo算法通过重排序缓冲区(Reorder Buffer, ROB)和恢复机制来处理这些问题。ROB用于记录指令的执行顺序,当指令依赖关系解除后,会按照正确的顺序提交。在冲突发生时,模拟器需要能够撤销已分配的资源并重新...
7. **回溯机制**:当玩家误操作时,提供撤销功能是非常有用的。这可能涉及到保存和恢复游戏状态的历史记录,实现回溯算法。 8. **优化与性能**:为了提供流畅的游戏体验,开发者需要关注程序的性能,可能需要进行...
8. **恢复与备份**:有时可能会误操作或者需要恢复到之前的版本,CVS提供了撤销修改、恢复文件和备份仓库的功能。学习这些操作可以防止数据丢失。 9. **与其他工具集成**:CVS可以与许多开发环境和IDE集成,如...