profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.cpp
branchRCL_3
changeset 18 b7fa36b488f8
parent 17 861562a14a53
child 19 cd54903d48da
--- a/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.cpp	Thu Aug 19 09:55:16 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,446 +0,0 @@
-/*
-* 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:  Setting item class for "Alert for" setting.
-*
-*/
-
-
-
-// INCLUDES
-#include "CProfileAlertForSettingItem.h"
-
-#include <coemain.h>
-#include <cntdb.h>
-#include <cntitem.h>
-#include <StringLoader.h>
-#include <CPbkContactEngine.h>
-#include <CPbkContactChangeNotifier.h>
-#include <profilesettingsview.rsg>
-
-#include "CProfileAlertForSettingPage.h"
-
-// CONSTANTS
-const TInt KContactItemArrayGranularity( 8 );
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::CProfileAlertForSettingItem
-// C++ constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CProfileAlertForSettingItem::CProfileAlertForSettingItem(
-    TInt aIdentifier,
-    RArray<TContactItemId>& aContactList,
-    CCoeEnv* aCoeEnv )
-    :   CAknSettingItem( aIdentifier ),
-        iPopupArray( KContactItemArrayGranularity ),
-        iExternalContactArray( aContactList ),
-        iCoeEnv( aCoeEnv )
-    {
-    }
-
-// Destructor
-CProfileAlertForSettingItem::~CProfileAlertForSettingItem()
-    {
-    delete iChangeNotifier;
-    delete iPbkContactEngine;
-    delete iTextSeveralGroups;
-    delete iTextAllCallers;
-    iFullContactArray.Close();
-    iPopupArray.ResetAndDestroy();
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::CompleteConstructionL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::CompleteConstructionL()
-    {
-    // Read localised texts from resource
-    iTextAllCallers = StringLoader::LoadL( R_PROFILE_TEXT_ALL_CALLERS );
-	iTextSeveralGroups = StringLoader::LoadL( R_PROFILE_TEXT_SEVERAL_GROUPS );
-
-    // Create Phonebook contact engine and change notifier
-    iPbkContactEngine = CPbkContactEngine::NewL();
-    iChangeNotifier = iPbkContactEngine->CreateContactChangeNotifierL( this );
-
-    PopulatePopupArrayL();
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::AlertForStatus
-// -----------------------------------------------------------------------------
-//
-CProfileAlertForSettingItem::TAlertForStatus CProfileAlertForSettingItem::AlertForStatus() const
-    {
-    TInt count( iPopupArray.Count() );
-    if( count > 1 )
-        {
-        // Array contains 2 or more items
-        if( SelectionStatus( 0 ) )
-            {
-            // If first item is selected, return EAlertForAllCallers
-            return EAlertForAllCallers;
-            }
-        TInt selectCount( 0 );
-        // Start from index 1, because 0 is "All callers"
-        for( TInt index( 1 ); index < count; index++ )
-            {
-            if( SelectionStatus( index ) )
-                {
-                // Found a selected item, increase counter
-                selectCount++;
-                }
-            }
-        if( selectCount == 1 )
-            {
-            return EAlertForSingleGroup;
-            }
-        return EAlertForSeveralGroups;
-        }
-    // Pop-up array is empty or contains only "All callers"
-    return EAlertForAllCallers;
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::SetSelectionStatus
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::SetSelectionStatus( TInt aIndex, TBool aStatus )
-    {
-    if( aIndex < iPopupArray.MdcaCount()  )
-	    {
-    	iPopupArray.At( aIndex )->SetSelectionStatus( aStatus );
-	    }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::SelectionStatus
-// -----------------------------------------------------------------------------
-//
-TBool CProfileAlertForSettingItem::SelectionStatus( TInt aIndex ) const
-    {
-    if( aIndex < iPopupArray.MdcaCount()  )
-	    {
-	    return iPopupArray.At( aIndex )->SelectionStatus();
-	    }
-	else
-		{
-		return EFalse;
-		}	    
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::PopulatePopupArrayL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::PopulatePopupArrayL()
-    {
-    iPopupArray.ResetAndDestroy();
-    iFullContactArray.Reset();
-
-    // Create first item to popup array, "All callers"
-    CSelectableItem* item = new( ELeave ) CSelectableItem(
-        *iTextAllCallers, EFalse );
-    CleanupStack::PushL( item );
-    item->ConstructL();
-    iPopupArray.AppendL( item ); // Ownership is transferred
-    CleanupStack::Pop( item );
-
-    CContactIdArray* groupIdArray = iPbkContactEngine->Database().GetGroupIdListL();
-    CleanupStack::PushL( groupIdArray );
-    TInt count( groupIdArray->Count() );
-    TContactItemId contactId;
-    CContactGroup* contactGroup = NULL;
-    TPtrC contactGroupName;
-    for( TInt index( 0 ); index < count; index++ )
-        {
-        contactId = ( *groupIdArray )[ index ];
-
-        iFullContactArray.Append( contactId );
-        contactGroup = iPbkContactEngine->ReadContactGroupL( contactId );
-        CleanupStack::PushL( contactGroup );
-        contactGroupName.Set( contactGroup->GetGroupLabelL() );
-
-        item = new( ELeave ) CSelectableItem( contactGroupName, EFalse );
-        CleanupStack::PushL( item );
-        item->ConstructL();
-        iPopupArray.AppendL( item ); // Ownership is transferred
-        CleanupStack::Pop( item ); 
-        
-        CleanupStack::PopAndDestroy( contactGroup );
-        }
-
-    CleanupStack::PopAndDestroy( groupIdArray );
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::CheckAllCallersSetting
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::CheckAllCallersSetting()
-    {
-    TInt count( iPopupArray.Count() );
-    if( count > 0 )
-        {
-        // Check whether the first item, "All callers", is selected or not.
-        if( SelectionStatus( 0 ) )
-            {
-            // "All callers" is selected.
-            // Set other groups unselected.
-            for( TInt index( 1 ); index < count; index++ )
-                {
-                SetSelectionStatus( index, EFalse );
-                }
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::UpdateSettingPageL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::UpdateSettingPageL()
-    {
-    // Closing and opening the database has  because
-    // the database doesn't update its information otherwise
-    iPbkContactEngine->Database().CloseTables();
-    iPbkContactEngine->Database().OpenTablesL();
-
-    RArray<TContactItemId> selectedContacts;
-    CleanupClosePushL( selectedContacts );
-    StoreL( selectedContacts );
-    PopulatePopupArrayL();
-    LoadL( selectedContacts );
-    CleanupStack::PopAndDestroy(); // selectedContacts
-
-    UpdateListBoxTextL(); // Calls SettingTextL()
-
-    if( SettingPage() )
-        {
-        // Pop-up is popped up
-        CProfileAlertForSettingPage* sp =
-            static_cast< CProfileAlertForSettingPage* >( SettingPage() );
-        TInt lastIndex( iPopupArray.Count() - 1 );
-        TInt currentIndex( sp->ListBoxControl()->View()->CurrentItemIndex() );
-        if( currentIndex > lastIndex )
-            {
-            sp->ListBoxControl()->SetCurrentItemIndex( lastIndex );
-            }
-        if( currentIndex < 0 )
-            {
-            sp->ListBoxControl()->SetCurrentItemIndex( 0 );
-            }
-
-        // Must clear listbox view's selections, because if items have been deleted,
-        // non existent selections remain in view's selection array.
-        sp->ListBoxControl()->View()->ClearSelection();
-        // Set the new selection array to setting page
-        sp->SetSelectionItemArrayL( &iPopupArray );
-        // Update possibly changed CBA visibility
-        sp->UpdateCba();
-        }
-    else // Setting page is not visible
-        {
-        LoadL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::StoreL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::StoreL( RArray<TContactItemId>& aArray ) const
-    {
-    aArray.Reset();
-    TInt count( iPopupArray.Count() );
-    // Start from index 1 (0 is 'All callers')
-    for( TInt index( 1 ); index < count; index++ )
-        {
-        // If an item in array is selected
-        if( SelectionStatus( index ) )
-            {
-            // Add its id to external contact array
-            aArray.Append( iFullContactArray[ index - 1 ] );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::LoadL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::LoadL( const RArray<TContactItemId>& aArray )
-    {
-    TInt index( 0 );
-    TInt count( iPopupArray.Count() );
-
-    // Set all selections false
-    for( ; index < count; index++ )
-        {
-        SetSelectionStatus( index, EFalse );
-        }
-
-    TContactItemId contactId;
-    TInt foundCount( 0 );
-    TInt foundIndex;
-    count = aArray.Count();
-    for( index = 0; index < count; index++ )
-        {
-        contactId = aArray[ index ];
-        // Try to find contact id from full contact group array
-        foundIndex = iFullContactArray.Find( contactId );
-        if( foundIndex >= 0 )
-            {
-            // Indices in iFullContactArray are the same as in iPopupArray
-            // except that iPopupArray's 1st item is "All callers". Therefore + 1.
-            SetSelectionStatus( foundIndex + 1, ETrue );
-            // A valid contact id is found, increase counter
-            foundCount++;
-            }
-        }
-
-    // If there were no contact groups selected,
-    // or selected groups are not longer valid, select "All callers"
-    if( foundCount == 0 )
-        {
-        SetSelectionStatus( 0, ETrue );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::StoreL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::StoreL()
-    {
-    StoreL( iExternalContactArray );
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::LoadL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::LoadL()
-    {
-    LoadL( iExternalContactArray );
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::EditItemL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::EditItemL( TBool /* aCalledFromMenu */ )
-    {
-    CProfileAlertForSettingPage* dlg = new( ELeave ) CProfileAlertForSettingPage(
-        SettingPageResourceId(), &iPopupArray );
-    SetSettingPage( dlg ); // Set iSettingPage to indicate that pop-up is displayed
-    dlg->SetSettingPageObserver( this );
-    dlg->ExecuteLD();
-    SetSettingPage( NULL ); // iSettingPage is NULL, pop-up is closed
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::SettingTextL
-// -----------------------------------------------------------------------------
-//
-const TDesC& CProfileAlertForSettingItem::SettingTextL()
-    {
-    switch( AlertForStatus() )
-        {
-        case EAlertForAllCallers:
-            {
-            iSettingText = *iTextAllCallers;
-            break;
-            }
-        case EAlertForSingleGroup:
-            {
-            TInt count( iPopupArray.Count() );
-            if( count > 0 )
-                {
-                // Search the selected group
-                while( !SelectionStatus( --count ) && count > 1 ) {}
-                // Get its name
-                iSettingText = iPopupArray.At( count )->ItemText();
-                }
-            break;
-            }
-        case EAlertForSeveralGroups:
-            {
-            iSettingText = *iTextSeveralGroups;
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    return iSettingText;
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::HandleDatabaseEventL
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::HandleDatabaseEventL( TContactDbObserverEvent aEvent )
-    {
-    if( ( aEvent.iType == EContactDbObserverEventGroupAdded ) || // A contact item group has been added.
-        ( aEvent.iType == EContactDbObserverEventGroupChanged ) || // A contact item group has been updated.
-        ( aEvent.iType == EContactDbObserverEventGroupDeleted ) ) // A contact item group has been deleted from the database.
-        {
-        UpdateSettingPageL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CProfileAlertForSettingItem::HandleSettingPageEventL
-// After settings have been accepted, some checks are made in this method.
-// If "Alert for" is selected , all other groups must be unselected.
-// If nothing is selected , "Alert for" must be selected.
-// -----------------------------------------------------------------------------
-//
-void CProfileAlertForSettingItem::HandleSettingPageEventL(
-    CAknSettingPage* aSettingPage, TAknSettingPageEvent aEventType )
-    {
-    switch( aEventType )
-        {
-        case EEventSettingOked:
-            {
-            // Check that "All callers" is in correct state
-            CheckAllCallersSetting();
-            break;
-            }
-        case EEventSettingCancelled:
-            {
-            // If setting is cancelled, load old values
-            LoadL();
-            break;
-            }
-        case EEventSettingChanged:
-            {
-            // If setting has changed, update CBA visibility
-            static_cast<CProfileAlertForSettingPage*>( aSettingPage )->UpdateCba();
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    CAknSettingItem::HandleSettingPageEventL( aSettingPage, aEventType );
-    }
-
-
-//  End of File