mmsharing/mmshui/src/musuilevelindicator.cpp
branchRCL_3
changeset 23 bc78a40cd63c
--- /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 <musuiicons.mbg>
+#include <musui.rsg>
+
+// SYSTEM
+#include <aknslider.h>
+#include <barsread.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <data_caging_path_literals.hrh>
+#include <gulicon.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsDrawUtils.h>
+
+
+// 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
+
+
+