LibreOffice Module apple_remote (master) 1
RemoteControlContainer.m
Go to the documentation of this file.
1/* -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*****************************************************************************
3 * RemoteControlContainer.m
4 * RemoteControlWrapper
5 *
6 * Created by Martin Kahr on 11.03.06 under a MIT-style license.
7 * Copyright (c) 2006 martinkahr.com. All rights reserved.
8 *
9 * Code modified and adapted to OpenOffice.org
10 * by Eric Bachard on 11.08.2008 under the same License
11 *
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:
18 *
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
21 *
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
28 * THE SOFTWARE.
29 *
30 *****************************************************************************/
31
33
34@implementation RemoteControlContainer
35
36- (id) initWithDelegate: (id) _remoteControlDelegate {
37 if ( (self = [super initWithDelegate:_remoteControlDelegate]) ) {
38 remoteControls = [[NSMutableArray alloc] init];
39#ifdef DEBUG
40 NSLog( @"Apple Remote: ControlContainer initWithDelegate ok");
41 }
42 else {
43 NSLog( @"Apple Remote: RemoteControlContainer initWithDelegate failed");
44#endif
45 }
46
47 return self;
48}
49
50- (void) dealloc {
51 [self stopListening: self];
52 [remoteControls release];
53 [super dealloc];
54}
55
56- (BOOL) instantiateAndAddRemoteControlDeviceWithClass: (Class) clazz {
57 BOOL toReturn = NO;
58 RemoteControl* remoteControl = [[clazz alloc] initWithDelegate: delegate];
59 if (remoteControl) {
60 [remoteControls addObject: remoteControl];
61 [remoteControl addObserver: self forKeyPath:@"listeningToRemote" options:NSKeyValueObservingOptionNew context:nil];
62 toReturn = YES;
63 }
64#ifdef DEBUG
65 else {
66 NSLog( @"Apple Remote: ControlContainer instantiateAndAddRemoteControlDeviceWithClass failed");
67 toReturn = NO;
68 }
69#endif
70 return toReturn;
71}
72
73- (unsigned int) count {
74 return [remoteControls count];
75}
76
77- (void) reset {
78 [self willChangeValueForKey:@"listeningToRemote"];
79 [self didChangeValueForKey:@"listeningToRemote"];
80#ifdef DEBUG
81 // debug purpose
82 NSLog( @"Apple Remote: reset... (after listening)");
83#endif
84}
85
86- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
87 [self reset];
88 (void)keyPath;
89 (void)object;
90 (void)change;
91 (void)context;
92}
93
94- (void) setListeningToRemote: (BOOL) value {
95 for(NSUInteger i=0; i < [remoteControls count]; i++) {
96 [[remoteControls objectAtIndex: i] setListeningToRemote: value];
97 }
98 if (value && value != [self isListeningToRemote]) [self performSelector:@selector(reset) withObject:nil afterDelay:0.01];
99}
101 for(NSUInteger i=0; i < [remoteControls count]; i++) {
102 if ([[remoteControls objectAtIndex: i] isListeningToRemote]) {
103 return YES;
104 }
105 }
106 return NO;
107}
108
109- (void) startListening: (id) sender {
110#ifdef DEBUG
111 NSLog(@"Apple Remote: start listening to events... ");
112#endif
113 for(NSUInteger i=0; i < [remoteControls count]; i++) {
114 [[remoteControls objectAtIndex: i] startListening: sender];
115 }
116}
117- (void) stopListening: (id) sender {
118#ifdef DEBUG
119 NSLog(@"Apple Remote: stopListening to events... ");
120#endif
121 for(NSUInteger i=0; i < [remoteControls count]; i++) {
122 [[remoteControls objectAtIndex: i] stopListening: sender];
123 }
124}
125
127 BOOL mode = YES;
128 for(NSUInteger i=0; i < [remoteControls count]; i++) {
129 mode = mode && ([[remoteControls objectAtIndex: i] isOpenInExclusiveMode]);
130 }
131 return mode;
132}
133- (void) setOpenInExclusiveMode: (BOOL) value {
134 for(NSUInteger i=0; i < [remoteControls count]; i++) {
135 [[remoteControls objectAtIndex: i] setOpenInExclusiveMode:value];
136 }
137}
138
139@end
140
141/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
BOOL isListeningToRemote()
Definition: RemoteControl.m:72
BOOL isOpenInExclusiveMode()
Definition: RemoteControl.m:89
int i
ConversionMode mode
const wchar_t *typedef BOOL
const wchar_t *typedef int(__stdcall *DllNativeUnregProc)(int