Fixes the following build error when building Deployment:
[WebKit-https.git] / WebKitTools / DumpRenderTree / TextInputController.m
1 /*
2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #import "TextInputController.h"
30
31 #import <AppKit/NSInputManager.h>
32 #import <WebKit/WebDocument.h>
33 #import <WebKit/WebFrame.h>
34 #import <WebKit/WebFrameView.h>
35 #import <WebKit/WebView.h>
36
37 @implementation TextInputController
38
39 // FIXME: need to support attributed strings
40
41 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
42 {
43     if (aSelector == @selector(insertText:)
44             || aSelector == @selector(doCommand:)
45             || aSelector == @selector(setMarkedText:selectedFrom:length:)
46             || aSelector == @selector(unmarkText)
47             || aSelector == @selector(hasMarkedText)
48             || aSelector == @selector(conversationIdentifier)
49             || aSelector == @selector(substringFrom:length:)
50             || aSelector == @selector(markedRange)
51             || aSelector == @selector(selectedRange)
52             || aSelector == @selector(firstRectForCharactersFrom:length:)
53             || aSelector == @selector(characterIndexForPointX:Y:)
54             || aSelector == @selector(validAttributesForMarkedText))
55         return NO;
56     return YES;
57 }
58
59 + (NSString *)webScriptNameForSelector:(SEL)aSelector
60 {
61     if (aSelector == @selector(insertText:))
62         return @"insertText";
63     else if (aSelector == @selector(doCommand:))
64         return @"doCommand";
65     else if (aSelector == @selector(setMarkedText:selectedFrom:length:))
66         return @"setMarkedText";
67     else if (aSelector == @selector(substringFrom:length:))
68         return @"substringFromRange";
69     else if (aSelector == @selector(firstRectForCharactersFrom:length:))
70         return @"firstRectForCharacterRange";
71     else if (aSelector == @selector(characterIndexForPointX:Y:))
72         return @"characterIndexForPoint";
73
74     return nil;
75 }
76
77 - (id)initWithWebView:(WebView *)wv
78 {
79     self = [super init];
80     webView = wv;
81     return self;
82 }
83
84 - (NSObject <NSTextInput> *)textInput
85 {
86     NSView <NSTextInput> *view = [[[webView mainFrame] frameView] documentView];
87     return [view conformsToProtocol:@protocol(NSTextInput)] ? view : nil;
88 }
89
90 - (void)insertText:(NSString *)aString
91 {
92     NSObject <NSTextInput> *textInput = [self textInput];
93
94     if (textInput)
95         [textInput insertText:aString];
96 }
97
98 - (void)doCommand:(NSString *)aCommand
99 {
100     NSObject <NSTextInput> *textInput = [self textInput];
101
102     if (textInput)
103         [textInput doCommandBySelector:NSSelectorFromString(aCommand)];
104 }
105
106 - (void)setMarkedText:(NSString *)aString selectedFrom:(int)from length:(int)length
107 {
108     NSObject <NSTextInput> *textInput = [self textInput];
109  
110     if (textInput)
111         [textInput setMarkedText:aString selectedRange:NSMakeRange(from, length)];
112 }
113
114 - (void)unmarkText
115 {
116     NSObject <NSTextInput> *textInput = [self textInput];
117
118     if (textInput)
119         [textInput unmarkText];
120 }
121
122 - (BOOL)hasMarkedText
123 {
124     NSObject <NSTextInput> *textInput = [self textInput];
125
126     if (textInput)
127         return [textInput hasMarkedText];
128
129     return FALSE;
130 }
131
132 - (long)conversationIdentifier
133 {
134     NSObject <NSTextInput> *textInput = [self textInput];
135
136     if (textInput)
137         return [textInput conversationIdentifier];
138
139     return 0;
140 }
141
142 - (NSString *)substringFrom:(int)from length:(int)length
143 {
144     NSObject <NSTextInput> *textInput = [self textInput];
145
146     if (textInput)
147         return [[textInput attributedSubstringFromRange:NSMakeRange(from, length)] string];
148     
149     return @"";
150 }
151
152 - (NSArray *)markedRange
153 {
154     NSObject <NSTextInput> *textInput = [self textInput];
155
156     if (textInput) {
157         NSRange range = [textInput markedRange];
158         return [NSArray arrayWithObjects:[NSNumber numberWithUnsignedInt:range.location], [NSNumber numberWithUnsignedInt:range.length], nil];
159     }
160
161     return nil;
162 }
163
164 - (NSArray *)selectedRange
165 {
166     NSObject <NSTextInput> *textInput = [self textInput];
167
168     if (textInput) {
169         NSRange range = [textInput selectedRange];
170         return [NSArray arrayWithObjects:[NSNumber numberWithUnsignedInt:range.location], [NSNumber numberWithUnsignedInt:range.length], nil];
171     }
172
173     return nil;
174 }
175   
176
177 - (NSArray *)firstRectForCharactersFrom:(int)from length:(int)length
178 {
179     NSObject <NSTextInput> *textInput = [self textInput];
180
181     if (textInput) {
182         NSRect rect = [textInput firstRectForCharacterRange:NSMakeRange(from, length)];
183         return [NSArray arrayWithObjects:
184                     [NSNumber numberWithFloat:rect.origin.x],
185                     [NSNumber numberWithFloat:rect.origin.y],
186                     [NSNumber numberWithFloat:rect.size.width],
187                     [NSNumber numberWithFloat:rect.size.height],
188                     nil];
189     }
190
191     return nil;
192 }
193
194 - (int)characterIndexForPointX:(float)x Y:(float)y
195 {
196     NSObject <NSTextInput> *textInput = [self textInput];
197
198     if (textInput)
199         return [textInput characterIndexForPoint:NSMakePoint(x, y)];
200
201     return 0;
202 }
203
204 - (NSArray *)validAttributesForMarkedText
205 {
206     NSObject <NSTextInput> *textInput = [self textInput];
207
208     if (textInput)
209         return [textInput validAttributesForMarkedText];
210
211     return nil;
212 }
213
214 @end