[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kjsembed
From: Erik Lloyd Bunce <kde () bunce ! us>
Date: 2006-12-13 22:29:47
Message-ID: 1166048987.835819.31962.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 613489 by bunce:
Add binding for QUiLoader.
Make sure QWidget/QAction/QActionGroup/QLayout return a valid binding
from ctor to make createQObject() work despite current design
limitations.
Add test cases for QUiLoader and the objects create/returned by it.
M +4 -0 TODO-KDE4
M +2 -1 kjsembed/CMakeLists.txt
M +4 -0 kjsembed/kjsembed.cpp
M +1 -1 kjsembed/object_binding.h
M +12 -19 kjsembed/qaction_binding.cpp
M +10 -2 kjsembed/qlayout_binding.cpp
M +10 -4 kjsembed/qobject_binding.cpp
AM kjsembed/quiloader_binding.cpp [License: LGPL (v2+)]
AM kjsembed/quiloader_binding.h [License: LGPL (v2+)]
M +10 -3 kjsembed/qwidget_binding.cpp
M +1 -1 tests/test.ui
M +23 -4 tests/uitest.js
A tests/uitest2.js
--- trunk/KDE/kdelibs/kjsembed/TODO-KDE4 #613488:613489
@@ -71,6 +71,10 @@
<richmoore> even now, we don't really do much with the internals of kjs - we just \
use a small number of bits of the api
Erik's List:
+* Make it so bindings can be instantiated without containing objects for use in
+ auto-binding-assignment done by createQObject without having to create a
+ temporary throw-away object.
+
* Load sub-sets of the built-in bindings
- core, file access, gui, etc.
--- trunk/KDE/kdelibs/kjsembed/kjsembed/CMakeLists.txt #613488:613489
@@ -41,6 +41,7 @@
bind_qtimer.cpp
brush.cpp
QBrush_bind.cpp
+ quiloader_binding.cpp
)
kde4_automoc(${kjsembed_LIB_SRCS} )
@@ -72,7 +73,7 @@
settings.h svg_binding.h filedialog_binding.h
brush.h color.h dom.h font.h image.h pen.h
pixmap.h point.h rect.h size.h url.h pointer.h
- bind_qlcdnumber.h bind_qtimer.h
+ bind_qlcdnumber.h bind_qtimer.h quiloader_binding.h
DESTINATION ${INCLUDE_INSTALL_DIR}/kjsembed )
--- trunk/KDE/kdelibs/kjsembed/kjsembed/kjsembed.cpp #613488:613489
@@ -25,7 +25,10 @@
#include "static_binding.h"
#include "iosupport.h"
+#include "quiloader_binding.h"
+#ifdef KJSEMBED_FORMBUILDER_BINDING
#include "qformbuilder_binding.h"
+#endif
#include "qpainter_binding.h"
#include "qwidget_binding.h"
#include "qaction_binding.h"
@@ -117,6 +120,7 @@
#ifdef KJSEMBED_FORMBUILDER_BINDING
StaticConstructor::add( exec, parent, FormBuilder::constructor() ); // Ctor
#endif
+ StaticConstructor::add( exec, parent, UiLoaderBinding::constructor() ); // Ctor
StaticConstructor::add( exec, parent, QWidgetBinding::constructor() ); // Ctor
StaticConstructor::add( exec, parent, Layout::constructor() ); // Ctor
StaticConstructor::add( exec, parent, Action::constructor() ); // Ctor
--- trunk/KDE/kdelibs/kjsembed/kjsembed/object_binding.h #613488:613489
@@ -132,7 +132,7 @@
{
if( m_owner == JSOwned )
{
- qDebug("object cleans up");
+ //qDebug("object cleans up");
m_value->cleanup();
}
delete m_value;
--- trunk/KDE/kdelibs/kjsembed/kjsembed/qaction_binding.cpp #613488:613489
@@ -43,26 +43,19 @@
NO_STATICS( Action )
START_CTOR( Action, QAction, 0 )
- if( args.size() == 2 )
- {
- QObject *parent = KJSEmbed::extractObject<QObject>(exec, args, 0, 0);
- QString actionName = KJSEmbed::extractQString(exec, args, 1);
+ QObject *parent = KJSEmbed::extractObject<QObject>(exec, args, 0, 0);
+ QString actionName = KJSEmbed::extractQString(exec, args, 1);
- QAction *action = uiLoader()->createAction(parent, actionName);
- if( action )
- {
- KJS::JSObject *actionObject = KJSEmbed::createQObject( exec, action );
- return actionObject;
- }
- else
- {
- return KJS::throwError(exec, KJS::GeneralError, i18n("Action takes 2 \
args."));
- // return KJSEmbed::throwError(exec, i18n("Action takes 2 args."));
- }
+ QAction *action = uiLoader()->createAction(parent, actionName);
+ if( action )
+ {
+ KJS::JSObject *actionObject = new Action( exec, action );
+ return actionObject;
}
- // Trow error incorrect args
- return KJS::throwError(exec, KJS::GeneralError, i18n("Must supply a valid \
parent."));
- // return KJSEmbed::throwError(exec, i18n("Must supply a valid parent."));
+ else
+ {
+ return KJS::throwError(exec, KJS::GeneralError, i18n("Action takes 2 \
args.")); + }
END_CTOR
@@ -81,7 +74,7 @@
QActionGroup *action = uiLoader()->createActionGroup(parent, actionName);
if( action )
{
- KJS::JSObject *actionObject = KJSEmbed::createQObject( exec, action );
+ KJS::JSObject *actionObject = new ActionGroup( exec, action );
return actionObject;
}
else
--- trunk/KDE/kdelibs/kjsembed/kjsembed/qlayout_binding.cpp #613488:613489
@@ -68,6 +68,7 @@
START_CTOR( Layout, QLayout, 0 )
// qDebug("Layout::CTOR(): args.size()=%d", args.size());
+ QLayout *layout = 0;
if( args.size() > 0 )
{
QString layoutName = args[0]->toString(exec).qstring();
@@ -88,8 +89,15 @@
layoutName));
// return KJSEmbed::throwError(exec, i18n("'%1' is not a valid \
QLayout.").arg(layoutName)); }
- // Trow error incorrect args
- return KJS::throwError(exec, KJS::GeneralError, i18n("Must supply a layout \
name.")); + else
+ {
+ // ZBTODO: This is purely a hack to work around the binding constructor \
nonsense + layout = new QGridLayout();
+ return new Layout(exec, layout);
+ }
+
+ // should Trow error incorrect args
+ //return KJS::throwError(exec, KJS::GeneralError, i18n("Must supply a layout \
name."));
// return KJSEmbed::throwError(exec, i18n("Must supply a layout name."));
END_CTOR
--- trunk/KDE/kdelibs/kjsembed/kjsembed/qobject_binding.cpp #613488:613489
@@ -36,6 +36,8 @@
#include <kjs/array_instance.h>
#include <kjs/function_object.h>
+//#define CREATEQOBJ_DIAG
+
using namespace KJSEmbed;
QByteArray createSignal( const QByteArray &sig )
@@ -552,7 +554,7 @@
}
-KJS::JSObject *KJSEmbed::createQObject(KJS::ExecState *exec, QObject *value, \
KJSEmbed::ObjectBinding::Ownership owner) +KJS::JSObject* \
KJSEmbed::createQObject(KJS::ExecState *exec, QObject *value, \
KJSEmbed::ObjectBinding::Ownership owner) {
if ( 0 == value )
return new KJS::JSObject();
@@ -567,12 +569,14 @@
clazz = meta->className();
if ( parent->hasProperty( exec, KJS::Identifier(clazz) ) )
{
-// qDebug() << "createQObject(): clazz=" << clazz << " value=" << value;// \
<< " typeid(T)=" << typeid(T).name(); +#ifdef CREATEQOBJ_DIAG
+ qDebug() << "createQObject(): clazz=" << clazz << " value=" << value;// << \
" typeid(T)=" << typeid(T).name(); +#endif
returnValue = StaticConstructor::construct( exec, parent, clazz );
if( returnValue )
{
// If its a value type setValue
- KJSEmbed::QObjectBinding *imp = \
extractBindingImp<KJSEmbed::QObjectBinding>(exec, returnValue ); + \
KJSEmbed::QObjectBinding *imp = extractBindingImp<QObjectBinding>(exec, returnValue \
); if( imp )
{
imp->setObject( value );
@@ -595,7 +599,9 @@
}
else
{
-// qDebug("%s not a bound type, move up the chain", meta->className() );
+#ifdef CREATEQOBJ_DIAG
+ qDebug("%s not a bound type, move up the chain", meta->className() );
+#endif
meta = meta->superClass();
}
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.cpp #property svn:eol-style
+ native
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.cpp #property svn:keywords
+ author id date revision
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.cpp #property svn:mime-type
+ text/plain
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.h #property svn:eol-style
+ native
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.h #property svn:keywords
+ author id date revision
** trunk/KDE/kdelibs/kjsembed/kjsembed/quiloader_binding.h #property svn:mime-type
+ text/plain
--- trunk/KDE/kdelibs/kjsembed/kjsembed/qwidget_binding.cpp #613488:613489
@@ -143,6 +143,7 @@
NO_STATICS( QWidgetBinding )
START_CTOR( QWidgetBinding, QWidget, 0 )
+ //qDebug() << "QWidgetBinding::CTOR args.size()=" << args.size();
if( args.size() > 0 )
{
QString widgetName = args[0]->toString(exec).qstring();
@@ -153,13 +154,19 @@
parentWidget = parentImp->object<QWidget>();
}
- QWidget *widget = uiLoader()->createWidget(widgetName, parentWidget, \
"QWidget"); + QWidget* widget = uiLoader()->createWidget(widgetName, \
parentWidget, "QWidget"); if( widget )
- {
return new QWidgetBinding(exec, widget);
- }
+
return KJS::throwError(exec, KJS::TypeError, i18n("'%1' is not a valid \
QWidget.", widgetName)); }
+ else
+ {
+ QWidget* widget = new QWidget();
+ if (widget)
+ return new QWidgetBinding(exec, widget);
+ }
+
return KJS::throwError(exec, KJS::GeneralError, i18n("Must supply a widget \
name.")); END_CTOR
--- trunk/KDE/kdelibs/kjsembed/tests/test.ui #613488:613489
@@ -3,7 +3,7 @@
<comment></comment>
<exportmacro></exportmacro>
<class>Form</class>
- <widget class="QWidget" name="Form" >
+ <widget class="QWidget" name="TestUI" >
<property name="geometry" >
<rect>
<x>0</x>
--- trunk/KDE/kdelibs/kjsembed/tests/uitest.js #613488:613489
@@ -19,10 +19,29 @@
Boston, MA 02110-1301, USA.
*/
+// create the loader
+var loader = new QUiLoader();
-var widget = new Form("test.ui", this);
-print( "widget value: " + widget );
-for( y in widget ) print("widget property: " + y);
+// display loader info
+println( "loader value: " + loader );
+for( y in loader ) println("loader property: " + y);
+
+// get and display the UILoader's pluginPaths
+paths = loader.pluginPaths();
+println( "pluginPath value:" + paths );
+println( "pluginPath len:" + paths.length );
+for ( var x = 0; x < paths.length; x++ )
+ println( "path " + x + ": " + paths[x] );
+
+// load a UI from test.ui
+var widget = loader.load("test.ui");
+println( "widget value: " + widget );
+
+// iterate through the base widgets properties
+for( y in widget ) println("widget property: " + y);
+
+// show it
widget.show();
-exec()
+// give the user time to see it
+exec();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic