Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfQT/XspfQTInformationWindowController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 136 - (hide annotations) (download)
Sun Feb 8 13:59:48 2009 UTC (15 years, 2 months ago) by masaki
File size: 5220 byte(s)
情報パネルにビデオ、サウンドのフォーマットを追加。
1 masaki 63 //
2     // XspfQTInformationWindowController.m
3     // XspfQT
4     //
5     // Created by Hori,Masaki on 08/09/14.
6     // Copyright 2008 masakih. All rights reserved.
7     //
8    
9     #import "XspfQTInformationWindowController.h"
10 masaki 72 #import "XspfQTDocument.h"
11 masaki 63
12    
13     @implementation XspfQTInformationWindowController
14     static XspfQTInformationWindowController *sharedInstance = nil;
15    
16     + (XspfQTInformationWindowController *)sharedInstance
17     {
18     @synchronized(self) {
19     if (sharedInstance == nil) {
20     [[self alloc] init]; // assignment not done here
21     }
22     }
23     return sharedInstance;
24     }
25    
26     + (id)allocWithZone:(NSZone *)zone
27     {
28     @synchronized(self) {
29     if (sharedInstance == nil) {
30     sharedInstance = [super allocWithZone:zone];
31     return sharedInstance; // assignment and return on first allocation
32     }
33     }
34     return nil; //on subsequent allocation attempts return nil
35     }
36    
37     - (id)copyWithZone:(NSZone *)zone
38     {
39     return self;
40     }
41    
42     - (id)retain
43     {
44     return self;
45     }
46    
47     - (unsigned)retainCount
48     {
49     return UINT_MAX; //denotes an object that cannot be released
50     }
51    
52     - (void)release
53     {
54     //do nothing
55     }
56    
57     - (id)autorelease
58     {
59     return self;
60     }
61    
62     #pragma mark-
63     - (id)init
64     {
65     [super initWithWindowNibName:@"XspfQTImformation"];
66     observedDocs = [[NSMutableArray array] retain];
67     return self;
68     }
69    
70 masaki 110 - (void)notify
71     {
72     [self willChangeValueForKey:@"movieAttributes"];
73 masaki 133 [self performSelector:@selector(didChangeValueForKey:)
74     withObject:@"movieAttributes"
75     afterDelay:0.0];
76 masaki 110 [self willChangeValueForKey:@"currentTrack"];
77 masaki 133 [self performSelector:@selector(didChangeValueForKey:)
78     withObject:@"currentTrack"
79     afterDelay:0.0];
80 masaki 136 [self willChangeValueForKey:@"soundTrackAttributes"];
81     [self performSelector:@selector(didChangeValueForKey:)
82     withObject:@"soundTrackAttributes"
83     afterDelay:0.0];
84     [self willChangeValueForKey:@"videoTrackAttributes"];
85     [self performSelector:@selector(didChangeValueForKey:)
86     withObject:@"videoTrackAttributes"
87     afterDelay:0.0];
88 masaki 110 }
89    
90 masaki 63 - (void)windowDidLoad
91     {
92     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
93     [nc addObserver:self
94     selector:@selector(notifee:)
95     name:NSWindowDidBecomeMainNotification
96     object:nil];
97     [nc addObserver:self
98     selector:@selector(notifee:)
99     name:NSWindowDidResignMainNotification
100     object:nil];
101     [nc addObserver:self
102     selector:@selector(notifee:)
103 masaki 133 name:NSWindowDidResizeNotification
104     object:nil];
105    
106     [nc addObserver:self
107     selector:@selector(notifee:)
108 masaki 63 name:NSApplicationDidBecomeActiveNotification
109     object:NSApp];
110     [nc addObserver:self
111     selector:@selector(notifee:)
112     name:NSApplicationDidHideNotification
113     object:NSApp];
114     [nc addObserver:self
115     selector:@selector(notifee:)
116     name:NSApplicationDidHideNotification
117     object:NSApp];
118 masaki 133
119 masaki 63 [nc addObserver:self
120     selector:@selector(xspfDocumentWillCloseNotification:)
121 masaki 72 name:XspfQTDocumentWillCloseNotification
122 masaki 63 object:nil];
123    
124     }
125     - (void)dealloc
126     {
127     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
128     [nc removeObserver:self];
129    
130     [observedDocs release];
131    
132     [super dealloc];
133     }
134    
135 masaki 136 - (void)addObservingDocument:(id)doc
136 masaki 63 {
137 masaki 136 if(!doc) return;
138 masaki 63
139     if(![observedDocs containsObject:doc]) {
140     [doc addObserver:self
141     forKeyPath:@"trackList.qtMovie"
142     options:0
143     context:NULL];
144     [observedDocs addObject:doc];
145     }
146 masaki 136 }
147     - (id)currentTrack
148     {
149     id doc = [[NSDocumentController sharedDocumentController] currentDocument];
150     if(!doc) return nil;
151     [self addObservingDocument:doc];
152 masaki 63
153     return [doc valueForKeyPath:@"trackList.currentTrack"];
154     }
155     - (id)movieAttributes
156     {
157     id doc = [[NSDocumentController sharedDocumentController] currentDocument];
158     if(!doc) return nil;
159 masaki 136 [self addObservingDocument:doc];
160 masaki 63
161     return [doc valueForKeyPath:@"trackList.qtMovie.movieAttributes"];
162     }
163 masaki 136 - (id)soundTrackAttributes
164     {
165     id doc = [[NSDocumentController sharedDocumentController] currentDocument];
166     if(!doc) return nil;
167     [self addObservingDocument:doc];
168    
169     id movie = [doc valueForKeyPath:@"trackList.qtMovie"];
170     NSArray *soundTracks = [movie tracksOfMediaType:QTMediaTypeSound];
171     if(!soundTracks ||[soundTracks count] == 0) return nil;
172    
173     return [[soundTracks objectAtIndex:0] trackAttributes];
174     }
175     - (id)videoTrackAttributes
176     {
177     id doc = [[NSDocumentController sharedDocumentController] currentDocument];
178     if(!doc) return nil;
179     [self addObservingDocument:doc];
180    
181     id movie = [doc valueForKeyPath:@"trackList.qtMovie"];
182     NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo];
183     if(!videoTracks ||[videoTracks count] == 0) return nil;
184    
185     return [[videoTracks objectAtIndex:0] trackAttributes];
186     }
187    
188 masaki 63 - (void)observeValueForKeyPath:(NSString *)keyPath
189     ofObject:(id)object
190     change:(NSDictionary *)change
191     context:(void *)context
192     {
193     if([keyPath isEqualToString:@"trackList.qtMovie"]) {
194 masaki 110 [self notify];
195 masaki 63 }
196     }
197    
198     - (void)xspfDocumentWillCloseNotification:(id)notification
199     {
200     id doc = [notification object];
201    
202 masaki 110 if(![observedDocs containsObject:doc]) return;
203    
204 masaki 63 [doc removeObserver:self forKeyPath:@"trackList.qtMovie"];
205     [observedDocs removeObject:doc];
206     [docController setContent:nil];
207 masaki 110 [currentTrackController setContent:nil];
208    
209     [self notify];
210 masaki 63 }
211     - (void)notifee:(id)notification
212     {
213 masaki 110 [self notify];
214 masaki 63 }
215    
216     @end

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