2011-02-28 Chang Shu <cshu@webkit.org>
[WebKit-https.git] / Source / WebKit / mac / WebCoreSupport / WebEditorClient.h
1 /*
2  * Copyright (C) 2006 Apple Computer, 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  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer. 
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution. 
14  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15  *     its contributors may be used to endorse or promote products derived
16  *     from this software without specific prior written permission. 
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #import <WebCore/Editor.h>
31 #import <WebCore/EditorClient.h>
32 #import <WebCore/TextCheckerClient.h>
33 #import <wtf/RetainPtr.h>
34 #import <wtf/Forward.h>
35 #import <wtf/Vector.h>
36
37 @class WebView;
38 @class WebEditorUndoTarget;
39
40 class WebEditorClient : public WebCore::EditorClient, public WebCore::TextCheckerClient {
41 public:
42     WebEditorClient(WebView *);
43     virtual ~WebEditorClient();
44     virtual void pageDestroyed();
45
46     virtual bool isGrammarCheckingEnabled();
47     virtual void toggleGrammarChecking();
48     virtual bool isContinuousSpellCheckingEnabled();
49     virtual void toggleContinuousSpellChecking();
50     virtual int spellCheckerDocumentTag();
51
52     virtual bool smartInsertDeleteEnabled();
53     virtual bool isSelectTrailingWhitespaceEnabled();
54
55     virtual bool shouldDeleteRange(WebCore::Range*);    
56     virtual bool shouldShowDeleteInterface(WebCore::HTMLElement*);
57
58     virtual bool shouldBeginEditing(WebCore::Range*);
59     virtual bool shouldEndEditing(WebCore::Range*);
60     virtual bool shouldInsertNode(WebCore::Node*, WebCore::Range*, WebCore::EditorInsertAction);
61     virtual bool shouldInsertText(const WTF::String&, WebCore::Range*, WebCore::EditorInsertAction);
62     virtual bool shouldChangeSelectedRange(WebCore::Range* fromRange, WebCore::Range* toRange, WebCore::EAffinity, bool stillSelecting);
63
64     virtual bool shouldApplyStyle(WebCore::CSSStyleDeclaration*, WebCore::Range*);
65     
66     virtual bool shouldMoveRangeAfterDelete(WebCore::Range* range, WebCore::Range* rangeToBeReplaced); 
67
68     virtual void didBeginEditing();
69     virtual void didEndEditing();
70     virtual void didWriteSelectionToPasteboard();
71     virtual void didSetSelectionTypesForPasteboard();
72
73     virtual NSString* userVisibleString(NSURL *);
74     virtual WebCore::DocumentFragment* documentFragmentFromAttributedString(NSAttributedString *, Vector< RefPtr<WebCore::ArchiveResource> >&);
75     virtual void setInsertionPasteboard(NSPasteboard *);
76     virtual NSURL* canonicalizeURL(NSURL*);
77     virtual NSURL* canonicalizeURLString(NSString*);
78 #ifdef BUILDING_ON_TIGER
79     virtual NSArray *pasteboardTypesForSelection(WebCore::Frame*);
80 #endif
81     
82 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
83     virtual void uppercaseWord();
84     virtual void lowercaseWord();
85     virtual void capitalizeWord();
86     virtual void showSubstitutionsPanel(bool show);
87     virtual bool substitutionsPanelIsShowing();
88     virtual void toggleSmartInsertDelete();
89     virtual bool isAutomaticQuoteSubstitutionEnabled();
90     virtual void toggleAutomaticQuoteSubstitution();
91     virtual bool isAutomaticLinkDetectionEnabled();
92     virtual void toggleAutomaticLinkDetection();
93     virtual bool isAutomaticDashSubstitutionEnabled();
94     virtual void toggleAutomaticDashSubstitution();
95     virtual bool isAutomaticTextReplacementEnabled();
96     virtual void toggleAutomaticTextReplacement();
97     virtual bool isAutomaticSpellingCorrectionEnabled();
98     virtual void toggleAutomaticSpellingCorrection();
99 #endif
100
101     TextCheckerClient* textChecker() { return this; }
102
103     virtual void respondToChangedContents();
104     virtual void respondToChangedSelection();
105
106     virtual void registerCommandForUndo(PassRefPtr<WebCore::EditCommand>);
107     virtual void registerCommandForRedo(PassRefPtr<WebCore::EditCommand>);
108     virtual void clearUndoRedoOperations();
109
110     virtual bool canCopyCut(bool defaultValue) const;
111     virtual bool canPaste(bool defaultValue) const;
112     virtual bool canUndo() const;
113     virtual bool canRedo() const;
114     
115     virtual void undo();
116     virtual void redo();
117     
118     virtual void handleKeyboardEvent(WebCore::KeyboardEvent*);
119     virtual void handleInputMethodKeydown(WebCore::KeyboardEvent*);
120
121     virtual void textFieldDidBeginEditing(WebCore::Element*);
122     virtual void textFieldDidEndEditing(WebCore::Element*);
123     virtual void textDidChangeInTextField(WebCore::Element*);
124     virtual bool doTextFieldCommandFromEvent(WebCore::Element*, WebCore::KeyboardEvent*);
125     virtual void textWillBeDeletedInTextField(WebCore::Element*);
126     virtual void textDidChangeInTextArea(WebCore::Element*);
127     
128     virtual void ignoreWordInSpellDocument(const WTF::String&);
129     virtual void learnWord(const WTF::String&);
130     virtual void checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength);
131     virtual WTF::String getAutoCorrectSuggestionForMisspelledWord(const WTF::String&);
132     virtual void checkGrammarOfString(const UChar*, int length, WTF::Vector<WebCore::GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength);
133     virtual void checkTextOfParagraph(const UChar* text, int length, uint64_t checkingTypes, WTF::Vector<WebCore::TextCheckingResult>& results);
134     virtual void updateSpellingUIWithGrammarString(const WTF::String&, const WebCore::GrammarDetail&);
135     virtual void updateSpellingUIWithMisspelledWord(const WTF::String&);
136     virtual void showSpellingUI(bool show);
137     virtual bool spellingUIIsShowing();
138     virtual void getGuessesForWord(const WTF::String& word, const WTF::String& context, WTF::Vector<WTF::String>& guesses);
139     virtual void willSetInputMethodState();
140     virtual void setInputMethodState(bool enabled);
141     virtual void requestCheckingOfString(WebCore::SpellChecker*, int, const WTF::String&);
142 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
143     virtual void showCorrectionPanel(WebCore::CorrectionPanelInfo::PanelType, const WebCore::FloatRect& boundingBoxOfReplacedString, const WTF::String& replacedString, const WTF::String& replacementString, const WTF::Vector<WTF::String>& alternativeReplacementStrings, WebCore::Editor*);
144     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingCorrectionPanel);
145     virtual bool isShowingCorrectionPanel();
146     virtual void recordAutocorrectionResponse(AutocorrectionResponseType, const WTF::String& replacedString, const WTF::String& replacementString);
147 #endif
148 private:
149     void registerCommandForUndoOrRedo(PassRefPtr<WebCore::EditCommand>, bool isRedo);
150     WebEditorClient();
151
152     WebView *m_webView;
153     RetainPtr<WebEditorUndoTarget> m_undoTarget;
154     bool m_haveUndoRedoOperations;
155
156 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
157     BOOL m_correctionPanelIsShown;
158     BOOL m_correctionPanelIsDismissedExternally;
159     WebCore::ReasonForDismissingCorrectionPanel m_reasonForDismissingCorrectionPanel;
160 #endif
161 };