--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/USIMExtension/src/CPsu2ServiceDialingView.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,351 @@
+/*
+* Copyright (c) 2002-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: A service dialing name list view
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CPsu2ServiceDialingView.h"
+
+// Phonebook 2
+#include <CPbk2UIExtensionView.h>
+#include <MPbk2ViewActivationTransaction.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2ViewExplorer.h>
+#include <Pbk2USimUIRes.rsg>
+#include <CPbk2ViewState.h>
+#include <CPbk2NamesListControl.h>
+#include <Pbk2UIControls.rsg>
+
+// System includes
+#include <StringLoader.h>
+#include <eikmenup.h>
+#include <aknnavide.h>
+#include <aknnavi.h>
+#include <AknUtils.h>
+#include <eikmenub.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/**
+ * Returns ETrue if shift is depressed in given key event.
+ *
+ * @param aKeyEvent Key event.
+ * @return ETrue if shift is pressed.
+ */
+inline TBool ShiftDown( const TKeyEvent& aKeyEvent )
+ {
+ return ( aKeyEvent.iModifiers &
+ ( EModifierShift | EModifierLeftShift | EModifierRightShift ) ) != 0;
+ }
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::CPsu2ServiceDialingView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// --------------------------------------------------------------------------
+//
+CPsu2ServiceDialingView::CPsu2ServiceDialingView(
+ CPbk2UIExtensionView& aExtensionView, CPsu2ViewManager& aViewManager)
+ : CPsu2NameListViewBase(aExtensionView, aViewManager)
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::~CPsu2ServiceDialingView
+// --------------------------------------------------------------------------
+//
+CPsu2ServiceDialingView::~CPsu2ServiceDialingView()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::NewL
+// --------------------------------------------------------------------------
+//
+CPsu2ServiceDialingView* CPsu2ServiceDialingView::NewL
+ ( CPbk2UIExtensionView& aExtensionView,
+ CPsu2ViewManager& aViewManager )
+ {
+ CPsu2ServiceDialingView* self = new ( ELeave ) CPsu2ServiceDialingView
+ ( aExtensionView, aViewManager );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::HandleCommandKeyL
+// --------------------------------------------------------------------------
+//
+TBool CPsu2ServiceDialingView::HandleCommandKeyL( const TKeyEvent& aKeyEvent,
+ TEventCode aType)
+ {
+ const TBool marked( iControl->ContactsMarked() );
+ if ( aKeyEvent.iCode == EKeyOK &&
+ aType == EEventKey )
+ {
+ if ( !ShiftDown( aKeyEvent ) )
+ {
+ if ( marked )
+ {
+ iExtensionView.LaunchPopupMenuL(
+ R_PSU2_SERVICE_DIALING_CONTEXT_MENUBAR);
+ }
+ else
+ {
+ if ( iControl->NumberOfContacts() > 0 )
+ {
+ OpenInfoViewCmdL( *iControl );
+ }
+ }
+ return ETrue;
+ }
+ }
+ // green call
+ else if( aKeyEvent.iCode == EKeyPhoneSend &&
+ aType == EEventKey )
+ {
+ if ( iControl->NumberOfContacts() > 0 && !marked )
+ {
+ HandleCommandL(EPbk2CmdCall);
+ }
+ return ETrue;
+ }
+
+ if ( ShiftDown( aKeyEvent ) )
+ {
+ // Update cbas when shift and msk is pressed.
+ UpdateCbasL();
+ }
+
+ return CPsu2NameListViewBase::HandleCommandKeyL( aKeyEvent, aType );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::DoActivateL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::DoActivateL(const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId, const TDesC8& aCustomMessage)
+ {
+ HBufC* title = StringLoader::LoadLC(R_QTN_SDN_TITLE);
+ TContextPaneIcon icon(EPsu2qgn_menu_simin);
+ CEikImage* image = icon.CreateLC();
+
+ MPbk2ViewActivationTransaction* viewActivationTransaction =
+ Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->
+ HandleViewActivationLC
+ ( iExtensionView.Id(), aPrevViewId, title, image,
+ Phonebook2::EUpdateNaviPane |
+ Phonebook2::EUpdateContextPane |
+ Phonebook2::EUpdateTitlePane );
+
+ // Call base class
+ CPsu2NameListViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage);
+
+ viewActivationTransaction->Commit();
+ CleanupStack::PopAndDestroy(3,title); // viewActivationTransaction,
+ // title, image
+ // Create empty navigation pane
+ if (!iNaviPane)
+ {
+ iNaviPane = static_cast<CAknNavigationControlContainer*>(
+ iAvkonAppUi->StatusPane()->ControlL(
+ TUid::Uid(EEikStatusPaneUidNavi)));
+ }
+ if ( !iNaviDecorator )
+ {
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL();
+ iNaviPane->PushL(*iNaviDecorator);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2FixedDialingView::DoDeactivate
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::DoDeactivate()
+ {
+ if (iNaviPane && iNaviDecorator)
+ {
+ iNaviPane->Pop(iNaviDecorator);
+ }
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ CPsu2NameListViewBase::DoDeactivate();
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::HandleCommandL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::HandleCommandL(TInt aCommand)
+ {
+ switch( aCommand )
+ {
+ case EPsu2CmdOpenServiceDialingInfoView:
+ {
+ OpenInfoViewCmdL( *iControl );
+ break;
+ }
+ default:
+ {
+ CPsu2NameListViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ };
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::DynInitMenuPaneL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::DynInitMenuPaneL(TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+ {
+ switch( aResourceId )
+ {
+ case R_PSU2_SERVICE_DIALING_OPEN_MENUPANE:
+ {
+ const TInt count( iControl->NumberOfContacts() );
+ const TBool marked( iControl->ContactsMarked() );
+
+ if ( count <= 0 || marked )
+ {
+ aMenuPane->SetItemDimmed( EPsu2CmdOpenServiceDialingInfoView , ETrue );
+ }
+ break;
+ }
+ case R_PSU2_SERVICE_DIALING_COPY_MENUPANE:
+ {
+ const TInt count( iControl->NumberOfContacts() );
+ if ( count <= 0 )
+ {
+ aMenuPane->SetItemDimmed( EPbk2CmdCopy, ETrue );
+ }
+ break;
+ }
+ default:
+ {
+ CPsu2NameListViewBase::DynInitMenuPaneL( aResourceId, aMenuPane );
+ break;
+ }
+ };
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::NameListControlResourceId
+// --------------------------------------------------------------------------
+//
+TInt CPsu2ServiceDialingView::NameListControlResourceId() const
+ {
+ return R_PSU2_SERVICE_DIALING_NAME_LIST_CONTROL;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::OpenInfoViewCmdL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::OpenInfoViewCmdL
+ ( MPbk2ContactUiControl& aUiControl ) const
+ {
+ if (!aUiControl.ContactsMarked())
+ {
+ CPbk2ViewState* state = aUiControl.ControlStateL();
+ CleanupStack::PushL(state);
+ Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->
+ ActivatePhonebook2ViewL( TUid::Uid
+ ( EPsu2ServiceDialingInfoViewId ), state );
+
+ CleanupStack::PopAndDestroy(); // state
+ aUiControl.UpdateAfterCommandExecution();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::UpdateCbasL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::UpdateCbasL()
+ {
+ if ( iControl->NumberOfContacts() > 0
+ && !iControl->ContactsMarked() )
+ {
+ // Set middle softkey as Open.
+ iExtensionView.Cba()->SetCommandSetL(R_PSU_SOFTKEYS_OPTIONS_BACK_OPEN);
+ iExtensionView.Cba()->DrawDeferred();
+ }
+ else
+ {
+ if ( iControl->ContactsMarked() )
+ {
+ // Set middle softkey as Context menu.
+ iExtensionView.Cba()->SetCommandSetL(R_PBK2_SOFTKEYS_OPTIONS_BACK_CONTEXT);
+ iExtensionView.Cba()->DrawDeferred();
+ // Change context menu when marked items
+ iExtensionView.MenuBar()->SetContextMenuTitleResourceId
+ ( R_PSU2_SERVICE_DIALING_CONTEXT_MENUBAR );
+ }
+ else
+ {
+ // Set middle softkey as Open.
+ iExtensionView.Cba()->SetCommandSetL(R_PBK2_SOFTKEYS_OPTIONS_BACK_EMPTY);
+ iExtensionView.Cba()->DrawDeferred();
+ // Change context menu when nameslist is empty
+ iExtensionView.MenuBar()->SetContextMenuTitleResourceId
+ ( R_PSU2_SERVICE_DIALING_CONTEXT_MENUBAR );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2ServiceDialingView::HandleControlEventL
+// --------------------------------------------------------------------------
+//
+void CPsu2ServiceDialingView::HandleControlEventL(
+ MPbk2ContactUiControl& aControl,
+ const TPbk2ControlEvent& aEvent )
+ {
+ switch ( aEvent.iEventType )
+ {
+ case TPbk2ControlEvent::EContactDoubleTapped:
+ {
+ if ( iControl->ContactsMarked() )
+ {
+ iExtensionView.LaunchPopupMenuL(
+ R_PSU2_SERVICE_DIALING_CONTEXT_MENUBAR);
+ }
+ else
+ {
+ // Open contact
+ HandleCommandL( EPsu2CmdOpenServiceDialingInfoView );
+ }
+ break;
+ }
+
+ default:
+ {
+ CPsu2NameListViewBase::HandleControlEventL( aControl, aEvent );
+ break;
+ }
+ }
+ }
+// End of File