@@ -17,6 +17,8 @@ @interface PBGitIndexController ()
17
17
- (void )discardChangesForFiles : (NSArray *)files force : (BOOL )force ;
18
18
@end
19
19
20
+ // FIXME: This isn't a view/window/whatever controller, though it acts like one...
21
+ // See for example -menuForTable and its setTarget: calls.
20
22
@implementation PBGitIndexController
21
23
22
24
- (void )awakeFromNib
@@ -99,35 +101,30 @@ - (NSMenu *) menuForTable:(NSTableView *)table
99
101
if ([table tag ] == 0 ) {
100
102
NSMenuItem *stageItem = [[NSMenuItem alloc ] initWithTitle: @" Stage Changes" action: @selector (stageFilesAction: ) keyEquivalent: @" s" ];
101
103
[stageItem setTarget: self ];
102
- [stageItem setRepresentedObject: selectedFiles];
103
104
[menu addItem: stageItem];
104
105
}
105
106
else if ([table tag ] == 1 ) {
106
107
NSMenuItem *unstageItem = [[NSMenuItem alloc ] initWithTitle: @" Unstage Changes" action: @selector (unstageFilesAction: ) keyEquivalent: @" u" ];
107
108
[unstageItem setTarget: self ];
108
- [unstageItem setRepresentedObject: selectedFiles];
109
109
[menu addItem: unstageItem];
110
110
}
111
111
112
112
NSString *title = [selectedFiles count ] == 1 ? @" Open file" : @" Open files" ;
113
113
NSMenuItem *openItem = [[NSMenuItem alloc ] initWithTitle: title action: @selector (openFilesAction: ) keyEquivalent: @" " ];
114
- [openItem setTarget: self ];
115
- [openItem setRepresentedObject: selectedFiles];
114
+ [openItem setTarget: commitController.repository];
116
115
[menu addItem: openItem];
117
116
118
117
// Attempt to ignore
119
118
if ([self allSelectedCanBeIgnored: selectedFiles]) {
120
119
NSString *ignoreText = [selectedFiles count ] == 1 ? @" Ignore File" : @" Ignore Files" ;
121
120
NSMenuItem *ignoreItem = [[NSMenuItem alloc ] initWithTitle: ignoreText action: @selector (ignoreFilesAction: ) keyEquivalent: @" " ];
122
121
[ignoreItem setTarget: self ];
123
- [ignoreItem setRepresentedObject: selectedFiles];
124
122
[menu addItem: ignoreItem];
125
123
}
126
124
127
125
if ([selectedFiles count ] == 1 ) {
128
126
NSMenuItem *showInFinderItem = [[NSMenuItem alloc ] initWithTitle: @" Show in Finder" action: @selector (showInFinderAction: ) keyEquivalent: @" " ];
129
- [showInFinderItem setTarget: self ];
130
- [showInFinderItem setRepresentedObject: selectedFiles];
127
+ [showInFinderItem setTarget: commitController.repository];
131
128
[menu addItem: showInFinderItem];
132
129
}
133
130
@@ -140,52 +137,63 @@ - (NSMenu *) menuForTable:(NSTableView *)table
140
137
break ;
141
138
}
142
139
}
143
- if (!addDiscardMenu)
144
- {
145
- return menu;
146
- }
147
140
148
- NSMenuItem *discardItem = [[NSMenuItem alloc ] initWithTitle: @" Discard changes…" action: @selector (discardFilesAction: ) keyEquivalent: @" " ];
149
- [discardItem setTarget: self ];
150
- [discardItem setAlternate: NO ];
151
- [discardItem setRepresentedObject: selectedFiles];
141
+ if (addDiscardMenu)
142
+ {
143
+ NSMenuItem *discardItem = [[NSMenuItem alloc ] initWithTitle: @" Discard changes…" action: @selector (discardFilesAction: ) keyEquivalent: @" " ];
144
+ [discardItem setAlternate: NO ];
145
+ [discardItem setTarget: self ];
152
146
153
- [menu addItem: discardItem];
147
+ [menu addItem: discardItem];
154
148
155
- NSMenuItem *discardForceItem = [[NSMenuItem alloc ] initWithTitle: @" Discard changes" action: @selector (forceDiscardFilesAction: ) keyEquivalent: @" " ];
156
- [discardForceItem setTarget: self ];
157
- [discardForceItem setAlternate: YES ];
158
- [discardForceItem setRepresentedObject: selectedFiles];
159
- [discardForceItem setKeyEquivalentModifierMask: NSAlternateKeyMask ];
160
- [menu addItem: discardForceItem];
161
-
162
- BOOL trashInsteadOfDiscard = floor (NSAppKitVersionNumber ) > NSAppKitVersionNumber10_7 ;
163
- if (trashInsteadOfDiscard)
164
- {
165
- for (PBChangedFile* file in selectedFiles)
166
- {
167
- if (file.status != NEW)
168
- {
169
- trashInsteadOfDiscard = NO ;
170
- break ;
171
- }
172
- }
173
- }
174
-
175
- if (trashInsteadOfDiscard && [selectedFiles count ] > 0 )
176
- {
177
- NSMenuItem * moveToTrashItem = [[NSMenuItem alloc ] initWithTitle: @" Move to Trash" action: @selector (moveToTrashAction: ) keyEquivalent: @" " ];
178
- [moveToTrashItem setTarget: self ];
179
- [moveToTrashItem setRepresentedObject: selectedFiles];
180
- [menu addItem: moveToTrashItem];
181
-
182
- [menu removeItem: discardItem];
183
- [menu removeItem: discardForceItem];
184
- }
149
+ NSMenuItem *discardForceItem = [[NSMenuItem alloc ] initWithTitle: @" Discard changes" action: @selector (forceDiscardFilesAction: ) keyEquivalent: @" " ];
150
+ [discardForceItem setAlternate: YES ];
151
+ [discardForceItem setKeyEquivalentModifierMask: NSAlternateKeyMask ];
152
+ [discardForceItem setTarget: self ];
153
+ [menu addItem: discardForceItem];
185
154
155
+ BOOL trashInsteadOfDiscard = floor (NSAppKitVersionNumber ) > NSAppKitVersionNumber10_7 ;
156
+ if (trashInsteadOfDiscard)
157
+ {
158
+ for (PBChangedFile* file in selectedFiles)
159
+ {
160
+ if (file.status != NEW)
161
+ {
162
+ trashInsteadOfDiscard = NO ;
163
+ break ;
164
+ }
165
+ }
166
+ }
167
+
168
+ if (trashInsteadOfDiscard && [selectedFiles count ] > 0 )
169
+ {
170
+ NSMenuItem * moveToTrashItem = [[NSMenuItem alloc ] initWithTitle: @" Move to Trash" action: @selector (moveToTrashAction: ) keyEquivalent: @" " ];
171
+ [moveToTrashItem setTarget: self ];
172
+ [menu addItem: moveToTrashItem];
173
+
174
+ [menu removeItem: discardItem];
175
+ [menu removeItem: discardForceItem];
176
+ }
177
+ }
178
+
179
+ for (NSMenuItem *item in [menu itemArray ]) {
180
+ [item setRepresentedObject: selectedFiles];
181
+ }
182
+
186
183
return menu;
187
184
}
188
185
186
+ - (BOOL )validateMenuItem : (NSMenuItem *)menuItem
187
+ {
188
+ if ([self respondsToSelector: [menuItem action ]])
189
+ return YES ;
190
+
191
+ if ([commitController respondsToSelector: [menuItem action ]])
192
+ return YES ;
193
+
194
+ return [[commitController nextResponder ] validateMenuItem: menuItem];
195
+ }
196
+
189
197
- (void ) stageSelectedFiles
190
198
{
191
199
[commitController.index stageFiles: [unstagedFilesController selectedObjects ]];
@@ -207,14 +215,6 @@ - (void) unstageFilesAction:(id) sender
207
215
[commitController.index unstageFiles: [sender representedObject ]];
208
216
}
209
217
210
- - (void ) openFilesAction : (id ) sender
211
- {
212
- NSArray *files = [sender representedObject ];
213
- NSURL *workingDirectoryURL = commitController.repository .workingDirectoryURL ;
214
- for (PBChangedFile *file in files)
215
- [[NSWorkspace sharedWorkspace ] openURL: [workingDirectoryURL URLByAppendingPathComponent: [file path ]]];
216
- }
217
-
218
218
- (void ) ignoreFilesAction : (id ) sender
219
219
{
220
220
NSArray *selectedFiles = [sender representedObject ];
@@ -239,17 +239,6 @@ - (void)forceDiscardFilesAction:(id) sender
239
239
[self discardChangesForFiles: selectedFiles force: TRUE ];
240
240
}
241
241
242
- - (void ) showInFinderAction : (id ) sender
243
- {
244
- NSArray *selectedFiles = [sender representedObject ];
245
- if ([selectedFiles count ] == 0 )
246
- return ;
247
- NSURL *workingDirectoryURL = commitController.repository .workingDirectoryURL ;
248
- NSURL *filePath = [workingDirectoryURL URLByAppendingPathComponent: [[selectedFiles objectAtIndex: 0 ] path ]];
249
-
250
- [[NSWorkspace sharedWorkspace ] activateFileViewerSelectingURLs: @[filePath]];
251
- }
252
-
253
242
- (void )moveToTrashAction : (id )sender
254
243
{
255
244
NSArray *selectedFiles = [sender representedObject ];
0 commit comments