diff -r 2669f8761a99 -r fbd2e7cec7ef presencesettingsui/src/psuigspluginsettingview.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#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