ページ

2009年8月8日土曜日

SimpleCap - 範囲選択でUndo/Redo

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

リリース後しばらくしてから気がついたのだが、範囲選択で 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が動作した。

次回リリースへ入れよう。