kjsembed
jseventutils.cpp
Go to the documentation of this file.
00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2003,2004,2005, 2006 Ian Reinhart Geiser <geiseri@kde.org> 00003 Copyright (C) 2003,2004,2005, 2006 Matt Broadstone <mbroadst@gmail.com> 00004 Copyright (C) 2003,2004,2005, 2006 Richard J. Moore <rich@kde.org> 00005 Copyright (C) 2003,2004,2005, 2006 Erik L. Bunce <kde@bunce.us> 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Library General Public 00009 License as published by the Free Software Foundation; either 00010 version 2 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00020 Boston, MA 02110-1301, USA. 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 //case QEvent::WinEventAct: conflicts with QEvent::QueryWhatsThis 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 // pev->put( exec, "region", convertToValue( exec, ev->region() ) ); 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 //Gold star trolltech! 00312 dev->put( exec, "reason", KJS::jsNumber((int) const_cast<QFocusEvent*>( ev )->reason() ) ); 00313 return dev; 00314 } 00315 }// namespace JSEventUtils 00316 }// namespace KJSEmbed 00317 00318 //kate: indent-spaces on; indent-width 4; replace-tabs on; indent-mode cstyle;
KDE 4.6 API Reference