2011-02-04 Levi Weintraub <leviw@chromium.org>
[WebKit.git] / Source / WebCore / page / EditorClient.h
1 /*
2  * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
3  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
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  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #ifndef EditorClient_h
28 #define EditorClient_h
29
30 #include "CorrectionPanelInfo.h"
31 #include "EditorInsertAction.h"
32 #include "FloatRect.h"
33 #include "PlatformString.h"
34 #include "TextAffinity.h"
35 #include <wtf/Forward.h>
36 #include <wtf/Vector.h>
37
38 #if PLATFORM(MAC)
39 #ifdef __OBJC__
40 @class NSArray;
41 @class NSAttributedString;
42 @class NSData;
43 @class NSPasteboard;
44 @class NSString;
45 @class NSURL;
46 #else
47 class NSArray;
48 class NSAttributedString;
49 class NSData;
50 class NSPasteboard;
51 class NSString;
52 class NSURL;
53 #endif
54 #endif
55
56 namespace WebCore {
57
58 class ArchiveResource;
59 class CSSStyleDeclaration;
60 class DocumentFragment;
61 class EditCommand;
62 class Editor;
63 class Element;
64 class Frame;
65 class HTMLElement;
66 class KeyboardEvent;
67 class Node;
68 class Range;
69 class SpellChecker;
70 class VisibleSelection;
71 class VisiblePosition;
72
73 struct GrammarDetail {
74     int location;
75     int length;
76     Vector<String> guesses;
77     String userDescription;
78 };
79
80 enum TextCheckingType {
81     TextCheckingTypeSpelling    = 1 << 1,
82     TextCheckingTypeGrammar     = 1 << 2,
83     TextCheckingTypeLink        = 1 << 5,
84     TextCheckingTypeQuote       = 1 << 6,
85     TextCheckingTypeDash        = 1 << 7,
86     TextCheckingTypeReplacement = 1 << 8,
87     TextCheckingTypeCorrection  = 1 << 9
88 };
89
90 struct TextCheckingResult {
91     TextCheckingType type;
92     int location;
93     int length;
94     Vector<GrammarDetail> details;
95     String replacement;
96 };
97  
98 class EditorClient {
99 public:
100     virtual ~EditorClient() {  }
101     virtual void pageDestroyed() = 0;
102     
103     virtual bool shouldDeleteRange(Range*) = 0;
104     virtual bool shouldShowDeleteInterface(HTMLElement*) = 0;
105     virtual bool smartInsertDeleteEnabled() = 0; 
106     virtual bool isSelectTrailingWhitespaceEnabled() = 0;
107     virtual bool isContinuousSpellCheckingEnabled() = 0;
108     virtual void toggleContinuousSpellChecking() = 0;
109     virtual bool isGrammarCheckingEnabled() = 0;
110     virtual void toggleGrammarChecking() = 0;
111     virtual int spellCheckerDocumentTag() = 0;
112     
113     virtual bool isEditable() = 0;
114
115     virtual bool shouldBeginEditing(Range*) = 0;
116     virtual bool shouldEndEditing(Range*) = 0;
117     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) = 0;
118     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) = 0;
119     virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity, bool stillSelecting) = 0;
120     
121     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) = 0;
122     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) = 0;
123
124     virtual void didBeginEditing() = 0;
125     virtual void respondToChangedContents() = 0;
126     virtual void respondToChangedSelection() = 0;
127     virtual void didEndEditing() = 0;
128     virtual void didWriteSelectionToPasteboard() = 0;
129     virtual void didSetSelectionTypesForPasteboard() = 0;
130     
131     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) = 0;
132     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) = 0;
133     virtual void clearUndoRedoOperations() = 0;
134
135     virtual bool canUndo() const = 0;
136     virtual bool canRedo() const = 0;
137     
138     virtual void undo() = 0;
139     virtual void redo() = 0;
140
141     virtual void handleKeyboardEvent(KeyboardEvent*) = 0;
142     virtual void handleInputMethodKeydown(KeyboardEvent*) = 0;
143     
144     virtual void textFieldDidBeginEditing(Element*) = 0;
145     virtual void textFieldDidEndEditing(Element*) = 0;
146     virtual void textDidChangeInTextField(Element*) = 0;
147     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) = 0;
148     virtual void textWillBeDeletedInTextField(Element*) = 0;
149     virtual void textDidChangeInTextArea(Element*) = 0;
150
151 #if PLATFORM(MAC)
152     virtual NSString* userVisibleString(NSURL*) = 0;
153     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector< RefPtr<ArchiveResource> >&) = 0;
154     virtual void setInsertionPasteboard(NSPasteboard*) = 0;
155     virtual NSURL* canonicalizeURL(NSURL*) = 0;
156     virtual NSURL* canonicalizeURLString(NSString*) = 0;
157 #ifdef BUILDING_ON_TIGER
158     virtual NSArray* pasteboardTypesForSelection(Frame*) = 0;
159 #endif
160 #endif
161
162 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
163     virtual void uppercaseWord() = 0;
164     virtual void lowercaseWord() = 0;
165     virtual void capitalizeWord() = 0;
166     virtual void showSubstitutionsPanel(bool show) = 0;
167     virtual bool substitutionsPanelIsShowing() = 0;
168     virtual void toggleSmartInsertDelete() = 0;
169     virtual bool isAutomaticQuoteSubstitutionEnabled() = 0;
170     virtual void toggleAutomaticQuoteSubstitution() = 0;
171     virtual bool isAutomaticLinkDetectionEnabled() = 0;
172     virtual void toggleAutomaticLinkDetection() = 0;
173     virtual bool isAutomaticDashSubstitutionEnabled() = 0;
174     virtual void toggleAutomaticDashSubstitution() = 0;
175     virtual bool isAutomaticTextReplacementEnabled() = 0;
176     virtual void toggleAutomaticTextReplacement() = 0;
177     virtual bool isAutomaticSpellingCorrectionEnabled() = 0;
178     virtual void toggleAutomaticSpellingCorrection() = 0;
179 #endif
180
181     virtual void ignoreWordInSpellDocument(const String&) = 0;
182     virtual void learnWord(const String&) = 0;
183     virtual void checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength) = 0;
184     virtual String getAutoCorrectSuggestionForMisspelledWord(const String& misspelledWord) = 0;
185     virtual void checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) = 0;
186 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
187     virtual void checkTextOfParagraph(const UChar* text, int length, uint64_t checkingTypes, Vector<TextCheckingResult>& results) = 0;
188 #endif
189
190 #if SUPPORT_AUTOCORRECTION_PANEL
191     virtual void showCorrectionPanel(CorrectionPanelInfo::PanelType, const FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacmentString, const Vector<String>& alternativeReplacementStrings, Editor*) = 0;
192     virtual void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel) = 0;
193     virtual bool isShowingCorrectionPanel() = 0;
194 #endif
195
196     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail& detail) = 0;
197     virtual void updateSpellingUIWithMisspelledWord(const String&) = 0;
198     virtual void showSpellingUI(bool show) = 0;
199     virtual bool spellingUIIsShowing() = 0;
200     // For spellcheckers that support multiple languages, it's often important to be able to identify the language in order to provide more accurate correction suggestions. Caller can pass in more text in "context" to aid such spellcheckers on language identification. Noramlly it's the text surrounding the "word" for which we are getting correction suggestions.
201     virtual void getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) = 0;
202     virtual void willSetInputMethodState() = 0;
203     virtual void setInputMethodState(bool enabled) = 0;
204     virtual void requestCheckingOfString(SpellChecker*, int, const String&) = 0;
205 };
206
207 }
208
209 #endif // EditorClient_h