Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / dom / KeyboardEvent.h
1 /*
2  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2013 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef KeyboardEvent_h
25 #define KeyboardEvent_h
26
27 #include "KeypressCommand.h"
28 #include "UIEventWithKeyState.h"
29 #include <memory>
30 #include <wtf/Vector.h>
31
32 namespace WebCore {
33
34 class Node;
35 class PlatformKeyboardEvent;
36
37 struct KeyboardEventInit : public UIEventWithKeyStateInit {
38     String keyIdentifier;
39     unsigned location { 0 };
40 };
41
42 class KeyboardEvent final : public UIEventWithKeyState {
43 public:
44     enum KeyLocationCode {
45         DOM_KEY_LOCATION_STANDARD   = 0x00,
46         DOM_KEY_LOCATION_LEFT       = 0x01,
47         DOM_KEY_LOCATION_RIGHT      = 0x02,
48         DOM_KEY_LOCATION_NUMPAD     = 0x03
49         // FIXME: The following values are not supported yet (crbug.com/265446)
50         // DOM_KEY_LOCATION_MOBILE     = 0x04,
51         // DOM_KEY_LOCATION_JOYSTICK   = 0x05
52     };
53
54     static Ref<KeyboardEvent> create(const PlatformKeyboardEvent& platformEvent, AbstractView* view)
55     {
56         return adoptRef(*new KeyboardEvent(platformEvent, view));
57     }
58
59     static Ref<KeyboardEvent> createForBindings()
60     {
61         return adoptRef(*new KeyboardEvent);
62     }
63
64     static Ref<KeyboardEvent> createForBindings(const AtomicString& type, const KeyboardEventInit& initializer)
65     {
66         return adoptRef(*new KeyboardEvent(type, initializer));
67     }
68
69     // FIXME: This method should be get ride of in the future.
70     // DO NOT USE IT!
71     static Ref<KeyboardEvent> createForDummy()
72     {
73         return adoptRef(*new KeyboardEvent(WTF::HashTableDeletedValue));
74     }
75
76     virtual ~KeyboardEvent();
77     
78     void initKeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView*,
79         const String& keyIdentifier, unsigned location,
80         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey = false);
81     
82     const String& keyIdentifier() const { return m_keyIdentifier; }
83     unsigned location() const { return m_location; }
84
85     bool getModifierState(const String& keyIdentifier) const;
86
87     bool altGraphKey() const { return m_altGraphKey; }
88     
89     const PlatformKeyboardEvent* keyEvent() const { return m_keyEvent.get(); }
90
91     int keyCode() const override; // key code for keydown and keyup, character for keypress
92     int charCode() const override; // character code for keypress, 0 for keydown and keyup
93
94     EventInterface eventInterface() const override;
95     bool isKeyboardEvent() const override;
96     int which() const override;
97
98 #if PLATFORM(COCOA)
99     bool handledByInputMethod() const { return m_handledByInputMethod; }
100     const Vector<KeypressCommand>& keypressCommands() const { return m_keypressCommands; }
101
102     // The non-const version is still needed for WebKit1, which doesn't construct a complete KeyboardEvent with interpreted commands yet.
103     Vector<KeypressCommand>& keypressCommands() { return m_keypressCommands; }
104 #endif
105
106 private:
107     WEBCORE_EXPORT KeyboardEvent();
108     WEBCORE_EXPORT KeyboardEvent(const PlatformKeyboardEvent&, AbstractView*);
109     KeyboardEvent(const AtomicString&, const KeyboardEventInit&);
110     // FIXME: This method should be get ride of in the future.
111     // DO NOT USE IT!
112     KeyboardEvent(WTF::HashTableDeletedValueType);
113
114     std::unique_ptr<PlatformKeyboardEvent> m_keyEvent;
115     String m_keyIdentifier;
116     unsigned m_location;
117     bool m_altGraphKey : 1;
118
119 #if PLATFORM(COCOA)
120     // Commands that were sent by AppKit when interpreting the event. Doesn't include input method commands.
121     bool m_handledByInputMethod;
122     Vector<KeypressCommand> m_keypressCommands;
123 #endif
124 };
125
126 KeyboardEvent* findKeyboardEvent(Event*);
127
128 } // namespace WebCore
129
130 SPECIALIZE_TYPE_TRAITS_EVENT(KeyboardEvent)
131
132 #endif // KeyboardEvent_h