phonebookui/Phonebook2/UIControls/src/CPbk2FindStringSplitter.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2FindStringSplitter.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* 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:   Utility class for splitting find string into separate words
+*
+*/
+
+
+// INCLUDES
+#include "CPbk2FindStringSplitter.h"
+#include <MPbk2ContactNameFormatter.h>
+#include <badesca.h>
+
+
+//----------------------------------------------------------------------------
+// CPbk2FindStringSplitter::CPbk2FindStringSplitter
+//----------------------------------------------------------------------------
+//
+inline CPbk2FindStringSplitter::CPbk2FindStringSplitter(
+    MPbk2ContactNameFormatter& aNameFormatter ):
+    iNameFormatter( aNameFormatter )
+    {
+    }
+
+
+//----------------------------------------------------------------------------
+// CPbk2FindStringSplitter::~CPbk2FindStringSplitter
+//----------------------------------------------------------------------------
+//
+CPbk2FindStringSplitter::~CPbk2FindStringSplitter()
+    {
+    }
+
+
+//----------------------------------------------------------------------------
+// CPbk2FindStringSplitter::NewL
+//----------------------------------------------------------------------------
+//
+CPbk2FindStringSplitter* CPbk2FindStringSplitter::NewL(
+        MPbk2ContactNameFormatter& aNameFormatter )
+    {
+    CPbk2FindStringSplitter* self = new ( ELeave ) CPbk2FindStringSplitter(
+        aNameFormatter );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+//----------------------------------------------------------------------------
+// CPbk2FindStringSplitter::ConstructL
+//----------------------------------------------------------------------------
+//
+void CPbk2FindStringSplitter::ConstructL()
+    {
+    }
+    
+//----------------------------------------------------------------------------
+// CPbk2FindStringSplitter::SplitTextIntoArrayL
+//----------------------------------------------------------------------------
+//
+MDesCArray* CPbk2FindStringSplitter::SplitTextIntoArrayL( const TDesC& aText )
+    {
+    const TInt KGranularity = 2; 
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( KGranularity );
+    const TInt textLength = aText.Length();
+    for ( TInt beg = 0; beg < textLength; ++beg )
+        {
+        // Skip separators before next word
+        if ( !iNameFormatter.IsFindSeparatorChar( aText[beg] ) )
+            {
+            // Scan the end of the word
+            TInt end = beg;
+            for (; end < textLength &&
+                   !iNameFormatter.IsFindSeparatorChar( aText[end] );
+                ++end )
+                {
+                }
+            const TInt len = end - beg;
+            // Append found word to the array
+            array->AppendL( aText.Mid( beg,len ) );
+            // Scan for next word
+            beg = end;
+            }
+        }
+    return array;
+    }