uifw/AvKon/src/AknInfoPopupNoteController.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknInfoPopupNoteController.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2005, 2006 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:  Implementation of CAknInfoPopupNoteController class.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <AknPictographInterface.h>
+
+#include <AknsDrawUtils.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <eiklabel.h>
+#include <gulicon.h>
+
+#include <eikdef.h>
+#include <coeaui.h>
+
+#include <e32base.h>
+#include <aknappui.h>
+#include <aknsoundsystem.h>
+
+#include "akntextcontrol.h"
+
+#include "AknInfoPopupNoteController.h"
+#include "AknInfoPopupNote.h"
+
+
+// CONSTANTS
+const TInt KInfoPopupNoteTimeDelayBeforeShow = 1000000;  // 1 seconds
+const TInt KInfoPopupNoteTimeInView          = 10000000; // 10 seconds
+const TInt KFromMillisecToMicrosecMultiplier = 1000;
+const TInt KObserverArrayGranularity         = 1;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknInfoPopupNoteController
+//
+// -----------------------------------------------------------------------------
+//
+CAknInfoPopupNoteController::CAknInfoPopupNoteController()
+    : CTimer( 0 ),
+    iState( CAknInfoPopupNoteController::EHidden ),
+    iObservers( KObserverArrayGranularity ),
+    iTimeDelayBeforeShow( KInfoPopupNoteTimeDelayBeforeShow ),
+    iTimeInView( KInfoPopupNoteTimeInView ),
+    iTone( ENoTone )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAknInfoPopupNoteController::ConstructL()
+    {
+    iPopup = CAknInfoPopupNote::NewL( *this );
+    CTimer::ConstructL();
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknInfoPopupNoteController* CAknInfoPopupNoteController::NewL()
+    {
+    CAknInfoPopupNoteController* self = new( ELeave ) CAknInfoPopupNoteController();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ~CAknInfoPopupNoteController
+//
+// -----------------------------------------------------------------------------
+//
+CAknInfoPopupNoteController::~CAknInfoPopupNoteController()
+    {
+    Cancel();
+    if ( iPopup )
+        {
+        delete iPopup;
+        }
+    iObservers.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// SetShowTime
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetTimeDelayBeforeShow( TInt aMilliSeconds )
+    {
+    if ( aMilliSeconds >= 0 )
+        {
+        iTimeDelayBeforeShow = KFromMillisecToMicrosecMultiplier * aMilliSeconds;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// SetHideTime
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetTimePopupInView( TInt aMilliSeconds )
+    {
+    iTimeInView = KFromMillisecToMicrosecMultiplier * aMilliSeconds;
+    }
+
+// -----------------------------------------------------------------------------
+// SetTextL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetTextL( const TDesC& aText )
+    {
+    iPopup->SetTextL( aText );
+    }
+
+// -----------------------------------------------------------------------------
+// ShowInfoPopupNote
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::ShowInfoPopupNote()
+    {
+    // cancel the timer and hide the popup, this also sets initial state
+    Cancel();
+    
+    if(iPopup->IsVisible())
+    {
+    	return;
+    }
+
+    if ( iPopup->GetText() == KNullDesC() )  // if text isn't set before at all
+        {
+        return;
+        }
+
+    // set up timer to wait default of one second before showing the popup
+    iState = CAknInfoPopupNoteController::EWaitingToShow;
+    After( TTimeIntervalMicroSeconds32( iTimeDelayBeforeShow ) );
+    }
+
+// -----------------------------------------------------------------------------
+// HideInfoPopupNote
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::HideInfoPopupNote()
+    {
+    if ( iTimeInView > 0)
+        {
+        Cancel();
+        
+        // If the button from which info popup note was launched,
+        // has keyrepeat timer, the previous Cancel() -call won't
+        // cause DoCancel() call. TSW Error RYPA-7DYCCY.
+        if( iPopup->IsVisible() ) 
+	        {
+	        DoCancel();
+	        }
+	        
+        __ASSERT_ALWAYS( !iPopup->IsVisible(), 
+            User::Panic(_L("Info popup note assert"), KErrUnknown));
+        }        
+    else
+        {
+        iState = CAknInfoPopupNoteController::EHidden;
+        iPopup->Hide();
+        Cancel();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// AddObserverL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::AddObserverL(
+        const MAknInfoPopupNoteObserver& aObserver )
+    {
+    iObservers.InsertInAddressOrderL( &aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+// RemoveObserver
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::RemoveObserver(
+        const MAknInfoPopupNoteObserver& aObserver )
+    {
+    TInt index = iObservers.FindInAddressOrder( &aObserver );
+    if ( index != KErrNotFound )
+        {
+        iObservers.Remove( index );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// SetPositionAndAlignment
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetPositionAndAlignment(
+        const TPoint& aPosition, const TGulAlignmentValue& aAlignment )
+    {
+    iPopup->SetPositionAndAlignment( aPosition, aAlignment );
+    }
+
+// -----------------------------------------------------------------------------
+// SetPositionByHighlight
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetPositionByHighlight(
+        const TRect& aHighlightRect )
+    {
+    iPopup->SetPositionByHighlight( aHighlightRect );
+    }
+
+// -----------------------------------------------------------------------------
+// RestoreDefaultPosition
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::RestoreDefaultPosition()
+    {
+    iPopup->RestoreDefaultPosition();
+    }
+
+// -----------------------------------------------------------------------------
+// SetTooltipModeL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetTooltipModeL(
+        const TBool aTooltipMode )
+    {
+    iPopup->SetTooltipModeL( aTooltipMode );
+    }
+
+// -----------------------------------------------------------------------------
+// HideWhenAppFaded
+//
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CAknInfoPopupNoteController::HideWhenAppFaded( const TBool aHide )
+    {
+    iPopup->HideWhenAppFaded( aHide );
+    }
+
+// -----------------------------------------------------------------------------
+// NotifyObservers
+//
+// -----------------------------------------------------------------------------
+//
+void CAknInfoPopupNoteController::NotifyObservers(
+        MAknInfoPopupNoteObserver::TAknInfoPopupNoteEvent aEvent )
+    {
+    for ( TInt i = 0; i < iObservers.Count(); ++i )
+        {
+        iObservers[i]->HandleInfoPopupNoteEvent( this, aEvent );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAknInfoPopupNoteController::SetTone
+// Set the tone to be played
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknInfoPopupNoteController::SetTone( const TTone& aTone )
+    {
+    iTone = aTone;
+    }
+
+// -----------------------------------------------------------------------------
+// RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CAknInfoPopupNoteController::RunL()
+    {
+    switch ( iState )
+        {
+        case CAknInfoPopupNoteController::EWaitingToShow:
+            iState = CAknInfoPopupNoteController::EShowing;
+            PlayTone();
+            iPopup->ShowL();
+            if ( iTimeInView > 0 )
+                {
+                After( TTimeIntervalMicroSeconds32( iTimeInView ) );    
+                }
+            break;
+
+        case CAknInfoPopupNoteController::EShowing:
+            iState = CAknInfoPopupNoteController::EHidden;
+            iPopup->Hide();
+            break;
+
+        default:
+            User::Panic( _L( "Info popup note" ), KErrUnknown );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAknInfoPopupNoteController::PlayTone
+// Play the tone
+// -----------------------------------------------------------------------------
+//
+void CAknInfoPopupNoteController::PlayTone()
+    {
+    if ( ( iTone != ENoTone ) && ( CEikonEnv::Static()->AppUi() ) )
+        {
+        iAvkonAppUiBase->KeySounds()->PlaySound( iTone );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAknInfoPopupNoteController::DoCancel
+// Implements cancellation of asynchronous operation.
+// -----------------------------------------------------------------------------
+//
+void CAknInfoPopupNoteController::DoCancel()
+    {
+    CTimer::DoCancel();
+    iState = CAknInfoPopupNoteController::EHidden;
+    iPopup->Hide();
+    }
+
+//  End of File