diff -r 000000000000 -r f72a12da539e idlehomescreen/nativeuicontroller/src/aistyluspopupmenu.cpp --- /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 +#include +#include +#include + +#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 ) ); + } + } +