正在写 linux/gtk 的一项目的 undo/redo 的实现。
目前的思路是这样的:
1. 设置两个stack, undo_stack 与 redo_stack。栈里面只保存 undo 和 redo 的操作所需的参数。
2. 在每一个操作中,如添加实体、删除实体。。。时必须将相关的参数入 undo_stack, 以备 undo 时用,
3. 在 undo_stack 参数弹出时,将弹出的参数转换成 redo 的对应参数压入 redo_stack 以备 redo 使
用。也就是不论是 undo_stack 还是 redo_stack 的参数出栈时,他们都应该做相应的转换压入另一个栈。
4. 这里面的一个关键问题是必须修改与操作相关的其他实体的联系,因为这些实体直接的联系通常都是用指针来
实现的。而如果删除里一个实体后,再 undo 来生成他,该实体的指针必然发生更改。所以,这时如果其他的实
体有指向他的指针,也要修改该指针的值。
5. 为了解决实体指针变化的问题,就需要一个不变的 ID 值来索引该实体,由这个 ID 来定位指针。
阅读(1719) | 评论(1) | 转发(0) |