[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.4/kdebase/runtime/plasma/scriptengines/javascript/simplebindings
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2010-02-24 8:01:31
Message-ID: 1266998491.957404.7293.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1095392 by aseigo:

fix layout parent detection


 M  +10 -32    anchorlayout.cpp  
 M  +4 -26     gridlayout.cpp  
 M  +48 -18    linearlayout.cpp  


--- branches/KDE/4.4/kdebase/runtime/plasma/scriptengines/javascript/simplebindings/anchorlayout.cpp \
#1095391:1095392 @@ -43,33 +43,11 @@
 
 /////////////////////////////////////////////////////////////
 
-QGraphicsLayoutItem *convertToLayoutItem (QScriptContext *ctx, int index = 0)
-{
-    QObject *object = ctx->argument(index).toQObject();
-    QGraphicsLayoutItem *item = qobject_cast<QGraphicsWidget*>(object);
+QGraphicsLayoutItem *extractLayoutItem (QScriptContext *ctx, int index = 0);
 
-    if (!item) {
-        item = qscriptvalue_cast<QGraphicsAnchorLayout*>(ctx->argument(index));
-    }
-
-    if (!item) {
-        AppletInterface *interface = qobject_cast<AppletInterface*>(object);
-
-        if (!interface) {
-            interface = \
qobject_cast<AppletInterface*>(ctx->engine()->globalObject().property("plasmoid").toQObject());
                
-        }
-
-        if (interface) {
-            item = interface->applet();
-        }
-    }
-
-    return item;
-}
-
 static QScriptValue ctor(QScriptContext *ctx, QScriptEngine *eng)
 {
-    QGraphicsLayoutItem *parent = convertToLayoutItem(ctx);
+    QGraphicsLayoutItem *parent = extractLayoutItem(ctx);
 
     if (!parent) {
         return ctx->throwError(i18n("The parent must be a QGraphicsLayoutItem"));
@@ -79,8 +57,8 @@
 }
 
 BEGIN_DECLARE_METHOD(QGraphicsAnchorLayout, addAnchor) {
-    QGraphicsLayoutItem *item1 = convertToLayoutItem(ctx, 0);
-    QGraphicsLayoutItem *item2 = convertToLayoutItem(ctx, 2);
+    QGraphicsLayoutItem *item1 = extractLayoutItem(ctx, 0);
+    QGraphicsLayoutItem *item2 = extractLayoutItem(ctx, 2);
 
     if (!item1 || !item2) {
         return eng->undefinedValue();
@@ -93,8 +71,8 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsAnchorLayout, anchor) {
-    QGraphicsLayoutItem *item1 = convertToLayoutItem(ctx, 0);
-    QGraphicsLayoutItem *item2 = convertToLayoutItem(ctx, 2);
+    QGraphicsLayoutItem *item1 = extractLayoutItem(ctx, 0);
+    QGraphicsLayoutItem *item2 = extractLayoutItem(ctx, 2);
 
     if (!item1 || !item2) {
         return eng->undefinedValue();
@@ -107,8 +85,8 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsAnchorLayout, addCornerAnchors) {
-    QGraphicsLayoutItem *item1 = convertToLayoutItem(ctx, 0);
-    QGraphicsLayoutItem *item2 = convertToLayoutItem(ctx, 2);
+    QGraphicsLayoutItem *item1 = extractLayoutItem(ctx, 0);
+    QGraphicsLayoutItem *item2 = extractLayoutItem(ctx, 2);
 
     if (!item1 || !item2) {
         return eng->undefinedValue();
@@ -121,8 +99,8 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsAnchorLayout, addAnchors) {
-    QGraphicsLayoutItem *item1 = convertToLayoutItem(ctx, 0);
-    QGraphicsLayoutItem *item2 = convertToLayoutItem(ctx, 1);
+    QGraphicsLayoutItem *item1 = extractLayoutItem(ctx, 0);
+    QGraphicsLayoutItem *item2 = extractLayoutItem(ctx, 1);
 
     if (!item1 || !item2) {
         return eng->undefinedValue();
--- branches/KDE/4.4/kdebase/runtime/plasma/scriptengines/javascript/simplebindings/gridlayout.cpp \
#1095391:1095392 @@ -72,33 +72,11 @@
 
 /////////////////////////////////////////////////////////////
 
-QGraphicsLayoutItem *getLayoutItem(QScriptContext *ctx, int index = 0)
-{
-    QObject *object = ctx->argument(index).toQObject();
-    QGraphicsLayoutItem *item = qobject_cast<QGraphicsWidget*>(object);
+QGraphicsLayoutItem *extractLayoutItem(QScriptContext *ctx, int index = 0);
 
-    if (!item) {
-        item = qscriptvalue_cast<QGraphicsLayout*>(ctx->argument(index));
-    }
-
-    if (!item) {
-        AppletInterface *interface = qobject_cast<AppletInterface*>(object);
-
-        if (!interface) {
-            interface = \
qobject_cast<AppletInterface*>(ctx->engine()->globalObject().property("plasmoid").toQObject());
                
-        }
-
-        if (interface) {
-            item = interface->applet();
-        }
-    }
-
-    return item;
-}
-
 static QScriptValue ctor(QScriptContext *ctx, QScriptEngine *eng)
 {
-    QGraphicsLayoutItem *parent = getLayoutItem(ctx);
+    QGraphicsLayoutItem *parent = extractLayoutItem(ctx);
 
     if (!parent) {
         return ctx->throwError(i18n("The parent must be a QGraphicsLayoutItem"));
@@ -108,7 +86,7 @@
 }
 
 BEGIN_DECLARE_METHOD(QGraphicsGridLayout, setAlignment) {
-    QGraphicsLayoutItem *item = getLayoutItem(ctx);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx);
 
     if (!item) {
         return eng->undefinedValue();
@@ -119,7 +97,7 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsGridLayout, addItem) {
-    QGraphicsLayoutItem *item = getLayoutItem(ctx);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx);
 
     if (!item) {
         return eng->undefinedValue();
--- branches/KDE/4.4/kdebase/runtime/plasma/scriptengines/javascript/simplebindings/linearlayout.cpp \
#1095391:1095392 @@ -19,9 +19,11 @@
 #include <QtScript/QScriptValue>
 #include <QtScript/QScriptEngine>
 #include <QtScript/QScriptContext>
+#include <QtGui/QGraphicsAnchorLayout>
+#include <QtGui/QGraphicsLayout>
+#include <QtGui/QGraphicsLinearLayout>
+#include <QtGui/QGraphicsGridLayout>
 #include <QtGui/QGraphicsWidget>
-#include <QtGui/QGraphicsLinearLayout>
-#include <QtGui/QGraphicsLayout>
 
 #include <Plasma/Applet>
 
@@ -32,6 +34,8 @@
 Q_DECLARE_METATYPE(QGraphicsWidget*)
 Q_DECLARE_METATYPE(QGraphicsLayout*)
 Q_DECLARE_METATYPE(QGraphicsLayoutItem*)
+Q_DECLARE_METATYPE(QGraphicsAnchorLayout*)
+Q_DECLARE_METATYPE(QGraphicsGridLayout*)
 DECLARE_POINTER_METATYPE(QGraphicsLinearLayout)
 
 DECLARE_VOID_NUMBER_METHOD(QGraphicsLinearLayout, removeAt)
@@ -42,24 +46,45 @@
 
 /////////////////////////////////////////////////////////////
 
-QGraphicsLayoutItem *layoutItem(QScriptContext *ctx, int index = 0)
+//    Q_DECLARE_METATYPE(QGraphicsLayoutItem*)
+QGraphicsLayoutItem *extractLayoutItem(QScriptContext *ctx, int index = 0)
 {
-    QObject *object = ctx->argument(index).toQObject();
-    QGraphicsLayoutItem *item = qobject_cast<QGraphicsWidget*>(object);
+    QScriptValue v = ctx->argument(index);
+    if (ctx->argumentCount() == 0 || v.isQObject()) {
+        QObject *object = v.toQObject();
+        QGraphicsWidget *w = qobject_cast<QGraphicsWidget *>(object);
+        if (!w) {
+            AppletInterface *interface = qobject_cast<AppletInterface*>(object);
+            if (!interface) {
+                interface =  \
qobject_cast<AppletInterface*>(ctx->engine()->globalObject().property("plasmoid").toQObject());
 +            }
 
-    if (!item) {
-        item = qscriptvalue_cast<QGraphicsLayout*>(ctx->argument(index));
+            if (interface) {
+                w = interface->applet();
+            }
+        }
+
+        return w;
     }
 
+    QVariant variant = v.toVariant();
+    QGraphicsLayoutItem *item = variant.value<QGraphicsLayoutItem *>();
+    //this is horribly ugly code, but when a QLinearLayout* is stuffed into a \
QVariant, +    //QVariant does not know that it is a QGraphicsLayoutItem. repeat for \
all subclasses +    //of same
     if (!item) {
-        AppletInterface *interface = qobject_cast<AppletInterface*>(object);
+        item = variant.value<QGraphicsLayout *>();
 
-        if (!interface) {
-            interface = \
qobject_cast<AppletInterface*>(ctx->engine()->globalObject().property("plasmoid").toQObject());
                
-        }
+        if (!item) {
+            item = variant.value<QGraphicsLinearLayout *>();
 
-        if (interface) {
-            item = interface->applet();
+            if (!item) {
+                item = variant.value<QGraphicsGridLayout *>();
+
+                if (!item) {
+                    item = variant.value<QGraphicsAnchorLayout *>();
+                }
+            }
         }
     }
 
@@ -68,7 +93,7 @@
 
 static QScriptValue ctor(QScriptContext *ctx, QScriptEngine *eng)
 {
-    QGraphicsLayoutItem *parent = layoutItem(ctx);
+    QGraphicsLayoutItem *parent = extractLayoutItem(ctx);
 
     if (!parent) {
         return ctx->throwError(i18n("The parent must be a QGraphicsLayoutItem"));
@@ -86,7 +111,7 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsLinearLayout, setAlignment) {
-    QGraphicsLayoutItem *item = layoutItem(ctx);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx);
 
     if (!item) {
         return eng->undefinedValue();
@@ -97,7 +122,7 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsLinearLayout, insertItem) {
-    QGraphicsLayoutItem *item = layoutItem(ctx, 1);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx, 1);
 
     if (!item) {
         return eng->undefinedValue();
@@ -108,7 +133,7 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsLinearLayout, removeItem) {
-    QGraphicsLayoutItem *item = layoutItem(ctx);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx);
 
     if (!item) {
         return eng->undefinedValue();
@@ -130,7 +155,7 @@
 } END_DECLARE_METHOD
 
 BEGIN_DECLARE_METHOD(QGraphicsLinearLayout, addItem) {
-    QGraphicsLayoutItem *item = layoutItem(ctx);
+    QGraphicsLayoutItem *item = extractLayoutItem(ctx);
     if (!item) {
         return ctx->throwError(QScriptContext::TypeError,
                                "QGraphicsLinearLayout.prototype.addItem: argument is \
not a GraphicsLayoutItem"); @@ -171,6 +196,11 @@
 QScriptValue constructLinearLayoutClass(QScriptEngine *eng)
 {
 //    QScriptValue proto = QScript::wrapGVPointer<QGraphicsLinearLayout>(eng, new \
QGraphicsLinearLayout(), ); +    qRegisterMetaType<QGraphicsLayoutItem*>();
+    QGraphicsLayoutItem * i = new QGraphicsLinearLayout;
+    QVariant v;
+    ///v.setValue<QGraphicsLayoutItem*>(i);
+    v.setValue<void*>(i);
     QScriptValue proto = QScript::wrapPointer<QGraphicsLinearLayout>(eng, new \
                QGraphicsLinearLayout(), QScript::UserOwnership);
     const QScriptValue::PropertyFlags getter = QScriptValue::PropertyGetter;
     const QScriptValue::PropertyFlags setter = QScriptValue::PropertySetter;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic