accesspointcontrol/apcontrollistplugin/src/apcontrollistplugincontainer.cpp
author Simon Howkins <simonh@symbian.org>
Thu, 18 Nov 2010 15:05:52 +0000
branchRCL_3
changeset 76 40780c2f3a6b
parent 0 5a93021fdf25
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* 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:  APControl list Plugin container
*
*/


// INCLUDE FILES
#include <hlplch.h>          //for help
#include <csxhelp/cp.hlp.hrh>


#include <akntitle.h>        //for CAknTitlePane
#include <barsread.h>        //for TResourceReader
#include <aknlists.h>        //for CListBox
#include <aknnavi.h>         //for CNaviPane
#include <aknnavide.h>       //for CAknNavigationDecorator
#include <apcontrollistpluginrsc.rsg>
#include <etelmm.h>

#include "apcontrollistplugincontainer.h"
#include "apcontrollistplugin.h"
#include "apcontrollistplugin.hrh"
#include "apcontrollistbox.h"
#include "apcontrollistboxmodel.h"
#include "apcontrollistpluginlogger.h"

// CONSTANTS
_LIT( KEmpty, "");

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

// ---------------------------------------------------------
// CAPControlListPluginContainer::ConstructL
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::ConstructL( const TRect& aRect, 
                                              MEikListBoxObserver* aListObserver )
    {       
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::ConstructL" ) ) );
    if ( !iListBox )
        {

        TResourceReader rr;

        //creates resource reader. reader is pushed to cleaup stack
        ControlEnv()->CreateResourceReaderLC( rr, R_APCONTROL_LISTBOX );

        CreateWindowL();

        iListBox = new( ELeave ) CApControlListbox;
        iListBox->SetContainerWindowL( *this );

        iListBox->CreateScrollBarFrameL( ETrue );
        iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
                                        CEikScrollBarFrame::EOff, 
                                        CEikScrollBarFrame::EAuto );

        iListBox->ConstructFromResourceL( rr );
	    
	    //Put in empty text thing
	    iListBox->SetListEmptyTextL();
        iListBox->SetListBoxObserver( aListObserver );

    	iModel = new( ELeave )CApControlListboxModel;
    	iModel->ConstructL();
    	iListBox->Model()->SetItemTextArray( iModel );//give ownership of
    	// iModel to iListBox
        
        CleanupStack::PopAndDestroy(); //resource reader
        
        SetRect( aRect );
                                                           
        HandleResourceChange( KEikDynamicLayoutVariantSwitch );
        }      
        

    TitlePaneTextsL( R_APCLPLUGIN_TITLE );
    ActivateL();
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ConstructL" ) ) );
    }
    
// ---------------------------------------------------------
// CAPControlListPluginContainer::AddToListBoxL
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::AddToListBoxL(TPtrC& newItem)
    {
    CLOG( ( ESelector, 0, _L( 
        "-> CAPControlListPluginContainer::AddToListBoxL" ) ) );
	MDesCArray* textArray = iModel->ItemTextArray();
	CDesCArray* listBoxItems = static_cast<CDesCArray*>(textArray);

	TBuf<RMobilePhone::KMaxApnName> item;
	// RMobilePhone::KMaxApnName - label length + TAB = 
	// RMobilePhone::KMaxApnName 
	item.Format(_L("\t%S"), &newItem); 
	listBoxItems->AppendL(item);

	iListBox->HandleItemAdditionL(); // Update listbox
	iListBox->SetCurrentItemIndexAndDraw(
	    listBoxItems->Count() - 1); // select new item
    CLOG( ( ESelector, 0, _L( 
        "<- CAPControlListPluginContainer::AddToListBoxL" ) ) );
    }
// ---------------------------------------------------------
// CAPControlListPluginContainer::CurrentItemIndex
// ---------------------------------------------------------
//
TInt CAPControlListPluginContainer::CurrentItemIndex()
    {
    CLOG( ( ESelector, 0, _L( 
        "-> CAPControlListPluginContainer::CurrentItemIndex" ) ) );
    CLOG( ( ESelector, 0, _L( 
        "<- CAPControlListPluginContainer::CurrentItemIndex" ) ) );
	return iListBox->CurrentItemIndex(); 
    }
    
// ---------------------------------------------------------
// CAPControlListPluginContainer::SetCurrentItemIndex
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::SetCurrentItemIndex(TInt index)
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::SetCurrentItemIndex" ) ) );
	iListBox->SetCurrentItemIndexAndDraw(index); 
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::SetCurrentItemIndex" ) ) );
    }
    
// ---------------------------------------------------------
// CAPControlListPluginContainer::RemoveFromListBoxL
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::RemoveFromListBoxL()
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::RemoveFromListBoxL" ) ) );
	TInt currentItem = iListBox->CurrentItemIndex();

	MDesCArray* textArray = iModel->ItemTextArray();
	CDesCArray* listBoxItems = static_cast<CDesCArray*>(textArray);
	listBoxItems->Delete(currentItem, 1); // 1 = how many items to delete
	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(iListBox, currentItem, ETrue);
	iListBox->DrawNow(); // Update listbox    
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::RemoveFromListBoxL" ) ) );
	}

