idlehomescreen/nativeuicontroller/src/aistyluspopupmenu.cpp
changeset 0 f72a12da539e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/nativeuicontroller/src/aistyluspopupmenu.cpp	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2005-2005 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 stylus popup menu.
+*
+*/
+
+
+#include <aknpreviewpopupcontroller.h>
+#include <eikmobs.h>
+#include <aknutils.h>
+#include <barsread.h>
+
+#include "aistyluspopupmenu.h"
+#include "aistyluspopupmenucontent.h"
+
+const TInt KDefaultPopUpShowDelay = 0;
+const TInt KDefaultPopUpHideDelay = 10000000; // 10 seconds
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CAiStylusPopUpMenu::CAiStylusPopUpMenu( MEikMenuObserver* aObserver, 
+    const TPoint& aPoint,
+    CAknPreviewPopUpController* aPopup ) 
+    : iPosition ( aPoint ),
+     iMenuObserver( aObserver ),
+     iPreviewPopup( aPopup )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::ConstructL()
+    {
+    iContent = CAiStylusPopUpMenuContent::NewL();
+    
+    iController = CAknPreviewPopUpController::NewL( *iContent,
+            CAknPreviewPopUpController::ELayoutSubMenu );
+    iController->SetPopUpShowDelay( KDefaultPopUpShowDelay );
+    iController->SetPopUpHideDelay( KDefaultPopUpHideDelay );
+    iController->SetPosition( iPosition );
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::NewL
+// ---------------------------------------------------------------------------
+//
+CAiStylusPopUpMenu* CAiStylusPopUpMenu::NewL( 
+                            MEikMenuObserver* aObserver, const TPoint& aPoint,
+                            CAknPreviewPopUpController* aPopup )
+    {
+    if( !AknLayoutUtils::PenEnabled() )
+        {
+        return NULL;
+        }
+
+    CAiStylusPopUpMenu* self = CAiStylusPopUpMenu::NewLC( aObserver, 
+                                                            aPoint,
+                                                            aPopup );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::NewL
+// ---------------------------------------------------------------------------
+//
+CAiStylusPopUpMenu* CAiStylusPopUpMenu::NewL( 
+                            MEikMenuObserver* aObserver, const TPoint& aPoint )
+    {
+    if( !AknLayoutUtils::PenEnabled() )
+        {
+        return NULL;
+        }
+
+    CAiStylusPopUpMenu* self = CAiStylusPopUpMenu::NewLC( aObserver, 
+                                                            aPoint, NULL );
+    CleanupStack::Pop( self );
+    return self;
+    }
+  
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::NewLC
+// ---------------------------------------------------------------------------
+//
+CAiStylusPopUpMenu* CAiStylusPopUpMenu::NewLC(
+                            MEikMenuObserver* aObserver, const TPoint& aPoint,
+                            CAknPreviewPopUpController* aPopup )
+    {
+    if( !AknLayoutUtils::PenEnabled() )
+        {
+        return NULL;
+        }
+
+    CAiStylusPopUpMenu* self = new ( ELeave ) CAiStylusPopUpMenu( aObserver,
+                                                                    aPoint,
+                                                                    aPopup );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAiStylusPopUpMenu::~CAiStylusPopUpMenu()
+    {
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        delete iController;
+        delete iContent;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::AddMenuItemL
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::AddMenuItemL( const TDesC& aItem, 
+                                                        const TInt aCommandId )
+    {
+    if(AknLayoutUtils::PenEnabled())
+        {
+        iContent->AddMenuItemL( aItem, aCommandId, *this );
+        }
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::RemoveMenuItem
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::RemoveMenuItem( const TInt aCommandId )
+    {
+    if(AknLayoutUtils::PenEnabled())
+        {
+        iContent->RemoveMenuItem( aCommandId );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::SetItemDimmed
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::SetItemDimmed( const TInt aCommandId, const TBool aDimmed )
+    {
+    if(AknLayoutUtils::PenEnabled())
+        {
+        iContent->SetItemDimmed( aCommandId, aDimmed );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::ShowMenu
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::ShowMenu()
+    {
+    if(AknLayoutUtils::PenEnabled())
+        {
+        iController->ShowPopUp();
+        }   
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::SetPosition
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::SetPosition( const TPoint& aPoint )
+    {
+    if(AknLayoutUtils::PenEnabled())
+        {
+        iController->SetPosition( aPoint );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAiStylusPopUpMenu::ConstructFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::ConstructFromResourceL( TResourceReader&
+                                                           aReader )
+    {
+    if(!AknLayoutUtils::PenEnabled())
+        {
+        return;
+        }
+
+    TInt count = aReader.ReadInt16();
+    if ( count > KAiStylusMenuMaxItems )
+        {
+        // Only allowed number of items read from resources.
+        count = KAiStylusMenuMaxItems;
+        }
+    TInt commandId;
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TPtrC text = aReader.ReadTPtrC();
+        commandId = aReader.ReadInt32();
+        iContent->AddMenuItemL( text, commandId, *this );
+        aReader.ReadInt32(); // extension link
+        iController->UpdateContentSize();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class MCoeControlObserver.
+// Handles stylus tap events by forwarding the event to the observer.
+// ---------------------------------------------------------------------------
+//
+void CAiStylusPopUpMenu::HandleControlEventL( CCoeControl* aControl,
+                                                        TCoeEvent aEventType )
+    {
+    if(!AknLayoutUtils::PenEnabled())
+        {
+        return;
+        }
+
+    if ( aControl && aEventType == EEventStateChanged )
+        {
+        if ( iPreviewPopup )
+            {
+            iPreviewPopup->HidePopUp();
+            }
+        iController->HidePopUp();
+        iMenuObserver->ProcessCommandL( iContent->CommandId( aControl ) );
+        }
+    }
+