presencesettingsui/src/psuigspluginsettingview.cpp
branchRCL_3
changeset 35 fbd2e7cec7ef
parent 0 c8caa15ef882
child 13 b7e70c0792e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presencesettingsui/src/psuigspluginsettingview.cpp	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,319 @@
+/*
+* 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:    Presence Settings UI setting view implementation.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <bautils.h>
+#include <psuigspluginrsc.rsg>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+#include <aknViewAppUi.h>
+#include <featmgr.h>
+#include <hlplch.h>
+#include "psuigsplugin.h"
+#include "psuigspluginsettingview.h"
+#include "psuigspluginmodel.h"
+#include "psuigspluginsettingviewcontainer.h"
+
+// CONSTANTS
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::CPSUIGSPluginSettingView()
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CPSUIGSPluginSettingView::CPSUIGSPluginSettingView( CPSUIGSPlugin* aMainView )
+    : iMainView ( aMainView )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::~CPSUIGSPluginSettingView()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPSUIGSPluginSettingView::~CPSUIGSPluginSettingView()
+    {
+    // iAppUi, iMainView deleted elsewhere
+    if ( iPSUIContainer && iAppUi )
+        {
+        iAppUi->RemoveFromViewStack( *this, iPSUIContainer );
+        delete iPSUIContainer;
+        iPSUIContainer = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CPSUIGSPluginSettingView::ConstructL()
+    {
+    // base construct
+    BaseConstructL( R_PSUI_SETTING_VIEW );
+    iAppUi = AppUi();
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::NewL()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CPSUIGSPluginSettingView* CPSUIGSPluginSettingView::NewL( CPSUIGSPlugin* aMainView )
+    {
+    CPSUIGSPluginSettingView* self = new( ELeave ) CPSUIGSPluginSettingView( aMainView );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::Id()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+TUid CPSUIGSPluginSettingView::Id() const
+    {
+    return KPreSettingViewId;
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::HandleViewRectChange()
+// See header for details.
+// ---------------------------------------------------------------------------
+//  
+void CPSUIGSPluginSettingView::HandleViewRectChange()
+    {
+    if ( iPSUIContainer && iPSUIContainer->ListBox() )
+        {
+        iPSUIContainer->SetRect( ClientRect() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::DoActivateL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//  
+void CPSUIGSPluginSettingView::DoActivateL( const TVwsViewId& aPrevViewId,
+                                  TUid /*aCustomMessageId*/,
+                                  const TDesC8& /*aCustomMessage*/ )
+    {
+    iPrevViewId = aPrevViewId;
+
+    CreateContainerL();
+    iAppUi->AddToViewStackL( *this, iPSUIContainer );
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::DoDeactivate()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+void CPSUIGSPluginSettingView::DoDeactivate()
+    {
+    if ( iPSUIContainer )
+        {
+        iAppUi->RemoveFromViewStack( *this, iPSUIContainer );
+        delete iPSUIContainer;
+        iPSUIContainer = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::HandleCommandL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+void CPSUIGSPluginSettingView::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case EAknSoftkeyBack:
+            {
+            HandleBackKeyL();
+            break;
+            }
+        case EPSUICmdChange:
+            {
+            iPSUIContainer->EditCurrentItemL();
+            break;
+            }
+        case EAknCmdHelp:
+            {
+            if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+                {
+                HlpLauncher::LaunchHelpApplicationL(
+                    iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+                }
+            break;
+            }              
+        default:
+            {
+            if ( EEikCmdExit == aCommand )
+                {
+                HandleMenuExitL();
+                }            
+            
+            iAppUi->HandleCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::CreateContainerL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//
+void CPSUIGSPluginSettingView::CreateContainerL()
+    {
+    // delete container if present
+    if( iPSUIContainer )
+        {
+        iAppUi->RemoveFromViewStack( *this, iPSUIContainer );
+        delete iPSUIContainer;
+        iPSUIContainer = NULL;
+        }
+    
+    // check the data    
+    iMainView->PSModel()->ClearInvalidSIPAndXDMSettingsL();  
+    
+    // create container
+    iPSUIContainer = new ( ELeave ) CPSUIGSPluginSettingViewContainer( this );
+    iPSUIContainer->SetMopParent( this );
+    iPSUIContainer->ConstructL( ClientRect() );
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::HandleBackKeyL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//    
+void CPSUIGSPluginSettingView::HandleBackKeyL()
+    {
+    CPSUIGSPluginModel* psModel = iMainView->PSModel();// not owned
+    
+    TBool okToGoBack = ETrue;
+    TBool okToSave = ETrue;
+    psModel->ClearInvalidSIPAndXDMSettingsL();
+    const TInt id = psModel->SettingsId();
+    
+    // compulsory-field handling
+    if ( !psModel->AllCompulsoryFieldsFilled())
+        {// empty compulsory fields found
+        okToSave = EFalse;
+        HBufC* string = StringLoader::LoadLC( 
+            R_QTN_PRESENCE_SETTINGS_NOT_FILLED );
+        CAknQueryDialog* query = CAknQueryDialog::NewL( 
+            CAknQueryDialog::EConfirmationTone );        
+        if ( !query->ExecuteLD( R_PSUI_CONF_QUERY,  *string ))
+            {
+            okToGoBack = EFalse;
+            }
+        CleanupStack::PopAndDestroy( string );// string         
+        }
+        
+    // same name checking        
+    if ( okToSave && HandleDuplicatePSNamesL() )
+        {// same name found
+        okToGoBack = EFalse;
+        okToSave = EFalse;
+        iPSUIContainer->EditItemL( EPSUIServerNameId, ETrue );
+        }
+     
+    if ( okToSave )
+        {// save settings
+        psModel->SaveSettingsL();
+        }
+    else if ( !okToSave && okToGoBack && id )
+        {// old settings, delete and go back
+        psModel->DeleteSettingsL( id, EFalse );
+        }
+    if ( okToGoBack )
+        {// go back, no save or delete
+        iAppUi->ActivateLocalViewL( iPrevViewId.iViewUid );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::HandleMenuExitL()
+// See header for details.
+// ---------------------------------------------------------------------------
+//  
+void CPSUIGSPluginSettingView::HandleMenuExitL()
+    {
+    CPSUIGSPluginModel* psModel = iMainView->PSModel();// not owned
+    if ( !psModel )
+        {// no model, can't do anything
+        // (leaving would stop exiting, so just return)
+        return;
+        }
+    
+    if ( psModel->AllCompulsoryFieldsFilled() )
+        {// needed fields filled, proceed saving
+        if ( psModel->IsItDuplicatePSName() )
+            {// a dupe name -> change name
+            HBufC* newName = psModel->CreateSettingNameLC( 
+                psModel->SettingsSet().iSetName.AllocL() );
+            psModel->SettingsSet().iSetName.Copy( newName->Des() );
+            CleanupStack::PopAndDestroy( newName );            
+            }
+        // save settings
+        psModel->SaveSettingsL();            
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::HandleDuplicatePSNamesL()
+// See header for details.
+// ---------------------------------------------------------------------------
+// 
+TBool CPSUIGSPluginSettingView::HandleDuplicatePSNamesL()
+    {
+    TBool found = iMainView->PSModel()->IsItDuplicatePSName();
+    if ( found )
+        {
+        HBufC* fullText = StringLoader::LoadLC( 
+            R_QTN_PRESENCE_SETTINGS_NAME_EXISTS, 
+            iMainView->PSModel()->SettingsSet().iSetName );
+        CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); //wait-flag on
+        note->ExecuteLD( *fullText );
+        CleanupStack::PopAndDestroy( fullText );
+        }
+    return found;
+    }
+
+// ---------------------------------------------------------------------------
+// CPSUIGSPluginSettingView::MainView()
+// See header for details.
+// ---------------------------------------------------------------------------
+//    
+CPSUIGSPlugin* CPSUIGSPluginSettingView::MainView()
+    {
+    return iMainView;
+    }
+
+// End of file