diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-01-28 18:10:31 -0600 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-01-28 18:10:31 -0600 |
commit | 3d75a28274b2fb299c5a2ff5b017984054cac873 (patch) | |
tree | d7d52ce6b991857e6f60181c9bf9c14328784286 /apple_remote/source/RemoteControlContainer.m | |
parent | da15496978332189d3eb002b1c49e4b7fb6b2848 (diff) |
gbuildify apple_remote
Diffstat (limited to 'apple_remote/source/RemoteControlContainer.m')
-rw-r--r-- | apple_remote/source/RemoteControlContainer.m | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/apple_remote/source/RemoteControlContainer.m b/apple_remote/source/RemoteControlContainer.m new file mode 100644 index 000000000000..04a4c6c1cfe1 --- /dev/null +++ b/apple_remote/source/RemoteControlContainer.m @@ -0,0 +1,144 @@ +/***************************************************************************** + * RemoteControlContainer.m + * RemoteControlWrapper + * + * Created by Martin Kahr on 11.03.06 under a MIT-style license. + * Copyright (c) 2006 martinkahr.com. All rights reserved. + * + * Code modified and adapted to OpenOffice.org + * by Eric Bachard on 11.08.2008 under the same License + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *****************************************************************************/ + +#import "RemoteControlContainer.h" + +@implementation RemoteControlContainer + +- (id) initWithDelegate: (id) _remoteControlDelegate { + if ( (self = [super initWithDelegate:_remoteControlDelegate]) ) { + remoteControls = [[NSMutableArray alloc] init]; +#ifdef DEBUG + NSLog(@"RemoteControlContainer initWithDelegate ok"); + } + else { + NSLog(@"RemoteControlContainer initWithDelegate failed"); +#endif + } + + return self; +} + +- (void) dealloc { + [self stopListening: self]; + [remoteControls release]; + [super dealloc]; +} + +- (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz { + BOOL toReturn = NO; + RemoteControl* remoteControl = [[clazz alloc] initWithDelegate: delegate]; + if (remoteControl) { + [remoteControls addObject: remoteControl]; + [remoteControl addObserver: self forKeyPath:@"listeningToRemote" options:NSKeyValueObservingOptionNew context:nil]; + toReturn = YES; + } +#ifdef DEBUG + else { + NSLog(@"RemoteControlContainer instantiateAndAddRemoteControlDeviceWithClass failed"); + toReturn = NO; + } +#endif + return toReturn; +} + +- (unsigned int) count { + return [remoteControls count]; +} + +- (void) reset { + [self willChangeValueForKey:@"listeningToRemote"]; + [self didChangeValueForKey:@"listeningToRemote"]; +#ifdef DEBUG + // debug purpose + NSLog(@"reset... (after listening to remote)"); +#endif +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + [self reset]; + (void)keyPath; + (void)object; + (void)change; + (void)context; +} + +- (void) setListeningToRemote: (BOOL) value { + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + [[remoteControls objectAtIndex: i] setListeningToRemote: value]; + } + if (value && value != [self isListeningToRemote]) [self performSelector:@selector(reset) withObject:nil afterDelay:0.01]; +} +- (BOOL) isListeningToRemote { + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + if ([[remoteControls objectAtIndex: i] isListeningToRemote]) { + return YES; + } + } + return NO; +} + +- (void) startListening: (id) sender { +#ifdef DEBUG + NSLog(@"startListening to events... "); +#endif + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + [[remoteControls objectAtIndex: i] startListening: sender]; + } +} +- (void) stopListening: (id) sender { +#ifdef DEBUG + NSLog(@"stopListening to events... "); +#endif + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + [[remoteControls objectAtIndex: i] stopListening: sender]; + } +} + +- (BOOL) isOpenInExclusiveMode { + BOOL mode = YES; + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + mode = mode && ([[remoteControls objectAtIndex: i] isOpenInExclusiveMode]); + } + return mode; +} +- (void) setOpenInExclusiveMode: (BOOL) value { + unsigned int i; + for(i=0; i < [remoteControls count]; i++) { + [[remoteControls objectAtIndex: i] setOpenInExclusiveMode:value]; + } +} + +@end |