mmsharing/mmshui/src/musuizoomindicator.cpp
branchRCL_3
changeset 33 bc78a40cd63c
parent 0 f0cf47e981f9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshui/src/musuizoomindicator.cpp	Wed Sep 01 12:31:01 2010 +0100
@@ -0,0 +1,483 @@
+/*
+* 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 icons in viewfinder view
+*
+*/
+
+
+// USER
+#include "musuizoomindicator.h"
+#include "muslogger.h"
+#include "musuizoomindicatorobserver.h"
+
+// SYSTEM
+#include <aknutils.h>
+#include <aknsutils.h>
+#include <data_caging_path_literals.hrh>
+#include <camcorder.mbg>
+#include <gulicon.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsDrawUtils.h>
+
+
+
+// CONSTANTS
+const TInt KMusUiZoomDisableTime = 3000000;
+
+
+using namespace AknLayoutScalable_Apps;
+
+_LIT( KMyMbmFileName, "z:Camcorder.mbm");
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiZoomIndicator::CMusUiZoomIndicator(
+                        TInt aZoomMin,
+                        TInt aZoomMax,
+                        MMusUiZoomIndicatorObserver* aObserver )
+    : iZoomMin( aZoomMin ),
+      iZoomMax( aZoomMax ),
+      iZoomLevel( aZoomMin ),
+      iObserver( aObserver )
+    {
+    MUS_LOG( "mus: mus: [MUSUI ] -> CMusUiZoomIndicator::CMusUiZoomIndicator()" );
+    // pass
+    iDisableZoomTimer = NULL;
+    iTopMargin =  5;
+    iBottomMargin = 5;
+
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::CMusUiZoomIndicator()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiZoomIndicator* CMusUiZoomIndicator::NewLC(
+                        TInt aZoomMin,
+                        TInt aZoomMax,
+                        MMusUiZoomIndicatorObserver* aObserver )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::NewLC()" );
+    CMusUiZoomIndicator* self = new ( ELeave ) CMusUiZoomIndicator(
+                            aZoomMin,
+                            aZoomMax,
+                            aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::NewLC()" );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiZoomIndicator* CMusUiZoomIndicator::NewL(
+                        TInt aZoomMin,
+                        TInt aZoomMax,
+                        MMusUiZoomIndicatorObserver* aObserver )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::NewL()" );
+    CMusUiZoomIndicator* self = NewLC( aZoomMin,
+                                       aZoomMax,
+                                       aObserver );
+    CleanupStack::Pop( self );
+
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::NewL()" );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::ConstructL()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::ConstructL()" );
+
+    if( iZoomMin > iZoomMax )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    iIconElevator = new (ELeave) CEikImage();
+    iIconElevator->SetContainerWindowL( *this );
+
+    iIconMin = new (ELeave) CEikImage();
+    iIconMin->SetContainerWindowL( *this );
+
+    iIconMax = new (ELeave) CEikImage();
+    iIconMax->SetContainerWindowL( *this );
+
+    iIconBg = new (ELeave) CEikImage();
+    iIconBg->SetContainerWindowL( *this );
+
+    
+    ConstructImageL( iIconMin,
+                     AknsUtils::SkinInstance(),
+                     KAknsIIDQsnIconColors,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg_min,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg_min);
+
+    ConstructImageL( iIconMax,
+                     AknsUtils::SkinInstance(),
+                     KAknsIIDQsnIconColors,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg_max,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg_max);
+
+    ConstructImageL( iIconBg,
+                     AknsUtils::SkinInstance(),
+                     KAknsIIDQsnIconColors,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg,
+                     EMbmCamcorderQgn_indi_cams_zoom_bg);
+
+    ConstructImageL( iIconElevator,
+                     AknsUtils::SkinInstance(),
+                     KAknsIIDQsnIconColors,
+                     EMbmCamcorderQgn_indi_cams_zoom_elevator,
+                     EMbmCamcorderQgn_indi_cams_zoom_elevator);
+
+
+    UpdateZoomLayout();
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiZoomIndicator::ConstructL()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiZoomIndicator::~CMusUiZoomIndicator()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::~CMusUiZoomIndicator()" );
+
+    DisableTimer();
+    delete iDisableZoomTimer;
+
+    delete iIconElevator;
+    delete iIconMin;
+    delete iIconMax;
+    delete iIconBg;
+
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::~CMusUiZoomIndicator()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::SetZoomLevel( TInt aZoomLevel )
+    {
+    MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomLevel( %d ) ",
+              aZoomLevel );
+    if( aZoomLevel >= iZoomMin && aZoomLevel <= iZoomMax )
+        {
+        iZoomLevel = aZoomLevel;
+        }
+    DisableTimer();
+    UpdateZoomLayout();
+    EnableTimer();
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomLevel()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiZoomIndicator::GetZoomLevel()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::GetZoomLevel()" );
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::GetZoomLevel()" );
+    return iZoomLevel;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::SetZoomMin( TInt aZoomMin )
+    {
+    MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomMin( %d ) ", aZoomMin );
+    if( aZoomMin >= 0 && aZoomMin < iZoomMax )
+        {
+        iZoomMin = aZoomMin;
+        }
+    DisableTimer();
+    UpdateZoomLayout();
+    EnableTimer();
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomMin()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::SetZoomMax( TInt aZoomMax )
+    {
+    MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomMax( %d ) ", aZoomMax );
+    if( aZoomMax >= iZoomMin )
+        {
+        iZoomMax = aZoomMax;
+        }
+    DisableTimer();
+    UpdateZoomLayout();
+    EnableTimer();
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomMax()" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::SetFullRect( const TRect aRect  )
+    {
+    iFullRect = aRect;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::SizeChanged()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::SizeChanged()" );
+    UpdateZoomLayout();
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SizeChanged()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::Draw( const TRect& aRect ) const
+    {
+
+    CWindowGc& gc = SystemGc();
+
+    TRect rect( 0,0, iFullRect.Width(), iFullRect.Height() );
+    //TRect rect( iFullRect.Width()-20, iFullRect.iTl.iY, iFullRect.iBr.iX, iFullRect.iBr.iY ); //TRect( 40,0,380,382 ) );
+
+/*
+    AknsUtils::RegisterControlPosition( this, TPoint( iFullRect.Width()-20, iFullRect.iTl.iY ) );
+ //   gc.Clear( aRect );
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+    if(!AknsDrawUtils::Background( skin, cc,this,gc,rect,KAknsDrawParamDefault ))
+        {
+*/        
+        MUS_LOG( "mus: [MUSUI ]     Skin not valid or not found" );
+        gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) );
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.Clear( aRect );
+//        }    
+  
+}
+
+
+// -----------------------------------------------------------------------------
+// Draw all icons and texts to given graphics context.
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::DrawIcons( const TRect& /*aRect*/ )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DrawIcons()" );
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DrawIcons()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Draw all icons and texts to given graphics context.
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::UpdateZoomLayout()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::UpdateZoomLayout()" );
+    
+    TSize sz = iIconBg->MinimumSize();
+    
+    TRect rect = Rect();
+    
+    // TODO: Remove all magic constants!
+    AknLayoutUtils::LayoutImage(iIconMax, Rect(), 0, 0, 0, 0, 0, 20, 20 );
+    AknLayoutUtils::LayoutImage(iIconMin, Rect(), 0, 0, 68, 0, 0, 20, 20 );
+    AknLayoutUtils::LayoutImage(iIconBg, Rect(), 0, 0, 20, 0, 0, 20, 48 );
+    
+    // 20 - 68
+    iScaleStep = (  48 << 8 ) /
+                 ( ( iZoomMax - iZoomMin ) );
+    iScaleY = ( 58 ) -
+                            ( ( iScaleStep * iZoomLevel ) >> 8 );
+    
+    
+    AknLayoutUtils::LayoutImage(iIconElevator, Rect(), 0, 0, iScaleY, 0, 0, 20, 20 );
+    
+    DrawNow();
+    
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::UpdateZoomLayout()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiZoomIndicator::CountComponentControls() const
+    {
+    return 4; //iIconElevator ? 1 : 0; // return nbr of controls inside this container
+    //return 0; // return nbr of controls inside this container
+    }
+
+
+// --------------------------------------------------------------------------
+// Called by framework to retrieve the control specified by index.
+// --------------------------------------------------------------------------
+//
+CCoeControl* CMusUiZoomIndicator::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        
+        case 0:
+            return iIconMin;
+        case 1:
+            return iIconMax;
+        case 2:
+            return iIconBg;
+        case 3:
+            return iIconElevator;
+        
+        default:
+            return NULL;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void  CMusUiZoomIndicator::ConstructImageL( CEikImage* aImage,
+                                         MAknsSkinInstance* aSkin,
+                                         const TAknsItemID& aId,
+                                         TInt aBitmapId,
+                                         TInt aMaskId )
+
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::ConstructIconL()" );
+
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+
+    TParse parse;
+    parse.Set( KMyMbmFileName, &KDC_APP_RESOURCE_DIR, NULL );
+
+    AknsUtils::CreateIconL(aSkin,
+                           aId,
+                           bitmap,
+                           mask,
+                           parse.FullName(),
+                           aBitmapId,
+                           aMaskId);
+
+    aImage->SetPicture(bitmap, mask); // Owership transferred to CEikImage
+
+
+
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::ConstructIconL()" );
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// Callback for disable zoom indicator.
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiZoomIndicator::DisableZoomIndicator( TAny* aThis )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DisableZoomIndicator()" );
+    CMusUiZoomIndicator* indicator =
+                            static_cast< CMusUiZoomIndicator* > ( aThis );
+    indicator->DisableTimer();
+    if( indicator->iObserver )
+        {
+        indicator->iObserver->DisableZoomIndicator();
+        }
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DisableZoomIndicator()" );
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::DisableTimer()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DisableTimer()" );
+    if ( iDisableZoomTimer )
+        {
+        if ( iDisableZoomTimer->IsActive() )
+            {
+            iDisableZoomTimer->Cancel();
+            }
+        }
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DisableTimer()" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiZoomIndicator::EnableTimer()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::EnableTimer()" );
+
+    if ( !iDisableZoomTimer )
+        {
+        TRAP_IGNORE( iDisableZoomTimer = CPeriodic::NewL( CActive::EPriorityStandard ) );
+        }
+    else
+        {
+        DisableTimer();
+        }
+
+    // Start disable timer; callback triggers exit.
+    iDisableZoomTimer->Start( KMusUiZoomDisableTime,
+                             KMusUiZoomDisableTime,
+                             TCallBack( DisableZoomIndicator, this ) );
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::EnableTimer()" );
+    }
+    
+
+// End of File
+
+
+