You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
469 lines
12 KiB
469 lines
12 KiB
/*
|
|
Copyright (C) 2001-2003 KSVG Team
|
|
This file is part of the KDE project
|
|
|
|
Additional copyright:
|
|
(C) 2001 Peter Kelly <pmk@post.com>
|
|
(C) 2001 Tobias Anton <anton@stud.fbi.fh-darmstadt.de>
|
|
|
|
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
|