diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/src/aknsignaldataobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/src/aknsignaldataobserver.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,149 @@ +/* +* Copyright (c) 2006-2006 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: Updates the signal level control in status pane. +* +*/ + + +// INCLUDE FILES +#include "aknsignaldataobserver.h" +#include "aknstatuspanedata.h" +#include "AknSignal.h" +#include "AknSignalStrength.h" + +#include "aknstatuspanedatasubscriber.h" +#include +#include +#include +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAknSignalDataObserver::CAknSignalDataObserver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAknSignalDataObserver::CAknSignalDataObserver(CAknSignalPane* aSignalPane) + { + iSignalPane = aSignalPane; + iSignalPane->MopGetObject(iDataSubscriber); + if (iDataSubscriber) + { + iDataSubscriber->AddObserver(this); + } + } + + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CAknSignalDataObserver::~CAknSignalDataObserver() + { + if (iDataSubscriber) + { + iDataSubscriber->RemoveObserver(this); + } + } + +// ----------------------------------------------------------------------------- +// CAknSignalDataObserver::HandleUpdateL +// Updates UI control. +// ----------------------------------------------------------------------------- +// +void CAknSignalDataObserver::HandleUpdateL(const TAknStatusPaneStateData& aData) + { + if (!iDataSubscriber) + return; + + TAknSignalState state = aData.iSignalState; + + // If this pane is not in current layout, no update. Update happens + // when status pane layout is changed. + CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current(); + if (!statusPane || + !statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidSignal)).IsInCurrentLayout()) + { + return; + } + + // Animation is not shown in the background unless update level has been + // set above ERefreshLevelMedium. + TBool updateAnimation = + (!iDataSubscriber->IsBackground() || + iDataSubscriber->RefreshLevel() > CAknStatusPaneDataSubscriber::ERefreshLevelMedium); + + // Update only if changed to avoid unncessary redraws etc. + TBool strengthChanged = state.iSignalStrength != iSignalPane->SignalLevel(); + TBool iconChanged = state.iIconState != iSignalPane->SignalState(); + + // Set signal strenght (this handles also Offline status) + if (strengthChanged) + iSignalPane->SetSignalLevel(state.iSignalStrength); + + // Set signal icon + if (iconChanged) + { + if (state.iIconState >= EAknSignalGprsIndicatorOff && + state.iIconState < EAknSignalCommonPacketDataIndicatorOff) + { + // GPRS + iSignalPane->ShowGprsIcon(state.iIconState); + } + else if (state.iIconState >= EAknSignalCommonPacketDataIndicatorOff && + state.iIconState < EAknSignalWcdmaIndicatorOff) + { + // Common packet data + iSignalPane->ShowCommonPacketDataIcon(state.iIconState); + } + else if (state.iIconState >= EAknSignalWcdmaIndicatorOff && + state.iIconState < EAknSignalCdmaIndicatorOff) + { + // WCDMA + iSignalPane->ShowWcdmaIcon(state.iIconState); + } + else if (state.iIconState >= EAknSignalCdmaIndicatorOff && + state.iIconState < EAknSignalEdgeIndicatorOff) + { + // CDMA + iSignalPane->ShowCdmaIcon(state.iIconState); + } + else if (state.iIconState >= EAknSignalEdgeIndicatorOff && + state.iIconState <= EAknSignalEdgeIndicatorMultipdp) + { + // EDGE + iSignalPane->ShowEdgeIcon(state.iIconState); + } + else if (state.iIconState >= EAknSignalHsdpaIndicatorOff && + state.iIconState <= EAknSignalHsdpaIndicatorMultipdp) + { + // HSPDA + iSignalPane->ShowHsdpaIcon(state.iIconState); + } + } + + if (!updateAnimation) + { + iSignalPane->DisableAnimation(); + } + + if (iconChanged || strengthChanged) + iSignalPane->DrawDeferred(); +} + + +// End of File