diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraxui/cxui/src/cxuisettingbutton.cpp --- /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 +#include //HbDeviceProfile + +#include +#include + +#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(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(); +} + + +*/