merge the formfield patch from ooo-build
[ooovba.git] / apple_remote / RemoteControlContainer.m
blob40a222f2d829a704b070d47d36cb215b8a7b66eb
1 /*****************************************************************************
2  * RemoteControlContainer.m
3  * RemoteControlWrapper
4  *
5  * Created by Martin Kahr on 11.03.06 under a MIT-style license. 
6  * Copyright (c) 2006 martinkahr.com. All rights reserved.
7  *
8  * Code modified and adapted to OpenOffice.org 
9  * by Eric Bachard on 11.08.2008 under the same License
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a 
12  * copy of this software and associated documentation files (the "Software"),
13  * to deal in the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  * and/or sell copies of the Software, and to permit persons to whom the
16  * Software is furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included
19  * in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
24  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27  * THE SOFTWARE.
28  *
29  *****************************************************************************/
31 #import "RemoteControlContainer.h"
33 @implementation RemoteControlContainer
35 - (id) initWithDelegate: (id) _remoteControlDelegate {
36         if ( (self = [super initWithDelegate:_remoteControlDelegate]) ) {
37                 remoteControls = [[NSMutableArray alloc] init];
38 #ifdef DEBUG
39         NSLog(@"RemoteControlContainer initWithDelegate ok");
40         }
41     else {
42         NSLog(@"RemoteControlContainer initWithDelegate failed");
43 #endif
44     }
46         return self;
49 - (void) dealloc {
50         [self stopListening: self];
51         [remoteControls release];
52         [super dealloc];
55 - (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz {
56     BOOL toReturn = NO;
57     RemoteControl* remoteControl = [[clazz alloc] initWithDelegate: delegate];
58     if (remoteControl) {
59         [remoteControls addObject: remoteControl];
60         [remoteControl addObserver: self forKeyPath:@"listeningToRemote" options:NSKeyValueObservingOptionNew context:nil];
61         toReturn = YES;         
62     }
63 #ifdef DEBUG
64     else {
65         NSLog(@"RemoteControlContainer instantiateAndAddRemoteControlDeviceWithClass failed");
66         toReturn = NO;  
67     }
68 #endif
69     return toReturn;
72 - (unsigned int) count {
73         return [remoteControls count];
76 - (void) reset {
77         [self willChangeValueForKey:@"listeningToRemote"];
78         [self didChangeValueForKey:@"listeningToRemote"];
79 #ifdef DEBUG
80         // debug purpose
81     NSLog(@"reset... (after listening to remote)");
82 #endif
85 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
86         [self reset];
89 - (void) setListeningToRemote: (BOOL) value {
90         int i;
91         for(i=0; i < [remoteControls count]; i++) {
92                 [[remoteControls objectAtIndex: i] setListeningToRemote: value];
93         }
94         if (value && value != [self isListeningToRemote]) [self performSelector:@selector(reset) withObject:nil afterDelay:0.01];
96 - (BOOL) isListeningToRemote {
97         int i;
98         for(i=0; i < [remoteControls count]; i++) {
99                 if ([[remoteControls objectAtIndex: i] isListeningToRemote]) {
100                         return YES;
101                 }
102         }
103         return NO;
106 - (void) startListening: (id) sender {
107 #ifdef DEBUG
108         NSLog(@"startListening to events... ");
109 #endif
110         int i;
111         for(i=0; i < [remoteControls count]; i++) {
112                 [[remoteControls objectAtIndex: i] startListening: sender];
113         }       
115 - (void) stopListening: (id) sender {
116 #ifdef DEBUG
117         NSLog(@"stopListening to events... ");
118 #endif
119         int i;
120         for(i=0; i < [remoteControls count]; i++) {
121                 [[remoteControls objectAtIndex: i] stopListening: sender];
122         }       
125 - (BOOL) isOpenInExclusiveMode {
126         BOOL mode = YES;
127         int i;
128         for(i=0; i < [remoteControls count]; i++) {
129                 mode = mode && ([[remoteControls objectAtIndex: i] isOpenInExclusiveMode]);
130         }
131         return mode;    
133 - (void) setOpenInExclusiveMode: (BOOL) value {
134         int i;
135         for(i=0; i < [remoteControls count]; i++) {
136                 [[remoteControls objectAtIndex: i] setOpenInExclusiveMode:value];
137         }       
140 @end