如何使宏“原子化”

问题描述 投票:0回答:2

IOW 如何在执行宏时使 OOo 的撤消/重做正常工作?

这与我之前的问题有关:#853176

transactions macros openoffice.org
2个回答
1
投票

您可以与 UndoManager 对话,在宏的开头调用

enterUndoContext()
,然后在宏结束时调用
leaveUndoContext()
。例如:

Dim undo As Object
undo = ThisComponent.UndoManager
undo.enterUndoContext("MyAtomicTest")
...
[YOUR COMPLEX OPERATIONS HERE]
...
undo.leaveUndoContext

这将创建一个原子撤消操作,对用户显示为“MyAtomicTest”。


1
投票

对于我们当中那些更喜欢用 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(); 
© www.soinside.com 2019 - 2024. All rights reserved.