src/hbwidgets/dataform/hbdataitemcontainer_p.cpp
changeset 2 06ff229162e9
parent 0 16d8024aca5e
child 28 b7da29130b0e
--- a/src/hbwidgets/dataform/hbdataitemcontainer_p.cpp	Mon May 03 12:48:33 2010 +0300
+++ b/src/hbwidgets/dataform/hbdataitemcontainer_p.cpp	Fri May 14 16:09:54 2010 +0300
@@ -24,12 +24,13 @@
 ****************************************************************************/
 
 #include "hbdataitemcontainer_p.h"
-#include <hbabstractitemcontainer_p.h>
+#include <hbabstractitemcontainer_p_p.h>
 #include <hbdataformviewitem.h>
 #include <hbdataformmodelitem.h>
 #include "hbdatagroup_p.h"
 #include <hbdataform.h>
 #include "hblistlayout_p.h"
+#include "hbmodeliterator.h"
 
 #include <QCoreApplication>
 #include <QGraphicsScene>
@@ -145,27 +146,6 @@
     mLayout->activate();
 }
 
-/*!
-    Assigns new model \a index to the given \a item. Item's current state is saved
-    and state for \a index is restored to item.
-*/
-void HbDataItemContainer::setItemModelIndex(HbAbstractViewItem *item, const QModelIndex &index)
-{
-    if (item && item->modelIndex() != index) {
-        HbAbstractItemContainer::setItemModelIndex(item, index);
-        int level = 0;
-        if (itemView()) {
-            QModelIndex parentIndex = item->modelIndex().parent();
-            QModelIndex rootIndex = itemView()->rootIndex();
-
-            while (parentIndex != rootIndex && parentIndex.isValid()) {
-                level++;
-                parentIndex = parentIndex.parent();
-            }
-        }
-    }
-}
-
 void HbDataItemContainer::setModelIndexes(const QModelIndex &startIndex )
 {
    Q_D(HbAbstractItemContainer);
@@ -184,7 +164,7 @@
     if (d->mItems.count() < targetCount) {
         // New items needs to be added.
         while (d->mItems.count() < targetCount) {       
-            index = d->mItemView->nextIndex(index);
+            index = d->mItemView->modelIterator()->nextIndex(index);
             if (!index.isValid()) {
                 break;
             }              
@@ -206,28 +186,51 @@
     }
 }
 
-/*!
-    Inserts item for \a index to \a pos.
-*/
-void HbDataItemContainer::insertItem(int pos, const QModelIndex &index, bool animate)
-{
-    Q_D(HbDataItemContainer);
-    HbAbstractViewItem *item = d->createItem(index);
-    HbDataFormModelItem::DataItemType itemType = 
-        static_cast<HbDataFormModelItem::DataItemType>(
-        index.data(HbDataFormModelItem::ItemTypeRole).toInt());
-    if (item) {
-        d->mItems.insert(pos, item);
-        itemAdded(pos, item, animate);
-        setItemModelIndex(item, index);
-        if (itemType == HbDataFormModelItem::GroupPageItem) {
-            item->setVisible(false);
-        } 
-    }
-}
-
 HbAbstractViewItem *HbDataItemContainer::createDefaultPrototype() const
 {
     return new HbDataFormViewItem();
 }
 
+/*!
+    \reimp
+
+    All other sizehints are taken from list layout except preferred sizehint. List container preferred sizeHint 
+    width is maximum width and height is average item height times index count.
+*/
+QSizeF HbDataItemContainer::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+    Q_D(const HbDataItemContainer);
+
+    if (which == Qt::PreferredSize) {
+        HbModelIterator *modelIterator = d->modelIterator();
+        if (modelIterator) {
+            qreal averageItemHeight = 0;
+            if (!d->mItems.isEmpty() && layout() ) {
+                averageItemHeight = layout()->effectiveSizeHint(Qt::PreferredSize).height() / d->mItems.count();
+            }
+
+            return QSizeF(layout()->effectiveSizeHint(Qt::PreferredSize).width(), 
+                averageItemHeight * modelIterator->indexCount());
+        }
+    }
+
+    return HbAbstractItemContainer::sizeHint(which, constraint);
+}
+
+/*!
+    \reimp
+
+    Resizes the container to use view width (if present; otherwise 0)
+    and layout preferred height.
+*/
+void HbDataItemContainer::resizeContainer()
+{
+    Q_D(HbDataItemContainer);
+       
+    if (d->mItemView) {
+        resize(d->mItemView->size().width(), layout()->preferredHeight());
+    } else {
+        resize(0, layout()->preferredHeight());
+    }
+}
+