camerauis/cameraxui/cxui/src/cxuisettingbuttoncontainer.cpp
changeset 19 d9aefe59d544
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuisettingbuttoncontainer.cpp	Fri Apr 16 14:51:30 2010 +0300
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2009 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 <QGraphicsSceneMouseEvent>
+#include <QCoreApplication>
+
+#include <hbfeedbackmanager.h>
+#include "cxuisettingbutton.h"
+#include "cxuisettingbuttoncontainer.h"
+#include "cxutils.h"
+
+
+CxuiSettingButtonContainer::CxuiSettingButtonContainer(QGraphicsItem *parent)
+: HbWidget(parent), mListCreated(false), mPressedDownButton(NULL), mPreviouslyPressedDownButton(NULL)
+{
+
+}
+
+void CxuiSettingButtonContainer::handleButtonPress()
+{
+    CX_DEBUG_ENTER_FUNCTION();
+    grabMouse();
+
+    if (!mListCreated){
+        QList<QGraphicsItem*> buttons = this->childItems();
+        CxuiSettingButton *button;
+        foreach(QGraphicsItem *item, buttons){
+            button = static_cast<CxuiSettingButton*>(item);
+            mButtons.append(button);
+        }
+        mListCreated = true;
+    }
+
+
+    // find the pressed item
+    foreach (CxuiSettingButton* button , mButtons) {
+
+        if (button->isDown()) {
+            mPressedDownButton = button;
+            break;
+        }
+    }
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+void CxuiSettingButtonContainer::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+
+    if (boundingRect().contains(event->pos())) {
+        // moving inside the tool bar
+        if (!mPressedDownButton || !mPressedDownButton->geometry().contains(event->pos())) {
+            if (mPressedDownButton) {
+                // lift it up and try to find some other button
+                mPressedDownButton->setDown(false);
+                mPreviouslyPressedDownButton = mPressedDownButton;
+                mPressedDownButton = 0;
+            }
+
+            // Find the pressed button
+            foreach (CxuiSettingButton* button, mButtons) {
+                if (button->geometry().contains(event->pos())) {
+                    mPressedDownButton = button;
+                    button->setDown(true);
+                    button->setSetting();
+                    HbFeedbackManager* feedback = HbFeedbackManager::instance();
+                    CX_ASSERT_ALWAYS(feedback != NULL);
+                    feedback->triggered(button, Hb::InstantDraggedOver);
+
+                    break;
+                }
+            }
+        }
+    } else {
+        // moving outside the tool bar
+
+        // if a button is pressed down, lift it.
+        if (mPressedDownButton) {
+            mPressedDownButton->setDown(false);
+            mPressedDownButton = 0;
+            mPreviouslyPressedDownButton = mPressedDownButton;
+        }
+    }
+}
+
+void CxuiSettingButtonContainer::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event);
+    ungrabMouse();
+
+    if (mPressedDownButton
+        && !mPreviouslyPressedDownButton) {
+        // Convert event's scene position to item's coordinate system.
+        event->setPos(mPressedDownButton->mapFromScene(event->scenePos()));
+        QCoreApplication::sendEvent(mPressedDownButton, event);
+        mPressedDownButton = 0;
+        emit buttonReleased();
+    } else if (mPressedDownButton) {
+        mPressedDownButton->setDown(false);
+        emit buttonReleased();
+    } else
+    mPreviouslyPressedDownButton = 0;
+}
+
+