From 28cec90fd8740f1d47010d99699f86ac014e9926 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Thu, 23 Apr 2009 11:50:48 +1000 Subject: Merge in changes to old kinetic-dui branch. --- src/declarative/extra/qmlnumberformatter.cpp | 2 +- src/declarative/fx/qfxanchors.cpp | 2 +- src/declarative/fx/qfxblurfilter.cpp | 2 +- src/declarative/fx/qfxcontentwrapper.cpp | 2 +- src/declarative/fx/qfxflickable.cpp | 2 +- src/declarative/fx/qfxhighlightfilter.cpp | 2 +- src/declarative/fx/qfximage.cpp | 2 +- src/declarative/fx/qfximageitem.cpp | 2 +- src/declarative/fx/qfxitem.cpp | 59 +++++-- src/declarative/fx/qfxkeyproxy.cpp | 2 +- src/declarative/fx/qfxlayouts.cpp | 8 +- src/declarative/fx/qfxmouseregion.cpp | 2 +- src/declarative/fx/qfxpainted.cpp | 2 +- src/declarative/fx/qfxparticles.cpp | 10 +- src/declarative/fx/qfxpath.cpp | 12 +- src/declarative/fx/qfxpathview.cpp | 2 +- src/declarative/fx/qfxpixmap.cpp | 2 +- src/declarative/fx/qfxrect.cpp | 4 +- src/declarative/fx/qfxreflectionfilter.cpp | 2 +- src/declarative/fx/qfxrepeater.cpp | 2 +- src/declarative/fx/qfxshadowfilter.cpp | 4 +- src/declarative/fx/qfxtext.cpp | 2 +- src/declarative/fx/qfxtextedit.cpp | 2 +- src/declarative/fx/qfxtransform.cpp | 2 +- src/declarative/fx/qfxwebview.cpp | 2 +- src/declarative/qml/qmlcompiler.cpp | 4 +- src/declarative/qml/qmlcompiler_p.h | 2 +- src/declarative/qml/qmlcomponent.cpp | 218 +++++++++++++++++------- src/declarative/qml/qmlcomponent.h | 35 ++-- src/declarative/qml/qmlcomponent_p.h | 9 +- src/declarative/qml/qmlcompositetypemanager.cpp | 85 ++++----- src/declarative/qml/qmlcompositetypemanager_p.h | 129 +++++++------- src/declarative/qml/script/tokens.cpp | 1 - src/declarative/timeline/gfxeasing.cpp | 2 +- src/declarative/timeline/gfxtimeline.cpp | 4 +- src/declarative/util/qfxview.cpp | 6 +- src/declarative/util/qmlanimation.cpp | 26 +-- src/declarative/util/qmlbind.cpp | 2 +- src/declarative/util/qmldatetimeformatter.cpp | 2 +- src/declarative/util/qmlfont.cpp | 2 +- src/declarative/util/qmlscript.cpp | 4 +- src/declarative/util/qmlsetproperties.cpp | 2 +- src/declarative/util/qmlstate.cpp | 2 +- src/declarative/util/qmlstateoperations.cpp | 2 +- src/declarative/util/qmltransition.cpp | 2 +- tools/qdoc3/cppcodeparser.cpp | 21 ++- tools/qdoc3/htmlgenerator.cpp | 7 + tools/qdoc3/node.cpp | 2 +- tools/qdoc3/node.h | 9 +- 49 files changed, 434 insertions(+), 279 deletions(-) diff --git a/src/declarative/extra/qmlnumberformatter.cpp b/src/declarative/extra/qmlnumberformatter.cpp index a12c4e6..60b154d 100644 --- a/src/declarative/extra/qmlnumberformatter.cpp +++ b/src/declarative/extra/qmlnumberformatter.cpp @@ -79,7 +79,7 @@ public: */ /*! \class QmlNumberFormatter - \ingroup utility + \ingroup group_utility \brief The QmlNumberFormatter class allows you to format a number to a particular string format/locale specific number format. */ diff --git a/src/declarative/fx/qfxanchors.cpp b/src/declarative/fx/qfxanchors.cpp index b7a7dd2..7372866 100644 --- a/src/declarative/fx/qfxanchors.cpp +++ b/src/declarative/fx/qfxanchors.cpp @@ -122,7 +122,7 @@ static qreal adjustedPosition(QFxItem *item, QFxAnchorLine::AnchorLine anchorLin /*! \internal \class QFxAnchors - \ingroup layouts + \ingroup group_layouts \brief The QFxAnchors class provides a way to lay out items relative to other items. \warning Currently, only anchoring to siblings or parent is supported. diff --git a/src/declarative/fx/qfxblurfilter.cpp b/src/declarative/fx/qfxblurfilter.cpp index 8cc9380..748fd8b 100644 --- a/src/declarative/fx/qfxblurfilter.cpp +++ b/src/declarative/fx/qfxblurfilter.cpp @@ -93,7 +93,7 @@ public: /*! \internal \class QFxBlurFilter - \ingroup effects + \ingroup group_effects \brief The QFxBlurFilter class allows you to blur an item. */ diff --git a/src/declarative/fx/qfxcontentwrapper.cpp b/src/declarative/fx/qfxcontentwrapper.cpp index 80710ca..5ce5430 100644 --- a/src/declarative/fx/qfxcontentwrapper.cpp +++ b/src/declarative/fx/qfxcontentwrapper.cpp @@ -95,7 +95,7 @@ QML_DEFINE_TYPE(QFxContent,Content); /*! \qmlclass Content QFxContent - \ingroup utility + \ingroup group_utility \brief Content is used as a placeholder for the content of a component. \inherits Item diff --git a/src/declarative/fx/qfxflickable.cpp b/src/declarative/fx/qfxflickable.cpp index 7e13036..e35d6cf 100644 --- a/src/declarative/fx/qfxflickable.cpp +++ b/src/declarative/fx/qfxflickable.cpp @@ -253,7 +253,7 @@ QML_DEFINE_TYPE(QFxFlickable,Flickable); \class QFxFlickable \brief The QFxFlickable class provides a view that can be "flicked". - \ingroup widgets + \ingroup group_widgets QFxFlickable allows its children to be dragged and flicked. diff --git a/src/declarative/fx/qfxhighlightfilter.cpp b/src/declarative/fx/qfxhighlightfilter.cpp index 6c6277a..d1ff3d3 100644 --- a/src/declarative/fx/qfxhighlightfilter.cpp +++ b/src/declarative/fx/qfxhighlightfilter.cpp @@ -96,7 +96,7 @@ public: /*! \internal \class QFxHighlightFilter - \ingroup effects + \ingroup group_effects \brief The QFxHightlightFilter class allows you to add a highlight to an item. */ diff --git a/src/declarative/fx/qfximage.cpp b/src/declarative/fx/qfximage.cpp index a137bc3..9fe491c 100644 --- a/src/declarative/fx/qfximage.cpp +++ b/src/declarative/fx/qfximage.cpp @@ -99,7 +99,7 @@ QML_DEFINE_TYPE(QFxImage,Image); \class QFxImage Image \brief The QFxImage class provides an image item that you can add to a QFxView. - \ingroup coreitems + \ingroup group_coreitems Example: \code diff --git a/src/declarative/fx/qfximageitem.cpp b/src/declarative/fx/qfximageitem.cpp index 6c257fa..a6f6d8f 100644 --- a/src/declarative/fx/qfximageitem.cpp +++ b/src/declarative/fx/qfximageitem.cpp @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE /*! \class QFxImageItem \brief The QFxImageItem class is an abstract base class for QFxView items that render using QPainter. - \ingroup coreitems + \ingroup group_coreitems This is a convenience class allowing easy use of a QPainter within a custom item. The contents of the item are are cached behind the scenes. diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp index 2f4c220..9aa742d 100644 --- a/src/declarative/fx/qfxitem.cpp +++ b/src/declarative/fx/qfxitem.cpp @@ -74,20 +74,49 @@ QML_DEFINE_TYPE(QFxItem,Item); QML_DEFINE_NOCREATE_TYPE(QSimpleCanvasFilter); /*! - \defgroup animation Animation - \defgroup coreitems Basic Items - \defgroup effects Effects - \defgroup layouts Layouts - \defgroup states States and Transitions - \defgroup utility Utility - \defgroup views Views - \defgroup widgets Widgets + \group group_animation + \title Animation +*/ + +/*! + \group group_coreitems + \title Basic Items +*/ + +/*! + \group group_effects + \title Effects +*/ + +/*! + \group group_layouts + \title Layouts +*/ + +/*! + \group group_states + \title States and Transitions +*/ + +/*! + \group group_utility + \title Utility +*/ + +/*! + \group group_views + \title Views +*/ + +/*! + \group group_widgets + \title Widgets */ /*! \internal \class QFxContents - \ingroup utility + \ingroup group_utility \brief The QFxContents class gives access to the height and width of an item's contents. */ @@ -194,7 +223,7 @@ void QFxContents::setItem(QFxItem *item) \endqml \endqmltext - \ingroup coreitems + \ingroup group_coreitems */ /*! @@ -751,10 +780,10 @@ void QFxItem::setQml(const QString &qml) } else { d->_qmlcomp = new QmlComponent(itemContext()->engine(), d->_qmlurl, this); - if(d->_qmlcomp->isReady()) + if(!d->_qmlcomp->isLoading()) qmlLoaded(); else - QObject::connect(d->_qmlcomp, SIGNAL(readyChanged()), + QObject::connect(d->_qmlcomp, SIGNAL(statusChanged(Status)), this, SLOT(qmlLoaded())); } } @@ -768,7 +797,7 @@ void QFxItem::qmlLoaded() // ### for (int i=0; i_qmlnewloading.length(); ++i) { QmlComponent *c = d->_qmlnewcomp.at(i); - if(!c->isReady()) + if(c->isLoading()) continue; QmlContext *ctxt = new QmlContext(itemContext()); @@ -1618,10 +1647,10 @@ void QFxItem::newChild(const QString &type) d->_qmlnewloading.append(url); d->_qmlnewcomp.append(new QmlComponent(itemContext()->engine(), url, this)); - if(d->_qmlnewcomp.last()->isReady()) + if(!d->_qmlnewcomp.last()->isLoading()) qmlLoaded(); else - connect(d->_qmlnewcomp.last(), SIGNAL(readyChanged()), + connect(d->_qmlnewcomp.last(), SIGNAL(statusChanged(Status)), this, SLOT(qmlLoaded())); } diff --git a/src/declarative/fx/qfxkeyproxy.cpp b/src/declarative/fx/qfxkeyproxy.cpp index 8598ad6..7d5726f 100644 --- a/src/declarative/fx/qfxkeyproxy.cpp +++ b/src/declarative/fx/qfxkeyproxy.cpp @@ -56,7 +56,7 @@ QML_DEFINE_TYPE(QFxKeyProxy,KeyProxy); \internal \class QFxKeyProxy \brief The QFxKeyProxy class proxies key presses to a number of other elements. - \ingroup utility + \ingroup group_utility */ class QFxKeyProxyPrivate diff --git a/src/declarative/fx/qfxlayouts.cpp b/src/declarative/fx/qfxlayouts.cpp index 455b8a5..a421fd2 100644 --- a/src/declarative/fx/qfxlayouts.cpp +++ b/src/declarative/fx/qfxlayouts.cpp @@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE that you use the move, remove and add transitions when those conditions arise. - \ingroup layouts + \ingroup group_layouts */ QFxBaseLayout::QFxBaseLayout(AutoUpdateType at, QFxItem *parent) : QFxItem(*(new QFxBaseLayoutPrivate), parent) @@ -577,7 +577,7 @@ QML_DEFINE_TYPE(QFxVerticalLayout, VerticalLayout); \internal \class QFxVerticalLayout \brief The QFxVerticalLayout class lines up items vertically. - \ingroup layouts + \ingroup group_layouts */ QFxVerticalLayout::QFxVerticalLayout(QFxItem *parent) : QFxBaseLayout(Vertical, parent) @@ -731,7 +731,7 @@ QML_DEFINE_TYPE(QFxHorizontalLayout,HorizontalLayout); \internal \class QFxHorizontalLayout \brief The QFxHorizontalLayout class lines up items horizontally. - \ingroup layouts + \ingroup group_layouts */ QFxHorizontalLayout::QFxHorizontalLayout(QFxItem *parent) : QFxBaseLayout(Horizontal, parent) @@ -910,7 +910,7 @@ QML_DEFINE_TYPE(QFxGridLayout,GridLayout); \internal \class QFxGridLayout \brief The QFxGridLayout class lays out items in a grid. - \ingroup layouts + \ingroup group_layouts */ QFxGridLayout::QFxGridLayout(QFxItem *parent) : diff --git a/src/declarative/fx/qfxmouseregion.cpp b/src/declarative/fx/qfxmouseregion.cpp index 2bf7aa7..c6a7f96 100644 --- a/src/declarative/fx/qfxmouseregion.cpp +++ b/src/declarative/fx/qfxmouseregion.cpp @@ -242,7 +242,7 @@ QML_DEFINE_TYPE(QFxMouseRegion,MouseRegion); \class QFxMouseRegion \brief The QFxMouseRegion class provides a simple mouse handling abstraction for use within Qml. - \ingroup coreitems + \ingroup group_coreitems All QFxItem derived classes can do mouse handling but the QFxMouseRegion class exposes mouse handling data as properties and tracks flicking and dragging of the mouse. diff --git a/src/declarative/fx/qfxpainted.cpp b/src/declarative/fx/qfxpainted.cpp index a1eec69..8109efa 100644 --- a/src/declarative/fx/qfxpainted.cpp +++ b/src/declarative/fx/qfxpainted.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE \class QFxPainted \brief QFxPainted is an abstract base class for QFxView items that paint using QPainter. - \ingroup coreitems + \ingroup group_coreitems This is a convenience class allowing easy use of QPainter within a custom item. The contents of the item are cached behind the scenes. Any time you change the contents diff --git a/src/declarative/fx/qfxparticles.cpp b/src/declarative/fx/qfxparticles.cpp index 3526541..939afba 100644 --- a/src/declarative/fx/qfxparticles.cpp +++ b/src/declarative/fx/qfxparticles.cpp @@ -110,7 +110,7 @@ QML_DEFINE_TYPE(QFxParticleMotion,ParticleMotion); /*! \class QFxParticleMotion - \ingroup effects + \ingroup group_effects \brief The QFxParticleMotion class is the base class for particle motion. This class causes the particles to remain static. @@ -160,7 +160,7 @@ void QFxParticleMotion::destroy(QFxParticle &particle) /*! \internal \class QFxParticleMotionLinear - \ingroup effects + \ingroup group_effects \brief The QFxParticleMotionLinear class moves the particles linearly. \sa QFxParticles @@ -184,7 +184,7 @@ void QFxParticleMotionLinear::advance(QFxParticle &p, int interval) /*! \internal \class QFxParticleMotionGravity - \ingroup effects + \ingroup group_effects \brief The QFxParticleMotionGravity class moves the particles towards a point. \sa QFxParticles @@ -259,7 +259,7 @@ void QFxParticleMotionGravity::advance(QFxParticle &p, int interval) /*! \internal \class QFxParticleMotionWander - \ingroup effects + \ingroup group_effects \brief The QFxParticleMotionWander class moves particles in a somewhat random fashion. The particles will continue roughly in the original direction, however will randomly @@ -544,7 +544,7 @@ QML_DEFINE_TYPE(QFxParticles,Particles); /*! \internal \class QFxParticles - \ingroup effects + \ingroup group_effects \brief The QFxParticles class generates and moves particles. */ diff --git a/src/declarative/fx/qfxpath.cpp b/src/declarative/fx/qfxpath.cpp index 199f5fb..14c06bb 100644 --- a/src/declarative/fx/qfxpath.cpp +++ b/src/declarative/fx/qfxpath.cpp @@ -65,7 +65,7 @@ QML_DEFINE_TYPE(QFxPathCubic,PathCubic); /*! \internal \class QFxPath - \ingroup utility + \ingroup group_utility \brief The QFxPath class defines a path. \sa QFxPathView */ @@ -469,7 +469,7 @@ void QFxCurve::setY(int y) /*! \internal \class QFxPathAttribute - \ingroup utility + \ingroup group_utility \brief The QFxPathAttribute class allows to set the value of an attribute at a given position in the path. \sa QFxPath @@ -527,7 +527,7 @@ void QFxPathAttribute::setValue(qreal value) /*! \internal \class QFxPathLine - \ingroup utility + \ingroup group_utility \brief The QFxPathLine class defines a straight line. \sa QFxPath @@ -549,7 +549,7 @@ void QFxPathLine::addToPath(QPainterPath &path) /*! \internal \class QFxPathQuad - \ingroup utility + \ingroup group_utility \brief The QFxPathQuad class defines a quadratic Bezier curve with a control point. \sa QFxPath @@ -613,7 +613,7 @@ void QFxPathQuad::addToPath(QPainterPath &path) /*! \internal \class QFxPathCubic - \ingroup utility + \ingroup group_utility \brief The QFxPathCubic class defines a cubic Bezier curve with two control points. \sa QFxPath @@ -723,7 +723,7 @@ void QFxPathCubic::addToPath(QPainterPath &path) /*! \internal \class QFxPathPercent - \ingroup utility + \ingroup group_utility \brief The QFxPathPercent class manipulates the way a path is interpreted. QFxPathPercent allows you to bunch up items (or spread out items) along various diff --git a/src/declarative/fx/qfxpathview.cpp b/src/declarative/fx/qfxpathview.cpp index 79b0f8e..99f6e86 100644 --- a/src/declarative/fx/qfxpathview.cpp +++ b/src/declarative/fx/qfxpathview.cpp @@ -88,7 +88,7 @@ private: \class QFxPathView \brief The QFxPathView class lays out items provided by a model on a path. - \ingroup views + \ingroup group_views The model must be a \l QListModelInterface subclass. diff --git a/src/declarative/fx/qfxpixmap.cpp b/src/declarative/fx/qfxpixmap.cpp index 883dbdf..5a08679 100644 --- a/src/declarative/fx/qfxpixmap.cpp +++ b/src/declarative/fx/qfxpixmap.cpp @@ -85,7 +85,7 @@ public: /*! \internal \class QFxPixmap - \ingroup utility + \ingroup group_utility \brief Enacapsultes a pixmap for QFx items. This class is NOT reentrant. diff --git a/src/declarative/fx/qfxrect.cpp b/src/declarative/fx/qfxrect.cpp index 718dc76..2e84c74 100644 --- a/src/declarative/fx/qfxrect.cpp +++ b/src/declarative/fx/qfxrect.cpp @@ -49,7 +49,7 @@ QML_DEFINE_TYPE(QFxPen,Pen); /*! \internal \class QFxPen - \ingroup utility + \ingroup group_utility \brief The QFxPen class provides a pen used for drawing rect borders on a QFxView. Example: @@ -126,7 +126,7 @@ QML_DEFINE_TYPE(QFxRect,Rect); A QFxRect object can be instantiated in Qml using the tag \l Rect. - \ingroup coreitems + \ingroup group_coreitems */ QFxRect::QFxRect(QFxItem *parent) : QFxItem(*(new QFxRectPrivate), parent) diff --git a/src/declarative/fx/qfxreflectionfilter.cpp b/src/declarative/fx/qfxreflectionfilter.cpp index a541083..d67095b 100644 --- a/src/declarative/fx/qfxreflectionfilter.cpp +++ b/src/declarative/fx/qfxreflectionfilter.cpp @@ -111,7 +111,7 @@ public: /*! \internal \class QFxReflectionFilter - \ingroup effects + \ingroup group_effects \brief The QFxReflectionFilter class allows you to add a reflection to an item. */ QFxReflectionFilter::QFxReflectionFilter(QObject *parent) diff --git a/src/declarative/fx/qfxrepeater.cpp b/src/declarative/fx/qfxrepeater.cpp index 823932c..ec1d88c 100644 --- a/src/declarative/fx/qfxrepeater.cpp +++ b/src/declarative/fx/qfxrepeater.cpp @@ -122,7 +122,7 @@ QML_DEFINE_TYPE(QFxRepeater,Repeater); /*! \internal \class QFxRepeater - \ingroup utility + \ingroup group_utility \qmlclass Repeater \brief The QFxRepeater class allows you to repeat a component based on a diff --git a/src/declarative/fx/qfxshadowfilter.cpp b/src/declarative/fx/qfxshadowfilter.cpp index d10899f..3760a4d 100644 --- a/src/declarative/fx/qfxshadowfilter.cpp +++ b/src/declarative/fx/qfxshadowfilter.cpp @@ -90,7 +90,7 @@ public: /*! \internal \class QFxShadowFilter - \ingroup effects + \ingroup group_effects \brief The QFxShadowFilter class allows you to add a shadow to an item. */ @@ -128,7 +128,7 @@ void QFxShadowFilter::setXOffset(int offset) } /*! - \property QFxShadowFilter::xOffset + \property QFxShadowFilter::yOffset \brief the y offset of the shadow relative to the item. */ int QFxShadowFilter::yOffset() const diff --git a/src/declarative/fx/qfxtext.cpp b/src/declarative/fx/qfxtext.cpp index 9cf1bb0..bc03d7c 100644 --- a/src/declarative/fx/qfxtext.cpp +++ b/src/declarative/fx/qfxtext.cpp @@ -93,7 +93,7 @@ QML_DEFINE_TYPE(QFxText,Text); \internal \class QFxText \qmlclass Text - \ingroup coreitems + \ingroup group_coreitems \brief The QFxText class provides a formatted text item that you can add to a QFxView. diff --git a/src/declarative/fx/qfxtextedit.cpp b/src/declarative/fx/qfxtextedit.cpp index ebfe799..96ebe0d 100644 --- a/src/declarative/fx/qfxtextedit.cpp +++ b/src/declarative/fx/qfxtextedit.cpp @@ -83,7 +83,7 @@ QML_DEFINE_TYPE(QFxTextEdit, TextEdit); \internal \class QFxTextEdit \qmlclass TextEdit - \ingroup coreitems + \ingroup group_coreitems \brief The QFxTextEdit class provides an editable formatted text item that you can add to a QFxView. diff --git a/src/declarative/fx/qfxtransform.cpp b/src/declarative/fx/qfxtransform.cpp index 8d8e5b4..90875a6 100644 --- a/src/declarative/fx/qfxtransform.cpp +++ b/src/declarative/fx/qfxtransform.cpp @@ -344,7 +344,7 @@ public: \class QFxFlipable \brief The QFxFlipable class provides a flipable surface. - \ingroup widgets + \ingroup group_widgets QFxFlipable allows you to specify a front and a back, as well as an axis for the flip. diff --git a/src/declarative/fx/qfxwebview.cpp b/src/declarative/fx/qfxwebview.cpp index c4a2750..9a9ee70 100644 --- a/src/declarative/fx/qfxwebview.cpp +++ b/src/declarative/fx/qfxwebview.cpp @@ -1029,7 +1029,7 @@ public: QmlEngine *engine = webview->itemContext()->engine(); component = new QmlComponent(engine, url, this); item = 0; - connect(engine, SIGNAL(readyChanged()), this, SLOT(qmlLoaded())); + connect(engine, SIGNAL(statusChanged(Status)), this, SLOT(qmlLoaded())); } public Q_SLOTS: diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index 9af0a06..f03ce20 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -448,7 +448,7 @@ void QmlCompiler::reset(QmlCompiledComponent *cc, bool deleteMemory) } bool QmlCompiler::compile(QmlEngine *engine, - QmlCompositeTypeManager::TypeData *unit, + QmlCompositeTypeData *unit, QmlCompiledComponent *out) { #ifdef Q_ENABLE_PERFORMANCE_LOG @@ -463,7 +463,7 @@ bool QmlCompiler::compile(QmlEngine *engine, // Compile types for(int ii = 0; ii < unit->types.count(); ++ii) { - QmlCompositeTypeManager::TypeData::TypeReference &tref = unit->types[ii]; + QmlCompositeTypeData::TypeReference &tref = unit->types[ii]; QmlCompiledComponent::TypeReference ref; if(tref.type) ref.type = tref.type; diff --git a/src/declarative/qml/qmlcompiler_p.h b/src/declarative/qml/qmlcompiler_p.h index 732d9ea..754e284 100644 --- a/src/declarative/qml/qmlcompiler_p.h +++ b/src/declarative/qml/qmlcompiler_p.h @@ -112,7 +112,7 @@ class Q_DECLARATIVE_EXPORT QmlCompiler public: QmlCompiler(); - bool compile(QmlEngine *, QmlCompositeTypeManager::TypeData *, QmlCompiledComponent *); + bool compile(QmlEngine *, QmlCompositeTypeData *, QmlCompiledComponent *); bool isError() const; qint64 errorLine() const; diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index c863a00..ccc591a 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -67,6 +67,17 @@ class QByteArray; */ QML_DEFINE_TYPE(QmlComponent,Component); +/*! + \enum QmlComponent::Status + + Specifies the loading status of the QmlComponent. + + \o Null This QmlComponent has no data. Call loadUrl() or setData() to add QML content. + \o Ready This QmlComponent is ready and create() may be called. + \o Loading This QmlComponent is loading network data. + \o Error An error has occured. Calling errorDescription() to retrieve a description. +*/ + void QmlComponentPrivate::typeDataReady() { Q_Q(QmlComponent); @@ -76,19 +87,21 @@ void QmlComponentPrivate::typeDataReady() fromTypeData(typeData); typeData = 0; - emit q->readyChanged(); + emit q->statusChanged(q->status()); } -void QmlComponentPrivate::fromTypeData(QmlCompositeTypeManager::TypeData *data) +void QmlComponentPrivate::fromTypeData(QmlCompositeTypeData *data) { - name = data->url; + url = QUrl(data->url); QmlCompiledComponent *c = data->toCompiledComponent(engine); if(!c) { - Q_ASSERT(data->status == QmlCompositeTypeManager::TypeData::Error); + Q_ASSERT(data->status == QmlCompositeTypeData::Error); + errorDescription = data->errorDescription; qWarning().nospace() << "QmlComponent: " << data->errorDescription.toLatin1().constData(); + } else { cc = c; @@ -98,14 +111,26 @@ void QmlComponentPrivate::fromTypeData(QmlCompositeTypeManager::TypeData *data) data->release(); } +void QmlComponentPrivate::clear() +{ + if(typeData) { + typeData->remWaiter(this); + typeData->release(); + typeData = 0; + } + + if(cc) { + cc->release(); + cc = 0; + } +} + /*! - Construct a null QmlComponent. + \internal */ QmlComponent::QmlComponent(QObject *parent) : QObject(*(new QmlComponentPrivate), parent) { - Q_D(QmlComponent); - d->name = QLatin1String(""); } /*! @@ -122,62 +147,66 @@ QmlComponent::~QmlComponent() d->cc->release(); } -/*! - \property QmlComponent::name - \brief the component's name. - - The component's name is used in error and warning messages. If available, - the XML source file name is used as the component's name, otherwise it is - set to "". -*/ -QString QmlComponent::name() const +QmlComponent::Status QmlComponent::status() const { Q_D(const QmlComponent); - return d->name; -} -void QmlComponent::setName(const QString &name) -{ - Q_D(QmlComponent); - d->name = name; + if(d->typeData) + return Loading; + else if(d->engine && d->cc) + return Ready; + else if(!d->errorDescription.isEmpty()) + return Error; + else + return Null; } /*! - \internal + Returns true if the component is in the Null state, false otherwise. + + Equivalent to status() == QmlComponent::Null. */ -QmlComponent::QmlComponent(QmlEngine *engine, QmlCompiledComponent *cc, int start, int count, QObject *parent) - : QObject(*(new QmlComponentPrivate), parent) +bool QmlComponent::isNull() const { - Q_D(QmlComponent); - d->engine = engine; - d->name = QLatin1String(""); - d->cc = cc; - cc->addref(); - d->start = start; - d->count = count; + return status() == Null; } -QmlComponent::QmlComponent(QmlEngine *engine, const QUrl &url, QObject *parent) -: QObject(*(new QmlComponentPrivate), parent) +/*! + Returns true if the component is in the Ready state, false otherwise. + + Equivalent to status() == QmlComponent::Ready. +*/ +bool QmlComponent::isReady() const { - Q_D(QmlComponent); - d->engine = engine; - d->name = url.toString(); + return status() == Ready; +} - QmlCompositeTypeManager::TypeData *data = - engine->d_func()->typeManager.get(url); +/*! + Returns true if the component is in the Error state, false otherwise. - if(data->status == QmlCompositeTypeManager::TypeData::Waiting) { + Equivalent to status() == QmlComponent::Error. +*/ +bool QmlComponent::isError() const +{ + return status() == Error; +} - d->typeData = data; - d->typeData->addWaiter(d); +/*! + Returns true if the component is in the Loading state, false otherwise. - } else { + Equivalent to status() == QmlComponent::Loading. +*/ +bool QmlComponent::isLoading() const +{ + return status() == Loading; +} - d->fromTypeData(data); +/*! + \fn void QmlComponent::statusChanged(QmlComponent::Status status) - } -} + Emitted whenever the component's status changes. \a status will be the + new status. +*/ /*! Create a QmlComponent with no data. Set setData(). @@ -190,6 +219,17 @@ QmlComponent::QmlComponent(QmlEngine *engine, QObject *parent) } /*! + Create a QmlComponent from the given \a url. +*/ +QmlComponent::QmlComponent(QmlEngine *engine, const QUrl &url, QObject *parent) +: QObject(*(new QmlComponentPrivate), parent) +{ + Q_D(QmlComponent); + d->engine = engine; + loadUrl(url); +} + +/*! Create a QmlComponent from the given XML \a data. If provided, \a filename is used to set the component name, and to provide a base path for items resolved by this component. @@ -203,27 +243,36 @@ QmlComponent::QmlComponent(QmlEngine *engine, const QByteArray &data, const QUrl } /*! - Sets the QmlComponent to use the given XML \a data. If provided, \a filename - is used to set the component name, and to provide a base path for items - resolved by this component. + \internal +*/ +QmlComponent::QmlComponent(QmlEngine *engine, QmlCompiledComponent *cc, int start, int count, QObject *parent) + : QObject(*(new QmlComponentPrivate), parent) +{ + Q_D(QmlComponent); + d->engine = engine; + d->cc = cc; + cc->addref(); + d->start = start; + d->count = count; +} - Currently only supported to call once per component. +/*! + Sets the QmlComponent to use the given XML \a data. If provided, + \a filename is used to set the component name, and to provide a base path + for items resolved by this component. */ void QmlComponent::setData(const QByteArray &data, const QUrl &url) { Q_D(QmlComponent); - if(d->cc) d->cc->release(); - if(d->typeData) d->typeData->release(); - d->cc = 0; - d->typeData = 0; + d->clear(); - d->name = url.toString(); + d->url = url; - QmlCompositeTypeManager::TypeData *typeData = + QmlCompositeTypeData *typeData = d->engine->d_func()->typeManager.getImmediate(data, url); - if(typeData->status == QmlCompositeTypeManager::TypeData::Waiting) { + if(typeData->status == QmlCompositeTypeData::Waiting) { d->typeData = typeData; d->typeData->addWaiter(d); @@ -234,13 +283,54 @@ void QmlComponent::setData(const QByteArray &data, const QUrl &url) } + emit statusChanged(status()); } -bool QmlComponent::isReady() const +/*! + Load the QmlComponent from the provided \a url. +*/ +void QmlComponent::loadUrl(const QUrl &url) +{ + Q_D(QmlComponent); + + d->clear(); + + d->url = url; + + QmlCompositeTypeData *data = + d->engine->d_func()->typeManager.get(url); + + if(data->status == QmlCompositeTypeData::Waiting) { + + d->typeData = data; + d->typeData->addWaiter(d); + + } else { + + d->fromTypeData(data); + + } + + emit statusChanged(status()); +} + +QString QmlComponent::errorDescription() const { Q_D(const QmlComponent); + if(isError()) + return d->errorDescription; + else + return QString(); +} - return d->engine && !d->typeData; +/*! + Return the component URL. This is the URL passed to either the constructor, + or the loadUrl() or setData() methods. +*/ +QUrl QmlComponent::url() const +{ + Q_D(const QmlComponent); + return d->url; } /*! @@ -249,9 +339,6 @@ bool QmlComponent::isReady() const QmlComponent::QmlComponent(QmlComponentPrivate &dd, QObject *parent) : QObject(dd, parent) { - Q_D(QmlComponent); - d->name = QLatin1String(""); - d->cc = new QmlCompiledComponent; } /*! @@ -320,8 +407,9 @@ QObject *QmlComponent::beginCreate(QmlContext *context) qWarning("QmlComponent: Cannot create new component instance before completing the previous"); return 0; } - if (!d->cc) { - qWarning("QmlComponent: Cannot load component data"); + + if(!isReady()) { + qWarning("QmlComponent: Cannot create un-ready component"); return 0; } @@ -345,7 +433,7 @@ QObject *QmlComponent::beginCreate(QmlContext *context) << "QmlComponent: " #endif << vme.errorDescription().toLatin1().constData() << " @" - << d->name.toLatin1().constData() << ":" << vme.errorLine(); + << d->url.toString().toLatin1().constData() << ":" << vme.errorLine(); } diff --git a/src/declarative/qml/qmlcomponent.h b/src/declarative/qml/qmlcomponent.h index 1a74fe9..91e0917 100644 --- a/src/declarative/qml/qmlcomponent.h +++ b/src/declarative/qml/qmlcomponent.h @@ -62,36 +62,43 @@ class Q_DECLARATIVE_EXPORT QmlComponent : public QObject Q_OBJECT Q_DECLARE_PRIVATE(QmlComponent); - Q_PROPERTY(QString name READ name WRITE setName); - public: - QmlComponent(QObject *parent=0); + QmlComponent(QObject *parent = 0); QmlComponent(QmlEngine *, QObject *parent=0); QmlComponent(QmlEngine *, const QUrl &url, QObject *parent = 0); - QmlComponent(QmlEngine *, const QByteArray &, const QUrl &url=QUrl(), QObject *parent=0); - ~QmlComponent(); + QmlComponent(QmlEngine *, const QByteArray &data, + const QUrl &baseUrl=QUrl(), QObject *parent=0); + virtual ~QmlComponent(); - virtual QObject *create(QmlContext *context = 0); - virtual QObject *beginCreate(QmlContext *); - virtual void completeCreate(); + enum Status { Null, Ready, Loading, Error }; + Status status() const; - QString name() const; - void setName(const QString &name); + bool isNull() const; + bool isReady() const; + bool isError() const; + bool isLoading() const; + QString errorDescription() const; - void setData(const QByteArray &, const QUrl &url); + QUrl url() const; - bool isReady() const; + virtual QObject *create(QmlContext *context = 0); + virtual QObject *beginCreate(QmlContext *); + virtual void completeCreate(); - QmlComponent(QmlEngine *, QmlCompiledComponent *, int, int, QObject *parent); + void loadUrl(const QUrl &url); + void setData(const QByteArray &, const QUrl &baseUrl = QUrl()); Q_SIGNALS: - void readyChanged(); + void statusChanged(Status); protected: QmlComponent(QmlComponentPrivate &dd, QObject* parent); private: + QmlComponent(QmlEngine *, QmlCompiledComponent *, int, int, QObject *parent); + friend class QmlVME; + friend class QmlCompositeTypeData; }; QML_DECLARE_TYPE(QmlComponent); diff --git a/src/declarative/qml/qmlcomponent_p.h b/src/declarative/qml/qmlcomponent_p.h index e97ec67..8074775 100644 --- a/src/declarative/qml/qmlcomponent_p.h +++ b/src/declarative/qml/qmlcomponent_p.h @@ -63,12 +63,13 @@ class QmlComponentPrivate : public QObjectPrivate public: QmlComponentPrivate() : typeData(0), start(-1), count(-1), cc(0), completePending(false), engine(0) {} - QmlCompositeTypeManager::TypeData *typeData; + QmlCompositeTypeData *typeData; void typeDataReady(); - void fromTypeData(QmlCompositeTypeManager::TypeData *data); + void fromTypeData(QmlCompositeTypeData *data); - QString name; + QString errorDescription; + QUrl url; int start; int count; @@ -78,6 +79,8 @@ public: bool completePending; QmlEngine *engine; + + void clear(); }; #endif // QMLCOMPONENT_P_H diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp index 65596ae..b0d121c 100644 --- a/src/declarative/qml/qmlcompositetypemanager.cpp +++ b/src/declarative/qml/qmlcompositetypemanager.cpp @@ -50,12 +50,12 @@ #include #include -QmlCompositeTypeManager::TypeData::TypeData() +QmlCompositeTypeData::QmlCompositeTypeData() : status(Invalid), component(0), compiledComponent(0) { } -QmlCompositeTypeManager::TypeData::~TypeData() +QmlCompositeTypeData::~QmlCompositeTypeData() { for(int ii = 0; ii < dependants.count(); ++ii) dependants.at(ii)->release(); @@ -67,17 +67,17 @@ QmlCompositeTypeManager::TypeData::~TypeData() delete component; } -void QmlCompositeTypeManager::TypeData::addWaiter(QmlComponentPrivate *p) +void QmlCompositeTypeData::addWaiter(QmlComponentPrivate *p) { waiters << p; } -void QmlCompositeTypeManager::TypeData::remWaiter(QmlComponentPrivate *p) +void QmlCompositeTypeData::remWaiter(QmlComponentPrivate *p) { waiters.removeAll(p); } -QmlComponent *QmlCompositeTypeManager::TypeData::toComponent(QmlEngine *engine) +QmlComponent *QmlCompositeTypeData::toComponent(QmlEngine *engine) { if(!component) { @@ -94,7 +94,7 @@ QmlComponent *QmlCompositeTypeManager::TypeData::toComponent(QmlEngine *engine) } QmlCompiledComponent * -QmlCompositeTypeManager::TypeData::toCompiledComponent(QmlEngine *engine) +QmlCompositeTypeData::toCompiledComponent(QmlEngine *engine) { if(status == Complete && !compiledComponent) { @@ -123,7 +123,7 @@ QmlCompositeTypeManager::TypeData::toCompiledComponent(QmlEngine *engine) return compiledComponent; } -QmlCompositeTypeManager::TypeData::TypeReference::TypeReference() +QmlCompositeTypeData::TypeReference::TypeReference() : type(0), unit(0), parser(0) { } @@ -133,13 +133,13 @@ QmlCompositeTypeManager::QmlCompositeTypeManager(QmlEngine *e) { } -QmlCompositeTypeManager::TypeData *QmlCompositeTypeManager::get(const QUrl &url) +QmlCompositeTypeData *QmlCompositeTypeManager::get(const QUrl &url) { - TypeData *unit = components.value(url.toString()); + QmlCompositeTypeData *unit = components.value(url.toString()); if(!unit) { - unit = new TypeData; - unit->status = TypeData::Waiting; + unit = new QmlCompositeTypeData; + unit->status = QmlCompositeTypeData::Waiting; unit->url = url.toString(); components.insert(url.toString(), unit); @@ -150,11 +150,11 @@ QmlCompositeTypeManager::TypeData *QmlCompositeTypeManager::get(const QUrl &url) return unit; } -QmlCompositeTypeManager::TypeData * +QmlCompositeTypeData * QmlCompositeTypeManager::getImmediate(const QByteArray &data, const QUrl &url) { - TypeData *unit = new TypeData; - unit->status = TypeData::Waiting; + QmlCompositeTypeData *unit = new QmlCompositeTypeData; + unit->status = QmlCompositeTypeData::Waiting; unit->url = url.toString(); setData(unit, data, url); return unit; @@ -163,7 +163,7 @@ QmlCompositeTypeManager::getImmediate(const QByteArray &data, const QUrl &url) void QmlCompositeTypeManager::clearCache() { for(Components::Iterator iter = components.begin(); iter != components.end();) { - if((*iter)->status != TypeData::Waiting) { + if((*iter)->status != QmlCompositeTypeData::Waiting) { (*iter)->release(); iter = components.erase(iter); } else { @@ -177,7 +177,7 @@ void QmlCompositeTypeManager::replyFinished() { QNetworkReply *reply = static_cast(sender()); - TypeData *unit = components.value(reply->url().toString()); + QmlCompositeTypeData *unit = components.value(reply->url().toString()); Q_ASSERT(unit); if(reply->error() != QNetworkReply::NoError) { @@ -187,7 +187,7 @@ void QmlCompositeTypeManager::replyFinished() errorDescription = QLatin1String("Network error for URL ") + reply->url().toString(); - unit->status = TypeData::Error; + unit->status = QmlCompositeTypeData::Error; unit->errorDescription = errorDescription; doComplete(unit); @@ -200,7 +200,7 @@ void QmlCompositeTypeManager::replyFinished() reply->deleteLater(); } -void QmlCompositeTypeManager::loadSource(TypeData *unit) +void QmlCompositeTypeManager::loadSource(QmlCompositeTypeData *unit) { QUrl url(unit->url); @@ -214,7 +214,7 @@ void QmlCompositeTypeManager::loadSource(TypeData *unit) QString errorDescription; // ### - Fill in error errorDescription = QLatin1String("File error for URL ") + url.toString(); - unit->status = TypeData::Error; + unit->status = QmlCompositeTypeData::Error; unit->errorDescription = errorDescription; doComplete(unit); } @@ -227,12 +227,13 @@ void QmlCompositeTypeManager::loadSource(TypeData *unit) } } -void QmlCompositeTypeManager::setData(TypeData *unit, const QByteArray &data, - const QUrl &url) +void QmlCompositeTypeManager::setData(QmlCompositeTypeData *unit, + const QByteArray &data, + const QUrl &url) { if(!unit->data.parse(data, url)) { - unit->status = TypeData::Error; + unit->status = QmlCompositeTypeData::Error; unit->errorDescription = unit->data.errorDescription(); doComplete(unit); @@ -244,7 +245,7 @@ void QmlCompositeTypeManager::setData(TypeData *unit, const QByteArray &data, } } -void QmlCompositeTypeManager::doComplete(TypeData *unit) +void QmlCompositeTypeManager::doComplete(QmlCompositeTypeData *unit) { for(int ii = 0; ii < unit->dependants.count(); ++ii) { checkComplete(unit->dependants.at(ii)); @@ -258,34 +259,34 @@ void QmlCompositeTypeManager::doComplete(TypeData *unit) } } -void QmlCompositeTypeManager::checkComplete(TypeData *unit) +void QmlCompositeTypeManager::checkComplete(QmlCompositeTypeData *unit) { - if(unit->status != TypeData::Waiting) + if(unit->status != QmlCompositeTypeData::Waiting) return; int waiting = 0; for(int ii = 0; ii < unit->types.count(); ++ii) { - TypeData *u = unit->types.at(ii).unit; + QmlCompositeTypeData *u = unit->types.at(ii).unit; if(!u) continue; - if(u->status == TypeData::Error) { - unit->status = TypeData::Error; + if(u->status == QmlCompositeTypeData::Error) { + unit->status = QmlCompositeTypeData::Error; unit->errorDescription = u->errorDescription; doComplete(unit); return; - } else if(u->status == TypeData::Waiting) { + } else if(u->status == QmlCompositeTypeData::Waiting) { waiting++; } } if(!waiting) { - unit->status = TypeData::Complete; + unit->status = QmlCompositeTypeData::Complete; doComplete(unit); } } -void QmlCompositeTypeManager::compile(TypeData *unit) +void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit) { QStringList typeNames = unit->data.types(); @@ -293,7 +294,7 @@ void QmlCompositeTypeManager::compile(TypeData *unit) for(int ii = 0; ii < typeNames.count(); ++ii) { QByteArray type = typeNames.at(ii).toLatin1(); - TypeData::TypeReference ref; + QmlCompositeTypeData::TypeReference ref; if (type == QByteArray("Property") || type == QByteArray("Signal")) { unit->types << ref; @@ -317,11 +318,11 @@ void QmlCompositeTypeManager::compile(TypeData *unit) } QUrl url = engine->componentUrl(QUrl(type + ".qml"), QUrl(unit->url)); - TypeData *urlUnit = components.value(url.toString()); + QmlCompositeTypeData *urlUnit = components.value(url.toString()); if(!urlUnit) { - urlUnit = new TypeData; - urlUnit->status = TypeData::Waiting; + urlUnit = new QmlCompositeTypeData; + urlUnit->status = QmlCompositeTypeData::Waiting; urlUnit->url = url.toString(); components.insert(url.toString(), urlUnit); @@ -330,17 +331,17 @@ void QmlCompositeTypeManager::compile(TypeData *unit) ref.unit = urlUnit; switch(urlUnit->status) { - case TypeData::Invalid: - case TypeData::Error: - unit->status = TypeData::Error; + case QmlCompositeTypeData::Invalid: + case QmlCompositeTypeData::Error: + unit->status = QmlCompositeTypeData::Error; unit->errorDescription = urlUnit->errorDescription; doComplete(unit); return; - case TypeData::Complete: + case QmlCompositeTypeData::Complete: break; - case TypeData::Waiting: + case QmlCompositeTypeData::Waiting: unit->addref(); ref.unit->dependants << unit; waiting++; @@ -351,9 +352,9 @@ void QmlCompositeTypeManager::compile(TypeData *unit) } if(waiting) { - unit->status = TypeData::Waiting; + unit->status = QmlCompositeTypeData::Waiting; } else { - unit->status = TypeData::Complete; + unit->status = QmlCompositeTypeData::Complete; doComplete(unit); } } diff --git a/src/declarative/qml/qmlcompositetypemanager_p.h b/src/declarative/qml/qmlcompositetypemanager_p.h index 6982844..814e753 100644 --- a/src/declarative/qml/qmlcompositetypemanager_p.h +++ b/src/declarative/qml/qmlcompositetypemanager_p.h @@ -53,70 +53,71 @@ class QmlEngine; class QmlCompiledComponent; class QmlComponentPrivate; class QmlComponent; +struct QmlCompositeTypeData : public QmlRefCount +{ + QmlCompositeTypeData(); + virtual ~QmlCompositeTypeData(); + + enum Status { + Invalid, + Complete, + Error, + Waiting + }; + Status status; + QString errorDescription; + + QString url; + QList dependants; + + // Return a QmlComponent if the QmlCompositeTypeData is not in the Waiting + // state. The QmlComponent is owned by the QmlCompositeTypeData, so a + // reference should be kept to keep the QmlComponent alive. + QmlComponent *toComponent(QmlEngine *); + // Return a QmlCompiledComponent if possible, or 0 if an error + // occurs + QmlCompiledComponent *toCompiledComponent(QmlEngine *); + + struct TypeReference + { + TypeReference(); + + QmlType *type; + QmlCompositeTypeData *unit; + QmlCustomParser *parser; + }; + + QList types; + + // Add or remove p as a waiter. When the QmlCompositeTypeData becomes + // ready, the QmlComponentPrivate::typeDataReady() method will be invoked on + // p. The waiter is automatically removed when the typeDataReady() method + // is invoked, so there is no need to call remWaiter() in this case. + void addWaiter(QmlComponentPrivate *p); + void remWaiter(QmlComponentPrivate *p); + +private: + friend class QmlCompositeTypeManager; + friend class QmlCompiler; + + QmlXmlParser data; + QList waiters; + QmlComponent *component; + QmlCompiledComponent *compiledComponent; +}; + class QmlCompositeTypeManager : public QObject { Q_OBJECT public: QmlCompositeTypeManager(QmlEngine *); - struct TypeData : public QmlRefCount - { - TypeData(); - virtual ~TypeData(); - - enum Status { - Invalid, - Complete, - Error, - Waiting - }; - Status status; - QString errorDescription; - - QString url; - QList dependants; - - // Return a QmlComponent if the TypeData is not in the Waiting state. - // The QmlComponent is owned by the TypeData, so a reference should be - // kept to keep the QmlComponent alive. - QmlComponent *toComponent(QmlEngine *); - // Return a QmlCompiledComponent if possible, or 0 if an error - // occurs - QmlCompiledComponent *toCompiledComponent(QmlEngine *); - - struct TypeReference - { - TypeReference(); - - QmlType *type; - TypeData *unit; - QmlCustomParser *parser; - }; - - QList types; - - // Add or remove p as a waiter. When the TypeData becomes ready, the - // QmlComponentPrivate::typeDataReady() method will be invoked on p. - // The waiter is automatically removed when the typeDataReady() method - // is invoked, so there is no need to call remWaiter() in this case. - void addWaiter(QmlComponentPrivate *p); - void remWaiter(QmlComponentPrivate *p); - - private: - friend class QmlCompositeTypeManager; - friend class QmlCompiler; - - QmlXmlParser data; - QList waiters; - QmlComponent *component; - QmlCompiledComponent *compiledComponent; - }; - - // Return a TypeData for url. The TypeData may be cached. - TypeData *get(const QUrl &url); - // Return a TypeData for data, with the provided base url. The TypeData - // will not be cached. - TypeData *getImmediate(const QByteArray &data, const QUrl &url); + // Return a QmlCompositeTypeData for url. The QmlCompositeTypeData may be + // cached. + QmlCompositeTypeData *get(const QUrl &url); + // Return a QmlCompositeTypeData for data, with the provided base url. The + // QmlCompositeTypeData will not be cached. + QmlCompositeTypeData *getImmediate(const QByteArray &data, const QUrl &url); // Clear cached types. Only types that aren't in the Waiting state will // be cleared. @@ -126,15 +127,15 @@ private Q_SLOTS: void replyFinished(); private: - void loadSource(TypeData *); - void compile(TypeData *); - void setData(TypeData *, const QByteArray &, const QUrl &); + void loadSource(QmlCompositeTypeData *); + void compile(QmlCompositeTypeData *); + void setData(QmlCompositeTypeData *, const QByteArray &, const QUrl &); - void doComplete(TypeData *); - void checkComplete(TypeData *); + void doComplete(QmlCompositeTypeData *); + void checkComplete(QmlCompositeTypeData *); QmlEngine *engine; - typedef QHash Components; + typedef QHash Components; Components components; }; diff --git a/src/declarative/qml/script/tokens.cpp b/src/declarative/qml/script/tokens.cpp index 51b46f0..a2fb100 100644 --- a/src/declarative/qml/script/tokens.cpp +++ b/src/declarative/qml/script/tokens.cpp @@ -12,7 +12,6 @@ /*! - \relates Returns a string representation of token \a tok. */ const char *tokenToString(Token tok) diff --git a/src/declarative/timeline/gfxeasing.cpp b/src/declarative/timeline/gfxeasing.cpp index c89ba88..59767b2 100644 --- a/src/declarative/timeline/gfxeasing.cpp +++ b/src/declarative/timeline/gfxeasing.cpp @@ -357,7 +357,7 @@ Q_GLOBAL_STATIC(ConfigFunctionMap, configFunctionMap); /*! \class GfxEasing - \ingroup animation + \ingroup group_animation \brief The GfxEasing class provides easing curves for controlling animation. Easing curves describe a function that controls how a value changes over diff --git a/src/declarative/timeline/gfxtimeline.cpp b/src/declarative/timeline/gfxtimeline.cpp index 36b18d0..3e84df8 100644 --- a/src/declarative/timeline/gfxtimeline.cpp +++ b/src/declarative/timeline/gfxtimeline.cpp @@ -261,7 +261,7 @@ qreal QmlTimeLinePrivate::value(const Op &op, int time, qreal base, bool *change /*! \class QmlTimeLine - \ingroup animation + \ingroup group_animation \brief The QmlTimeLine class provides a timeline for controlling animations. QmlTimeLine is similar to QTimeLine except: @@ -872,7 +872,7 @@ void QmlTimeLine::remove(QmlTimeLineObject *v) /*! \class GfxValue - \ingroup animation + \ingroup group_animation \brief The GfxValue class is modified by QmlTimeLine. */ diff --git a/src/declarative/util/qfxview.cpp b/src/declarative/util/qfxview.cpp index 3fb30e9..4aa0932 100644 --- a/src/declarative/util/qfxview.cpp +++ b/src/declarative/util/qfxview.cpp @@ -200,16 +200,16 @@ void QFxView::execute() d->component = new QmlComponent(&d->engine, d->xml.toUtf8(), d->source); } - if(d->component->isReady()) { + if(!d->component->isLoading()) { continueExecute(); } else { - connect(d->component, SIGNAL(readyChanged()), this, SLOT(continueExecute())); + connect(d->component, SIGNAL(statusChanged(Status)), this, SLOT(continueExecute())); } } void QFxView::continueExecute() { - disconnect(d->component, SIGNAL(readyChanged()), this, SLOT(continueExecute())); + disconnect(d->component, SIGNAL(statusChanged(Status)), this, SLOT(continueExecute())); if(!d->component){ qWarning() << "Error in loading" << d->source; diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp index 729d53a..de6d84c 100644 --- a/src/declarative/util/qmlanimation.cpp +++ b/src/declarative/util/qmlanimation.cpp @@ -538,14 +538,15 @@ void QmlAbstractAnimation::timelineComplete() /*! \internal \class QmlPauseAnimation - \ingroup animation states + \ingroup group_animation + \ingroup group_states \brief The QmlPauseAnimation class provides a pause for an animation. When used in a QmlSequentialAnimation, QmlPauseAnimation is a step when nothing happens, for a specified duration. A QmlPauseAnimation object can be instantiated in Qml using the tag - \ref xmlPauseAnimation "<PauseAnimation>". + \l{xmlPauseAnimation} {<PauseAnimation>}. */ QML_DEFINE_TYPE(QmlPauseAnimation,PauseAnimation); @@ -629,11 +630,12 @@ QAbstractAnimation *QmlPauseAnimation::qtAnimation() /*! \internal \class QmlColorAnimation - \ingroup animation states + \ingroup group_animation + \ingroup group_states \brief The QmlColorAnimation class allows you to animate color changes. A QmlColorAnimation object can be instantiated in Qml using the tag - \ref xmlColorAnimation "<ColorAnimation>". + \l{xmlColorAnimation} {<ColorAnimation>}. */ QmlColorAnimation::QmlColorAnimation(QObject *parent) @@ -930,9 +932,9 @@ QML_DEFINE_TYPE(QmlColorAnimation,ColorAnimation); /*! \internal \class QmlRunScriptAction - \brief The QmlRunScriptAction class allows scropts to be run during transitions + \brief The QmlRunScriptAction class allows scripts to be run during transitions - \ref xmlRunScriptAction + \sa xmlRunScriptAction */ QmlRunScriptAction::QmlRunScriptAction(QObject *parent) :QmlAbstractAnimation(*(new QmlRunScriptActionPrivate), parent) @@ -1039,7 +1041,7 @@ QML_DEFINE_TYPE(QmlRunScriptAction, RunScriptAction); \brief The QmlSetPropertyAction class allows property changes during transitions. A QmlSetPropertyAction object can be instantiated in Qml using the tag - \ref xmlSetPropertyAction "<SetPropertyAction>". + \l{xmlSetPropertyAction} {<SetPropertyAction>}. */ QmlSetPropertyAction::QmlSetPropertyAction(QObject *parent) : QmlAbstractAnimation(*(new QmlSetPropertyActionPrivate), parent) @@ -1337,11 +1339,12 @@ QML_DEFINE_TYPE(QmlParentChangeAction,ParentChangeAction); /*! \internal \class QmlNumericAnimation - \ingroup animation states + \ingroup group_animation + \ingroup group_states \brief The QmlNumericAnimation class allows you to animate changes in properties of type qreal. A QmlNumericAnimation object can be instantiated in Qml using the tag - \ref xmlNumericAnimation "<NumericAnimation>". + \l{xmlNumericAnimation} {<NumericAnimation>}. */ QmlNumericAnimation::QmlNumericAnimation(QObject *parent) @@ -1766,7 +1769,8 @@ QML_DEFINE_TYPE(QmlSequentialAnimation,SequentialAnimation); /*! \internal \class QmlParallelAnimation - \ingroup animation states + \ingroup group_animation + \ingroup group_states \brief The QmlParallelAnimation class allows you to run animations in parallel. Animations controlled by QmlParallelAnimation will be run at the same time. @@ -1774,7 +1778,7 @@ QML_DEFINE_TYPE(QmlSequentialAnimation,SequentialAnimation); \sa QmlSequentialAnimation A QmlParallelAnimation object can be instantiated in Qml using the tag - \ref xmlParallelAnimation "<ParallelAnimation>". + \l{xmlParallelAnimation} {<ParallelAnimation>}. */ QmlParallelAnimation::QmlParallelAnimation(QObject *parent) : diff --git a/src/declarative/util/qmlbind.cpp b/src/declarative/util/qmlbind.cpp index d71d711..1becc34 100644 --- a/src/declarative/util/qmlbind.cpp +++ b/src/declarative/util/qmlbind.cpp @@ -91,7 +91,7 @@ QML_DEFINE_TYPE(QmlBind,Bind); /*! \internal \class QmlBind - \ingroup utility + \ingroup group_utility \brief The QmlBind class allows arbitrary property bindings to be created. Simple bindings are usually earier to do in-place rather than creating a diff --git a/src/declarative/util/qmldatetimeformatter.cpp b/src/declarative/util/qmldatetimeformatter.cpp index 138f68b..efddd81 100644 --- a/src/declarative/util/qmldatetimeformatter.cpp +++ b/src/declarative/util/qmldatetimeformatter.cpp @@ -85,7 +85,7 @@ public: /*! \internal \class QmlDateTimeFormatter - \ingroup utility + \ingroup group_utility \brief The QmlDateTimeFormatter class allows you to format a date string. */ diff --git a/src/declarative/util/qmlfont.cpp b/src/declarative/util/qmlfont.cpp index ad91edd..9f3225a 100644 --- a/src/declarative/util/qmlfont.cpp +++ b/src/declarative/util/qmlfont.cpp @@ -56,7 +56,7 @@ QML_DEFINE_TYPE(QmlFont,Font); /*! \internal \class QmlFont - \ingroup utility + \ingroup group_utility \brief The QmlFont class provides a font used for drawing text on a QFxView. */ QmlFont::QmlFont(QObject *parent) diff --git a/src/declarative/util/qmlscript.cpp b/src/declarative/util/qmlscript.cpp index a24c427..859e21e 100644 --- a/src/declarative/util/qmlscript.cpp +++ b/src/declarative/util/qmlscript.cpp @@ -79,7 +79,7 @@ public: /*! \qmlclass Script QmlScript \brief The Script element adds JavaScript snippets. - \ingroup utility + \ingroup group_utility QmlScript is used to add convenient JavaScript "glue" methods to your Qt Declarative application or component. While you can have any JavaScript code @@ -139,7 +139,7 @@ void QmlScript::setScript(const QString &script) the file specified. */ /*! - \property QmlScript::source + \property QmlScript::src \brief the path to a script file. */ QString QmlScript::source() const diff --git a/src/declarative/util/qmlsetproperties.cpp b/src/declarative/util/qmlsetproperties.cpp index f385391..61890b9 100644 --- a/src/declarative/util/qmlsetproperties.cpp +++ b/src/declarative/util/qmlsetproperties.cpp @@ -122,7 +122,7 @@ void QmlSetPropertiesMetaObject::propertyWrite(int id) \class QmlSetProperties \brief The QmlSetProperties class describes new property values for a state. - \ingroup states + \ingroup group_states QmlSetProperties is a convenience class for changing many properties on a single object. It allows you to specify the property names and values similar to how diff --git a/src/declarative/util/qmlstate.cpp b/src/declarative/util/qmlstate.cpp index 50ae6b5..f07fecb 100644 --- a/src/declarative/util/qmlstate.cpp +++ b/src/declarative/util/qmlstate.cpp @@ -97,7 +97,7 @@ QmlStateOperation::QmlStateOperation(QObjectPrivate &dd, QObject *parent) \class QmlState \brief The QmlState class allows you to define configurations of objects and properties. - \ingroup states + \ingroup group_states QmlState allows you to specify a state as a set of batched changes from the default configuration. diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp index c2ba4b8..a8779f9 100644 --- a/src/declarative/util/qmlstateoperations.cpp +++ b/src/declarative/util/qmlstateoperations.cpp @@ -236,7 +236,7 @@ QmlRunScript::ActionList QmlRunScript::actions() \class QmlSetProperty \brief The QmlSetProperty class describes a new property value or binding for a state. - \ingroup states + \ingroup group_states \sa QmlSetProperties */ diff --git a/src/declarative/util/qmltransition.cpp b/src/declarative/util/qmltransition.cpp index fb09e32..181fdb9 100644 --- a/src/declarative/util/qmltransition.cpp +++ b/src/declarative/util/qmltransition.cpp @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE \class QmlTransition \brief The QmlTransition class allows you to define animated transitions that occur on state changes. - \ingroup states + \ingroup group_states */ //ParallelAnimationWrapperallows us to do a "callback" when the animation finishes, rather than connecting diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index 92d6cf9..e271590 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -90,6 +90,7 @@ QT_BEGIN_NAMESPACE #define COMMAND_QMLINHERITS Doc::alias("inherits") #define COMMAND_QMLSIGNAL Doc::alias("qmlsignal") #define COMMAND_QMLMETHOD Doc::alias("qmlmethod") +#define COMMAND_QMLDEFAULT Doc::alias("default") #endif QStringList CppCodeParser::exampleFiles; @@ -820,7 +821,8 @@ QSet CppCodeParser::otherMetaCommands() << COMMAND_INDEXPAGE #ifdef QDOC_QML << COMMAND_STARTPAGE - << COMMAND_QMLINHERITS; + << COMMAND_QMLINHERITS + << COMMAND_QMLDEFAULT; #else << COMMAND_STARTPAGE; #endif @@ -890,14 +892,19 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc, else if (command == COMMAND_RELATES) { InnerNode *pseudoParent; if (arg.startsWith("<") || arg.startsWith("\"")) { - pseudoParent = static_cast(tre->findNode(QStringList(arg), Node::Fake)); + pseudoParent = + static_cast(tre->findNode(QStringList(arg), + Node::Fake)); } else { QStringList newPath = arg.split("::"); - pseudoParent = static_cast(tre->findNode(QStringList(newPath), Node::Class)); + pseudoParent = + static_cast(tre->findNode(QStringList(newPath), + Node::Class)); if (!pseudoParent) - pseudoParent = static_cast(tre->findNode(QStringList(newPath), - Node::Namespace)); + pseudoParent = + static_cast(tre->findNode(QStringList(newPath), + Node::Namespace)); } if (!pseudoParent) { doc.location().warning(tr("Cannot find '%1' in '\\%2'") @@ -926,6 +933,10 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc, else if (command == COMMAND_QMLINHERITS) { setLink(node, Node::InheritsLink, arg); } + else if (command == COMMAND_QMLDEFAULT) { + QmlPropGroupNode* qpgn = static_cast(node); + qpgn->setDefault(); + } #endif else { processCommonMetaCommand(doc.location(),command,arg,node,tre); diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 9237fea..c507f6c 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -3455,6 +3455,13 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << ""; generateQmlItem(qpn, relative, marker, false); out() << ""; + if (qpgn->isDefault()) { + out() << "
" + << "
" + << "" + << ""; + } } ++p; } diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 211e2df..9e7e306 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -1060,7 +1060,7 @@ QString QmlClassNode::fileBase() const always a QmlClassNode. */ QmlPropGroupNode::QmlPropGroupNode(QmlClassNode* parent, const QString& name) - : FakeNode(parent, name, QmlPropertyGroup) + : FakeNode(parent, name, QmlPropertyGroup), isdefault(false) { // nothing. } diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 477c2d2..9024758 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -367,6 +367,11 @@ class QmlPropGroupNode : public FakeNode virtual ~QmlPropGroupNode() { } const QString& element() const { return name(); } + void setDefault() { isdefault = true; } + bool isDefault() const { return isdefault; } + + private: + bool isdefault; }; class QmlPropertyNode : public LeafNode @@ -395,8 +400,8 @@ class QmlPropertyNode : public LeafNode static bool fromTrool(Trool troolean, bool defaultValue); QString dt; - Trool sto; - Trool des; + Trool sto; + Trool des; }; class QmlSignalNode : public LeafNode -- cgit v0.12
" + << "default