目标
在本章节,我设置了6个按键事件来模拟,实际的操作,分别是数字键1-5,和H
- Key_1 代表事件 ItemA(模拟实际的操作)
- Key_2 代表事件 ItemB
- Key_3 代表事件 ItemC
- Key_4 undo
- Key_5 redo
- Key_H 查看信息
每当执行一次事件时,事件就会被存储到历史堆栈里,最高上限为8,并且会记录当前位置
undo: 将位置往回移动,直到位置为0时
redo: 将位置向前移动,直到位置为历史堆栈最前面
查看信息:查看当前历史堆栈里面的内容,和当前位置
其中:
当历史堆栈达到上限后,新的事件将会存储在最前面,而前面的事件存储,将会往后移动一格
当undo后执行新的事件,则会将前面的事件清空(因为已经偏离了之前的历史堆栈)
实现
处理历史堆栈
新建文件node_scene_history.py
它将建立历史堆栈,负责管理Scene的历史堆栈,包括储存,undo,redo等功能
DEBUG = True
class SceneHistory():
def __init__(self,scene):
self.scene = scene
self.history_stack = []
self.history_current_step = -1
self.history_limit = 8
def undo(self):
if DEBUG:
print('undo')
if self.history_current_step > 0:
self.history_current_step -= 1
self.restoreHistory()
def redo(self):
if DEBUG:
print('redo')
if self.history_current_step + 1 <