Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (hide annotations) (download)
Sun Nov 15 05:44:07 2009 UTC (14 years, 5 months ago) by masaki
Original Path: XspfManager/XspfManager.m
File size: 8238 byte(s)
[Fix] ファイルが開けない可能性があるのを修正。
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     #import "XspfManager.h"
10    
11     #import "XspfMMovieLoadRequest.h"
12 masaki 50 #import "XspfMCheckFileModifiedRequest.h"
13 masaki 2
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 69 #import "NSWorkspace-Extensions.h"
20    
21 masaki 16 @interface XspfManager(HMPrivate)
22 masaki 43 - (void)setupXspfLists;
23 masaki 47 - (void)setupDetailView;
24 masaki 25 - (void)changeViewType:(XspfMViewType)newType;
25     - (void)setCurrentListViewType:(XspfMViewType)newType;
26 masaki 16 @end
27    
28 masaki 2 @implementation XspfManager
29 masaki 36
30 masaki 37 //@dynamic xspfList;
31 masaki 36
32 masaki 8 static XspfManager *sharedInstance = nil;
33 masaki 2
34 masaki 8 + (XspfManager *)sharedInstance
35 masaki 2 {
36 masaki 8 @synchronized(self) {
37     if (sharedInstance == nil) {
38     [[self alloc] init]; // assignment not done here
39     }
40     }
41     return sharedInstance;
42     }
43    
44     + (id)allocWithZone:(NSZone *)zone
45     {
46     @synchronized(self) {
47     if (sharedInstance == nil) {
48     sharedInstance = [super allocWithZone:zone];
49     return sharedInstance; // assignment and return on first allocation
50     }
51     }
52     return nil; //on subsequent allocation attempts return nil
53     }
54    
55     - (id)copyWithZone:(NSZone *)zone
56     {
57     return self;
58     }
59    
60     - (id)retain
61     {
62     return self;
63     }
64    
65     - (unsigned)retainCount
66     {
67     return UINT_MAX; //denotes an object that cannot be released
68     }
69    
70     - (void)release
71     {
72     //do nothing
73     }
74    
75     - (id)autorelease
76     {
77     return self;
78     }
79    
80    
81     - (id)init
82     {
83     [super initWithWindowNibName:@"MainWindow"];
84 masaki 54 // channel = [[HMChannel alloc] initWithWorkerNum:1];
85 masaki 8
86 masaki 25 viewControllers = [[NSMutableDictionary alloc] init];
87 masaki 50
88 masaki 8 return self;
89 masaki 2 }
90 masaki 8 - (void)awakeFromNib
91     {
92 masaki 47 static BOOL didSetupOnMainMenu = NO;
93    
94     if(appDelegate && !didSetupOnMainMenu) {
95     didSetupOnMainMenu = YES;
96 masaki 49 [self window];
97 masaki 47 }
98 masaki 8 }
99 masaki 49 - (void)windowDidLoad
100     {
101     [self setupXspfLists];
102     [self setupDetailView];
103 masaki 50 if(currentListViewType == typeNotSelected) {
104     [self setCurrentListViewType:typeCollectionView];
105     }
106 masaki 49
107 masaki 50 // [self performSelector:@selector(showWindow:) withObject:nil afterDelay:0.0];
108     [self showWindow:nil];
109 masaki 49 }
110 masaki 25 #pragma mark#### KVC ####
111 masaki 8 - (NSManagedObjectContext *)managedObjectContext
112     {
113     return [appDelegate managedObjectContext];
114     }
115 masaki 16 - (NSArrayController *)arrayController
116     {
117     return controller;
118     }
119 masaki 2
120 masaki 25 - (XspfMViewType)currentListViewType
121     {
122     return currentListViewType;
123     }
124     - (void)setCurrentListViewType:(XspfMViewType)newType
125     {
126     if(currentListViewType == newType) return;
127    
128     [self changeViewType:newType];
129     }
130 masaki 16
131 masaki 13 #pragma mark#### Actions ####
132 masaki 10 - (IBAction)openXspf:(id)sender
133     {
134 masaki 14 id rep = [controller valueForKeyPath:@"selection.self"];
135 masaki 76 [[NSWorkspace sharedWorkspace] openFile:[rep valueForKey:@"filePath"] withApplication:@"XspfQT"];
136 masaki 69 [rep setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"lastPlayDate"];
137 masaki 10 }
138 masaki 2 - (IBAction)add:(id)sender
139     {
140     NSOpenPanel *panel = [NSOpenPanel openPanel];
141    
142     [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]];
143     [panel setAllowsMultipleSelection:YES];
144 masaki 9 [panel setDelegate:self];
145 masaki 2
146     [panel beginSheetForDirectory:nil
147     file:nil
148     types:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]
149 masaki 8 modalForWindow:[self window]
150 masaki 2 modalDelegate:self
151     didEndSelector:@selector(endOpenPanel:::)
152     contextInfo:NULL];
153     }
154    
155 masaki 13
156     - (NSInteger)registerWithURL:(NSURL *)url
157     {
158     id obj = [NSEntityDescription insertNewObjectForEntityForName:@"Xspf"
159     inManagedObjectContext:[appDelegate managedObjectContext]];
160     if(!obj) return 1;
161    
162     id info = [NSEntityDescription insertNewObjectForEntityForName:@"Info"
163     inManagedObjectContext:[appDelegate managedObjectContext]];
164     if(!info) {
165     [[appDelegate managedObjectContext] deleteObject:obj];
166     return 2;
167     }
168    
169     [obj setValue:info forKey:@"information"];
170     [obj setValue:url forKey:@"url"];
171     [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"registerDate"];
172    
173 masaki 50 // will set in XspfMMovieLoadRequest.
174 masaki 35 // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"modificationDate"];
175     // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"creationDate"];
176 masaki 33
177 masaki 54 id<HMChannel> channel = [appDelegate channel];
178 masaki 50 id<HMRequest> request = [XspfMCheckFileModifiedRequest requestWithObject:obj url:url];
179 masaki 13 [channel putRequest:request];
180 masaki 50 request = [XspfMMovieLoadRequest requestWithObject:obj url:url];
181     [channel putRequest:request];
182 masaki 13
183 masaki 35 // [controller performSelector:@selector(setSelectedObjects:) withObject:[NSArray arrayWithObject:obj] afterDelay:0.0];
184 masaki 13
185     return noErr;
186     }
187 masaki 2 - (void)endOpenPanel:(NSOpenPanel *)panel :(NSInteger)returnCode :(void *)context
188     {
189 masaki 9 [panel orderOut:nil];
190    
191 masaki 2 if(returnCode == NSCancelButton) return;
192    
193     NSArray *URLs = [panel URLs];
194     if([URLs count] == 0) return;
195    
196     [progressBar setUsesThreadedAnimation:YES];
197    
198     [NSApp beginSheet:progressPanel
199 masaki 8 modalForWindow:[self window]
200 masaki 2 modalDelegate:nil
201     didEndSelector:Nil
202     contextInfo:NULL];
203     [progressBar startAnimation:self];
204     [progressMessage setStringValue:@"During register."];
205    
206     for(id URL in URLs) {
207     [self registerWithURL:URL];
208     }
209    
210     [progressBar stopAnimation:self];
211     [progressPanel orderOut:self];
212     [NSApp endSheet:progressPanel];
213     }
214    
215 masaki 25 #pragma mark#### Other methods ####
216     - (void)changeViewType:(XspfMViewType)viewType
217     {
218     if(currentListViewType == viewType) return;
219     currentListViewType = viewType;
220    
221     NSString *className = nil;
222     switch(currentListViewType) {
223     case typeCollectionView:
224     className = @"XspfMCollectionViewController";
225     break;
226     case typeTableView:
227     className = @"XspfMListViewController";
228     break;
229     }
230     if(!className) return;
231    
232     NSViewController *targetContorller = [viewControllers objectForKey:className];
233     if(!targetContorller) {
234     targetContorller = [[[NSClassFromString(className) alloc] init] autorelease];
235     if(!targetContorller) return;
236     [viewControllers setObject:targetContorller forKey:className];
237 masaki 30 [targetContorller setRepresentedObject:controller];
238 masaki 25 }
239    
240     [[listViewController view] removeFromSuperview];
241     listViewController = targetContorller;
242     [listView addSubview:[listViewController view]];
243     [[listViewController view] setFrame:[listView bounds]];
244     }
245 masaki 2
246 masaki 5
247 masaki 43 - (void)setupXspfLists
248 masaki 36 {
249 masaki 47 if(libraryViewController) return;
250    
251 masaki 41 libraryViewController = [[XspfMLibraryViewController alloc] init];
252 masaki 37 [libraryViewController setRepresentedObject:listController];
253     [libraryView addSubview:[libraryViewController view]];
254     [[libraryViewController view] setFrame:[libraryView bounds]];
255 masaki 36 }
256 masaki 47 - (void)setupDetailView
257 masaki 6 {
258 masaki 47 if(detailViewController) return;
259 masaki 6
260 masaki 47 detailViewController = [[XspfMDetailViewController alloc] init];
261     [detailViewController setRepresentedObject:controller];
262     [detailView addSubview:[detailViewController view]];
263     [[detailViewController view] setFrame:[detailView bounds]];
264 masaki 6 }
265 masaki 5
266 masaki 8 #pragma mark#### NSWidnow Delegate ####
267     /**
268     Returns the NSUndoManager for the application. In this case, the manager
269     returned is that of the managed object context for the application.
270     */
271 masaki 6
272 masaki 8 - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
273     return [[appDelegate managedObjectContext] undoManager];
274     }
275    
276 masaki 9 #pragma mark#### NSOpenPanel Delegate ####
277     - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
278     {
279     NSManagedObjectContext *moc = [appDelegate managedObjectContext];
280     NSError *error = nil;
281     NSFetchRequest *fetch;
282     NSInteger num;
283     NSURL *url = [NSURL fileURLWithPath:filename];
284    
285     fetch = [[[NSFetchRequest alloc] init] autorelease];
286     [fetch setEntity:[NSEntityDescription entityForName:@"Xspf" inManagedObjectContext:moc]];
287 masaki 16 NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"urlString LIKE %@", [url absoluteString]];
288     [fetch setPredicate:aPredicate];
289 masaki 9 num = [moc countForFetchRequest:fetch error:&error];
290     if(error) {
291     NSLog(@"%@", [error localizedDescription]);
292     return NO;
293     }
294    
295     return num == 0;
296     }
297    
298 masaki 5 #pragma mark#### Test ####
299 masaki 2 - (IBAction)test01:(id)sender
300     {
301 masaki 47 //
302 masaki 2 }
303     - (IBAction)test02:(id)sender
304     {
305 masaki 10 NSResponder *responder = [[self window] firstResponder];
306     while(responder) {
307     NSLog(@"Responder -> %@", responder);
308     responder = [responder nextResponder];
309     }
310 masaki 2 }
311     - (IBAction)test03:(id)sender
312     {
313    
314     id moc = [appDelegate managedObjectContext];
315    
316 masaki 54 NSLog(@"Updated count -> %d", [[moc updatedObjects] count]);
317 masaki 2 }
318     @end

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