--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/SlidingWidget.cpp Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* 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:
+*
+*/
+
+
+#include "SlidingWidget.h"
+#include "ChromeSnippet.h"
+
+#include <QDebug>
+
+//NB: Note that the current implementation only supports one snippet child
+
+namespace GVA {
+
+ SlidingWidget::SlidingWidget(QGraphicsItem* parent)
+ : QGraphicsWidget(parent),
+ m_top(0),
+ m_window(0),
+ m_bottom(0),
+ m_slideMax(0),
+ m_slidePos(0)
+ {
+ //Clip child item so that it can "slide" out of view
+ setFlags(QGraphicsItem::ItemClipsChildrenToShape);
+ //setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
+ m_layout = new QGraphicsAnchorLayout();
+ m_layout->setContentsMargins(0,0,0,0);
+ m_layout->setSpacing(0);
+ setLayout(m_layout);
+ }
+
+ SlidingWidget:: ~SlidingWidget()
+ {
+ }
+
+ void SlidingWidget::resizeEvent(QGraphicsSceneResizeEvent *ev)
+ {
+ qDebug() << "SlidingWidget::resizeEvent: " << ev->newSize();
+ if(m_window)
+ m_window->resize(ev->newSize());
+ //m_window->resize(ev->newSize().width(), m_window->size().height());
+ QGraphicsWidget::resizeEvent(ev);
+ }
+
+ qreal SlidingWidget::slide(qreal delta)
+ {
+
+ qreal newPos = m_slidePos + delta;
+
+ //qDebug() << "SlidingWidget::slide: delta: " << delta << " m_slidePos: " << m_slidePos << " newPos: " << newPos;
+
+ if(newPos < 0) {
+ if(m_slidePos == 0)
+ return 0;
+ delta = -m_slidePos;
+ m_slidePos = 0;
+ }
+
+ else if(newPos > m_slideMax){
+ if(m_slidePos == m_slideMax)
+ return 0;
+ delta = m_slideMax - m_slidePos;
+ m_slidePos = m_slideMax;
+ }
+
+ else m_slidePos = newPos;
+
+ //qDebug() << "calculated delta: " << delta << " new m_slidePos: " << m_slidePos;
+
+ QTransform transform;
+ transform.translate(0,delta);
+ //m_window->setTransform(transform, true);
+ //m_top->setTransform(transform, true);
+ m_top->setPos(0, m_top->pos().y() + delta);
+ m_window->setPos(0, m_window->pos().y() + delta);
+ return delta;
+ }
+
+ void SlidingWidget::setWindow(QGraphicsWidget * window)
+ {
+ if(m_window)
+ m_window->setParentItem(0);
+ m_window = window;
+ m_window->setParentItem(this);
+ m_window->resize(size());
+ if(m_top) {
+ slide(0);
+ QGraphicsWidget* item=m_top;
+ attachItem(item);
+ }
+ else
+ m_window->setPos(0,0);
+ //m_layout->addAnchors(m_window, m_layout, Qt::Horizontal);
+ }
+
+ void SlidingWidget::attachItem(QGraphicsWidget * item)
+ {
+ if(m_top)
+ detachItem(m_top);
+ m_top = item;
+ m_top->setParentItem(this);
+ m_top->setPos(0,0);
+ m_slideMax = m_top->size().height();
+ m_slidePos = m_slideMax;
+ if(m_window)
+ m_window->setPos(0, m_top->size().height());
+ }
+
+
+ void SlidingWidget::detachItem(QGraphicsWidget * item)
+ {
+ if(m_top != item)
+ return;
+ m_top->setParentItem(0);
+ m_top = 0;
+ if(m_window)
+ m_window->setPos(0,0);
+ }
+
+
+} // end of namespace GVA
+
+