Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 277 - (hide annotations) (download)
Tue Jan 19 13:18:16 2010 UTC (14 years, 3 months ago) by masaki
File size: 12516 byte(s)
[Mod] Xspfファイルを開くプロセスを変更。(途中)
1 masaki 2 //
2     // XspfManager.m
3     // XspfManager
4     //
5     // Created by Hori,Masaki on 09/11/01.
6     // Copyright 2009 masakih. All rights reserved.
7     //
8    
9 masaki 182 #import "XspfMMainWindowController.h"
10 masaki 2
11 masaki 238 #import "XspfMXspfObject.h"
12 masaki 2
13 masaki 189 #import "XspfMViewController.h"
14 masaki 41 #import "XspfMLibraryViewController.h"
15 masaki 16 #import "XspfMCollectionViewController.h"
16 masaki 25 #import "XspfMListViewController.h"
17 masaki 47 #import "XspfMDetailViewController.h"
18 masaki 2
19 masaki 193 #import "XspfMDragControl.h"
20    
21 masaki 69
22 masaki 182 @interface XspfMMainWindowController(HMPrivate)
23 masaki 43 - (void)setupXspfLists;
24 masaki 47 - (void)setupDetailView;
25 masaki 82 - (void)setupAccessorylView;
26 masaki 25 - (void)changeViewType:(XspfMViewType)newType;
27     - (void)setCurrentListViewType:(XspfMViewType)newType;
28 masaki 189 - (void)recalculateKeyViewLoop;
29 masaki 199
30     - (void)removeSelectedItem;
31 masaki 16 @end
32    
33 masaki 184
34 masaki 182 @implementation XspfMMainWindowController
35 masaki 36
36 masaki 8 - (id)init
37     {
38 masaki 200 self = [super initWithWindowNibName:@"MainWindow"];
39     if(self) {
40     viewControllers = [[NSMutableDictionary alloc] init];
41     }
42 masaki 50
43 masaki 8 return self;
44 masaki 2 }
45 masaki 8 - (void)awakeFromNib
46     {
47 masaki 47 static BOOL didSetupOnMainMenu = NO;
48    
49     if(appDelegate && !didSetupOnMainMenu) {
50     didSetupOnMainMenu = YES;
51 masaki 98
52 masaki 185 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
53     [nc addObserver:self
54     selector:@selector(managerDidAddObjects:)
55     name:XspfManagerDidAddXspfObjectsNotification
56     object:appDelegate];
57 masaki 98
58 masaki 49 [self window];
59 masaki 99
60 masaki 47 }
61 masaki 8 }
62 masaki 49 - (void)windowDidLoad
63     {
64 masaki 231 [[self window] setContentBorderThickness:32 forEdge:NSMinYEdge];
65 masaki 82
66 masaki 49 [self setupXspfLists];
67     [self setupDetailView];
68 masaki 82 [self setupAccessorylView];
69 masaki 50 if(currentListViewType == typeNotSelected) {
70 masaki 180 [self setCurrentListViewType:typeTableView];
71 masaki 50 }
72 masaki 49
73 masaki 50 [self showWindow:nil];
74 masaki 189 [self recalculateKeyViewLoop];
75 masaki 49 }
76 masaki 25 #pragma mark#### KVC ####
77 masaki 200 - (NSManagedObjectContext *)managedObjectContext
78     {
79     return [appDelegate managedObjectContext];
80     }
81 masaki 16 - (NSArrayController *)arrayController
82     {
83     return controller;
84     }
85 masaki 2
86 masaki 25 - (XspfMViewType)currentListViewType
87     {
88     return currentListViewType;
89     }
90     - (void)setCurrentListViewType:(XspfMViewType)newType
91     {
92     if(currentListViewType == newType) return;
93    
94     [self changeViewType:newType];
95     }
96 masaki 16
97 masaki 13 #pragma mark#### Actions ####
98 masaki 10 - (IBAction)openXspf:(id)sender
99     {
100 masaki 115 BOOL isSelected = [[controller valueForKeyPath:@"selectedObjects.@count"] boolValue];
101     if(!isSelected) return;
102    
103 masaki 238 XspfMXspfObject *rep = [controller valueForKeyPath:@"selection.self"];
104 masaki 277 BOOL didOpen = [[NSWorkspace sharedWorkspace] openFile:rep.filePath withApplication:@"XspfQT"];
105     if(didOpen) {
106     rep.lastPlayDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
107 masaki 101 return;
108     }
109 masaki 277
110     NSInteger result = NSRunCriticalAlertPanel(NSLocalizedString(@"Xspf is not found", @"Xspf is not found"),
111     NSLocalizedString(@"\"%@\" is not found.", @"\"%@\" is not found."),
112     nil, nil/*@"Search Original"*/, nil, rep.title);
113     if(result == NSAlertDefaultReturn) {
114     return;
115     } else if(result == NSAlertAlternateReturn) {
116     //
117     #warning shuld implement.
118     }
119    
120 masaki 10 }
121 masaki 190 - (IBAction)switchListView:(id)sender
122     {
123     [self setCurrentListViewType:typeTableView];
124     }
125     - (IBAction)switchRegularIconView:(id)sender
126     {
127     [self setCurrentListViewType:typeCollectionView];
128     [(XspfMCollectionViewController *)listViewController collectionViewItemViewRegular:sender];
129     }
130     - (IBAction)switchSmallIconView:(id)sender
131     {
132     [self setCurrentListViewType:typeCollectionView];
133     [(XspfMCollectionViewController *)listViewController collectionViewItemViewSmall:sender];
134     }
135 masaki 191 - (void)sortByKey:(NSString *)key
136 masaki 190 {
137 masaki 216 NSMutableArray *sortDescs = [[[controller sortDescriptors] mutableCopy] autorelease];
138 masaki 190 NSSortDescriptor *sortDesc = nil;
139    
140     // key is descs first key.
141     if([sortDescs count] > 1) {
142     NSSortDescriptor *firstDesc = [sortDescs objectAtIndex:0];
143     if([key isEqualToString:[firstDesc key]]) {
144     sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:![firstDesc ascending]] autorelease];
145     [sortDescs removeObject:firstDesc];
146     }
147     }
148     // remove same key.
149     if(!sortDesc) {
150 masaki 191 BOOL newAscending = NO;
151 masaki 190 NSSortDescriptor *foundDesc = nil;
152     for(id desc in sortDescs) {
153     if([key isEqualToString:[desc key]]) {
154     foundDesc = desc;
155     break;
156     }
157     }
158     if(foundDesc) {
159 masaki 191 newAscending = [foundDesc ascending];
160 masaki 190 [sortDescs removeObject:foundDesc];
161     }
162    
163 masaki 191 sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:newAscending] autorelease];
164 masaki 190 }
165    
166     [sortDescs insertObject:sortDesc atIndex:0];
167    
168     NSArray *selectedObjects = [controller selectedObjects];
169     [controller setSortDescriptors:sortDescs];
170     [controller setSelectedObjects:selectedObjects];
171     }
172     - (IBAction)sortByTitle:(id)sender
173     {
174 masaki 191 [self sortByKey:@"title"];
175 masaki 190 }
176     - (IBAction)sortByLastPlayDate:(id)sender
177     {
178 masaki 191 [self sortByKey:@"lastPlayDate"];
179 masaki 190 }
180     - (IBAction)sortByModificationDate:(id)sender
181     {
182 masaki 191 [self sortByKey:@"modificationDate"];
183 masaki 190 }
184     - (IBAction)sortByCreationDate:(id)sender
185     {
186 masaki 191 [self sortByKey:@"creationDate"];
187 masaki 190 }
188     - (IBAction)sortByRegisterDate:(id)sender
189     {
190 masaki 191 [self sortByKey:@"registerDate"];
191 masaki 190 }
192     - (IBAction)sortByRate:(id)sender
193     {
194 masaki 191 [self sortByKey:@"rating"];
195 masaki 190 }
196     - (IBAction)sortByMovieNumber:(id)sender
197     {
198 masaki 191 [self sortByKey:@"movieNum"];
199 masaki 190 }
200     - (IBAction)sortByLabel:(id)sender
201     {
202 masaki 224 [self sortByKey:@"label"];
203 masaki 190 }
204    
205 masaki 2 - (IBAction)add:(id)sender
206     {
207     NSOpenPanel *panel = [NSOpenPanel openPanel];
208    
209     [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]];
210     [panel setAllowsMultipleSelection:YES];
211 masaki 9 [panel setDelegate:self];
212 masaki 2
213     [panel beginSheetForDirectory:nil
214     file:nil
215     types:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]
216 masaki 8 modalForWindow:[self window]
217 masaki 2 modalDelegate:self
218     didEndSelector:@selector(endOpenPanel:::)
219     contextInfo:NULL];
220     }
221 masaki 106 - (void)endOpenPanel:(NSOpenPanel *)panel :(NSInteger)returnCode :(void *)context
222     {
223     [panel orderOut:nil];
224 masaki 2
225 masaki 106 if(returnCode == NSCancelButton) return;
226    
227     NSArray *URLs = [panel URLs];
228     if([URLs count] == 0) return;
229    
230 masaki 184 [appDelegate registerURLs:URLs];
231 masaki 106 }
232 masaki 190 - (IBAction)remove:(id)sender
233     {
234 masaki 199 [self removeSelectedItem];
235 masaki 190 }
236 masaki 182
237 masaki 194 - (IBAction)newPredicate:(id)sender
238     {
239     [libraryViewController newPredicate:sender];
240     }
241    
242 masaki 190 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem
243     {
244     BOOL enabled = YES;
245     SEL action = [menuItem action];
246    
247     if(action == @selector(switchListView:)) {
248     if(currentListViewType == typeTableView) {
249     [menuItem setState:NSOnState];
250     } else {
251     [menuItem setState:NSOffState];
252     }
253     } else if(action == @selector(switchRegularIconView:)) {
254     if(currentListViewType == typeCollectionView
255     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXspfMRegularItem) {
256     [menuItem setState:NSOnState];
257     } else {
258     [menuItem setState:NSOffState];
259     }
260     } else if(action == @selector(switchSmallIconView:)) {
261     if(currentListViewType == typeCollectionView
262     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXSpfMSmallItem) {
263     [menuItem setState:NSOnState];
264     } else {
265     [menuItem setState:NSOffState];
266     }
267     }
268    
269     return enabled;
270     }
271    
272 masaki 25 #pragma mark#### Other methods ####
273 masaki 199 - (void)removeSelectedItem
274     {
275 masaki 238 XspfMXspfObject *obj = [controller valueForKeyPath:@"selection.self"];
276 masaki 199
277     NSBeginInformationalAlertSheet(nil, nil, @"Cancel", nil, [self window],
278     self, @selector(didEndAskDelete:::), Nil, obj,
279     NSLocalizedString(@"Do you really delete item \"%@\" from list?", @"Do you really delete item \"%@\" from list?"),
280     obj.title);
281     }
282     - (void)didEndAskDelete:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
283     {
284     if(returnCode == NSCancelButton) return;
285    
286     [appDelegate removeObject:contextInfo];
287     }
288    
289 masaki 189 - (void)recalculateKeyViewLoop
290     {
291     [searchField setNextKeyView:[libraryViewController firstKeyView]];
292     [libraryViewController setNextKeyView:[listViewController firstKeyView]];
293     [listViewController setNextKeyView:[detailViewController firstKeyView]];
294     [detailViewController setNextKeyView:searchField];
295     }
296 masaki 25 - (void)changeViewType:(XspfMViewType)viewType
297     {
298     if(currentListViewType == viewType) return;
299     currentListViewType = viewType;
300    
301     NSString *className = nil;
302     switch(currentListViewType) {
303     case typeCollectionView:
304     className = @"XspfMCollectionViewController";
305     break;
306     case typeTableView:
307     className = @"XspfMListViewController";
308     break;
309     }
310     if(!className) return;
311    
312 masaki 189 XspfMViewController *targetContorller = [viewControllers objectForKey:className];
313 masaki 25 if(!targetContorller) {
314     targetContorller = [[[NSClassFromString(className) alloc] init] autorelease];
315     if(!targetContorller) return;
316 masaki 192
317     id selectionIndexes = [controller selectionIndexes];
318 masaki 25 [viewControllers setObject:targetContorller forKey:className];
319 masaki 180 [targetContorller view];
320 masaki 30 [targetContorller setRepresentedObject:controller];
321 masaki 189 [targetContorller recalculateKeyViewLoop];
322 masaki 192 [controller setSelectionIndexes:selectionIndexes];
323 masaki 25 }
324 masaki 109
325 masaki 25 [[listViewController view] removeFromSuperview];
326     listViewController = targetContorller;
327     [listView addSubview:[listViewController view]];
328     [[listViewController view] setFrame:[listView bounds]];
329 masaki 189 // [[self window] recalculateKeyViewLoop];
330     [self recalculateKeyViewLoop];
331 masaki 25 }
332 masaki 2
333 masaki 5
334 masaki 43 - (void)setupXspfLists
335 masaki 36 {
336 masaki 47 if(libraryViewController) return;
337    
338 masaki 41 libraryViewController = [[XspfMLibraryViewController alloc] init];
339 masaki 37 [libraryViewController setRepresentedObject:listController];
340     [libraryView addSubview:[libraryViewController view]];
341 masaki 193 NSRect rect = [libraryView bounds];
342     rect.size.width += 2;
343     rect.origin.x -= 1;
344     [[libraryViewController view] setFrame:rect];
345 masaki 189 [libraryViewController recalculateKeyViewLoop];
346 masaki 233 [[libraryViewController dragControl] setDelegate:self];
347 masaki 36 }
348 masaki 47 - (void)setupDetailView
349 masaki 6 {
350 masaki 47 if(detailViewController) return;
351 masaki 6
352 masaki 47 detailViewController = [[XspfMDetailViewController alloc] init];
353     [detailViewController setRepresentedObject:controller];
354     [detailView addSubview:[detailViewController view]];
355     [[detailViewController view] setFrame:[detailView bounds]];
356 masaki 189 [detailViewController recalculateKeyViewLoop];
357 masaki 6 }
358 masaki 82 - (void)setupAccessorylView
359     {
360     if(accessoryViewController) return;
361    
362     accessoryViewController = [[NSViewController alloc] initWithNibName:@"AccessoryView" bundle:nil];
363     [accessoryViewController setRepresentedObject:[appDelegate channel]];
364     [accessoryView addSubview:[accessoryViewController view]];
365     [[accessoryViewController view] setFrame:[accessoryView bounds]];
366 masaki 189 // [accessoryViewController recalculateKeyViewLoop];
367 masaki 82 }
368 masaki 8 #pragma mark#### NSWidnow Delegate ####
369     /**
370     Returns the NSUndoManager for the application. In this case, the manager
371     returned is that of the managed object context for the application.
372     */
373 masaki 6
374 masaki 8 - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
375     return [[appDelegate managedObjectContext] undoManager];
376     }
377    
378 masaki 9 #pragma mark#### NSOpenPanel Delegate ####
379     - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
380     {
381 masaki 184 return ![appDelegate didRegisteredURL:[NSURL fileURLWithPath:filename]];
382 masaki 9 }
383    
384 masaki 193 #pragma mark#### XspfMDragControl Delegate ####
385     - (void)dragControl:(XspfMDragControl *)control dragDelta:(NSSize)delta
386     {
387     HMLog(HMLogLevelDebug, @"Enter %@", NSStringFromSelector(_cmd));
388     CGFloat libWidth = [libraryView frame].size.width;
389     [splitView setPosition:libWidth + delta.width ofDividerAtIndex:0];
390     }
391    
392 masaki 185 #pragma mark#### XspfManager Notifications ####
393     - (void)managerDidAddObjects:(NSNotification *)notification
394     {
395     id addedObjects = [[notification userInfo] objectForKey:@"XspfManagerAddedXspfObjects"];
396     if(!addedObjects || ![addedObjects isKindOfClass:[NSArray class]] || [addedObjects count] == 0) return;
397    
398     [controller performSelector:@selector(setSelectedObjects:)
399     withObject:addedObjects
400     afterDelay:0.01];
401     }
402    
403 masaki 184 #pragma mark#### Test ####
404     - (IBAction)test01:(id)sender
405     {
406 masaki 238 XspfMXspfObject *obj = [controller valueForKeyPath:@"selection.self"];
407 masaki 204 srandom([[NSDate date] timeIntervalSince1970]);
408     obj.label = [NSNumber numberWithInteger:random() % 8];
409 masaki 203 HMLog(HMLogLevelDebug, @"HMLogLevelDebug -> %@", obj);
410 masaki 231
411     NSButtonCell *cell = [sender cell];
412     HMLog(HMLogLevelDebug, @"boardered -> %@\nbezeled -> %@\ngradientType -> %d\n bezelStyle -> %d",
413     [cell isBordered] ? @"YES" : @"NO", [cell isBezeled] ? @"YES" : @"NO",
414     [cell gradientType], [cell bezelStyle]);
415 masaki 184 }
416     - (IBAction)test02:(id)sender
417     {
418     NSResponder *responder = [[self window] firstResponder];
419     while(responder) {
420 masaki 188 HMLog(HMLogLevelDebug, @"Responder -> %@", responder);
421 masaki 184 responder = [responder nextResponder];
422     }
423     }
424     - (IBAction)test03:(id)sender
425     {
426     id keyView = [[self window] firstResponder];
427     NSView *firstKeyView = keyView;
428     while(keyView) {
429 masaki 188 HMLog(HMLogLevelDebug, @"Keyview -> %@", keyView);
430 masaki 184 keyView = [keyView nextKeyView];
431     if(keyView == firstKeyView) break;
432     }
433    
434 masaki 188 HMLog(HMLogLevelDebug, @"Valid next view -> %@", [firstKeyView nextValidKeyView]);
435 masaki 184 }
436     @end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26