uifw/EikStd/srvuisrc/EIKNFYUI.CPP
changeset 0 2f259fa3e83a
--- /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