--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/ccacoloursettingitem.cpp Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,317 @@
+/*
+* Copyright (c) 2006 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: Setting item for message colour
+*
+*/
+
+
+#include <akncolourselectiongrid.h>
+#include <akniconutils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknconsts.h>
+#include <avkon.mbg>
+#include <chatng.rsg>
+
+#include "ccacoloursettingitem.h"
+#include "MCASettingSapExt.h"
+#include "ccaappsettingsdialog.h"
+#include "chatdefinitions.h"
+// The Settings have been moved to Cenrep (also retained in the Resource file),
+// so the enums for keys and central repository header is added here
+#include "VariantKeys.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CCAColourSettingItem::CCAColourSettingItem(
+ MCASettingSapExt& aSAPExtension,
+ TBool& aBuffer,
+ TInt aIdentifier )
+ : CAknSettingItem( aIdentifier ),
+ iExternalValue( aBuffer ),
+ iSAPExtension( aSAPExtension )
+ {
+ // No implementation needed
+ }
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CCAColourSettingItem::ConstructL(
+ const TDesC& aKey,
+ const TInt aOrdinal,
+ const TDesC& aSettingTitle,
+ CArrayPtr<CGulIcon>* aIconArray )
+ {
+ iSAPKey = aKey.AllocL();
+ CAknSettingItem::ConstructL(
+ EFalse,
+ aOrdinal,
+ aSettingTitle,
+ aIconArray,
+ 0,
+ EAknCtPopupSettingList,
+ 0,
+ 0 );
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CCAColourSettingItem::~CCAColourSettingItem()
+ {
+ delete iDefaultText;
+ delete iSAPKey;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// @see CAknSettingItem
+// ---------------------------------------------------------------------------
+//
+void CCAColourSettingItem::StoreL()
+ {
+ iExternalValue = iInternalValue;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// @see CAknSettingItem
+// ---------------------------------------------------------------------------
+//
+void CCAColourSettingItem::LoadL()
+ {
+ iInternalValue = iExternalValue;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// EditItemL overridden to launch colour selection grid.
+// ---------------------------------------------------------------------------
+//
+void CCAColourSettingItem::EditItemL( TBool /*aCalledFromMenu*/ )
+ {
+ TBool retVal = EFalse;
+ CEikonEnv* env = CEikonEnv::Static();
+
+ // Array for TRgb colour values
+ CArrayFixFlat<TRgb>* colors = new( ELeave ) CArrayFixFlat<TRgb>( KArrayGranularity );
+ CleanupStack::PushL( colors );
+
+ // Read colours from resources
+ CDesCArrayFlat* indices = env->ReadDesCArrayResourceL( R_MESSAGE_COLORS );
+ CleanupStack::PushL( indices );
+
+ // Convert to TRgb's
+ TInt cnt = indices->Count();
+ for ( TInt i = 0; i < cnt; ++i )
+ {
+ TInt col;
+ TLex lex( indices->MdcaPoint( i ) );
+ User::LeaveIfError( lex.Val( col ) );
+ colors->AppendL( AKN_LAF_COLOR( col ) );
+ }
+ CleanupStack::PopAndDestroy( indices );
+
+ // Get current colour
+ TRgb color( iSAPExtension.IntValueL( *iSAPKey ) );
+ TInt startValue = color.Value();
+ TBool noneChosen = ( startValue == KErrNotFound );
+
+ // Construct colour selection grid
+ CAknDialog *dlg = CAknColourSelectionGrid::NewL(
+ colors,
+ ETrue,
+ noneChosen,
+ color );
+
+ // Use own resource to customize the "none" text.
+ retVal = dlg->ExecuteLD( R_CHATCLIENT_COLOR_GRID_DLG );
+
+ TInt colVal = KErrNotFound;
+ if ( !noneChosen )
+ {
+ colVal = color.Value();
+ }
+
+ if ( !retVal )
+ {
+ colVal = startValue;
+ }
+ else
+ {
+ // Set new value to SAP
+ iSAPExtension.SetIntValueL( *iSAPKey, colVal );
+ }
+
+ CleanupStack::PopAndDestroy( colors );
+
+ // ETrue: User specific color selected
+ // EFalse: Default color used
+ iInternalValue = ( colVal != KErrNotFound );
+
+ UpdateListBoxTextL();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// @see CAknSettingItem
+// ---------------------------------------------------------------------------
+//
+const TDesC& CCAColourSettingItem::SettingTextL()
+ {
+ // When using user defined colour return empty
+ // descriptor, otherwise return default text
+ if ( iInternalValue )
+ {
+ return KEmptyDesC;
+ }
+ else
+ {
+ return *iDefaultText;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// @see CAknSettingItem
+// ---------------------------------------------------------------------------
+//
+void CCAColourSettingItem::CompleteConstructionL()
+ {
+ // Check that correct ConstructL was used
+ if ( !iSAPKey )
+ {
+ User::Panic( KPanicText, EChatColourSettingItemWronglyConstructed );
+ }
+
+ // Read default colour text from resources
+ CEikonEnv* env = CEikonEnv::Static();
+ iDefaultText = env->AllocReadResourceAsDes16L(
+ R_QTN_CHAT_SET_COLOUR_DEFAULT );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknSettingItem.
+// @see CAknSettingItem
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CCAColourSettingItem::CreateBitmapL()
+ {
+ // If custom colour is in use create bitmap with that colour to be
+ // shown inside the setting item
+
+ // Create rect of correct size to be used for resizing the icon
+ TRect origin;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, origin );
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( origin,
+ AknLayoutScalable_Avkon::listscroll_gen_pane( 0 ) );
+ layoutRect.LayoutRect( layoutRect.Rect(),
+ AknLayoutScalable_Avkon::list_gen_pane( 0 ) );
+ layoutRect.LayoutRect( layoutRect.Rect(),
+ AknLayoutScalable_Avkon::list_setting_number_pane( 0 ) );
+ layoutRect.LayoutRect( layoutRect.Rect(),
+ AknLayoutScalable_Avkon::set_value_pane( 0 ) );
+ TRect rect( layoutRect.Rect() );
+
+ // Move rect to 0,0
+ rect.Move( -rect.iTl.iX, -rect.iTl.iY );
+
+ // Get current color from SAP
+ TRgb color( iSAPExtension.IntValueL( *iSAPKey ) );
+
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* mask = NULL;
+
+ // Create icon
+ AknIconUtils::CreateIconL(
+ bitmap,
+ mask,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_prop_empty,
+ EMbmAvkonQgn_prop_empty_mask
+ );
+
+ if ( iInternalValue )
+ {
+ // Set colour
+ AknIconUtils::SetIconColor( bitmap, color );
+
+ // Create solid mask to make
+ // colour box visible
+ delete mask;
+ mask = NULL;
+ CleanupStack::PushL( bitmap );
+ mask = AknIconUtils::CreateIconL( KAvkonBitmapFile,
+ EMbmAvkonQgn_prop_empty );
+ CleanupStack::Pop( bitmap ); // No leaving code after this, CGulIcon
+ // takes ownership in NewL
+ }
+
+ // Resize bitmaps
+ AknIconUtils::SetSize( bitmap, rect.Size() );
+ AknIconUtils::SetSize( mask, rect.Size() );
+
+ // icon takes ownership of bitmaps
+ CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+ // Ownership of icon gets transferred
+ CFbsBitmap* returnedBitmap = SetIconMaskAndReturnBitmap( icon );
+ return returnedBitmap; // Caller takes ownership
+ }
+
+// ---------------------------------------------------------------------------
+// CCAColourSettingItem::SetIconMaskAndReturnBitmap
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CCAColourSettingItem::SetIconMaskAndReturnBitmap( CGulIcon* aIcon )
+ {
+ CFbsBitmap* returnedBitmap = NULL;
+
+ if ( aIcon )
+ {
+ // Drop ownership of bitmaps from icon
+ aIcon->SetBitmapsOwnedExternally( ETrue );
+ // Get bitmaps
+ CFbsBitmap* bitmap = aIcon->Bitmap();
+ CFbsBitmap* mask = aIcon->Mask();
+ delete aIcon; // Does not own bitmaps anymore, so let it go
+
+ // Always return the bitmap and transfer ownership if there is one
+ if ( bitmap )
+ {
+ returnedBitmap = bitmap;
+ }
+
+ // Set the mask if there is a bitmap, an icon and a mask
+ TBool maskOwnershipTransferred = EFalse;
+ if ( bitmap && mask && HasIcon() )
+ {
+ maskOwnershipTransferred = SetIconMask( mask );
+ }
+ if ( !maskOwnershipTransferred )
+ {
+ // Ownership didn't transfer
+ delete mask;
+ }
+ }
+
+ return returnedBitmap; // Caller takes ownership
+ }