cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp
branchRCL_3
changeset 58 83ca720e2b9a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp	Wed Sep 01 12:23:51 2010 +0100
@@ -0,0 +1,426 @@
+/*
+* 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:  Implementation of plugin base class
+*
+*/
+
+
+#include <cmmanager.rsg>
+#include <StringLoader.h>
+
+#include "cmconnselectrbpage.h"
+#include "cmmanager.hrh"
+#include "cmconnsettingsuiimpl.h"
+#include "cmlogger.h"
+
+using namespace CMManager;
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::CCMConnSelectRBPage
+// ---------------------------------------------------------------------------
+//
+CCMConnSelectRBPage::CCMConnSelectRBPage( TInt aDialogResourceId, 
+                                    TInt& aCurrentSelectionIndex, 
+                                    const MDesCArray* aItemArray, 
+                                    CCmManagerImpl& aCmManagerImpl, 
+                                    TCmDCSettingSelectionMode& aSelectionMode,
+                                    RArray<TUint32>& aDestinations,
+                                    TBool areDestinations,
+                                    TBool aOpenDestination,
+                                    TCoeContextName& aContext )
+    : CAknRadioButtonSettingPage( aDialogResourceId, 
+                                  aCurrentSelectionIndex, 
+                                  aItemArray )
+	, iDialogResourceId (aDialogResourceId)
+    , iCmManagerImpl( aCmManagerImpl )
+    , iSelectionMode( aSelectionMode )
+    , iDestinations( aDestinations )
+    , iAreDestinations( areDestinations )
+    , iOpenDestination( aOpenDestination )
+    , iHelpContext ( aContext )
+    , iFirstEnter( ETrue )
+    {
+    CLOG_CREATE;
+    iPrevItem = iDestinations[aCurrentSelectionIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::~CCMConnSelectRBPage
+// ---------------------------------------------------------------------------
+//
+CCMConnSelectRBPage::~CCMConnSelectRBPage()
+    {
+    CLOG_CLOSE;    
+    }
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::OkToExitL
+// Good to know : EAknSoftkeyCancel is never called, because
+// EEikDialogFlagNotifyEsc flag is not set in the resource.
+// ---------------------------------------------------------------------------
+//
+TBool CCMConnSelectRBPage::OkToExitL( TInt aButtonId )
+    {
+    LOGGER_ENTERFN("CCMConnSelectRBPage::OkToExitL");
+
+    // Convert the button presses into commands for the appui & current
+    // view to handle
+    TBool retval( EFalse );
+    if ( aButtonId ==  EAknSoftkeyOk )
+        {
+        ProcessCommandL( ECmManagerUiCmdDestSelect );
+        retval = ETrue;        
+        }
+    else 
+        {
+        if ( aButtonId == EAknSoftkeyOptions )
+            {
+            //*iSelected = iListbox->CurrentItemUid();
+            //retval = ETrue;
+            DisplayMenuL();
+            retval = EFalse;  
+            }
+        else
+            {
+           	retval = ETrue;
+            }
+        }
+
+    return retval;
+    }
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::ProcessCommandL
+// ---------------------------------------------------------------------------
+//
+void CCMConnSelectRBPage::ProcessCommandL( TInt aCommandId )
+    {
+    LOGGER_ENTERFN("CCMConnSelectRBPage::ProcessCommandL");
+    
+    if ( MenuShowing() )
+        {
+        HideMenu();
+        }
+
+    switch ( aCommandId )
+        {
+        case EAknSoftkeyOptions:
+            {
+            DisplayMenuL();
+            break;
+            }
+
+        case EAknSoftkeyCancel:
+            {
+            AttemptExitL(EFalse);   
+            break;
+            }
+
+        case EAknSoftkeyOk:                   
+        case EAknSoftkeySelect:                   
+        case ECmManagerUiCmdDestSelect:
+            {
+            TUint selectedItem = 
+                    iDestinations[ ListBoxControl()->CurrentItemIndex() ];
+            if ( selectedItem == KDestItemAlwaysAsk )
+                {
+                iSelectionMode = EDCAlwaysAsk;
+                }
+            else if ( selectedItem == KDestItemAskOnce )
+                {
+                iSelectionMode = EDCAskOnce;
+                }
+            else if ( selectedItem == KDestItemDefaultConnection )
+                {
+                iSelectionMode = EDCDefaultConnection;
+                }
+            else if ( selectedItem == KDestItemUncategorized )
+                {
+                iSelectionMode = EDCConnectionMethod;
+                }
+            else 
+                {
+                if (iAreDestinations)
+                    {
+                    iSelectionMode = EDCDestination;
+                    }
+                else
+                    {
+                    iSelectionMode = EDCConnectionMethod;                        
+                    }    
+                }
+            //iId is to be defined in the caller class   
+            SelectCurrentItemL();         
+            AttemptExitL(ETrue);
+            break;
+            }
+
+        case ECmManagerUiCmdCMSelect:
+            {
+            iSelectionMode = EDCConnectionMethod;
+            SelectCurrentItemL();         
+            AttemptExitL( ETrue );                   
+            break;
+            }
+        case EAknCmdHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                                    iEikonEnv->EikAppUi()->AppHelpContextL() );
+            }
+            break;
+        default:
+            {
+            break;
+            }
+        }
+    }    
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::DynInitMenuPaneL
+// ---------------------------------------------------------------------------
+//
+void CCMConnSelectRBPage::DynInitMenuPaneL( TInt aResourceId,
+                                         CEikMenuPane* aMenuPane )
+    {
+    LOGGER_ENTERFN("CCMConnSelectRBPage::DynInitMenuPaneL");
+
+    CAknSettingPage::DynInitMenuPaneL( aResourceId, aMenuPane );
+    if ( aResourceId == R_SELECT_NETW_CONN_MENU )
+        {
+    	if (!iCmManagerImpl.IsHelpOn())
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp );		    
+            }
+        TUint32 currentItem = 
+                    iDestinations[ ListBoxControl()->CurrentItemIndex() ];
+        
+        // Always Ask ( always the first item )
+        if ( (currentItem == KDestItemAlwaysAsk) || 
+             (currentItem == KDestItemAskOnce) || 
+             (currentItem == KDestItemDefaultConnection) ||
+              !iOpenDestination )
+            {
+            aMenuPane->SetItemDimmed( ECmManagerUiCmdCMSelect, ETrue );
+            }        
+        else if ( ( currentItem != KDestItemAlwaysAsk ) && 
+                  ( currentItem != KDestItemAskOnce ) && 
+                  ( currentItem != KDestItemDefaultConnection ) &&
+                  ( currentItem != KDestItemUncategorized ))
+            {
+            CCmDestinationImpl* destImpl = iCmManagerImpl.DestinationL( currentItem );
+            
+            if ( !destImpl->ConnectionMethodCount() )
+                {
+                aMenuPane->SetItemDimmed( ECmManagerUiCmdCMSelect, ETrue );                
+                }
+                
+            delete destImpl;
+            }
+        else
+            {
+            RArray<TUint32> uncatArray( KCmArraySmallGranularity );
+            CleanupClosePushL( uncatArray );
+            iCmManagerImpl.ConnectionMethodL( uncatArray );
+            
+            // Uncategorised - cannot be selected
+            if ( currentItem == KDestItemUncategorized )
+                {
+                aMenuPane->SetItemDimmed( ECmManagerUiCmdDestSelect, ETrue );
+                }
+            CleanupStack::PopAndDestroy( &uncatArray );
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CCMConnSelectRBPage::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
+                                               TEventCode aType )    
+    {
+    LOGGER_ENTERFN("CCMConnSelectRBPage::OfferKeyEventL");
+    
+    TKeyResponse retVal ( EKeyWasNotConsumed );
+    // save for the future use
+    iPrevItem = iDestinations[ListBoxControl()->CurrentItemIndex()];
+    
+    TKeyEvent aKeyEventmy = aKeyEvent;
+    if ( aKeyEventmy.iCode == EKeyEnter )
+        {
+        if ( iFirstEnter )
+            {//pressing the enter key at the first time will be changed
+             //to an up arrow key so the first item in the list will be highlighted
+            iFirstEnter = EFalse;
+            aKeyEventmy.iScanCode = EStdKeyUpArrow;
+            aKeyEventmy.iCode = EKeyUpArrow;
+            }
+        else
+            {//change back to true for the next session
+            iFirstEnter=ETrue;
+            }
+        }
+    else if ( aKeyEventmy.iScanCode == EStdKeyDownArrow || aKeyEventmy.iScanCode == EStdKeyUpArrow )
+             {
+             //we will have highligt so the following enter key should select the item
+             iFirstEnter = EFalse;
+             }
+    
+    switch ( aKeyEventmy.iScanCode )
+        {
+        case EStdKeyDownArrow:
+        case EStdKeyUpArrow:
+            {
+            if ( iOpenDestination ) //only if we are on 'destination level' and we are able to
+                //open destinations
+                {            
+                // If focus is on the 'uncategorised' destination, 
+                // change the soft key to 'Open'
+                if ( iDestinations[ ListBoxControl()->CurrentItemIndex() ] == 
+                                                        KDestItemUncategorized )
+                    {
+                    HBufC* text = StringLoader::LoadLC( R_QTN_MSK_OPEN );
+                    Cba()->SetCommandL( EAknSoftkeySelect, *text );
+                    Cba()->DrawNow();
+                    CleanupStack::PopAndDestroy( text );                
+                    }
+                else
+                    {
+                    HBufC* text = StringLoader::LoadLC( R_QTN_MSK_SELECT );
+                    Cba()->SetCommandL( EAknSoftkeySelect, *text );
+                    Cba()->DrawNow();
+                    CleanupStack::PopAndDestroy( text );
+                    }
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    retVal = CAknRadioButtonSettingPage::OfferKeyEventL( aKeyEventmy, aType );
+    
+    return retVal;
+    }
+
+// --------------------------------------------------------------------------
+// CCMConnSelectRBPage::GetHelpContext
+// --------------------------------------------------------------------------
+//
+void CCMConnSelectRBPage::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    LOGGER_ENTERFN("CCMConnSelectRBPage::GetHelpContext");
+        
+    aContext.iMajor = KHelpUidPlugin;
+    aContext.iContext = iHelpContext; 
+    }
+
+// ---------------------------------------------------------------------------
+// CCMConnSelectRBPage::HandleListBoxEventL
+// ---------------------------------------------------------------------------
+//
+void CCMConnSelectRBPage::HandleListBoxEventL(CEikListBox* aListBox, 
+		MEikListBoxObserver::TListBoxEvent aEventType)
+	{
+    LOGGER_ENTERFN("CCMConnSelectRBPage::HandleListBoxEventL");
+        
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+
+		if (iDialogResourceId == R_RADIO_BUTTON_SETTING_PAGE_OK_CANCEL)
+			{
+			// Call base class implementation and return if no options menu
+			CAknRadioButtonSettingPage::HandleListBoxEventL(aListBox, aEventType);
+		
+	    	switch ( aEventType )
+    	    	{
+        		case EEventEnterKeyPressed:
+        		case EEventItemDoubleClicked:
+        		case EEventItemSingleClicked:
+				case EEventItemClicked:        	
+            		{
+            		ProcessCommandL(ECmManagerUiCmdDestSelect);
+            		break;
+            		}
+
+        		default:
+	            	{
+    	        	break;
+            		}
+        		}
+			return;
+			}
+		
+        switch ( aEventType )
+            {
+            // All these actions are activating the listbox item
+            case MEikListBoxObserver::EEventEnterKeyPressed:
+            case MEikListBoxObserver::EEventItemActioned:
+                CAknRadioButtonSettingPage::HandleListBoxEventL(aListBox, aEventType);
+                break;
+
+            case MEikListBoxObserver::EEventItemClicked:
+            case MEikListBoxObserver::EEventItemSingleClicked:
+                if (iPrevItem == iDestinations[ListBoxControl()->CurrentItemIndex()])
+                    {
+                    ProcessCommandL(ECmManagerUiCmdDestSelect);
+                    }
+                else
+                    {
+                    // save for the later use
+                    iPrevItem = iDestinations[ListBoxControl()->CurrentItemIndex()];
+					    
+		            if ( iOpenDestination ) //only if we are on 'destination level' and we are able to
+        		        //open destinations
+                	    {            
+                	    // If focus is on the 'uncategorised' destination, 
+                	    // change the soft key to 'Open'
+                	    if ( iDestinations[ ListBoxControl()->CurrentItemIndex() ] == 
+		                                                        KDestItemUncategorized )
+        		            {
+                	        HBufC* text = StringLoader::LoadLC( R_QTN_MSK_OPEN );
+                   		    Cba()->SetCommandL( EAknSoftkeySelect, *text );
+                   		    Cba()->DrawNow();
+                   		    CleanupStack::PopAndDestroy( text );                
+                   		    }
+                	    else
+                   		    {
+                   		    HBufC* text = StringLoader::LoadLC( R_QTN_MSK_SELECT );
+                   		    Cba()->SetCommandL( EAknSoftkeySelect, *text );
+                   		    Cba()->DrawNow();
+                   		    CleanupStack::PopAndDestroy( text );
+                   		    }
+                         CAknRadioButtonSettingPage::SelectCurrentItemL();
+                	     }
+                    }
+                break;
+                
+            case MEikListBoxObserver::EEventItemDoubleClicked:
+                ProcessCommandL(ECmManagerUiCmdDestSelect);
+                break;
+
+            default:
+                CAknRadioButtonSettingPage::HandleListBoxEventL(aListBox, aEventType);            
+                break;
+            }
+        }
+    else
+        {
+        CAknRadioButtonSettingPage::HandleListBoxEventL(aListBox, aEventType);
+		}		
+	}
+
+