ganeswidgets/tsrc/fute/HgWidgetTest/src/hgcoverflowwidget.cpp
changeset 1 e48454f237ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ganeswidgets/tsrc/fute/HgWidgetTest/src/hgcoverflowwidget.cpp	Mon May 03 13:32:54 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Another view for test application.
+*
+*/
+#include "hgcoverflowwidget.h"
+#include "trace.h"
+
+#include <qgraphicslinearlayout.h>
+#include <qgraphicssceneresizeevent>
+
+
+
+HgCoverflowWidget::HgCoverflowWidget(QGraphicsItem *parent) : HgMediawall(parent), 
+mTextPositionsDirty(false)
+{
+    mTitleLabel = new HbLabel("Title", this);
+    mTitleLabel->setAlignment(Qt::AlignCenter);
+    mDescLabel = new HbLabel("Description", this);
+    mDescLabel->setAlignment(Qt::AlignCenter);    
+}
+
+HgCoverflowWidget::~HgCoverflowWidget()
+{
+    
+}
+
+void HgCoverflowWidget::frontItemChanged ( const QModelIndex & current, const QModelIndex & previous )
+{
+    if (!this->model())
+        return;
+    
+    QVariant variant = this->model()->data(current, Qt::DisplayRole);
+    QStringList texts = variant.toStringList();
+    HbLabel* labels[2];
+    labels[0] = mTitleLabel;
+    labels[1] = mDescLabel;
+    int n = texts.size() > 2 ? 2 : texts.size();
+    for (int i = 0; i < n; i++)
+        labels[i]->setPlainText(texts[i]);
+    
+    mTextPositionsDirty = true;
+}
+
+void HgCoverflowWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+    HgMediawall::resizeEvent(event);
+    
+    mTextPositionsDirty = true;
+    
+    QObject::connect(selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), 
+        this, SLOT(frontItemChanged(const QModelIndex&, const QModelIndex&)));
+}
+
+void HgCoverflowWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    HgMediawall::paint(painter, option, widget);
+
+    if (mTextPositionsDirty)
+    {
+        QModelIndex index = this->currentIndex();
+
+        if (index.isValid())
+        {
+            QRectF bounds;
+
+            QPointF halfSize = QPointF(itemSize().width()/2, itemSize().height()/2);
+            bounds.setTopLeft(rect().center() + frontItemPositionDelta() - halfSize);              
+            bounds.setBottomRight(rect().center() + frontItemPositionDelta() + halfSize);
+
+            mTitleLabel->resize(QSizeF(size().width(), mTitleLabel->minimumSize().height()));
+            mTitleLabel->setPos(QPointF(bounds.center().x() - size().width()/2,
+                bounds.top() - 40));
+            mDescLabel->resize(QSizeF(size().width(), mDescLabel->minimumSize().height()));
+            mDescLabel->setPos(QPointF(bounds.center().x() - size().width()/2,
+                    bounds.bottom() + 40 - mDescLabel->minimumSize().height()));
+            
+            frontItemChanged(index, index);
+            
+            mTextPositionsDirty = false;        
+        }
+        
+    }
+    
+}
+
+void HgCoverflowWidget::updateTextPositions()
+{
+    mTextPositionsDirty = true;
+}
+
+
+