phonebookui/Phonebook2/USIMExtension/src/CPsu2ServiceDialingView.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /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