camerauis/cameraapp/generic/src/cambatterypanedrawer.cpp
changeset 0 1ddebce53859
child 22 f54ad444594d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/cambatterypanedrawer.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2007-2008 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:  Implemantation for CCamBatteryPaneDrawer class.
+*
+*  Copyright © 2007-2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+
+*
+*
+*/
+
+
+#include "cambatterypanedrawer.h"
+
+#include <AknIconUtils.h>
+#include <AknUtils.h> 
+#include <cameraapp.mbg>
+#include <aknconsts.h> // KAvkonBitmapFile
+#include <fbs.h> // FbsBitmap
+#include <AknsUtils.h> 
+#include <AknIconUtils.h>
+#include <akniconconfig.h>
+#include <AknLayoutDef.h> // TAknWindowLineLayout
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+ 
+#include "CamUtility.h"
+#include "cambitmapitem.h"
+
+const TInt KCamDefaultBatteryCellHeight = 3;
+const TInt KCamDefaultBatteryCellMargin = 1;
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::CCamBatteryPaneDrawer
+// ---------------------------------------------------------------------------
+//
+CCamBatteryPaneDrawer::CCamBatteryPaneDrawer()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::~CCamBatteryPaneDrawer
+// ---------------------------------------------------------------------------
+//
+CCamBatteryPaneDrawer::~CCamBatteryPaneDrawer()
+  {
+  PRINT ( _L("Camera => ~CCamBatteryPaneDrawer") ); 	
+  
+  DeleteIcons();       
+  
+  PRINT ( _L("Camera <= ~CCamBatteryPaneDrawer") ); 
+  }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::NewL
+// ---------------------------------------------------------------------------
+//
+CCamBatteryPaneDrawer* CCamBatteryPaneDrawer::NewL()
+    {
+    PRINT ( _L("Camera => CCamBatteryPaneDrawer::NewL") ); 	    	
+    
+    CCamBatteryPaneDrawer* self = new (ELeave) CCamBatteryPaneDrawer();
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+    PRINT ( _L("Camera <= CCamBatteryPaneDrawer::NewL") );    
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::ConstructL()
+    {
+    PRINT( _L("Camera => CCamBatteryPaneDrawer::ConstructL") );	
+    
+    // Load icon bitmaps
+    LoadIconsL();
+    // Load/calculate layout data
+    LoadLayoutsL();
+
+    PRINT( _L("Camera <= CCamBatteryPaneDrawer::ConstructL") );	
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::SetBatteryStrength
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::SetBatteryStrength( TInt aBatteryStrength )
+    {
+    iBatteryStrength = aBatteryStrength;
+    }
+    
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::SetLocation
+// ---------------------------------------------------------------------------    
+//
+void CCamBatteryPaneDrawer::SetLocation( const TPoint& aLocation )
+    {
+    iRect = TRect( aLocation, iRect.Size() );
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::LoadIconsL
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::LoadIconsL()
+    {    
+    PRINT( _L("Camera => CCamBatteryPaneDrawer::LoadIconsL") );	
+    
+    // Delete existing icon bitmaps
+    DeleteIcons();
+
+    // Load and resize battery icon and mask
+    delete iBatteryIcon;
+    iBatteryIcon = NULL;
+    iBatteryIcon = CCamBitmapItem::NewL(
+        EMbmCameraappQgn_prop_cam_battery_icon,
+        EMbmCameraappQgn_prop_cam_battery_icon_mask );
+    
+    // Load and resize battery strength icon and mask    
+    delete iBatteryStrengthIcon;
+    iBatteryStrengthIcon = NULL;
+    iBatteryStrengthIcon = CCamBitmapItem::NewL(
+        EMbmCameraappQgn_indi_cam_battery_strength,
+        EMbmCameraappQgn_indi_cam_battery_strength_mask );                            
+
+    PRINT( _L("Camera <= CCamBatteryPaneDrawer::LoadIconsL") );	       
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::Rect
+// ---------------------------------------------------------------------------    
+//
+TRect CCamBatteryPaneDrawer::Rect() const
+	{		
+	return iRect;
+	}
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::Draw
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::Draw( CBitmapContext& aGc ) const
+    {
+    // Make sure that no brush is being used
+    aGc.SetBrushStyle( CGraphicsContext::ENullBrush );    
+
+    if( iBatteryStrengthIcon )
+        {
+        TSize iconSize = iBatteryStrengthIcon->BitmapSize();
+
+        TRect strengthIconCropRect(
+            0,
+            iconSize.iHeight - BatteryStrengthIconHeight( iBatteryStrength ),
+            iconSize.iWidth,
+            iconSize.iHeight );
+
+        // Draw the icon, with correct battery strength
+        iBatteryStrengthIcon->DrawPartial( 
+            aGc,
+            iBatteryStrengthIcon->LayoutRect(),
+            strengthIconCropRect );
+        }
+
+    if( iBatteryIcon )
+        {
+        iBatteryIcon->Draw( aGc );
+        }    
+    }       
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::ClearBattery
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::ClearBattery( CBitmapContext& aGc ) const
+    {   
+    PRINT( _L("Camera => CCamBatteryPaneDrawer::ClearBattery") ); 
+    
+    // Get the battery pane rectangle   
+    const TRect rect = Rect();                            
+    aGc.SetPenStyle( CGraphicsContext::ENullPen );
+    aGc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    aGc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+    aGc.SetBrushColor( TRgb::Color16MA( 0 ) );
+    aGc.Clear( rect ); //DrawRect( rect );
+    PRINT( _L("Camera <= CCamBatteryPaneDrawer::ClearBattery") );  
+    }
+    
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::LoadLayoutsL
+// ---------------------------------------------------------------------------    
+//
+void CCamBatteryPaneDrawer::LoadLayoutsL()
+    {    
+    PRINT( _L("Camera => CCamBatteryPaneDrawer::LoadLayoutsL") );	    	
+    if ( CamUtility::IsNhdDevice() )
+        {
+        TouchLayoutL();
+        }
+    else
+        {
+        NonTouchLayoutL();
+        }       
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::BatteryStrengthIconHeight
+// ---------------------------------------------------------------------------    
+//
+TInt CCamBatteryPaneDrawer::BatteryStrengthIconHeight( TInt aLevel ) const
+    {
+    TInt cellHeight = KCamDefaultBatteryCellHeight;
+    if ( iBatteryStrengthIcon )
+        {
+        cellHeight = iBatteryStrengthIcon->BitmapSize().iHeight /
+            KMaxBatteryStrength;
+        }
+    return ( aLevel * cellHeight ) + KCamDefaultBatteryCellMargin;
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::DeleteIcons
+// ---------------------------------------------------------------------------
+//
+void CCamBatteryPaneDrawer::DeleteIcons()
+    {
+    delete iBatteryIcon;
+    iBatteryIcon = NULL;
+    delete iBatteryStrengthIcon;
+    iBatteryStrengthIcon = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::HandleResourceChange
+// ---------------------------------------------------------------------------    
+//   
+void CCamBatteryPaneDrawer::HandleResourceChange( TInt /* aType */ )
+    {
+    PRINT( _L("Camera => CCamBatteryPaneDrawer::HandleResourceChange") );	    	
+    	
+    // Called when either skin or color scheme has changed.
+    // We need to reload icons and re-create the battery color bitmap.
+    
+        
+    // Reload icons
+    TRAP_IGNORE(LoadIconsL());
+	TRAP_IGNORE(LoadLayoutsL());	
+      
+    PRINT( _L("Camera <= CCamBatteryPaneDrawer::HandleResourceChange") );        
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::NonTouchLayout
+// ---------------------------------------------------------------------------    
+void CCamBatteryPaneDrawer::NonTouchLayoutL() 
+    {
+    TRect screen;
+    TAknLayoutRect indicatorsPane;
+    TAknLayoutRect batteryPane;
+    TInt cba =  AknLayoutUtils::CbaLocation() == 
+                AknLayoutUtils::EAknCbaLocationLeft? 
+                AknLayoutUtils::EAknCbaLocationLeft : 0;
+ 
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen );
+    indicatorsPane.LayoutRect( screen,
+        AknLayoutScalable_Apps::cam6_indi_pane( cba ));
+    batteryPane.LayoutRect( indicatorsPane.Rect(),
+        AknLayoutScalable_Apps::cam6_battery_pane( cba ) );
+    iRect = batteryPane.Rect();
+
+    // Battery icon
+    if ( iBatteryIcon )
+        {
+        iBatteryIcon->SetLayoutL( iRect,
+            AknLayoutScalable_Apps::cam6_battery_pane_g1( cba ));
+        }
+
+    // Battery strength icon    
+    if ( iBatteryStrengthIcon )
+        {
+        iBatteryStrengthIcon->SetLayoutL( iRect,
+            AknLayoutScalable_Apps::cam6_battery_pane_g2( cba ));
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCamBatteryPaneDrawer::TouchLayoutL
+// ---------------------------------------------------------------------------    
+void CCamBatteryPaneDrawer::TouchLayoutL()
+    {
+    TRect screen;
+    TAknLayoutRect indicatorsPane;
+    TAknLayoutRect batteryPane;
+    TInt var = Layout_Meta_Data::IsLandscapeOrientation();
+
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen );
+    indicatorsPane.LayoutRect( screen,
+        AknLayoutScalable_Apps::cam4_indicators_pane( var ).LayoutLine() );
+    batteryPane.LayoutRect( indicatorsPane.Rect(),
+        AknLayoutScalable_Apps::cam4_battery_pane( var ).LayoutLine() );
+    iRect = batteryPane.Rect();
+
+    // Battery icon
+    if ( iBatteryIcon )
+        {
+        iBatteryIcon->SetLayoutL( iRect,
+            AknLayoutScalable_Apps::cam4_battery_pane_g2( var ).LayoutLine() );
+        }
+
+    // Battery strength icon    
+    if ( iBatteryStrengthIcon )
+        {
+        iBatteryStrengthIcon->SetLayoutL( iRect,
+            AknLayoutScalable_Apps::cam4_battery_pane_g1( var ).LayoutLine() );
+        }
+    }
+
+// End of file
+