00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
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
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