diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/src/AknSignalIcon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/src/AknSignalIcon.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,683 @@ +/* +* Copyright (c) 2004-2007 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: Signal pane icon control. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include + +#include +#include "AknSignalIcon.h" +#include "aknconsts.h" +#include "AknUtils.h" +#include "AknStatuspaneUtils.h" +#include "aknappui.h" + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::~CAknSignalIcon +// Destructor +// --------------------------------------------------------------------------- +// +CAknSignalIcon::~CAknSignalIcon() + { + AKNTASHOOK_REMOVE(); + AknsUtils::DeregisterControlPosition( this ); + delete iSignalIcon; + delete iSignalIconMask; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CAknSignalIcon* CAknSignalIcon::NewL() + { + CAknSignalIcon* self = CAknSignalIcon::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::NewLC +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CAknSignalIcon* CAknSignalIcon::NewLC() + { + CAknSignalIcon* self = new (ELeave) CAknSignalIcon; + CleanupStack::PushL( self ); + self->ConstructL(); + AKNTASHOOK_ADDL( self, "CAknSignalIcon" ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetSignalIcon +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetSignalIcon( CFbsBitmap* aIcon ) + { + iSignalIcon = aIcon; + AknIconUtils::SetSize( iSignalIcon, Size() ); + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetSignalIconMask +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetSignalIconMask( CFbsBitmap* aMask ) + { + iSignalIconMask = aMask; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetDrawBlank +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetDrawBlank( TBool aDrawBlank ) + { + iDrawBlank = aDrawBlank; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::DrawBlank +// --------------------------------------------------------------------------- +// +TBool CAknSignalIcon::DrawBlank() + { + return iDrawBlank; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetOffLine +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetOffLine( TBool aOffLine ) + { + TBool changedToOnline( !aOffLine && iOffLine ); + + iOffLine = aOffLine; + + if ( changedToOnline ) + { + // In offline mode the icon contains offline icon, + // so a correct connection state icon must be re-loaded here. + TRAP_IGNORE( LoadIconL( iIconState, iColorIndex, ETrue ) ); + } + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::OffLine +// --------------------------------------------------------------------------- +// +TBool CAknSignalIcon::OffLine() + { + return iOffLine; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetColorIndex +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetColorIndex( TInt aColorIndex ) + { + iColorIndex = aColorIndex; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::ColorIndex +// --------------------------------------------------------------------------- +// +TInt CAknSignalIcon::ColorIndex() + { + return iColorIndex; + } + +// --------------------------------------------------------------------------- +// CAknSignalIcon::LoadIconL +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::LoadIconL( TInt aIconState, + TInt aIconColorIndex, + TBool aForceLoad ) + { + if ( iIconState == aIconState && + aIconColorIndex == iColorIndex && + !aForceLoad ) + { + // Icon already loaded. + return; + } + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + if ( iOffLine ) + { + // Offline mode is not an actual signal state in the signal icon + // control, but it needs to be represented by an offline signal + // icon in the universal indicator popup. + AknsUtils::CreateColorIconL( skin, + KAknsIIDNone, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_offline, + EMbmAvkonQgn_indi_signal_offline_mask, + KRgbGray ); + } + else + { + switch( aIconState ) + { + // Old legacy GPRS icons. + case EAknSignalGprsIndicatorOff: + case EAknSignalGprsIndicatorAvailable: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + break; + case EAknSignalGprsIndicatorAttached: + case EAknSignalGprsIndicatorEstablishingContext: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalGprsContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_gprs_context, + EMbmAvkonQgn_indi_signal_gprs_context_mask, + KRgbGray ); + break; + case EAknSignalGprsIndicatorContext: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalGprsContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_gprs_context, + EMbmAvkonQgn_indi_signal_gprs_context_mask, + KRgbGray ); + break; + case EAknSignalGprsIndicatorSuspended: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalGprsSuspended, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_gprs_suspended, + EMbmAvkonQgn_indi_signal_gprs_suspended_mask, + KRgbGray ); + break; + case EAknSignalGprsIndicatorMultipdp: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalGprsMultipdp, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_gprs_multipdp, + EMbmAvkonQgn_indi_signal_gprs_multipdp_mask, + KRgbGray ); + break; + + // Create common packet data indicator bitmaps. + case EAknSignalCommonPacketDataIndicatorOff: + case EAknSignalCommonPacketDataIndicatorAvailable: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + break; + case EAknSignalCommonPacketDataIndicatorAttached: + case EAknSignalCommonPacketDataIndicatorEstablishingContext: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalPdAttach, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_pd_attach, + EMbmAvkonQgn_indi_signal_pd_attach_mask, + KRgbGray ); + break; + case EAknSignalCommonPacketDataIndicatorContext: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalPdContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_pd_context, + EMbmAvkonQgn_indi_signal_pd_context_mask, + KRgbGray ); + break; + case EAknSignalCommonPacketDataIndicatorSuspended: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalPdSuspended, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_pd_suspended, + EMbmAvkonQgn_indi_signal_pd_suspended_mask, + KRgbGray ); + break; + case EAknSignalCommonPacketDataIndicatorMultipdp: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalPdMultipdp, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_pd_multipdp, + EMbmAvkonQgn_indi_signal_pd_multipdp_mask, + KRgbGray ); + break; + + // Create EDGE packet data indicator bitmaps. + case EAknSignalEdgeIndicatorOff: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + break; + case EAknSignalEdgeIndicatorAvailable: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_egprs_icon, + EMbmAvkonQgn_indi_signal_egprs_icon_mask, + KRgbGray ); + break; + case EAknSignalEdgeIndicatorAttached: + case EAknSignalEdgeIndicatorEstablishingContext: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalEgprsAttach, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_egprs_attach, + EMbmAvkonQgn_indi_signal_egprs_attach_mask, + KRgbGray ); + break; + case EAknSignalEdgeIndicatorContext: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalEgprsContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_egprs_context, + EMbmAvkonQgn_indi_signal_egprs_context_mask, + KRgbGray ); + break; + case EAknSignalEdgeIndicatorSuspended: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalEgprsSuspended, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_egprs_suspended, + EMbmAvkonQgn_indi_signal_egprs_suspended_mask, + KRgbGray ); + break; + case EAknSignalEdgeIndicatorMultipdp: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalEgprsMultipdp, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_egprs_multipdp, + EMbmAvkonQgn_indi_signal_egprs_multipdp_mask, + KRgbGray ); + break; + + // Create WCDMA indicator bitmaps. + case EAknSignalWcdmaIndicatorOff: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + break; + case EAknSignalWcdmaIndicatorAvailable: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalWcdmaIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_wcdma_icon, + EMbmAvkonQgn_indi_signal_wcdma_icon_mask, + KRgbGray ); + break; + case EAknSignalWcdmaIndicatorAttached: + case EAknSignalWcdmaIndicatorEstablishingContext: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalWcdmaAttach, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_wcdma_attach, + EMbmAvkonQgn_indi_signal_wcdma_attach_mask, + KRgbGray ); + break; + case EAknSignalWcdmaIndicatorContext: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalWcdmaContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_wcdma_context, + EMbmAvkonQgn_indi_signal_wcdma_context_mask, + KRgbGray ); + break; + case EAknSignalWcdmaIndicatorMultipdp: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalWcdmaMultipdp, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_wcdma_multipdp, + EMbmAvkonQgn_indi_signal_wcdma_multipdp_mask, + KRgbGray ); + break; + case EAknSignalWcdmaIndicatorSuspended: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalWcdmaSuspended, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_wcdma_suspended, + EMbmAvkonQgn_indi_signal_wcdma_suspended_mask, + KRgbGray ); + break; + + // Create HSDPA indicator bitmaps. + case EAknSignalHsdpaIndicatorOff: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + break; + case EAknSignalHsdpaIndicatorAvailable: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalHsdpaIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_hsdpa_icon, + EMbmAvkonQgn_indi_signal_hsdpa_icon_mask, + KRgbGray ); + break; + case EAknSignalHsdpaIndicatorAttached: + case EAknSignalHsdpaIndicatorEstablishingContext: // fallthrough + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalHsdpaAttach, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_hsdpa_attach, + EMbmAvkonQgn_indi_signal_hsdpa_attach_mask, + KRgbGray ); + break; + case EAknSignalHsdpaIndicatorContext: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalHsdpaContext, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_hsdpa_context, + EMbmAvkonQgn_indi_signal_hsdpa_context_mask, + KRgbGray ); + break; + case EAknSignalHsdpaIndicatorSuspended: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalHsdpaSuspended, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_hsdpa_suspended, + EMbmAvkonQgn_indi_signal_hsdpa_suspended_mask, + KRgbGray ); + break; + case EAknSignalHsdpaIndicatorMultipdp: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnIndiSignalHsdpaMultipdp, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_signal_hsdpa_multipdp, + EMbmAvkonQgn_indi_signal_hsdpa_multipdp_mask, + KRgbGray ); + break; + + // Default in all situations + default: + AknsUtils::CreateColorIconL( skin, + KAknsIIDQgnPropSignalIcon, + KAknsIIDQsnIconColors, + aIconColorIndex, + bitmap, + mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_signal_icon, + EMbmAvkonQgn_prop_signal_icon_mask, + KRgbGray ); + } + } + + if ( bitmap ) + { + delete iSignalIcon; + iSignalIcon = bitmap; + AknIconUtils::SetSize( iSignalIcon, Size() ); + } + + if ( mask ) + { + delete iSignalIconMask; + iSignalIconMask = mask; + } + + iIconState = aIconState; + iColorIndex = aIconColorIndex; + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::SetOffLineIconDraw +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SetOffLineIconDraw( TBool aOn ) + { + iShowOffLineIcon = aOn; + } + + +// --------------------------------------------------------------------------- +// From class CCoeControl. +// CAknSignalIcon::SizeChanged +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + + if ( iSignalIcon ) + { + AknIconUtils::SetSize( iSignalIcon, Size() ); + } + } + + +// --------------------------------------------------------------------------- +// From class CCoeControl. +// CAknSignalIcon::PositionChanged +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + + +// --------------------------------------------------------------------------- +// From class CCoeControl. +// CAknSignalIcon::HandleResourceChange +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + } + + +// --------------------------------------------------------------------------- +// From class CCoeControl. +// CAknSignalIcon::Draw +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::Draw( const TRect& /*aRect*/ ) const + { + CWindowGc& gc = SystemGc(); + TRect rect( Rect() ); + + if ( !iDrawBlank && ( !iOffLine || iShowOffLineIcon ) ) + { + if ( iSignalIcon && iSignalIconMask ) + { + gc.BitBltMasked( + rect.iTl, + iSignalIcon, + TRect( rect.Size() ), + iSignalIconMask, + ETrue ); + } + } + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::CAknSignalIcon +// Default constructor. +// --------------------------------------------------------------------------- +// +CAknSignalIcon::CAknSignalIcon() + { + } + + +// --------------------------------------------------------------------------- +// CAknSignalIcon::ConstructL +// Second-phase constructor. +// --------------------------------------------------------------------------- +// +void CAknSignalIcon::ConstructL() + { + } + +// End of File