Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 317 - (hide annotations) (download)
Sat Feb 6 16:42:42 2010 UTC (14 years, 2 months ago) by masaki
File size: 18263 byte(s)
[New] クイックルックツールバーアイテム追加。
[Fix] togglePreviewPanel:をトグルするように修正。条件式が間違っていたのを修正。
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 281 #import "XspfMCoverFlowViewController.h"
19 masaki 2
20 masaki 281
21 masaki 193 #import "XspfMDragControl.h"
22    
23 masaki 69
24 masaki 182 @interface XspfMMainWindowController(HMPrivate)
25 masaki 43 - (void)setupXspfLists;
26 masaki 47 - (void)setupDetailView;
27 masaki 82 - (void)setupAccessorylView;
28 masaki 25 - (void)changeViewType:(XspfMViewType)newType;
29     - (void)setCurrentListViewType:(XspfMViewType)newType;
30 masaki 189 - (void)recalculateKeyViewLoop;
31 masaki 199
32     - (void)removeSelectedItem;
33 masaki 16 @end
34    
35 masaki 317
36 masaki 300 @interface NSPanel(XspfMPreviewPanelSupport)
37 masaki 317 + (NSPanel *)sharedPreviewPanel;
38    
39     - (BOOL)isOpen;
40     - (void)setCurrentPreviewItemIndex:(NSUInteger)index;
41     - (NSUInteger)currentPreviewItemIndex;
42    
43     // for Leopard
44 masaki 305 - (void)setURLs:(NSArray *)URLs;
45 masaki 300 - (void)setURLs:(NSArray *)URLs currentIndex:(NSUInteger)index preservingDisplayState:(BOOL)flag;
46     - (void)makeKeyAndOrderFrontWithEffect:(NSInteger)mode;
47 masaki 317 - (void)closeWithEffect:(NSInteger)mode;
48 masaki 300 @end
49    
50    
51 masaki 297 static NSInteger osVersion = 0;
52     static id previewPanel = nil;
53 masaki 184
54 masaki 182 @implementation XspfMMainWindowController
55 masaki 297 + (void)initialize
56     {
57 masaki 300 static BOOL isFirst = YES;
58     if(isFirst) {
59     isFirst = NO;
60     if([[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load]) {
61     NSLog(@"Quick Look for 10.5 loaded!");
62     osVersion = 105;
63     }
64     if([[NSBundle bundleWithPath:@"/System/Library/Frameworks/Quartz.framework/Frameworks/QuickLookUI.framework"] load]) {
65     NSLog(@"Quick Look for 10.6 loaded!");
66     osVersion = 106;
67     }
68 masaki 297 }
69     }
70 masaki 36
71 masaki 8 - (id)init
72     {
73 masaki 200 self = [super initWithWindowNibName:@"MainWindow"];
74     if(self) {
75     viewControllers = [[NSMutableDictionary alloc] init];
76     }
77 masaki 50
78 masaki 8 return self;
79 masaki 2 }
80 masaki 8 - (void)awakeFromNib
81     {
82 masaki 47 static BOOL didSetupOnMainMenu = NO;
83    
84     if(appDelegate && !didSetupOnMainMenu) {
85     didSetupOnMainMenu = YES;
86 masaki 98
87 masaki 185 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
88     [nc addObserver:self
89     selector:@selector(managerDidAddObjects:)
90     name:XspfManagerDidAddXspfObjectsNotification
91     object:appDelegate];
92 masaki 304
93 masaki 49 [self window];
94 masaki 99
95 masaki 47 }
96 masaki 8 }
97 masaki 49 - (void)windowDidLoad
98     {
99 masaki 231 [[self window] setContentBorderThickness:32 forEdge:NSMinYEdge];
100 masaki 82
101 masaki 294 [splitView setDelegate:self];
102 masaki 49 [self setupXspfLists];
103     [self setupDetailView];
104 masaki 82 [self setupAccessorylView];
105 masaki 49
106 masaki 316 [self setCurrentListViewType:[[NSUserDefaults standardUserDefaults] integerForKey:@"viewType"]];
107 masaki 315
108 masaki 316
109 masaki 315 [listController bind:NSManagedObjectContextBinding
110     toObject:appDelegate
111     withKeyPath:@"managedObjectContext"
112     options:nil];
113    
114     [allXspfController bind:NSManagedObjectContextBinding
115     toObject:appDelegate
116     withKeyPath:@"managedObjectContext"
117     options:nil];
118    
119 masaki 304 [controller addObserver:self forKeyPath:@"selectionIndex" options:0 context:NULL];
120    
121 masaki 50 [self showWindow:nil];
122 masaki 189 [self recalculateKeyViewLoop];
123 masaki 49 }
124 masaki 25 #pragma mark#### KVC ####
125 masaki 2
126 masaki 25 - (XspfMViewType)currentListViewType
127     {
128     return currentListViewType;
129     }
130     - (void)setCurrentListViewType:(XspfMViewType)newType
131     {
132     if(currentListViewType == newType) return;
133    
134 masaki 316 [[NSUserDefaults standardUserDefaults] setInteger:newType forKey:@"viewType"];
135    
136 masaki 25 [self changeViewType:newType];
137     }
138 masaki 16
139 masaki 304 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
140     {
141     if([keyPath isEqualToString:@"selectionIndex"]) {
142 masaki 305 if(osVersion == 105) {
143     id qlPanel = [NSClassFromString(@"QLPreviewPanel") sharedPreviewPanel];
144     [qlPanel setURLs:[[controller selectedObjects] mutableArrayValueForKey:@"url"]];
145     } else {
146     [previewPanel reloadData];
147     }
148    
149 masaki 304 return;
150     }
151     [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
152     }
153    
154 masaki 13 #pragma mark#### Actions ####
155 masaki 10 - (IBAction)openXspf:(id)sender
156     {
157 masaki 115 BOOL isSelected = [[controller valueForKeyPath:@"selectedObjects.@count"] boolValue];
158     if(!isSelected) return;
159    
160 masaki 238 XspfMXspfObject *rep = [controller valueForKeyPath:@"selection.self"];
161 masaki 277 BOOL didOpen = [[NSWorkspace sharedWorkspace] openFile:rep.filePath withApplication:@"XspfQT"];
162     if(didOpen) {
163     rep.lastPlayDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
164 masaki 101 return;
165     }
166 masaki 277
167     NSInteger result = NSRunCriticalAlertPanel(NSLocalizedString(@"Xspf is not found", @"Xspf is not found"),
168     NSLocalizedString(@"\"%@\" is not found.", @"\"%@\" is not found."),
169     nil, nil/*@"Search Original"*/, nil, rep.title);
170     if(result == NSAlertDefaultReturn) {
171     return;
172     } else if(result == NSAlertAlternateReturn) {
173     //
174     #warning shuld implement.
175     }
176    
177 masaki 10 }
178 masaki 190 - (IBAction)switchListView:(id)sender
179     {
180     [self setCurrentListViewType:typeTableView];
181     }
182     - (IBAction)switchRegularIconView:(id)sender
183     {
184     [self setCurrentListViewType:typeCollectionView];
185     [(XspfMCollectionViewController *)listViewController collectionViewItemViewRegular:sender];
186     }
187     - (IBAction)switchSmallIconView:(id)sender
188     {
189     [self setCurrentListViewType:typeCollectionView];
190     [(XspfMCollectionViewController *)listViewController collectionViewItemViewSmall:sender];
191     }
192 masaki 281 - (IBAction)switchCoverFlowView:(id)sender
193     {
194     [self setCurrentListViewType:typeCoverFlowView];
195     }
196    
197 masaki 191 - (void)sortByKey:(NSString *)key
198 masaki 190 {
199 masaki 216 NSMutableArray *sortDescs = [[[controller sortDescriptors] mutableCopy] autorelease];
200 masaki 190 NSSortDescriptor *sortDesc = nil;
201    
202     // key is descs first key.
203     if([sortDescs count] > 1) {
204     NSSortDescriptor *firstDesc = [sortDescs objectAtIndex:0];
205     if([key isEqualToString:[firstDesc key]]) {
206     sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:![firstDesc ascending]] autorelease];
207     [sortDescs removeObject:firstDesc];
208     }
209     }
210     // remove same key.
211     if(!sortDesc) {
212 masaki 191 BOOL newAscending = NO;
213 masaki 190 NSSortDescriptor *foundDesc = nil;
214     for(id desc in sortDescs) {
215     if([key isEqualToString:[desc key]]) {
216     foundDesc = desc;
217     break;
218     }
219     }
220     if(foundDesc) {
221 masaki 191 newAscending = [foundDesc ascending];
222 masaki 190 [sortDescs removeObject:foundDesc];
223     }
224    
225 masaki 191 sortDesc = [[[NSSortDescriptor alloc] initWithKey:key ascending:newAscending] autorelease];
226 masaki 190 }
227    
228     [sortDescs insertObject:sortDesc atIndex:0];
229    
230     NSArray *selectedObjects = [controller selectedObjects];
231     [controller setSortDescriptors:sortDescs];
232     [controller setSelectedObjects:selectedObjects];
233     }
234     - (IBAction)sortByTitle:(id)sender
235     {
236 masaki 191 [self sortByKey:@"title"];
237 masaki 190 }
238     - (IBAction)sortByLastPlayDate:(id)sender
239     {
240 masaki 191 [self sortByKey:@"lastPlayDate"];
241 masaki 190 }
242     - (IBAction)sortByModificationDate:(id)sender
243     {
244 masaki 191 [self sortByKey:@"modificationDate"];
245 masaki 190 }
246     - (IBAction)sortByCreationDate:(id)sender
247     {
248 masaki 191 [self sortByKey:@"creationDate"];
249 masaki 190 }
250     - (IBAction)sortByRegisterDate:(id)sender
251     {
252 masaki 191 [self sortByKey:@"registerDate"];
253 masaki 190 }
254     - (IBAction)sortByRate:(id)sender
255     {
256 masaki 191 [self sortByKey:@"rating"];
257 masaki 190 }
258     - (IBAction)sortByMovieNumber:(id)sender
259     {
260 masaki 191 [self sortByKey:@"movieNum"];
261 masaki 190 }
262     - (IBAction)sortByLabel:(id)sender
263     {
264 masaki 224 [self sortByKey:@"label"];
265 masaki 190 }
266    
267 masaki 2 - (IBAction)add:(id)sender
268     {
269     NSOpenPanel *panel = [NSOpenPanel openPanel];
270    
271     [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]];
272     [panel setAllowsMultipleSelection:YES];
273 masaki 9 [panel setDelegate:self];
274 masaki 2
275     [panel beginSheetForDirectory:nil
276     file:nil
277     types:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]
278 masaki 8 modalForWindow:[self window]
279 masaki 2 modalDelegate:self
280     didEndSelector:@selector(endOpenPanel:::)
281     contextInfo:NULL];
282     }
283 masaki 106 - (void)endOpenPanel:(NSOpenPanel *)panel :(NSInteger)returnCode :(void *)context
284     {
285     [panel orderOut:nil];
286 masaki 2
287 masaki 106 if(returnCode == NSCancelButton) return;
288    
289     NSArray *URLs = [panel URLs];
290     if([URLs count] == 0) return;
291    
292 masaki 184 [appDelegate registerURLs:URLs];
293 masaki 106 }
294 masaki 190 - (IBAction)remove:(id)sender
295     {
296 masaki 199 [self removeSelectedItem];
297 masaki 190 }
298 masaki 182
299 masaki 194 - (IBAction)newPredicate:(id)sender
300     {
301     [libraryViewController newPredicate:sender];
302     }
303    
304 masaki 190 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem
305     {
306     BOOL enabled = YES;
307     SEL action = [menuItem action];
308    
309     if(action == @selector(switchListView:)) {
310     if(currentListViewType == typeTableView) {
311     [menuItem setState:NSOnState];
312     } else {
313     [menuItem setState:NSOffState];
314     }
315     } else if(action == @selector(switchRegularIconView:)) {
316     if(currentListViewType == typeCollectionView
317     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXspfMRegularItem) {
318     [menuItem setState:NSOnState];
319     } else {
320     [menuItem setState:NSOffState];
321     }
322     } else if(action == @selector(switchSmallIconView:)) {
323     if(currentListViewType == typeCollectionView
324     && [(XspfMCollectionViewController*)listViewController collectionItemType] == typeXSpfMSmallItem) {
325     [menuItem setState:NSOnState];
326     } else {
327     [menuItem setState:NSOffState];
328     }
329 masaki 281 } else if(action == @selector(switchCoverFlowView:)) {
330     if(currentListViewType == typeCoverFlowView) {
331     [menuItem setState:NSOnState];
332     } else {
333     [menuItem setState:NSOffState];
334     }
335 masaki 190 }
336    
337     return enabled;
338     }
339    
340 masaki 25 #pragma mark#### Other methods ####
341 masaki 199 - (void)removeSelectedItem
342     {
343 masaki 238 XspfMXspfObject *obj = [controller valueForKeyPath:@"selection.self"];
344 masaki 199
345     NSBeginInformationalAlertSheet(nil, nil, @"Cancel", nil, [self window],
346     self, @selector(didEndAskDelete:::), Nil, obj,
347     NSLocalizedString(@"Do you really delete item \"%@\" from list?", @"Do you really delete item \"%@\" from list?"),
348     obj.title);
349     }
350     - (void)didEndAskDelete:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
351     {
352     if(returnCode == NSCancelButton) return;
353    
354     [appDelegate removeObject:contextInfo];
355     }
356    
357 masaki 189 - (void)recalculateKeyViewLoop
358     {
359     [searchField setNextKeyView:[libraryViewController firstKeyView]];
360     [libraryViewController setNextKeyView:[listViewController firstKeyView]];
361     [listViewController setNextKeyView:[detailViewController firstKeyView]];
362     [detailViewController setNextKeyView:searchField];
363     }
364 masaki 25 - (void)changeViewType:(XspfMViewType)viewType
365     {
366     if(currentListViewType == viewType) return;
367     currentListViewType = viewType;
368    
369     NSString *className = nil;
370     switch(currentListViewType) {
371     case typeCollectionView:
372     className = @"XspfMCollectionViewController";
373     break;
374     case typeTableView:
375     className = @"XspfMListViewController";
376     break;
377 masaki 281 case typeCoverFlowView:
378     className = @"XspfMCoverFlowViewController";
379     break;
380 masaki 25 }
381     if(!className) return;
382    
383 masaki 189 XspfMViewController *targetContorller = [viewControllers objectForKey:className];
384 masaki 25 if(!targetContorller) {
385     targetContorller = [[[NSClassFromString(className) alloc] init] autorelease];
386     if(!targetContorller) return;
387 masaki 192
388     id selectionIndexes = [controller selectionIndexes];
389 masaki 25 [viewControllers setObject:targetContorller forKey:className];
390 masaki 180 [targetContorller view];
391 masaki 30 [targetContorller setRepresentedObject:controller];
392 masaki 189 [targetContorller recalculateKeyViewLoop];
393 masaki 192 [controller setSelectionIndexes:selectionIndexes];
394 masaki 25 }
395 masaki 109
396 masaki 25 [[listViewController view] removeFromSuperview];
397     listViewController = targetContorller;
398     [listView addSubview:[listViewController view]];
399     [[listViewController view] setFrame:[listView bounds]];
400 masaki 189 // [[self window] recalculateKeyViewLoop];
401     [self recalculateKeyViewLoop];
402 masaki 25 }
403 masaki 2
404 masaki 5
405 masaki 43 - (void)setupXspfLists
406 masaki 36 {
407 masaki 47 if(libraryViewController) return;
408    
409 masaki 41 libraryViewController = [[XspfMLibraryViewController alloc] init];
410 masaki 37 [libraryViewController setRepresentedObject:listController];
411     [libraryView addSubview:[libraryViewController view]];
412 masaki 193 NSRect rect = [libraryView bounds];
413     rect.size.width += 2;
414     rect.origin.x -= 1;
415     [[libraryViewController view] setFrame:rect];
416 masaki 189 [libraryViewController recalculateKeyViewLoop];
417 masaki 233 [[libraryViewController dragControl] setDelegate:self];
418 masaki 36 }
419 masaki 47 - (void)setupDetailView
420 masaki 6 {
421 masaki 47 if(detailViewController) return;
422 masaki 6
423 masaki 47 detailViewController = [[XspfMDetailViewController alloc] init];
424     [detailViewController setRepresentedObject:controller];
425     [detailView addSubview:[detailViewController view]];
426     [[detailViewController view] setFrame:[detailView bounds]];
427 masaki 189 [detailViewController recalculateKeyViewLoop];
428 masaki 6 }
429 masaki 82 - (void)setupAccessorylView
430     {
431     if(accessoryViewController) return;
432    
433     accessoryViewController = [[NSViewController alloc] initWithNibName:@"AccessoryView" bundle:nil];
434     [accessoryViewController setRepresentedObject:[appDelegate channel]];
435     [accessoryView addSubview:[accessoryViewController view]];
436     [[accessoryViewController view] setFrame:[accessoryView bounds]];
437 masaki 189 // [accessoryViewController recalculateKeyViewLoop];
438 masaki 82 }
439 masaki 8 #pragma mark#### NSWidnow Delegate ####
440     /**
441     Returns the NSUndoManager for the application. In this case, the manager
442     returned is that of the managed object context for the application.
443     */
444 masaki 6
445 masaki 8 - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
446     return [[appDelegate managedObjectContext] undoManager];
447     }
448    
449 masaki 9 #pragma mark#### NSOpenPanel Delegate ####
450     - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
451     {
452 masaki 184 return ![appDelegate didRegisteredURL:[NSURL fileURLWithPath:filename]];
453 masaki 9 }
454 masaki 294 #pragma mark#### NSSplitView Delegate ####
455     - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex
456     {
457     return 130;
458     }
459 masaki 295 - (void)splitView:(NSSplitView *)aSplitView resizeSubviewsWithOldSize:(NSSize)oldSize
460     {
461     NSView *rightView = [[splitView subviews] objectAtIndex:1];
462     NSRect newFrame = [splitView frame];
463     NSRect libFrame = [libraryView frame];
464     NSRect listFrame = [rightView frame];
465     CGFloat dividerThickness = [splitView dividerThickness];
466    
467     libFrame.size.height = newFrame.size.height;
468     listFrame.size.height = newFrame.size.height;
469    
470     listFrame.size.width = newFrame.size.width - libFrame.size.width - dividerThickness;
471    
472     if(listFrame.size.width < 0) listFrame.size.width = 0;
473    
474     [libraryView setFrame:libFrame];
475     [rightView setFrame:listFrame];
476     }
477 masaki 193 #pragma mark#### XspfMDragControl Delegate ####
478     - (void)dragControl:(XspfMDragControl *)control dragDelta:(NSSize)delta
479     {
480     HMLog(HMLogLevelDebug, @"Enter %@", NSStringFromSelector(_cmd));
481     CGFloat libWidth = [libraryView frame].size.width;
482     [splitView setPosition:libWidth + delta.width ofDividerAtIndex:0];
483     }
484    
485 masaki 185 #pragma mark#### XspfManager Notifications ####
486     - (void)managerDidAddObjects:(NSNotification *)notification
487     {
488     id addedObjects = [[notification userInfo] objectForKey:@"XspfManagerAddedXspfObjects"];
489     if(!addedObjects || ![addedObjects isKindOfClass:[NSArray class]] || [addedObjects count] == 0) return;
490    
491     [controller performSelector:@selector(setSelectedObjects:)
492     withObject:addedObjects
493     afterDelay:0.01];
494     }
495    
496 masaki 297 #pragma mark#### PreviewPanel Support ####
497     - (IBAction)togglePreviewPanel:(id)panel
498     {
499     Class aClass = NSClassFromString(@"QLPreviewPanel");
500     if(!aClass) {
501     NSBeep();
502     return;
503     }
504     id qlPanel = [aClass sharedPreviewPanel];
505 masaki 317
506     if([qlPanel isOpen]) {
507     if(osVersion == 105) {
508     [qlPanel closeWithEffect:2];
509     } else if(osVersion >= 106) {
510     [qlPanel orderOut:nil];
511     }
512    
513     return;
514     }
515    
516 masaki 297 if(osVersion == 105) {
517 masaki 305 [qlPanel setDelegate:self];
518     [qlPanel setURLs:[[controller selectedObjects] mutableArrayValueForKey:@"url"]];
519 masaki 298 [qlPanel makeKeyAndOrderFrontWithEffect:2];
520 masaki 317 } else if(osVersion >= 106) {
521 masaki 297 [qlPanel makeKeyAndOrderFront:nil];
522     }
523     }
524    
525     #pragma mark---- QLPreviewPanelController ----
526     - (BOOL)acceptsPreviewPanelControl:(id /*QLPreviewPanel* */)panel
527     {
528     return YES;
529     }
530     - (void)beginPreviewPanelControl:(id /*QLPreviewPanel* */)panel
531     {
532     previewPanel = [panel retain];
533     [panel setDelegate:self];
534     [panel setDataSource:self];
535     [previewPanel setCurrentPreviewItemIndex:[controller selectionIndex]];
536     }
537     - (void)endPreviewPanelControl:(id /*QLPreviewPanel* */)panel
538     {
539     [previewPanel release];
540     previewPanel = nil;
541     }
542    
543     #pragma mark---- QLPreviewPanelDataSource ----
544     - (NSInteger)numberOfPreviewItemsInPreviewPanel:(id /*QLPreviewPanel* */)panel
545     {
546 masaki 304 return [[controller selectedObjects] count];
547 masaki 297 }
548     - (id /*<QLPreviewItem>*/)previewPanel:(id)panel previewItemAtIndex:(NSInteger)index
549     {
550 masaki 304 return [[controller selectedObjects] objectAtIndex:index];
551 masaki 297 }
552    
553     #pragma mark---- QLPreviewPanelDelegate ----
554     - (BOOL)previewPanel:(id /*QLPreviewPanel* */)panel handleEvent:(NSEvent *)event
555     {
556     if ([event type] == NSKeyDown) {
557     NSResponder *target = nil;
558     target = [listViewController initialFirstResponder];
559     if(!target) {
560     target = [listViewController firstKeyView];
561     }
562     if(!target) {
563     target = [listViewController view];
564     }
565     if(!target) return NO;
566    
567     [target keyDown:event];
568     return YES;
569     }
570     return NO;
571     }
572     - (NSRect)previewPanel:(id /*QLPreviewPanel* */)panel sourceFrameOnScreenForPreviewItem:(id /*<QLPreviewItem>*/)item
573     {
574 masaki 304 return [listViewController selectionItemRect];
575 masaki 297 }
576    
577     - (id)previewPanel:(id /*QLPreviewPanel* */)panel transitionImageForPreviewItem:(id /*<QLPreviewItem>*/)item contentRect:(NSRect *)contentRect
578     {
579     XspfMXspfObject *obj = item;
580     return obj.thumbnail;
581     }
582 masaki 304
583 masaki 305 // for Leopard
584     - (BOOL)previewPanel:(id)panel shouldHandleEvent:(NSEvent *)theEvent
585     {
586     return ![self previewPanel:panel handleEvent:theEvent];
587     }
588     - (NSRect)previewPanel:(id)panel frameForURL:(NSURL *)url
589     {
590     return [self previewPanel:panel sourceFrameOnScreenForPreviewItem:url];
591     }
592 masaki 304
593 masaki 184 #pragma mark#### Test ####
594     - (IBAction)test01:(id)sender
595     {
596 masaki 238 XspfMXspfObject *obj = [controller valueForKeyPath:@"selection.self"];
597 masaki 204 srandom([[NSDate date] timeIntervalSince1970]);
598     obj.label = [NSNumber numberWithInteger:random() % 8];
599 masaki 203 HMLog(HMLogLevelDebug, @"HMLogLevelDebug -> %@", obj);
600 masaki 231
601     NSButtonCell *cell = [sender cell];
602     HMLog(HMLogLevelDebug, @"boardered -> %@\nbezeled -> %@\ngradientType -> %d\n bezelStyle -> %d",
603     [cell isBordered] ? @"YES" : @"NO", [cell isBezeled] ? @"YES" : @"NO",
604     [cell gradientType], [cell bezelStyle]);
605 masaki 184 }
606     - (IBAction)test02:(id)sender
607     {
608     NSResponder *responder = [[self window] firstResponder];
609     while(responder) {
610 masaki 188 HMLog(HMLogLevelDebug, @"Responder -> %@", responder);
611 masaki 184 responder = [responder nextResponder];
612     }
613     }
614     - (IBAction)test03:(id)sender
615     {
616     id keyView = [[self window] firstResponder];
617     NSView *firstKeyView = keyView;
618     while(keyView) {
619 masaki 188 HMLog(HMLogLevelDebug, @"Keyview -> %@", keyView);
620 masaki 184 keyView = [keyView nextKeyView];
621     if(keyView == firstKeyView) break;
622     }
623    
624 masaki 188 HMLog(HMLogLevelDebug, @"Valid next view -> %@", [firstKeyView nextValidKeyView]);
625 masaki 184 }
626     @end
627 masaki 297
628     @implementation XspfMXspfObject (XspfMPreviewPanelSupport)
629     - (NSString *)previewItemTitle
630     {
631     return self.title;
632     }
633     - (NSURL *)previewItemURL
634     {
635     return self.url;
636     }
637     @end

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