导航
目标
本章将实现以下功能
- 当鼠标选中Node或者Edge时,将记录历史
- 当Edge或者Node被删除时,记录历史
- 当Node被移动的时候,记录历史
- crlt + z为undo
- shift + crlt + z为redo
实现
本章主角–历史戳的建立
为了实现能够保存历史,redo,undo,就必须建立一个东西来负责储存历史,redo和undo去读取已经存储的历史,即我们需要建立一个历史戳
也就是createHistoryStamp负责处理并返回的东西
def createHistoryStamp(self,desc):
sel_obj = {
'nodes': [],
'edges': [],
}
for item in self.scene.grScene.selectedItems():
if hasattr(item, 'node'):
sel_obj['nodes'].append(item.node.id)
elif isinstance(item, QDMGraphicsEdge):
sel_obj['edges'].append(item.edge.id)
history_stamp = {
'desc': desc,
'snapshot': self.scene.serialize(),
'selection': sel_obj,
}
return history_stamp
其中,使用
sel_obj = {
'nodes': [],
'edges': []