リリース後しばらくしてから気がついたのだが、範囲選択で Undo/Redoが効かない。作っていた当時は通常のアプリ同様に cmd+Z が自動的にハンドリングされて Undo/Redo が働いていたようだが、作っている過程でいつのまにかこれが動かなくなっていた。
範囲選択の Undo/Redoの仕組みは当初から入っており Undoマネージャーへの登録等は既に実装されている。
(参考)Cocoaの日々の Undo記事
rubberBand(その19)Undoの実装 / NSUndoManager
とりあえず範囲選択ビューの keyDown: に cmd+Zを加えてみた。こんな感じ。
- (void)keyDown:(NSEvent *)theEvent
{
:
switch ([theEvent keyCode]) {
case 6:
// command + z
if (command_flag) {
CaptureView* view = [_capture_controller view];
NSUndoManager* undoManager = [view undoManager];
if (shift_flag) {
[undoManager redo];
} else {
[undoManager undo];
}
}
break;
:
}
ビューが管理している NSUndoManager には既に Undo/Redoに必要な手続きが各操作毎に登録されているので、ここでは undo / redo のメソッドを呼出すだけで良い。
動かしてみよう。
(画像じゃわからないが)Undo/Redoが動作した。
次回リリースへ入れよう。