diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/srvuisrc/EIKNFYUI.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/srvuisrc/EIKNFYUI.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,264 @@ +/* +* Copyright (c) 2002-2008 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: Alert dialog implementation for EIKON Server. +* +*/ + + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include +#include + +#include "EIKNFYUI.H" +#include "EIKSRV.HRH" + +// +// CEikServNotifyAlert +// + +const TInt KSomethingDefinetelyDifferentFromEEikBidCancel( ~( EEikBidCancel ) ); + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CallDisplayNextNote +// --------------------------------------------------------------------------- +// +TInt CallDisplayNextNote( TAny* aThis ) + { + TRAPD( err, ( static_cast( aThis )->DisplayNextNoteL() ) ); + return err; + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::CEikServNotifyAlert +// --------------------------------------------------------------------------- +// +CEikServNotifyAlert::CEikServNotifyAlert() : CAknMessageQueryDialog( ENoTone ) + { + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::~CEikServNotifyAlert +// --------------------------------------------------------------------------- +// +CEikServNotifyAlert::~CEikServNotifyAlert() + { + Reset(); + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::ConstructL +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::ConstructL() + { + SetGloballyCapturing( ETrue ); + + // Constructs with two labels & two buttons. + // Normal priority for CBA's is just ok. + ConstructSleepingDialogL( R_EIKSERV_NOTIFIER_DIALOG2 ); + + TCallBack callback( CallDisplayNextNote, this ); + iDisplayCallback = new (ELeave) CAsyncCallBack( callback, + CActive::EPriorityHigh ); + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::Release +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::Release() + { + if ( iObserver ) + { + iObserver->HandleAlertCompletion( + KSomethingDefinetelyDifferentFromEEikBidCancel ); + } + + delete this; + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::Reset +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::Reset() + { + delete iTitle; + delete iLabel; + delete iBut1; + delete iBut2; + + iTitle = NULL; + iLabel = NULL; + iBut1 = NULL; + iBut2 = NULL; + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::DoLeavingSettingsL +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::DoLeavingSettingsL( const TDesC& aTitle, + const TDesC& aLabel, + const TDesC& aBut1, + const TDesC& aBut2 ) + { + TInt bufferSize = aTitle.Length() + aLabel.Length() + 1; + HBufC* textBuffer = HBufC::NewLC( bufferSize ); + TPtr ptr( textBuffer->Des() ); + + if ( aTitle.Length() ) + { + ptr.Append( aTitle ); + _LIT( KFormFeed, "\f" ); + ptr.Append( KFormFeed ); + } + + if ( aLabel.Length() ) + { + ptr.Append( aLabel ); + } + + if ( ptr.Length() ) + { + static_cast( + Control( EAknMessageQueryContentId ) )->SetMessageTextL( &ptr ); + CleanupStack::Pop( textBuffer ); + } + else + { + // Ownership not transferred. + CleanupStack::PopAndDestroy( textBuffer ); + } + + CEikButtonGroupContainer& bgc = ButtonGroupContainer(); + bgc.SetCommandL( EAknAlertWinButton1, aBut1 ); + bgc.SetCommandL( EAknAlertWinButton2, aBut2 ); + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::DisplayNotifier +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::DisplayNotifier( + const TDesC& aTitle, + const TDesC& aLabel, + const TDesC& aBut1, + const TDesC& aBut2, + MEikNotifyAlertCompletionObserver* aObserver ) + { + // Previous notify still not handled. + if ( iObserver && aObserver ) + { + aObserver->HandleAlertCompletion( + KSomethingDefinetelyDifferentFromEEikBidCancel ); + return; + } + + TRAPD( err, + { + iTitle = aTitle.AllocL(); + iLabel = aLabel.AllocL(); + iBut1 = aBut1.AllocL(); + iBut2 = aBut2.AllocL(); + } + ) + + if ( err ) + { + Reset(); + } + else + { + iObserver = aObserver; + iDisplayCallback->CallBack(); + } + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::DisplayNextNoteL +// --------------------------------------------------------------------------- +// +void CEikServNotifyAlert::DisplayNextNoteL() + { + TRAPD( err, DoLeavingSettingsL( iTitle->Des(), + iLabel->Des(), + iBut1->Des(), + iBut2->Des() ) ); + + // Ownership was transferred. + Reset(); + + if ( err ) + { + // Just make sure that observer will be completed correctly. + OkToExitL( KSomethingDefinetelyDifferentFromEEikBidCancel ); + return; + } + +#ifdef RD_SCALABLE_UI_V2 + if ( AknLayoutUtils::PenEnabled() ) + { + SetGloballyCapturing( ETrue ); + SetPointerCapture( ETrue ); + } +#endif + + RouseSleepingDialog(); + } + + +// --------------------------------------------------------------------------- +// CEikServNotifyAlert::OkToExitL +// --------------------------------------------------------------------------- +// +TBool CEikServNotifyAlert::OkToExitL( TInt aButtonId ) + { +#ifdef RD_SCALABLE_UI_V2 + if ( AknLayoutUtils::PenEnabled() ) + { + SetGloballyCapturing( EFalse ); + SetPointerCapture( EFalse ); + } +#endif + + if ( iObserver ) + { + iObserver->HandleAlertCompletion( aButtonId ); + } + + // To make sure that HandleAlertCompletion() will be + // called only once per DisplayNotifier. + iObserver = NULL; + + // always exit + return ETrue; + } + +// End of file