--- /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 <uikon/eiknotifyalert.h>
+#endif
+#include <coemain.h>
+#include <eikbtgpc.h>
+#include <aknmessagequerycontrol.h>
+#include <eiksrvui.rsg>
+
+#include "EIKNFYUI.H"
+#include "EIKSRV.HRH"
+
+//
+// CEikServNotifyAlert
+//
+
+const TInt KSomethingDefinetelyDifferentFromEEikBidCancel( ~( EEikBidCancel ) );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CallDisplayNextNote
+// ---------------------------------------------------------------------------
+//
+TInt CallDisplayNextNote( TAny* aThis )
+ {
+ TRAPD( err, ( static_cast<CEikServNotifyAlert*>( 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<CAknMessageQueryControl*>(
+ 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