/* * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include namespace WebKit { class WebPage; class WebEditorClient final : public WebCore::EditorClient, public WebCore::TextCheckerClient { public: WebEditorClient(WebPage* page) : m_page(page) { } private: bool shouldDeleteRange(WebCore::Range*) final; bool smartInsertDeleteEnabled() final; bool isSelectTrailingWhitespaceEnabled() final; bool isContinuousSpellCheckingEnabled() final; void toggleContinuousSpellChecking() final; bool isGrammarCheckingEnabled() final; void toggleGrammarChecking() final; int spellCheckerDocumentTag() final; bool shouldBeginEditing(WebCore::Range*) final; bool shouldEndEditing(WebCore::Range*) final; bool shouldInsertNode(WebCore::Node*, WebCore::Range*, WebCore::EditorInsertAction) final; bool shouldInsertText(const String&, WebCore::Range*, WebCore::EditorInsertAction) final; bool shouldChangeSelectedRange(WebCore::Range* fromRange, WebCore::Range* toRange, WebCore::EAffinity, bool stillSelecting) final; bool shouldApplyStyle(WebCore::StyleProperties*, WebCore::Range*) final; void didApplyStyle() final; bool shouldMoveRangeAfterDelete(WebCore::Range*, WebCore::Range*) final; void didBeginEditing() final; void respondToChangedContents() final; void respondToChangedSelection(WebCore::Frame*) final; void didChangeSelectionAndUpdateLayout() final; void updateEditorStateAfterLayoutIfEditabilityChanged() final; void discardedComposition(WebCore::Frame*) final; void canceledComposition() final; void didEndEditing() final; void willWriteSelectionToPasteboard(WebCore::Range*) final; void didWriteSelectionToPasteboard() final; void getClientPasteboardDataForRange(WebCore::Range*, Vector& pasteboardTypes, Vector>& pasteboardData) final; void registerUndoStep(WebCore::UndoStep&) final; void registerRedoStep(WebCore::UndoStep&) final; void clearUndoRedoOperations() final; bool canCopyCut(WebCore::Frame*, bool defaultValue) const final; bool canPaste(WebCore::Frame*, bool defaultValue) const final; bool canUndo() const final; bool canRedo() const final; void undo() final; void redo() final; void handleKeyboardEvent(WebCore::KeyboardEvent*) final; void handleInputMethodKeydown(WebCore::KeyboardEvent*) final; void textFieldDidBeginEditing(WebCore::Element*) final; void textFieldDidEndEditing(WebCore::Element*) final; void textDidChangeInTextField(WebCore::Element*) final; bool doTextFieldCommandFromEvent(WebCore::Element*, WebCore::KeyboardEvent*) final; void textWillBeDeletedInTextField(WebCore::Element*) final; void textDidChangeInTextArea(WebCore::Element*) final; void overflowScrollPositionChanged() final; #if PLATFORM(COCOA) NSString *userVisibleString(NSURL *) final; void setInsertionPasteboard(const String& pasteboardName) final; NSURL *canonicalizeURL(NSURL *) final; NSURL *canonicalizeURLString(NSString *) final; #endif #if USE(APPKIT) void uppercaseWord() final; void lowercaseWord() final; void capitalizeWord() final; #endif #if USE(AUTOMATIC_TEXT_REPLACEMENT) void showSubstitutionsPanel(bool show) final; bool substitutionsPanelIsShowing() final; void toggleSmartInsertDelete() final; bool isAutomaticQuoteSubstitutionEnabled() final; void toggleAutomaticQuoteSubstitution() final; bool isAutomaticLinkDetectionEnabled() final; void toggleAutomaticLinkDetection() final; bool isAutomaticDashSubstitutionEnabled() final; void toggleAutomaticDashSubstitution() final; bool isAutomaticTextReplacementEnabled() final; void toggleAutomaticTextReplacement() final; bool isAutomaticSpellingCorrectionEnabled() final; void toggleAutomaticSpellingCorrection() final; #endif #if PLATFORM(GTK) bool executePendingEditorCommands(WebCore::Frame*, const Vector&, bool); void getEditorCommandsForKeyEvent(const WebCore::KeyboardEvent*, Vector&); void updateGlobalSelection(WebCore::Frame*); #endif TextCheckerClient* textChecker() final { return this; } bool shouldEraseMarkersAfterChangeSelection(WebCore::TextCheckingType) const final; void ignoreWordInSpellDocument(const String&) final; void learnWord(const String&) final; void checkSpellingOfString(StringView, int* misspellingLocation, int* misspellingLength) final; String getAutoCorrectSuggestionForMisspelledWord(const String& misspelledWord) final; void checkGrammarOfString(StringView, Vector&, int* badGrammarLocation, int* badGrammarLength) final; #if USE(UNIFIED_TEXT_CHECKING) Vector checkTextOfParagraph(StringView, WebCore::TextCheckingTypeMask checkingTypes, const WebCore::VisibleSelection& currentSelection) final; #endif void updateSpellingUIWithGrammarString(const String&, const WebCore::GrammarDetail&) final; void updateSpellingUIWithMisspelledWord(const String&) final; void showSpellingUI(bool show) final; bool spellingUIIsShowing() final; void getGuessesForWord(const String& word, const String& context, const WebCore::VisibleSelection& currentSelection, Vector& guesses) final; void willSetInputMethodState() final; void setInputMethodState(bool enabled) final; void requestCheckingOfString(WebCore::TextCheckingRequest&, const WebCore::VisibleSelection& currentSelection) final; #if PLATFORM(GTK) bool shouldShowUnicodeMenu() final; #endif #if PLATFORM(IOS) void startDelayingAndCoalescingContentChangeNotifications() final; void stopDelayingAndCoalescingContentChangeNotifications() final; void writeDataToPasteboard(NSDictionary*) final; NSArray *supportedPasteboardTypesForCurrentSelection() final; NSArray *readDataFromPasteboard(NSString* type, int index) final; bool hasRichlyEditableSelection() final; int getPasteboardItemsCount() final; RefPtr documentFragmentFromDelegate(int index) final; bool performsTwoStepPaste(WebCore::DocumentFragment*) final; int pasteboardChangeCount() final; #endif bool supportsGlobalSelection() final; WebPage* m_page; }; } // namespace WebKit