代码之家  ›  专栏  ›  技术社区  ›  cadrian

如何使宏“原子化”

  •  0
  • cadrian  · 技术社区  · 15 年前

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

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

    4 回复  |  直到 7 年前
        1
  •  1
  •   Kaloian Doganov    12 年前

    你可以打电话给UndoManager enterUndoContext() 在宏的最开始,然后 leaveUndoContext() 最后。例如:

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

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

        2
  •  1
  •   cadrian    11 年前

    对于那些喜欢用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();