Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfQT/XspfQTDocument.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 116 - (hide annotations) (download)
Sun Sep 28 12:05:04 2008 UTC (15 years, 6 months ago) by masaki
File size: 4426 byte(s)
XspfQTPlaylistを追加。
それを使用するように色々変更。
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 masaki 116 - (void)setPlaylist:(XspfQTComponent *)newList;
16     - (XspfQTComponent *)playlist;
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 masaki 95 - (id)initWithType:(NSString *)typeName error:(NSError **)outError
26     {
27     [self init];
28    
29 masaki 116 id newPlaylist = [XspfQTComponent xspfPlaylist];
30     if(!newPlaylist) {
31 masaki 95 [self autorelease];
32     return nil;
33     }
34    
35 masaki 116 [self setPlaylist:newPlaylist];
36 masaki 95
37     return self;
38     }
39 masaki 2
40     - (void)makeWindowControllers
41     {
42 masaki 72 playListWindowController = [[XspfQTPlayListWindowController alloc] init];
43 masaki 2 [self addWindowController:playListWindowController];
44    
45 masaki 72 movieWindowController = [[XspfQTMovieWindowController alloc] init];
46 masaki 42 [movieWindowController setShouldCloseDocument:YES];
47 masaki 2 [self addWindowController:movieWindowController];
48     }
49    
50     - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
51     {
52 masaki 31 return [self outputData];
53 masaki 2 }
54    
55     - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
56     {
57     NSError *error = nil;
58 masaki 10 NSXMLDocument *d = [[[NSXMLDocument alloc] initWithData:data
59     options:0
60     error:&error] autorelease];
61 masaki 2 NSXMLElement *root = [d rootElement];
62 masaki 116 id pl = [XspfQTComponent xspfComponemtWithXMLElement:root];
63     [self setPlaylist:pl];
64 masaki 2
65 masaki 116 id t = [self trackList];
66 masaki 39 if(![t title]) {
67     [t setTitle:[[[self fileURL] path] lastPathComponent]];
68     }
69 masaki 2
70     return YES;
71     }
72    
73     - (void)dealloc
74     {
75 masaki 116 [playlist release];
76 masaki 2 [playListWindowController release];
77 masaki 42 [movieWindowController release];
78 masaki 2
79     [super dealloc];
80     }
81 masaki 71
82 masaki 42 - (void)close
83     {
84 masaki 61 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
85 masaki 72 [nc postNotificationName:XspfQTDocumentWillCloseNotification object:self];
86 masaki 61
87 masaki 42 [self removeWindowController:playListWindowController];
88     [playListWindowController release];
89     playListWindowController = nil;
90    
91     [self removeWindowController:movieWindowController];
92     [movieWindowController release];
93     movieWindowController = nil;
94    
95     [super close];
96     }
97    
98 masaki 33 - (IBAction)togglePlayAndPause:(id)sender
99     {
100     [movieWindowController togglePlayAndPause:sender];
101     }
102 masaki 2 - (IBAction)showPlayList:(id)sender
103     {
104     [playListWindowController showWindow:self];
105     }
106    
107 masaki 116 - (void)setPlaylist:(XspfQTComponent *)newList
108 masaki 2 {
109 masaki 116 if(playlist == newList) return;
110 masaki 2
111 masaki 116 [playlist autorelease];
112     playlist = [newList retain];
113 masaki 2 }
114 masaki 116 - (XspfQTComponent *)playlist
115     {
116     return playlist;
117     }
118    
119 masaki 72 - (XspfQTComponent *)trackList
120 masaki 2 {
121 masaki 116 return [playlist childAtIndex:0];
122 masaki 2 }
123    
124     - (void)setPlayTrackindex:(unsigned)index
125     {
126 masaki 29 [[self trackList] setSelectionIndex:index];
127 masaki 2 }
128 masaki 31
129     - (NSData *)outputData
130     {
131     return [[self XMLDocument] XMLDataWithOptions:NSXMLNodePrettyPrint];
132     }
133 masaki 71 - (NSXMLDocument *)XMLDocument
134 masaki 31 {
135 masaki 116 id root = [[self playlist] XMLElement];
136 masaki 31
137     id d = [[[NSXMLDocument alloc] initWithRootElement:root] autorelease];
138     [d setVersion:@"1.0"];
139     [d setCharacterEncoding:@"UTF-8"];
140    
141     return d;
142     }
143 masaki 42
144 masaki 89 - (void)insertComponentFromURL:(NSURL *)url atIndex:(NSUInteger)index
145     {
146     NSString *xmlElem;
147     xmlElem = [NSString stringWithFormat:@"<track><location>%@</location></track>",
148     [url absoluteString]];
149    
150     NSError *error = nil;
151     NSXMLElement *element = [[[NSXMLElement alloc] initWithXMLString:xmlElem error:&error] autorelease];
152     if(error) {
153     NSLog(@"%@", error);
154     @throw self;
155     }
156    
157     id new = [XspfQTComponent xspfComponemtWithXMLElement:element];
158     if(!new) {
159     @throw self;
160     }
161    
162     [self insertComponent:new atIndex:index];
163     }
164 masaki 86 - (void)insertComponent:(XspfQTComponent *)item atIndex:(NSUInteger)index
165 masaki 55 {
166 masaki 83 id undo = [self undoManager];
167 masaki 86 [undo registerUndoWithTarget:self selector:@selector(removeComponent:) object:item];
168 masaki 78 [[self trackList] insertChild:item atIndex:index];
169 masaki 55 }
170 masaki 86 - (void)removeComponent:(XspfQTComponent *)item
171 masaki 55 {
172 masaki 83 NSUInteger index = [[self trackList] indexOfChild:item];
173     if(index == NSNotFound) return;
174    
175     id undo = [self undoManager];
176 masaki 86 [[undo prepareWithInvocationTarget:self] insertComponent:item atIndex:index];
177 masaki 55 [[self trackList] removeChild:item];
178     }
179    
180 masaki 31 - (IBAction)dump:(id)sender
181     {
182     NSString *s = [[[NSString alloc] initWithData:[self outputData]
183     encoding:NSUTF8StringEncoding] autorelease];
184    
185     NSLog(@"%@", s);
186     }
187 masaki 2 @end
188    

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