messagingappbase/msgavkon/muiu_internal/settingsarray/src/MuiuSettingsArray.cpp
changeset 0 72b543305e3a
child 9 1d7827e39b52
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgavkon/muiu_internal/settingsarray/src/MuiuSettingsArray.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,438 @@
+/*
+* 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"
+
+// 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 );
+            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;
+                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;
+    }
+
+//  End of File