Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMMainWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (hide annotations) (download)
Sun Nov 15 12:00:08 2009 UTC (14 years, 5 months ago) by masaki
Original Path: XspfManager/XspfManager.m
File size: 7616 byte(s)
[Mod] 不要なコメントアウトを削除。
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
20 masaki 16 @interface XspfManager(HMPrivate)
21 masaki 43 - (void)setupXspfLists;
22 masaki 47 - (void)setupDetailView;
23 masaki 25 - (void)changeViewType:(XspfMViewType)newType;
24     - (void)setCurrentListViewType:(XspfMViewType)newType;
25 masaki 16 @end
26    
27 masaki 2 @implementation XspfManager
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    
82 masaki 25 viewControllers = [[NSMutableDictionary alloc] init];
83 masaki 50
84 masaki 8 return self;
85 masaki 2 }
86 masaki 8 - (void)awakeFromNib
87     {
88 masaki 47 static BOOL didSetupOnMainMenu = NO;
89    
90     if(appDelegate && !didSetupOnMainMenu) {
91     didSetupOnMainMenu = YES;
92 masaki 49 [self window];
93 masaki 47 }
94 masaki 8 }
95 masaki 49 - (void)windowDidLoad
96     {
97     [self setupXspfLists];
98     [self setupDetailView];
99 masaki 50 if(currentListViewType == typeNotSelected) {
100     [self setCurrentListViewType:typeCollectionView];
101     }
102 masaki 49
103 masaki 50 [self showWindow:nil];
104 masaki 49 }
105 masaki 25 #pragma mark#### KVC ####
106 masaki 8 - (NSManagedObjectContext *)managedObjectContext
107     {
108     return [appDelegate managedObjectContext];
109     }
110 masaki 16 - (NSArrayController *)arrayController
111     {
112     return controller;
113     }
114 masaki 2
115 masaki 25 - (XspfMViewType)currentListViewType
116     {
117     return currentListViewType;
118     }
119     - (void)setCurrentListViewType:(XspfMViewType)newType
120     {
121     if(currentListViewType == newType) return;
122    
123     [self changeViewType:newType];
124     }
125 masaki 16
126 masaki 13 #pragma mark#### Actions ####
127 masaki 10 - (IBAction)openXspf:(id)sender
128     {
129 masaki 77 XSPFMXspfObject *rep = [controller valueForKeyPath:@"selection.self"];
130     [[NSWorkspace sharedWorkspace] openFile:rep.filePath withApplication:@"XspfQT"];
131     rep.lastPlayDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
132 masaki 10 }
133 masaki 2 - (IBAction)add:(id)sender
134     {
135     NSOpenPanel *panel = [NSOpenPanel openPanel];
136    
137     [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]];
138     [panel setAllowsMultipleSelection:YES];
139 masaki 9 [panel setDelegate:self];
140 masaki 2
141     [panel beginSheetForDirectory:nil
142     file:nil
143     types:[NSArray arrayWithObjects:@"xspf", @"com.masakih.xspf", nil]
144 masaki 8 modalForWindow:[self window]
145 masaki 2 modalDelegate:self
146     didEndSelector:@selector(endOpenPanel:::)
147     contextInfo:NULL];
148     }
149    
150 masaki 13
151     - (NSInteger)registerWithURL:(NSURL *)url
152     {
153 masaki 77 XSPFMXspfObject *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Xspf"
154     inManagedObjectContext:[appDelegate managedObjectContext]];
155 masaki 13 if(!obj) return 1;
156    
157 masaki 77 obj.url = url;
158     obj.registerDate = [NSDate dateWithTimeIntervalSinceNow:0.0];
159 masaki 13
160 masaki 79 // will set in XspfMCheckFileModifiedRequest.
161 masaki 35 // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"modificationDate"];
162     // [obj setValue:[NSDate dateWithTimeIntervalSinceNow:0.0] forKey:@"creationDate"];
163 masaki 33
164 masaki 54 id<HMChannel> channel = [appDelegate channel];
165 masaki 50 id<HMRequest> request = [XspfMCheckFileModifiedRequest requestWithObject:obj url:url];
166 masaki 13 [channel putRequest:request];
167 masaki 50 request = [XspfMMovieLoadRequest requestWithObject:obj url:url];
168     [channel putRequest:request];
169 masaki 13
170     return noErr;
171     }
172 masaki 2 - (void)endOpenPanel:(NSOpenPanel *)panel :(NSInteger)returnCode :(void *)context
173     {
174 masaki 9 [panel orderOut:nil];
175    
176 masaki 2 if(returnCode == NSCancelButton) return;
177    
178     NSArray *URLs = [panel URLs];
179     if([URLs count] == 0) return;
180    
181     [progressBar setUsesThreadedAnimation:YES];
182    
183     [NSApp beginSheet:progressPanel
184 masaki 8 modalForWindow:[self window]
185 masaki 2 modalDelegate:nil
186     didEndSelector:Nil
187     contextInfo:NULL];
188     [progressBar startAnimation:self];
189     [progressMessage setStringValue:@"During register."];
190    
191     for(id URL in URLs) {
192     [self registerWithURL:URL];
193     }
194    
195     [progressBar stopAnimation:self];
196     [progressPanel orderOut:self];
197     [NSApp endSheet:progressPanel];
198     }
199    
200 masaki 25 #pragma mark#### Other methods ####
201     - (void)changeViewType:(XspfMViewType)viewType
202     {
203     if(currentListViewType == viewType) return;
204     currentListViewType = viewType;
205    
206     NSString *className = nil;
207     switch(currentListViewType) {
208     case typeCollectionView:
209     className = @"XspfMCollectionViewController";
210     break;
211     case typeTableView:
212     className = @"XspfMListViewController";
213     break;
214     }
215     if(!className) return;
216    
217     NSViewController *targetContorller = [viewControllers objectForKey:className];
218     if(!targetContorller) {
219     targetContorller = [[[NSClassFromString(className) alloc] init] autorelease];
220     if(!targetContorller) return;
221     [viewControllers setObject:targetContorller forKey:className];
222 masaki 30 [targetContorller setRepresentedObject:controller];
223 masaki 25 }
224 masaki 79
225 masaki 25 [[listViewController view] removeFromSuperview];
226     listViewController = targetContorller;
227     [listView addSubview:[listViewController view]];
228     [[listViewController view] setFrame:[listView bounds]];
229     }
230 masaki 2
231 masaki 5
232 masaki 43 - (void)setupXspfLists
233 masaki 36 {
234 masaki 47 if(libraryViewController) return;
235    
236 masaki 41 libraryViewController = [[XspfMLibraryViewController alloc] init];
237 masaki 37 [libraryViewController setRepresentedObject:listController];
238     [libraryView addSubview:[libraryViewController view]];
239     [[libraryViewController view] setFrame:[libraryView bounds]];
240 masaki 36 }
241 masaki 47 - (void)setupDetailView
242 masaki 6 {
243 masaki 47 if(detailViewController) return;
244 masaki 6
245 masaki 47 detailViewController = [[XspfMDetailViewController alloc] init];
246     [detailViewController setRepresentedObject:controller];
247     [detailView addSubview:[detailViewController view]];
248     [[detailViewController view] setFrame:[detailView bounds]];
249 masaki 6 }
250 masaki 5
251 masaki 8 #pragma mark#### NSWidnow Delegate ####
252     /**
253     Returns the NSUndoManager for the application. In this case, the manager
254     returned is that of the managed object context for the application.
255     */
256 masaki 6
257 masaki 8 - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
258     return [[appDelegate managedObjectContext] undoManager];
259     }
260    
261 masaki 9 #pragma mark#### NSOpenPanel Delegate ####
262     - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
263     {
264     NSManagedObjectContext *moc = [appDelegate managedObjectContext];
265     NSError *error = nil;
266     NSFetchRequest *fetch;
267     NSInteger num;
268     NSURL *url = [NSURL fileURLWithPath:filename];
269    
270     fetch = [[[NSFetchRequest alloc] init] autorelease];
271     [fetch setEntity:[NSEntityDescription entityForName:@"Xspf" inManagedObjectContext:moc]];
272 masaki 16 NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"urlString LIKE %@", [url absoluteString]];
273     [fetch setPredicate:aPredicate];
274 masaki 9 num = [moc countForFetchRequest:fetch error:&error];
275     if(error) {
276     NSLog(@"%@", [error localizedDescription]);
277     return NO;
278     }
279    
280     return num == 0;
281     }
282    
283 masaki 5 #pragma mark#### Test ####
284 masaki 2 - (IBAction)test01:(id)sender
285     {
286 masaki 47 //
287 masaki 2 }
288     - (IBAction)test02:(id)sender
289     {
290 masaki 10 NSResponder *responder = [[self window] firstResponder];
291     while(responder) {
292     NSLog(@"Responder -> %@", responder);
293     responder = [responder nextResponder];
294     }
295 masaki 2 }
296     - (IBAction)test03:(id)sender
297     {
298    
299     id moc = [appDelegate managedObjectContext];
300    
301 masaki 54 NSLog(@"Updated count -> %d", [[moc updatedObjects] count]);
302 masaki 2 }
303     @end

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