camerauis/cameraxui/cxui/src/cxuisettingbutton.cpp
changeset 19 d9aefe59d544
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuisettingbutton.cpp	Fri Apr 16 14:51:30 2010 +0300
@@ -0,0 +1,243 @@
+/*
+* 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 <hbdeviceprofile.h> //HbDeviceProfile
+
+#include <hbeffect.h>
+#include <hbdialog.h>
+
+#include "cxuisettingbutton.h"
+#include "cxutils.h"
+#include "cxuidocumentloader.h"
+#include "cxeengine.h"
+#include "cxesettings.h"
+
+
+CxuiSettingButton::CxuiSettingButton(QGraphicsItem *parent, CxeEngine *engine)
+: HbPushButton(parent), mSettingId(), mSettingValue(0), mSettingPopupXml(), mEngine(engine)
+{
+    connect(this, SIGNAL(pressed()), this, SLOT(handleClicked()));
+
+}
+
+CxuiSettingButton::~CxuiSettingButton()
+{
+    CX_DEBUG_ENTER_FUNCTION();
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+void CxuiSettingButton::updateIcon(const QString& key, QVariant newValue)
+{
+    CX_DEBUG_ENTER_FUNCTION();
+    // we're only interested in the setting changes that match our id
+    if (key == mSettingId){
+        int value = newValue.toInt();
+        // so we wont overindex
+        if (value < mIcons.size()){
+            // for this to work the icons need to be in the correct order in the XML
+            QString newIcon = mIcons.at(value);
+
+            // to make sure that for some reason there isn't an empty string
+            if (!newIcon.isEmpty()){
+                CX_DEBUG(("setting icon to: %s",newIcon.toAscii().constData()));
+                setIcon(HbIcon(newIcon));
+                setBackground(HbIcon(newIcon));
+            }else{
+                CX_DEBUG(("empty string"));
+            }
+
+        }else{
+            CX_DEBUG((("index %d is out of bounds"), value));
+        }
+
+
+    }
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+QString CxuiSettingButton::settingId() const
+{
+    return mSettingId;
+}
+
+void CxuiSettingButton::setSettingId(const QString &id)
+{
+    mSettingId = id;
+}
+
+QString CxuiSettingButton::scenemodeId() const
+{
+    return mScenemode;
+}
+
+void CxuiSettingButton::setScenemodeId(const QString &scenemode)
+{
+    mScenemode = scenemode;
+}
+
+
+int CxuiSettingButton::settingValue() const
+{
+    return mSettingValue;
+}
+
+void CxuiSettingButton::setSettingValue(int value)
+{
+    mSettingValue = value;
+}
+
+void CxuiSettingButton::setIconList(const QString &iconList)
+{
+    CX_DEBUG_ENTER_FUNCTION();
+    mIconList = iconList;
+    CX_DEBUG(("%s", mIconList.toAscii().data()));
+    mIcons = mIconList.split("+");
+    CX_DEBUG((("%d"), mIcons.size()));
+
+    // we connect the signal to update the button
+    // this is done here so that only those buttons that have an iconlist are connected
+    // to the signal
+    QObject::connect(&(mEngine->settings()), SIGNAL(settingValueChanged(const QString&,QVariant)),
+                this, SLOT(updateIcon(const QString&, QVariant)));
+
+
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+QString CxuiSettingButton::iconList() const
+{
+    return mIconList;
+}
+
+QString CxuiSettingButton::settingPopupXml() const
+{
+    return mSettingPopupXml;
+}
+
+void CxuiSettingButton::setSettingPopupXml(const QString &popupXml)
+{
+    mSettingPopupXml = popupXml;
+}
+
+void CxuiSettingButton::handleClicked()
+{
+    CX_DEBUG_ENTER_FUNCTION();
+
+    if (!mSettingPopupXml.isEmpty()) {
+        // If a settings popup XML reference is given, launch popup
+
+        CX_DEBUG(("CxuiSettingButton::handleClicked() - launching popup %s", mSettingPopupXml.toAscii().constData()));
+
+        CxuiDocumentLoader* documentLoader = new CxuiDocumentLoader(mEngine);
+        bool ok = false;
+
+        // Use document loader to create popup
+        QObjectList objects = documentLoader->load(mSettingPopupXml, &ok);
+
+        CX_DEBUG(("load ok=%d", ok));
+
+        // Set parameters for all loaded popups (almost always only one match, though)
+        foreach(QObject* o, objects) {
+            HbDialog* popup = qobject_cast<HbDialog*>(o);
+            if (popup) {
+                popup->setTimeout(HbDialog::NoTimeout);
+                popup->setBackgroundFaded(false);
+                popup->setAttribute(Qt::WA_DeleteOnClose, true);
+
+                // set the popup place to be at the bottom of the screen
+                QRectF popupRect = popup->boundingRect();
+                QSizeF screenSize = HbDeviceProfile::profile(popup).logicalSize();
+                QRectF screenRect = QRectF(QPointF(0,0), screenSize);
+
+                popupRect.moveBottom(screenRect.bottom());
+                popup->setPos(popupRect.topLeft());
+
+                popup->show();
+
+            }
+        }
+
+        delete documentLoader;
+        documentLoader = NULL;
+        TInt trash;
+        TInt heapSize;
+        User::Heap().Compress();
+        heapSize = User::Available( trash  );
+        RDebug::Print( _L( "showHeapSize <=> heapSize: %d" ),heapSize);
+
+    } else {
+        // Set the setting value directly to the engine
+        CxeSettings *settings = NULL;
+        if (mEngine) {
+            settings = &mEngine->settings();
+        }
+
+        CX_DEBUG_ASSERT(settings);
+        CX_DEBUG_ASSERT(!mSettingId.isEmpty());
+
+        if (settings && !mSettingId.isEmpty()) {
+            CX_DEBUG(("CxuiSettingButton::handleClicked() - setting %s to %d", mSettingId.toAscii().constData(), mSettingValue));
+            settings->set(mSettingId, mSettingValue);
+        }
+    }
+    emit clickHandled();
+
+
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+void CxuiSettingButton::setSetting()
+{
+    CxeSettings *settings = NULL;
+        if (mEngine) {
+            settings = &mEngine->settings();
+        }
+
+        CX_DEBUG_ASSERT(settings);
+        CX_DEBUG_ASSERT(!mSettingId.isEmpty());
+
+        if (settings && !mSettingId.isEmpty()) {
+            CX_DEBUG(("CxuiSettingButton::handleClicked() - setting %s to %d", mSettingId.toAscii().constData(), mSettingValue));
+            settings->set(mSettingId, mSettingValue);
+        }
+
+}
+
+
+
+/*
+void CxuiSettingButton::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+    CX_DEBUG_ENTER_FUNCTION();
+    CX_DEBUG(("CxuiSettingButton::mouseMoveEvent() -  %s to %d", mSettingId.toAscii().constData(), mSettingValue));
+    QPointF pos = event->pos();
+    QPoint pos2 = pos.toPoint();
+    CX_DEBUG(("itemPos: %d %d", pos2.x(), pos2.y()));
+    if (!hitButton(pos)){
+        CX_DEBUG(("Left the button area"));
+        this->clearFocus();
+
+    }
+
+
+
+    CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+*/