diff -r 000000000000 -r ba25891c3a9e appinstaller/AppMngr2/src/appmngr2listview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appinstaller/AppMngr2/src/appmngr2listview.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,345 @@ +/* +* Copyright (c) 2008-2009 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: Base class for different AppMngr2 list views +* +*/ + + +#include "appmngr2listview.h" // CAppMngr2ListView +#include "appmngr2listcontainer.h" // CAppMngr2ListContainer +#include "appmngr2appui.h" // CAppMngr2AppUi +#include "appmngr2model.h" // CAppMngr2Model +#include "appmngr2log.h" // CAppMngr2Log +#include "appmngr2.hrh" // Command IDs +#include // CAppMngr2Runtime +#include // CAppMngr2InfoBase +#include // CleanupResetAndDestroyPushL +#include // FLOG macros +#include // generic command ids +#include // KDC_RESOURCE_FILES_DIR +#include // FeatureManager +#include // BaflUtils +#include // CEikonEnv +#include // CAknViewAppUi +#include // CEikMenuBar, CEikMenuPane +#include // CEikMenuPaneItem +#include // CAknTitlePane +#include // StringLoader +#include // CAknInfoPopupNoteController +#include // Resource IDs + +const TUid KStatusPaneUid = { EEikStatusPaneUidTitle }; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::ConstructL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::ConstructL( TInt aResourceId ) + { + FLOG( "CAppMngr2ListView::ConstructL( 0x%08x )", aResourceId ); + + BaseConstructL( aResourceId ); + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::~CAppMngr2ListView() +// --------------------------------------------------------------------------- +// +CAppMngr2ListView::~CAppMngr2ListView() + { + FLOG( "CAppMngr2ListView::~CAppMngr2ListView" ); + + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + delete iInfoPopup; + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::RefreshL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::RefreshL( TInt aMoreRefreshesExpected ) + { + if( iContainer ) + { + TBool selectedItemChanged = EFalse; + iContainer->RefreshL( iMaintainFocus, selectedItemChanged, aMoreRefreshesExpected ); + if( selectedItemChanged ) + { + UpdateMiddleSoftkeyCommandL(); + StopDisplayingMenuBar(); + iMaintainFocus = EFalse; + } + + // Close progress note used in application startup + if( iInfoPopup && !aMoreRefreshesExpected ) + { + iInfoPopup->HideInfoPopupNote(); + delete iInfoPopup; + iInfoPopup = NULL; + } + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::UpdateMiddleSoftkeyCommandL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::UpdateMiddleSoftkeyCommandL() + { + FLOG_PERF_STATIC_BEGIN( UpdateMiddleSoftkeyCommandL ); + + if( iContainer && !iContainer->IsListEmpty() ) + { + // add item-specific MSK if the current item has one + CAppMngr2InfoBase& currentItem = iContainer->CurrentItem(); + TInt resourceId = 0; + TInt commandId = 0; + currentItem.GetMiddleSoftkeyCommandL( resourceId, commandId ); + if( resourceId && commandId ) + { + SetMiddleSoftkeyCommandL( resourceId, commandId ); + } + else + { + SetDefaultMiddleSoftkeyCommandL(); + } + } + else + { + // list is empty, remove old MSK if it has been added and set the default + CEikButtonGroupContainer* cba = Cba(); + if( iMiddleSoftkeyCommandId && cba ) + { + cba->RemoveCommandFromStack( CEikButtonGroupContainer::EMiddleSoftkeyPosition, + iMiddleSoftkeyCommandId ); + } + SetDefaultMiddleSoftkeyCommandL(); + } + + FLOG_PERF_STATIC_END( UpdateMiddleSoftkeyCommandL ) + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::CurrentItemSelectedByUser() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::CurrentItemSelectedByUser( TBool aMaintainFocus ) + { + iMaintainFocus = aMaintainFocus; + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::HandleViewRectChange() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::HandleViewRectChange() + { + if( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::HandleCommandL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::HandleCommandL( TInt aCommand ) + { + FLOG( "CAppMngr2ListView::HandleCommandL( %d )", aCommand ); + + switch( aCommand ) + { + case EAknSoftkeyBack: + AppUi()->HandleCommandL( EAknSoftkeyExit ); + break; + + case EAppMngr2CmdLog: + { + CAppMngr2Log* log = CAppMngr2Log::NewLC(); + log->ShowInstallationLogL(); + CleanupStack::PopAndDestroy( log ); + } + break; + + case EAknCmdHelp: + case EAknCmdExit: + AppUi()->HandleCommandL( aCommand ); + break; + + default: + Model().HandleCommandL( iContainer->CurrentItem(), aCommand ); + break; + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::DynInitMenuPaneL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + if( aResourceId == R_APPMNGR2_INSTALLED_MENU + || aResourceId == R_APPMNGR2_PACKAGES_MENU ) + { + if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + + // Keep the currently selected item focused in forthcoming list refreshes. + iMaintainFocus = ETrue; + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::DoActivateL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/ ) + { + FLOG( "CAppMngr2ListView::DoActivateL, id 0x%08x", Id().iUid ); + + CAknTitlePane* titlePane = NULL; + titlePane = static_cast( StatusPane()->ControlL( KStatusPaneUid ) ); + SetTitleL( *titlePane ); + + if( iContainer == NULL ) + { + iContainer = CreateContainerL(); + iContainer->SetMopParent( this ); + AppUi()->AddToViewStackL( *this, iContainer ); + iContainer->ActivateL(); + } + UpdateMiddleSoftkeyCommandL(); + + if( iInfoPopup == NULL ) + { + iInfoPopup = CAknInfoPopupNoteController::NewL(); + iInfoPopup->SetTimePopupInView( 0 ); + iInfoPopup->HideWhenAppFaded( EFalse ); + HBufC* noteText = StringLoader::LoadLC( R_QTN_AM_SCANNING_MEMORY ); + iInfoPopup->SetTextL( *noteText ); + CleanupStack::PopAndDestroy( noteText ); + iInfoPopup->ShowInfoPopupNote(); + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::DoDeactivate() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::DoDeactivate() + { + FLOG( "CAppMngr2ListView::DoDeactivate, id 0x%08x", Id().iUid ); + + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + if( iInfoPopup ) + { + delete iInfoPopup; + iInfoPopup = NULL; + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::Model() +// --------------------------------------------------------------------------- +// +CAppMngr2Model& CAppMngr2ListView::Model() const + { + return reinterpret_cast( iEikonEnv->EikAppUi() )->Model(); + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::AddDynamicMenuItemsL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::AddDynamicMenuItemsL( CAppMngr2InfoBase& aCurrentItem, + CEikMenuPane* aMenuPane ) + { + if( aMenuPane ) + { + FLOG_PERF_STATIC_BEGIN( AddDynamicMenuItemsL ); + + TInt position = 0; + if( aMenuPane->MenuItemExists( EAppMngr2PlaceForPluginSpecificCmds, position ) ) + { + aMenuPane->DeleteMenuItem( EAppMngr2PlaceForPluginSpecificCmds ); + + RPointerArray menuItems; + CleanupResetAndDestroyPushL( menuItems ); + + TRAPD( err, aCurrentItem.GetMenuItemsL( menuItems ) ); + if( !err ) + { + TInt count = menuItems.Count(); + for( TInt index = 0; index < count; index++ ) + { + aMenuPane->InsertMenuItemL( *( menuItems[ index ] ), position++ ); + aMenuPane->SetItemSpecific( menuItems[ index ]->iCommandId, ETrue ); + } + } + + CleanupStack::PopAndDestroy( &menuItems ); + } + + FLOG_PERF_STATIC_END( AddDynamicMenuItemsL ) + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::SetMiddleSoftkeyCommandL() +// --------------------------------------------------------------------------- +// +void CAppMngr2ListView::SetMiddleSoftkeyCommandL( TInt aResourceId, TInt aCommandId ) + { + CEikButtonGroupContainer* cba = Cba(); + if( cba ) + { + // remove old command from the stack if it is already added + if( iMiddleSoftkeyCommandId ) + { + cba->RemoveCommandFromStack( CEikButtonGroupContainer::EMiddleSoftkeyPosition, + iMiddleSoftkeyCommandId ); + } + HBufC* middleSoftkeyLabel = StringLoader::LoadLC( aResourceId ); + cba->AddCommandToStackL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, + aCommandId, *middleSoftkeyLabel ); + CleanupStack::PopAndDestroy( middleSoftkeyLabel ); + iMiddleSoftkeyCommandId = aCommandId; + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2ListView::CAppMngr2ListView() +// --------------------------------------------------------------------------- +// +CAppMngr2ListView::CAppMngr2ListView() + { + } +