phoneapp/phoneuiview/src/cphonedtmfnumberlistquery.cpp
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonedtmfnumberlistquery.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2007-2008 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:  NumberListQuery for DTMF strings.
+*
+*/
+
+
+
+#include    "cphonedtmfnumberlistquery.h"
+#include    "mphonequeryobserver.h"
+#include    "phoneui.hrh"
+#include    "phonelogger.h"
+#include    <mphcntmatch.h>
+#include    <StringLoader.h>
+#include    <phoneui.rsg>
+
+
+const TInt KPhoneManualDTMFString = R_QTN_ENTER_MANUALLY_QUERY_ITEM;
+const TInt KPhoneFindDTMFString = R_QTN_FIND_QUERY_ITEM;
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfNumberListQuery::CPhoneDtmfNumberListQuery(
+    MEikCommandObserver& aCommandObserver,
+    MPhoneQueryObserver& aQueryObserver,
+    HBufC*& aSelectedDtmfNumber ):
+      CAknListQueryDialog( &iIndex ),
+      iCommandObserver( aCommandObserver ),
+      iQueryObserver ( aQueryObserver ),
+      iSelectedDtmfNumber ( aSelectedDtmfNumber ),
+      iArray( 2 )
+    {
+    }
+// ---------------------------------------------------------------------------
+// CPhoneDtmfNumberListQuery::NewL
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfNumberListQuery* CPhoneDtmfNumberListQuery::NewL( MEikCommandObserver& aCommandObserver,
+                                                           MPhoneQueryObserver& aQueryObserver,
+                                                           HBufC*& aSelectedDtmfNumber  )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::NewL()");
+    CPhoneDtmfNumberListQuery* self = 
+                new ( ELeave ) CPhoneDtmfNumberListQuery( aCommandObserver, 
+                                                          aQueryObserver,
+                                                          aSelectedDtmfNumber );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CPhoneDtmfNumberListQuery::ConstructL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::ConstructL()");
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPhoneDtmfNumberListQuery::~CPhoneDtmfNumberListQuery()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::~CPhoneDtmfNumberListQuery()");
+    iArray.Reset();
+    iQueryObserver.SetQueryDeletedFlag( ETrue );
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneDtmfNumberListQuery::PostLayoutDynInitL
+// ---------------------------------------------------------------------------
+//
+void CPhoneDtmfNumberListQuery::PostLayoutDynInitL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::PostLayoutDynInitL()");
+    HBufC* manual = StringLoader::LoadLC( KPhoneManualDTMFString );
+    HBufC* find = StringLoader::LoadLC( KPhoneFindDTMFString );
+    iArray.AppendL( *find );
+    iArray.AppendL( *manual );
+    SetItemTextArray( &iArray );
+    SetOwnershipType( ELbmDoesNotOwnItemArray ); 
+    CleanupStack::PopAndDestroy( 2, manual ); //find, manual  
+    Layout();
+    DrawDeferred(); 
+    }
+    
+// ---------------------------------------------------------------------------
+// CPhoneDtmfNumberListQuery::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CPhoneDtmfNumberListQuery::OfferKeyEventL( 
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+    if ( aType == EEventKey &&
+        ( aKeyEvent.iScanCode == EStdKeyNo || aKeyEvent.iCode == EKeyNo ) )
+        {
+        OkToExitL( EPhoneCmdEnd );
+        }
+    else if ( aKeyEvent.iScanCode == EStdKeyYes )
+        {
+        return EKeyWasConsumed;        
+        }        
+                
+    return CAknListQueryDialog::OfferKeyEventL( aKeyEvent, aType );     
+    } 
+        
+// ---------------------------------------------------------------------------
+// CPhoneDtmfNumberListQuery::AppendStringToArrayL
+// ---------------------------------------------------------------------------
+//    
+void CPhoneDtmfNumberListQuery::AppendStringToArrayL( TDesC& aString )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::AppendStringToArrayL()");
+    iArray.AppendL( aString );
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneDtmfNumberListQuery::OkToExitL
+//
+// If softkey is select, result buffer can be filled with DTMF string.
+// Selection can be 'Find' then single item fetch is started.
+// 
+// Otherwise forward to base class. 
+//
+// ---------------------------------------------------------------------------
+//
+
+TBool CPhoneDtmfNumberListQuery::OkToExitL( 
+        TInt aButtonId )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneDtmfNumberListQuery::OkToExitL()");
+    TInt index = 0;
+    TInt arraycount = 0;
+    TBool retVal = ETrue;
+    if ( aButtonId == EAknSoftkeySelect || aButtonId == EEikBidOk )
+        {
+        
+        index = ListBox()->CurrentItemIndex();
+        arraycount = ListBox()->Model()->
+                    MatchableTextArray()->MdcaCount();
+        
+        // 'Enter manually' selected.  
+        //  Last in the list.         
+        if ( index == ( arraycount-1 ) )
+            {
+            // Forward pressed CBA to the framework so that we can handle it
+            // in our active state
+            iQueryObserver.ReportQueryCompleteAsync( EPhoneInCallCmdDtmfManualQuery ); 
+            }
+
+        // Fill result buffer with DTMF string.
+        else if ( index <= ( arraycount-3 ) )     
+            {
+            TPtrC ptr = ListBox()->Model()->
+                    MatchableTextArray()->MdcaPoint( index );
+                    
+            // Caller is responsible to delete object
+            iSelectedDtmfNumber = HBufC::NewL( ptr.Length() );
+            iSelectedDtmfNumber->Des().Append( ptr );           
+            //Let the command observer handle this case.
+            iQueryObserver.ReportQueryCompleteAsync( EPhoneCmdDtmfOk );           
+            }
+           
+        //  Make single item fetch if 'Find' selected.  
+        // 'Find' item is second last.
+        else if ( index == ( arraycount-2 ) )
+            {
+             // Forward pressed CBA to the framework so that we can handle it
+            // in our active state
+            iQueryObserver.ReportQueryCompleteAsync( EPhoneInCallCmdDtmfListViewSearch );
+            }
+        }
+        
+    else if ( aButtonId == EPhoneCmdEnd )  
+        {
+        iQueryObserver.ReportQueryCompleteAsync( EPhoneCmdEnd ); 
+        }        
+    
+    return retVal;
+    }
+    
+//  End of File