GitX 0.6.1
[GitX.git] / PBWebChangesController.m
blob1e2dd0d32e0aaea66ac07825053ba74eaa940d05
1 //
2 //  PBWebChangesController.m
3 //  GitX
4 //
5 //  Created by Pieter de Bie on 22-09-08.
6 //  Copyright 2008 __MyCompanyName__. All rights reserved.
7 //
9 #import "PBWebChangesController.h"
10 #import "PBGitIndexController.h"
12 @implementation PBWebChangesController
14 - (void) awakeFromNib
16         selectedFile = nil;
17         selectedFileIsCached = NO;
19         startFile = @"commit";
20         [super awakeFromNib];
22         [unstagedFilesController addObserver:self forKeyPath:@"selection" options:0 context:@"UnstagedFileSelected"];
23         [cachedFilesController addObserver:self forKeyPath:@"selection" options:0 context:@"cachedFileSelected"];
26 - (void) didLoad
28         [[self script] setValue:indexController forKey:@"IndexController"];
29         [self refresh];
32 - (BOOL) amend
34         return controller.amend;
37 - (void)observeValueForKeyPath:(NSString *)keyPath
38                                           ofObject:(id)object
39                                                 change:(NSDictionary *)change
40                                            context:(void *)context
42         NSArrayController *otherController;
43         otherController = object == unstagedFilesController ? cachedFilesController : unstagedFilesController;
44         int count = [[object selectedObjects] count];
45         if (count == 0) {
46                 if([[otherController selectedObjects] count] == 0 && selectedFile) {
47                         selectedFile = nil;
48                         selectedFileIsCached = NO;
49                         [self refresh];
50                 }
51                 return;
52         }
54         // TODO: Move this to commitcontroller
55         [otherController setSelectionIndexes:[NSIndexSet indexSet]];
57         if (count > 1) {
58                 [self showMultiple: [object selectedObjects]];
59                 return;
60         }
62         selectedFile = [[object selectedObjects] objectAtIndex:0];
63         selectedFileIsCached = object == cachedFilesController;
65         [self refresh];
68 - (void) showMultiple: (NSArray *)objects
70         [[self script] callWebScriptMethod:@"showMultipleFilesSelection" withArguments:[NSArray arrayWithObject:objects]];
73 - (void) refresh
75         if (!finishedLoading)
76                 return;
78         id script = [view windowScriptObject];
79         [script callWebScriptMethod:@"showFileChanges"
80                       withArguments:[NSArray arrayWithObjects:selectedFile ?: (id)[NSNull null],
81                                      [NSNumber numberWithBool:selectedFileIsCached], nil]];
84 - (void) stageHunk:(NSString *)hunk reverse:(BOOL)reverse
86         [controller stageHunk: hunk reverse:reverse];
87         [self refresh];
90 - (void) setStateMessage:(NSString *)state
92         id script = [view windowScriptObject];
93         [script callWebScriptMethod:@"setState" withArguments: [NSArray arrayWithObject:state]];
96 - (void) setContextSize:(int)size
98         if (size == indexController.contextSize)
99                 return;
101         indexController.contextSize = size;
102         [self refresh];
104 @end