diff -r ebe688cedc25 -r 7fdbb852d323 email/mail/EditorSrc/cmsgmailencodingsetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/EditorSrc/cmsgmailencodingsetting.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -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 +#include +#include + + +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* 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); iConvertCharacterSetIdentifierToStandardNameL( + 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