Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


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

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