问题标签 [undo-redo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1474 浏览

c++ - C++ 撤消/重做实现中的抽象类问题

我已经定义了一个像这样的“Action”纯抽象类:

并用一个类表示用户可以执行的每个命令。

对于实际的撤消/重做,我想做这样的事情:

撤消

重做

编译器显然不接受这一点,因为“Action”是一个不能被实例化的抽象类。

那么,我必须重新设计所有东西还是有一个简单的解决方案来解决这个问题?

0 投票
1 回答
2840 浏览

jquery - 如何撤消/重做 jqueryui 中的可排序操作?

我有一个可排序的列表(jquery ui),您能否建议是否可以基于可排序实现“撤消/重做”?

想象一下,一个项目被拖到一个新的占位符上,然后我单击“撤消”按钮,该项目将移动到其原始位置。如果我单击“重做”按钮,该项目将移动到该新占位符。

也许有人知道如何做到这一点,或者别的什么。提前致谢。

0 投票
1 回答
1278 浏览

apache-flex - 在 Flex 中使用图像处理撤消、重做功能

所以我设法学习了一些 Flex 并创建了一个小应用程序:

  • 将图像加载到 Image 组件
  • 使用矩阵变换图像(旋转、翻转)
  • 应用过滤器

现在我正在考虑创建一些撤消重做功能。每次我进行转换/添加过滤器时,我都希望能够返回到上一个图像(在动作之前)。

我的想法是有一个数组并将前一个位图添加到堆栈中。但我看到转换和过滤器之间存在一些差异,我也看到了 ImageSnapshot 和我能做什么,它看起来就像我所追求的。

总的来说,我对 Flex 有点陌生,我希望这里有人可以给我任何建议,并希望能给我一些指导。

感谢您的任何建议!此致,

0 投票
1 回答
5527 浏览

wpf - WPF RichTextBox TextChanged 事件 - 如何查找已删除或插入的文本?

在使用 RichTextBox 创建自定义编辑器时,我遇到了使用 TextChanged 事件提供的信息查找已删除/插入的文本的问题。

TextChangedEventArgs的实例有一些有用的数据,但我猜它并不能满足所有需求。假设在插入多个段落的情况下,同时删除了所选文本(其本身跨越多个段落)。

使用 TextChangedEventArgs 的实例,您拥有一组文本更改,并且每次更改只为您提供已删除或添加的符号的数量及其位置。

我想到的唯一解决方案是保留文档的副本,并在其上应用给定的更改列表。但是由于 TextChange 的实例只给我们插入/删除符号的数量(而不是符号),所以我们需要在转换原始副本时放置一些特殊符号(例如,'?')来表示未知符号文档。

在对文档的原始副本应用所有更改后,我们可以将其与 Richtextbox 的更新文档进行比较,并找到未知符号与真实符号之间的映射。最后,得到我们想要的!

以前有人试过吗?我需要你对整个策略的建议,以及你对这种方法的看法。

问候

0 投票
2 回答
2171 浏览

design-patterns - 实现命令模式

我正处于应用程序的设计过程中,我想将命令模式用于撤消/重做目的。我对命令模式进行了一些研究,但唯一没有得到的是:一个命令是否应该具有撤消和重做方法,或者我应该创建两个单独的命令,一个用于撤消,一个用于重做,并从主要命令本身?

0 投票
3 回答
1382 浏览

core-data - 带有核心数据的 NSUndoManager - 重做不起作用

我有一个基于核心数据文档的应用程序,它通过与 NSManagedObjectContext 关联的内置 NSUndoManager 支持撤消/重做。我设置了一些动作,它们在 Core Data 中执行大量任务,通过beginUndoGrouping/将所有这些任务包装到一个撤消组endUndoGrouping中,并由 NSUndoManager 处理。

撤消工作正常。我可以执行几个连续的操作,然后依次撤消每一个操作,并且我的应用程序的状态得到正确维护。但是,永远不会启用“重做”菜单项。这意味着 NSUndoManager 告诉菜单没有要重做的项目。

我想知道为什么 NSUndoManager 似乎在撤消项目后会忘记它们,并且不允许重做?

我应该提到的一件事是,我在打开/创建文档后禁用撤消注册。当我执行一个动作时,我调用enableUndoRegistration, beginUndoGrouping,执行该动作,然后调用processPendingChanges, setActionName:, endUndoGrouping,最后调用disableUndoRegistration。这确保只有特定的操作是可撤消的,并且我在这些之外所做的任何其他数据更改都不会被 NSUndoManager 注意到。这可能是问题的一部分,但如果是这样,我想知道为什么它会影响重做?

提前致谢。

0 投票
1 回答
6710 浏览

iphone - 撤消/重做基本上如何在 iPhone OS 上工作?

我的应用还没有使用 Core Data。我必须使用核心数据进行撤消/重做是真的吗?

并且:用户如何进行撤消/重做?我从未见过它在行动中,也从未使用过它。如果我愿意,我不知道该怎么做。任何地方都没有撤消/重做按钮。然而他们说它有撤消/重做。那么用户如何触发呢?

0 投票
1 回答
373 浏览

java - Netbeans 编辑器如何知道撤消后文件未修改?

Netbeans 使用标准UndoManagerAPI 来实现撤消功能。但是既没有标准javax.swing.undo.UndoManagerorg.openide.awt.UndoRedo.Manager没有任何方法可以将状态标记为已保存并检查修改状态。尽管如此,如果您更改文件并按撤消,该文件将被标记为未修改。他们是怎么做到的?如果是 Netbeans RCP 应用程序,我的(非文本)编辑器需要相同的功能。

0 投票
15 回答
16629 浏览

cocoa-touch - 如何像 iPad 应用程序上常见的撤消/重做 UIPopoverController 方案一样将 UIGestureRecognizer 添加到 UIBarButtonItem?

问题

在我的 iPad 应用程序中,我无法在按住事件后将弹出框附加到按钮栏项目。但这似乎是撤消/重做的标准。其他应用程序如何做到这一点?

背景

我的 UIKit (iPad) 应用程序的工具栏中有一个撤消按钮 (UIBarButtonSystemItemUndo)。当我按下撤消按钮时,它会触发撤消操作:并且正确执行。

但是,iPad 上撤消/重做的“标准 UE 约定”是按下撤消执行撤消,但按住按钮会显示一个弹出控制器,其中用户选择“撤消”或“重做”,直到控制器被解除。

附加弹出框控制器的常规方法是使用 presentPopoverFromBarButtonItem:,我可以很容易地配置它。为了让它仅在按住后显示,我们必须设置一个视图来响应“长按”手势事件,如以下代码段所示:

这样,在按住视图后,将调用方法 handleLongPressOnUndoGesture:,在此方法中,我将配置并显示用于撤消/重做的弹出框。到目前为止,一切都很好。

这样做的问题是没有可附加的视图。self.undoButtonItem 是 UIButtonBarItem,而不是视图。

可能的解决方案

1) [理想]将手势识别器附加到按钮栏项目。可以将手势识别器附加到视图,但 UIButtonBarItem 不是视图。它确实具有 .customView 的属性,但是当 buttonbaritem 是标准系统类型(在本例中是)时,该属性为 nil。

2)使用另一个视图。我可以使用 UIToolbar 但这将需要一些奇怪的命中测试并且是一个全方位的黑客,如果可能的话。我想不出其他可以使用的替代视图。

3)使用 customView 属性。像 UIBarButtonSystemItemUndo 这样的标准类型没有 customView(它是 nil)。设置 customView 将删除它需要的标准内容。这相当于重新实现 UIBarButtonSystemItemUndo 的所有外观和功能,如果可能的话。

问题

如何将手势识别器附加到此“按钮”?更具体地说,如何在 iPad 应用程序中实现标准的按住以显示重做弹出窗口?

想法?非常感谢你,特别是如果有人真的在他们的应用程序中有这个工作(我在想你,omni)并且想要分享......

0 投票
1 回答
619 浏览

java - 在 MVC 中实现撤消/重做

我有一个 Java 应用程序,我想实现一个撤消/重做选项。我想要存储并且我想要能够恢复的值是一个整数。

我的类Model实现了接口StateEditable,我必须重新定义这两个函数restoreState(Hashtable<?, ?> state)storeState(Hashtable<Object, Object> state)但我不知道该放什么。如果有人可以帮助我做到这一点,那就太好了。这些是我Model班级的第一行,我想要对其进行撤消/重做的值是value