accesspointcontrol/apcontrollistplugin/src/apcontrollistplugincontainer.cpp
branchRCL_3
changeset 58 83ca720e2b9a
parent 0 5a93021fdf25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accesspointcontrol/apcontrollistplugin/src/apcontrollistplugincontainer.cpp	Wed Sep 01 12:23:51 2010 +0100
@@ -0,0 +1,344 @@
+/*
+* 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