* 取り消しとやり直し [#nc36e5a0] Undo と Redo を制御します。この API は OOo 3.4 から利用できます。 #contents ** XUndoManager [#i5070946] ドキュメントの UndoManager にアクセスします。 Sub Undo_1 oDoc = ThisComponent oUndoManager = oDoc.getUndoManager() End Sub ** Undo を登録 [#i1ef9345] マクロなどでドキュメントを変更するときに undo コンテキストを追加して一段階でそのマクロによる変更を取り消せるようにします。 例えば、以下の例では Writer ドキュメントの一部の文字色を変更しています。二箇所変更しているため一度の取り消しでは元に戻せず、各箇所ごとに取り消しを行う必要があります。 一方、undo コンテキストを設定すると複数ヶ所の変更を一段階で取り消せるようになります。 Sub Undo_2 oDoc = ThisComponent oUndoManager = oDoc.getUndoManager() oText = oDoc.getText() oUndoManager.enterUndoContext("Undo Test") ' undo コンテキストの開始 ' なにかを行う oCursor = oText.createTextCursor() oCursor.gotoStart(False) oCursor.goRight(1, True) oCursor.CharColor = RGB(255, 0, 0) oCursor.goRight(1, False) oCursor.goRight(1, True) oCursor.CharColor = RGB(255, 0, 0) oUndoManager.leaveUndoContext() ' undo コンテキストを終了 End Sub enterUndoContext メソッドの引数に UI で表示される取り消しの説明を与えます。undo コンテキストを leaveUndoContext メソッドで終了させます。 正しくコンテキストを終了させなかった場合にはそのコンテキストは無効になります。 ** 隠し undo [#he0ebf58] UI に表示されない undo を登録します。enterHiddenUndoContext で新しいコンテキストを開始、leaveUndoContext メソッドで同じようにコンテキストを終了させます。 表示されている一番上の undo を実行したときにそれよりもスタックの上にあるときにこっそり実行されます。 ** 取り消す [#vac358da] UndoManager の undo メソッドを呼び出します。undo が行えるかどうかは isUndoPossible メソッドで判断できます。 ** やり直し [#n4a5aabf] UndoManager の redo メソッドを呼び出します。redo が行えるかどうかは isRedoPossible メソッドで判断できます。 ** タイトル [#t1a13434] 現在の undo アクションのタイトルは getCurrentUndoActionTitle メソッドで取得できます。また、全ての undo アクションのタイトルは getAllUndoActionTitles メソッドで取得できます。 現在の redo アクションのタイトルは getCurrentRedoActionTitle メソッドで取得できます。また、全ての redo アクションのタイトルは getAllRedoActionTitles メソッドで取得できます。 ** 初期化 [#la62f698] clear メソッドで現在の undo および redo スタックを空にします。 clearRedo メソッドで redo スタックのみを空にします。 reset ではロックなども削除され、スタックも初期化されます。 ** ロックについて [#w1dba85a] UndoManager をロックすると undo スタックに登録できなくなります。lock メソッドでロック、unlock メソッドでロックを解除します。isLocked メソッドでロックされているかどうかを判定できます。 ** より自由な undo/redo アクション [#u86cee5d] com.sun.star.document.XUndoAction インターフェースを addUndoAction メソッドに与えることで自由に undo/redo の内容を実行できます。 undo メソッド、redo メソッドを実装しておく必要があります。また、Title 属性も必要です。不要になった場合には UndoManager によって dispose されます。 ** undo リスナー [#bb4558fe] com.sun.star.document.XUndoManagerListener インターフェースをリスナーとして利用して UndoManager に対する操作について通知を受け取ることができます。 |