[Mac] NSArrayController に Undo/Redo を実装する [5] 選択のUndo/Redo

2011年1月3日月曜日 | Published in | 0 コメント

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

[前回] Cocoaの日々: [Mac] NSArrayController に Undo/Redo を実装する [4] 初期値ありの場合

選択状態も Undo/Redo してみる。

選択状態の Undo/Redo


NSArrayController の選択に関係するメソッドをすべてオーバーライドしてやる。
- (void)_registSelectionToUndo
{
    [[self.undoManagerprepareWithInvocationTarget:self]
      setSelectionIndexes:[selfselectionIndexes]];

}
- (BOOL)setSelectionIndex:(NSUInteger)index
{
    BOOL result = [supersetSelectionIndex:index];
    if (result) {
        [self_registSelectionToUndo];
    }
    return result;
}

- (BOOL)setSelectionIndexes:(NSIndexSet *)indexes
{
    BOOL result =  [supersetSelectionIndexes:indexes];
    if (result) {
        [self_registSelectionToUndo];
    }
    return result;
}

- (BOOL)setSelectedObjects:(NSArray *)objects
{
    BOOL result =  [supersetSelectedObjects:objects];
    if (result) {
    [self_registSelectionToUndo];
    }
    return result;
}

- (BOOL)addSelectedObjects:(NSArray *)objects
{
    BOOL result = [superaddSelectedObjects:objects];
    if (result) {
        [self_registSelectionToUndo];
    }
    return result;
}

- (void)selectPrevious:(id)sender
{
    if ([selfcanSelectPrevious]) {
        [self_registSelectionToUndo];
    }
    [superselectPrevious:sender];
}

- (void)selectNext:(id)sender
{
    if ([selfcanSelectNext]) {
        [self_registSelectionToUndo];
    }
    [superselectNext:sender];
}

できた(画像じゃわかりずらいが)

ソースコード


GitHubからどうぞ。

ArrayControllerUndoSample at 2011-01-03 from xcatsan/MacOSX-Sample-Code - GitHub

Responses

Leave a Response

人気の投稿(過去 30日間)