uifw/AvKon/src/aknindicatorpopup.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/aknindicatorpopup.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2007-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:  Interface for controlling the universal status
+*                indicator popup.
+*
+*/
+
+
+#include <AknPreviewPopUpController.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <AknUtils.h>
+#include <AknStatuspaneUtils.h>
+
+#include "aknindicatorpopup.h"
+#include "aknindicatorpopupcontent.h"
+#include "AknIndicatorPlugin.h"
+
+const TInt KDefaultPopUpShowDelay = 0;
+const TInt KDefaultPopUpHideDelay = 6000000; // 6 seconds
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::NewL
+// ---------------------------------------------------------------------------
+//
+CAknIndicatorPopup* CAknIndicatorPopup::NewL()
+    {
+    CAknIndicatorPopup* self = CAknIndicatorPopup::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::NewLC
+// ---------------------------------------------------------------------------
+//
+CAknIndicatorPopup* CAknIndicatorPopup::NewLC()
+    {
+    CAknIndicatorPopup* self = new ( ELeave ) CAknIndicatorPopup();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAknIndicatorPopup::~CAknIndicatorPopup()
+    {
+    delete iController;
+    delete iContent;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::ShowPopup
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::ShowPopup()
+    {
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        iController->ShowPopUp();
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::HidePopup
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::HidePopup()
+    {
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        iController->HidePopUp();
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetPosition
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::SetPosition( const TPoint& aPoint )
+    {
+    // Position is the top right corner.
+    iPosition = aPoint;
+    iController->SetPosition( aPoint );
+    }
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetBottomPosition
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::SetBottomPosition( const TPoint& aPoint )
+    {
+    // Position is the top right corner, so it must be calculated based
+    // on the bottom right corner and the amount of items.
+    TSize popupSize( iContent->MinimumSize() );
+    TPoint position( aPoint );
+    position.iY -= popupSize.iHeight;
+    
+    iPosition = position;
+    iController->SetPosition( position );
+    }
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetSignalStateL
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::SetSignalStateL( TInt aState )
+    {
+    iContent->SetSignalStateL( aState );
+    }
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetBatteryStateL
+// ---------------------------------------------------------------------------
+//
+
+void CAknIndicatorPopup::SetBatteryStateL( TInt aState )
+    {
+    iContent->SetBatteryStateL( aState );
+    }
+// CAknIndicatorPopup::AddItemL
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::AddItemL( TInt aIndicatorUid,
+                                   const TDesC& aText,
+                                   TInt aTextType,
+                                   const CGulIcon* aIcon,
+                                   CAknIndicatorPlugin* aPlugin,
+                                   TInt aPriority )
+    {
+    iContent->AddItemL( aIndicatorUid, aText, aTextType, aIcon, aPlugin, aPriority );
+    iController->UpdateContentSize();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::RemoveItem
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::RemoveItem( TInt aIndicatorUid )
+    {
+    iContent->RemoveItem( aIndicatorUid );
+    iController->UpdateContentSize();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetContentVisible
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::SetContentVisible( TBool aVisible )
+    {
+    iContent->SetContentVisible( aVisible );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::SetObserverL
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::SetObserverL(
+    const MAknPreviewPopUpObserver& aObserver )
+    {
+    if ( iController )
+        {
+        iController->AddObserverL( aObserver );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::RemoveObserver
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::RemoveObserver(
+    const MAknPreviewPopUpObserver& aObserver )
+    {
+    if ( iController )
+        {
+        iController->RemoveObserver( aObserver );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::Controller
+// ---------------------------------------------------------------------------
+//
+const CAknPreviewPopUpController* CAknIndicatorPopup::Controller() const
+    {
+    return iController;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAknIndicatorPopup::UpdatePopupIndicatorL
+// -----------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::UpdatePopupIndicatorL( TInt aIndicatorUid )
+    {
+    iContent->HandlePluginUpdateL( aIndicatorUid );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAknIndicatorPopup::UpdateAllPopupIndicatorsL
+// -----------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::UpdateAllPopupIndicatorsL()
+    {
+    iContent->UpdateAllIndicatorsL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// From base class MCoeControlObserver.
+// Handles events received from the popup content.
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::HandleControlEventL( CCoeControl* aControl,
+                                              TCoeEvent aEventType )
+    {
+    if ( aControl == iContent )
+        {
+        switch ( aEventType )
+            {
+            case CAknIndicatorPopupContent::EAknIndicatorPopupTapEvent:
+                {
+                HidePopup();
+                break;
+                }
+            default:
+                {
+                break;
+                }
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+CAknIndicatorPopup::CAknIndicatorPopup()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknIndicatorPopup::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAknIndicatorPopup::ConstructL()
+    {
+    iContent = CAknIndicatorPopupContent::NewL();
+    iContent->SetObserver( this );
+
+    iController = CAknPreviewPopUpController::NewL(
+        *iContent,
+        CAknPreviewPopUpController::ELayoutSubMenu | CAknPreviewPopUpController::EDontClose );
+
+    iController->SetPopUpShowDelay( KDefaultPopUpShowDelay );
+    iController->SetPopUpHideDelay( KDefaultPopUpHideDelay );
+
+    SetPosition( TPoint( 0, 0 ) );
+    }