15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef Editor_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define Editor_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/clipboard/DataTransferAccessPolicy.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarker.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/EditAction.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/EditingBehavior.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FindOptions.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextIterator.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/VisibleSelection.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/WritingDirection.h" 381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/FrameDestructionObserver.h" 391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PasteMode.h" 40a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "platform/heap/Handle.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CompositeEditCommand; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EditCommandComposition; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EditorClient; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EditorInternalCommand; 48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class LocalFrame; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestResult; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class KillRing; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Pasteboard; 521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class SpellChecker; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StylePropertySet; 549bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)class TextEvent; 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class UndoStack; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum EditorCommandSource { CommandFromMenuOrKeyBinding, CommandFromDOM, CommandFromDOMWithUserInterface }; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum EditorParagraphSeparator { EditorParagraphSeparatorIsDiv, EditorParagraphSeparatorIsP }; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class Editor FINAL : public NoBaseWillBeGarbageCollectedFinalized<Editor> { 611e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(Editor); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 63f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) static PassOwnPtrWillBeRawPtr<Editor> create(LocalFrame&); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~Editor(); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) EditorClient& client() const; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CompositeEditCommand* lastEditCommand() { return m_lastEditCommand.get(); } 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleKeyboardEvent(KeyboardEvent*); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool handleTextEvent(TextEvent*); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canEdit() const; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canEditRichly() const; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canDHTMLCut(); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canDHTMLCopy(); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canDHTMLPaste(); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canCut() const; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canCopy() const; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canPaste() const; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canDelete() const; 8451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool canSmartCopyOrDelete() const; 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void cut(); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void copy(); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void paste(); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pasteAsPlainText(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void performDelete(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) static void countEvent(ExecutionContext*, const Event*); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void copyImage(const HitTestResult&); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void transpose(); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldDeleteRange(Range*) const; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void respondToChangedContents(const VisibleSelection& endingSelection); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool selectionStartHasStyle(CSSPropertyID, const String& value) const; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TriState selectionHasStyle(CSSPropertyID, const String& value) const; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String selectionStartCSSPropertyValue(CSSPropertyID); 10402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeFormattingAndStyle(); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearLastEditCommand(); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool deleteWithDirection(SelectionDirection, TextGranularity, bool killRing, bool isTypingAction); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void deleteSelectionWithSmartDelete(bool smartDelete); 11102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyStyle(StylePropertySet*, EditAction = EditActionUnspecified); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyParagraphStyle(StylePropertySet*, EditAction = EditActionUnspecified); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyStyleToSelection(StylePropertySet*, EditAction); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyParagraphStyleToSelection(StylePropertySet*, EditAction); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 117f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void appliedEditing(PassRefPtrWillBeRawPtr<CompositeEditCommand>); 118f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void unappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition>); 119f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void reappliedEditing(PassRefPtrWillBeRawPtr<EditCommandComposition>); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setShouldStyleWithCSS(bool flag) { m_shouldStyleWithCSS = flag; } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldStyleWithCSS() const { return m_shouldStyleWithCSS; } 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) class Command { 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci STACK_ALLOCATED(); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Command(); 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Command(const EditorInternalCommand*, EditorCommandSource, PassRefPtrWillBeRawPtr<LocalFrame>); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool execute(const String& parameter = String(), Event* triggeringEvent = 0) const; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool execute(Event* triggeringEvent) const; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSupported() const; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isEnabled(Event* triggeringEvent = 0) const; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TriState state(Event* triggeringEvent = 0) const; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String value(Event* triggeringEvent = 0) const; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isTextInsertion() const; 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // Returns 0 if this Command is not supported. 14210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch int idForHistogram() const; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LocalFrame& frame() const 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(m_frame); 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return *m_frame; 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const EditorInternalCommand* m_command; 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EditorCommandSource m_source; 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<LocalFrame> m_frame; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Command command(const String& commandName); // Command source is CommandFromMenuOrKeyBinding. 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Command command(const String& commandName, EditorCommandSource); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // |Editor::executeCommand| is implementation of |WebFrame::executeCommand| 158197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // rather than |Document::execCommand|. 159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool executeCommand(const String&); 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool executeCommand(const String& commandName, const String& value); 161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 162c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bool insertText(const String&, KeyboardEvent* triggeringEvent); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool insertTextWithoutSendingTextEvent(const String&, bool selectInsertedText, TextEvent* triggeringEvent); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool insertLineBreak(); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool insertParagraphSeparator(); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool isOverwriteModeEnabled() const { return m_overwriteModeEnabled; } 168591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void toggleOverwriteModeEnabled(); 16953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canUndo(); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void undo(); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canRedo(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void redo(); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setBaseWritingDirection(WritingDirection); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // smartInsertDeleteEnabled and selectTrailingWhitespaceEnabled are 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // mutually exclusive, meaning that enabling one will disable the other. 17951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool smartInsertDeleteEnabled() const; 18051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool isSelectTrailingWhitespaceEnabled() const; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1823c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool preventRevealSelection() const { return m_preventRevealSelection; } 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setStartNewKillRingSequence(bool); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clear(); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VisibleSelection selectionForCommand(Event*); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) KillRing& killRing() const { return *m_killRing; } 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EditingBehavior behavior() const; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 194a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<Range> selectedRange(); 19502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addToKillRing(Range*, bool prepend); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 198d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pasteAsFragment(PassRefPtrWillBeRawPtr<DocumentFragment>, bool smartReplace, bool matchStyle); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pasteAsPlainText(const String&, bool smartReplace); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 201c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Element* findEventTargetFrom(const VisibleSelection&) const; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool findString(const String&, FindOptions); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Switch callers over to the FindOptions version and retire this one. 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool findString(const String&, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 207a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<Range> findStringAndScrollToVisible(const String&, Range*, FindOptions); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const VisibleSelection& mark() const; // Mark, to be used as emacs uses it. 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setMark(const VisibleSelection&); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void computeAndSetTypingStyle(StylePropertySet* , EditAction = EditActionUnspecified); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect firstRectForRange(Range*) const; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void respondToChangedSelection(const VisibleSelection& oldSelection, FrameSelection::SetSelectionOptions); 2173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool markedTextMatchesAreHighlighted() const; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setMarkedTextMatchesAreHighlighted(bool); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 221d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void replaceSelectionWithFragment(PassRefPtrWillBeRawPtr<DocumentFragment>, bool selectReplacement, bool smartReplace, bool matchStyle); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void replaceSelectionWithText(const String&, bool selectReplacement, bool smartReplace); 22302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EditorParagraphSeparator defaultParagraphSeparator() const { return m_defaultParagraphSeparator; } 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setDefaultParagraphSeparator(EditorParagraphSeparator separator) { m_defaultParagraphSeparator = separator; } 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch class RevealSelectionScope { 2283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WTF_MAKE_NONCOPYABLE(RevealSelectionScope); 2293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch public: 2303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch RevealSelectionScope(Editor*); 2313c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch ~RevealSelectionScope(); 2323c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch private: 2333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch Editor* m_editor; 2343c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch }; 2353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch friend class RevealSelectionScope; 2363c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 237f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void trace(Visitor*); 238f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 23981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)private: 2407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RawPtrWillBeMember<LocalFrame> m_frame; 241f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RefPtrWillBeMember<CompositeEditCommand> m_lastEditCommand; 2423c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch int m_preventRevealSelection; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_shouldStartNewKillRingSequence; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_shouldStyleWithCSS; 24551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const OwnPtr<KillRing> m_killRing; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VisibleSelection m_mark; 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_areMarkedTextMatchesHighlighted; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EditorParagraphSeparator m_defaultParagraphSeparator; 24953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool m_overwriteModeEnabled; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) explicit Editor(LocalFrame&); 2521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 2537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LocalFrame& frame() const 2547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 2557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(m_frame); 2567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return *m_frame; 2577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 2587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canDeleteRange(Range*) const; 26006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 26151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) UndoStack* undoStack() const; 26251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 26306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) bool tryDHTMLCopy(); 26406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) bool tryDHTMLCut(); 26506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) bool tryDHTMLPaste(PasteMode); 26606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canSmartReplaceWithPasteboard(Pasteboard*); 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pasteAsPlainTextWithPasteboard(Pasteboard*); 2691e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void pasteWithPasteboard(Pasteboard*); 27051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void writeSelectionToPasteboard(Pasteboard*, Range*, const String& plainText); 271197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool dispatchCPPEvent(const AtomicString&, DataTransferAccessPolicy, PasteMode = AllMimeTypes); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void revealSelectionAfterEditingOperation(const ScrollAlignment& = ScrollAlignment::alignCenterIfNeeded, RevealExtentOption = DoNotRevealExtent); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void changeSelectionAfterCommand(const VisibleSelection& newSelection, FrameSelection::SetSelectionOptions); 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void notifyComponentsOnChangedSelection(const VisibleSelection& oldSelection, FrameSelection::SetSelectionOptions); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 277c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Element* findEventTargetFromSelection() const; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 279a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<Range> rangeOfString(const String&, Range*, FindOptions); 28051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 2811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) SpellChecker& spellChecker() const; 28251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 283c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bool handleEditingKeyboardEvent(blink::KeyboardEvent*); 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void Editor::setStartNewKillRingSequence(bool flag) 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_shouldStartNewKillRingSequence = flag; 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline const VisibleSelection& Editor::mark() const 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_mark; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void Editor::setMark(const VisibleSelection& selection) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_mark = selection; 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool Editor::markedTextMatchesAreHighlighted() const 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_areMarkedTextMatchesHighlighted; 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 307c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // Editor_h 310