voiceui/vcommand/src/vcsettingscontainer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:46:30 +0200
changeset 0 bf1d17376201
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2004-2005 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:  Settings container
*
*/


// INCLUDE FILES
#include <eiktxlbx.h>
#include <aknlists.h>       // CAknSingleGraphicStyleListBox
#include <barsread.h>       // TResourceReader
#include <eikclbd.h>        // CColumnListBoxData
#include <akntitle.h>
#include <eikspane.h>
#include <featmgr.h>
#include <hlplch.h>
#include <StringLoader.h>
#include <AknQueryDialog.h>
#include <aknnotewrappers.h>
#include <csxhelp/vc.hlp.hrh>

#include <vcommand.rsg>
#include "vcapp.h"
#include "vcappui.h"
#include "vcsettingscontainer.h"
#include "vcsettingsengine.h"
#include "vcsettingsview.h"
#include "vcsettingslist.h"
#include "vcommandconstants.h"

// ========================= MEMBER FUNCTIONS =================================

// ----------------------------------------------------------------------------
// CVCSettingsContainer::CVCSettingsContainer
// C++ constructor
// ----------------------------------------------------------------------------
//
CVCSettingsContainer::CVCSettingsContainer( CEikButtonGroupContainer& aCbaGroup ):
                                            iCbaGroup( aCbaGroup )
    {
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::ConstructL
// Symbian OS 2nd phase constructor
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::ConstructL( const TRect& aRect )
    {
    CEikStatusPane* sp = STATIC_CAST( CAknAppUi*, iCoeEnv->AppUi() )->StatusPane();
    CAknTitlePane* title = STATIC_CAST( CAknTitlePane*,
            sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );

    TResourceReader rReader;
    iCoeEnv->CreateResourceReaderLC( rReader, TitleResourceId() );
    title->SetFromResourceL( rReader );
    CleanupStack::PopAndDestroy(); //rReader
    
    CreateWindowL();
    iSettingsList = new ( ELeave ) CVCSettingsList();
    iSettingsList->SetContainerWindowL( *this );
    iSettingsList->ConstructL();
    iSettingsList->ListBox()->SetListBoxObserver( this );
    
    SetRect(aRect);
    ActivateL();
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::~CVCSettingsContainer
// ----------------------------------------------------------------------------
//
CVCSettingsContainer::~CVCSettingsContainer()
    {
    delete iSettingsList; 
	}


// ----------------------------------------------------------------------------
// CVCSettingsContainer::CountComponentControls
// From CCoeControl return the number of controls owned
// ----------------------------------------------------------------------------
//
TInt CVCSettingsContainer::CountComponentControls() const
    {
    return 1;
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::ComponentControl
// From CCoeControl returns a control
// ----------------------------------------------------------------------------
//
CCoeControl* CVCSettingsContainer::ComponentControl( TInt /*aIndex*/ ) const
    {
    return iSettingsList;
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::EditCurrentL
// Open setting page for currently selected setting item.
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::EditCurrentL( TBool aCalledFromMenu )
    {
    TInt index = iSettingsList->ListBox()->CurrentItemIndex();

    iSettingsList->EditItemL( index, aCalledFromMenu );
	}


// ----------------------------------------------------------------------------
// CVCSettingsContainer::ResetL
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::ResetL()
    {
    CAknQueryDialog* dlg = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone);
    if ( dlg->ExecuteLD(R_VC_RESET_ADAPTATION_DIALOG) )
        {
        CVCSettingsEngine*	engine = CVCSettingsEngine::NewL();
        CleanupStack::PushL( engine );
		engine->ResetAdaptationL();
		CleanupStack::PopAndDestroy( engine ); // engine
		}
	}


// ----------------------------------------------------------------------------
// CVCSettingsContainer::SaveSettingsL
// Save all settings.
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::SaveSettingsL()
    {
    iSettingsList->SaveSettingsL();
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::CurrentItemIndex
// ----------------------------------------------------------------------------
//
TInt CVCSettingsContainer::CurrentItemIndex() const
	{
	return iSettingsList->ListBox()->CurrentItemIndex();
	}


// ----------------------------------------------------------------------------
// CVCSettingsContainer::ItemListSize
// ----------------------------------------------------------------------------
//
TInt CVCSettingsContainer::ItemListSize() const 
    {
    return iSettingsList->ListBox()->Model()->ItemTextArray()->MdcaCount();
    }
    
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::CurrentItemIndex
// ----------------------------------------------------------------------------
//
TInt CVCSettingsContainer::CurrentItemIdentifier() const
	{
	CAknSettingItemArray* itemArray = iSettingsList->SettingItemArray();
	TInt itemIndex = itemArray->ItemIndexFromVisibleIndex( CurrentItemIndex() );
    CAknSettingItem* settingItem = itemArray->At( itemIndex );
    return settingItem->Identifier();
	}


// ----------------------------------------------------------------------------
// CVCSettingsContainer::OfferKeyEventL
// Key event handling
// ----------------------------------------------------------------------------
//
TKeyResponse CVCSettingsContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
                                                   TEventCode aType )
    {  
    TKeyResponse ret = iSettingsList->OfferKeyEventL( aKeyEvent, aType );
    
    // Change MSK
    if( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow )
        {
        SetMiddleSoftkeyLabelL();
        }
        
    return ret;
    }


// ----------------------------------------------------------------------------
// CVCSettingsContainer::GetHelpContext
// Gives the help context to be displayed
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
    {
    aContext.iMajor = KUidHelp; 
    aContext.iContext = KHLP_VC_SET;
    }
    
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::TitleResourceId()
// Returns profiles views status pane title .
// ----------------------------------------------------------------------------
//
TInt CVCSettingsContainer::TitleResourceId() const
    {
    return R_VC_MAIN_VIEW_TITLE;
    }
    
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::IsTrainingOn
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::FocusChanged(TDrawNow aDrawNow)
	{
    if( iSettingsList )
        {
        iSettingsList->SetFocus( IsFocused(), aDrawNow );
        }
    }
     
     
// ----------------------------------------------------------------------------
// CVCSettingsContainer::HandleResourceChange
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::HandleResourceChange(TInt aType)
    {   
    if ( aType == KEikDynamicLayoutVariantSwitch )
    	{
        TRect mainPaneRect;
        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
                                           mainPaneRect);
        SetRect( mainPaneRect );
        }
    CCoeControl::HandleResourceChange( aType );
    }     
        
        
// ----------------------------------------------------------------------------
// CVCSettingsContainer::SizeChanged
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::SizeChanged()
    {
    if (iSettingsList)
        {
        iSettingsList->SetRect(Rect());
        }
    }
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::HandleControlEventL
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::HandleControlEventL( CCoeControl* /*aControl*/,
                                                TCoeEvent /*aEventType*/)
    {
    }
    
// ---------------------------------------------------------------------------
// CVCSettingsContainer::HandleListBoxEventL
// ---------------------------------------------------------------------------
//
void CVCSettingsContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/,
                                                TListBoxEvent aEventType )
    {
    switch ( aEventType ) 
        {
        case EEventEnterKeyPressed:
        case EEventItemSingleClicked:
            {
            if ( CurrentItemIdentifier() == EVCResetItem )
                {
                ResetL();
                }
            else
                {
                EditCurrentL( EFalse );
                }            
            break;
            }
            
        default:
            break;
        }
    }

    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::SetMiddleSoftkeyLabelL
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::SetMiddleSoftkeyLabelL() const
    {    
    RemoveCommandFromMSK();
    
    if( CurrentItemIdentifier() == EVCResetItem )
        {
        DoSetMiddleSoftKeyLabelL( R_QTN_VC_SET_MSK_RESET, EVCCmdReset );
        }
    else
        {
        DoSetMiddleSoftKeyLabelL( R_QTN_VC_SET_MSK_CHANGE, EVCCmdChange );
        }
    }
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::SetMiddleSoftKeyLabelL
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::DoSetMiddleSoftKeyLabelL( const TInt aResourceId,
                                                const TInt aCommandId  ) const
    {
    HBufC* mskText = StringLoader::LoadLC( aResourceId );
    TPtr mskPtr = mskText->Des();
    iCbaGroup.AddCommandToStackL( KVcMskControlID, aCommandId, mskPtr );
    CleanupStack::PopAndDestroy( mskText );
    }
    
// ----------------------------------------------------------------------------
// CVCSettingsContainer::RemoveCommandFromMSK
// ----------------------------------------------------------------------------
//
void CVCSettingsContainer::RemoveCommandFromMSK() const
    {
    iCbaGroup.RemoveCommandFromStack( KVcMskControlID, EVCCmdChange );
    iCbaGroup.RemoveCommandFromStack( KVcMskControlID, EVCCmdReset );
    }  

// End of File