--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/examples/pannablewidgetplugin/src/pannablewidget.cpp Thu May 27 12:46:08 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* 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: Example of home screen widget
+*
+*/
+#include <qtDebug>
+
+#include <QGraphicsLinearLayout>
+#include <HbPushButton>
+#include <HbSlider>
+#include <QGraphicsSceneMouseEvent>
+#include <QGraphicsRectItem>
+#include "pannablewidget.h"
+
+
+
+/*!
+ \ingroup group_pannablewidget
+ \class PannableWidget
+ \brief Example implementation for pannable home screen widget.
+
+ Pannable widget demostrates usage of horizontal pan gesture instead of Home Screen using it for
+ page change.
+
+ To enable horizontal pan gesture widget need to implement isPannable() function. Widget should return true if pannable item's
+ pan region contains event position.
+*/
+
+
+const int ItemName = 0xfffe;
+
+/*!
+ Constructs a widget which is a child of \a parent, with widget flags set to \a flags.
+*/
+PannableWidget::PannableWidget(QGraphicsItem* parent, Qt::WindowFlags flags)
+ : HbWidget(parent, flags)
+{
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+ layout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ setLayout(layout);
+
+ HbPushButton *button = new HbPushButton("Jenson Button");
+ button->setPreferredSize(QSizeF(200.0,20.0));
+ layout->addItem(button);
+
+ HbSlider *slider = new HbSlider(Qt::Horizontal);
+ slider->setData(ItemName,QLatin1String("slider"));
+ slider->setRange(0,10);
+ slider->setValue(5);
+ layout->addItem(slider);
+
+
+ QGraphicsRectItem *background = new QGraphicsRectItem();
+ background->setBrush(QBrush(QColor(0x9acd32)));
+ setBackgroundItem(background);
+
+ resize(200.0, 100.0);
+ background->setRect(rect());
+
+}
+
+/*!
+ Destructor
+*/
+PannableWidget::~PannableWidget()
+{
+}
+/*!
+ Called by Home Screen when pan event is recognized. Given \a event
+ can be used to check whether pannable item contains event position.
+*/
+bool PannableWidget::isPannable(QGraphicsSceneMouseEvent *event)
+{
+ bool ret(false);
+ // Take position in scene coordinates
+ QPointF position = event->buttonDownScenePos(Qt::LeftButton);
+ // find pannable item
+ QGraphicsItem* item = findChildItemByName(this,"slider");
+ // check whether it is event is inside it
+ if (item && item->sceneBoundingRect().contains(position)) {
+ ret = true;
+ }
+ return ret;
+}
+/*!
+ Find \a item childs by given \a name. Uses recursion.
+*/
+QGraphicsItem *PannableWidget::findChildItemByName(QGraphicsItem *item, const QString &name)
+{
+ if (!item) return NULL;
+
+ QList<QGraphicsItem *> children = item->childItems();
+ foreach (QGraphicsItem *child, children) {
+ if(name == child->data(ItemName).toString()) {
+ return child;
+ }
+ }
+ // do recursive search
+ foreach (QGraphicsItem *child, children) {
+ QGraphicsItem* itemFromChild = findChildItemByName(child,name);
+ if (itemFromChild) {
+ return itemFromChild;
+ }
+ }
+ return NULL;
+}
+
+
+/*!
+ Called when widget is shown in the home screen
+*/
+void PannableWidget::onShow()
+{
+}
+
+/*!
+ Called when widget is hidden from the home screen
+*/
+void PannableWidget::onHide()
+{
+}