summaryrefslogtreecommitdiffstats
path: root/examples/animation/padnavigator-ng
diff options
context:
space:
mode:
Diffstat (limited to 'examples/animation/padnavigator-ng')
-rw-r--r--examples/animation/padnavigator-ng/backside.ui208
-rw-r--r--examples/animation/padnavigator-ng/images/artsfftscope.pngbin0 -> 1294 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/blue_angle_swirl.jpgbin0 -> 11826 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/kontact_contacts.pngbin0 -> 4382 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/kontact_journal.pngbin0 -> 3261 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/kontact_mail.pngbin0 -> 3202 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/kontact_notes.pngbin0 -> 3893 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/kopeteavailable.pngbin0 -> 2380 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/metacontact_online.pngbin0 -> 2545 bytes
-rw-r--r--examples/animation/padnavigator-ng/images/minitools.pngbin0 -> 2087 bytes
-rw-r--r--examples/animation/padnavigator-ng/main.cpp24
-rw-r--r--examples/animation/padnavigator-ng/padnavigator.pro24
-rw-r--r--examples/animation/padnavigator-ng/padnavigator.qrc14
-rw-r--r--examples/animation/padnavigator-ng/panel.cpp216
-rw-r--r--examples/animation/padnavigator-ng/panel.h59
-rw-r--r--examples/animation/padnavigator-ng/roundrectitem.cpp106
-rw-r--r--examples/animation/padnavigator-ng/roundrectitem.h47
-rw-r--r--examples/animation/padnavigator-ng/splashitem.cpp55
-rw-r--r--examples/animation/padnavigator-ng/splashitem.h31
19 files changed, 784 insertions, 0 deletions
diff --git a/examples/animation/padnavigator-ng/backside.ui b/examples/animation/padnavigator-ng/backside.ui
new file mode 100644
index 0000000..afa488c
--- /dev/null
+++ b/examples/animation/padnavigator-ng/backside.ui
@@ -0,0 +1,208 @@
+<ui version="4.0" >
+ <class>BackSide</class>
+ <widget class="QWidget" name="BackSide" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>378</width>
+ <height>385</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>BackSide</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2" >
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Settings</string>
+ </property>
+ <property name="flat" >
+ <bool>true</bool>
+ </property>
+ <property name="checkable" >
+ <bool>true</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Title:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QLineEdit" name="hostName" >
+ <property name="text" >
+ <string>Pad Navigator Example</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="label_2" >
+ <property name="text" >
+ <string>Modified:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="label_3" >
+ <property name="text" >
+ <string>Extent</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout" >
+ <item>
+ <widget class="QSlider" name="horizontalSlider" >
+ <property name="value" >
+ <number>42</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox" >
+ <property name="value" >
+ <number>42</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QDateTimeEdit" name="dateTimeEdit" />
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2" >
+ <property name="title" >
+ <string>Other input</string>
+ </property>
+ <property name="flat" >
+ <bool>true</bool>
+ </property>
+ <property name="checkable" >
+ <bool>true</bool>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2" >
+ <item>
+ <widget class="QTreeWidget" name="treeWidget" >
+ <column>
+ <property name="text" >
+ <string>Widgets On Graphics View</string>
+ </property>
+ </column>
+ <item>
+ <property name="text" >
+ <string>QGraphicsProxyWidget</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QGraphicsWidget</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QObject</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>QGraphicsItem</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLayoutItem</string>
+ </property>
+ </item>
+ </item>
+ </item>
+ <item>
+ <property name="text" >
+ <string>QGraphicsGridLayout</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLayout</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLayoutItem</string>
+ </property>
+ </item>
+ </item>
+ </item>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLinearLayout</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLayout</string>
+ </property>
+ <item>
+ <property name="text" >
+ <string>QGraphicsLayoutItem</string>
+ </property>
+ </item>
+ </item>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>groupBox</tabstop>
+ <tabstop>hostName</tabstop>
+ <tabstop>dateTimeEdit</tabstop>
+ <tabstop>horizontalSlider</tabstop>
+ <tabstop>spinBox</tabstop>
+ <tabstop>groupBox_2</tabstop>
+ <tabstop>treeWidget</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>horizontalSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>spinBox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>184</x>
+ <y>125</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>275</x>
+ <y>127</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>spinBox</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>horizontalSlider</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>272</x>
+ <y>114</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>190</x>
+ <y>126</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/examples/animation/padnavigator-ng/images/artsfftscope.png b/examples/animation/padnavigator-ng/images/artsfftscope.png
new file mode 100644
index 0000000..b4b8775
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/artsfftscope.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/blue_angle_swirl.jpg b/examples/animation/padnavigator-ng/images/blue_angle_swirl.jpg
new file mode 100644
index 0000000..5bf0deb
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/blue_angle_swirl.jpg
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/kontact_contacts.png b/examples/animation/padnavigator-ng/images/kontact_contacts.png
new file mode 100644
index 0000000..6fb4cc8
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/kontact_contacts.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/kontact_journal.png b/examples/animation/padnavigator-ng/images/kontact_journal.png
new file mode 100644
index 0000000..b1fedb6
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/kontact_journal.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/kontact_mail.png b/examples/animation/padnavigator-ng/images/kontact_mail.png
new file mode 100644
index 0000000..672f8fa
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/kontact_mail.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/kontact_notes.png b/examples/animation/padnavigator-ng/images/kontact_notes.png
new file mode 100644
index 0000000..229bf73
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/kontact_notes.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/kopeteavailable.png b/examples/animation/padnavigator-ng/images/kopeteavailable.png
new file mode 100644
index 0000000..2eaf41a
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/kopeteavailable.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/metacontact_online.png b/examples/animation/padnavigator-ng/images/metacontact_online.png
new file mode 100644
index 0000000..6a398dd
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/metacontact_online.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/images/minitools.png b/examples/animation/padnavigator-ng/images/minitools.png
new file mode 100644
index 0000000..0248c9d
--- /dev/null
+++ b/examples/animation/padnavigator-ng/images/minitools.png
Binary files differ
diff --git a/examples/animation/padnavigator-ng/main.cpp b/examples/animation/padnavigator-ng/main.cpp
new file mode 100644
index 0000000..5b35b62
--- /dev/null
+++ b/examples/animation/padnavigator-ng/main.cpp
@@ -0,0 +1,24 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "panel.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ Q_INIT_RESOURCE(padnavigator);
+
+ Panel panel(3, 3);
+ panel.show();
+
+ return app.exec();
+}
diff --git a/examples/animation/padnavigator-ng/padnavigator.pro b/examples/animation/padnavigator-ng/padnavigator.pro
new file mode 100644
index 0000000..0d094c6
--- /dev/null
+++ b/examples/animation/padnavigator-ng/padnavigator.pro
@@ -0,0 +1,24 @@
+HEADERS += \
+ panel.h \
+ roundrectitem.h \
+ splashitem.h
+
+SOURCES += \
+ panel.cpp \
+ roundrectitem.cpp \
+ splashitem.cpp \
+ main.cpp
+
+RESOURCES += \
+ padnavigator.qrc
+
+FORMS += \
+ backside.ui
+
+contains(QT_CONFIG, opengl):QT += opengl
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/padnavigator
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS padnavigator.pro images
+sources.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/padnavigator
+INSTALLS += target sources
diff --git a/examples/animation/padnavigator-ng/padnavigator.qrc b/examples/animation/padnavigator-ng/padnavigator.qrc
new file mode 100644
index 0000000..30ee8e1
--- /dev/null
+++ b/examples/animation/padnavigator-ng/padnavigator.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource>
+ <file>images/blue_angle_swirl.jpg</file>
+ <file>images/artsfftscope.png</file>
+ <file>images/kontact_contacts.png</file>
+ <file>images/kontact_journal.png</file>
+ <file>images/kontact_mail.png</file>
+ <file>images/kontact_notes.png</file>
+ <file>images/kopeteavailable.png</file>
+ <file>images/metacontact_online.png</file>
+ <file>images/minitools.png</file>
+ <file>images/blue_angle_swirl.jpg</file>
+ </qresource>
+</RCC>
diff --git a/examples/animation/padnavigator-ng/panel.cpp b/examples/animation/padnavigator-ng/panel.cpp
new file mode 100644
index 0000000..94dbdec
--- /dev/null
+++ b/examples/animation/padnavigator-ng/panel.cpp
@@ -0,0 +1,216 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include "panel.h"
+#include "roundrectitem.h"
+#include "splashitem.h"
+#include "ui_backside.h"
+
+#ifndef QT_NO_OPENGL
+#include <QtOpenGL/QtOpenGL>
+#else
+#endif
+#include <QtGui/QtGui>
+
+Panel::Panel(int width, int height)
+ : selectedIndex(0),
+ grid(width*height),
+ width(width),
+ height(height),
+ flipped(false),
+ flippingGroup(0),
+ rotationXanim(0),
+ rotationYanim(0)
+{
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setCacheMode(CacheBackground);
+ setViewportUpdateMode(FullViewportUpdate);
+ setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+ setBackgroundBrush(QPixmap(":/images/blue_angle_swirl.jpg"));
+#ifndef QT_NO_OPENGL
+ setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
+#endif
+
+ QRectF bounds((-width / 2.0) * 150, (-height / 2.0) * 150, width * 150, height * 150);
+
+ setScene(new QGraphicsScene(bounds, this));
+
+ baseItem = new RoundRectItem(bounds, QColor(226, 255, 92, 64));
+ scene()->addItem(baseItem);
+
+ QWidget *embed = new QWidget;
+ ui = new Ui_BackSide;
+ ui->setupUi(embed);
+ ui->hostName->setFocus();
+
+ backItem = new RoundRectItem(bounds, embed->palette().window(), embed);
+ backItem->setYRotation(180);
+ backItem->setParentItem(baseItem);
+
+ selectionItem = new RoundRectItem(QRectF(-60, -60, 120, 120), Qt::gray);
+ selectionItem->setParentItem(baseItem);
+ selectionItem->setZValue(-1);
+ selectionItem->setPos(posForLocation(0));
+
+ int currentIndex = 0;
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ RoundRectItem *item = new RoundRectItem(QRectF(-54, -54, 108, 108),
+ QColor(214, 240, 110, 128));
+ item->setPos(posForLocation(currentIndex));
+
+ item->setParentItem(baseItem);
+ item->setFlag(QGraphicsItem::ItemIsFocusable);
+ grid[currentIndex++] = item;
+
+ switch (qrand() % 9) {
+ case 0: item->setPixmap(QPixmap(":/images/kontact_contacts.png")); break;
+ case 1: item->setPixmap(QPixmap(":/images/kontact_journal.png")); break;
+ case 2: item->setPixmap(QPixmap(":/images/kontact_notes.png")); break;
+ case 3: item->setPixmap(QPixmap(":/images/kopeteavailable.png")); break;
+ case 4: item->setPixmap(QPixmap(":/images/metacontact_online.png")); break;
+ case 5: item->setPixmap(QPixmap(":/images/minitools.png")); break;
+ case 6: item->setPixmap(QPixmap(":/images/kontact_journal.png")); break;
+ case 7: item->setPixmap(QPixmap(":/images/kontact_contacts.png")); break;
+ case 8: item->setPixmap(QPixmap(":/images/kopeteavailable.png")); break;
+ default:
+ break;
+ }
+
+ connect(item, SIGNAL(activated()), this, SLOT(flip()));
+ }
+ }
+
+ grid.first()->setFocus();
+
+ connect(backItem, SIGNAL(activated()),
+ this, SLOT(flip()));
+
+ splash = new SplashItem;
+ splash->setZValue(5);
+ splash->setPos(-splash->rect().width() / 2, scene()->sceneRect().top());
+ scene()->addItem(splash);
+
+ splash->grabKeyboard();
+
+ //initialize the position
+ baseItem->setYRotation(selectionItem->x()/6.);
+ baseItem->setXRotation(selectionItem->y()/6.);
+
+ setWindowTitle(tr("Pad Navigator Example"));
+}
+
+Panel::~Panel()
+{
+}
+
+void Panel::keyPressEvent(QKeyEvent *event)
+{
+ if (splash->isVisible() || event->key() == Qt::Key_Return || flipped) {
+ QGraphicsView::keyPressEvent(event);
+ return;
+ }
+
+ selectedIndex = (selectedIndex + grid.count() + (event->key() == Qt::Key_Right) - (event->key() == Qt::Key_Left)
+ + width * ((event->key() == Qt::Key_Down) - (event->key() == Qt::Key_Up))) % grid.count();
+ grid[selectedIndex]->setFocus();
+
+ const QPointF pos = posForLocation(selectedIndex);
+
+ const double angleY = pos.x() / 6.,
+ angleX = pos.y() / 6.;
+
+ QAnimationGroup *group = new QParallelAnimationGroup();
+
+ QVariantAnimation *anim = new QPropertyAnimation(baseItem, "xRotation");
+ anim->setEndValue(angleX);
+ anim->setDuration(150);
+ anim->setEasingCurve(QEasingCurve::OutInSine);
+ group->addAnimation(anim);
+
+ anim = new QPropertyAnimation(baseItem, "yRotation");
+ anim->setEndValue(angleY);
+ anim->setDuration(150);
+ anim->setEasingCurve(QEasingCurve::OutInSine);
+ group->addAnimation(anim);
+
+ anim = new QPropertyAnimation(selectionItem, "pos");
+ anim->setEndValue(pos);
+ anim->setDuration(150);
+ anim->setEasingCurve(QEasingCurve::Linear);
+ group->addAnimation(anim);
+
+ group->start(QAbstractAnimation::DeleteWhenStopped);
+}
+
+void Panel::resizeEvent(QResizeEvent *event)
+{
+ QGraphicsView::resizeEvent(event);
+ fitInView(scene()->sceneRect(), Qt::KeepAspectRatio);
+}
+
+void Panel::flip()
+{
+ grid[selectedIndex]->setFocus();
+
+ if (flippingGroup == 0) {
+ flippingGroup = new QParallelAnimationGroup(this);
+
+ const qreal zoomOut = qreal(.75);
+
+ //slight scaling down while flipping
+ QVariantAnimation *anim = new QPropertyAnimation(baseItem, "yScale");
+ anim->setKeyValueAt(qreal(.5), zoomOut);
+ anim->setEndValue(1);
+ anim->setEasingCurve(QEasingCurve::OutInSine);
+ anim->setDuration(500);
+ flippingGroup->addAnimation(anim);
+
+ anim = new QPropertyAnimation(baseItem, "xScale");
+ anim->setKeyValueAt(qreal(.5), zoomOut);
+ anim->setEndValue(1);
+ anim->setEasingCurve(QEasingCurve::OutInSine);
+ anim->setDuration(500);
+ flippingGroup->addAnimation(anim);
+
+ rotationXanim = new QPropertyAnimation(baseItem, "xRotation");
+ rotationXanim->setEndValue(0);
+ rotationXanim->setDuration(500);
+ flippingGroup->addAnimation(rotationXanim);
+
+ rotationYanim = new QPropertyAnimation(baseItem, "yRotation");
+ rotationYanim->setEndValue(180);
+ rotationYanim->setDuration(500);
+ flippingGroup->addAnimation(rotationYanim);
+ }
+
+ if (flippingGroup->currentTime() != 0 && flippingGroup->direction() == QAbstractAnimation::Forward) {
+ flippingGroup->setDirection(QAbstractAnimation::Backward);
+ } else {
+ flippingGroup->setDirection(QAbstractAnimation::Forward);
+ if (flippingGroup->currentTime() == 0) {
+ //we always make sure when it is at the beginning
+ rotationXanim->setStartValue(baseItem->xRotation());
+ rotationYanim->setStartValue(baseItem->yRotation());
+ }
+ }
+ flippingGroup->start();
+ flipped = !flipped;
+}
+
+QPointF Panel::posForLocation(int index) const
+{
+ const int x = index % width,
+ y = index / width;
+ return QPointF(x * 150, y * 150)
+ - QPointF((width - 1) * 75, (height - 1) * 75);
+}
diff --git a/examples/animation/padnavigator-ng/panel.h b/examples/animation/padnavigator-ng/panel.h
new file mode 100644
index 0000000..cbceed1
--- /dev/null
+++ b/examples/animation/padnavigator-ng/panel.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qgraphicsview.h>
+#ifdef QT_EXPERIMENTAL_SOLUTION
+#include "qtgraphicswidget.h"
+#else
+#include <QtGui/qgraphicswidget.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+class Ui_BackSide;
+QT_END_NAMESPACE;
+
+class RoundRectItem;
+class QAnimationGroup;
+class QPropertyAnimation;
+
+class Panel : public QGraphicsView
+{
+ Q_OBJECT
+public:
+ Panel(int width, int height);
+ ~Panel();
+
+protected:
+ void keyPressEvent(QKeyEvent *event);
+ void resizeEvent(QResizeEvent *event);
+
+private Q_SLOTS:
+ void flip();
+
+private:
+ QPointF posForLocation(int index) const;
+
+ QGraphicsWidget *selectionItem;
+ QGraphicsWidget *baseItem;
+ RoundRectItem *backItem;
+ QGraphicsWidget *splash;
+ int selectedIndex;
+
+ QVector<QGraphicsItem*> grid;
+
+ int width;
+ int height;
+ bool flipped;
+ Ui_BackSide *ui;
+
+ QAnimationGroup *flippingGroup;
+ QPropertyAnimation *rotationXanim, *rotationYanim;
+};
diff --git a/examples/animation/padnavigator-ng/roundrectitem.cpp b/examples/animation/padnavigator-ng/roundrectitem.cpp
new file mode 100644
index 0000000..e498538
--- /dev/null
+++ b/examples/animation/padnavigator-ng/roundrectitem.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include "roundrectitem.h"
+
+#include <QtGui/QtGui>
+
+RoundRectItem::RoundRectItem(const QRectF &rect, const QBrush &brush, QWidget *embeddedWidget)
+ : QGraphicsWidget(),
+ brush(brush),
+ proxyWidget(0),
+ m_rect(rect)
+{
+ if (embeddedWidget) {
+ proxyWidget = new QGraphicsProxyWidget(this);
+ proxyWidget->setFocusPolicy(Qt::StrongFocus);
+ proxyWidget->setWidget(embeddedWidget);
+ }
+}
+
+void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+{
+ const bool widgetHidden = parentItem() == 0 || qAbs(static_cast<QGraphicsWidget*>(parentItem())->yRotation()) < 90;
+
+ if (proxyWidget) {
+ if (widgetHidden) {
+ proxyWidget->hide();
+ } else {
+ if (!proxyWidget->isVisible()) {
+ proxyWidget->setGeometry(boundingRect().adjusted(25, 25, -25, -25));
+ proxyWidget->show();
+ proxyWidget->setFocus();
+ }
+ painter->setBrush(brush);
+ painter->setPen(QPen(Qt::black, 1));
+ painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+ painter->drawRoundRect(m_rect);
+ }
+ } else if (widgetHidden) {
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(QColor(0, 0, 0, 64));
+ painter->drawRoundRect(m_rect.translated(2, 2));
+
+ QLinearGradient gradient(m_rect.topLeft(), m_rect.bottomRight());
+ const QColor col = brush.color();
+ gradient.setColorAt(0, col);
+ gradient.setColorAt(1, col.dark(200));
+ painter->setBrush(gradient);
+ painter->setPen(QPen(Qt::black, 1));
+ painter->drawRoundRect(m_rect);
+ if (!pix.isNull()) {
+ painter->scale(qreal(1.95), qreal(1.95));
+ painter->drawPixmap(-pix.width() / 2, -pix.height() / 2, pix);
+ }
+ }
+
+}
+
+QRectF RoundRectItem::boundingRect() const
+{
+ qreal penW = qreal(.5);
+ qreal shadowW = 2;
+ return m_rect.adjusted(-penW, -penW, penW + shadowW, penW + shadowW);
+}
+
+void RoundRectItem::setPixmap(const QPixmap &pixmap)
+{
+ pix = pixmap;
+ if (scene() && isVisible())
+ update();
+}
+
+void RoundRectItem::keyPressEvent(QKeyEvent *event)
+{
+ if (event->isAutoRepeat() || event->key() != Qt::Key_Return) {
+ QGraphicsWidget::keyPressEvent(event);
+ return;
+ }
+
+ if (!proxyWidget) {
+ setXScale(qreal(.9));
+ setYScale(qreal(.9));
+ }
+ emit activated();
+}
+
+void RoundRectItem::keyReleaseEvent(QKeyEvent *event)
+{
+ if (event->isAutoRepeat() || event->key() != Qt::Key_Return) {
+ QGraphicsWidget::keyReleaseEvent(event);
+ return;
+ }
+
+ if (!proxyWidget) {
+ setXScale(1);
+ setYScale(1);
+ }
+}
diff --git a/examples/animation/padnavigator-ng/roundrectitem.h b/examples/animation/padnavigator-ng/roundrectitem.h
new file mode 100644
index 0000000..56a6d3c
--- /dev/null
+++ b/examples/animation/padnavigator-ng/roundrectitem.h
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qobject.h>
+#include <QtGui/qbrush.h>
+#ifdef QT_EXPERIMENTAL_SOLUTION
+#include "qtgraphicswidget.h"
+#else
+#include <QtGui/qgraphicswidget.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+class QGraphicsProxyWidget;
+QT_END_NAMESPACE;
+
+class RoundRectItem : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ RoundRectItem(const QRectF &rect, const QBrush &brush, QWidget *embeddedWidget = 0);
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *);
+ QRectF boundingRect() const;
+
+ void setPixmap(const QPixmap &pixmap);
+
+Q_SIGNALS:
+ void activated();
+
+protected:
+ void keyPressEvent(QKeyEvent *event);
+ void keyReleaseEvent(QKeyEvent *event);
+
+private:
+ QRectF m_rect;
+ QBrush brush;
+ QPixmap pix;
+ QGraphicsProxyWidget *proxyWidget;
+};
diff --git a/examples/animation/padnavigator-ng/splashitem.cpp b/examples/animation/padnavigator-ng/splashitem.cpp
new file mode 100644
index 0000000..84a8945
--- /dev/null
+++ b/examples/animation/padnavigator-ng/splashitem.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include "splashitem.h"
+
+#include <QtGui/QtGui>
+
+SplashItem::SplashItem(QGraphicsItem *parent)
+ : QGraphicsWidget(parent)
+{
+
+ text = tr("Welcome to the Pad Navigator Example. You can use the"
+ " keyboard arrows to navigate the icons, and press enter"
+ " to activate an item. Please press any key to continue.");
+ resize(400, 175);
+}
+
+void SplashItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+{
+ painter->setPen(QPen(Qt::black, 2));
+ painter->setBrush(QColor(245, 245, 255, 220));
+ painter->setClipRect(rect());
+ painter->drawRoundRect(3, -100 + 3, 400 - 6, 250 - 6);
+
+ QRectF textRect = rect().adjusted(10, 10, -10, -10);
+ int flags = Qt::AlignTop | Qt::AlignLeft | Qt::TextWordWrap;
+
+ QFont font;
+ font.setPixelSize(18);
+ painter->setPen(Qt::black);
+ painter->setFont(font);
+ painter->drawText(textRect, flags, text);
+}
+
+void SplashItem::keyPressEvent(QKeyEvent * /* event */)
+{
+ QVariantAnimation *anim = new QPropertyAnimation(this, "pos");
+ anim->setEndValue(QPointF(x(), scene()->sceneRect().top() - rect().height()));
+ anim->setDuration(350);
+ anim->start(QAbstractAnimation::DeleteWhenStopped);
+
+ anim = new QPropertyAnimation(this, "opacity");
+ anim->setEndValue(0);
+ anim->start(QAbstractAnimation::DeleteWhenStopped);
+
+ connect(anim, SIGNAL(finished()), SLOT(close()));
+}
diff --git a/examples/animation/padnavigator-ng/splashitem.h b/examples/animation/padnavigator-ng/splashitem.h
new file mode 100644
index 0000000..6428b69
--- /dev/null
+++ b/examples/animation/padnavigator-ng/splashitem.h
@@ -0,0 +1,31 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qobject.h>
+#ifdef QT_EXPERIMENTAL_SOLUTION
+#include "qtgraphicswidget.h"
+#else
+#include <QtGui/qgraphicswidget.h>
+#endif
+
+class SplashItem : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ SplashItem(QGraphicsItem *parent = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+protected:
+ void keyPressEvent(QKeyEvent *event);
+
+private:
+ QString text;
+};