Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfQT/XspfQTDocument.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 75 - (hide annotations) (download)
Wed Sep 17 11:36:05 2008 UTC (15 years, 7 months ago) by masaki
File size: 5620 byte(s)
itemが削除されるとき再生を停止してはいけない!
1 masaki 2 //
2 masaki 72 // XspfQTDocument.m
3 masaki 2 // XspfQT
4     //
5     // Created by Hori,Masaki on 08/08/29.
6     // Copyright masakih 2008 . All rights reserved.
7     //
8    
9 masaki 72 #import "XspfQTDocument.h"
10     #import "XspfQTComponent.h"
11     #import "XspfQTMovieWindowController.h"
12     #import "XspfQTPlayListWindowController.h"
13 masaki 2
14 masaki 72 @interface XspfQTDocument (Private)
15     - (void)setTrackList:(XspfQTComponent *)newList;
16     - (XspfQTComponent *)trackList;
17 masaki 31 - (NSXMLDocument *)XMLDocument;
18     - (NSData *)outputData;
19 masaki 2 @end
20    
21 masaki 72 @implementation XspfQTDocument
22 masaki 2
23 masaki 72 NSString *XspfQTDocumentWillCloseNotification = @"XspfQTDocumentWillCloseNotification";
24 masaki 61
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 masaki 72 playListWindowController = [[XspfQTPlayListWindowController alloc] init];
41 masaki 2 [self addWindowController:playListWindowController];
42    
43 masaki 72 movieWindowController = [[XspfQTMovieWindowController alloc] init];
44 masaki 42 [movieWindowController setShouldCloseDocument:YES];
45 masaki 2 [self addWindowController:movieWindowController];
46     [movieWindowController setQtMovie:[[self trackList] qtMovie]];
47     }
48    
49     - (void)windowControllerDidLoadNib:(NSWindowController *)windowController
50     {
51     [super windowControllerDidLoadNib:windowController];
52     // Add any code here that needs to be executed once the windowController has loaded the document's window.
53     }
54    
55     - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
56     {
57     // 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.
58    
59     // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead.
60    
61     // 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.
62 masaki 31
63     return [self outputData];
64     //
65     //
66     //
67    
68 masaki 2 if ( outError != NULL ) {
69     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
70     }
71     return nil;
72     }
73    
74     - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
75     {
76     // 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.
77    
78     // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead.
79    
80     // 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.
81    
82     NSError *error = nil;
83 masaki 10 NSXMLDocument *d = [[[NSXMLDocument alloc] initWithData:data
84     options:0
85     error:&error] autorelease];
86 masaki 2 NSXMLElement *root = [d rootElement];
87    
88     NSArray *trackListElems;
89 masaki 14 trackListElems = [root elementsForName:@"trackList"];
90     if(!trackListElems || [trackListElems count] < 1) {
91 masaki 2 if ( outError != NULL ) {
92     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
93     }
94     return NO;
95     }
96    
97 masaki 72 id t = [XspfQTComponent xspfComponemtWithXMLElement:[trackListElems objectAtIndex:0]];
98 masaki 39 if(![t title]) {
99     [t setTitle:[[[self fileURL] path] lastPathComponent]];
100     }
101 masaki 71 [self setTrackList:t];
102 masaki 2
103     return YES;
104     }
105    
106     - (void)dealloc
107     {
108     [trackList release];
109     [playListWindowController release];
110 masaki 42 [movieWindowController release];
111 masaki 2
112     [super dealloc];
113     }
114 masaki 71
115 masaki 42 - (void)close
116     {
117 masaki 61 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
118 masaki 72 [nc postNotificationName:XspfQTDocumentWillCloseNotification object:self];
119 masaki 61
120 masaki 42 [self removeWindowController:playListWindowController];
121     [playListWindowController release];
122     playListWindowController = nil;
123    
124     [self removeWindowController:movieWindowController];
125     [movieWindowController release];
126     movieWindowController = nil;
127    
128     [super close];
129     }
130    
131 masaki 33 - (IBAction)togglePlayAndPause:(id)sender
132     {
133     [movieWindowController togglePlayAndPause:sender];
134     }
135 masaki 2 - (IBAction)showPlayList:(id)sender
136     {
137     [playListWindowController showWindow:self];
138     }
139    
140 masaki 72 - (void)setTrackList:(XspfQTComponent *)newList
141 masaki 2 {
142     if(trackList == newList) return;
143    
144     [trackList autorelease];
145     trackList = [newList retain];
146     }
147 masaki 72 - (XspfQTComponent *)trackList
148 masaki 2 {
149     return trackList;
150     }
151    
152     - (void)setPlayTrackindex:(unsigned)index
153     {
154 masaki 29 [[self trackList] setSelectionIndex:index];
155 masaki 2 }
156 masaki 31
157     - (NSData *)outputData
158     {
159     return [[self XMLDocument] XMLDataWithOptions:NSXMLNodePrettyPrint];
160     }
161 masaki 71 - (NSXMLDocument *)XMLDocument
162 masaki 31 {
163     id element = [[self trackList] XMLElement];
164    
165     id root = [NSXMLElement elementWithName:@"playlist"];
166     [root addChild:element];
167     [root addAttribute:[NSXMLNode attributeWithName:@"version"
168     stringValue:@"0"]];
169     [root addAttribute:[NSXMLNode attributeWithName:@"xmlns"
170     stringValue:@"http://xspf.org/ns/0/"]];
171    
172    
173     id d = [[[NSXMLDocument alloc] initWithRootElement:root] autorelease];
174     [d setVersion:@"1.0"];
175     [d setCharacterEncoding:@"UTF-8"];
176    
177     return d;
178     }
179 masaki 42
180 masaki 72 - (void)insertItem:(XspfQTComponent *)item atIndex:(NSInteger)index
181 masaki 55 {
182     //
183     }
184 masaki 72 - (void)removeItem:(XspfQTComponent *)item
185 masaki 55 {
186 masaki 75 // [movieWindowController stop];
187 masaki 55 [[self trackList] removeChild:item];
188     }
189    
190 masaki 31 - (IBAction)dump:(id)sender
191     {
192     NSString *s = [[[NSString alloc] initWithData:[self outputData]
193     encoding:NSUTF8StringEncoding] autorelease];
194    
195     NSLog(@"%@", s);
196     }
197 masaki 2 @end
198    

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