--- /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();
+}
+
+
+*/