email/mail/EditorSrc/cmsgmailencodingsetting.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/EditorSrc/cmsgmailencodingsetting.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,266 @@
+/*
+* 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:  Encoding setting item and setting page
+*
+*/
+
+
+#include "cmsgmailencodingsetting.h"
+#include "MsgMailEditorDocument.h"
+#include "MailLog.h"
+#include <MsgMailEditor.rsg>
+#include <StringLoader.h>
+#include <charconv.h>
+
+
+inline void CMsgMailEditorEncodingSettingItem::ConstructL()
+    {
+    SetSettingValueL();
+    }
+
+CMsgMailEditorEncodingSettingItem* 
+    CMsgMailEditorEncodingSettingItem::NewL( 
+    TInt aIdentifier, CMsgMailEditorDocument& aDocument )
+    {
+    CMsgMailEditorEncodingSettingItem* self =
+        new( ELeave ) CMsgMailEditorEncodingSettingItem( 
+        aIdentifier,  aDocument );
+    CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop(self); // self
+    return self;
+    }
+
+CMsgMailEditorEncodingSettingItem::CMsgMailEditorEncodingSettingItem(
+    TInt aIdentifier,
+    CMsgMailEditorDocument& aDocument ): 
+    CAknTextSettingItem( aIdentifier, iSettingValue ),  
+    iDocument( aDocument )
+    {
+    // iSettingValue is set later
+    }        
+
+CMsgMailEditorEncodingSettingItem::~CMsgMailEditorEncodingSettingItem()
+    {
+    iSettingValue.Close();
+    delete iIdArray;
+    }
+
+// ----------------------------------------------------------------------------
+//  // From CAknTextSettingItem
+// ----------------------------------------------------------------------------
+//        
+void CMsgMailEditorEncodingSettingItem::EditItemL( 
+    TBool /* aCalledFromMenu */ )
+    {
+    TPtrC settingName = SettingName();
+    TInt currentSelection( 0 );
+    NameArrayL( currentSelection );
+  
+    CAknSettingPage* dlg = new( ELeave )CMsgMailEditorEncodingSettingPage(        
+        &settingName, 
+        SettingNumber(), 
+        EEikCtTextButton,
+        SettingEditorResourceId(), 
+        SettingPageResourceId(), 
+        currentSelection, 
+        iIdArray );
+    SetSettingPage( dlg );
+    SettingPage()->SetSettingPageObserver( this ); // not used
+    SettingPage()->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted );
+   
+    SaveSettingValueL( currentSelection );
+    SetSettingValueL();
+    LoadL(); // update setting value to listbox
+    UpdateListBoxTextL();    
+    SetSettingPage( 0 ); // it is deleted now
+    }
+
+
+// ----------------------------------------------------------------------------
+//  Create name array
+// ----------------------------------------------------------------------------
+//    
+void CMsgMailEditorEncodingSettingItem::NameArrayL( TInt& aSelected )
+    {
+    LOG("CMsgMailEditorEncodingSettingItem::NameArrayL");
+    RFs& fs = CCoeEnv::Static()->FsSession();
+    CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* charSets =
+        CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC( fs );
+    CCnvCharacterSetConverter* charConv = CCnvCharacterSetConverter::NewLC();
+    		
+    TInt charsetCount = charSets->Count();
+    // +1 for "autom" string
+    delete iIdArray;
+    iIdArray = NULL;
+    iIdArray = new( ELeave )CDesCArrayFlat( charsetCount+1 );
+   
+    CMsgMailPreferences& prefs = iDocument.SendOptions();
+    TUid charId = prefs.SendingCharacterSet();
+
+	HBufC* autom = StringLoader::LoadLC( R_QTN_MBXS_SETT_DEFENC_AUTOMATIC );
+	iIdArray->AppendL( *autom );
+	CleanupStack::PopAndDestroy(autom); // autom
+	
+    for ( TInt i(0); i<charsetCount; i++)
+        {
+        TUint cId = (*charSets)[i].Identifier();
+    	// set focus
+    	if ( cId == charId.iUid )
+    		{
+    		// -1 because of autom is located at 0 index
+    		aSelected = i-1;
+    		}
+        
+        HBufC8* charaSetName = 
+        	charConv->ConvertCharacterSetIdentifierToStandardNameL(
+                cId, fs );
+        
+        if ( charaSetName )
+            {
+            CleanupStack::PushL( charaSetName );
+            HBufC* nameBuf = HBufC::NewLC( charaSetName->Length() );
+            nameBuf->Des().Copy( *charaSetName );
+			iIdArray->AppendL( *nameBuf );
+            CleanupStack::PopAndDestroy(2, charaSetName);	// CSI: 47,12 # nameBuf, charaSetName
+            }
+        
+        }
+    CleanupStack::PopAndDestroy( 2, charSets );		// CSI: 47,12 # charSets, charConv
+    }
+
+// ----------------------------------------------------------------------------
+//  Save selected mbox id to settings
+// ----------------------------------------------------------------------------
+//  
+void CMsgMailEditorEncodingSettingItem::SaveSettingValueL( 
+    TInt aSelected )
+    {
+    ASSERT( iIdArray );
+    ASSERT( iIdArray->Count() >= 0 && aSelected < iIdArray->Count() );
+    
+    TPtrC name = (*iIdArray)[aSelected];
+	HBufC8* charsetName = HBufC8::NewLC( name.Length() );
+	charsetName->Des().Copy( name );
+    
+    CCnvCharacterSetConverter* charConv = CCnvCharacterSetConverter::NewLC();
+    
+    RFs& fs = CCoeEnv::Static()->FsSession();
+	TUint charsetId = 
+		charConv->ConvertStandardNameOfCharacterSetToIdentifierL(
+		*charsetName, fs);
+
+    CleanupStack::PopAndDestroy(2, charsetName );	// CSI: 47,12 # charConv, charsetName  
+		
+	// Update selected ID to settings
+	TUid charId;
+	charId.iUid = charsetId;
+	iDocument.SendOptions().SetSendingCharacterSet( charId );    
+
+    iDocument.SetChanged( ETrue );
+    }
+
+// ----------------------------------------------------------------------------
+//  Set current character set name to setting list
+// ----------------------------------------------------------------------------
+//  
+void CMsgMailEditorEncodingSettingItem::SetSettingValueL()
+    {
+    HBufC* charset = GetCharsetNameLC();
+    iSettingValue.Close();		
+	iSettingValue.CreateL( *charset );
+	CleanupStack::PopAndDestroy( charset );
+    }
+    
+// ----------------------------------------------------------------------------
+//  Get current character set name
+// ----------------------------------------------------------------------------
+//
+HBufC* CMsgMailEditorEncodingSettingItem::GetCharsetNameLC()
+    {
+	CMsgMailPreferences& prefs = iDocument.SendOptions();
+	TUint charsetId = prefs.SendingCharacterSet().iUid;
+	
+	HBufC* returnName(NULL);
+	if (charsetId)
+		{
+    	RFs& fs = CCoeEnv::Static()->FsSession();
+    	CCnvCharacterSetConverter* charConv =
+    		CCnvCharacterSetConverter::NewLC();
+    		
+		HBufC8* charSetName = charConv->
+			ConvertCharacterSetIdentifierToStandardNameL(
+			charsetId, fs);
+		CleanupStack::PopAndDestroy(charConv); // charConv	
+		
+		if (charSetName)
+			{
+			CleanupStack::PushL( charSetName );
+			// 1 because length might be zero 
+			returnName = HBufC::NewL( Max(charSetName->Length(), 1) );
+			returnName->Des().Copy( *charSetName );
+			CleanupStack::PopAndDestroy(charSetName); // charSetName
+			CleanupStack::PushL( returnName );
+			}
+		else
+		    {
+		    ASSERT(0); // panic
+		    }	
+		}
+    else
+        {
+        returnName = StringLoader::LoadLC( R_QTN_MBXS_SETT_DEFENC_AUTOMATIC );
+        }
+    return returnName;
+    }
+
+
+CMsgMailEditorEncodingSettingPage::CMsgMailEditorEncodingSettingPage(
+    TInt aResourceID,
+    TInt& aCurrentSelectionIndex, 
+	const MDesCArray* aItemArray )
+    : CAknRadioButtonSettingPage( 
+        aResourceID, aCurrentSelectionIndex, aItemArray )
+	{
+	}
+
+CMsgMailEditorEncodingSettingPage::CMsgMailEditorEncodingSettingPage(	
+    const TDesC* aSettingText, 
+    TInt aSettingNumber, 
+    TInt aControlType,
+    TInt aEditorResourceId, 
+    TInt aResourceID,
+    TInt& aCurrentSelectionIndex, 
+	const MDesCArray* aItemArray)
+    : CAknRadioButtonSettingPage( 
+      aSettingText, 
+      aSettingNumber,
+      aControlType, 
+      aEditorResourceId, 
+      aResourceID,
+      aCurrentSelectionIndex,
+      aItemArray )
+    {
+    }
+
+CMsgMailEditorEncodingSettingPage::~CMsgMailEditorEncodingSettingPage()
+	{
+	}
+
+void CMsgMailEditorEncodingSettingPage::ConstructL()
+	{
+	CAknRadioButtonSettingPage::ConstructL();
+	}
+
+// End of File