/*
* Copyright (c) 2002 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:
* Text and listbox settings
*
*/
// INCLUDE FILES
#include <coemain.h>
#include <data_caging_path_literals.hrh> // KDC_RESOURCE_FILES_DIR
#include <eikrutil.h>
#include <aknsettingpage.h>
#include <aknradiobuttonsettingpage.h>
#include <aknpasswordsettingpage.h>
#include <akntextsettingpage.h>
#include <muiu_internal.rsg>
#include "MuiuSettingsArray.h"
#include <e32property.h>
#include <MessagingInternalPSkeys.h>
#include <StringLoader.h>
// CONSTANTS
const TInt KMuiuSettingsArrayGranularity = 4;
const TInt KMuiuSettingsArrayVisibleTextLength = 30;
const TInt KPaswordStrLength = 32;
const TInt KTwoItems = 2;
const TInt KValue = 32;
_LIT(KMuiuSpaceString, " ");
// this is added at the end of the compulsory setting item string
_LIT(KMuiuSettingsArrayCompulsoryAdditionString, "\t*");
_LIT(KDirAndMuiuResFileName,"muiu_internal.rsc");
// ============================ MEMBER FUNCTIONS ===============================
// ---------------------------------------------------------
// CMuiuSettingsArray::NewL
// ---------------------------------------------------------
//
EXPORT_C CMuiuSettingsArray* CMuiuSettingsArray::NewL( TInt aResourceId )
{
CMuiuSettingsArray* self = new (ELeave) CMuiuSettingsArray();
CleanupStack::PushL( self );
self->ConstructL( aResourceId );
CleanupStack::Pop( self ); // self
return self;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::CMuiuSettingsArray
// ---------------------------------------------------------
//
EXPORT_C CMuiuSettingsArray::CMuiuSettingsArray()
: CArrayFixFlat<TMuiuSettingsItem> ( KMuiuSettingsArrayGranularity ),
iResources( *CCoeEnv::Static() )
{
}
// ---------------------------------------------------------
// CMuiuSettingsArray::ConstructL
// ---------------------------------------------------------
//
EXPORT_C void CMuiuSettingsArray::ConstructL( TInt aResourceId )
{
TParse parse;
CEikonEnv* env = CEikonEnv::Static();
if ( !env )
{
User::Leave( KErrGeneral );
}
parse.Set( KDirAndMuiuResFileName, &KDC_RESOURCE_FILES_DIR, NULL );
TFileName fileName( parse.FullName() );
iResources.OpenL( fileName );
iTempText = HBufC::NewL( KMuiuMaxSettingsTextLength );
if ( aResourceId )
{
TResourceReader reader;
env->CreateResourceReaderLC( reader, aResourceId );
const TInt count = reader.ReadInt16();
for ( TInt loop = 0; loop < count; loop++ )
{
TMuiuSettingsItem item;
item.iLangSpecificNumConv = ETrue;
item.iCurrentNumber = 0;
item.iMuiuSettingsItemArray = 0;
item.iType = EMuiuSettingsUnknown;
HBufC* txt = reader.ReadHBufCL(); // message text
item.iLabelText.Copy( *txt );
TBool flag = EFalse;
//If string retrived from resource is "Message sent as"
flag = IsMessageSentStringL( txt );
delete txt;
const TMuiuSettingsType type = ( TMuiuSettingsType ) reader.ReadInt16();
item.iType = type;
const TInt maxLength = reader.ReadInt16();
item.iUserTextMaxLength = maxLength < KMuiuMaxSettingsTextLength ?
maxLength : KMuiuMaxSettingsTextLength;
item.iCompulsory = reader.ReadInt8() != EMuiuSettingsCompulsoryNo;
const TInt array_id = reader.ReadInt32();
if ( type == EMuiuSettingsSelectionList && array_id )
{
CDesCArrayFlat* array =
new( ELeave ) CDesCArrayFlat( KMuiuSettingsArrayGranularity );
CleanupStack::PushL( array );
TResourceReader reader2;
env->CreateResourceReaderLC( reader2, array_id );
const TInt count = reader2.ReadInt16();
for ( TInt loop = 0; loop < count; loop++ )
{
HBufC* txt = reader2.ReadHBufCL();
CleanupStack::PushL( txt );
array->AppendL( *txt );
CleanupStack::PopAndDestroy(); // txt
}
CleanupStack::PopAndDestroy(); //reader2
item.iMuiuSettingsItemArray = array;
if(!flag)
AppendL( item );
CleanupStack::Pop( array ); //array
}
else
{
AppendL( item );
}
}
CleanupStack::PopAndDestroy(); //reader
}
iPasswordFill = EikResourceUtils::ReadTInt16L(
R_MUIU_SETTINGS_DIALOG_PASSWORD_FILL, env );
iCompulsoryText = env->AllocReadResourceL( R_MUIU_SETTINGS_DIALOG_COMPULSORY_FILL );
}
// ---------------------------------------------------------
// CMuiuSettingsArray::~CMuiuSettingsArray
// ---------------------------------------------------------
//
EXPORT_C CMuiuSettingsArray::~CMuiuSettingsArray()
{
delete iTempText;
delete iCompulsoryText;
for ( TInt loop = Count()-1; loop >= 0; loop--)
{
delete At( loop ).iMuiuSettingsItemArray;
}
delete iSettingPage;
iResources.Close();
}
// ---------------------------------------------------------
// CMuiuSettingsArray::EditItemL
// ---------------------------------------------------------
//
EXPORT_C TBool CMuiuSettingsArray::EditItemL( TInt aIndex, TBool aEnterPressed )
{
TBool retValue = EFalse;
switch ( At( aIndex ).iType )
{
case EMuiuSettingsSelectionList:
retValue = HandleEditListBoxSettingsL( aIndex, aEnterPressed );
break;
case EMuiuSettingsEditableText:
retValue = HandleEditTextSettingsL( aIndex );
break;
case EMuiuSettingsNumber:
retValue = HandleEditNumberL( aIndex );
break;
case EMuiuSettingsPassword:
retValue = HandleEditPasswordL( aIndex );
break;
case EMuiuSettingsScNumber:
retValue = HandleEditScNumberL( aIndex );
break;
default:
break;
}
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::HandleEditListBoxSettingsL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::HandleEditListBoxSettingsL( TInt aIndex, TBool aEnterPressed )
{
TInt currentItem = At( aIndex ).iCurrentNumber;
TBool langSpecificNumConv = At( aIndex ).iLangSpecificNumConv;
TBool retValue = EFalse;
if ( aEnterPressed && At( aIndex ).iMuiuSettingsItemArray->Count() == KTwoItems )
{
currentItem = !currentItem;
At( aIndex ).iCurrentNumber = currentItem;
At( aIndex ).iUserText.Copy( (*At( aIndex ).iMuiuSettingsItemArray)[currentItem] );
retValue = ETrue;
}
else
{
const CDesCArrayFlat& origArray = (*At( aIndex ).iMuiuSettingsItemArray);
const TInt count = origArray.Count();
CDesCArrayFlat* tempArray = new (ELeave ) CDesCArrayFlat( KMuiuSettingsArrayGranularity );
CleanupStack::PushL( tempArray );
for ( TInt loop = 0; loop < count; loop++ )
{
HBufC* tempBuf = ( origArray )[loop].AllocL();
CleanupStack::PushL( tempBuf );
TPtr tempBufPtr = tempBuf->Des();
if ( langSpecificNumConv )
{
AknTextUtils::DisplayTextLanguageSpecificNumberConversion( tempBufPtr );
}
tempArray->AppendL( *tempBuf );
CleanupStack::PopAndDestroy( tempBuf );
}
iSettingPage = new ( ELeave )CAknRadioButtonSettingPage(
R_MUIU_SETTINGS_DIALOG_LISTBOX, currentItem, tempArray );
iSettingPage->SetSettingTextL( At( aIndex ).iLabelText );
if ( iSettingPage->ExecuteLD(CAknSettingPage::EUpdateWhenChanged) )
{
At( aIndex ).iCurrentNumber = currentItem;
At( aIndex ).iUserText.Copy( (*At( aIndex ).iMuiuSettingsItemArray)[currentItem] );
retValue = ETrue;
}
CleanupStack::PopAndDestroy( tempArray );
iSettingPage = NULL;
}
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::HandleEditTextSettingsL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::HandleEditTextSettingsL( TInt aIndex )
{
TBuf<KMuiuMaxSettingsTextLength> textToEdit =
At( aIndex ).iUserText.Left(At( aIndex ).iUserTextMaxLength );
TBool retValue = EFalse;
iSettingPage = new( ELeave )CAknTextSettingPage(R_MUIU_SETTINGS_DIALOG_TEXT, textToEdit );
iSettingPage->SetSettingTextL( At( aIndex ).iLabelText );
iSettingPage->ConstructL( );
STATIC_CAST( CAknTextSettingPage*, iSettingPage)->TextControl()
->SetTextLimit( At( aIndex ).iUserTextMaxLength );
if ( iSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
{
At( aIndex ).iUserText.Copy( textToEdit );
retValue = ETrue;
}
iSettingPage = NULL;
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::HandleEditNumberL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::HandleEditNumberL( TInt aIndex )
{
TInt numberToEdit = At( aIndex ).iCurrentNumber;
TBool retValue = EFalse;
iSettingPage = new( ELeave )CAknIntegerSettingPage(
R_MUIU_SETTINGS_DIALOG_NUMBER,
numberToEdit,
CAknIntegerSettingPage::EInvalidValueNotOffered );
iSettingPage->SetSettingTextL( At( aIndex ).iLabelText );
iSettingPage->ConstructL();
static_cast<CAknIntegerSettingPage*>(iSettingPage)->IntegerEditorControl()->
SetAknEditorNumericKeymap( EAknEditorPlainNumberModeKeymap );
if ( iSettingPage->ExecuteLD(CAknSettingPage::EUpdateWhenChanged) )
{
At( aIndex ).iCurrentNumber = numberToEdit;
At( aIndex ).iUserText.Num( numberToEdit );
retValue = ETrue;
}
iSettingPage = NULL;
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::HandleEditScNumberL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::HandleEditScNumberL( TInt aIndex )
{
TBuf<KMuiuMaxSettingsTextLength> textToEdit = At( aIndex ).iUserText;
TBool retValue = EFalse;
if ( At( aIndex ).iLangSpecificNumConv )
{
AknTextUtils::DisplayTextLanguageSpecificNumberConversion( textToEdit );
}
iSettingPage = new( ELeave )CAknTextSettingPage(
R_MUIU_SETTINGS_DIALOG_SC_NUMBER, textToEdit );
iSettingPage->SetSettingTextL( At( aIndex ).iLabelText );
if ( iSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
{
AknTextUtils::ConvertDigitsTo( textToEdit , EDigitTypeWestern );
At( aIndex ).iUserText.Copy( textToEdit );
retValue = ETrue;
}
iSettingPage = NULL;
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::HandleEditPasswordL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::HandleEditPasswordL( TInt aIndex )
{
TBuf<KPaswordStrLength> newPassword = At( aIndex ).iUserText.Left( KValue );
TBuf<KPaswordStrLength> oldPassword;
oldPassword.Copy ( newPassword );
TBool retValue = EFalse;
iSettingPage = new( ELeave )CAknAlphaPasswordSettingPage(
R_MUIU_SETTINGS_DIALOG_PASSWORD, newPassword, oldPassword );
iSettingPage->SetSettingTextL( At( aIndex ).iLabelText );
iSettingPage->ConstructL( );
STATIC_CAST( CAknAlphaPasswordSettingPage*, iSettingPage )->AlphaPasswordEditor()
->SetMaxLength( At( aIndex ).iUserTextMaxLength );
if ( iSettingPage->ExecuteLD(CAknSettingPage::EUpdateWhenChanged) )
{
At( aIndex ).iUserText.Copy( newPassword );
retValue = ETrue;
}
iSettingPage = NULL;
return retValue;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::MdcaCount
// ---------------------------------------------------------
//
EXPORT_C TInt CMuiuSettingsArray::MdcaCount() const
{
return Count();
}
// ---------------------------------------------------------
// CMuiuSettingsArray::MdcaPoint
// ---------------------------------------------------------
//
EXPORT_C TPtrC CMuiuSettingsArray::MdcaPoint( TInt aIndex ) const
{
TPtr tempText = iTempText->Des();
TBuf<KMuiuMaxSettingsTextLength> tempSettingText;
tempSettingText.Zero();
tempText.Zero();
tempText.Append( KMuiuSpaceString );
tempText.Append( KColumnListSeparator );
tempText.Append( At( aIndex ).iLabelText );
tempText.Append( KColumnListSeparator );
tempText.Append( KColumnListSeparator );
if ( At( aIndex ).iType == EMuiuSettingsSelectionList )
{
tempSettingText = At( aIndex ).iMuiuSettingsItemArray->MdcaPoint(
At( aIndex ).iCurrentNumber ).Left( KMuiuSettingsArrayVisibleTextLength );
}
else if ( At( aIndex ).iType == EMuiuSettingsPassword )
{
TInt length = At( aIndex ).iUserText.Length();
length = length > KMuiuSettingsArrayVisibleTextLength ?
KMuiuSettingsArrayVisibleTextLength : length;
if ( length > 0 )
{
TChar passFill = TChar( iPasswordFill );
tempSettingText.AppendFill( passFill, length );
}
}
else
{
if ( At( aIndex ).iUserText.Length() )
{
tempSettingText = At( aIndex ).iUserText.Left( KMuiuSettingsArrayVisibleTextLength );
}
}
if ( tempSettingText.Length() )
{
tempText.Append( tempSettingText );
}
else
{
if ( At( aIndex ).iCompulsory )
{
tempText.Append( *iCompulsoryText );
}
else
{
tempText.Append( KMuiuSpaceString );
}
}
if ( At( aIndex ).iCompulsory )
{
tempText.Append( KMuiuSettingsArrayCompulsoryAdditionString );
}
if ( At( aIndex ).iLangSpecificNumConv )
{
AknTextUtils::DisplayTextLanguageSpecificNumberConversion( tempText );
}
return tempText;
}
// ---------------------------------------------------------
// CMuiuSettingsArray::IsMessageSentStringL
// ---------------------------------------------------------
//
TBool CMuiuSettingsArray::IsMessageSentStringL(HBufC* aString)
{
TInt flag = EFalse;
HBufC* string = StringLoader::LoadLC( R_MUIU__MCE_SETTINGS_SMS_CONVERSION);
if (aString->Compare(string->Des()) == 0)
{
TInt val = 0;
TInt ret = RProperty::Get( KPSUidMuiu, KMuiuRemoveMsgSentSettings, val );
if ( ret == KErrNone && val != 0 )
{
flag = ETrue;
RProperty::Set( KPSUidMuiu, KMuiuRemoveMsgSentSettings, 0) ;
}
}
CleanupStack::PopAndDestroy( string );
return flag;
}
// End of File