kjsembed
qwidget_binding.cpp
Go to the documentation of this file.
00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2005, 2006 Ian Reinhart Geiser <geiseri@kde.org> 00003 Copyright (C) 2005, 2006 Matt Broadstone <mbroadst@gmail.com> 00004 Copyright (C) 2005, 2006 Richard J. Moore <rich@kde.org> 00005 Copyright (C) 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 #include "qwidget_binding.h" 00023 #include "static_binding.h" 00024 #include "qpainter_binding.h" 00025 #include "kjseglobal.h" 00026 00027 #include <kjs/object.h> 00028 #include <QtCore/QDebug> 00029 00030 #include <QtGui/QWidget> 00031 #include <QtGui/QAction> 00032 #include <QtGui/QLayout> 00033 #include <QtUiTools/QUiLoader> 00034 00035 #include <QtCore/QFile> 00036 00037 namespace KJSEmbed 00038 { 00039 static QUiLoader *gUiLoader = 0L; 00040 00041 QUiLoader *uiLoader() 00042 { 00043 if( gUiLoader == 0 ) 00044 gUiLoader = new QUiLoader(); 00045 return gUiLoader; 00046 } 00047 } 00048 00049 using namespace KJSEmbed; 00050 00051 namespace WidgetNS 00052 { 00053 00054 START_QOBJECT_METHOD( adjustSize, QWidget ) 00055 object->adjustSize(); 00056 END_QOBJECT_METHOD 00057 START_QOBJECT_METHOD( grabMouse, QWidget ) 00058 object->grabMouse(); 00059 END_QOBJECT_METHOD 00060 START_QOBJECT_METHOD( grabKeyboard, QWidget ) 00061 object->grabKeyboard(); 00062 END_QOBJECT_METHOD 00063 START_QOBJECT_METHOD( releaseMouse, QWidget ) 00064 object->releaseMouse(); 00065 END_QOBJECT_METHOD 00066 START_QOBJECT_METHOD( releaseKeyboard, QWidget ) 00067 object->releaseKeyboard(); 00068 END_QOBJECT_METHOD 00069 START_QOBJECT_METHOD( childAt, QWidget ) 00070 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 0); 00071 int x,y; 00072 QWidget *child = 0; 00073 if( pt.isNull()) 00074 { 00075 x = KJSEmbed::extractVariant<int>(exec, args, 0); 00076 y = KJSEmbed::extractVariant<int>(exec, args, 1); 00077 child = object->childAt(x,y); 00078 } 00079 else 00080 { 00081 child = object->childAt(pt); 00082 } 00083 result = new QWidgetBinding(exec, child); 00084 END_QOBJECT_METHOD 00085 START_QOBJECT_METHOD( focusWidget, QWidget ) 00086 result = KJSEmbed::createQObject(exec, object->focusWidget() ); 00087 END_QOBJECT_METHOD 00088 START_QOBJECT_METHOD( heightForWidth, QWidget ) 00089 // qDebug() << "heightForWidth() object=" << object << " imp=" << imp; 00090 int width = KJSEmbed::extractInt(exec, args, 0); 00091 result = KJS::jsNumber( object->heightForWidth(width)); 00092 END_QOBJECT_METHOD 00093 START_QOBJECT_METHOD( mapFrom, QWidget ) 00094 QWidget *w = KJSEmbed::extractObject<QWidget>(exec, args, 0, 0); 00095 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 1); 00096 result = KJSEmbed::createVariant(exec, "QPoint", object->mapFrom(w, pt)); 00097 END_QOBJECT_METHOD 00098 START_QOBJECT_METHOD( mapFromGlobal, QWidget ) 00099 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 0); 00100 result = KJSEmbed::createVariant(exec, "QPoint", object->mapFromGlobal(pt)); 00101 END_QOBJECT_METHOD 00102 START_QOBJECT_METHOD( mapFromParent, QWidget ) 00103 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 0); 00104 result = KJSEmbed::createVariant(exec, "QPoint", object->mapFromParent(pt)); 00105 END_QOBJECT_METHOD 00106 START_QOBJECT_METHOD( mapTo, QWidget ) 00107 QWidget *w = KJSEmbed::extractObject<QWidget>(exec, args, 0, 0); 00108 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 1); 00109 result = KJSEmbed::createVariant(exec, "QPoint", object->mapTo(w, pt)); 00110 END_QOBJECT_METHOD 00111 START_QOBJECT_METHOD( mapToParent, QWidget ) 00112 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 0); 00113 result = KJSEmbed::createVariant(exec, "QPoint", object->mapToParent(pt)); 00114 END_QOBJECT_METHOD 00115 START_QOBJECT_METHOD( mapToGlobal, QWidget ) 00116 QPoint pt = KJSEmbed::extractVariant<QPoint>(exec, args, 0); 00117 result = KJSEmbed::createVariant(exec, "QPoint", object->mapToGlobal(pt)); 00118 END_QOBJECT_METHOD 00119 00120 } 00121 00122 START_METHOD_LUT( QWidgetBinding ) 00123 {"adjustSize", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::adjustSize}, 00124 {"grabMouse", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::grabMouse}, 00125 {"grabKeyboard", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::grabKeyboard}, 00126 {"releaseMouse", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::releaseMouse}, 00127 {"releaseKeyboard", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::releaseKeyboard}, 00128 {"childAt", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::childAt}, 00129 {"focusWidget", 0, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::focusWidget}, 00130 {"heightForWidth", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::heightForWidth}, 00131 {"mapFrom", 2, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapFrom}, 00132 {"mapFromGlobal", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapFromGlobal}, 00133 {"mapFromParent", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapFromParent}, 00134 {"mapTo", 2, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapTo}, 00135 {"mapToParent", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapToParent}, 00136 {"mapToGlobal", 1, KJS::DontDelete|KJS::ReadOnly, &WidgetNS::mapToGlobal} 00137 END_METHOD_LUT 00138 00139 NO_ENUMS( QWidgetBinding ) 00140 NO_STATICS( QWidgetBinding ) 00141 00142 KJSO_SIMPLE_BINDING_CTOR( QWidgetBinding, QWidget, QObjectBinding ) 00143 KJSO_QOBJECT_BIND(QWidgetBinding, QWidget) 00144 00145 KJSO_START_CTOR( QWidgetBinding, QWidget, 0 ) 00146 //qDebug() << "QWidgetBinding::CTOR args.size()=" << args.size(); 00147 if( args.size() > 0 ) 00148 { 00149 QString widgetName = toQString(args[0]->toString(exec)); 00150 QWidget *parentWidget = 0; 00151 KJSEmbed::QObjectBinding *parentImp = KJSEmbed::extractBindingImp<KJSEmbed::QObjectBinding>(exec, args[1] ); 00152 if( parentImp ) 00153 { 00154 parentWidget = parentImp->object<QWidget>(); 00155 } 00156 00157 QWidget* widget = uiLoader()->createWidget(widgetName, parentWidget, "QWidget"); 00158 if( widget ) 00159 return new QWidgetBinding(exec, widget); 00160 00161 return KJS::throwError(exec, KJS::TypeError, toUString(i18n("'%1' is not a valid QWidget.", widgetName))); 00162 } 00163 else 00164 { 00165 QWidget* widget = new QWidget(); 00166 if (widget) 00167 return new QWidgetBinding(exec, widget); 00168 } 00169 00170 return KJS::throwError(exec, KJS::GeneralError, toUString(i18n("Must supply a widget name."))); 00171 END_CTOR 00172 00173 //kate: indent-spaces on; indent-width 4; replace-tabs on; indent-mode cstyle;
KDE 4.6 API Reference