algorithm - 哪一个是撤消/重做行为的可接受约定?

标签 algorithm user-interface user-input

假设这是一个处理波形的数学应用程序。用户打开一个波形文件,并对其进行编辑。

现在用户使用应用程序工具箱放大波形。 放大可能需要很长时间。然后他们撤消它。然后他们再次重做

对于重做,应用程序应该如何表现?

  1. 替换之前执行并由应用程序内部保存在内存中的放大结果。
  2. 再次重新运行耗时的扩增程序?

这个问题扩展到每个功能。

谢谢:-)

最佳答案

撤消-重做操作通常使用命令堆栈和最后执行的命令的位置来实现。撤消后,您将该位置向后移动一步而不删除堆栈的最后一个命令(现在是最后执行的命令之后的一个)。

是否将数据与命令一起存储由您决定。但是,在您描述的情况下,要使撤消起作用,您需要完全反转最后一个命令(您可能无法做到),或者将以前的状态保留在内存中。因此,在这种特殊情况下,在放大之后保持下一个状态不会让您付出任何代价。但是,如果用户不重做该命令,您确实需要正确丢弃它。

正如@eddiewould 在评论中指出的那样,命令本身可能具有破坏性(因此不可逆)并且允许撤消它(通过保持先前的状态)可能是不可行的,例如由于内存限制。在这种情况下,您应该事先告知用户无法返回。

关于algorithm - 哪一个是撤消/重做行为的可接受约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800388/

相关文章:

c++ - boost shared_ptr vector 成员访问

algorithm - 这个排序算法的名称是什么?

user-interface - 如何设计用于构建条件表达式的 UI?

javascript - 防止 Web 应用程序中页面之间的击键丢失

java - 如何确保用户不输入字母

python - 为什么我们必须定义变量 dp = [0] * (n+1) 只是为了将其变量设置为等于 0(在动态规划中)

java - 如何实现图形到JScrollPane?

python - 如何使 tkinter 标签的背景透明以便只能看到文本?

java - 数组不会输出数字总数

algorithm - 如何巧妙地将任意元数据编码为 UUID?