summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2009-07-28 03:30:46 (GMT)
committerMichael Brasser <michael.brasser@nokia.com>2009-07-28 03:30:46 (GMT)
commit23adda357713582df8d41ec08554359b452c4e55 (patch)
treedf96927bd45139389247b0dc2116ef35774d5e59 /src/declarative
parent9816567056c93f193c8d86d8e3cc8e22695b6642 (diff)
parent0cdd8518090be320fa89efaa11ced32215cc2ccc (diff)
downloadQt-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.cpp2
-rw-r--r--src/declarative/fx/qfxlayouts.cpp48
-rw-r--r--src/declarative/fx/qfxlayouts.h3
-rw-r--r--src/declarative/fx/qfxlayouts_p.h8
-rw-r--r--src/declarative/qml/qmlcomponentjs.cpp2
-rw-r--r--src/declarative/qml/qmlcontext.cpp2
-rw-r--r--src/declarative/qml/qmlengine.cpp27
-rw-r--r--src/declarative/qml/qmlengine.h2
-rw-r--r--src/declarative/qml/qmlengine_p.h3
-rw-r--r--src/declarative/qml/qmlexpression.cpp2
-rw-r--r--src/declarative/util/qmlscript.cpp2
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();