diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/mmshui/src/musuilevelindicator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshui/src/musuilevelindicator.cpp Wed Sep 01 12:31:01 2010 +0100 @@ -0,0 +1,490 @@ +/* +* Copyright (c) 2003, 2004 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: Class for displaying level indicator icons +* +*/ + + +// USER +#include "musuilevelindicator.h" +#include "musuilevelindicatorobserver.h" +#include "muslogger.h" +#include "musresourcefinderutil.h" +#include "musuiactivetimer.h" +#include +#include + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include + + +// CONSTANTS +const TInt KMusUiLevelDisableTime = 4000000; +const TInt KMusUiSliderEventDelay = 300000; + + +_LIT( KMyBitmapRomFile, "Z:\\resource\\apps\\musuiicons.mif" ); +//_LIT( KMyBitmapRamFile, "C:\\resource\\apps\\musuiicons.mif" ); + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiLevelIndicator::CMusUiLevelIndicator( + TInt aMinLevel, + TInt aMaxLevel, + MMusUiLevelIndicatorObserver* aObserver ) + : iMinLevel( aMinLevel ), + iMaxLevel( aMaxLevel ), + iObserver( aObserver ) + { + MUS_LOG( "mus: mus: [MUSUI ] -> CMusUiLevelIndicator::CMusUiLevelIndicator()" ); + // pass + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::CMusUiLevelIndicator()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiLevelIndicator* CMusUiLevelIndicator::NewL( + TAknOrientation aLayout, + TInt aMinLevel, + TInt aMaxLevel, + CCoeControl* aParent, + const TRect& aRect, + MMusUiLevelIndicatorObserver* aObserver ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::NewL()" ); + + CMusUiLevelIndicator* self = NewLC( aLayout, + aMinLevel, + aMaxLevel, + aParent, + aRect, + aObserver ); + CleanupStack::Pop( self ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::NewL()" ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiLevelIndicator* CMusUiLevelIndicator::NewLC( + TAknOrientation aLayout, + TInt aMinLevel, + TInt aMaxLevel, + CCoeControl* aParent, + const TRect& aRect, + MMusUiLevelIndicatorObserver* aObserver ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::NewLC()" ); + + CMusUiLevelIndicator* self = new ( ELeave ) CMusUiLevelIndicator( + aMinLevel, + aMaxLevel, + aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( aLayout, aParent, aRect ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::NewLC()" ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiLevelIndicator::~CMusUiLevelIndicator() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::~CMusUiLevelIndicator()" ); + + delete iSlider; + delete iSliderEventTimer; + delete iDisableLevelTimer; + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::~CMusUiLevelIndicator()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::ConstructL( TAknOrientation aLayout, + CCoeControl* aParent, + const TRect& aRect ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::ConstructL()" ); + + SetRect(aRect); + + if( iMinLevel > iMaxLevel ) + { + User::Leave( KErrArgument ); + } + + iDisableLevelTimer = CMusUiActiveTimer::NewL( this ); + iSliderEventTimer = CMusUiActiveTimer::NewL( this ); + + iSlider = new CAknSlider(); + + TResourceReader reader; + + if( aLayout == EAknOrientationHorizontal ) + { + iEikonEnv->CreateResourceReaderLC( reader, R_MUS_SLIDER_HORIZONTAL ); + MUS_LOG( "mus: [MUSUI ] -> ConstructFromResourceL" ); + iSlider->ConstructFromResourceL( aParent, 0, reader); + CleanupStack::PopAndDestroy(); // reader + iSlider->SetRange( iMinLevel, iMaxLevel ); + iSlider->SetRect( aRect ); + } + else + { + iEikonEnv->CreateResourceReaderLC( reader, R_MUS_SLIDER_VERTICAL ); + iSlider->ConstructFromResourceL( aParent, 0 ,reader); + CleanupStack::PopAndDestroy(); // reader + TRect rect = TRect( TPoint( (aRect.iBr.iX - iSlider->Size().iWidth),(aRect.iTl.iY) ),TSize( iSlider->Size() ) ); + iSlider->SetRect(rect); + + /* Draw the Min and Max Zoom */ + TParse parse; + parse.Set( KMyBitmapRomFile, &KDC_APP_RESOURCE_DIR, NULL ); + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + KAknsIIDQsnBgScreen, + bitmap, + mask, + parse.FullName(), + EMbmMusuiiconsQgn_indi_browser_tb_zoom_in, + EMbmMusuiiconsQgn_indi_browser_tb_zoom_in_mask); + iSlider->SetGraphics(CAknSlider::EElemEmptyLeftCap,bitmap,mask); + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + KAknsIIDQsnBgScreen, + bitmap, + mask, + parse.FullName(), + EMbmMusuiiconsQgn_indi_browser_tb_zoom_out, + EMbmMusuiiconsQgn_indi_browser_tb_zoom_out_mask); + iSlider->SetGraphics(CAknSlider::EElemEmptyRightCap,bitmap,mask); + } + + iSlider->HandleResourceChange( + KEikMessageCaptionedControlEditableStateChange ); + iSlider->SetObserver( this ); + iSlider->SetPositionIndicators( CAknSlider::EPosMarker ); + iSlider->SetTicksEnabled( EFalse ); + iSlider->EnableDrag(); + iSlider->SetStepSize( 1 ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::ConstructL()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::SetLevelL( TMusUiIndicatorType aType, + TInt aLevel, + TBool aUseTimer ) + { + MUS_LOG1( "mus: [MUSUI ] -> CMusUiLevelIndicator::SetLevelL( %d ) ", + aLevel ); + if ( aLevel >= iMinLevel && aLevel <= iMaxLevel ) + { + switch(aType) + { + case EMusUiIndicatorTypeZoom: + { + iZoomLevel=aLevel; + break; + } + case EMusUiIndicatorTypeBrightness: + { + iBrightnessLevel=aLevel; + break; + } + case EMusUiIndicatorTypeDuration: + { + iDurationLevel=aLevel; + break; + } + } + } + + // Set it to the slider + if ( !iSliderEventTimer->IsActive() ) + { + iSlider->SetValueL( aLevel ); + } + + DrawNow(); + + if ( aUseTimer ) + { + iDisableLevelTimer->After( KMusUiLevelDisableTime ); + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SetLevelL()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusUiLevelIndicator::GetLevel( TMusUiIndicatorType aType ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::GetLevel()" ); + + TInt ret=KErrNotFound; + + switch(aType) + { + case EMusUiIndicatorTypeZoom: + { + ret=iZoomLevel; + break; + } + case EMusUiIndicatorTypeBrightness: + { + ret=iBrightnessLevel; + break; + } + + case EMusUiIndicatorTypeDuration: + { + ret = iSlider->Value(); + break; + } + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::GetLevel()" ); + return ret; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::SetRange( TInt aMinLevel, + TInt aMaxLevel, + TBool aUseTimer) + { + MUS_LOG2( "mus: [MUSUI ] -> CMusUiLevelIndicator::SetRange( %d - %d ) ", + aMinLevel, aMaxLevel ); + + if( aMinLevel < aMaxLevel ) + { + iMinLevel = aMinLevel; + iMaxLevel = aMaxLevel; + iSlider->SetRange( iMinLevel, iMaxLevel ); + } + + if ( aUseTimer ) + { + iDisableLevelTimer->After( KMusUiLevelDisableTime ); + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SetRange()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::SetIndicatorType( TMusUiIndicatorType aType ) + { + iIndicatorType = aType; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusUiIndicatorType CMusUiLevelIndicator::GetIndicatorType() + { + return iIndicatorType; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::SizeChanged() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::SizeChanged()" ); + + if ( iSlider ) + { + iSlider->SetRect( Rect() ); + } + + DrawNow(); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SizeChanged()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void CMusUiLevelIndicator::Draw( const TRect& aRect ) const + { + CWindowGc& gc = SystemGc(); + gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.Clear( aRect ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusUiLevelIndicator::CountComponentControls() const + { + return 1; // return nbr of controls inside this container + } + + +// ----------------------------------------------------------------------------- +// Called by framework to retrieve the control specified by index. +// ----------------------------------------------------------------------------- +// +CCoeControl* CMusUiLevelIndicator::ComponentControl( TInt aIndex ) const + { + switch ( aIndex ) + { + case 0: + { + return iSlider; + } + default: + { + return NULL; + } + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::HandleResourceChange( TInt aType ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::HandleResourceChange()" ); + + if( aType==KEikDynamicLayoutVariantSwitch ) + { + if ( iSlider ) // Force a re-layout + { + iSlider->SetRect( Rect() ); + } + } + + DrawNow(); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::HandleResourceChange()" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::HandleControlEventL( CCoeControl* aControl, + TCoeEvent aEventType) + { + // No logging due to huge amount of events + + if ( aControl == iSlider && + aEventType == MCoeControlObserver::EEventStateChanged ) + { + // Restart the disable timer if running + if ( iDisableLevelTimer->IsActive() ) + { + iDisableLevelTimer->After( KMusUiLevelDisableTime ); + } + + if ( iObserver ) + { + iSliderEventTimer->After( KMusUiSliderEventDelay ); + } + } + + // No logging due to huge amount of events + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLevelIndicator::TimerComplete( CMusUiActiveTimer* aTimer ) + { + if ( aTimer == iSliderEventTimer ) + { + MUS_LOG( "mus: [MUSUI ] Slider event timer complete" ); + + if ( iObserver ) + { + iObserver->IndicatorLevelChanged( iSlider->Value() ); + } + } + else if ( aTimer == iDisableLevelTimer ) + { + MUS_LOG( "mus: [MUSUI ] Slider visibility timer complete" ); + + if ( iObserver ) + { + iObserver->SetLevelIndicatorVisibility( EFalse ); + } + } + else + { + // NOP + } + } + + + +// End of File + + +