diff -r feebad15db8c -r c826656d6714 camerauis/cameraxui/cxengine/src/cxegeotaggingtrail_desktop_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/src/cxegeotaggingtrail_desktop_p.cpp Fri Aug 06 10:03:37 2010 +0300 @@ -0,0 +1,160 @@ +/* +* Copyright (c) 2010 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 "cxutils.h" +#include "cxestate.h" +#include "cxesettings.h" +#include "cxenamespace.h" +#include "cxestillcapturecontrol.h" +#include "cxevideocapturecontrol.h" +#include "cxegeotaggingtrail_desktop_p.h" + + +namespace +{ + // in milliseconds + const int STOP_TRAIL_INTERVAL = 10*1000; +} + + +/*! +* Constructor +*/ +CxeGeoTaggingTrailPrivate::CxeGeoTaggingTrailPrivate(CxeStillCaptureControl &stillControl, + CxeVideoCaptureControl &videoControl, + CxeSettings &settings) + : CxeStateMachine("CxeGeoTaggingTrailPrivate"), + mSettings(settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + Q_UNUSED(stillControl); + Q_UNUSED(videoControl); + + qRegisterMetaType(); + initializeStates(); + + connect(&mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)), + this, SLOT(handleSettingValueChanged(const QString&,QVariant))); + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Destructor +*/ +CxeGeoTaggingTrailPrivate::~CxeGeoTaggingTrailPrivate() +{ + CX_DEBUG_ENTER_FUNCTION(); + + // stop trail and close location utility session + stop(true); + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Start location trail. +*/ +void CxeGeoTaggingTrailPrivate::start() +{ + CX_DEBUG_ENTER_FUNCTION(); + + setState(CxeGeoTaggingTrail::Connected); + setState(CxeGeoTaggingTrail::TrailStarted); + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Stop location trail. +* @ param closeSession, indicates if we are willing to close the location utility session. +*/ +void CxeGeoTaggingTrailPrivate::stop(bool closeSession) +{ + CX_DEBUG_ENTER_FUNCTION(); + + setState(CxeGeoTaggingTrail::NotConnected); + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Handle new setting value. +* Check if the geotagging setting has changed. +*/ +void CxeGeoTaggingTrailPrivate::handleSettingValueChanged(const QString& settingId, QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + + if (settingId == CxeSettingIds::GEOTAGGING) { + if (newValue.toInt() == Cxe::GeoTaggingOn) { + // setting is turned ON, start location trail + start(); + } else { + // setting is turned OFF, stopping location trail + stop(); + } + } else if (settingId == CxeSettingIds::GEOTAGGING_DISCLAIMER) { + if (newValue.toInt() == Cxe::GeoTaggingDisclaimerDisabled) { + // geotagging disclaimer is diabled, we can start location trail. + start(); + } + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +Returns current state of Location trail +*/ +CxeGeoTaggingTrail::State CxeGeoTaggingTrailPrivate::state() const +{ + return static_cast (stateId()); +} + +/*! +* slot called when state is changed. +*/ +void CxeGeoTaggingTrailPrivate::handleStateChanged(int newStateId, CxeError::Id error) +{ + emit stateChanged(static_cast (newStateId), error); + +} + +/*! +* Initialize states for geotaggingtrail +*/ +void CxeGeoTaggingTrailPrivate::initializeStates() +{ + // addState( id, name, allowed next states ) + addState(new CxeState(CxeGeoTaggingTrail::NotConnected, "NotConnected", CxeGeoTaggingTrail::Connected)); + + addState(new CxeState(CxeGeoTaggingTrail::Connected, "Connected", CxeGeoTaggingTrail::TrailStarted | + CxeGeoTaggingTrail::NotConnected)); + + addState(new CxeState(CxeGeoTaggingTrail::TrailStarted, "TrailStarted", CxeGeoTaggingTrail::DataAvailable | + CxeGeoTaggingTrail::Connected | + CxeGeoTaggingTrail::NotConnected)); + + addState(new CxeState(CxeGeoTaggingTrail::DataAvailable, "DataAvailable", CxeGeoTaggingTrail::Connected | + CxeGeoTaggingTrail::NotConnected)); + + + setInitialState(CxeGeoTaggingTrail::NotConnected); +} + +// end of file