Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


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

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