/**************************************************************************** | |
** | |
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). | |
** All rights reserved. | |
** Contact: Nokia Corporation (qt-info@nokia.com) | |
** | |
** This file is part of the QtGui module of the Qt Toolkit. | |
** | |
** $QT_BEGIN_LICENSE:LGPL$ | |
** GNU Lesser General Public License Usage | |
** This file may be used under the terms of the GNU Lesser General Public | |
** License version 2.1 as published by the Free Software Foundation and | |
** appearing in the file LICENSE.LGPL included in the packaging of this | |
** file. Please review the following information to ensure the GNU Lesser | |
** General Public License version 2.1 requirements will be met: | |
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
** | |
** In addition, as a special exception, Nokia gives you certain additional | |
** rights. These rights are described in the Nokia Qt LGPL Exception | |
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | |
** | |
** GNU General Public License Usage | |
** Alternatively, this file may be used under the terms of the GNU General | |
** Public License version 3.0 as published by the Free Software Foundation | |
** and appearing in the file LICENSE.GPL included in the packaging of this | |
** file. Please review the following information to ensure the GNU General | |
** Public License version 3.0 requirements will be met: | |
** http://www.gnu.org/copyleft/gpl.html. | |
** | |
** Other Usage | |
** Alternatively, this file may be used in accordance with the terms and | |
** conditions contained in a signed written agreement between you and Nokia. | |
** | |
** | |
** | |
** | |
** | |
** $QT_END_LICENSE$ | |
** | |
****************************************************************************/ | |
#include <QtCore/qstatemachine.h> | |
#ifndef QT_NO_STATEMACHINE | |
#include <private/qstatemachine_p.h> | |
#include <QtGui/qevent.h> | |
#include <QtGui/qgraphicssceneevent.h> | |
QT_BEGIN_NAMESPACE | |
Q_CORE_EXPORT const QStateMachinePrivate::Handler *qcoreStateMachineHandler(); | |
static QEvent *cloneEvent(QEvent *e) | |
{ | |
switch (e->type()) { | |
case QEvent::MouseButtonPress: | |
case QEvent::MouseButtonRelease: | |
case QEvent::MouseButtonDblClick: | |
case QEvent::MouseMove: | |
return new QMouseEvent(*static_cast<QMouseEvent*>(e)); | |
case QEvent::KeyPress: | |
case QEvent::KeyRelease: | |
return new QKeyEvent(*static_cast<QKeyEvent*>(e)); | |
case QEvent::FocusIn: | |
case QEvent::FocusOut: | |
return new QFocusEvent(*static_cast<QFocusEvent*>(e)); | |
case QEvent::Enter: | |
return new QEvent(*e); | |
case QEvent::Leave: | |
return new QEvent(*e); | |
break; | |
case QEvent::Paint: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::Move: | |
return new QMoveEvent(*static_cast<QMoveEvent*>(e)); | |
case QEvent::Resize: | |
return new QResizeEvent(*static_cast<QResizeEvent*>(e)); | |
case QEvent::Create: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::Destroy: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::Show: | |
return new QShowEvent(*static_cast<QShowEvent*>(e)); | |
case QEvent::Hide: | |
return new QHideEvent(*static_cast<QHideEvent*>(e)); | |
case QEvent::Close: | |
return new QCloseEvent(*static_cast<QCloseEvent*>(e)); | |
case QEvent::Quit: | |
return new QEvent(*e); | |
case QEvent::ParentChange: | |
return new QEvent(*e); | |
case QEvent::ParentAboutToChange: | |
return new QEvent(*e); | |
case QEvent::ThreadChange: | |
return new QEvent(*e); | |
case QEvent::WindowActivate: | |
case QEvent::WindowDeactivate: | |
return new QEvent(*e); | |
case QEvent::ShowToParent: | |
return new QEvent(*e); | |
case QEvent::HideToParent: | |
return new QEvent(*e); | |
#ifndef QT_NO_WHEELEVENT | |
case QEvent::Wheel: | |
return new QWheelEvent(*static_cast<QWheelEvent*>(e)); | |
#endif //QT_NO_WHEELEVENT | |
case QEvent::WindowTitleChange: | |
return new QEvent(*e); | |
case QEvent::WindowIconChange: | |
return new QEvent(*e); | |
case QEvent::ApplicationWindowIconChange: | |
return new QEvent(*e); | |
case QEvent::ApplicationFontChange: | |
return new QEvent(*e); | |
case QEvent::ApplicationLayoutDirectionChange: | |
return new QEvent(*e); | |
case QEvent::ApplicationPaletteChange: | |
return new QEvent(*e); | |
case QEvent::PaletteChange: | |
return new QEvent(*e); | |
case QEvent::Clipboard: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::Speech: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::MetaCall: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::SockAct: | |
return new QEvent(*e); | |
case QEvent::WinEventAct: | |
return new QEvent(*e); | |
case QEvent::DeferredDelete: | |
return new QEvent(*e); | |
#ifndef QT_NO_DRAGANDDROP | |
case QEvent::DragEnter: | |
return new QDragEnterEvent(*static_cast<QDragEnterEvent*>(e)); | |
case QEvent::DragMove: | |
return new QDragMoveEvent(*static_cast<QDragMoveEvent*>(e)); | |
case QEvent::DragLeave: | |
return new QDragLeaveEvent(*static_cast<QDragLeaveEvent*>(e)); | |
case QEvent::Drop: | |
return new QDropEvent(*static_cast<QDragMoveEvent*>(e)); | |
case QEvent::DragResponse: | |
return new QDragResponseEvent(*static_cast<QDragResponseEvent*>(e)); | |
#endif | |
case QEvent::ChildAdded: | |
return new QChildEvent(*static_cast<QChildEvent*>(e)); | |
case QEvent::ChildPolished: | |
return new QChildEvent(*static_cast<QChildEvent*>(e)); | |
#ifdef QT3_SUPPORT | |
case QEvent::ChildInsertedRequest: | |
return new QEvent(*e); | |
case QEvent::ChildInserted: | |
return new QChildEvent(*static_cast<QChildEvent*>(e)); | |
case QEvent::LayoutHint: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#endif | |
case QEvent::ChildRemoved: | |
return new QChildEvent(*static_cast<QChildEvent*>(e)); | |
case QEvent::ShowWindowRequest: | |
return new QEvent(*e); | |
case QEvent::PolishRequest: | |
return new QEvent(*e); | |
case QEvent::Polish: | |
return new QEvent(*e); | |
case QEvent::LayoutRequest: | |
return new QEvent(*e); | |
case QEvent::UpdateRequest: | |
return new QEvent(*e); | |
case QEvent::UpdateLater: | |
return new QEvent(*e); | |
case QEvent::EmbeddingControl: | |
return new QEvent(*e); | |
case QEvent::ActivateControl: | |
return new QEvent(*e); | |
case QEvent::DeactivateControl: | |
return new QEvent(*e); | |
#ifndef QT_NO_CONTEXTMENU | |
case QEvent::ContextMenu: | |
return new QContextMenuEvent(*static_cast<QContextMenuEvent*>(e)); | |
#endif | |
case QEvent::InputMethod: | |
return new QInputMethodEvent(*static_cast<QInputMethodEvent*>(e)); | |
case QEvent::AccessibilityPrepare: | |
return new QEvent(*e); | |
#ifndef QT_NO_TABLETEVENT | |
case QEvent::TabletMove: | |
return new QTabletEvent(*static_cast<QTabletEvent*>(e)); | |
#endif //QT_NO_TABLETEVENT | |
case QEvent::LocaleChange: | |
return new QEvent(*e); | |
case QEvent::LanguageChange: | |
return new QEvent(*e); | |
case QEvent::LayoutDirectionChange: | |
return new QEvent(*e); | |
case QEvent::Style: | |
return new QEvent(*e); | |
#ifndef QT_NO_TABLETEVENT | |
case QEvent::TabletPress: | |
return new QTabletEvent(*static_cast<QTabletEvent*>(e)); | |
case QEvent::TabletRelease: | |
return new QTabletEvent(*static_cast<QTabletEvent*>(e)); | |
#endif //QT_NO_TABLETEVENT | |
case QEvent::OkRequest: | |
return new QEvent(*e); | |
case QEvent::HelpRequest: | |
return new QEvent(*e); | |
case QEvent::IconDrag: | |
return new QIconDragEvent(*static_cast<QIconDragEvent*>(e)); | |
case QEvent::FontChange: | |
return new QEvent(*e); | |
case QEvent::EnabledChange: | |
return new QEvent(*e); | |
case QEvent::ActivationChange: | |
return new QEvent(*e); | |
case QEvent::StyleChange: | |
return new QEvent(*e); | |
case QEvent::IconTextChange: | |
return new QEvent(*e); | |
case QEvent::ModifiedChange: | |
return new QEvent(*e); | |
case QEvent::MouseTrackingChange: | |
return new QEvent(*e); | |
case QEvent::WindowBlocked: | |
return new QEvent(*e); | |
case QEvent::WindowUnblocked: | |
return new QEvent(*e); | |
case QEvent::WindowStateChange: | |
return new QWindowStateChangeEvent(*static_cast<QWindowStateChangeEvent*>(e)); | |
case QEvent::ToolTip: | |
return new QHelpEvent(*static_cast<QHelpEvent*>(e)); | |
case QEvent::WhatsThis: | |
return new QHelpEvent(*static_cast<QHelpEvent*>(e)); | |
#ifndef QT_NO_STATUSTIP | |
case QEvent::StatusTip: | |
return new QStatusTipEvent(*static_cast<QStatusTipEvent*>(e)); | |
#endif //QT_NO_STATUSTIP | |
#ifndef QT_NO_ACTION | |
case QEvent::ActionChanged: | |
case QEvent::ActionAdded: | |
case QEvent::ActionRemoved: | |
return new QActionEvent(*static_cast<QActionEvent*>(e)); | |
#endif | |
case QEvent::FileOpen: | |
return new QFileOpenEvent(*static_cast<QFileOpenEvent*>(e)); | |
#ifndef QT_NO_SHORTCUT | |
case QEvent::Shortcut: | |
return new QShortcutEvent(*static_cast<QShortcutEvent*>(e)); | |
#endif //QT_NO_SHORTCUT | |
case QEvent::ShortcutOverride: | |
return new QKeyEvent(*static_cast<QKeyEvent*>(e)); | |
#ifdef QT3_SUPPORT | |
case QEvent::Accel: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::AccelAvailable: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#endif | |
#ifndef QT_NO_WHATSTHIS | |
case QEvent::WhatsThisClicked: | |
return new QWhatsThisClickedEvent(*static_cast<QWhatsThisClickedEvent*>(e)); | |
#endif //QT_NO_WHATSTHIS | |
#ifndef QT_NO_TOOLBAR | |
case QEvent::ToolBarChange: | |
return new QToolBarChangeEvent(*static_cast<QToolBarChangeEvent*>(e)); | |
#endif //QT_NO_TOOLBAR | |
case QEvent::ApplicationActivate: | |
return new QEvent(*e); | |
case QEvent::ApplicationDeactivate: | |
return new QEvent(*e); | |
case QEvent::QueryWhatsThis: | |
return new QHelpEvent(*static_cast<QHelpEvent*>(e)); | |
case QEvent::EnterWhatsThisMode: | |
return new QEvent(*e); | |
case QEvent::LeaveWhatsThisMode: | |
return new QEvent(*e); | |
case QEvent::ZOrderChange: | |
return new QEvent(*e); | |
case QEvent::HoverEnter: | |
case QEvent::HoverLeave: | |
case QEvent::HoverMove: | |
return new QHoverEvent(*static_cast<QHoverEvent*>(e)); | |
case QEvent::AccessibilityHelp: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::AccessibilityDescription: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#ifdef QT_KEYPAD_NAVIGATION | |
case QEvent::EnterEditFocus: | |
return new QEvent(*e); | |
case QEvent::LeaveEditFocus: | |
return new QEvent(*e); | |
#endif | |
case QEvent::AcceptDropsChange: | |
return new QEvent(*e); | |
#ifdef QT3_SUPPORT | |
case QEvent::MenubarUpdated: | |
return new QMenubarUpdatedEvent(*static_cast<QMenubarUpdatedEvent*>(e)); | |
#endif | |
case QEvent::ZeroTimerEvent: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#ifndef QT_NO_GRAPHICSVIEW | |
case QEvent::GraphicsSceneMouseMove: | |
case QEvent::GraphicsSceneMousePress: | |
case QEvent::GraphicsSceneMouseRelease: | |
case QEvent::GraphicsSceneMouseDoubleClick: { | |
QGraphicsSceneMouseEvent *me = static_cast<QGraphicsSceneMouseEvent*>(e); | |
QGraphicsSceneMouseEvent *me2 = new QGraphicsSceneMouseEvent(me->type()); | |
me2->setWidget(me->widget()); | |
me2->setPos(me->pos()); | |
me2->setScenePos(me->scenePos()); | |
me2->setScreenPos(me->screenPos()); | |
// ### for all buttons | |
me2->setButtonDownPos(Qt::LeftButton, me->buttonDownPos(Qt::LeftButton)); | |
me2->setButtonDownPos(Qt::RightButton, me->buttonDownPos(Qt::RightButton)); | |
me2->setButtonDownScreenPos(Qt::LeftButton, me->buttonDownScreenPos(Qt::LeftButton)); | |
me2->setButtonDownScreenPos(Qt::RightButton, me->buttonDownScreenPos(Qt::RightButton)); | |
me2->setLastPos(me->lastPos()); | |
me2->setLastScenePos(me->lastScenePos()); | |
me2->setLastScreenPos(me->lastScreenPos()); | |
me2->setButtons(me->buttons()); | |
me2->setButton(me->button()); | |
me2->setModifiers(me->modifiers()); | |
return me2; | |
} | |
case QEvent::GraphicsSceneContextMenu: { | |
QGraphicsSceneContextMenuEvent *me = static_cast<QGraphicsSceneContextMenuEvent*>(e); | |
QGraphicsSceneContextMenuEvent *me2 = new QGraphicsSceneContextMenuEvent(me->type()); | |
me2->setWidget(me->widget()); | |
me2->setPos(me->pos()); | |
me2->setScenePos(me->scenePos()); | |
me2->setScreenPos(me->screenPos()); | |
me2->setModifiers(me->modifiers()); | |
me2->setReason(me->reason()); | |
return me2; | |
} | |
case QEvent::GraphicsSceneHoverEnter: | |
case QEvent::GraphicsSceneHoverMove: | |
case QEvent::GraphicsSceneHoverLeave: { | |
QGraphicsSceneHoverEvent *he = static_cast<QGraphicsSceneHoverEvent*>(e); | |
QGraphicsSceneHoverEvent *he2 = new QGraphicsSceneHoverEvent(he->type()); | |
he2->setPos(he->pos()); | |
he2->setScenePos(he->scenePos()); | |
he2->setScreenPos(he->screenPos()); | |
he2->setLastPos(he->lastPos()); | |
he2->setLastScenePos(he->lastScenePos()); | |
he2->setLastScreenPos(he->lastScreenPos()); | |
he2->setModifiers(he->modifiers()); | |
return he2; | |
} | |
case QEvent::GraphicsSceneHelp: | |
return new QHelpEvent(*static_cast<QHelpEvent*>(e)); | |
case QEvent::GraphicsSceneDragEnter: | |
case QEvent::GraphicsSceneDragMove: | |
case QEvent::GraphicsSceneDragLeave: | |
case QEvent::GraphicsSceneDrop: { | |
QGraphicsSceneDragDropEvent *dde = static_cast<QGraphicsSceneDragDropEvent*>(e); | |
QGraphicsSceneDragDropEvent *dde2 = new QGraphicsSceneDragDropEvent(dde->type()); | |
dde2->setPos(dde->pos()); | |
dde2->setScenePos(dde->scenePos()); | |
dde2->setScreenPos(dde->screenPos()); | |
dde2->setButtons(dde->buttons()); | |
dde2->setModifiers(dde->modifiers()); | |
return dde2; | |
} | |
case QEvent::GraphicsSceneWheel: { | |
QGraphicsSceneWheelEvent *we = static_cast<QGraphicsSceneWheelEvent*>(e); | |
QGraphicsSceneWheelEvent *we2 = new QGraphicsSceneWheelEvent(we->type()); | |
we2->setPos(we->pos()); | |
we2->setScenePos(we->scenePos()); | |
we2->setScreenPos(we->screenPos()); | |
we2->setButtons(we->buttons()); | |
we2->setModifiers(we->modifiers()); | |
we2->setOrientation(we->orientation()); | |
we2->setDelta(we->delta()); | |
return we2; | |
} | |
#endif | |
case QEvent::KeyboardLayoutChange: | |
return new QEvent(*e); | |
case QEvent::DynamicPropertyChange: | |
return new QDynamicPropertyChangeEvent(*static_cast<QDynamicPropertyChangeEvent*>(e)); | |
#ifndef QT_NO_TABLETEVENT | |
case QEvent::TabletEnterProximity: | |
case QEvent::TabletLeaveProximity: | |
return new QTabletEvent(*static_cast<QTabletEvent*>(e)); | |
#endif //QT_NO_TABLETEVENT | |
case QEvent::NonClientAreaMouseMove: | |
case QEvent::NonClientAreaMouseButtonPress: | |
case QEvent::NonClientAreaMouseButtonRelease: | |
case QEvent::NonClientAreaMouseButtonDblClick: | |
return new QMouseEvent(*static_cast<QMouseEvent*>(e)); | |
case QEvent::MacSizeChange: | |
return new QEvent(*e); | |
case QEvent::ContentsRectChange: | |
return new QEvent(*e); | |
case QEvent::MacGLWindowChange: | |
return new QEvent(*e); | |
case QEvent::FutureCallOut: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#ifndef QT_NO_GRAPHICSVIEW | |
case QEvent::GraphicsSceneResize: { | |
QGraphicsSceneResizeEvent *re = static_cast<QGraphicsSceneResizeEvent*>(e); | |
QGraphicsSceneResizeEvent *re2 = new QGraphicsSceneResizeEvent(); | |
re2->setOldSize(re->oldSize()); | |
re2->setNewSize(re->newSize()); | |
return re2; | |
} | |
case QEvent::GraphicsSceneMove: { | |
QGraphicsSceneMoveEvent *me = static_cast<QGraphicsSceneMoveEvent*>(e); | |
QGraphicsSceneMoveEvent *me2 = new QGraphicsSceneMoveEvent(); | |
me2->setWidget(me->widget()); | |
me2->setNewPos(me->newPos()); | |
me2->setOldPos(me->oldPos()); | |
return me2; | |
} | |
#endif | |
case QEvent::CursorChange: | |
return new QEvent(*e); | |
case QEvent::ToolTipChange: | |
return new QEvent(*e); | |
case QEvent::NetworkReplyUpdated: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
case QEvent::GrabMouse: | |
case QEvent::UngrabMouse: | |
case QEvent::GrabKeyboard: | |
case QEvent::UngrabKeyboard: | |
return new QEvent(*e); | |
case QEvent::TouchBegin: | |
case QEvent::TouchUpdate: | |
case QEvent::TouchEnd: | |
return new QTouchEvent(*static_cast<QTouchEvent*>(e)); | |
#ifndef QT_NO_GESTURES | |
case QEvent::NativeGesture: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
#endif | |
case QEvent::RequestSoftwareInputPanel: | |
case QEvent::CloseSoftwareInputPanel: | |
return new QEvent(*e); | |
case QEvent::UpdateSoftKeys: | |
return new QEvent(*e); | |
case QEvent::User: | |
case QEvent::MaxUser: | |
Q_ASSERT_X(false, "cloneEvent()", "not implemented"); | |
break; | |
default: | |
; | |
} | |
return qcoreStateMachineHandler()->cloneEvent(e); | |
} | |
const QStateMachinePrivate::Handler qt_gui_statemachine_handler = { | |
cloneEvent | |
}; | |
static const QStateMachinePrivate::Handler *qt_guistatemachine_last_handler = 0; | |
int qRegisterGuiStateMachine() | |
{ | |
qt_guistatemachine_last_handler = QStateMachinePrivate::handler; | |
QStateMachinePrivate::handler = &qt_gui_statemachine_handler; | |
return 1; | |
} | |
Q_CONSTRUCTOR_FUNCTION(qRegisterGuiStateMachine) | |
int qUnregisterGuiStateMachine() | |
{ | |
QStateMachinePrivate::handler = qt_guistatemachine_last_handler; | |
return 1; | |
} | |
Q_DESTRUCTOR_FUNCTION(qUnregisterGuiStateMachine) | |
QT_END_NAMESPACE | |
#endif //QT_NO_STATEMACHINE |