diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/src/akndiscreetpopupserverhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/src/akndiscreetpopupserverhandler.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,501 @@ +/* +* Copyright (c) 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: Avkon discreet popup ui server handler. +* +*/ + + +#include +#include +#include "akndiscreetpopupserverhandler.h" +#include "akndiscreetpopupdata.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::NewL +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupServerHandler* CAknDiscreetPopupServerHandler::NewL() + { + CAknDiscreetPopupServerHandler* self = + CAknDiscreetPopupServerHandler::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::NewLC +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupServerHandler* CAknDiscreetPopupServerHandler::NewLC() + { + CAknDiscreetPopupServerHandler* self = + new ( ELeave ) CAknDiscreetPopupServerHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::~CAknDiscreetPopupServerHandler +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupServerHandler::~CAknDiscreetPopupServerHandler() + { + iLaunchers.ResetAndDestroy(); + iUiServer.Close(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::LaunchGlobalPopup +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupServerHandler::LaunchGlobalPopupL( + const TDesC& aTitle, + const TDesC& aText, + const TAknsItemID& aSkinId, + const TDesC& aBitmapFile, + const TInt& aBitmapId, + const TInt& aMaskId, + const TInt& aFlags, + const TInt& aCommandId, + const TInt& aPopupId, + MEikCommandObserver* aCommandObserver, + const TUid& aAppUid, + const TUid& aViewUid ) + { + CAknDiscreetPopupGlobalParamLauncher* launcher = + CAknDiscreetPopupGlobalParamLauncher::NewL( this, + aCommandObserver, + aCommandId, + aPopupId, + aAppUid, + aViewUid ); + CleanupStack::PushL( launcher ); + launcher->SetData( + aTitle, + aText, + aSkinId, + aBitmapFile, + aBitmapId, + aMaskId, + aFlags ); + iLaunchers.AppendL( launcher ); + CleanupStack::Pop( launcher ); + launcher->LaunchDiscreetPopup(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::LaunchGlobalPopup +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupServerHandler::LaunchGlobalPopupL( + const TInt aResourceId, + const TDesC& aResourceFile, + const TInt& aCommandId, + const TInt& aPopupId, + MEikCommandObserver* aCommandObserver, + const TUid& aAppUid, + const TUid& aViewUid ) + { + CAknDiscreetPopupGlobalResourceLauncher* launcher = + CAknDiscreetPopupGlobalResourceLauncher::NewL( this, + aCommandObserver, + aCommandId, + aPopupId, + aAppUid, + aViewUid ); + CleanupStack::PushL( launcher ); + launcher->SetData( + aResourceId, + aResourceFile ); + iLaunchers.AppendL( launcher ); + CleanupStack::Pop( launcher ); + launcher->LaunchDiscreetPopup(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::PopupClosed +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupServerHandler::PopupClosed( + CAknDiscreetPopupGlobalLauncher* aLauncher ) + { + for ( TInt i = 0; i < iLaunchers.Count(); i++ ) + { + if ( iLaunchers[ i ] == aLauncher ) + { + iLaunchers.Remove( i ); + delete aLauncher; + break; + } + } + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::UiServer +// --------------------------------------------------------------------------- +// +RAknUiServer* CAknDiscreetPopupServerHandler::UiServer() + { + return &iUiServer; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::CheckPopupId +// --------------------------------------------------------------------------- +// +TInt CAknDiscreetPopupServerHandler::CheckPopupId( const TInt& aPopupId ) + { + TInt popupId( aPopupId ); + while ( PopupIdInUse( popupId ) ) + { + popupId++; + } + return popupId; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::CAknDiscreetPopupServerHandler +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupServerHandler::CAknDiscreetPopupServerHandler() + { + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupServerHandler::ConstructL() + { + User::LeaveIfError( iUiServer.Connect() ); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupServerHandler::PopupIdInUse +// --------------------------------------------------------------------------- +// +TBool CAknDiscreetPopupServerHandler::PopupIdInUse( const TInt& aPopupId ) + { + TInt popupId( 0 ); + for ( TInt i = 0; i < iLaunchers.Count(); i++ ) + { + popupId = static_cast( + iLaunchers[ i ]->PopupData() )->PopupId(); + if ( popupId == aPopupId ) + { + return ETrue; + } + } + return EFalse; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::~CAknDiscreetPopupGlobalLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalLauncher::~CAknDiscreetPopupGlobalLauncher() + { + if ( IsActive() && iHandler ) + { + // Cancel request using status handle + TAknDiscreetPopupCancelRequestData cancelData; + cancelData.SetStatusHandle( ( TUint ) &iStatus ); + iHandler->UiServer()->DoDiscreetPopupAction( &cancelData ); + } + Cancel(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::LaunchDiscreetPopup +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalLauncher::LaunchDiscreetPopup() + { + if ( IsActive() ) + { + return; + } + RenewRequest(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::RunL +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalLauncher::RunL() + { + if ( iStatus.Int() != KRequestPending ) + { + if( iCommandObserver ) + { + if( iStatus.Int() == KErrCompletion && iCommandId ) + { + iCommandObserver->ProcessCommandL( iCommandId ); + } + iCommandObserver->ProcessCommandL( EAknDiscreetPopupCmdClose ); + } + if ( iHandler ) + { + iHandler->PopupClosed( this ); + } + } + else + { + RenewRequest(); + } + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::DoCancel +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalLauncher::DoCancel() + { + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::CAknDiscreetPopupGlobalLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalLauncher::CAknDiscreetPopupGlobalLauncher( + CAknDiscreetPopupServerHandler* aHandler, + MEikCommandObserver* aObserver, + const TInt& aCommandId ) + : + CActive( EPriorityStandard ), + iCommandObserver( aObserver ), + iCommandId( aCommandId ), + iHandler( aHandler ) + { + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::ConstructL +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalLauncher::ConstructL() + { + CActiveScheduler::Add( this ); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalLauncher::RenewRequest +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalLauncher::RenewRequest() + { + if ( iHandler ) + { + iHandler->UiServer()->DoDiscreetPopupAction( PopupData(), &iStatus ); + } + SetActive(); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalParamLauncher::~CAknDiscreetPopupGlobalParamLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalParamLauncher::~CAknDiscreetPopupGlobalParamLauncher() + { + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalParamLauncher::NewL +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalParamLauncher* CAknDiscreetPopupGlobalParamLauncher::NewL( + CAknDiscreetPopupServerHandler* aHandler, + MEikCommandObserver* aObserver, + const TInt& aCommandId, + const TInt& aPopupId, + const TUid& aAppUid, + const TUid& aViewUid ) + { + CAknDiscreetPopupGlobalParamLauncher* self = + new ( ELeave ) CAknDiscreetPopupGlobalParamLauncher( + aHandler, aObserver, aCommandId, aPopupId, aAppUid, aViewUid ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalParamLauncher::SetData +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalParamLauncher::SetData( + const TDesC& aTitle, + const TDesC& aText, + const TAknsItemID& aSkinId, + const TDesC& aBitmapFile, + const TInt& aBitmapId, + const TInt& aMaskId, + const TInt& aFlags ) + { + iPopupData.SetTitleText( aTitle ); + iPopupData.SetBodyText( aText ); + iPopupData.SetSkinId( aSkinId ); + iPopupData.SetBitmapFile( aBitmapFile ); + iPopupData.SetBitmapId( aBitmapId ); + iPopupData.SetMaskId( aMaskId ); + iPopupData.SetFlags( aFlags ); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalParamLauncher::CAknDiscreetPopupGlobalParamLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalParamLauncher::CAknDiscreetPopupGlobalParamLauncher( + CAknDiscreetPopupServerHandler* aHandler, + MEikCommandObserver* aObserver, + const TInt& aCommandId, + const TInt& aPopupId, + const TUid& aAppUid, + const TUid& aViewUid ) + : CAknDiscreetPopupGlobalLauncher( aHandler, + aObserver, + aCommandId ) + { + iPopupData.SetPopupId( aPopupId ); + iPopupData.SetAppUid( aAppUid ); + iPopupData.SetViewUid( aViewUid ); + if ( aAppUid == TUid::Null() && !aCommandId ) + { + iPopupData.SetAction( EFalse ); + } + else + { + iPopupData.SetAction( ETrue ); + } + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalParamLauncher::PopupData +// --------------------------------------------------------------------------- +// +TAknDiscreetPopupData* CAknDiscreetPopupGlobalParamLauncher::PopupData() + { + return &iPopupData; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalResourceLauncher::~CAknDiscreetPopupGlobalResourceLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalResourceLauncher::~CAknDiscreetPopupGlobalResourceLauncher() + { + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalResourceLauncher::NewL +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalResourceLauncher* CAknDiscreetPopupGlobalResourceLauncher::NewL( + CAknDiscreetPopupServerHandler* aHandler, + MEikCommandObserver* aObserver, + const TInt& aCommandId, + const TInt& aPopupId, + const TUid& aAppUid, + const TUid& aViewUid ) + { + CAknDiscreetPopupGlobalResourceLauncher* self = + new ( ELeave ) CAknDiscreetPopupGlobalResourceLauncher( + aHandler, aObserver, aCommandId, aPopupId, aAppUid, aViewUid ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalResourceLauncher::SetData +// --------------------------------------------------------------------------- +// +void CAknDiscreetPopupGlobalResourceLauncher::SetData( + const TInt aResourceId, + const TDesC& aResourceFile ) + { + iPopupData.SetResourceFile( aResourceFile ); + iPopupData.SetResourceId( aResourceId ); + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalResourceLauncher::CAknDiscreetPopupGlobalResourceLauncher +// --------------------------------------------------------------------------- +// +CAknDiscreetPopupGlobalResourceLauncher::CAknDiscreetPopupGlobalResourceLauncher( + CAknDiscreetPopupServerHandler* aHandler, + MEikCommandObserver* aObserver, + const TInt& aCommandId, + const TInt& aPopupId, + const TUid& aAppUid, + const TUid& aViewUid ) + : CAknDiscreetPopupGlobalLauncher( aHandler, + aObserver, + aCommandId ) + { + iPopupData.SetPopupId( aPopupId ); + iPopupData.SetAppUid( aAppUid ); + iPopupData.SetViewUid( aViewUid ); + if ( aAppUid == TUid::Null() && !aCommandId ) + { + iPopupData.SetAction( EFalse ); + } + else + { + iPopupData.SetAction( ETrue ); + } + } + + +// --------------------------------------------------------------------------- +// CAknDiscreetPopupGlobalResourceLauncher::PopupData +// --------------------------------------------------------------------------- +// +TAknDiscreetPopupData* CAknDiscreetPopupGlobalResourceLauncher::PopupData() + { + return &iPopupData; + } +