1 /* -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*****************************************************************************
3 * RemoteControlContainer.m
6 * Created by Martin Kahr on 11.03.06 under a MIT-style license.
7 * Copyright (c) 2006 martinkahr.com. All rights reserved.
9 * Code modified and adapted to OpenOffice.org
10 * by Eric Bachard on 11.08.2008 under the same License
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
22 * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
25 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30 *****************************************************************************/
32 #import "RemoteControlContainer.h"
34 @implementation RemoteControlContainer
36 - (id) initWithDelegate: (id) _remoteControlDelegate {
37 if ( (self = [super initWithDelegate:_remoteControlDelegate]) ) {
38 remoteControls = [[NSMutableArray alloc] init];
40 NSLog( @"Apple Remote: ControlContainer initWithDelegate ok");
43 NSLog( @"Apple Remote: RemoteControlContainer initWithDelegate failed");
51 [self stopListening: self];
52 [remoteControls release];
56 - (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz {
58 RemoteControl* remoteControl = [[clazz alloc] initWithDelegate: delegate];
60 [remoteControls addObject: remoteControl];
61 [remoteControl addObserver: self forKeyPath:@"listeningToRemote" options:NSKeyValueObservingOptionNew context:nil];
66 NSLog( @"Apple Remote: ControlContainer instantiateAndAddRemoteControlDeviceWithClass failed");
73 - (unsigned int) count {
74 return [remoteControls count];
78 [self willChangeValueForKey:@"listeningToRemote"];
79 [self didChangeValueForKey:@"listeningToRemote"];
82 NSLog( @"Apple Remote: reset... (after listening)");
86 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
94 - (void) setListeningToRemote: (BOOL) value {
95 for(NSUInteger i=0; i < [remoteControls count]; i++) {
96 [[remoteControls objectAtIndex: i] setListeningToRemote: value];
98 if (value && value != [self isListeningToRemote]) [self performSelector:@selector(reset) withObject:nil afterDelay:0.01];
100 - (BOOL) isListeningToRemote {
101 for(NSUInteger i=0; i < [remoteControls count]; i++) {
102 if ([[remoteControls objectAtIndex: i] isListeningToRemote]) {
109 - (void) startListening: (id) sender {
111 NSLog(@"Apple Remote: start listening to events... ");
113 for(NSUInteger i=0; i < [remoteControls count]; i++) {
114 [[remoteControls objectAtIndex: i] startListening: sender];
117 - (void) stopListening: (id) sender {
119 NSLog(@"Apple Remote: stopListening to events... ");
121 for(NSUInteger i=0; i < [remoteControls count]; i++) {
122 [[remoteControls objectAtIndex: i] stopListening: sender];
126 - (BOOL) isOpenInExclusiveMode {
128 for(NSUInteger i=0; i < [remoteControls count]; i++) {
129 mode = mode && ([[remoteControls objectAtIndex: i] isOpenInExclusiveMode]);
133 - (void) setOpenInExclusiveMode: (BOOL) value {
134 for(NSUInteger i=0; i < [remoteControls count]; i++) {
135 [[remoteControls objectAtIndex: i] setOpenInExclusiveMode:value];
141 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */