--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Charms/ObjectCharm.cpp Fri Aug 06 17:23:08 2010 -0400
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program. If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*/
+
+#include "ObjectCharm.h"
+#include "Utilities.h"
+
+#include <QtGui>
+#include <QDebug>
+#include <QApplication>
+#include <QTimer>
+
+
+namespace GVA {
+
+// ----------------------------
+// ObjectCharm
+// ----------------------------
+
+ObjectCharm::ObjectCharm(QObject *object)
+ : m_object(object)
+{
+ m_object->installEventFilter(this);
+ connect(m_object, SIGNAL(destroyed()), this, SLOT(onObjectDestroyed()));
+}
+
+void ObjectCharm::onObjectDestroyed() {
+ deleteLater();
+}
+
+// ----------------------------
+// TouchCircleCharm
+// ----------------------------
+
+TouchCircleCharm::TouchCircleCharm(QObject *object, QGraphicsItem *parent)
+ : ObjectCharm(object),
+ m_timer(new QTimer())
+{
+ m_item = new QGraphicsEllipseItem(QRect(0,0,20,20), parent);
+ m_item->hide();
+ m_item->setPen(QPen(QColor(Qt::black)));
+ m_item->setBrush(QBrush(QColor(200, 0, 0)));
+ m_item->setOpacity(0.7);
+ m_item->setZValue(100); // make sure it isn't obscured
+
+ m_timer->setSingleShot(true);
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
+}
+
+TouchCircleCharm::~TouchCircleCharm() {
+ delete m_item;
+ delete m_timer;
+}
+
+bool TouchCircleCharm::eventFilter(QObject *object, QEvent *event) {
+ switch (event->type()) {
+ case QEvent::GraphicsSceneMousePress: {
+ // Show the item.
+ QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(event);
+ m_item->setPos(me->scenePos().x() - m_item->rect().width()/2,
+ me->scenePos().y() - m_item->rect().height()/2);
+
+ // Change the color to indicate click.
+ m_item->setBrush(QBrush(QColor(0, 200, 0)));
+
+ m_item->show();
+ m_timer->stop();
+ break;
+ }
+ case QEvent::GraphicsSceneMouseMove: {
+ if(m_item->isVisible()) {
+ // Move it to new position.
+ QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(event);
+ m_item->setPos(me->scenePos().x() - m_item->rect().width()/2,
+ me->scenePos().y() - m_item->rect().height()/2);
+
+ // Change the color to indicate drag.
+ m_item->setBrush(QBrush(QColor(255, 255, 0)));
+ }
+ break;
+ }
+ case QEvent::GraphicsSceneMouseDoubleClick: {
+ if(m_item->isVisible()) {
+ // Change the color to indicate double click.
+ m_item->setBrush(QBrush(QColor(0, 0, 200)));
+
+ m_timer->stop();
+ }
+ break;
+ }
+ case QEvent::GraphicsSceneMouseRelease: {
+ if(m_item->isVisible()) {
+ // Change the color to indicate release.
+ m_item->setBrush(QBrush(QColor(200, 0, 0)));
+
+ // Start timer to hide it.
+ m_timer->start(2000);
+ }
+ break;
+ }
+// case QEvent::GraphicsSceneContextMenu: {
+// if(m_item->isVisible()) {
+// // Change the color to indicate context event.
+// m_item->setBrush(QBrush(QColor(0, 200, 200)));
+// }
+// break;
+// }
+ default:
+ break;
+ }
+ return object->eventFilter(object, event);
+}
+
+void TouchCircleCharm::onTimer() { // slot
+ m_item->hide();
+}
+
+} // namespace GVA