00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "jseventutils.h"
00024 #include "qobject_binding.h"
00025
00026 namespace KJSEmbed
00027 {
00028
00029 namespace JSEventUtils
00030 {
00031 KJS::JSObject *event( KJS::ExecState *exec, const QEvent *ev )
00032 {
00033 switch( ev->type() )
00034 {
00035 case QEvent::Resize:
00036 return convertEvent( exec, (QResizeEvent*)ev );
00037 break;
00038 case QEvent::Timer:
00039 return convertEvent( exec, (QTimerEvent*)ev );
00040 break;
00041 case QEvent::MouseButtonPress:
00042 case QEvent::MouseButtonRelease:
00043 case QEvent::MouseButtonDblClick:
00044 case QEvent::MouseMove:
00045 case QEvent::Enter:
00046 case QEvent::Leave:
00047 return convertEvent( exec, (QMouseEvent*)ev );
00048 break;
00049 case QEvent::KeyPress:
00050 case QEvent::KeyRelease:
00051 return convertEvent( exec, (QKeyEvent*)ev );
00052 break;
00053 case QEvent::FocusIn:
00054 case QEvent::FocusOut:
00055 return convertEvent( exec, (QFocusEvent*)ev );
00056 break;
00057 case QEvent::Paint:
00058 return convertEvent( exec, (QPaintEvent*)ev );
00059 break;
00060 case QEvent::Move:
00061 return convertEvent( exec, (QMoveEvent*)ev );
00062 break;
00063 case QEvent::Create:
00064 case QEvent::Destroy:
00065 case QEvent::Show:
00066 case QEvent::Hide:
00067 case QEvent::Close:
00068 return convertEvent( exec, (QCloseEvent*)ev );
00069 break;
00070 case QEvent::Quit:
00071 case QEvent::ParentChange:
00072 case QEvent::ParentAboutToChange:
00073 case QEvent::ThreadChange:
00074 case QEvent::WindowActivate:
00075 case QEvent::WindowDeactivate:
00076 case QEvent::ShowToParent:
00077 case QEvent::HideToParent:
00078 case QEvent::Wheel:
00079 case QEvent::WindowTitleChange:
00080 case QEvent::WindowIconChange:
00081 case QEvent::ApplicationWindowIconChange:
00082 case QEvent::ApplicationFontChange:
00083 case QEvent::ApplicationLayoutDirectionChange:
00084 case QEvent::ApplicationPaletteChange:
00085 case QEvent::PaletteChange:
00086 case QEvent::Clipboard:
00087 case QEvent::Speech:
00088 case QEvent::MetaCall:
00089 case QEvent::SockAct:
00090
00091 case QEvent::DeferredDelete:
00092 case QEvent::DragEnter:
00093 case QEvent::DragMove:
00094 case QEvent::DragLeave:
00095 case QEvent::Drop:
00096 case QEvent::DragResponse:
00097 case QEvent::ChildAdded:
00098 case QEvent::ChildPolished:
00099 case QEvent::ChildRemoved:
00100 case QEvent::ShowWindowRequest:
00101 case QEvent::PolishRequest:
00102 case QEvent::Polish:
00103 case QEvent::LayoutRequest:
00104 case QEvent::UpdateRequest:
00105 case QEvent::EmbeddingControl:
00106 case QEvent::ActivateControl:
00107 case QEvent::DeactivateControl:
00108 case QEvent::ContextMenu:
00109 case QEvent::InputMethod:
00110 case QEvent::AccessibilityPrepare:
00111 case QEvent::TabletMove:
00112 case QEvent::LocaleChange:
00113 case QEvent::LanguageChange:
00114 case QEvent::LayoutDirectionChange:
00115 case QEvent::Style:
00116 case QEvent::TabletPress:
00117 case QEvent::TabletRelease:
00118 case QEvent::OkRequest:
00119 case QEvent::HelpRequest:
00120 case QEvent::IconDrag:
00121 case QEvent::FontChange:
00122 case QEvent::EnabledChange:
00123 case QEvent::ActivationChange:
00124 case QEvent::StyleChange:
00125 case QEvent::IconTextChange:
00126 case QEvent::ModifiedChange:
00127 case QEvent::MouseTrackingChange:
00128 case QEvent::WindowBlocked:
00129 case QEvent::WindowUnblocked:
00130 case QEvent::WindowStateChange:
00131 case QEvent::ToolTip:
00132 case QEvent::WhatsThis:
00133 case QEvent::StatusTip:
00134 case QEvent::ActionChanged:
00135 case QEvent::ActionAdded:
00136 case QEvent::ActionRemoved:
00137 case QEvent::FileOpen:
00138 case QEvent::Shortcut:
00139 case QEvent::ShortcutOverride:
00140 case QEvent::WhatsThisClicked:
00141 case QEvent::ToolBarChange:
00142 case QEvent::ApplicationActivated:
00143 case QEvent::ApplicationDeactivated:
00144 case QEvent::QueryWhatsThis:
00145 case QEvent::EnterWhatsThisMode:
00146 case QEvent::LeaveWhatsThisMode:
00147 case QEvent::ZOrderChange:
00148 case QEvent::HoverEnter:
00149 case QEvent::HoverLeave:
00150 case QEvent::HoverMove:
00151 case QEvent::AccessibilityHelp:
00152 case QEvent::AccessibilityDescription:
00153 default:
00154 return convertEvent( exec, ev );
00155 break;
00156 }
00157 }
00158
00159 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QEvent *ev)
00160 {
00161 ObjectBinding *evnt = new ObjectBinding( exec, "QEvent", ev );
00162 evnt->put( exec, "type", KJS::jsNumber( (int) ev->type()) );
00163 evnt->put( exec, "spontaneous", KJS::jsBoolean(ev->spontaneous()) );
00164 evnt->put( exec, "isAccepted", KJS::jsBoolean(ev->isAccepted()) );
00165 return evnt;
00166 }
00167
00168 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QInputEvent *ev)
00169 {
00170 KJS::JSObject *iev = convertEvent( exec, (QEvent *)ev );
00171 iev->put( exec, "modifiers", KJS::jsNumber( ev->modifiers() ));
00172 return iev;
00173 }
00174
00175 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QMouseEvent *ev)
00176 {
00177 KJS::JSObject *mev = convertEvent( exec, (QInputEvent *)ev );
00178
00179 mev->put( exec, "pos", convertToValue( exec, ev->pos() ));
00180 mev->put( exec, "x", KJS::jsNumber( ev->x() ));
00181 mev->put( exec, "y", KJS::jsNumber( ev->y() ));
00182
00183 mev->put( exec, "globalPos", convertToValue( exec, ev->globalPos() ));
00184 mev->put( exec, "globalX", KJS::jsNumber( ev->globalX() ));
00185 mev->put( exec, "globalY", KJS::jsNumber( ev->globalY() ));
00186
00187 mev->put( exec, "button", KJS::jsNumber(ev->button()) );
00188 mev->put( exec, "buttons", KJS::jsNumber(ev->buttons()) );
00189
00190 return mev;
00191 }
00192
00193 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QPaintEvent *ev)
00194 {
00195 KJS::JSObject *pev = convertEvent( exec, (QEvent *)ev );
00196
00197 pev->put( exec, "rect", convertToValue( exec, ev->rect() ) );
00198
00199 return pev;
00200 }
00201
00202 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QKeyEvent *ev)
00203 {
00204 KJS::JSObject *kev = convertEvent( exec, (QInputEvent *)ev );
00205
00206 kev->put( exec, "key", KJS::jsNumber(ev->key()) );
00207 kev->put( exec, "text", KJS::jsString(ev->text()));
00208 kev->put( exec, "isAutoRepeat", KJS::jsBoolean(ev->isAutoRepeat()) );
00209 kev->put( exec, "count", KJS::jsNumber( ev->count()) );
00210 return kev;
00211 }
00212
00213 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QInputMethodEvent *ev)
00214 {
00215 KJS::JSObject *qev = convertEvent( exec, (QEvent *)ev );
00216
00217 qev->put( exec, "commitString", KJS::jsString(ev->commitString()) );
00218 qev->put( exec, "preeditString", KJS::jsString(ev->preeditString()) );
00219 qev->put( exec, "replacementLength", KJS::jsNumber(ev->replacementLength()) );
00220 qev->put( exec, "replacementStart", KJS::jsNumber(ev->replacementStart()) );
00221 return qev;
00222 }
00223
00224 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QResizeEvent *ev)
00225 {
00226 KJS::JSObject *rev = convertEvent( exec, (QEvent *)ev );
00227
00228 rev->put( exec, "size", convertToValue( exec, ev->size() ));
00229 rev->put( exec, "oldSize", convertToValue( exec, ev->oldSize() ));
00230 return rev;
00231 }
00232
00233 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QCloseEvent *ev)
00234 {
00235 KJS::JSObject *cev = convertEvent( exec, (QEvent *)ev );
00236
00237 cev->put( exec, "isAccepted", KJS::jsBoolean(ev->isAccepted()) );
00238 return cev;
00239 }
00240
00241 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QMoveEvent *ev)
00242 {
00243 KJS::JSObject *mev = convertEvent( exec, (QEvent *)ev );
00244
00245 mev->put( exec, "pos", convertToValue( exec, ev->pos() ));
00246 mev->put( exec, "oldPos", convertToValue( exec, ev->oldPos() ));
00247 return mev;
00248 }
00249
00250 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QWheelEvent *ev)
00251 {
00252 KJS::JSObject *wev = convertEvent( exec, (QInputEvent *)ev );
00253
00254 wev->put( exec, "delta", KJS::jsNumber(ev->delta()) );
00255 wev->put( exec, "pos", convertToValue( exec, ev->pos() ) );
00256 wev->put( exec, "globalPos", convertToValue( exec, ev->globalPos() ) );
00257 wev->put( exec, "x", KJS::jsNumber(ev->x()) );
00258 wev->put( exec, "y", KJS::jsNumber(ev->y()) );
00259 wev->put( exec, "globalX", KJS::jsNumber(ev->globalX()) );
00260 wev->put( exec, "globalY", KJS::jsNumber(ev->globalY()) );
00261 wev->put( exec, "orientation", KJS::jsNumber(ev->orientation()) );
00262 wev->put( exec, "buttons", KJS::jsNumber(ev->buttons()) );
00263
00264 return wev;
00265 }
00266
00267 KJS::JSObject *convertEvent( KJS::ExecState * exec, const QDropEvent * ev)
00268 {
00269 KJS::JSObject *dev = convertEvent( exec, (QEvent *)ev );
00270 dev->put( exec, "pos", convertToValue( exec, ev->pos() ) );
00271 dev->put( exec, "source", new QObjectBinding(exec, (QObject*)ev->source() ) );
00272 dev->put( exec, "dropAction", KJS::jsNumber( (int)(ev->dropAction()) ) );
00273 dev->put( exec, "keyboardModifiers", KJS::jsNumber( (int)(ev->keyboardModifiers()) ) );
00274 dev->put( exec, "possibleActions", KJS::jsNumber( (int)(ev->possibleActions()) ) );
00275 dev->put( exec, "proposedAction", KJS::jsNumber( (int)(ev->proposedAction()) ) );
00276 return dev;
00277 }
00278
00279 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QDragMoveEvent *ev)
00280 {
00281 KJS::JSObject *mev = convertEvent(exec, (QDropEvent *)ev );
00282 mev->put( exec, "answerRect", convertToValue( exec, ev->answerRect() ) );
00283 return mev;
00284 }
00285
00286 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QTimerEvent *ev)
00287 {
00288 KJS::JSObject *dev = convertEvent( exec, (QEvent *)ev );
00289 dev->put( exec, "timerId", KJS::jsNumber(ev->timerId()) );
00290 return dev;
00291 }
00292
00293 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QContextMenuEvent *ev)
00294 {
00295 KJS::JSObject *cxev = convertEvent( exec, (QInputEvent *)ev );
00296 cxev->put( exec, "x", KJS::jsNumber(ev->x()) );
00297 cxev->put( exec, "y", KJS::jsNumber(ev->y()) );
00298 cxev->put( exec, "globalX", KJS::jsNumber(ev->globalX()) );
00299 cxev->put( exec, "globalY", KJS::jsNumber(ev->globalY()) );
00300 cxev->put( exec, "pos",convertToValue( exec, ev->pos() ) );
00301 cxev->put( exec, "globalPos", convertToValue( exec, ev->globalPos() ) );
00302 cxev->put( exec, "reason", KJS::jsNumber((int)ev->reason()) );
00303 return cxev;
00304 }
00305
00306 KJS::JSObject *convertEvent( KJS::ExecState *exec, const QFocusEvent *ev)
00307 {
00308 KJS::JSObject *dev = convertEvent( exec, (QEvent *)ev );
00309 dev->put( exec, "gotFocus", KJS::jsBoolean( ev->gotFocus() ) );
00310 dev->put( exec, "lostFocus", KJS::jsBoolean( ev->lostFocus() ));
00311
00312 dev->put( exec, "reason", KJS::jsNumber((int) const_cast<QFocusEvent*>( ev )->reason() ) );
00313 return dev;
00314 }
00315 }
00316 }
00317
00318