diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2009-07-28 03:30:46 (GMT) |
---|---|---|
committer | Michael Brasser <michael.brasser@nokia.com> | 2009-07-28 03:30:46 (GMT) |
commit | 23adda357713582df8d41ec08554359b452c4e55 (patch) | |
tree | df96927bd45139389247b0dc2116ef35774d5e59 /src/declarative | |
parent | 9816567056c93f193c8d86d8e3cc8e22695b6642 (diff) | |
parent | 0cdd8518090be320fa89efaa11ced32215cc2ccc (diff) | |
download | Qt-23adda357713582df8d41ec08554359b452c4e55.zip Qt-23adda357713582df8d41ec08554359b452c4e55.tar.gz Qt-23adda357713582df8d41ec08554359b452c4e55.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/fx/qfxitem.cpp | 2 | ||||
-rw-r--r-- | src/declarative/fx/qfxlayouts.cpp | 48 | ||||
-rw-r--r-- | src/declarative/fx/qfxlayouts.h | 3 | ||||
-rw-r--r-- | src/declarative/fx/qfxlayouts_p.h | 8 | ||||
-rw-r--r-- | src/declarative/qml/qmlcomponentjs.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qmlcontext.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qmlengine.cpp | 27 | ||||
-rw-r--r-- | src/declarative/qml/qmlengine.h | 2 | ||||
-rw-r--r-- | src/declarative/qml/qmlengine_p.h | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlexpression.cpp | 2 | ||||
-rw-r--r-- | src/declarative/util/qmlscript.cpp | 2 |
11 files changed, 64 insertions, 37 deletions
diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp index f8ed7b4..09ae22c 100644 --- a/src/declarative/fx/qfxitem.cpp +++ b/src/declarative/fx/qfxitem.cpp @@ -821,7 +821,7 @@ void QFxItem::qmlLoaded() QFxItem* ret = qobject_cast<QFxItem*>(o); if (ret) { ret->setItemParent(this); - QScriptValue v = QmlEnginePrivate::getScriptEngine(qmlEngine(this))->newQObject(ret); + QScriptValue v = QmlEngine::getScriptEngine(qmlEngine(this))->newQObject(ret); emit newChildCreated(d->_qmlnewloading.at(i).toString(),v); } diff --git a/src/declarative/fx/qfxlayouts.cpp b/src/declarative/fx/qfxlayouts.cpp index 3e8a64c..6b94321 100644 --- a/src/declarative/fx/qfxlayouts.cpp +++ b/src/declarative/fx/qfxlayouts.cpp @@ -319,13 +319,15 @@ void QFxBaseLayout::preLayout() if (!d->_items.contains(child)){ QObject::connect(child, SIGNAL(visibleChanged()), this, SLOT(preLayout())); + QObject::connect(child, SIGNAL(opacityChanged()), + this, SLOT(preLayout())); QObject::connect(child, SIGNAL(heightChanged()), this, SLOT(preLayout())); QObject::connect(child, SIGNAL(widthChanged()), this, SLOT(preLayout())); d->_items += child; } - if (!child->isVisible()){ + if (child->opacity() == 0.0){ if (d->_stableItems.contains(child)){ d->_leavingItems += child; d->_stableItems -= child; @@ -339,7 +341,7 @@ void QFxBaseLayout::preLayout() foreach(QFxItem *child, d->_items){ if (!allItems.contains(child)){ if (!deletedItems.contains(child)) { - QObject::disconnect(child, SIGNAL(visibleChanged()), + QObject::disconnect(child, SIGNAL(opacityChanged()), this, SLOT(preLayout())); QObject::disconnect(child, SIGNAL(heightChanged()), this, SLOT(preLayout())); @@ -356,7 +358,7 @@ void QFxBaseLayout::preLayout() qreal width=0; qreal height=0; foreach(QFxItem *item, d->_items){ - if (item->isVisible()){ + if (item->opacity() == 0.0){ if (!d->_animated.contains(item)){ setMovingItem(item); QPointF p(item->x(), item->y()); @@ -385,21 +387,18 @@ void QFxBaseLayout::preLayout() setLayoutItem(0); } -//###This should be considered to move more centrally, as it seems useful -void QFxBaseLayout::applyTransition(const QList<QPair<QString, QVariant> >& changes, QFxItem* target, QmlTransition* trans) +void QFxBaseLayout::applyTransition(const QList<QPair<QString, QVariant> >& changes, QFxItem* target, QmlStateOperation::ActionList &actions) { Q_D(QFxBaseLayout); - if (!trans||!target)//TODO: if !trans, just apply changes + if (!target) return; setLayoutItem(target); - QmlStateOperation::ActionList actions; - for (int ii=0; ii<changes.size(); ++ii){ QVariant val = changes[ii].second; if (d->_margin && - (changes[ii].first == QLatin1String("x") || + (changes[ii].first == QLatin1String("x") || changes[ii].first == QLatin1String("y"))) { val = QVariant(val.toInt() + d->_margin); } @@ -408,10 +407,19 @@ void QFxBaseLayout::applyTransition(const QList<QPair<QString, QVariant> >& chan } - d->transitionManager.transition(actions, trans); d->_animated << target; } +void QFxBaseLayout::finishApplyTransitions() +{ + Q_D(QFxBaseLayout); + d->addTransitionManager.transition(d->addActions, d->addTransition); + d->moveTransitionManager.transition(d->moveActions, d->moveTransition); + d->removeTransitionManager.transition(d->removeActions, d->removeTransition); + d->addActions.clear(); + d->moveActions.clear(); + d->removeActions.clear(); +} void QFxBaseLayout::setMovingItem(QFxItem *i) { Q_D(QFxBaseLayout); @@ -424,7 +432,8 @@ void QFxBaseLayout::setMovingItem(QFxItem *i) */ void QFxBaseLayout::applyAdd(const QList<QPair<QString, QVariant> >& changes, QFxItem* target) { - applyTransition(changes,target, add()); + Q_D(QFxBaseLayout); + applyTransition(changes,target, d->addActions); } /*! @@ -433,7 +442,8 @@ void QFxBaseLayout::applyAdd(const QList<QPair<QString, QVariant> >& changes, QF */ void QFxBaseLayout::applyMove(const QList<QPair<QString, QVariant> >& changes, QFxItem* target) { - applyTransition(changes,target, move()); + Q_D(QFxBaseLayout); + applyTransition(changes,target, d->moveActions); } /*! @@ -442,7 +452,8 @@ void QFxBaseLayout::applyMove(const QList<QPair<QString, QVariant> >& changes, Q */ void QFxBaseLayout::applyRemove(const QList<QPair<QString, QVariant> >& changes, QFxItem* target) { - applyTransition(changes,target, remove()); + Q_D(QFxBaseLayout); + applyTransition(changes,target, d->removeActions); } QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,VerticalLayout,QFxVerticalLayout) @@ -623,7 +634,7 @@ void QFxVerticalLayout::doLayout() QList<QGraphicsItem *> children = childItems(); for (int ii = 0; ii < children.count(); ++ii) { QFxItem *child = qobject_cast<QFxItem *>(children.at(ii)); - if (!child || !child->isVisible()) + if (!child || child->opacity() == 0.0) continue; bool needMove = (child->y() != voffset || child->x()); @@ -643,6 +654,7 @@ void QFxVerticalLayout::doLayout() voffset += child->height(); voffset += spacing(); } + finishApplyTransitions(); setMovingItem(this); setHeight(voffset); setMovingItem(0); @@ -790,7 +802,7 @@ void QFxHorizontalLayout::doLayout() QList<QGraphicsItem *> children = childItems(); for (int ii = 0; ii < children.count(); ++ii) { QFxItem *child = qobject_cast<QFxItem *>(children.at(ii)); - if (!child || !child->isVisible()) + if (!child || child->opacity() == 0.0) continue; bool needMove = (child->x() != hoffset || child->y()); @@ -810,6 +822,7 @@ void QFxHorizontalLayout::doLayout() hoffset += child->width(); hoffset += spacing(); } + finishApplyTransitions(); setWidth(hoffset); } @@ -1028,7 +1041,7 @@ void QFxGridLayout::doLayout() if (childIndex == children.count()) continue; QFxItem *child = qobject_cast<QFxItem *>(children.at(childIndex++)); - if (!child || !child->isVisible()) + if (!child || child->opacity() == 0.0) continue; if (child->width() > maxColWidth[j]) maxColWidth[j] = child->width(); @@ -1049,7 +1062,7 @@ void QFxGridLayout::doLayout() } foreach(QGraphicsItem* schild, children){ QFxItem *child = qobject_cast<QFxItem *>(schild); - if (!child || !child->isVisible()) + if (!child || child->opacity() == 0.0) continue; bool needMove = (child->x()!=xoffset)||(child->y()!=yoffset); QList<QPair<QString, QVariant> > changes; @@ -1077,6 +1090,7 @@ void QFxGridLayout::doLayout() return; } } + finishApplyTransitions(); } QT_END_NAMESPACE diff --git a/src/declarative/fx/qfxlayouts.h b/src/declarative/fx/qfxlayouts.h index 5767bc5..03ddf3e 100644 --- a/src/declarative/fx/qfxlayouts.h +++ b/src/declarative/fx/qfxlayouts.h @@ -96,6 +96,7 @@ protected: void applyAdd(const QList<QPair<QString, QVariant> >& changes, QFxItem* target); void applyMove(const QList<QPair<QString, QVariant> >& changes, QFxItem* target); void applyRemove(const QList<QPair<QString, QVariant> >& changes, QFxItem* target); + void finishApplyTransitions(); Q_SIGNALS: void layoutItemChanged(); @@ -113,7 +114,7 @@ protected: private: void applyTransition(const QList<QPair<QString, QVariant> >& changes, QFxItem* target, - QmlTransition* transition); + QmlStateOperation::ActionList &actions); Q_DISABLE_COPY(QFxBaseLayout) Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr, QFxBaseLayout) }; diff --git a/src/declarative/fx/qfxlayouts_p.h b/src/declarative/fx/qfxlayouts_p.h index 5ffe70e..87b944c 100644 --- a/src/declarative/fx/qfxlayouts_p.h +++ b/src/declarative/fx/qfxlayouts_p.h @@ -59,6 +59,7 @@ #include <QtDeclarative/qfxlayouts.h> #include <QtDeclarative/qmlstate.h> #include <private/qmltransitionmanager_p.h> +#include <QtDeclarative/qmlstateoperations.h> QT_BEGIN_NAMESPACE class QFxBaseLayoutPrivate : public QFxItemPrivate @@ -92,7 +93,12 @@ public: QSet<QFxItem *> _newItems; QSet<QFxItem *> _animated; QFxItem *_layoutItem; - QmlTransitionManager transitionManager; + QmlStateOperation::ActionList addActions; + QmlStateOperation::ActionList moveActions; + QmlStateOperation::ActionList removeActions; + QmlTransitionManager addTransitionManager; + QmlTransitionManager moveTransitionManager; + QmlTransitionManager removeTransitionManager; // QmlStateGroup *stateGroup; QFxItem *_movingItem; }; diff --git a/src/declarative/qml/qmlcomponentjs.cpp b/src/declarative/qml/qmlcomponentjs.cpp index df3e834..2552f78 100644 --- a/src/declarative/qml/qmlcomponentjs.cpp +++ b/src/declarative/qml/qmlcomponentjs.cpp @@ -84,7 +84,7 @@ QScriptValue QmlComponentJS::createObject() { Q_D(QmlComponentJS); QObject* ret = create(d->ctxt); - return QmlEnginePrivate::qmlScriptObject(ret, d->engine); + return QmlEngine::qmlScriptObject(ret, d->engine); } /*! diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp index dabaa5e..bf549d8 100644 --- a/src/declarative/qml/qmlcontext.cpp +++ b/src/declarative/qml/qmlcontext.cpp @@ -106,7 +106,7 @@ void QmlContextPrivate::init() parent->d_func()->childContexts.insert(q); //set scope chain - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QScriptValue scopeObj = scriptEngine->newObject(QmlEnginePrivate::get(engine)->contextClass, scriptEngine->newVariant(QVariant::fromValue((QObject*)q))); if (!parent) diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 321feb9..0016144 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -520,6 +520,13 @@ void QmlInstanceDeclarativeData::destroyed(QObject *object) delete this; } +/*! A way to access the QScriptEngine, so that you can add your own objects. + This function is likely to be removed upon further reflection. +*/ +QScriptEngine *QmlEngine::getScriptEngine(QmlEngine *e) +{ + return &e->d_func()->scriptEngine; +} /*! \internal */ /* QScriptEngine *QmlEngine::scriptEngine() @@ -533,14 +540,14 @@ QScriptEngine *QmlEngine::scriptEngine() Creates a QScriptValue allowing you to use \a object in QML script. \a engine is the QmlEngine it is to be created in. - The QScriptValue returned is a QtScript Object, not a QtScript QObject, due - to the special needs of QML requiring more functionality than a standard + The QScriptValue returned is a Qml Script Object, not a QtScript QObject, + due to the special needs of QML requiring more functionality than a standard QtScript QObject. */ -QScriptValue QmlEnginePrivate::qmlScriptObject(QObject* object, +QScriptValue QmlEngine::qmlScriptObject(QObject* object, QmlEngine* engine) { - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); return scriptEngine->newObject(new QmlObjectScriptClass(engine), scriptEngine->newQObject(object)); } @@ -684,13 +691,13 @@ QScriptValue QmlEnginePrivate::createQmlObject(QScriptContext *ctxt, QScriptEngi if(obj) { obj->setParent(parentArg); obj->setProperty("parent", QVariant::fromValue<QObject*>(parentArg)); - return qmlScriptObject(obj, activeEngine); + return QmlEngine::qmlScriptObject(obj, activeEngine); } return engine->nullValue(); } QmlScriptClass::QmlScriptClass(QmlEngine *bindengine) -: QScriptClass(QmlEnginePrivate::getScriptEngine(bindengine)), +: QScriptClass(QmlEngine::getScriptEngine(bindengine)), engine(bindengine) { } @@ -780,7 +787,7 @@ QScriptValue QmlContextScriptClass::property(const QScriptValue &object, uint basicId = id & QmlScriptClass::ClassIdMask; - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QmlEnginePrivate *ep = QmlEnginePrivate::get(engine); switch (basicId) { @@ -840,7 +847,7 @@ void QmlContextScriptClass::setProperty(QScriptValue &object, int objIdx = (id & QmlScriptClass::ClassIdSelectorMask) >> 24; QObject *obj = bindContext->d_func()->defaultObjects.at(objIdx); - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QScriptValue oldact = scriptEngine->currentContext()->activationObject(); scriptEngine->currentContext()->setActivationObject(scriptEngine->globalObject()); @@ -948,7 +955,7 @@ QmlObjectScriptClass::QmlObjectScriptClass(QmlEngine *bindEngine) : QmlScriptClass(bindEngine) { engine = bindEngine; - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(bindEngine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(bindEngine); prototypeObject = scriptEngine->newObject(); prototypeObject.setProperty(QLatin1String("destroy"), scriptEngine->newFunction(QmlObjectDestroy)); @@ -1020,7 +1027,7 @@ void QmlObjectScriptClass::setProperty(QScriptValue &object, qWarning() << "Set QmlObject Property" << name.toString() << value.toVariant(); #endif - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QScriptValue oldact = scriptEngine->currentContext()->activationObject(); scriptEngine->currentContext()->setActivationObject(scriptEngine->globalObject()); diff --git a/src/declarative/qml/qmlengine.h b/src/declarative/qml/qmlengine.h index 6066059..a3457f0 100644 --- a/src/declarative/qml/qmlengine.h +++ b/src/declarative/qml/qmlengine.h @@ -86,6 +86,8 @@ public: static QmlContext *contextForObject(const QObject *); static void setContextForObject(QObject *, QmlContext *); + static QScriptValue qmlScriptObject(QObject*, QmlEngine*); + static QScriptEngine *getScriptEngine(QmlEngine *e); private: Q_DECLARE_PRIVATE(QmlEngine) }; diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h index 18cdd83..7b459e9 100644 --- a/src/declarative/qml/qmlengine_p.h +++ b/src/declarative/qml/qmlengine_p.h @@ -193,12 +193,9 @@ public: bool resolveType(const Imports&, const QByteArray& type, QmlType** type_return, QUrl* url_return, ImportedNamespace** ns_return=0) const; void resolveTypeInNamespace(ImportedNamespace*, const QByteArray& type, QmlType** type_return, QUrl* url_return ) const; - - static QScriptValue qmlScriptObject(QObject*, QmlEngine*); static QScriptValue createComponent(QScriptContext*, QScriptEngine*); static QScriptValue createQmlObject(QScriptContext*, QScriptEngine*); - static QScriptEngine *getScriptEngine(QmlEngine *e) { return &e->d_func()->scriptEngine; } static QmlEnginePrivate *get(QmlEngine *e) { return e->d_func(); } }; diff --git a/src/declarative/qml/qmlexpression.cpp b/src/declarative/qml/qmlexpression.cpp index 2c06efa..990722a 100644 --- a/src/declarative/qml/qmlexpression.cpp +++ b/src/declarative/qml/qmlexpression.cpp @@ -240,7 +240,7 @@ QVariant QmlExpressionPrivate::evalQtScript() if (me) ctxtPriv->defaultObjects.insert(ctxtPriv->highPriorityCount, me); - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QScriptValueList oldScopeChain = scriptEngine->currentContext()->scopeChain(); diff --git a/src/declarative/util/qmlscript.cpp b/src/declarative/util/qmlscript.cpp index ca9aad5..df05d8e 100644 --- a/src/declarative/util/qmlscript.cpp +++ b/src/declarative/util/qmlscript.cpp @@ -185,7 +185,7 @@ void QmlScriptPrivate::addScriptToEngine(const QString &script, const QString &s Q_Q(QmlScript); QmlEngine *engine = qmlEngine(q); QmlContext *context = qmlContext(q); - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QScriptEngine *scriptEngine = QmlEngine::getScriptEngine(engine); QScriptContext *currentContext = scriptEngine->currentContext(); QScriptValueList oldScopeChain = currentContext->scopeChain(); |