diff -r 2580314736af -r 2669f8761a99 presencesettingsui/src/psuigsplugin.cpp --- a/presencesettingsui/src/psuigsplugin.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,561 +0,0 @@ -/* -* Copyright (c) 2006-2010 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: GSFW implementation for Presence Settings UI GS plugin. -* -*/ - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "psuigsplugin.h" -#include "psuigsplugin.hrh" -#include "psuigsplugincontainer.h" -#include "psuigspluginids.hrh" -#include "psuigspluginmodel.h" -#include "psuigspluginsettingview.h" - -// CONSTANTS -_LIT( KPSUIGSPluginResourceFileName, "z:\\resource\\psuigspluginrsc.rsc" ); - -#ifdef __SCALABLE_ICONS -// bitmap -_LIT( KPSUIGSPluginIconFileName, "\\resource\\apps\\psuigsplugin.mif"); -#else //__SCALABLE_ICONS -// svg file -_LIT( KPSUIGSPluginIconFileName, "\\resource\\apps\\psuigsplugin.mbm"); -#endif //__SCALABLE_ICONS - -// ========================= MEMBER FUNCTIONS ================================ - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::CPSUIGSPlugin() -// C++ default constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------------------------- -// -CPSUIGSPlugin::CPSUIGSPlugin() - : iClosing ( EFalse ) - { - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::~CPSUIGSPlugin() -// Destructor -// --------------------------------------------------------------------------- -// -CPSUIGSPlugin::~CPSUIGSPlugin() - { - delete iPSModel; - FeatureManager::UnInitializeLib(); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::ConstructL -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::ConstructL() - { - // preparing resources for use - TFileName fileName( KPSUIGSPluginResourceFileName ); - BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName ); - iResourceLoader.OpenL( fileName ); - // base construct (base needs the resources to be loaded 1st) - BaseConstructL( R_PSUI_MAIN_VIEW ); - FeatureManager::InitializeLibL(); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::NewL() -// Two-phased constructor. -// --------------------------------------------------------------------------- -// -CPSUIGSPlugin* CPSUIGSPlugin::NewL( TAny* /*aAppUi*/ ) - { - CPSUIGSPlugin* self = new( ELeave ) CPSUIGSPlugin(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::Id() -// See header for details. -// --------------------------------------------------------------------------- -// -TUid CPSUIGSPlugin::Id() const - { - return TUid::Uid( PSUIGSPluginImplUid ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::NewContainerL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::NewContainerL() - { - iContainer = new ( ELeave ) CPSUIGSPluginContainer( this ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::DoActivateL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - if ( KPreSettingViewId != aPrevViewId.iViewUid ) - { - iPSUIGSPrevViewId = aPrevViewId; - } - - // model & observer constructed only when needed - if ( !iPSModel ) - { - iPSModel = CPSUIGSPluginModel::NewL(); - iAppUi->AddViewDeactivationObserverL( this ); - } - - const TInt id = iPSModel->SettingsId(); - if ( id ) - {// readjust the focus - SetCurrentItem( iPSModel->SettingsIDArray().Find( id )); - } - - iClosing = EFalse; - CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); - UpdateMSK(); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::DoDeactivate() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::DoDeactivate() - { - CGSBaseView::DoDeactivate(); - if ( iClosing ) - {// PSUI plugin is going to be closed so it is safe to free some memory - delete iPSModel; - iPSModel = NULL; - delete iSettingView; - iSettingView = NULL; - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::HandleViewDeactivation() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::HandleViewDeactivation( - const TVwsViewId& aViewIdToBeDeactivated, - const TVwsViewId& aNewlyActivatedViewId) - { - if ( TUid::Uid( PSUIGSPluginImplUid ) == aViewIdToBeDeactivated.iViewUid && - iPSUIGSPrevViewId.iViewUid == aNewlyActivatedViewId.iViewUid ) - { - iClosing = ETrue; - iAppUi->RemoveViewDeactivationObserver( this ); - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::HandleCommandL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - case EAknSoftkeyBack: - { - RemoveSettingView(); - iAppUi->ActivateLocalViewL( iPSUIGSPrevViewId.iViewUid ); - break; - } - case EPSUICmdEdit: - { - HandleListBoxSelectionL(); - break; - } - case EPSUICmdDelete: - { - DeleteSettingsL(); - break; - } - case EPSUICmdNewSettingsDefault: - { - CreateNewDefaultSettingsL(); - break; - } - case EPSUICmdNewSettingsExisting: - { - CreateCopyOfExistingSettingsL(); - break; - } - case EAknCmdHelp: - { - if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - HlpLauncher::LaunchHelpApplicationL( - iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); - } - break; - } - default: - { - iAppUi->HandleCommandL( aCommand ); - break; - } - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::SettingCountAndIndex() -// See header for details. -// --------------------------------------------------------------------------- -// -TInt CPSUIGSPlugin::SettingCountAndIndex( TInt& aIndex ) - { - CEikTextListBox* listbox = Container()->iListBox;// not owned - TInt count = listbox->Model()->NumberOfItems(); - aIndex = count ? listbox->CurrentItemIndex() : KErrNotFound; - - return count; - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::HandleListBoxSelectionL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::HandleListBoxSelectionL() - { - TInt index = KErrNotFound; - if ( SettingCountAndIndex( index )) - { - iPSModel->EditSettingsL( index ); - - ConstructSettingViewL(); - iAppUi->ActivateLocalViewL( KPreSettingViewId ); - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::DeleteSettingsL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::DeleteSettingsL() - { - TInt index = KErrNotFound; - TInt count = SettingCountAndIndex( index ); - if ( count ) - { - if ( AcceptDeletionL( count, index )) - { - iPSModel->DeleteSettingsL( index, ETrue ); - CEikTextListBox* listbox = Container()->iListBox;// not owned - AknListBoxUtils::HandleItemRemovalAndPositionHighlightL( - listbox, index, ETrue ); - listbox->DrawNow(); - UpdateMSK(); - } - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::AcceptDeletionL() -// See header for details. -// --------------------------------------------------------------------------- -// -TBool CPSUIGSPlugin::AcceptDeletionL( TInt aCount, TInt aIndex ) - { - HBufC* currentName = iPSModel->SettingNameLC( aIndex ); - HBufC* string = NULL; - if ( aCount == 1 ) - { - string = StringLoader::LoadLC( R_QTN_PRESENCE_SETTINGS_DELETE_LAST, *currentName ); - } - else - { - string = StringLoader::LoadLC( R_QTN_QUERY_COMMON_CONF_DELETE, *currentName ); - } - - CAknQueryDialog* query = CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone ); - TInt ok = query->ExecuteLD( R_PSUI_CONF_QUERY, *string ); - - CleanupStack::PopAndDestroy( 2, currentName );//currentName, string - - return ( ok ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::GetCaptionL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::GetCaptionL( TDes& aCaption ) const - { - StringLoader::Load( aCaption, R_QTN_SET_FOLDER_PRESENCE ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::PluginProviderCategory() -// See header for details. -// --------------------------------------------------------------------------- -// -TInt CPSUIGSPlugin::PluginProviderCategory() const - { - return KGSPluginProviderInternal; - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::CreateIconL() -// See header for details. -// --------------------------------------------------------------------------- -// -CGulIcon* CPSUIGSPlugin::CreateIconL( const TUid aIconType ) - { - CGulIcon* icon = NULL; - if( aIconType == KGSIconTypeLbxItem ) - { - icon = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnPropSetConnPresence, - KPSUIGSPluginIconFileName, - EMbmPsuigspluginQgn_prop_set_conn_presence, - EMbmPsuigspluginQgn_prop_set_conn_presence_mask ); - } - else - { - icon = CGSPluginInterface::CreateIconL( aIconType ); - } - - return icon; - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::DynInitMenuPaneL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane *aMenuPane ) - { - // remove some of the items if no settings available - const TInt count = Container()->iListBox->Model()->NumberOfItems(); - if ( aResourceId == R_PSUI_MAINVIEW_MENUPANE && - 0 == count ) - { - aMenuPane->DeleteMenuItem( EPSUICmdEdit ); - aMenuPane->DeleteMenuItem( EPSUICmdDelete ); - } - if ( aResourceId == R_PSUI_NEWSETTINGS_MENU && - 0 == count ) - { - aMenuPane->DeleteMenuItem( EPSUICmdNewSettingsExisting ); - } - - // help-item handling - if ( aResourceId == R_PSUI_MAINVIEW_MENUPANE && - !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->DeleteMenuItem( EAknCmdHelp ); - } - - TInt index( KErrNotFound ); - SettingCountAndIndex( index ); - - if ( KErrNotFound < index ) - { - // Hide delete option if sip profile used with presence settings - // is registered. - if ( iPSModel->IsSipProfileRegisteredL( index ) ) - { - TInt pos( KErrNotFound ); - if ( aMenuPane->MenuItemExists( EPSUICmdDelete, pos ) ) - { - aMenuPane->SetItemSpecific( EPSUICmdDelete, EFalse ); - aMenuPane->SetItemDimmed( EPSUICmdDelete, ETrue ); - } - } - else - { - TInt pos( KErrNotFound ); - if ( aMenuPane->MenuItemExists( EPSUICmdDelete, pos ) ) - { - aMenuPane->SetItemSpecific( EPSUICmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EPSUICmdDelete, EFalse ); - } - } - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::PSModel() -// See header for details. -// --------------------------------------------------------------------------- -// -CPSUIGSPluginModel* CPSUIGSPlugin::PSModel() - { - __ASSERT_DEBUG( iPSModel,User::Panic( KPSUIGSPluginPanicCategory, KErrNotFound )); - return iPSModel; - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::ConstructSettingViewL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::ConstructSettingViewL() - { - if ( !iSettingView ) - {// no view yet, construct it - CAknView* view = CPSUIGSPluginSettingView::NewL( this ); - CleanupStack::PushL( view ); - iAppUi->AddViewL( view ); - CleanupStack::Pop( view ); - iSettingView = view; - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::RemoveSettingView() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::RemoveSettingView() - { - // Remove view from iAppUi -> View is deleted by iAppUi automatically. - if ( iSettingView ) - { - iAppUi->RemoveView( KPreSettingViewId ); - iSettingView = NULL; - } - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::CreateNewDefaultSettingsL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::CreateNewDefaultSettingsL() - { - iPSModel->CreateDefaultSettingsL(); - ConstructSettingViewL(); - iAppUi->ActivateLocalViewL( KPreSettingViewId ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::CreateCopyOfExistingSettingsL() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::CreateCopyOfExistingSettingsL() - { - CAknSinglePopupMenuStyleListBox* list = - new ( ELeave ) CAknSinglePopupMenuStyleListBox; - CleanupStack::PushL( list ); - - CAknPopupList* popupList = - CAknPopupList::NewL( list, R_AVKON_SOFTKEYS_OK_CANCEL ); - CleanupStack::PushL( popupList ); - - HBufC* title = StringLoader::LoadLC( R_QTN_PRESENCE_PROPMT_USE_EXIST ); - popupList->SetTitleL( *title ); - CleanupStack::PopAndDestroy( title ); - - list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect ); - list->CreateScrollBarFrameL( ETrue ); - list->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - - CTextListBoxModel* model = list->Model(); - model->SetItemTextArray( iPSModel->SettingNames() );// setting names not owned - model->SetOwnershipType( ELbmDoesNotOwnItemArray ); - list->HandleItemAdditionL(); - - CleanupStack::Pop( popupList ); - TInt keyPress = popupList->ExecuteLD(); - - if ( keyPress ) - { - iPSModel->DuplicateExistingSettingsL( list->CurrentItemIndex() ); - ConstructSettingViewL(); - iAppUi->ActivateLocalViewL( KPreSettingViewId ); - } - - CleanupStack::PopAndDestroy( list ); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::UpdateMSK() -// See header for details. -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::UpdateMSK() - { - if ( !Cba() ) - { - return; - } - - TBool showEdit = ( 0 < Container()->iListBox->Model()->NumberOfItems()); - CEikCba* cba = static_cast< CEikCba* >( Cba()->ButtonGroup() ); - cba->MakeCommandVisible( EPSUICmdEdit, showEdit ); - cba->DrawNow(); - } - -// --------------------------------------------------------------------------- -// CPSUIGSPlugin::HandleListBoxEventL() -// --------------------------------------------------------------------------- -// -void CPSUIGSPlugin::HandleListBoxEventL( - CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent) - { - // if the Select Key has been pressed - if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) || - (aListBoxEvent == MEikListBoxObserver::EEventItemSingleClicked)) - { - HandleListBoxSelectionL(); - } - } - -// End of file