src/declarative/graphicsitems/qdeclarativeitem.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -69,6 +69,7 @@
 
 /*!
     \qmlclass Transform QGraphicsTransform
+    \ingroup qml-transform-elements
     \since 4.7
     \brief The Transform elements provide a way of building advanced transformations on Items.
 
@@ -90,6 +91,7 @@
 
 /*!
     \qmlclass Translate QDeclarativeTranslate
+    \ingroup qml-transform-elements
     \since 4.7
     \brief The Translate object provides a way to move an Item without changing its x or y properties.
 
@@ -131,6 +133,7 @@
 
 /*!
     \qmlclass Scale QGraphicsScale
+    \ingroup qml-transform-elements
     \since 4.7
     \brief The Scale element provides a way to scale an Item.
 
@@ -172,6 +175,7 @@
 
 /*!
     \qmlclass Rotation QGraphicsRotation
+    \ingroup qml-transform-elements
     \since 4.7
     \brief The Rotation object provides a way to rotate an Item.
 
@@ -225,12 +229,6 @@
     The angle to rotate, in degrees clockwise.
 */
 
-/*!
-    \internal
-    \class QDeclarativeContents
-    \brief The QDeclarativeContents class gives access to the height and width of an item's contents.
-
-*/
 QDeclarativeContents::QDeclarativeContents(QDeclarativeItem *item) : m_item(item), m_x(0), m_y(0), m_width(0), m_height(0)
 {
     //### optimize
@@ -419,11 +417,12 @@
 
 /*!
     \qmlclass KeyNavigation QDeclarativeKeyNavigationAttached
+    \ingroup qml-basic-interaction-elements
     \since 4.7
     \brief The KeyNavigation attached property supports key navigation by arrow keys.
 
     It is common in key-based UIs to use arrow keys to navigate
-    between focussed items.  The KeyNavigation property provides a
+    between focused items.  The KeyNavigation property provides a
     convenient way of specifying which item will gain focus
     when an arrow key is pressed.  The following example provides
     key navigation for a 2x2 grid of items.
@@ -511,8 +510,10 @@
 void QDeclarativeKeyNavigationAttached::setLeft(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->left == i)
+        return;
     d->left = i;
-    emit changed();
+    emit leftChanged();
 }
 
 QDeclarativeItem *QDeclarativeKeyNavigationAttached::right() const
@@ -524,8 +525,10 @@
 void QDeclarativeKeyNavigationAttached::setRight(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->right == i)
+        return;
     d->right = i;
-    emit changed();
+    emit rightChanged();
 }
 
 QDeclarativeItem *QDeclarativeKeyNavigationAttached::up() const
@@ -537,8 +540,10 @@
 void QDeclarativeKeyNavigationAttached::setUp(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->up == i)
+        return;
     d->up = i;
-    emit changed();
+    emit upChanged();
 }
 
 QDeclarativeItem *QDeclarativeKeyNavigationAttached::down() const
@@ -550,8 +555,10 @@
 void QDeclarativeKeyNavigationAttached::setDown(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->down == i)
+        return;
     d->down = i;
-    emit changed();
+    emit downChanged();
 }
 
 QDeclarativeItem *QDeclarativeKeyNavigationAttached::tab() const
@@ -563,8 +570,10 @@
 void QDeclarativeKeyNavigationAttached::setTab(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->tab == i)
+        return;
     d->tab = i;
-    emit changed();
+    emit tabChanged();
 }
 
 QDeclarativeItem *QDeclarativeKeyNavigationAttached::backtab() const
@@ -576,8 +585,10 @@
 void QDeclarativeKeyNavigationAttached::setBacktab(QDeclarativeItem *i)
 {
     Q_D(QDeclarativeKeyNavigationAttached);
+    if (d->backtab == i)
+        return;
     d->backtab = i;
-    emit changed();
+    emit backtabChanged();
 }
 
 /*!
@@ -713,6 +724,7 @@
 
 /*!
     \qmlclass Keys QDeclarativeKeysAttached
+    \ingroup qml-basic-interaction-elements
     \since 4.7
     \brief The Keys attached property provides key handling to Items.
 
@@ -1298,6 +1310,7 @@
 
 /*!
     \qmlclass Item QDeclarativeItem
+    \ingroup qml-basic-visual-elements
     \since 4.7
     \brief The Item is the most basic of all visual items in QML.
 
@@ -1420,11 +1433,6 @@
 */
 
 /*!
-    \fn void QDeclarativeItem::childrenChanged()
-    \internal
-*/
-
-/*!
     \fn void QDeclarativeItem::focusChanged(bool)
     \internal
 */
@@ -1714,7 +1722,6 @@
     specify it.
  */
 
-/*! \internal */
 QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::data()
 {
     return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::data_append);
@@ -1876,6 +1883,12 @@
         }
     }
 
+    for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
+        const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
+        if (change.types & QDeclarativeItemPrivate::Geometry)
+            change.listener->itemGeometryChanged(this, newGeometry, oldGeometry);
+    }
+
     if (newGeometry.x() != oldGeometry.x())
         emit xChanged();
     if (newGeometry.width() != oldGeometry.width())
