--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2AppViewBase.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,346 @@
+/*
+* Copyright (c) 2005-2007 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: Phonebook 2 application view base.
+*
+*/
+
+
+// INCLUDE FILES
+#include <CPbk2AppViewBase.h>
+
+// Phonebook 2
+#include <CPbk2AppUiBase.h>
+#include <CPbk2DocumentBase.h>
+#include <MPbk2KeyEventHandler.h>
+#include <MPbk2ApplicationServices.h>
+
+// System includes
+#include <eikmenub.h>
+#include <eikapp.h>
+#include <barsread.h>
+#include <AknUtils.h>
+#include <aknViewAppUi.h>
+#include <aknstyluspopupmenu.h>
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::CPbk2AppViewBase
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2AppViewBase::CPbk2AppViewBase()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::~CPbk2AppViewBase
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2AppViewBase::~CPbk2AppViewBase()
+ {
+ ClosePopup();
+ CloseStylusPopup();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::ApplicationUid
+// --------------------------------------------------------------------------
+//
+EXPORT_C TUid CPbk2AppViewBase::ApplicationUid() const
+ {
+ return AppUi()->Application()->AppDllUid();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::ViewStateLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2ViewState* CPbk2AppViewBase::ViewStateLC() const
+ {
+ // Default implementation
+ CPbk2ViewState* state = NULL;
+ CleanupStack::PushL(state);
+ return state;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::LaunchPopupMenuL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::LaunchPopupMenuL( TInt aResourceId )
+ {
+ // In future we should study if the whole menubar thingy could be
+ // removed and use context menu instead since its already used
+ // anyway
+
+ // these are used to check if our popup or context menu is open
+ TBool isPopupVisible=EFalse;
+ TBool isContextVisible=MenuBar()->IsDisplayed();
+
+ if (iPopup)
+ {
+ // check if popup is already there
+ isPopupVisible=iPopup->IsDisplayed();
+ // popup and context menu shouldn't be visible
+ if ((!isPopupVisible) && (!isContextVisible))
+ {
+ // destroy exisiting
+ ClosePopup();
+ // and show new popup
+ CreatePopupMenuL(aResourceId);
+ }
+ }
+ // we don't have popup
+ else
+ {
+ // and context menu is not shown
+ if (!isContextVisible)
+ {
+ CreatePopupMenuL(aResourceId);
+ }
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::CreatePopupMenuL
+// --------------------------------------------------------------------------
+//
+void CPbk2AppViewBase::CreatePopupMenuL( TInt aResourceId )
+ {
+ iPopup = new(ELeave) CEikMenuBar;
+ TRAPD(err, DoLaunchPopupL(aResourceId));
+ if (err)
+ {
+ ClosePopup();
+ User::Leave(err);
+ }
+ }
+
+
+
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::GetMenuFilteringFlagsL
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2AppViewBase::GetMenuFilteringFlagsL() const
+ {
+ MPbk2AppUi* appUi = Phonebook2::Pbk2AppUi();
+
+ return ( GetViewSpecificMenuFilteringFlagsL() |
+ appUi->ApplicationServices().
+ GlobalMenuFilteringFlagsL() );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::HandleCommandKeyL
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CPbk2AppViewBase::HandleCommandKeyL
+ ( const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/ )
+ {
+ return EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::HandlePointerEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::HandlePointerEventL
+ ( const TPointerEvent& /*aPointerEvent*/ )
+ {
+ // Do nothing by default
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::HandleLongTapEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::HandleLongTapEventL(
+ const TPoint& /*aPenEventLocation*/,
+ const TPoint& /*aPenEventScreenLocation*/)
+ {
+ // Do nothing by default
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::ProcessCommandL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::ProcessCommandL( TInt aCommand )
+ {
+ // Close popup menu if open
+ ClosePopup();
+
+ // Call base class
+ CAknView::ProcessCommandL( aCommand );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::Pbk2ProcessKeyEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CPbk2AppViewBase::Pbk2ProcessKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ // If a menu is displayed, handle the send key event
+ // by letting the framework handle it; In practice the
+ // dailler is launched
+ if (MenuBar()->MenuPane() && MenuBar()->IsDisplayed())
+ {
+ if ( (aType == EEventKey || aType == EEventKeyUp
+ || aType == EEventKeyDown ) && aKeyEvent.iScanCode == EStdKeyYes )
+ {
+ // Key event is not handled by me, offer it to the default handler
+ return Phonebook2::Pbk2AppUi()->KeyEventHandler().
+ Pbk2ProcessKeyEventL( aKeyEvent, aType );
+ }
+ }
+
+ // Offer key first to self. Derived class may override HandleCommandKeyL.
+ if ( HandleCommandKeyL( aKeyEvent, aType ) )
+ {
+ return ETrue;
+ }
+ else
+ {
+ // Ignore Send Key up and down events to prevent Dialer appearance or
+ // any other application from launhing on top of or behind the Phonebook application.
+ if ( ( aType == EEventKeyDown || aType == EEventKeyUp )
+ && aKeyEvent.iScanCode == EStdKeyYes )
+ {
+ return ETrue;
+ }
+ else
+ {
+ // Key event is not handled by me, offer it to the default handler
+ return Phonebook2::Pbk2AppUi()->KeyEventHandler().
+ Pbk2ProcessKeyEventL( aKeyEvent, aType );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::Pbk2ProcessPointerEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::Pbk2ProcessPointerEventL
+ ( const TPointerEvent& aPointerEvent )
+ {
+ HandlePointerEventL( aPointerEvent );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::Pbk2HandleLongTapEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::Pbk2HandleLongTapEventL(
+ const TPoint& aPenEventLocation,
+ const TPoint& aPenEventScreenLocation )
+ {
+ HandleLongTapEventL( aPenEventLocation, aPenEventScreenLocation );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::DoLaunchPopupL
+// --------------------------------------------------------------------------
+//
+void CPbk2AppViewBase::DoLaunchPopupL(TInt aResourceId)
+ {
+ iPopup->ConstructL(this, 0, aResourceId);
+ iPopup->SetMenuType( CEikMenuBar::EMenuContext );
+ AppUi()->AddToViewStackL(*this, iPopup,
+ ECoeStackPriorityMenu, ECoeStackFlagRefusesFocus);
+ iPopup->TryDisplayMenuBarL();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::ClosePopup
+// Removes the popup from the view stack and deletes it.
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::ClosePopup()
+ {
+ if ( iPopup && iPopup->MenuPane() )
+ {
+ iPopup->StopDisplayingMenuBar();
+ AppUi()->RemoveFromViewStack(*this, iPopup);
+ delete(iPopup);
+ iPopup=NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::LaunchStylusPopupMenuL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AppViewBase::LaunchStylusPopupMenuL(
+ TInt aResourceId,
+ const TPoint& aPoint )
+ {
+ CloseStylusPopup();
+ TRAPD( err, DoLaunchStylusPopupL( aResourceId, aPoint ) );
+ if ( err )
+ {
+ CloseStylusPopup();
+ User::Leave( err );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::LaunchStylusPopupMenuL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CAknStylusPopUpMenu& CPbk2AppViewBase::LaunchStylusPopupMenu2L(
+ TInt aResourceId,
+ const TPoint& aPoint )
+ {
+ LaunchStylusPopupMenuL( aResourceId, aPoint );
+ return *iStylusPopup;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::DoLaunchStylusPopupL
+// --------------------------------------------------------------------------
+//
+void CPbk2AppViewBase::DoLaunchStylusPopupL
+ ( TInt aResourceId, const TPoint& aPoint )
+ {
+ iStylusPopup = CAknStylusPopUpMenu::NewL( this, aPoint, NULL );
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, aResourceId );
+ iStylusPopup->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader
+
+ iStylusPopup->SetPosition( aPoint );
+
+ if(IsForeground())
+ {
+ iStylusPopup->ShowMenu();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AppViewBase::CloseStylusPopup
+// --------------------------------------------------------------------------
+//
+void CPbk2AppViewBase::CloseStylusPopup()
+ {
+ if ( iStylusPopup )
+ {
+ delete iStylusPopup;
+ iStylusPopup = NULL;
+ }
+ }
+
+// End of File