// ---------------------------------------------------------
// CAPControlListPluginContainer::~CAPControlListPluginContainer
// ---------------------------------------------------------
//
CAPControlListPluginContainer::~CAPControlListPluginContainer()
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::~CAPControlListPluginContainer" ) ) );
    delete iListBox;
    if (iNaviPane)
        {
        iNaviPane->Pop(iNaviDecorator);        
        }
    delete iNaviDecorator;    
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::~CAPControlListPluginContainer" ) ) );
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::CountComponentControls
// ---------------------------------------------------------
//
TInt CAPControlListPluginContainer::CountComponentControls() const
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::CountComponentControls" ) ) );
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::CountComponentControls" ) ) );
    return 1;
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::ComponentControl
// ---------------------------------------------------------
//
CCoeControl* CAPControlListPluginContainer::ComponentControl( TInt aIndex ) const
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::ComponentControl" ) ) );
    switch( aIndex )
        {
        case 0 :
            {
    		CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ComponentControl 1" ) ) );
            return iListBox;
            }
        default:
            {
    		CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ComponentControl 2" ) ) );
            return 0;
            } 
        }
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::OfferKeyEventL
// ---------------------------------------------------------
//
TKeyResponse CAPControlListPluginContainer::OfferKeyEventL( 
                                            const TKeyEvent& aKeyEvent, 
                                            TEventCode aType )
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::OfferKeyEventL" ) ) );
    TKeyResponse response = EKeyWasNotConsumed;
    if ( aType == EEventKey )
        {
        response = iListBox->OfferKeyEventL( aKeyEvent, aType );
        }
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::OfferKeyEventL" ) ) );
    return response;
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::SizeChanged
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::SizeChanged()
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::SizeChanged" ) ) );
    iListBox->SetRect( Rect() );
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::SizeChanged" ) ) );
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::GetHelpContext()
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::GetHelpContext( TCoeHelpContext& aContext) const
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::GetHelpContext" ) ) );
    aContext.iMajor = KHelpUidAPControlList;
    aContext.iContext = KACL_HLP_MAIN;
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::GetHelpContext" ) ) );
    }

// ---------------------------------------------------------
// CAPControlListPluginContainer::TitlePaneTextsL
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::TitlePaneTextsL( TInt aResourceId )
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::TitlePaneTextsL" ) ) );
    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
    CAknTitlePane* titlePane =
        ( CAknTitlePane* )statusPane->ControlL(
                            TUid::Uid( EEikStatusPaneUidTitle ) );

    //creates and sets title. title is pushed to cleanup stack
    HBufC* title = iEikonEnv->AllocReadResourceLC( aResourceId );
    titlePane->SetTextL( *title );

    iNaviPane = STATIC_CAST( CAknNavigationControlContainer*, 
                 statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
    
    iNaviDecorator = iNaviPane->CreateNavigationLabelL( KEmpty );
    iNaviPane->PushL( *iNaviDecorator );

    CleanupStack::PopAndDestroy(title);
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::TitlePaneTextsL" ) ) );
    }


// ---------------------------------------------------------
// CAPControlListPluginContainer::HandleResourceChange
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::HandleResourceChange( TInt aType )
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::HandleResourceChange" ) ) );
    CCoeControl::HandleResourceChange( aType );
    if( aType == KEikDynamicLayoutVariantSwitch )
        {
        TRect mainPaneRect;
        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, 
                                           mainPaneRect );
        SetRect( mainPaneRect );
        DrawNow();
        }
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::HandleResourceChange" ) ) );
    }
    
// ---------------------------------------------------------
// CAPControlListPluginContainer::FocusChanged
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::FocusChanged( TDrawNow aDrawNow )
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::FocusChanged" ) ) );
    CCoeControl::FocusChanged( aDrawNow );
    if( iListBox )
        {
        iListBox->SetFocus( IsFocused() );
        }        
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::FocusChanged" ) ) );
    }
           
// ---------------------------------------------------------
// CAPControlListPluginContainer::CurrentItemNameL
// ---------------------------------------------------------
//
TInt CAPControlListPluginContainer::NumberOfItems()  const
    {
    CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::NumberOfItems" ) ) );
    CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::NumberOfItems" ) ) );
    return iListBox->Model()->ItemTextArray()->MdcaCount();
    }
    
// ---------------------------------------------------------
// CAPControlListPluginContainer::WriteToNaviPaneL
// ---------------------------------------------------------
//
void CAPControlListPluginContainer::WriteToNaviPaneL( TInt aResourceId )
    {
    CLOG( ( ESelector, 0, 
        _L( "-> CAPControlListPluginContainer::WriteToNaviPaneL" ) ) );
    HBufC* text = iCoeEnv->AllocReadResourceLC( aResourceId );
    if ( iNaviDecorator )
        {
        iNaviPane->Pop(iNaviDecorator);
        delete iNaviDecorator;
        iNaviDecorator = NULL;// CodeScanner needs this line
        }
    iNaviDecorator = iNaviPane->CreateNavigationLabelL( *text );
    iNaviPane->PushL( *iNaviDecorator );
    
    CleanupStack::PopAndDestroy( text );
    CLOG( ( ESelector, 0, 
        _L( "<- CAPControlListPluginContainer::WriteToNaviPaneL" ) ) );
    }
    
// End of File