Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 449 lines (353 sloc) 13.393 kB
53ccafd @fileability int main(void)
fileability authored
1 //
2 // IGKArrayController.m
3 // Ingredients
4 //
5 // Created by Alex Gordon on 13/02/2010.
f109712 @fileability Adjusted things
fileability authored
6 // Written in 2010 by Fileability.
53ccafd @fileability int main(void)
fileability authored
7 //
8
9 #import "IGKArrayController.h"
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
10 #import "Ingredients_AppDelegate.h"
564e010 @fileability More cool stuff
fileability authored
11 #import "IGKDocRecordManagedObject.h"
280d9f9 @fileability Big improvements in startup time
fileability authored
12 #import "FUCoreDataStore.h"
13
9353eac @fileability Horrible horrible buggy horrible horrible implementation of tabs
fileability authored
14 //#import "IGKApplicationDelegate.h"
15 @class IGKApplicationDelegate;
a36ea6a @fileability Now lets you search inside files and will cut your hair
fileability authored
16 const NSTimeInterval timeoutInterval = 0.15;
17
53ccafd @fileability int main(void)
fileability authored
18 @implementation IGKArrayController
19
20 @synthesize predicate;
280d9f9 @fileability Big improvements in startup time
fileability authored
21 @synthesize predicateString;
22 @synthesize predicateParameters;
564e010 @fileability More cool stuff
fileability authored
23 @synthesize smartSortDescriptors;
24 @synthesize currentSortDescriptors;
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
25 @synthesize maxRows;
26 @synthesize vipObject;
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
27 @synthesize entityToFetch;
53ccafd @fileability int main(void)
fileability authored
28
29 - (void)awakeFromNib
30 {
31 [tableView setDataSource:self];
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
32 entityToFetch = @"DocRecord";
53ccafd @fileability int main(void)
fileability authored
33 }
34
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
35 - (void)fetch:(void (^)(NSArray *managedObjectIDs, BOOL fetchContainsVip))completionBlock
4000c2e @fileability Beta 3!
fileability authored
36 {
280d9f9 @fileability Big improvements in startup time
fileability authored
37 if (!predicate && (!predicateString || !predicateParameters))
564e010 @fileability More cool stuff
fileability authored
38 return;
39
40 if (!currentSortDescriptors)
41 currentSortDescriptors = smartSortDescriptors;
42
53ccafd @fileability int main(void)
fileability authored
43 NSManagedObjectContext *ctx = [[[NSApp delegate] kitController] managedObjectContext];
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
44 dispatch_queue_t queue = [[[NSApp delegate] kitController] backgroundQueue];
564e010 @fileability More cool stuff
fileability authored
45
6eca8c8 @fileability its been so many weeks I cant remember
fileability authored
46 if (!queue)
47 return;
48
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
49 //Copy objects that may change while we're doing this
50 NSPredicate *copiedPredicate = [predicate copy];
51 NSArray *copiedCurrentSortDescriptors = [currentSortDescriptors copy];
280d9f9 @fileability Big improvements in startup time
fileability authored
52 id vipObjectID = (predicateString && predicateParameters && !predicate) ? [vipObject objectID] : [vipObject valueForKey:@"_pk"];
6eca8c8 @fileability its been so many weeks I cant remember
fileability authored
53
a36ea6a @fileability Now lets you search inside files and will cut your hair
fileability authored
54 isSearching = YES;
55 startedSearchTimeInterval = [NSDate timeIntervalSinceReferenceDate];
56 [self performSelector:@selector(doTimeout) withObject:nil afterDelay:timeoutInterval];
57
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
58 dispatch_async(queue, ^{
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
59
280d9f9 @fileability Big improvements in startup time
fileability authored
60 if (predicateString && predicateParameters && !predicate)
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
61 {
280d9f9 @fileability Big improvements in startup time
fileability authored
62
63 int limit = maxRows > 0 && maxRows < 500 ? maxRows : 500;
64 NSString *sqlq = [NSString stringWithFormat:@"SELECT * FROM ZDOCRECORD %@ ORDER BY ZPRIORITY LIMIT %d", predicateString, limit];
65 id fu = [ctx fffffffuuuuuuuuuuuu];
66
67 // Replace predicateString with a WHERE clause and predicateParameters with the values of the ? placeholders in it
68 FMResultSet *rset = [[fu database] executeQuery:sqlq withArgumentsInArray:predicateParameters];
69 id objects = [fu magicObjectsForResultSet:rset];
70 [rset close];
71
72
73 BOOL containsVIP = NO;
74 for (NSManagedObject *obj in objects)
75 {
76 if (!containsVIP && [vipObjectID isEqual:[obj valueForKey:@"_pk"]])
77 containsVIP = YES;
78 }
79
80 dispatch_async(dispatch_get_main_queue(), ^{
75f276d @fileability Changed licence to something more suitable.
fileability authored
81
280d9f9 @fileability Big improvements in startup time
fileability authored
82 isSearching = NO;
83
84 if ([delegate respondsToSelector:@selector(arrayControllerFinishedSearching:)])
85 [delegate arrayControllerFinishedSearching:self];
86
87 completionBlock(objects, containsVIP);
88 });
89 }
90 else
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
91 {
397bc9c @fileability Added preferences
fileability authored
92
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
93
280d9f9 @fileability Big improvements in startup time
fileability authored
94 NSFetchRequest *request = [[NSFetchRequest alloc] init];
95 [request setEntity:[NSEntityDescription entityForName:entityToFetch inManagedObjectContext:ctx]];
96 [request setPredicate:copiedPredicate];
97
98 [request setFetchLimit:500];
99 if (maxRows != 0 && maxRows < 500)
100 {
101 //Limit the list to 100 items. This could be changed to more, if requested, but my view is that if anybody needs more than 100, our sorting isn't smart enough
102 [request setFetchLimit:maxRows];
103 }
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
104
280d9f9 @fileability Big improvements in startup time
fileability authored
105 //Sort results by priority, so that when we LIMIT our list, only the low priority items are cut
106 [request setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"priority" ascending:NO]]];
a36ea6a @fileability Now lets you search inside files and will cut your hair
fileability authored
107
280d9f9 @fileability Big improvements in startup time
fileability authored
108
109
110 //Fetch a list of objects
111 NSArray *objects = [ctx executeFetchRequest:request error:nil];
112
113 //NSFetchRequests and NSComparator-based sort descriptors apparently don't go together, so we can't tell the fetch request to sort using this descriptor
114 //Besides, it's far better to be sorting 100 objects with our expensive comparator than 10000
115 objects = [objects smartSort:[delegate sideSearchQuery]];
116 //objects = [objects sortedArrayUsingDescriptors:copiedCurrentSortDescriptors];
117
118 BOOL containsVIP = NO;
119
120 //Put the object IDs into an array
121 NSMutableArray *objectIDs = [[NSMutableArray alloc] initWithCapacity:[objects count]];
122 for (NSManagedObject *obj in objects)
123 {
124 id objid = [obj objectID];
125 [objectIDs addObject:objid];
126
127 if (!containsVIP && [vipObjectID isEqual:objid])
128 containsVIP = YES;
129 }
130
131 //Run the completion block on the main thread
132 dispatch_async(dispatch_get_main_queue(), ^{
133
134 isSearching = NO;
135
136 if ([delegate respondsToSelector:@selector(arrayControllerFinishedSearching:)])
137 [delegate arrayControllerFinishedSearching:self];
138
139 completionBlock(objectIDs, containsVIP);
140 });
141
142 }
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
143 });
53ccafd @fileability int main(void)
fileability authored
144 }
145 - (void)refresh
146 {
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
147 [self refreshAndSelectIndex:0 renderSelection:YES];
148 }
149
a36ea6a @fileability Now lets you search inside files and will cut your hair
fileability authored
150 - (void)doTimeout
151 {
152 if (!isSearching)
153 return;
154 if (startedSearchTimeInterval + timeoutInterval >= [NSDate timeIntervalSinceReferenceDate])
155 return;
156
157 if ([delegate respondsToSelector:@selector(arrayControllerTimedOut:)])
158 [delegate arrayControllerTimedOut:self];
159 }
160
161
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
162 //This method is PRIVATE!
163 - (void)fetchFromRefresh:(NSManagedObjectContext *)ctx managedObjectIDs:(NSArray *)managedObjectIDs fetchContainsVip:(BOOL)fetchContainsVip
164 {
165 fetchContainsVipObject = fetchContainsVip;
166
167 fetchedObjects = [[NSMutableArray alloc] initWithCapacity:[managedObjectIDs count]];
280d9f9 @fileability Big improvements in startup time
fileability authored
168
169 if (predicateString && predicateParameters && !predicate)
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
170 {
280d9f9 @fileability Big improvements in startup time
fileability authored
171 //If we have a predicate string, then the managed object ids are actually FUCoreDataMagicObjects
172 [fetchedObjects addObjectsFromArray:managedObjectIDs];
173 }
174 else
175 {
176 for (NSManagedObjectID *objID in managedObjectIDs)
177 {
178 [fetchedObjects addObject:[ctx objectWithID:objID]];
179 }
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
180 }
181
182 [tableView reloadData];
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
183 }
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
184
185 - (void)refreshAndSelectObject:(IGKDocRecordManagedObject *)obj renderSelection:(BOOL)renderSelection
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
186 {
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
187 NSManagedObjectContext *ctx = [[[NSApp delegate] kitController] managedObjectContext];
7f2f488 @fileability #include <stdio.h>
fileability authored
188
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
189 //Fetch a new list of objects and refresh the table
190 [self fetch:^ (NSArray *managedObjectIDs, BOOL fetchContainsVip) {
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
191 [self fetchFromRefresh:ctx managedObjectIDs:managedObjectIDs fetchContainsVip:fetchContainsVip];
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
192
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
193 if (obj)
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
194 {
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
195 NSUInteger ind = [fetchedObjects indexOfObject:obj];
196 if (ind != NSNotFound)
197 {
198 //Select the first row, scroll to it, and notify the delegate
199 [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:ind] byExtendingSelection:NO];;
200 [tableView scrollRowToVisible:ind];
201
202 if (renderSelection)
203 [[tableView delegate] tableViewSelectionDidChange:[NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:tableView]];
204 }
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
205 }
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
206 }];
207 }
208 - (void)refreshAndSelectIndex:(NSInteger)idx renderSelection:(BOOL)renderSelection
209 {
210 NSManagedObjectContext *ctx = [[[NSApp delegate] kitController] managedObjectContext];
211
212 //Fetch a new list of objects and refresh the table
213 [self fetch:^(NSArray *managedObjectIDs, BOOL fetchContainsVip) {
214 [self fetchFromRefresh:ctx managedObjectIDs:managedObjectIDs fetchContainsVip:fetchContainsVip];
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
215
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
216 if (idx != -1)
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
217 {
218 //Select the first row, scroll to it, and notify the delegate
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
219 [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:idx] byExtendingSelection:NO];;
220 [tableView scrollRowToVisible:idx];
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
221
222 if (renderSelection)
a1d9659 @fileability More work on indexing
fileability authored
223 [[tableView delegate] tableViewSelectionDidChange:[NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:tableView]];
463d0bd @fileability It has emerged, that I am an idiot. More on this later, but first...
fileability authored
224 }
225 }];
53ccafd @fileability int main(void)
fileability authored
226 }
227
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
228 - (BOOL)canSelectPrevious
53ccafd @fileability int main(void)
fileability authored
229 {
230 NSInteger row = [tableView selectedRow] - 1;
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
231 return !(row < 0 || row >= [fetchedObjects count]);
232 }
233 - (IBAction)selectPrevious:(id)sender
234 {
235 if (![self canSelectPrevious])
53ccafd @fileability int main(void)
fileability authored
236 return;
237
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
238 NSInteger row = [tableView selectedRow] - 1;
239
53ccafd @fileability int main(void)
fileability authored
240 [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
7f2f488 @fileability #include <stdio.h>
fileability authored
241 [tableView scrollRowToVisible:row];
242
243 [[tableView delegate] tableViewSelectionDidChange:nil];
53ccafd @fileability int main(void)
fileability authored
244 }
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
245
246 - (BOOL)canSelectNext
53ccafd @fileability int main(void)
fileability authored
247 {
248 NSInteger row = [tableView selectedRow] + 1;
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
249 return !(row < 0 || row >= [self numberOfRowsInTableView:tableView]);
250 }
251 - (IBAction)selectNext:(id)sender
252 {
253 if (![self canSelectNext])
53ccafd @fileability int main(void)
fileability authored
254 return;
255
26605ba @fileability Fuuucckkk you dolphin and fuuuuckkk you Xcode
fileability authored
256 NSInteger row = [tableView selectedRow] + 1;
257
53ccafd @fileability int main(void)
fileability authored
258 [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
7f2f488 @fileability #include <stdio.h>
fileability authored
259 [tableView scrollRowToVisible:row];
260
261 [[tableView delegate] tableViewSelectionDidChange:nil];
262 }
263
264 - (id)objectAtRow:(NSInteger)row
265 {
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
266 if (row < 0 || row >= [self numberOfRowsInTableView:tableView])
7f2f488 @fileability #include <stdio.h>
fileability authored
267 return nil;
268
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
269 if (vipObject && !fetchContainsVipObject)
270 {
271 if (row == 0)
272 return vipObject;
273
274 return [fetchedObjects objectAtIndex:row - 1];
275 }
276 else
277 return [fetchedObjects objectAtIndex:row];
53ccafd @fileability int main(void)
fileability authored
278 }
279
280 - (id)selection
281 {
282 NSInteger row = [tableView selectedRow];
283
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
284 if (row < 0 || row >= [self numberOfRowsInTableView:tableView])
53ccafd @fileability int main(void)
fileability authored
285 return nil;
286
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
287 if (vipObject && !fetchContainsVipObject)
288 {
289 if (row == 0)
290 return vipObject;
291
292 return [fetchedObjects objectAtIndex:row - 1];
293 }
294 else
295 return [fetchedObjects objectAtIndex:row];
53ccafd @fileability int main(void)
fileability authored
296 }
297
564e010 @fileability More cool stuff
fileability authored
298 - (void)tableView:(NSTableView *)tv sortDescriptorsDidChange:(NSArray *)oldDescriptors
65399e3 @fileability Fixed several bugs
fileability authored
299 {
564e010 @fileability More cool stuff
fileability authored
300 currentSortDescriptors = [tableView sortDescriptors];
65399e3 @fileability Fixed several bugs
fileability authored
301 NSArray *generatedSortDescriptors = [currentSortDescriptors copy];
302
564e010 @fileability More cool stuff
fileability authored
303 if (![currentSortDescriptors count])
304 {
305 currentSortDescriptors = smartSortDescriptors;
306 }
307 else
308 {
309 id firstObject = [currentSortDescriptors objectAtIndex:0];
310 id newSortDescriptor = firstObject;
311
312 if ([[firstObject key] isEqual:@"xentity"])
313 {
314 newSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:[firstObject ascending] comparator:^ NSComparisonResult (id obja, id objb) {
315
316 //So neither a nor b starts with q. Now we apply prioritization. Some types get priority over others. For instance, a class > method > typedef > constant
317 NSUInteger objaPriority = [[obja valueForKey:@"priority"] shortValue];
318 NSUInteger objbPriority = [[objb valueForKey:@"priority"] shortValue];
319
320 //Higher priorities are better
321 if (objaPriority > objbPriority)
322 return NSOrderedAscending;
323 else if (objaPriority < objbPriority)
324 return NSOrderedDescending;
325
326 //If the have the same priority, just compare the names of their entities (this is arbitrary, we just want to make sure there isn't an enum between two structs)
327 return [[[obja entity] name] localizedCompare:[[objb entity] name]];
328 }];
329 }
330 else if ([[firstObject key] isEqual:@"xcontainername"])
331 {
332 BOOL isAsc = [firstObject ascending];
333 newSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES comparator:^ NSComparisonResult (id obja, id objb) {
334 id a = [obja xcontainername];
335 id b = [objb xcontainername];
336
337 BOOL hasA = ([a length] != 0);
338 BOOL hasB = ([b length] != 0);
339
340 if (hasA == hasB)
341 {
342 NSComparisonResult r = [a localizedCompare:b];
343 if (isAsc)
344 return r;
345
346 //If this is a descending sort, then invert the result of the comparison
347 //We do this instead of using the ascending: option because items with an empty container name should always appear at the bottom, regardless of sort direction
348 if (r == NSOrderedAscending)
349 return NSOrderedDescending;
350
351 if (r == NSOrderedDescending)
352 return NSOrderedAscending;
353
354 return NSOrderedSame;
355 }
356 else if (hasA && !hasB)
357 {
358 return NSOrderedAscending;
359 }
360
361 return NSOrderedDescending;
362 }];
363 }
364
365 currentSortDescriptors = [NSArray arrayWithObject:newSortDescriptor];
366 }
367
368 [self refresh];
65399e3 @fileability Fixed several bugs
fileability authored
369
370
371 NSSortDescriptor *desc = [generatedSortDescriptors count] ? [generatedSortDescriptors objectAtIndex:0] : nil;
372 for (NSTableColumn *column in [tableView tableColumns])
373 {
374 NSImage *image = nil;
375
376 if ([[desc key] isEqual:[column identifier]])
377 {
378 if ([desc ascending])
379 image = [NSImage imageNamed:@"NSAscendingSortIndicator"];
380 else
381 image = [NSImage imageNamed:@"NSDescendingSortIndicator"];
382 }
383
384 [tableView setIndicatorImage:image inTableColumn:column];
385 }
564e010 @fileability More cool stuff
fileability authored
386 }
387
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
388 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tv
53ccafd @fileability int main(void)
fileability authored
389 {
397bc9c @fileability Added preferences
fileability authored
390 return [fetchedObjects count] + ((vipObject && !fetchContainsVipObject) ? 1 : 0);
53ccafd @fileability int main(void)
fileability authored
391 }
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
392 - (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
53ccafd @fileability int main(void)
fileability authored
393 {
394 if (row < 0 || row >= [fetchedObjects count])
395 return nil;
396
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
397 //Get the object at this row
398 id fo /* sure */ = nil;
397bc9c @fileability Added preferences
fileability authored
399 if (vipObject && !fetchContainsVipObject)
400 {
401 if (row == 0)
402 fo = vipObject;
403 else
404 fo = [fetchedObjects objectAtIndex:row - 1];
405 }
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
406 else
397bc9c @fileability Added preferences
fileability authored
407 {
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
408 fo = [fetchedObjects objectAtIndex:row];
397bc9c @fileability Added preferences
fileability authored
409 }
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
410
411 id identifier = [tableColumn identifier];
412
413 //*** Icons ***
414 if ([identifier isEqual:@"normalIcon"])
7f2f488 @fileability #include <stdio.h>
fileability authored
415 {
416 if (row == [tableView selectedRow])
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
417 return [fo valueForKey:@"selectedIcon"];
418 else
419 return [fo valueForKey:@"normalIcon"];
7f2f488 @fileability #include <stdio.h>
fileability authored
420 }
421
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
422 //*** Titles ***
423 if ([identifier isEqual:@"name"])
424 {
4b931cb @fileability Now shows class names associated with methods and properties in searc…
fileability authored
425 NSString *foName = [fo valueForKey:@"name"];
426
81299cb Added compatibility for [redacted][redacted
Alex Gordon authored
427 if ([fo hasKey:@"container"] && [[fo valueForKeyPath:@"container.name"] length])
4b931cb @fileability Now shows class names associated with methods and properties in searc…
fileability authored
428 return [NSString stringWithFormat:@"%@\t(%@)", foName, /* 0x2013, */ [fo valueForKeyPath:@"container.name"]];
429
430 return foName;
124cc82 @fileability Massive commit. Lots of UI tweaks. Advanced search
fileability authored
431 }
53ccafd @fileability int main(void)
fileability authored
432
564e010 @fileability More cool stuff
fileability authored
433 //*** Container Names ***
434 if ([identifier isEqual:@"xcontainername"])
435 {
436 return [fo valueForKey:@"xcontainername"];
437 }
438
454c9a2 @fileability Completely rewrote the sorting algorithm. It now approaches "Psychic"…
fileability authored
439 //*** Docset Names ***
440 if ([identifier isEqual:@"xdocset"])
441 {
442 return [fo valueForKey:@"xdocset"];
443 }
444
445
53ccafd @fileability int main(void)
fileability authored
446 return nil;
447 }
448
b7c7ebb changedwkfj
Jean-Nicolas Jolivet authored
449 @end
Something went wrong with that request. Please try again.