1/* 2 * Copyright (C) 2007, 2008 Apple 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 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 */ 26 27#ifndef TextEvent_h 28#define TextEvent_h 29 30#include "DictationAlternative.h" 31#include "TextEventInputType.h" 32#include "UIEvent.h" 33 34namespace WebCore { 35 36 class DocumentFragment; 37 38 enum class MailBlockquoteHandling; 39 40 class TextEvent : public UIEvent { 41 public: 42 43 static PassRefPtr<TextEvent> create(); 44 static PassRefPtr<TextEvent> create(PassRefPtr<AbstractView>, const String& data, TextEventInputType = TextEventInputKeyboard); 45 static PassRefPtr<TextEvent> createForPlainTextPaste(PassRefPtr<AbstractView>, const String& data, bool shouldSmartReplace); 46 static PassRefPtr<TextEvent> createForFragmentPaste(PassRefPtr<AbstractView>, PassRefPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle, MailBlockquoteHandling); 47 static PassRefPtr<TextEvent> createForDrop(PassRefPtr<AbstractView>, const String& data); 48 static PassRefPtr<TextEvent> createForDictation(PassRefPtr<AbstractView>, const String& data, const Vector<DictationAlternative>& dictationAlternatives); 49 50 virtual ~TextEvent(); 51 52 void initTextEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<AbstractView>, const String& data); 53 54 String data() const { return m_data; } 55 56 virtual EventInterface eventInterface() const override; 57 58 bool isLineBreak() const { return m_inputType == TextEventInputLineBreak; } 59 bool isComposition() const { return m_inputType == TextEventInputComposition; } 60 bool isBackTab() const { return m_inputType == TextEventInputBackTab; } 61 bool isPaste() const { return m_inputType == TextEventInputPaste; } 62 bool isDrop() const { return m_inputType == TextEventInputDrop; } 63 bool isDictation() const { return m_inputType == TextEventInputDictation; } 64 65 bool shouldSmartReplace() const { return m_shouldSmartReplace; } 66 bool shouldMatchStyle() const { return m_shouldMatchStyle; } 67 MailBlockquoteHandling mailBlockquoteHandling() const { return m_mailBlockquoteHandling; } 68 DocumentFragment* pastingFragment() const { return m_pastingFragment.get(); } 69 const Vector<DictationAlternative>& dictationAlternatives() const { return m_dictationAlternatives; } 70 71 private: 72 TextEvent(); 73 74 TextEvent(PassRefPtr<AbstractView>, const String& data, TextEventInputType = TextEventInputKeyboard); 75 TextEvent(PassRefPtr<AbstractView>, const String& data, PassRefPtr<DocumentFragment>, bool shouldSmartReplace, bool shouldMatchStyle, MailBlockquoteHandling); 76 TextEvent(PassRefPtr<AbstractView>, const String& data, const Vector<DictationAlternative>& dictationAlternatives); 77 78 virtual bool isTextEvent() const override; 79 80 TextEventInputType m_inputType; 81 String m_data; 82 83 RefPtr<DocumentFragment> m_pastingFragment; 84 bool m_shouldSmartReplace; 85 bool m_shouldMatchStyle; 86 MailBlockquoteHandling m_mailBlockquoteHandling; 87 Vector<DictationAlternative> m_dictationAlternatives; 88 }; 89 90EVENT_TYPE_CASTS(TextEvent) 91 92} // namespace WebCore 93 94#endif // TextEvent_h 95