@@ -1884,12 +1897,6 @@
         emit yChanged();
     if (newGeometry.height() != oldGeometry.height())
         emit heightChanged();
-
-    for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
-        const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
-        if (change.types & QDeclarativeItemPrivate::Geometry)
-            change.listener->itemGeometryChanged(this, newGeometry, oldGeometry);
-    }
 }
 
 void QDeclarativeItemPrivate::removeItemChangeListener(QDeclarativeItemChangeListener *listener, ChangeTypes types)
@@ -2399,21 +2406,9 @@
     Q_Q(QDeclarativeItem);
     if (!(flags & QGraphicsItem::ItemIsFocusScope) && parent)
         emit q->activeFocusChanged(flag);   //see also QDeclarativeItemPrivate::subFocusItemChange()
-
-    bool inScope = false;
-    QGraphicsItem *p = parent;
-    while (p) {
-        if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
-            inScope = true;
-            break;
-        }
-        p = p->parentItem();
-    }
-    if (!inScope)
-        emit q->focusChanged(flag);
+    emit q->focusChanged(flag);
 }
 
-/*! \internal */
 QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::resources()
 {
     return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::resources_append,
@@ -2438,7 +2433,6 @@
   \sa {qmlstate}{States}
 */
 
-/*! \internal */
 QDeclarativeListProperty<QDeclarativeState> QDeclarativeItemPrivate::states()
 {
     return _states()->statesProperty();
@@ -2458,11 +2452,10 @@
   }
   \endqml
 
-  \sa {state-transitions}{Transitions}
+  \sa {qdeclarativeanimation.html#transitions}{QML Transitions}
 */
 
 
-/*! \internal */
 QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transitions()
 {
     return _states()->transitionsProperty();
@@ -2482,7 +2475,7 @@
   Item {
     filter: [
       Blur { ... },
-      Relection { ... }
+      Reflection { ... }
       ...
     ]
   }
@@ -2504,7 +2497,9 @@
   This property holds whether clipping is enabled.
 
   if clipping is enabled, an item will clip its own painting, as well
-  as the painting of its children, to its bounding rectangle.
+  as the painting of its children, to its bounding rectangle. If you set
+  clipping during an item's paint operation, remember to re-set it to 
+  prevent clipping the rest of your scene.
 
   Non-rectangular clipping regions are not supported for performance reasons.
 */
@@ -2533,7 +2528,6 @@
   \sa {qmlstates}{States}
 */
 
-/*! \internal */
 QString QDeclarativeItemPrivate::state() const
 {
     if (!_stateGroup)
@@ -2542,7 +2536,6 @@
         return _stateGroup->state();
 }
 
-/*! \internal */
 void QDeclarativeItemPrivate::setState(const QString &state)
 {
     _states()->setState(state);
@@ -2728,12 +2721,12 @@
         }
         break;
     case ItemChildAddedChange:
-        if (d->_contents)
+        if (d->_contents && d->componentComplete)
             d->_contents->childAdded(qobject_cast<QDeclarativeItem*>(
                     value.value<QGraphicsItem*>()));
         break;
     case ItemChildRemovedChange:
-        if (d->_contents)
+        if (d->_contents && d->componentComplete)
             d->_contents->childRemoved(qobject_cast<QDeclarativeItem*>(
                     value.value<QGraphicsItem*>()));
         break;
@@ -2843,6 +2836,41 @@
 }
 
 /*!
+  \property QDeclarativeItem::anchors
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::left
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::right
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::horizontalCenter
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::top
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::bottom
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::verticalCenter
+  \internal
+*/
+
+/*!
   \property QDeclarativeItem::focus
   \internal
 */
@@ -2863,6 +2891,41 @@
 */
 
 /*!
+  \property QDeclarativeItem::baseline
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::data
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::resources
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::state
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::states
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::transformOriginPoint
+  \internal
+*/
+
+/*!
+  \property QDeclarativeItem::transitions
+  \internal
+*/
+
+/*!
     \internal
     Return the width of the item
 */
@@ -3130,8 +3193,7 @@
 {
     Q_D(const QDeclarativeItem);
     return focusItem() == this ||
-           (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0) ||
-           (!parentItem() && focusItem() != 0);
+           (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0);
 }
 
 /*!
@@ -3151,10 +3213,8 @@
   }
   \endqml
 
-  For the purposes of this property, the top level item in the scene
-  is assumed to act like a focus scope, and to always have active focus
-  when the scene has focus. On a practical level, that means the following
-  QML will give active focus to \c input on startup.
+  For the purposes of this property, the scene as a whole is assumed to act like a focus scope.
+  On a practical level, that means the following QML will give active focus to \c input on startup.
 
   \qml
   Rectangle {
@@ -3180,7 +3240,7 @@
         p = p->parentItem();
     }
 
-    return hasActiveFocus() ? true : (!QGraphicsItem::parentItem() ? true : false);
+    return hasActiveFocus();
 }
 
 /*! \internal */