一个通用的库,用于帮助实现撤销功能。
项目描述
jundo
一个通用的库,用于帮助实现现有对象的撤销功能。
主要思想是,如果将自己限制为可以视为类似JSON的数据结构(即由字符串、数字、列表和字典组成)的对象,就可以以完全通用的方式记录更改,并使用这些记录来重建对象或撤销更改,例如实现撤销功能。
一个关键要求是模型对象必须完全与记录机制解耦,并且不需要对其有任何了解。
在这里实现的方式是通过代理对象:不是直接修改原始模型对象,而是使用模仿模型对象的代理对象,允许代理将更改信息(增量)传递给撤销管理器。
撤销管理器收集更改增量(及其逆增量),并在请求撤销或重做时将它们应用到原始模型对象。
通过undoManager.setModel(model)
将模型对象传递给撤销管理器,该函数返回模型的代理。客户端代码必须使用代理对象而不是模型来修改模型。以下是一个示例
>>> model = [1, 2, 3, {"a": 123}]
>>> um = UndoManager()
>>> proxy = um.setModel(model)
>>> # Modifications must be done within a change set context:
>>> with um.changeSet(title="replace list item"):
... proxy[1] = 2000
...
>>> model[1]
2000
>>> um.undo()
>>> model[1]
2
>>> um.redo()
>>> model[1]
2000
>>> with um.changeSet(title="replace nested dict item"):
... proxy[3]["a"] = 456
...
>>> model[3]["a"]
456
>>> um.undo()
>>> model[3]["a"]
123
在这个示例中,仅使用Python列表和字典对象作为容器,但任何类型的Mapping或Sequence(在collections.abc-sense中)都可以使用,或者任何使用属性访问来修改其模型数据的对象类型。请参阅示例文件夹以获取更详细的示例。
也支持集合。
为了支持非JSON样式的模型对象,可以通过registerUndoProxy()
函数注册自定义代理类。
致谢
项目详情
下载文件
下载适用于您平台的应用文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
jundo-0.1.2.tar.gz (15.4 kB 查看哈希值)
构建分发
jundo-0.1.2-py3-none-any.whl (10.2 kB 查看哈希值)
关闭
jundo-0.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0507d0b6692e94de03d49efe1d14b9375dbcaa05b8cb8a3d172126dc3c160929 |
|
MD5 | 8390533d31d0e2470fe4e4da18f1bf54 |
|
BLAKE2b-256 | b41e2adf78991d2167f87f26c37ecc9cffe4363d19f5af85a0508ee892077967 |
关闭
jundo-0.1.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a253206e834a8d61361f89fee685c8597e3737266dc6df9b471cd3263a95b42 |
|
MD5 | 778a0b980ecc651b967763ac1c97a82f |
|
BLAKE2b-256 | 9edf81f85aa42fdd444fda682dfa8a409678a4bfaf6f2d305636de7b13811f8c |