Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfQT/XspfQTDocument.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (hide annotations) (download)
Sun Sep 14 16:52:24 2008 UTC (15 years, 7 months ago) by masaki
Original Path: XspfQT/XspfDocument.m
File size: 6274 byte(s)
XspfDocumentWillCloseNotificationを実装。
1 masaki 2 //
2     // MyDocument.m
3     // XspfQT
4     //
5     // Created by Hori,Masaki on 08/08/29.
6     // Copyright masakih 2008 . All rights reserved.
7     //
8    
9     #import "XspfDocument.h"
10 masaki 29 #import "XspfComponent.h"
11 masaki 2 #import "XspfMovieWindowController.h"
12     #import "XspfPlayListWindowController.h"
13    
14     @interface XspfDocument (Private)
15 masaki 29 - (void)setTrackList:(XspfComponent *)newList;
16     - (XspfComponent *)trackList;
17 masaki 31 - (NSXMLDocument *)XMLDocument;
18     - (NSData *)outputData;
19 masaki 2 @end
20    
21     @implementation XspfDocument
22    
23 masaki 61 NSString *XspfDocumentWillCloseNotification = @"XspfDocumentWillCloseNotification";
24    
25    
26 masaki 2 - (id)init
27     {
28     self = [super init];
29     if (self) {
30    
31     // Add your subclass-specific initialization here.
32     // If an error occurs here, send a [self release] message and return nil.
33    
34     }
35     return self;
36     }
37    
38     - (void)makeWindowControllers
39     {
40     playListWindowController = [[XspfPlayListWindowController alloc] init];
41     [self addWindowController:playListWindowController];
42    
43 masaki 33 movieWindowController = [[XspfMovieWindowController alloc] init];
44 masaki 42 [movieWindowController setShouldCloseDocument:YES];
45 masaki 2 [self addWindowController:movieWindowController];
46     [movieWindowController setQtMovie:[[self trackList] qtMovie]];
47     }
48     //- (NSString *)windowNibName
49     //{
50     // // Override returning the nib file name of the document
51     // // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
52     // return @"MyDocument";
53     //}
54    
55     - (void)windowControllerDidLoadNib:(NSWindowController *)windowController
56     {
57     [super windowControllerDidLoadNib:windowController];
58     // Add any code here that needs to be executed once the windowController has loaded the document's window.
59     // [self setQtMovie:[[self trackList] qtMovie]];
60     }
61    
62     - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
63     {
64     // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil.
65    
66     // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead.
67    
68     // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead.
69 masaki 31
70     return [self outputData];
71     //
72     //
73     //
74    
75 masaki 2 if ( outError != NULL ) {
76     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
77     }
78     return nil;
79     }
80    
81     - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
82     {
83     // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO.
84    
85     // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead.
86    
87     // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead.
88    
89     NSError *error = nil;
90 masaki 10 NSXMLDocument *d = [[[NSXMLDocument alloc] initWithData:data
91     options:0
92     error:&error] autorelease];
93 masaki 2 NSXMLElement *root = [d rootElement];
94    
95     NSArray *trackListElems;
96 masaki 14 trackListElems = [root elementsForName:@"trackList"];
97     if(!trackListElems || [trackListElems count] < 1) {
98 masaki 2 if ( outError != NULL ) {
99     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
100     }
101     return NO;
102     }
103    
104 masaki 29 id t = [XspfComponent xspfComponemtWithXMLElement:[trackListElems objectAtIndex:0]];
105 masaki 39 if(![t title]) {
106     [t setTitle:[[[self fileURL] path] lastPathComponent]];
107     }
108 masaki 2 [self setTrackList:t];
109     // NSLog(@"trackList -> %@", trackList);
110    
111     // [self setQtMovie:[[self trackList] qtMovie]];
112    
113     return YES;
114     }
115    
116     - (void)dealloc
117     {
118     [trackList release];
119     [playListWindowController release];
120 masaki 42 [movieWindowController release];
121 masaki 2
122     [super dealloc];
123     }
124     - (NSString *)displayName
125     {
126     NSString *trackTitle = [[[self trackList] currentTrack] title];
127     if(trackTitle) {
128     return [NSString stringWithFormat:@"%@ - %@",
129     [super displayName], trackTitle];
130     }
131    
132     return [super displayName];
133     }
134 masaki 42 - (void)close
135     {
136 masaki 61 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
137     [nc postNotificationName:XspfDocumentWillCloseNotification object:self];
138    
139 masaki 42 [self removeWindowController:playListWindowController];
140     [playListWindowController release];
141     playListWindowController = nil;
142    
143     [self removeWindowController:movieWindowController];
144     [movieWindowController release];
145     movieWindowController = nil;
146    
147     [super close];
148     }
149    
150 masaki 33 - (IBAction)togglePlayAndPause:(id)sender
151     {
152     [movieWindowController togglePlayAndPause:sender];
153     }
154 masaki 2 - (IBAction)showPlayList:(id)sender
155     {
156     [playListWindowController showWindow:self];
157     }
158    
159 masaki 29 - (void)setTrackList:(XspfComponent *)newList
160 masaki 2 {
161     if(trackList == newList) return;
162    
163     [trackList autorelease];
164     trackList = [newList retain];
165     }
166 masaki 29 - (XspfComponent *)trackList
167 masaki 2 {
168     return trackList;
169     }
170    
171     - (void)setPlayTrackindex:(unsigned)index
172     {
173 masaki 29 [[self trackList] setSelectionIndex:index];
174 masaki 2 }
175 masaki 31
176     - (NSData *)outputData
177     {
178     return [[self XMLDocument] XMLDataWithOptions:NSXMLNodePrettyPrint];
179     }
180     - (NSXMLDocument *)XMLDocument;
181     {
182     id element = [[self trackList] XMLElement];
183    
184     id root = [NSXMLElement elementWithName:@"playlist"];
185     [root addChild:element];
186     [root addAttribute:[NSXMLNode attributeWithName:@"version"
187     stringValue:@"0"]];
188     [root addAttribute:[NSXMLNode attributeWithName:@"xmlns"
189     stringValue:@"http://xspf.org/ns/0/"]];
190    
191    
192     id d = [[[NSXMLDocument alloc] initWithRootElement:root] autorelease];
193     [d setVersion:@"1.0"];
194     [d setCharacterEncoding:@"UTF-8"];
195    
196     return d;
197     }
198 masaki 42
199 masaki 55 - (void)insertItem:(XspfComponent *)item atIndex:(NSInteger)index
200     {
201     //
202     }
203     - (void)removeItem:(XspfComponent *)item
204     {
205     [movieWindowController stop];
206     [[self trackList] removeChild:item];
207     }
208    
209 masaki 31 - (IBAction)dump:(id)sender
210     {
211     NSString *s = [[[NSString alloc] initWithData:[self outputData]
212     encoding:NSUTF8StringEncoding] autorelease];
213    
214     NSLog(@"%@", s);
215     }
216 masaki 2 @end
217    

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