IOW 如何在执行宏时使 OOo 的撤消/重做正常工作?
这与我之前的问题有关:#853176
您可以与 UndoManager 对话,enterUndoContext()
在宏开始时调用,然后leaveUndoContext()
在结束时调用。例如:
Dim undo As Object
undo = ThisComponent.UndoManager
undo.enterUndoContext("MyAtomicTest")
...
[YOUR COMPLEX OPERATIONS HERE]
...
undo.leaveUndoContext
这将创建一个原子撤消操作,对用户显示为“MyAtomicTest”。
对于我们当中喜欢使用 JavaScript 编写 OOo 宏的人来说,这里有一个应该可以工作的最小片段(它已经过测试,但我将这段代码从更大的上下文中分离出来):
importClass( Packages.com.sun.star.document.XUndoManager );
importClass( Packages.com.sun.star.document.XUndoManagerSupplier );
var doc = XSCRIPTCONTEXT.getDocument();
var undo_manager = UnoRuntime.queryInterface(XUndoManagerSupplier, doc).getUndoManager();
undo_manager.enterUndoContext( 'your descriptive title here' );
// get stuff done
undo_manager.leaveUndoContext();