diff options
Diffstat (limited to 'ksvg/impl/SVGEventImpl.h')
-rw-r--r-- | ksvg/impl/SVGEventImpl.h | 468 |
1 files changed, 468 insertions, 0 deletions
diff --git a/ksvg/impl/SVGEventImpl.h b/ksvg/impl/SVGEventImpl.h new file mode 100644 index 00000000..a123b09e --- /dev/null +++ b/ksvg/impl/SVGEventImpl.h @@ -0,0 +1,468 @@ +/* + Copyright (C) 2001-2003 KSVG Team + This file is part of the KDE project + + Additional copyright: + (C) 2001 Peter Kelly <[email protected]> + (C) 2001 Tobias Anton <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef SVGEventImpl_H +#define SVGEventImpl_H + +#include <qevent.h> +#include <qdatetime.h> + +#include <dom/dom_misc.h> +#include <dom/dom_node.h> +#include <dom/dom2_views.h> +#include <dom/dom_string.h> + +#include "SVGEvent.h" +#include "SVGElementImpl.h" + +#include "ksvg_lookup.h" + +namespace KSVG +{ + +// @ecma-checked 07/07/02@ +class SVGEventImpl : public DOM::DomShared +{ +public: + SVGEventImpl(); + SVGEventImpl(SVGEvent::EventId _id, bool canBubbleArg, bool cancelableArg); + virtual ~SVGEventImpl(); + + SVGEvent::EventId id() { return m_id; } + + DOM::DOMString type() const; + + SVGElementImpl *target() const; + void setTarget(SVGElementImpl *_target); + + SVGElementImpl *currentTarget() const; + void setCurrentTarget(SVGElementImpl *_currentTarget); + + unsigned short eventPhase() const; + void setEventPhase(unsigned short _eventPhase); + + bool bubbles() const; + bool cancelable() const; + + DOM::DOMTimeStamp timeStamp(); + + void stopPropagation(); + void preventDefault(); + void initEvent(const DOM::DOMString &eventTypeArg, bool canBubbleArg, bool cancelableArg); + + virtual bool isUIEvent() { return false; } + virtual bool isMouseEvent() { return false; } + virtual bool isMutationEvent() { return false; } + virtual bool isKeyEvent() { return false; } + + virtual DOM::DOMString eventModuleName() { return ""; } + + virtual bool propagationStopped() { return m_propagationStopped; } + virtual bool defaultPrevented() { return m_defaultPrevented; } + + void setDefaultHandled(); + bool defaultHandled() const { return m_defaultHandled; } + +protected: + DOM::DOMString m_type; + bool m_canBubble; + bool m_cancelable; + + bool m_propagationStopped; + bool m_defaultPrevented; + bool m_defaultHandled; + + SVGEvent::EventId m_id; + SVGElementImpl *m_currentTarget; + SVGElementImpl *m_target; + + unsigned short m_eventPhase; + QDateTime m_createTime; + +public: + KSVG_BASECLASS_GET + + enum + { + // Properties + Type, Target, CurrentTarget, EventPhase, + Bubbles, Cancelable, TimeStamp, + // Functions + GetType, GetTarget, GetCurrentTarget, GetEventPhase, + GetBubbles, GetCancelable, GetTimeStamp, + StopPropagation, PreventDefault, InitEvent, + GetCurrentNode // Out-Of-Spec + }; + + KJS::Value getValueProperty(KJS::ExecState *exec, int token) const; +}; + +class SVGEventListener : public DOM::DomShared +{ +public: + SVGEventListener() { } + virtual ~SVGEventListener() { } + + virtual void handleEvent(SVGEventImpl *) { } + virtual DOM::DOMString eventListenerType() { return ""; } +}; + +// @ecma-checked 07/07/02@ +class SVGUIEventImpl : public SVGEventImpl +{ +public: + SVGUIEventImpl(); + SVGUIEventImpl(SVGEvent::EventId _id, + bool canBubbleArg, + bool cancelableArg, + DOM::AbstractView &viewArg, + long detailArg); + + virtual ~SVGUIEventImpl(); + + DOM::AbstractView view() const; + long detail() const; + + void initUIEvent(const DOM::DOMString &typeArg, + bool canBubbleArg, + bool cancelableArg, + const DOM::AbstractView &viewArg, + long detailArg); + + virtual bool isUIEvent() { return true; } + virtual DOM::DOMString eventModuleName() { return "UIEvents"; } + +protected: + DOM::AbstractView m_view; + long m_detail; + +public: + KSVG_GET + + enum + { + // Properties + View, Detail, + // Functions + GetView, GetDetail, InitUIEvent + }; + + KJS::Value getValueProperty(KJS::ExecState *exec, int token) const; +}; + +// @ecma-checked 07/07/02@ +// Introduced in DOM Level 2: - internal +class SVGMouseEventImpl : public SVGUIEventImpl +{ +public: + SVGMouseEventImpl(); + SVGMouseEventImpl(SVGEvent::EventId _id, + bool canBubbleArg, + bool cancelableArg, + DOM::AbstractView &viewArg, + long detailArg, + long screenXArg, + long screenYArg, + long clientXArg, + long clientYArg, + bool ctrlKeyArg, + bool altKeyArg, + bool shiftKeyArg, + bool metaKeyArg, + unsigned short buttonArg, + SVGElementImpl *relatedTargetArg); + + virtual ~SVGMouseEventImpl(); + + long screenX() const; + long screenY() const; + long clientX() const; + long clientY() const; + bool ctrlKey() const; + bool shiftKey() const; + bool altKey() const; + bool metaKey() const; + + unsigned short button() const; + + SVGElementImpl *relatedTarget() const; + + void initMouseEvent(const DOM::DOMString &typeArg, + bool canBubbleArg, + bool cancelableArg, + const DOM::AbstractView &viewArg, + long detailArg, + long screenXArg, + long screenYArg, + long clientXArg, + long clientYArg, + bool ctrlKeyArg, + bool altKeyArg, + bool shiftKeyArg, + bool metaKeyArg, + unsigned short buttonArg, + SVGElementImpl *relatedTargetArg); + + virtual bool isMouseEvent() { return true; } + virtual DOM::DOMString eventModuleName() { return "MouseEvents"; } + + // KSVG extensions + DOM::DOMString url() const; + void setURL(DOM::DOMString url); + +protected: + long m_screenX; + long m_screenY; + long m_clientX; + long m_clientY; + bool m_ctrlKey; + bool m_altKey; + bool m_shiftKey; + bool m_metaKey; + unsigned short m_button; + SVGElementImpl *m_relatedTarget; + + // KSVG extension + DOM::DOMString m_url; + +public: + KSVG_GET + + enum + { + // Properties + ScreenX, ScreenY, ClientX, ClientY, CtrlKey, + ShiftKey, AltKey, MetaKey, Button, RelatedTarget, + // Functions + GetScreenX, GetScreenY, GetClientX, GetClientY, GetCtrlKey, + GetShiftKey, GetAltKey, GetMetaKey, GetButton, GetRelatedTarget, + InitMouseEvent + }; + + KJS::Value getValueProperty(KJS::ExecState *exec, int token) const; +}; + +class SVGKeyEventImpl : public SVGUIEventImpl +{ +public: + SVGKeyEventImpl(); + SVGKeyEventImpl(SVGEvent::EventId _id, + bool canBubbleArg, + bool cancelableArg, + DOM::AbstractView &viewArg, + unsigned short detailArg, + DOM::DOMString &outputStringArg, + unsigned long keyValArg, + unsigned long virtKeyValArg, + bool inputGeneratedArg, + bool numPadArg); + + SVGKeyEventImpl(QKeyEvent *key, DOM::AbstractView &view, SVGEvent::EventId _id); + + virtual bool isKeyEvent() { return true; } + + virtual ~SVGKeyEventImpl(); + + enum KeyCodes + { + DOM_VK_UNDEFINED = 0x0, + DOM_VK_RIGHT_ALT = 0x01, + DOM_VK_LEFT_ALT = 0x02, + DOM_VK_LEFT_CONTROL = 0x03, + DOM_VK_RIGHT_CONTROL = 0x04, + DOM_VK_LEFT_SHIFT = 0x05, + DOM_VK_RIGHT_SHIFT = 0x06, + DOM_VK_LEFT_META = 0x07, + DOM_VK_RIGHT_META = 0x08, + DOM_VK_CAPS_LOCK = 0x09, + DOM_VK_DELETE = 0x0A, + DOM_VK_END = 0x0B, + DOM_VK_ENTER = 0x0C, + DOM_VK_ESCAPE = 0x0D, + DOM_VK_HOME = 0x0E, + DOM_VK_INSERT = 0x0F, + DOM_VK_NUM_LOCK = 0x10, + DOM_VK_PAUSE = 0x11, + DOM_VK_PRINTSCREEN = 0x12, + DOM_VK_SCROLL_LOCK = 0x13, + DOM_VK_LEFT = 0x14, + DOM_VK_RIGHT = 0x15, + DOM_VK_UP = 0x16, + DOM_VK_DOWN = 0x17, + DOM_VK_PAGE_DOWN = 0x18, + DOM_VK_PAGE_UP = 0x19, + DOM_VK_F1 = 0x1A, + DOM_VK_F2 = 0x1B, + DOM_VK_F3 = 0x1C, + DOM_VK_F4 = 0x1D, + DOM_VK_F5 = 0x1E, + DOM_VK_F6 = 0x1F, + DOM_VK_F7 = 0x20, + DOM_VK_F8 = 0x21, + DOM_VK_F9 = 0x22, + DOM_VK_F10 = 0x23, + DOM_VK_F11 = 0x24, + DOM_VK_F12 = 0x25, + DOM_VK_F13 = 0x26, + DOM_VK_F14 = 0x27, + DOM_VK_F15 = 0x28, + DOM_VK_F16 = 0x29, + DOM_VK_F17 = 0x2A, + DOM_VK_F18 = 0x2B, + DOM_VK_F19 = 0x2C, + DOM_VK_F20 = 0x2D, + DOM_VK_F21 = 0x2E, + DOM_VK_F22 = 0x2F, + DOM_VK_F23 = 0x30, + DOM_VK_F24 = 0x31 + }; + + + bool checkModifier(unsigned long modiferArg); + + void initKeyEvent(DOM::DOMString &typeArg, + bool canBubbleArg, + bool cancelableArg, + const DOM::AbstractView &viewArg, + long detailArg, + DOM::DOMString &outputStringArg, + unsigned long keyValArg, + unsigned long virtKeyValArg, + bool inputGeneratedArg, + bool numPadArg); + + void initModifier(unsigned long modifierArg, bool valueArg); + + bool inputGenerated() const; + + unsigned long keyVal() const; + + bool numPad() const { return m_numPad; } + DOM::DOMString outputString() const; + + unsigned long virtKeyVal() const { return m_virtKeyVal; } + + QKeyEvent *qKeyEvent; + +private: + unsigned long m_keyVal; + unsigned long m_virtKeyVal; + bool m_inputGenerated; + DOM::DOMString m_outputString; + bool m_numPad; + + // bitfield containing state of modifiers. not part of the dom. + unsigned long m_modifier; + +public: + KSVG_GET + + enum + { + // Properties + KeyVal, VirtKeyVal, OutputString, + // Functions + CheckModifier, GetKeyVal, GetCharCode + }; + + KJS::Value getValueProperty(KJS::ExecState *exec, int token) const; +}; + +class SVGMutationEventImpl : public SVGEventImpl +{ +public: + SVGMutationEventImpl(); + SVGMutationEventImpl(SVGEvent::EventId _id, + bool canBubbleArg, + bool cancelableArg, + SVGElementImpl *relatedNodeArg, + const DOM::DOMString &prevValueArg, + const DOM::DOMString &newValueArg, + const DOM::DOMString &attrNameArg, + unsigned short attrChangeArg); + ~SVGMutationEventImpl(); + + SVGElementImpl *relatedNode() const; + DOM::DOMString prevValue() const; + DOM::DOMString newValue() const; + DOM::DOMString attrName() const; + unsigned short attrChange() const; + + void initMutationEvent(const DOM::DOMString &typeArg, + bool canBubbleArg, + bool cancelableArg, + SVGElementImpl *relatedNodeArg, + const DOM::DOMString &prevValueArg, + const DOM::DOMString &newValueArg, + const DOM::DOMString &attrNameArg, + unsigned short attrChangeArg); + + virtual bool isMutationEvent() { return true; } + virtual DOM::DOMString eventModuleName() { return "MutationEvents"; } + +protected: + SVGElementImpl *m_relatedNode; + DOM::DOMString m_prevValue; + DOM::DOMString m_newValue; + DOM::DOMString m_attrName; + unsigned short m_attrChange; + +public: + KSVG_FORWARDGET +}; + +class SVGRegisteredEventListener +{ +public: + SVGRegisteredEventListener(SVGEvent::EventId _id, SVGEventListener *_listener, bool _useCapture); + ~SVGRegisteredEventListener(); + + bool operator==(const SVGRegisteredEventListener &other); + + SVGEvent::EventId id; + SVGEventListener *listener; + bool useCapture; + +private: + SVGRegisteredEventListener(const SVGRegisteredEventListener &); + SVGRegisteredEventListener &operator=(const SVGRegisteredEventListener &); +}; + +} + +KSVG_DEFINE_PROTOTYPE(SVGEventImplProto) +KSVG_IMPLEMENT_PROTOFUNC(SVGEventImplProtoFunc, SVGEventImpl) + +KSVG_DEFINE_PROTOTYPE(SVGUIEventImplProto) +KSVG_IMPLEMENT_PROTOFUNC(SVGUIEventImplProtoFunc, SVGUIEventImpl) + +KSVG_DEFINE_PROTOTYPE(SVGMouseEventImplProto) +KSVG_IMPLEMENT_PROTOFUNC(SVGMouseEventImplProtoFunc, SVGMouseEventImpl) + +KSVG_DEFINE_PROTOTYPE(SVGKeyEventImplProto) +KSVG_IMPLEMENT_PROTOFUNC(SVGKeyEventImplProtoFunc, SVGKeyEventImpl) + +#endif + +// vim:ts=4:noet |