cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv6.cpp
changeset 0 5a93021fdf25
child 24 c45d4fe2ff0a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgipv6.cpp	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,345 @@
+/*
+* 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:  WLAN Ipv6 settings dialog
+*
+*/
+
+#include <StringLoader.h>
+#include <akntitle.h>
+#include <aknnavide.h>
+#include <cmcommonui.h>
+#include <cmwlanui.rsg>
+#include <cmmanager.rsg>
+#include <csxhelp/cp.hlp.hrh>
+
+#include <cmpluginwlandef.h>
+#include "cmpluginwlan.h"
+#include "cmpwlansettingsdlgipv6.h"
+#include "cmwlancommonconstants.h"
+#include "cmpluginmenucommands.hrh"
+#include "cmpluginmultilinedialog.h"
+#include <cmcommonconstants.h>
+#include <cmpsettingsconsts.h>
+#include "cmmanagerimpl.h"
+
+using namespace CMManager;
+
+const TUint32 KIPv6SelectionItems[] = 
+    {
+    R_QTN_SET_DNS_SERVERS_AUTOMATIC,
+    R_QTN_SET_IP_WELL_KNOWN,
+    R_QTN_SET_IP_USER_DEFINED,
+    0
+    };
+    
+// ================= MEMBER FUNCTIONS =======================================
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::NewL
+// Two-phase dconstructor, second phase is ConstructAndRunLD
+// --------------------------------------------------------------------------
+//
+CmPluginWlanSettingsDlgIpv6* CmPluginWlanSettingsDlgIpv6::NewL( 
+                                            CCmPluginBaseEng& aCmPluginBase )
+	{
+	CmPluginWlanSettingsDlgIpv6* self = 
+	            new (ELeave) CmPluginWlanSettingsDlgIpv6( aCmPluginBase );
+	return self;
+	}
+	
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::CmPluginWlanSettingsDlgIpv6
+// --------------------------------------------------------------------------
+//
+CmPluginWlanSettingsDlgIpv6::CmPluginWlanSettingsDlgIpv6( 
+                                         CCmPluginBaseEng& aCmPluginBase ):
+    CmPluginBaseSettingsDlgIp( aCmPluginBase ) ,
+    iParent( NULL )
+    {
+    iHelpContext = KSET_HLP_AP_WLAN_AS_IPV6;
+    }
+    
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::~CmPluginWlanSettingsDlgIpv6
+// --------------------------------------------------------------------------
+//
+CmPluginWlanSettingsDlgIpv6::~CmPluginWlanSettingsDlgIpv6()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::ConstructAndRunLD
+// --------------------------------------------------------------------------
+//
+TInt CmPluginWlanSettingsDlgIpv6::ConstructAndRunLD()
+    {
+    CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+    cmMgr.WatcherRegisterL( this );
+    
+    return CmPluginBaseSettingsDlgIp::ConstructAndRunLD();
+    }
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::UpdateListBoxContentBearerSpecificL
+// --------------------------------------------------------------------------
+//
+void CmPluginWlanSettingsDlgIpv6::UpdateListBoxContentBearerSpecificL( 
+                                                    CDesCArray& aItemArray )
+    {
+    TInt value( 0 );
+    
+    // DNS SERVERS IP ADDRESS
+    switch ( GetIPv6DNSTypeL( EWlanIp6NameServer1,
+                              EWlanIp6NameServer2 ) )
+        {
+        case EIpv6DNSDynamic:
+            {
+            value = R_QTN_SET_DNS_SERVERS_AUTOMATIC;
+            break;
+            }
+        case EIpv6DNSWellKnown:
+            {
+            value = R_QTN_SET_IP_WELL_KNOWN;
+            break;
+            }
+        case EIpv6DNSUserDefined:
+            {
+            value = R_QTN_SET_IP_USER_DEFINED;
+            break;
+            }
+        default:
+            {
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        }
+    AppendSettingTextsL( aItemArray,
+                         EWlanIp6DNSAddrFromServer,
+                         value );
+    }    
+
+//---------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::ShowPopupSettingPageL
+//---------------------------------------------------------------------------
+//
+TBool CmPluginWlanSettingsDlgIpv6::ShowPopupSettingPageL( TUint32 aAttribute, 
+                                                          TInt aCommandId )
+    {    
+    TBool retval = EFalse;
+    switch ( aAttribute )
+        {
+        case EWlanIp6DNSAddrFromServer:        
+            {
+            ShowPopupIPv6DNSEditorL( KIPv6SelectionItems, 
+                                     EWlanIp6DNSAddrFromServer,
+                                     EWlanIp6NameServer1,
+                                     EWlanIp6NameServer2 );
+            break;
+            }
+        default:
+            {
+            CmPluginBaseSettingsDlgIp::ShowPopupSettingPageL( aAttribute, 
+                                                               aCommandId );
+            break;            
+            }
+        }
+    return retval;
+    }
+    
+//---------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::InitTextsL
+// called before the dialog is shown to initialize localized textual data
+//---------------------------------------------------------------------------
+//
+void CmPluginWlanSettingsDlgIpv6::InitTextsL()
+    {
+    // set pane text if neccessary...
+    // pane text needed if not pop-up...
+    if ( iEikonEnv )
+        {
+        iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
+        iTitlePane = ( CAknTitlePane* )iStatusPane->ControlL(
+                                TUid::Uid( EEikStatusPaneUidTitle ) );
+
+        iOldTitleText = iTitlePane->Text()->AllocL();
+        HBufC* title = StringLoader::LoadLC ( R_QTN_SET_IPV6_SETTINGS );
+        iTitlePane->SetTextL( *title ) ;
+        CleanupStack::PopAndDestroy(title);                         
+        iNaviPane = ( CAknNavigationControlContainer* ) 
+                        iStatusPane->ControlL( 
+                                TUid::Uid( EEikStatusPaneUidNavi ) );
+        iNaviDecorator = iNaviPane->CreateNavigationLabelL( KNullDesC );
+        iNaviPane->PushL( *iNaviDecorator );
+        }
+    }    
+    
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::ProcessCommandL
+// --------------------------------------------------------------------------
+//
+void CmPluginWlanSettingsDlgIpv6:: ProcessCommandL( TInt aCommandId )
+    {
+    if ( MenuShowing() )
+        {
+        HideMenu();
+        }
+
+    switch ( aCommandId )
+        {
+        case EPluginBaseCmdExit:
+            {
+            iExitReason = KDialogUserExit;
+            }
+        // fall-through intended here
+        case EAknSoftkeyBack:
+            {
+            CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+            cmMgr.WatcherUnRegister();
+            
+            TryExitL( iExitReason );
+            break;
+            }           
+        case EAknSoftkeyOk:
+        case EPluginBaseCmdChange:
+            {
+            TInt attrib = iSettingIndex->At( iListbox->CurrentItemIndex() );
+            ShowPopupSettingPageL( attrib, aCommandId);
+            break;
+            }
+        default:
+            {
+            CmPluginBaseSettingsDlgIp::ProcessCommandL( aCommandId );
+            break;            
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::OkToExitL
+// --------------------------------------------------------------------------
+//
+TBool CmPluginWlanSettingsDlgIpv6::OkToExitL( TInt aButtonId )
+    {
+    TBool retval( EFalse );
+    
+    switch ( aButtonId )
+        {
+        case EAknSoftkeyBack:
+        case EAknSoftkeyExit:
+        case KDialogUserExit:
+            {
+            CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+            cmMgr.WatcherUnRegister();
+            } // Continue to call base setting dialog view
+        default:
+            {
+            retval = CmPluginBaseSettingsDlgIp::OkToExitL( aButtonId );
+            break;
+            }
+        }
+    return retval;
+    }
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::RegisterParentView
+// --------------------------------------------------------------------------
+//
+void CmPluginWlanSettingsDlgIpv6::RegisterParentView( CCmParentViewNotifier* aParent )
+    {
+    iParent = aParent;
+    }
+
+// --------------------------------------------------------------------------
+// CmPluginWlanSettingsDlgIpv6::CommsDatChangesL
+// --------------------------------------------------------------------------
+//
+void CmPluginWlanSettingsDlgIpv6::CommsDatChangesL()
+    {
+    CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+    CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
+    
+    if ( parentDest )
+        {
+        if( !cmMgr.DestinationStillExistedL( parentDest ) )
+            {
+            if( iParent )
+                {
+                iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
+                }
+            
+            // cmMgr.WatcherUnRegister();
+            // If parent destination is deleted by somebody then the dialog must exit back to main view
+            iExitReason = KDialogUserExit; // cmMgr.WatcherUnRegister will be done in function OkToExitL in this case
+            TryExitL( iExitReason );
+                
+            cmMgr.RemoveDestFromPool( parentDest );
+            delete parentDest;
+            return;
+            }
+            
+        if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) )
+            {
+            if( iParent )
+                {
+                iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination );
+                }
+            
+            cmMgr.WatcherUnRegister();
+            // In this case, the dialog can go back to the parent view
+            TryExitL( iExitReason );
+            
+            cmMgr.RemoveDestFromPool( parentDest );
+            delete parentDest;
+            return;
+            }
+        
+        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
+        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
+        // after this call when some Iap is deleted.
+        if( iParent )
+            {
+            iParent->NotifyParentView( KCmNotifiedIapDisappear );
+            }
+        cmMgr.WatcherUnRegister();
+        TryExitL( iExitReason );
+        
+        cmMgr.RemoveDestFromPool( parentDest );
+        delete parentDest;
+        }
+    else
+        {
+        if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) )
+            {
+            if( iParent )
+                {
+                iParent->NotifyParentView( KCmNotifiedIapDisappear );
+                }
+            
+            cmMgr.WatcherUnRegister();
+            // In this case, the dialog can go back to the parent view
+            TryExitL( iExitReason );
+            return;
+            }
+        
+        // We may have to notify parent view to go back to its parent view even though this Iap is still in CommsDat
+        // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more
+        // after this call when some Iap is deleted.
+        if( iParent )
+            {
+            iParent->NotifyParentView( KCmNotifiedIapDisappear );
+            }
+        cmMgr.WatcherUnRegister();
+        TryExitL( iExitReason );
+        }
+    }